From edaf4b09fe882b06abfe0f784134cafa46862114 Mon Sep 17 00:00:00 2001 From: Markus Isberg <3e849f2e5c@pm.me> Date: Thu, 27 Oct 2022 17:54:57 +0300 Subject: [PATCH 01/23] Build 0.20.0.0 --- .../Characters/Animation/Ragdoll.cs | 8 +- .../ClientSource/Characters/Character.cs | 16 + .../ClientSource/Characters/CharacterHUD.cs | 2 +- .../Characters/CharacterNetworking.cs | 2 +- .../ClientSource/DebugConsole.cs | 230 +++--- .../ClientSource/GUI/ChatBox.cs | 2 +- .../ClientSource/GUI/CrewManagement.cs | 2 +- .../ClientSource/GUI/FileSelection.cs | 11 + .../BarotraumaClient/ClientSource/GUI/GUI.cs | 57 +- .../ClientSource/GUI/GUITextBlock.cs | 7 + .../ClientSource/GUI/Store.cs | 22 +- .../ClientSource/GUI/SubmarineSelection.cs | 2 +- .../ClientSource/GUI/TabMenu.cs | 493 +------------ .../ClientSource/GUI/TalentMenu.cs | 680 ++++++++++++++++++ .../ClientSource/GUI/UpgradeStore.cs | 34 +- .../GameAnalytics/GameAnalyticsManager.cs | 2 +- .../BarotraumaClient/ClientSource/GameMain.cs | 15 +- .../GameSession/GameModes/CampaignMode.cs | 7 +- .../GameModes/SinglePlayerCampaign.cs | 6 +- .../ClientSource/GameSession/RoundSummary.cs | 2 +- .../ClientSource/Items/CharacterInventory.cs | 4 +- .../Items/Components/ElectricalDischarger.cs | 31 +- .../Components/Machines/Deconstructor.cs | 2 + .../Items/Components/Machines/MiniMap.cs | 2 +- .../Items/Components/Machines/Sonar.cs | 2 +- .../Items/Components/Machines/Steering.cs | 2 +- .../Items/Components/Power/PowerContainer.cs | 40 +- .../ClientSource/Items/Components/Turret.cs | 2 +- .../ClientSource/Items/Item.cs | 9 + .../ClientSource/Items/ItemPrefab.cs | 7 + .../ClientSource/Map/Map/Map.cs | 26 +- .../ClientEntityEventManager.cs | 12 +- .../Networking/ServerList/PingUtils.cs | 32 +- .../ClientSource/Networking/ServerSettings.cs | 30 +- .../ClientSource/Particles/ParticleEmitter.cs | 3 + .../ClientSource/Screens/CampaignUI.cs | 19 +- .../Screens/CharacterEditor/Wizard.cs | 13 +- .../ClientSource/Screens/EditorScreen.cs | 2 +- .../ClientSource/Screens/MainMenuScreen.cs | 4 +- .../ClientSource/Screens/NetLobbyScreen.cs | 6 +- .../ServerListScreen/ServerListScreen.cs | 17 +- .../Screens/SpriteEditorScreen.cs | 3 + .../ClientSource/Screens/SubEditorScreen.cs | 15 +- .../ClientSource/Screens/TestScreen.cs | 53 +- .../Serialization/SerializableEntityEditor.cs | 18 +- .../ClientSource/Settings/SettingsMenu.cs | 19 +- .../StatusEffects/StatusEffect.cs | 22 +- .../WorkshopMenu/Mutable/InstalledTab.cs | 23 +- .../Steam/WorkshopMenu/Mutable/ItemList.cs | 3 +- .../Mutable/MutableWorkshopMenu.cs | 27 +- .../Steam/WorkshopMenu/Mutable/PublishTab.cs | 3 +- .../BarotraumaClient/LinuxClient.csproj | 2 +- Barotrauma/BarotraumaClient/MacClient.csproj | 2 +- .../BarotraumaClient/WindowsClient.csproj | 2 +- .../BarotraumaServer/LinuxServer.csproj | 2 +- Barotrauma/BarotraumaServer/MacServer.csproj | 2 +- .../ServerSource/Characters/CharacterInfo.cs | 2 +- .../Characters/CharacterNetworking.cs | 6 +- .../ServerSource/DebugConsole.cs | 15 + .../BarotraumaServer/ServerSource/GameMain.cs | 2 +- .../GameSession/GameModes/CampaignMode.cs | 5 +- .../GameModes/MultiPlayerCampaign.cs | 5 +- .../Items/Components/DockingPort.cs | 2 +- .../ServerSource/Items/Item.cs | 8 + .../ServerSource/Networking/BanList.cs | 4 +- .../ServerSource/Networking/Client.cs | 5 + .../ServerSource/Networking/GameServer.cs | 86 ++- .../ServerEntityEventManager.cs | 3 +- .../Primitives/Peers/Server/ServerPeer.cs | 4 +- .../BarotraumaServer/WindowsServer.csproj | 2 +- .../Characters/AI/EnemyAIController.cs | 237 +++--- .../AI/Objectives/AIObjectiveCombat.cs | 5 +- .../AI/Objectives/AIObjectiveRepairItem.cs | 4 +- .../SharedSource/Characters/AI/PetBehavior.cs | 52 +- .../AI/ShipCommand/ShipIssueWorker.cs | 4 +- .../Characters/AI/ShipCommandManager.cs | 2 +- .../Characters/Animation/AnimController.cs | 2 +- .../Animation/HumanoidAnimController.cs | 25 +- .../Characters/Animation/Ragdoll.cs | 10 +- .../SharedSource/Characters/Attack.cs | 21 + .../SharedSource/Characters/Character.cs | 148 +++- .../SharedSource/Characters/CharacterInfo.cs | 96 ++- .../Health/Afflictions/AfflictionPrefab.cs | 4 + .../Characters/Health/CharacterHealth.cs | 21 +- .../SharedSource/Characters/Limb.cs | 27 +- .../Characters/Params/CharacterParams.cs | 2 +- .../AbilityConditionals/AbilityCondition.cs | 12 +- .../AbilityConditionCharacter.cs | 14 +- .../AbilityConditionCharacterNotLooted.cs | 19 + .../AbilityConditionCharacterUnconcious.cs | 16 + .../AbilityConditionItem.cs | 6 +- .../AbilityConditionLocation.cs | 8 + .../AbilityConditionMission.cs | 48 +- .../AbilityConditionReduceAffliction.cs | 1 - .../AbilityConditionAllyNearby.cs | 47 ++ .../AbilityConditionCrewMemberUnconscious.cs | 22 + .../AbilityConditionHasAffliction.cs | 2 +- .../AbilityConditionHasItem.cs | 2 +- .../AbilityConditionHasLevel.cs | 43 ++ .../AbilityConditionHasPermanentStat.cs | 11 +- .../AbilityConditionHasTalent.cs | 19 + .../AbilityConditionHoldingItem.cs | 34 + .../AbilityConditionLowestLevel.cs | 23 + .../AbilityConditionNearbyCharacterCount.cs | 39 + .../Talents/Abilities/AbilityObjects.cs | 1 - .../Talents/Abilities/CharacterAbility.cs | 2 +- ...cterAbilityApplyStatusEffectToNonHumans.cs | 35 + .../CharacterAbilityApplyStatusEffects.cs | 71 +- ...racterAbilityApplyStatusEffectsToAllies.cs | 28 +- ...ilityApplyStatusEffectsToApprenticeship.cs | 63 ++ .../CharacterAbilityGainSimultaneousSkill.cs | 20 +- .../CharacterAbilityGiveExperience.cs | 35 + .../Abilities/CharacterAbilityGiveItemStat.cs | 31 + .../CharacterAbilityGiveItemStatToTags.cs | 39 + .../CharacterAbilityGivePermanentStat.cs | 39 +- .../CharacterAbilityGiveReputation.cs | 31 + .../Abilities/CharacterAbilityMarkAsLooted.cs | 18 + .../CharacterAbilityModifyAffliction.cs | 28 +- .../CharacterAbilityReduceAffliction.cs | 27 + .../CharacterAbilityRemoveRandomIngredient.cs | 19 + .../CharacterAbilityResetPermanentStat.cs | 7 +- .../CharacterAbilitySetMetadataInt.cs | 29 + .../Abilities/CharacterAbilityUnlockTree.cs | 29 - .../CharacterAbilityTandemFire.cs | 10 +- ...erAbilityUnlockApprenticeshipTalentTree.cs | 48 ++ .../AbilityGroups/CharacterAbilityGroup.cs | 46 +- .../CharacterAbilityGroupEffect.cs | 30 +- .../CharacterAbilityGroupInterval.cs | 80 ++- .../Characters/Talents/CharacterTalent.cs | 13 +- .../Characters/Talents/TalentPrefab.cs | 28 +- .../Characters/Talents/TalentTree.cs | 138 +++- .../ContentManagement/ContentPath.cs | 2 +- .../ContentManagement/ContentXElement.cs | 4 + .../ContentManagement/Identifier.cs | 4 + .../SharedSource/DebugConsole.cs | 14 +- .../BarotraumaShared/SharedSource/Enums.cs | 47 +- .../EventActions/NPCChangeTeamAction.cs | 10 +- .../Events/EventActions/SpawnAction.cs | 44 +- .../SharedSource/Events/EventSet.cs | 4 +- .../GameSession/AutoItemPlacer.cs | 1 + .../SharedSource/GameSession/CargoManager.cs | 10 + .../SharedSource/GameSession/Data/Factions.cs | 8 + .../GameSession/Data/Reputation.cs | 9 + .../GameSession/GameModes/CampaignMode.cs | 21 +- .../GameSession/GameModes/CampaignSettings.cs | 8 +- .../SharedSource/GameSession/GameSession.cs | 6 +- .../GameSession/UpgradeManager.cs | 26 +- .../Items/Components/DockingPort.cs | 7 +- .../Items/Components/ElectricalDischarger.cs | 102 ++- .../Items/Components/Holdable/Holdable.cs | 55 +- .../Items/Components/Holdable/MeleeWeapon.cs | 4 +- .../Items/Components/Holdable/RepairTool.cs | 15 +- .../Items/Components/ItemComponent.cs | 26 +- .../Components/Machines/Deconstructor.cs | 11 +- .../Items/Components/Machines/Engine.cs | 15 +- .../Items/Components/Machines/Fabricator.cs | 71 +- .../Items/Components/Machines/Pump.cs | 22 +- .../Items/Components/Machines/Reactor.cs | 62 +- .../Items/Components/Machines/Sonar.cs | 28 +- .../Items/Components/Power/PowerContainer.cs | 19 +- .../Items/Components/Projectile.cs | 3 +- .../Items/Components/Repairable.cs | 24 +- .../SharedSource/Items/Components/Wearable.cs | 3 + .../SharedSource/Items/Inventory.cs | 8 + .../SharedSource/Items/Item.cs | 146 +++- .../SharedSource/Items/ItemEventData.cs | 20 +- .../SharedSource/Items/ItemPrefab.cs | 38 +- .../SharedSource/Items/ItemStatManager.cs | 64 ++ .../SharedSource/Items/RelatedItem.cs | 45 +- .../Map/Creatures/BallastFloraBehavior.cs | 11 +- .../SharedSource/Map/Explosion.cs | 25 +- .../SharedSource/Map/Levels/Level.cs | 7 +- .../Levels/LevelObjects/LevelObjectManager.cs | 53 +- .../SharedSource/Map/Map/Location.cs | 62 +- .../SharedSource/Map/Map/LocationType.cs | 4 +- .../SharedSource/Map/Map/Map.cs | 50 +- .../SharedSource/Map/PriceInfo.cs | 3 + .../SharedSource/NetStructBitField.cs | 31 +- .../Networking/ChildServerRelay.cs | 5 + .../Networking/INetSerializableStruct.cs | 102 +-- .../Primitives/Address/LidgrenAddress.cs | 19 + .../Primitives/Endpoint/LidgrenEndpoint.cs | 8 +- .../Networking/Primitives/Message/Message.cs | 153 ++-- .../Primitives/NetworkPeerStructs.cs | 9 +- .../SharedSource/Networking/RespawnManager.cs | 2 +- .../SharedSource/Physics/PhysicsBody.cs | 31 +- .../SharedSource/Prefabs/PrefabCollection.cs | 3 +- .../SharedSource/Screens/NetLobbyScreen.cs | 12 +- .../Serialization/XMLExtensions.cs | 7 + .../StatusEffects/StatusEffect.cs | 92 ++- .../Text/LocalizedString/LocalizedString.cs | 6 +- .../Text/LocalizedString/TagLString.cs | 4 +- .../SharedSource/Text/TextManager.cs | 2 + .../SharedSource/Upgrades/UpgradePrefab.cs | 50 +- Barotrauma/BarotraumaShared/changelog.txt | 108 +++ .../BarotraumaShared/serversettings.xml | 57 -- .../INetSerializableStructTests.cs | 14 +- 197 files changed, 4344 insertions(+), 1773 deletions(-) create mode 100644 Barotrauma/BarotraumaClient/ClientSource/GUI/TalentMenu.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionCharacterNotLooted.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionCharacterUnconcious.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionAllyNearby.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionCrewMemberUnconscious.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionHasLevel.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionHasTalent.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionHoldingItem.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionLowestLevel.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionNearbyCharacterCount.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityApplyStatusEffectToNonHumans.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityApplyStatusEffectsToApprenticeship.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGiveExperience.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGiveItemStat.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGiveItemStatToTags.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGiveReputation.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityMarkAsLooted.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityReduceAffliction.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityRemoveRandomIngredient.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilitySetMetadataInt.cs delete mode 100644 Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityUnlockTree.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CustomAbilities/CharacterAbilityUnlockApprenticeshipTalentTree.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Items/ItemStatManager.cs delete mode 100644 Barotrauma/BarotraumaShared/serversettings.xml diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/Animation/Ragdoll.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/Animation/Ragdoll.cs index dc50608c8..007c6d8a3 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/Animation/Ragdoll.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/Animation/Ragdoll.cs @@ -442,8 +442,7 @@ namespace Barotrauma { foreach (Limb limb in Limbs) { - if (limb == null || limb.IsSevered || limb.ActiveSprite == null) { continue; } - + if (limb == null || limb.IsSevered || limb.ActiveSprite == null || !limb.DoesFlip) { continue; } Vector2 spriteOrigin = limb.ActiveSprite.Origin; spriteOrigin.X = limb.ActiveSprite.SourceRect.Width - spriteOrigin.X; limb.ActiveSprite.Origin = spriteOrigin; @@ -468,7 +467,10 @@ namespace Barotrauma { var damageSound = character.GetSound(s => s.Type == CharacterSound.SoundType.Damage); float range = damageSound != null ? damageSound.Range * 2 : ConvertUnits.ToDisplayUnits(character.AnimController.Collider.GetSize().Length() * 10); - SoundPlayer.PlayDamageSound(limbJoint.Params.BreakSound, 1.0f, limbJoint.LimbA.body.DrawPosition, range: range); + if (!limbJoint.Params.BreakSound.IsNullOrEmpty() && !limbJoint.Params.BreakSound.Equals("none", StringComparison.OrdinalIgnoreCase)) + { + SoundPlayer.PlayDamageSound(limbJoint.Params.BreakSound, 1.0f, limbJoint.LimbA.body.DrawPosition, range: range); + } } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/Character.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/Character.cs index 99557594c..99cd9bd2d 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/Character.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/Character.cs @@ -109,6 +109,22 @@ namespace Barotrauma set => grainStrength = Math.Max(0, value); } + /// + /// Can be used to set camera shake from status effects + /// + public float CameraShake + { + get { return Screen.Selected?.Cam?.Shake ?? 0.0f; } + set + { + if (!MathUtils.IsValid(value)) { return; } + if (Screen.Selected?.Cam != null) + { + Screen.Selected.Cam.Shake = value; + } + } + } + private readonly List bloodEmitters = new List(); public IEnumerable BloodEmitters { diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterHUD.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterHUD.cs index f4742ac64..df6381f18 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterHUD.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterHUD.cs @@ -307,7 +307,7 @@ namespace Barotrauma { if (!brokenItem.IsInteractable(character)) { continue; } float alpha = GetDistanceBasedIconAlpha(brokenItem); - if (alpha <= 0.0f) continue; + if (alpha <= 0.0f) { continue; } GUI.DrawIndicator(spriteBatch, brokenItem.DrawPosition, cam, 100.0f, GUIStyle.BrokenIcon.Value.Sprite, Color.Lerp(GUIStyle.Red, GUIStyle.Orange * 0.5f, brokenItem.Condition / brokenItem.MaxCondition) * alpha); } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterNetworking.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterNetworking.cs index 4a9a99547..8d5e63f26 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterNetworking.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterNetworking.cs @@ -501,7 +501,7 @@ namespace Barotrauma info?.ClearSavedStatValues(statType); for (int i = 0; i < savedStatValueCount; i++) { - string statIdentifier = msg.ReadString(); + Identifier statIdentifier = msg.ReadIdentifier(); float statValue = msg.ReadSingle(); bool removeOnDeath = msg.ReadBoolean(); info?.ChangeSavedStatValue(statType, statValue, statIdentifier, removeOnDeath, setValue: true); diff --git a/Barotrauma/BarotraumaClient/ClientSource/DebugConsole.cs b/Barotrauma/BarotraumaClient/ClientSource/DebugConsole.cs index bfa8a5194..9d6be3cbd 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/DebugConsole.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/DebugConsole.cs @@ -1136,6 +1136,17 @@ namespace Barotrauma }); AssignRelayToServer("debugdraw", false); + AssignOnExecute("debugdrawlocalization", (string[] args) => + { + if (args.None() || !bool.TryParse(args[0], out bool state)) + { + state = !TextManager.DebugDraw; + } + TextManager.DebugDraw = state; + NewMessage("Localization debug draw mode " + (TextManager.DebugDraw ? "enabled" : "disabled"), Color.White); + }); + AssignRelayToServer("debugdraw", false); + AssignOnExecute("togglevoicechatfilters", (string[] args) => { if (args.None() || !bool.TryParse(args[0], out bool state)) @@ -1695,6 +1706,8 @@ namespace Barotrauma config.Language = language; GameSettings.SetCurrentConfig(config); } + + HashSet missingTexts = new HashSet(); //key = text tag, value = list of languages the tag is missing from Dictionary> missingTags = new Dictionary>(); @@ -1755,20 +1768,38 @@ namespace Barotrauma foreach (Type itemComponentType in typeof(ItemComponent).Assembly.GetTypes().Where(type => type.IsSubclassOf(typeof(ItemComponent)))) { - foreach (var property in itemComponentType.GetProperties()) + checkSerializableEntityType(itemComponentType); + } + checkSerializableEntityType(typeof(Item)); + checkSerializableEntityType(typeof(Hull)); + checkSerializableEntityType(typeof(Structure)); + + void checkSerializableEntityType(Type t) + { + foreach (var property in t.GetProperties()) { - if (!property.IsDefined(typeof(InGameEditable), false)) { continue; } + if (!property.IsDefined(typeof(Editable), false)) { continue; } string propertyTag = $"{property.DeclaringType.Name}.{property.Name}"; - addIfMissingAll(language, + if (addIfMissingAll(language, propertyTag.ToIdentifier(), property.Name.ToIdentifier(), - $"sp.{propertyTag}.name".ToIdentifier()); + $"sp.{property.Name}.name".ToIdentifier(), + $"sp.{propertyTag}.name".ToIdentifier()) && language == "English".ToLanguageIdentifier()) + { + missingTexts.Add($"{property.Name.FormatCamelCaseWithSpaces()}"); + } - addIfMissingAll(language, + var description = (property.GetCustomAttributes(true).First(a => a is Serialize) as Serialize).Description; + + if (addIfMissingAll(language, $"sp.{propertyTag}.description".ToIdentifier(), - $"{property.Name.ToIdentifier()}.description".ToIdentifier()); + $"sp.{property.Name}.description".ToIdentifier(), + $"{property.Name.ToIdentifier()}.description".ToIdentifier()) && language == "English".ToLanguageIdentifier()) + { + missingTexts.Add($"{description}"); + } } } @@ -1889,6 +1920,23 @@ namespace Barotrauma ToolBox.OpenFileWithShell(Path.GetFullPath(filePath)); SwapLanguage(TextManager.DefaultLanguage); + if (missingTexts.Any()) + { + ShowQuestionPrompt("Dump the property names and descriptions missing from English to a new xml file? Y/N", + (option) => + { + if (option.ToLowerInvariant() == "y") + { + string path = "newtexts.txt"; + Barotrauma.IO.Validation.SkipValidationInDebugBuilds = true; + File.WriteAllLines(path, missingTexts); + Barotrauma.IO.Validation.SkipValidationInDebugBuilds = false; + ToolBox.OpenFileWithShell(Path.GetFullPath(path)); + SwapLanguage(TextManager.DefaultLanguage); + } + }); + } + void addIfMissing(Identifier tag, LanguageIdentifier language) { if (!tags[language].Contains(tag)) @@ -1897,15 +1945,90 @@ namespace Barotrauma missingTags[tag].Add(language); } } - void addIfMissingAll(LanguageIdentifier language, params Identifier[] potentialTags) + bool addIfMissingAll(LanguageIdentifier language, params Identifier[] potentialTags) { if (!potentialTags.Any(t => tags[language].Contains(t))) { var tag = potentialTags.First(); if (!missingTags.ContainsKey(tag)) { missingTags[tag] = new HashSet(); } missingTags[tag].Add(language); + return true; + } + return false; + } + })); + + + commands.Add(new Command("checkduplicateloca", "", (string[] args) => + { + if (args.Length < 1) + { + ThrowError("Please specify a file path."); + return; + } + XDocument doc1 = XMLExtensions.TryLoadXml(args[0]); + if (doc1?.Root == null) + { + ThrowError($"Could not load the file \"{args[0]}\""); + return; + } + List<(string tag, string text)> texts = new List<(string tag, string text)>(); + + bool duplicatesFound = false; + foreach (XElement element in doc1.Root.Elements()) + { + string tag = element.Name.ToString(); + string text = element.ElementInnerText(); + if (texts.Any(t => t.tag == tag)) + { + ThrowError($"Duplicate tag \"{tag}\"."); + duplicatesFound = true; } } + if (duplicatesFound) + { + ThrowError($"Aborting, please fix duplicate tags in the file and try again."); + return; + } + + foreach (XElement element in doc1.Root.Elements()) + { + string tag = element.Name.ToString(); + string text = element.ElementInnerText(); + if (texts.Any(t => t.text == text)) + { + if (tag.StartsWith("sp.")) + { + string[] split = tag.Split('.'); + if (split.Length > 3) + { + texts.RemoveAll(t => t.text == text); + string newTag = $"sp.{split[2]}.{split[3]}"; + texts.Add((newTag, text)); + NewMessage($"Duplicate text \"{tag}\", merging to \"{newTag}\"."); + } + else + { + NewMessage($"Duplicate text \"{tag}\", using existing one \"{texts.Find(t => t.text == text).tag}\"."); + } + } + else + { + texts.Add((tag, text)); + ThrowError($"Duplicate text \"{tag}\". Could not determine if the text can be merged with an existing one, please check it manually."); + } + } + else + { + texts.Add((tag, text)); + } + } + + string filePath = "uniquetexts.xml"; + Barotrauma.IO.Validation.SkipValidationInDebugBuilds = true; + File.WriteAllLines(filePath, texts.Select(t => $"<{t.tag}>{t.text}")); + Barotrauma.IO.Validation.SkipValidationInDebugBuilds = false; + ToolBox.OpenFileWithShell(Path.GetFullPath(filePath)); })); commands.Add(new Command("comparelocafiles", "comparelocafiles [file1] [file2]", (string[] args) => @@ -2585,99 +2708,6 @@ namespace Barotrauma })); #endif - commands.Add(new Command("cleanbuild", "", (string[] args) => - { - /*GameSettings.CurrentConfig.MusicVolume = 0.5f; - GameSettings.CurrentConfig.SoundVolume = 0.5f; - GameSettings.CurrentConfig.DynamicRangeCompressionEnabled = true; - GameSettings.CurrentConfig.VoipAttenuationEnabled = true; - NewMessage("Music and sound volume set to 0.5", Color.Green); - - GameSettings.CurrentConfig.GraphicsWidth = 0; - GameSettings.CurrentConfig.GraphicsHeight = 0; - GameSettings.CurrentConfig.WindowMode = WindowMode.BorderlessWindowed; - NewMessage("Resolution set to 0 x 0 (screen resolution will be used)", Color.Green); - NewMessage("Fullscreen enabled", Color.Green); - - GameSettings.CurrentConfig.VerboseLogging = false; - - if (GameSettings.CurrentConfig.MasterServerUrl != "http://www.undertowgames.com/baromaster") - { - ThrowError("MasterServerUrl \"" + GameSettings.CurrentConfig.MasterServerUrl + "\"!"); - } - - GameSettings.SaveCurrentConfig();*/ - throw new NotImplementedException(); - #warning TODO: reimplement - - var saveFiles = Barotrauma.IO.Directory.GetFiles(SaveUtil.SaveFolder); - - foreach (string saveFile in saveFiles) - { - Barotrauma.IO.File.Delete(saveFile); - NewMessage("Deleted " + saveFile, Color.Green); - } - - if (Barotrauma.IO.Directory.Exists(Barotrauma.IO.Path.Combine(SaveUtil.SaveFolder, "temp"))) - { - Barotrauma.IO.Directory.Delete(Barotrauma.IO.Path.Combine(SaveUtil.SaveFolder, "temp"), true); - NewMessage("Deleted temp save folder", Color.Green); - } - - if (Barotrauma.IO.Directory.Exists(ServerLog.SavePath)) - { - var logFiles = Barotrauma.IO.Directory.GetFiles(ServerLog.SavePath); - - foreach (string logFile in logFiles) - { - Barotrauma.IO.File.Delete(logFile); - NewMessage("Deleted " + logFile, Color.Green); - } - } - - if (Barotrauma.IO.File.Exists("filelist.xml")) - { - Barotrauma.IO.File.Delete("filelist.xml"); - NewMessage("Deleted filelist", Color.Green); - } - - if (Barotrauma.IO.File.Exists("Data/bannedplayers.txt")) - { - Barotrauma.IO.File.Delete("Data/bannedplayers.txt"); - NewMessage("Deleted bannedplayers.txt", Color.Green); - } - - if (Barotrauma.IO.File.Exists("Submarines/TutorialSub.sub")) - { - Barotrauma.IO.File.Delete("Submarines/TutorialSub.sub"); - - NewMessage("Deleted TutorialSub from the submarine folder", Color.Green); - } - - /*if (Barotrauma.IO.File.Exists(GameServer.SettingsFile)) - { - Barotrauma.IO.File.Delete(GameServer.SettingsFile); - NewMessage("Deleted server settings", Color.Green); - } - - if (Barotrauma.IO.File.Exists(GameServer.ClientPermissionsFile)) - { - Barotrauma.IO.File.Delete(GameServer.ClientPermissionsFile); - NewMessage("Deleted client permission file", Color.Green); - }*/ - - if (Barotrauma.IO.File.Exists("crashreport.log")) - { - Barotrauma.IO.File.Delete("crashreport.log"); - NewMessage("Deleted crashreport.log", Color.Green); - } - - if (!Barotrauma.IO.File.Exists("Content/Map/TutorialSub.sub")) - { - ThrowError("TutorialSub.sub not found!"); - } - })); - commands.Add(new Command("reloadcorepackage", "", (string[] args) => { if (args.Length < 1) diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/ChatBox.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/ChatBox.cs index 094a4b81c..2456e2ba8 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/ChatBox.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/ChatBox.cs @@ -769,7 +769,7 @@ namespace Barotrauma if (Character.Controlled != null && ChatMessage.CanUseRadio(Character.Controlled, out WifiComponent radio)) { radio.Channel = channel; - GameMain.Client?.CreateEntityEvent(radio.Item, new Item.ChangePropertyEventData(radio.SerializableProperties["channel".ToIdentifier()])); + GameMain.Client?.CreateEntityEvent(radio.Item, new Item.ChangePropertyEventData(radio.SerializableProperties["channel".ToIdentifier()], radio)); if (setText) { diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/CrewManagement.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/CrewManagement.cs index b25b07ca4..85afac3c9 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/CrewManagement.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/CrewManagement.cs @@ -25,7 +25,7 @@ namespace Barotrauma private PlayerBalanceElement? playerBalanceElement; private List PendingHires => campaign.Map?.CurrentLocation?.HireManager?.PendingHires; - private bool HasPermission => campaignUI.Campaign.AllowedToManageCampaign(ClientPermissions.ManageHires); + private bool HasPermission => CampaignMode.AllowedToManageCampaign(ClientPermissions.ManageHires); private Point resolutionWhenCreated; diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/FileSelection.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/FileSelection.cs index 4fcd29809..373fecbbf 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/FileSelection.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/FileSelection.cs @@ -357,6 +357,17 @@ namespace Barotrauma string txt = directory; if (txt.StartsWith(currentDirectory)) { txt = txt.Substring(currentDirectory.Length); } if (!txt.EndsWith("/")) { txt += "/"; } + //get directory info + DirectoryInfo dirInfo = new DirectoryInfo(directory); + try + { + //this will throw an exception if the directory can't be opened + Directory.GetDirectories(directory); + } + catch (UnauthorizedAccessException) + { + continue; + } var itemFrame = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.05f), fileList.Content.RectTransform), txt) { UserData = ItemIsDirectory.Yes diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUI.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUI.cs index c158fc21d..fb4fd861b 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUI.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUI.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Diagnostics; using Barotrauma.IO; using System.Linq; -using System.Xml.Linq; using Barotrauma.CharacterEditor; using Barotrauma.Extensions; using Barotrauma.Items.Components; @@ -50,6 +49,14 @@ namespace Barotrauma static class GUI { + // Controls where a line is drawn for given coords. + public enum OutlinePosition + { + Default = 0, // Thickness is inside of top left and outside of bottom right coord + Inside = 1, // Thickness is subtracted from the inside + Centered = 2, // Thickness is centered on given coords + Outside = 3, // Tickness is added to the outside + } public static GUICanvas Canvas => GUICanvas.Instance; public static CursorState MouseCursor = CursorState.Default; @@ -1605,6 +1612,54 @@ namespace Barotrauma } } + public static void DrawRectangle(SpriteBatch sb, Vector2 position, Vector2 size, Vector2 origin, float rotation, Color clr, float depth = 0.0f, float thickness = 1, OutlinePosition outlinePos = OutlinePosition.Centered) + { + Vector2 topLeft = new Vector2(-origin.X, -origin.Y); + Vector2 topRight = new Vector2(-origin.X + size.X, -origin.Y); + Vector2 bottomLeft = new Vector2(-origin.X, -origin.Y + size.Y); + Vector2 actualSize = size; + + switch(outlinePos) + { + case OutlinePosition.Default: + actualSize += new Vector2(thickness); + break; + case OutlinePosition.Centered: + topLeft -= new Vector2(thickness * 0.5f); + topRight -= new Vector2(thickness * 0.5f); + bottomLeft -= new Vector2(thickness * 0.5f); + actualSize += new Vector2(thickness); + break; + case OutlinePosition.Inside: + topRight -= new Vector2(thickness, 0.0f); + bottomLeft -= new Vector2(0.0f, thickness); + break; + case OutlinePosition.Outside: + topLeft -= new Vector2(thickness); + topRight -= new Vector2(0.0f, thickness); + bottomLeft -= new Vector2(thickness, 0.0f); + actualSize += new Vector2(thickness * 2.0f); + break; + } + + Matrix rotate = Matrix.CreateRotationZ(rotation); + topLeft = Vector2.Transform(topLeft, rotate) + position; + topRight = Vector2.Transform(topRight, rotate) + position; + bottomLeft = Vector2.Transform(bottomLeft, rotate) + position; + + Rectangle srcRect = new Rectangle(0, 0, 1, 1); + sb.Draw(solidWhiteTexture, topLeft, srcRect, clr, rotation, Vector2.Zero, new Vector2(thickness, actualSize.Y), SpriteEffects.None, depth); + sb.Draw(solidWhiteTexture, topLeft, srcRect, clr, rotation, Vector2.Zero, new Vector2(actualSize.X, thickness), SpriteEffects.None, depth); + sb.Draw(solidWhiteTexture, topRight, srcRect, clr, rotation, Vector2.Zero, new Vector2(thickness, actualSize.Y), SpriteEffects.None, depth); + sb.Draw(solidWhiteTexture, bottomLeft, srcRect, clr, rotation, Vector2.Zero, new Vector2(actualSize.X, thickness), SpriteEffects.None, depth); + } + + public static void DrawFilledRectangle(SpriteBatch sb, Vector2 position, Vector2 size, Vector2 pivot, float rotation, Color clr, float depth = 0.0f) + { + Rectangle srcRect = new Rectangle(0, 0, 1, 1); + sb.Draw(solidWhiteTexture, position, srcRect, clr, rotation, (pivot/size), size, SpriteEffects.None, depth); + } + public static void DrawFilledRectangle(SpriteBatch sb, RectangleF rect, Color clr, float depth = 0.0f) { DrawFilledRectangle(sb, rect.Location, rect.Size, clr, depth); diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBlock.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBlock.cs index 99461d746..e4a94bc56 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBlock.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBlock.cs @@ -584,6 +584,13 @@ namespace Barotrauma { string textToShow = Censor ? censoredText : (Wrap ? wrappedText.Value : text.SanitizedValue); Color colorToShow = currentTextColor * (currentTextColor.A / 255.0f); + if (TextManager.DebugDraw) + { + if (!text.NestedStr.Loaded || text.NestedStr.Language == LanguageIdentifier.None) + { + colorToShow = Color.Magenta; + } + } if (Shadow) { diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/Store.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/Store.cs index eca7c4334..b48a3867f 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/Store.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/Store.cs @@ -139,10 +139,10 @@ namespace Barotrauma return tab switch { StoreTab.Buy => true, - StoreTab.Sell => campaignUI.Campaign.AllowedToManageCampaign(Networking.ClientPermissions.SellInventoryItems), - StoreTab.SellSub => campaignUI.Campaign.AllowedToManageCampaign(Networking.ClientPermissions.SellSubItems), + StoreTab.Sell => CampaignMode.AllowedToManageCampaign(Networking.ClientPermissions.SellInventoryItems), + StoreTab.SellSub => CampaignMode.AllowedToManageCampaign(Networking.ClientPermissions.SellSubItems), _ => false, - }; + }; } private void UpdatePermissions() @@ -892,7 +892,7 @@ namespace Barotrauma void CreateOrUpdateItemFrame(ItemPrefab itemPrefab, int quantity) { - if (itemPrefab.CanBeBoughtFrom(ActiveStore, out PriceInfo priceInfo)) + if (itemPrefab.CanBeBoughtFrom(ActiveStore, out PriceInfo priceInfo) && itemPrefab.CanCharacterBuy()) { bool isDailySpecial = ActiveStore.DailySpecials.Contains(itemPrefab); var itemFrame = isDailySpecial ? @@ -1995,11 +1995,23 @@ namespace Barotrauma int totalPrice = 0; foreach (var item in itemsToPurchase) { - if (item?.ItemPrefab == null || !item.ItemPrefab.CanBeBoughtFrom(ActiveStore, out var priceInfo)) + if (item is null) { continue; } + + if (item.ItemPrefab == null || !item.ItemPrefab.CanBeBoughtFrom(ActiveStore, out var priceInfo)) { itemsToRemove.Add(item); continue; } + + if (item.ItemPrefab.DefaultPrice.RequiresUnlock) + { + if (!CargoManager.HasUnlockedStoreItem(item.ItemPrefab)) + { + itemsToRemove.Add(item); + continue; + } + } + totalPrice += item.Quantity * ActiveStore.GetAdjustedItemBuyPrice(item.ItemPrefab, priceInfo: priceInfo); } itemsToRemove.ForEach(i => itemsToPurchase.Remove(i)); diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/SubmarineSelection.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/SubmarineSelection.cs index 7a9a97fc5..0bdb26de7 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/SubmarineSelection.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/SubmarineSelection.cs @@ -673,7 +673,7 @@ namespace Barotrauma { if (GameMain.GameSession?.Campaign?.PendingSubmarineSwitch == null) { - return Submarine.MainSub.Info; + return Submarine.MainSub?.Info; } else { diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/TabMenu.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/TabMenu.cs index 8a9d4e8c1..7518da497 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/TabMenu.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/TabMenu.cs @@ -34,7 +34,7 @@ namespace Barotrauma private List teamIDs; private const string inLobbyString = "\u2022 \u2022 \u2022"; - private GUIFrame pendingChangesFrame = null; + public static GUIFrame PendingChangesFrame = null; public static Color OwnCharacterBGColor = Color.Gold * 0.7f; private bool isTransferMenuOpen; @@ -44,6 +44,7 @@ namespace Barotrauma private float transferMenuOpenState; private bool transferMenuStateCompleted; private readonly HashSet registeredEvents = new HashSet(); + private readonly TalentMenu talentMenu = new TalentMenu(); private class LinkedGUI { @@ -206,14 +207,10 @@ namespace Barotrauma transferMenuButton.RectTransform.AbsoluteOffset = new Point(0, -pos - transferMenu.Rect.Height); } GameSession.UpdateTalentNotificationIndicator(talentPointNotification); - if (Character.Controlled?.Info is { } characterInfo && talentResetButton != null && talentApplyButton != null) + + if (SelectedTab is InfoFrameTab.Talents) { - int talentCount = selectedTalents.Count - characterInfo.GetUnlockedTalentsInTree().Count(); - talentResetButton.Enabled = talentApplyButton.Enabled = talentCount > 0; - if (talentApplyButton.Enabled && talentApplyButton.FlashTimer <= 0.0f) - { - talentApplyButton.Flash(GUIStyle.Orange); - } + talentMenu?.Update(); } if (SelectedTab != InfoFrameTab.Crew) { return; } @@ -251,6 +248,10 @@ namespace Barotrauma { infoFrame?.AddToGUIUpdateList(); NetLobbyScreen.JobInfoFrame?.AddToGUIUpdateList(); + if (SelectedTab is InfoFrameTab.Talents) + { + talentMenu?.AddToGUIUpdateList(); + } } public static void OnRoundEnded() @@ -325,11 +326,11 @@ namespace Barotrauma AbsoluteOffset = new Point(contentFrame.Rect.X, contentFrame.Rect.Bottom + GUI.IntScale(8)) }, style: null); - pendingChangesFrame = new GUIFrame(new RectTransform(Vector2.One, bottomDisclaimerFrame.RectTransform, Anchor.Center), style: null); + PendingChangesFrame = new GUIFrame(new RectTransform(Vector2.One, bottomDisclaimerFrame.RectTransform, Anchor.Center), style: null); if (GameMain.NetLobbyScreen?.CampaignCharacterDiscarded ?? false) { - NetLobbyScreen.CreateChangesPendingFrame(pendingChangesFrame); + NetLobbyScreen.CreateChangesPendingFrame(PendingChangesFrame); } SetBalanceText(balanceText, campaignMode.Bank.Balance); @@ -403,7 +404,7 @@ namespace Barotrauma CreateSubmarineInfo(infoFrameHolder, Submarine.MainSub); break; case InfoFrameTab.Talents: - CreateCharacterInfo(infoFrameHolder); + talentMenu.CreateGUI(infoFrameHolder); break; } } @@ -1774,370 +1775,10 @@ namespace Barotrauma sub.Info.CreateSpecsWindow(specsListBox, GUIStyle.Font, includeTitle: false, includeClass: false, includeDescription: true); } } - private Color unselectedColor = new Color(240, 255, 255, 225); - private Color unselectableColor = new Color(100, 100, 100, 225); - private Color pressedColor = new Color(60, 60, 60, 225); - - private readonly List<(GUIButton button, GUIComponent icon)> talentButtons = new List<(GUIButton button, GUIComponent icon)>(); - private readonly List<(Identifier talentTree, int index, GUIImage icon, GUIFrame background, GUIFrame backgroundGlow)> talentCornerIcons = new List<(Identifier talentTree, int index, GUIImage icon, GUIFrame background, GUIFrame backgroundGlow)>(); - private List selectedTalents = new List(); - - private GUITextBlock experienceText; - private GUIProgressBar experienceBar; - private GUITextBlock talentPointText; - private GUIListBox skillListBox; - - private GUIButton talentApplyButton, - talentResetButton; private GUIImage talentPointNotification; - private readonly ImmutableDictionary talentStageStyles = new Dictionary - { - { TalentTree.TalentTreeStageState.Invalid, GUIStyle.GetComponentStyle("TalentTreeLocked") }, - { TalentTree.TalentTreeStageState.Locked, GUIStyle.GetComponentStyle("TalentTreeLocked") }, - { TalentTree.TalentTreeStageState.Unlocked, GUIStyle.GetComponentStyle("TalentTreePurchased") }, - { TalentTree.TalentTreeStageState.Available, GUIStyle.GetComponentStyle("TalentTreeUnlocked") }, - { TalentTree.TalentTreeStageState.Highlighted, GUIStyle.GetComponentStyle("TalentTreeAvailable") }, - }.ToImmutableDictionary(); - - private readonly ImmutableDictionary talentStageBackgroundColors = new Dictionary - { - { TalentTree.TalentTreeStageState.Invalid, new Color(48,48,48,255) }, - { TalentTree.TalentTreeStageState.Locked, new Color(48,48,48,255) }, - { TalentTree.TalentTreeStageState.Unlocked, new Color(24,37,31,255) }, - { TalentTree.TalentTreeStageState.Available, new Color(50,47,33,255) }, - { TalentTree.TalentTreeStageState.Highlighted, new Color(50,47,33,255) }, - }.ToImmutableDictionary(); - - private void CreateCharacterInfo(GUIFrame infoFrame) - { - infoFrame.ClearChildren(); - talentButtons.Clear(); - talentCornerIcons.Clear(); - - GUIFrame background = new GUIFrame(new RectTransform(Vector2.One, infoFrame.RectTransform, Anchor.TopCenter), style: "GUIFrameListBox"); - int padding = GUI.IntScale(15); - GUIFrame frame = new GUIFrame(new RectTransform(new Point(background.Rect.Width - padding, background.Rect.Height - padding), infoFrame.RectTransform, Anchor.Center), style: null); - - GUIFrame content = new GUIFrame(new RectTransform(new Vector2(0.98f), frame.RectTransform, Anchor.Center), style: null); - - GUIFrame characterSettingsFrame = null; - GUILayoutGroup characterLayout = null; - if (!(GameMain.NetworkMember is null)) - { - characterSettingsFrame = new GUIFrame(new RectTransform(Vector2.One, frame.RectTransform), style: null) { Visible = false }; - characterLayout = new GUILayoutGroup(new RectTransform(Vector2.One, characterSettingsFrame.RectTransform)); - GUIFrame containerFrame = new GUIFrame(new RectTransform(new Vector2(1f, 0.9f), characterLayout.RectTransform), style: null); - GUIFrame playerFrame = new GUIFrame(new RectTransform(new Vector2(0.9f, 0.7f), containerFrame.RectTransform, Anchor.Center), style: null); - GameMain.NetLobbyScreen.CreatePlayerFrame(playerFrame, alwaysAllowEditing: true, createPendingText: false); - } - - Character controlledCharacter = Character.Controlled; - CharacterInfo info = controlledCharacter?.Info ?? GameMain.Client?.CharacterInfo; - if (info == null) { return; } - - Job job = info.Job; - - GUILayoutGroup contentLayout = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 1.0f), content.RectTransform, anchor: Anchor.Center), childAnchor: Anchor.TopCenter) - { - AbsoluteSpacing = GUI.IntScale(10), - Stretch = true - }; - - GUILayoutGroup topLayout = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.3f), contentLayout.RectTransform, Anchor.Center), isHorizontal: true); - - new GUICustomComponent(new RectTransform(new Vector2(0.25f, 1f), topLayout.RectTransform), onDraw: (batch, component) => - { - float posY = component.Rect.Center.Y - component.Rect.Width / 2; - info.DrawPortrait(batch, new Vector2(component.Rect.X, posY), Vector2.Zero, component.Rect.Width, false, false); - }); - - GUILayoutGroup nameLayout = new GUILayoutGroup(new RectTransform(new Vector2(0.3f, 1f), topLayout.RectTransform)) - { - AbsoluteSpacing = GUI.IntScale(5), - CanBeFocused = true - }; - - GUITextBlock nameBlock = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), nameLayout.RectTransform), info.Name, font: GUIStyle.SubHeadingFont); - - if (!info.OmitJobInMenus) - { - nameBlock.TextColor = job.Prefab.UIColor; - GUITextBlock jobBlock = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), nameLayout.RectTransform), job.Name, font: GUIStyle.SmallFont) { TextColor = job.Prefab.UIColor }; - } - - LocalizedString traitString = TextManager.AddPunctuation(':', TextManager.Get("PersonalityTrait"), info.PersonalityTrait.DisplayName); - Vector2 traitSize = GUIStyle.SmallFont.MeasureString(traitString); - GUITextBlock traitBlock = new GUITextBlock(new RectTransform(Vector2.One, nameLayout.RectTransform), traitString, font: GUIStyle.SmallFont); - traitBlock.RectTransform.NonScaledSize = traitSize.Pad(traitBlock.Padding).ToPoint(); - - IEnumerable talentsOutsideTree = info.GetUnlockedTalentsOutsideTree().Select(e => TalentPrefab.TalentPrefabs.Find(c => c.Identifier == e)); - if (talentsOutsideTree.Count() > 0) - { - //spacing - new GUIFrame(new RectTransform(new Vector2(1.0f, 0.05f), nameLayout.RectTransform), style: null); - - GUILayoutGroup extraTalentLayout = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.3f), nameLayout.RectTransform), childAnchor: Anchor.TopCenter); - - talentPointText = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), extraTalentLayout.RectTransform, anchor: Anchor.Center), TextManager.Get("talentmenu.extratalents"), font: GUIStyle.SubHeadingFont); - talentPointText.RectTransform.MaxSize = new Point(int.MaxValue, (int)talentPointText.TextSize.Y); - - var extraTalentList = new GUIListBox(new RectTransform(new Vector2(0.9f, 0.8f), extraTalentLayout.RectTransform, anchor: Anchor.Center), isHorizontal: true) - { - AutoHideScrollBar = false, - ResizeContentToMakeSpaceForScrollBar = false - }; - extraTalentList.ScrollBar.RectTransform.SetPosition(Anchor.BottomCenter, Pivot.TopCenter); - extraTalentList.RectTransform.MinSize = new Point(0, GUI.IntScale(65)); - extraTalentLayout.Recalculate(); - extraTalentList.ForceLayoutRecalculation(); - - foreach (var extraTalent in talentsOutsideTree) - { - var img = new GUIImage(new RectTransform(new Point(extraTalentList.Content.Rect.Height), extraTalentList.Content.RectTransform), sprite: extraTalent.Icon, scaleToFit: true) - { - ToolTip = RichString.Rich($"‖color:{Color.White.ToStringHex()}‖{extraTalent.DisplayName}‖color:end‖" + "\n\n" + extraTalent.Description), - Color = GUIStyle.Green - }; - img.RectTransform.SizeChanged += () => - { - img.RectTransform.MaxSize = new Point(img.Rect.Height); - }; - } - } - - GUILayoutGroup skillLayout = new GUILayoutGroup(new RectTransform(new Vector2(0.45f, 1f), topLayout.RectTransform), childAnchor: Anchor.TopRight) - { - AbsoluteSpacing = GUI.IntScale(5), - Stretch = true - }; - - GUITextBlock skillBlock = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), skillLayout.RectTransform), TextManager.Get("skills"), font: GUIStyle.SubHeadingFont); - - skillListBox = new GUIListBox(new RectTransform(new Vector2(1f, 1f - skillBlock.RectTransform.RelativeSize.Y), skillLayout.RectTransform), style: null); - CreateSkillList(controlledCharacter, info, skillListBox); - - new GUIFrame(new RectTransform(new Vector2(1f, 1f), contentLayout.RectTransform), style: "HorizontalLine"); - - GUIListBox talentTreeListBox = new GUIListBox(new RectTransform(new Vector2(1f, 0.6f), contentLayout.RectTransform, Anchor.TopCenter), isHorizontal: true, style: null); - - if (controlledCharacter == null) - { - talentTreeListBox.Enabled = false; - } - else - { - if (!TalentTree.JobTalentTrees.TryGet(info.Job.Prefab.Identifier, out TalentTree talentTree)) { return; } - - selectedTalents = info.GetUnlockedTalentsInTree().ToList(); - - List subTreeNames = new List(); - foreach (var subTree in talentTree.TalentSubTrees) - { - GUIFrame subTreeFrame = new GUIFrame(new RectTransform(new Vector2(0.333f, 1f), talentTreeListBox.Content.RectTransform, anchor: Anchor.TopLeft), style: null); - GUILayoutGroup subTreeLayoutGroup = new GUILayoutGroup(new RectTransform(new Vector2(1f, 1f), subTreeFrame.RectTransform, Anchor.Center), false, childAnchor: Anchor.TopCenter); - - GUIFrame subtreeTitleFrame = new GUIFrame(new RectTransform(new Vector2(1f, 0.111f), subTreeLayoutGroup.RectTransform, anchor: Anchor.TopCenter), style: null); - int elementPadding = GUI.IntScale(8); - Point headerSize = subtreeTitleFrame.RectTransform.NonScaledSize; - GUIFrame subTreeTitleBackground = new GUIFrame(new RectTransform(new Point(headerSize.X - elementPadding, headerSize.Y), subtreeTitleFrame.RectTransform, anchor: Anchor.Center), style: "SubtreeHeader"); - subTreeNames.Add(new GUITextBlock(new RectTransform(Vector2.One, subTreeTitleBackground.RectTransform, anchor: Anchor.TopCenter), subTree.DisplayName, font: GUIStyle.SubHeadingFont, textAlignment: Alignment.Center)); - - for (int i = 0; i < 4; i++) - { - GUIFrame talentOptionFrame = new GUIFrame(new RectTransform(new Vector2(1f, 0.222f), subTreeLayoutGroup.RectTransform, anchor: Anchor.TopCenter), style: null); - - Point talentFrameSize = talentOptionFrame.RectTransform.NonScaledSize; - - GUIFrame talentBackground = new GUIFrame(new RectTransform(new Point(talentFrameSize.X - elementPadding, talentFrameSize.Y - elementPadding), talentOptionFrame.RectTransform, anchor: Anchor.Center), style: "TalentBackground") - { - Color = talentStageBackgroundColors[TalentTree.TalentTreeStageState.Locked] - }; - GUIFrame talentBackgroundHighlight = new GUIFrame(new RectTransform(Vector2.One, talentBackground.RectTransform, anchor: Anchor.Center), style: "TalentBackgroundGlow") { Visible = false }; - - GUIImage cornerIcon = new GUIImage(new RectTransform(new Vector2(0.2f), talentOptionFrame.RectTransform, anchor: Anchor.BottomRight, scaleBasis: ScaleBasis.BothHeight) { MaxSize = new Point(16) }, style: null) - { - CanBeFocused = false, - Color = talentStageBackgroundColors[TalentTree.TalentTreeStageState.Locked] - }; - - Point iconSize = cornerIcon.RectTransform.NonScaledSize; - cornerIcon.RectTransform.AbsoluteOffset = new Point(iconSize.X / 2, iconSize.Y / 2); - - if (subTree.TalentOptionStages.Length <= i) { continue; } - - TalentOption talentOption = subTree.TalentOptionStages[i]; - GUILayoutGroup talentOptionCenterGroup = new GUILayoutGroup(new RectTransform(new Vector2(0.75f, 0.7f), talentOptionFrame.RectTransform, Anchor.Center), childAnchor: Anchor.CenterLeft); - GUILayoutGroup talentOptionLayoutGroup = new GUILayoutGroup(new RectTransform(Vector2.One, talentOptionCenterGroup.RectTransform), isHorizontal: true, childAnchor: Anchor.CenterLeft) { Stretch = true }; - - foreach (Identifier talentId in talentOption.TalentIdentifiers.OrderBy(t => t)) - { - if (!TalentPrefab.TalentPrefabs.TryGet(talentId, out TalentPrefab talent)) { continue; } - GUIFrame talentFrame = new GUIFrame(new RectTransform(Vector2.One, talentOptionLayoutGroup.RectTransform), style: null) - { - CanBeFocused = false - }; - - GUIFrame croppedTalentFrame = new GUIFrame(new RectTransform(Vector2.One, talentFrame.RectTransform, anchor: Anchor.Center, scaleBasis: ScaleBasis.BothHeight), style: null); - GUIButton talentButton = new GUIButton(new RectTransform(Vector2.One, croppedTalentFrame.RectTransform, anchor: Anchor.Center), style: null) - { - ToolTip = RichString.Rich($"‖color:{Color.White.ToStringHex()}‖{talent.DisplayName}‖color:end‖" + "\n\n" + talent.Description), - UserData = talent.Identifier, - PressedColor = pressedColor, - Enabled = controlledCharacter != null, - OnClicked = (button, userData) => - { - // deselect other buttons in tier by removing their selected talents from pool - foreach (GUIButton guiButton in talentOptionLayoutGroup.GetAllChildren()) - { - if (guiButton.UserData is Identifier otherTalentIdentifier && guiButton != button) - { - if (!controlledCharacter.HasTalent(otherTalentIdentifier)) - { - selectedTalents.Remove(otherTalentIdentifier); - } - } - } - Identifier talentIdentifier = (Identifier)userData; - - if (TalentTree.IsViableTalentForCharacter(controlledCharacter, talentIdentifier, selectedTalents)) - { - if (!selectedTalents.Contains(talentIdentifier)) - { - selectedTalents.Add(talentIdentifier); - } - } - else if (!controlledCharacter.HasTalent(talentIdentifier)) - { - selectedTalents.Remove(talentIdentifier); - } - - UpdateTalentInfo(); - return true; - }, - }; - - talentButton.Color = talentButton.HoverColor = talentButton.PressedColor = talentButton.SelectedColor = talentButton.DisabledColor = Color.Transparent; - - GUIComponent iconImage; - if (talent.Icon is null) - { - iconImage = new GUITextBlock(new RectTransform(Vector2.One, talentButton.RectTransform, anchor: Anchor.Center), text: "???", font: GUIStyle.LargeFont, textAlignment: Alignment.Center, style: null) - { - OutlineColor = GUIStyle.Red, - TextColor = GUIStyle.Red, - PressedColor = unselectableColor, - DisabledColor = unselectableColor, - CanBeFocused = false, - }; - } - else - { - iconImage = new GUIImage(new RectTransform(Vector2.One, talentButton.RectTransform, anchor: Anchor.Center), sprite: talent.Icon, scaleToFit: true) - { - PressedColor = unselectableColor, - DisabledColor = unselectableColor * 0.5f, - CanBeFocused = false, - }; - } - iconImage.Enabled = talentButton.Enabled; - talentButtons.Add((talentButton, iconImage)); - } - talentCornerIcons.Add((subTree.Identifier, i, cornerIcon, talentBackground, talentBackgroundHighlight)); - } - } - GUITextBlock.AutoScaleAndNormalize(subTreeNames); - - GUILayoutGroup bottomLayout = new GUILayoutGroup(new RectTransform(new Vector2(1f, 0.07f), contentLayout.RectTransform, Anchor.TopCenter), isHorizontal: true) - { - RelativeSpacing = 0.01f, - Stretch = true - }; - - GUILayoutGroup experienceLayout = new GUILayoutGroup(new RectTransform(new Vector2(0.59f, 1f), bottomLayout.RectTransform)); - GUIFrame experienceBarFrame = new GUIFrame(new RectTransform(new Vector2(1f, 0.5f), experienceLayout.RectTransform), style: null); - - experienceBar = new GUIProgressBar(new RectTransform(new Vector2(1f, 1f), experienceBarFrame.RectTransform, Anchor.CenterLeft), - barSize: info.GetProgressTowardsNextLevel(), color: GUIStyle.Green) - { - IsHorizontal = true, - }; - - experienceText = new GUITextBlock(new RectTransform(new Vector2(1.0f, 1.0f), experienceBarFrame.RectTransform, anchor: Anchor.Center), "", font: GUIStyle.Font, textAlignment: Alignment.CenterRight) - { - Shadow = true, - ToolTip = TextManager.Get("experiencetooltip") - }; - - talentPointText = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.5f), experienceLayout.RectTransform, anchor: Anchor.Center), "", font: GUIStyle.SubHeadingFont, textAlignment: Alignment.CenterRight) { AutoScaleVertical = true }; - - talentResetButton = new GUIButton(new RectTransform(new Vector2(0.19f, 1f), bottomLayout.RectTransform), text: TextManager.Get("reset"), style: "GUIButtonFreeScale") - { - OnClicked = ResetTalentSelection - }; - talentApplyButton = new GUIButton(new RectTransform(new Vector2(0.19f, 1f), bottomLayout.RectTransform), text: TextManager.Get("applysettingsbutton"), style: "GUIButtonFreeScale") - { - OnClicked = ApplyTalentSelection, - }; - GUITextBlock.AutoScaleAndNormalize(talentResetButton.TextBlock, talentApplyButton.TextBlock); - } - - if (!(GameMain.NetworkMember is null)) - { - GUIButton newCharacterBox = new GUIButton(new RectTransform(new Vector2(0.5f, 0.2f), skillLayout.RectTransform, Anchor.BottomRight), - text: GameMain.NetLobbyScreen.CampaignCharacterDiscarded ? TextManager.Get("settings") : TextManager.Get("createnew"), style: "GUIButtonSmall") - { - IgnoreLayoutGroups = false - }; - newCharacterBox.TextBlock.AutoScaleHorizontal = true; - - newCharacterBox.OnClicked = (button, o) => - { - if (!GameMain.NetLobbyScreen.CampaignCharacterDiscarded) - { - GameMain.NetLobbyScreen.TryDiscardCampaignCharacter(() => - { - newCharacterBox.Text = TextManager.Get("settings"); - if (pendingChangesFrame != null) - { - NetLobbyScreen.CreateChangesPendingFrame(pendingChangesFrame); - } - OpenMenu(); - }); - return true; - } - - OpenMenu(); - return true; - - void OpenMenu() - { - characterSettingsFrame!.Visible = true; - content.Visible = false; - } - }; - - if (!(characterLayout is null)) - { - GUILayoutGroup characterCloseButtonLayout = new GUILayoutGroup(new RectTransform(new Vector2(1f, 0.1f), characterLayout.RectTransform), childAnchor: Anchor.BottomCenter); - new GUIButton(new RectTransform(new Vector2(0.4f, 1f), characterCloseButtonLayout.RectTransform), TextManager.Get("ApplySettingsButton")) //TODO: Is this text appropriate for this circumstance for all languages? - { - OnClicked = (button, o) => - { - GameMain.Client?.SendCharacterInfo(GameMain.Client.PendingName); - characterSettingsFrame!.Visible = false; - content.Visible = true; - return true; - } - }; - } - } - - UpdateTalentInfo(); - } - - private void CreateSkillList(Character character, CharacterInfo info, GUIListBox parent) + public static void CreateSkillList(Character character, CharacterInfo info, GUIListBox parent) { parent.Content.ClearChildren(); List skillNames = new List(); @@ -2172,116 +1813,10 @@ namespace Barotrauma GUITextBlock.AutoScaleAndNormalize(skillNames); } - private void UpdateTalentInfo() - { - Character controlledCharacter = Character.Controlled; - if (controlledCharacter?.Info == null) { return; } - - if (SelectedTab != InfoFrameTab.Talents) { return; } - - bool unlockedAllTalents = controlledCharacter.HasUnlockedAllTalents(); - - if (unlockedAllTalents) - { - experienceText.Text = string.Empty; - experienceBar.BarSize = 1f; - } - else - { - experienceText.Text = $"{controlledCharacter.Info.ExperiencePoints - controlledCharacter.Info.GetExperienceRequiredForCurrentLevel()} / {controlledCharacter.Info.GetExperienceRequiredToLevelUp() - controlledCharacter.Info.GetExperienceRequiredForCurrentLevel()}"; - experienceBar.BarSize = controlledCharacter.Info.GetProgressTowardsNextLevel(); - } - - selectedTalents = TalentTree.CheckTalentSelection(controlledCharacter, selectedTalents); - - string pointsLeft = controlledCharacter.Info.GetAvailableTalentPoints().ToString(); - - int talentCount = selectedTalents.Count - controlledCharacter.Info.GetUnlockedTalentsInTree().Count(); - - if (unlockedAllTalents) - { - talentPointText.SetRichText($"‖color:{XMLExtensions.ToStringHex(Color.Gray)}‖{TextManager.Get("talentmenu.alltalentsunlocked")}‖color:end‖"); - } - else if (talentCount > 0) - { - string pointsUsed = $"‖color:{XMLExtensions.ColorToString(GUIStyle.Red)}‖{-talentCount}‖color:end‖"; - LocalizedString localizedString = TextManager.GetWithVariables("talentmenu.points.spending", ("[amount]", pointsLeft), ("[used]", pointsUsed)); - talentPointText.SetRichText(localizedString); - } - else - { - talentPointText.SetRichText(TextManager.GetWithVariable("talentmenu.points", "[amount]", pointsLeft)); - } - - foreach (var (talentTree, index, icon, frame, glow) in talentCornerIcons) - { - TalentTree.TalentTreeStageState state = TalentTree.GetTalentOptionStageState(controlledCharacter, talentTree, index, selectedTalents); - GUIComponentStyle newStyle = talentStageStyles[state]; - icon.ApplyStyle(newStyle); - icon.Color = newStyle.Color; - frame.Color = talentStageBackgroundColors[state]; - glow.Visible = state == TalentTree.TalentTreeStageState.Highlighted; - } - - foreach (var talentButton in talentButtons) - { - Identifier talentIdentifier = (Identifier)talentButton.button.UserData; - bool unselectable = !TalentTree.IsViableTalentForCharacter(controlledCharacter, talentIdentifier, selectedTalents) || controlledCharacter.HasTalent(talentIdentifier); - Color newTalentColor = unselectable ? unselectableColor : unselectedColor; - Color hoverColor = Color.White; - - if (controlledCharacter.HasTalent(talentIdentifier)) - { - newTalentColor = GUIStyle.Green; - } - else if (selectedTalents.Contains(talentIdentifier)) - { - newTalentColor = GUIStyle.Orange; - hoverColor = Color.Lerp(GUIStyle.Orange, Color.White, 0.7f); - } - - talentButton.icon.Color = newTalentColor; - talentButton.icon.HoverColor = hoverColor; - } - - CreateSkillList(controlledCharacter, controlledCharacter.Info, skillListBox); - } - - private void ApplyTalents(Character controlledCharacter) - { - selectedTalents = TalentTree.CheckTalentSelection(controlledCharacter, selectedTalents); - foreach (Identifier talent in selectedTalents) - { - controlledCharacter.GiveTalent(talent); - if (GameMain.Client != null) - { - GameMain.Client.CreateEntityEvent(controlledCharacter, new Character.UpdateTalentsEventData()); - } - } - selectedTalents = controlledCharacter.Info.GetUnlockedTalentsInTree().ToList(); - UpdateTalentInfo(); - } - - private bool ApplyTalentSelection(GUIButton guiButton, object userData) - { - Character controlledCharacter = Character.Controlled; - ApplyTalents(controlledCharacter); - return true; - } - - private bool ResetTalentSelection(GUIButton guiButton, object userData) - { - Character controlledCharacter = Character.Controlled; - if (controlledCharacter?.Info == null) { return false; } - selectedTalents = controlledCharacter.Info.GetUnlockedTalentsInTree().ToList(); - UpdateTalentInfo(); - return true; - } - public void OnExperienceChanged(Character character) { if (character != Character.Controlled) { return; } - UpdateTalentInfo(); + talentMenu.UpdateTalentInfo(); } public void OnClose() diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/TalentMenu.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/TalentMenu.cs new file mode 100644 index 000000000..a3151bf46 --- /dev/null +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/TalentMenu.cs @@ -0,0 +1,680 @@ +#nullable enable + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Linq; +using Barotrauma.Extensions; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Input; +using static Barotrauma.TalentTree; +using static Barotrauma.TalentTree.TalentTreeStageState; + +namespace Barotrauma +{ + internal readonly record struct TalentButton(GUIButton Button, + GUIComponent IconComponent, + TalentPrefab Prefab) + { + public Identifier Identifier => Prefab.Identifier; + } + + internal readonly record struct TalentCornerIcon(Identifier TalentTree, + int Index, + GUIImage IconComponent, + GUIFrame BackgroundComponent, + GUIFrame GlowComponent); + + internal readonly struct TalentTreeStyle + { + public readonly GUIComponentStyle ComponentStyle; + public readonly Color Color; + + public TalentTreeStyle(string componentStyle, Color color) + { + ComponentStyle = GUIStyle.GetComponentStyle(componentStyle); + Color = color; + } + } + + internal sealed class TalentMenu + { + private static readonly Color unselectedColor = new Color(240, 255, 255, 225), + unselectableColor = new Color(100, 100, 100, 225), + pressedColor = new Color(60, 60, 60, 225), + lockedColor = new Color(48, 48, 48, 255), + unlockedColor = new Color(24, 37, 31, 255), + availableColor = new Color(50, 47, 33, 255); + + private static readonly ImmutableDictionary talentStageStyles = + new Dictionary + { + [Invalid] = new TalentTreeStyle("TalentTreeLocked", lockedColor), + [Locked] = new TalentTreeStyle("TalentTreeLocked", lockedColor), + [Unlocked] = new TalentTreeStyle("TalentTreePurchased", unlockedColor), + [Available] = new TalentTreeStyle("TalentTreeUnlocked", availableColor), + [Highlighted] = new TalentTreeStyle("TalentTreeAvailable", availableColor) + }.ToImmutableDictionary(); + + private readonly HashSet talentButtons = new HashSet(); + private readonly HashSet showCaseTalentFrames = new HashSet(); + private readonly HashSet talentCornerIcons = new HashSet(); + private HashSet selectedTalents = new HashSet(); + + private GUIListBox? skillListBox; + private GUITextBlock? talentPointText; + private GUIProgressBar? experienceBar; + private GUITextBlock? experienceText; + private GUILayoutGroup? skillLayout; + + private GUIButton? talentApplyButton, + talentResetButton; + + public void CreateGUI(GUIFrame parent) + { + parent.ClearChildren(); + talentButtons.Clear(); + talentCornerIcons.Clear(); + showCaseTalentFrames.Clear(); + + GUIFrame background = new GUIFrame(new RectTransform(Vector2.One, parent.RectTransform, Anchor.TopCenter), style: "GUIFrameListBox"); + int padding = GUI.IntScale(15); + GUIFrame frame = new GUIFrame(new RectTransform(new Point(background.Rect.Width - padding, background.Rect.Height - padding), parent.RectTransform, Anchor.Center), style: null); + + GUIFrame content = new GUIFrame(new RectTransform(new Vector2(0.98f), frame.RectTransform, Anchor.Center), style: null); + + GUILayoutGroup contentLayout = new GUILayoutGroup(new RectTransform(Vector2.One, content.RectTransform, anchor: Anchor.Center), childAnchor: Anchor.TopCenter) + { + AbsoluteSpacing = GUI.IntScale(10), + Stretch = true + }; + + Character? controlledCharacter = Character.Controlled; + CharacterInfo? info = controlledCharacter?.Info ?? GameMain.Client?.CharacterInfo; + if (info is null) { return; } + + CreateStatPanel(contentLayout, info); + + new GUIFrame(new RectTransform(new Vector2(1f, 1f), contentLayout.RectTransform), style: "HorizontalLine"); + + if (JobTalentTrees.TryGet(info.Job.Prefab.Identifier, out TalentTree? talentTree)) + { + CreateTalentMenu(contentLayout, info, talentTree!); + } + + CreateFooter(contentLayout, info); + UpdateTalentInfo(); + + if (GameMain.NetworkMember != null) + { + CreateMultiplayerCharacterSettings(frame, content); + } + } + + private void CreateMultiplayerCharacterSettings(GUIComponent parent, GUIComponent content) + { + if (skillLayout is null) { return; } + + GUIFrame characterSettingsFrame = new GUIFrame(new RectTransform(Vector2.One, parent.RectTransform), style: null) { Visible = false }; + GUILayoutGroup characterLayout = new GUILayoutGroup(new RectTransform(Vector2.One, characterSettingsFrame.RectTransform)); + GUIFrame containerFrame = new GUIFrame(new RectTransform(new Vector2(1f, 0.9f), characterLayout.RectTransform), style: null); + GUIFrame playerFrame = new GUIFrame(new RectTransform(new Vector2(0.9f, 0.7f), containerFrame.RectTransform, Anchor.Center), style: null); + GameMain.NetLobbyScreen.CreatePlayerFrame(playerFrame, alwaysAllowEditing: true, createPendingText: false); + + GUIButton newCharacterBox = new GUIButton(new RectTransform(new Vector2(0.5f, 0.2f), skillLayout.RectTransform, Anchor.BottomRight), + text: GameMain.NetLobbyScreen.CampaignCharacterDiscarded ? TextManager.Get("settings") : TextManager.Get("createnew"), style: "GUIButtonSmall") + { + IgnoreLayoutGroups = false, + TextBlock = + { + AutoScaleHorizontal = true + } + }; + + newCharacterBox.OnClicked = (button, o) => + { + if (!GameMain.NetLobbyScreen.CampaignCharacterDiscarded) + { + GameMain.NetLobbyScreen.TryDiscardCampaignCharacter(() => + { + newCharacterBox.Text = TextManager.Get("settings"); + if (TabMenu.PendingChangesFrame != null) + { + NetLobbyScreen.CreateChangesPendingFrame(TabMenu.PendingChangesFrame); + } + + OpenMenu(); + }); + return true; + } + + OpenMenu(); + return true; + + void OpenMenu() + { + characterSettingsFrame!.Visible = true; + content.Visible = false; + } + }; + + GUILayoutGroup characterCloseButtonLayout = new GUILayoutGroup(new RectTransform(new Vector2(1f, 0.1f), characterLayout.RectTransform), childAnchor: Anchor.BottomCenter); + new GUIButton(new RectTransform(new Vector2(0.4f, 1f), characterCloseButtonLayout.RectTransform), TextManager.Get("ApplySettingsButton")) //TODO: Is this text appropriate for this circumstance for all languages? + { + OnClicked = (button, o) => + { + GameMain.Client?.SendCharacterInfo(GameMain.Client.PendingName); + characterSettingsFrame!.Visible = false; + content.Visible = true; + return true; + } + }; + } + + private void CreateStatPanel(GUIComponent parent, CharacterInfo info) + { + Job job = info.Job; + + GUILayoutGroup topLayout = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.3f), parent.RectTransform, Anchor.Center), isHorizontal: true); + + new GUICustomComponent(new RectTransform(new Vector2(0.25f, 1f), topLayout.RectTransform), onDraw: (batch, component) => + { + float posY = component.Rect.Center.Y - component.Rect.Width / 2; + info.DrawPortrait(batch, new Vector2(component.Rect.X, posY), Vector2.Zero, component.Rect.Width, false, false); + }); + + GUILayoutGroup nameLayout = new GUILayoutGroup(new RectTransform(new Vector2(0.3f, 1f), topLayout.RectTransform)) + { + AbsoluteSpacing = GUI.IntScale(5), + CanBeFocused = true + }; + + GUITextBlock nameBlock = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), nameLayout.RectTransform), info.Name, font: GUIStyle.SubHeadingFont); + + if (!info.OmitJobInMenus) + { + nameBlock.TextColor = job.Prefab.UIColor; + GUITextBlock jobBlock = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), nameLayout.RectTransform), job.Name, font: GUIStyle.SmallFont) { TextColor = job.Prefab.UIColor }; + } + + if (info.PersonalityTrait != null) + { + LocalizedString traitString = TextManager.AddPunctuation(':', TextManager.Get("PersonalityTrait"), info.PersonalityTrait.DisplayName); + Vector2 traitSize = GUIStyle.SmallFont.MeasureString(traitString); + GUITextBlock traitBlock = new GUITextBlock(new RectTransform(Vector2.One, nameLayout.RectTransform), traitString, font: GUIStyle.SmallFont); + traitBlock.RectTransform.NonScaledSize = traitSize.Pad(traitBlock.Padding).ToPoint(); + } + + ImmutableHashSet talentsOutsideTree = info.GetUnlockedTalentsOutsideTree().Select(static e => TalentPrefab.TalentPrefabs.Find(c => c.Identifier == e)).ToImmutableHashSet(); + if (talentsOutsideTree.Any()) + { + //spacing + new GUIFrame(new RectTransform(new Vector2(1.0f, 0.05f), nameLayout.RectTransform), style: null); + + GUILayoutGroup extraTalentLayout = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.3f), nameLayout.RectTransform), childAnchor: Anchor.TopCenter); + + talentPointText = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), extraTalentLayout.RectTransform, anchor: Anchor.Center), TextManager.Get("talentmenu.extratalents"), font: GUIStyle.SubHeadingFont); + talentPointText.RectTransform.MaxSize = new Point(int.MaxValue, (int)talentPointText.TextSize.Y); + + var extraTalentList = new GUIListBox(new RectTransform(new Vector2(0.9f, 0.8f), extraTalentLayout.RectTransform, anchor: Anchor.Center), isHorizontal: true) + { + AutoHideScrollBar = false, + ResizeContentToMakeSpaceForScrollBar = false + }; + extraTalentList.ScrollBar.RectTransform.SetPosition(Anchor.BottomCenter, Pivot.TopCenter); + extraTalentList.RectTransform.MinSize = new Point(0, GUI.IntScale(65)); + extraTalentLayout.Recalculate(); + extraTalentList.ForceLayoutRecalculation(); + + foreach (var extraTalent in talentsOutsideTree) + { + if (extraTalent is null) { continue; } + GUIImage talentImg = new GUIImage(new RectTransform(Vector2.One, extraTalentList.Content.RectTransform, scaleBasis: ScaleBasis.BothHeight), sprite: extraTalent.Icon, scaleToFit: true) + { + ToolTip = RichString.Rich($"‖color:{Color.White.ToStringHex()}‖{extraTalent.DisplayName}‖color:end‖" + "\n\n" + extraTalent.Description), + Color = GUIStyle.Green + }; + } + } + + skillLayout = new GUILayoutGroup(new RectTransform(new Vector2(0.45f, 1f), topLayout.RectTransform), childAnchor: Anchor.TopRight) + { + AbsoluteSpacing = GUI.IntScale(5), + Stretch = true + }; + + GUITextBlock skillBlock = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), skillLayout.RectTransform), TextManager.Get("skills"), font: GUIStyle.SubHeadingFont); + + skillListBox = new GUIListBox(new RectTransform(new Vector2(1f, 1f - skillBlock.RectTransform.RelativeSize.Y), skillLayout.RectTransform), style: null); + TabMenu.CreateSkillList(info.Character, info, skillListBox); + } + + private void CreateTalentMenu(GUIComponent parent, CharacterInfo info, TalentTree tree) + { + GUIListBox mainList = new GUIListBox(new RectTransform(new Vector2(1f, 0.9f), parent.RectTransform, anchor: Anchor.TopCenter)); + + selectedTalents = info.GetUnlockedTalentsInTree().ToHashSet(); + + List subTreeNames = new List(); + foreach (var subTree in tree.TalentSubTrees) + { + GUIListBox talentList; + GUIComponent talentParent; + Vector2 treeSize; + switch (subTree.Type) + { + case TalentTreeType.Primary: + talentList = mainList; + treeSize = new Vector2(1f, 0.5f); + break; + case TalentTreeType.Specialization: + talentList = GetSpecializationList(); + treeSize = new Vector2(0.333f, 1f); + break; + default: + throw new ArgumentOutOfRangeException($"Invalid TalentTreeType \"{subTree.Type}\""); + } + talentParent = talentList.Content; + + GUILayoutGroup subTreeLayoutGroup = new GUILayoutGroup(new RectTransform(treeSize, talentParent.RectTransform), isHorizontal: false, childAnchor: Anchor.TopCenter) + { + Stretch = true + }; + + if (subTree.Type != TalentTreeType.Primary) + { + GUIFrame subtreeTitleFrame = new GUIFrame(new RectTransform(new Vector2(1f, 0.05f), subTreeLayoutGroup.RectTransform, anchor: Anchor.TopCenter) + { MinSize = new Point(0, GUI.IntScale(30)) }, style: null); + subtreeTitleFrame.RectTransform.IsFixedSize = true; + int elementPadding = GUI.IntScale(8); + Point headerSize = subtreeTitleFrame.RectTransform.NonScaledSize; + GUIFrame subTreeTitleBackground = new GUIFrame(new RectTransform(new Point(headerSize.X - elementPadding, headerSize.Y), subtreeTitleFrame.RectTransform, anchor: Anchor.Center), style: "SubtreeHeader"); + subTreeNames.Add(new GUITextBlock(new RectTransform(Vector2.One, subTreeTitleBackground.RectTransform, anchor: Anchor.TopCenter), subTree.DisplayName, font: GUIStyle.SubHeadingFont, textAlignment: Alignment.Center)); + } + + int optionAmount = subTree.TalentOptionStages.Length; + for (int i = 0; i < optionAmount; i++) + { + TalentOption option = subTree.TalentOptionStages[i]; + CreateTalentOption(subTreeLayoutGroup, subTree, i, option, info); + } + subTreeLayoutGroup.RectTransform.Resize(new Point(subTreeLayoutGroup.Rect.Width, + subTreeLayoutGroup.Children.Sum(c => c.Rect.Height + subTreeLayoutGroup.AbsoluteSpacing))); + subTreeLayoutGroup.RectTransform.MinSize = new Point(subTreeLayoutGroup.Rect.Width, subTreeLayoutGroup.Rect.Height); + subTreeLayoutGroup.Recalculate(); + if (subTree.Type == TalentTreeType.Specialization) + { + talentList.RectTransform.Resize(new Point(talentList.Rect.Width, Math.Max(subTreeLayoutGroup.Rect.Height, talentList.Rect.Height))); + talentList.RectTransform.MinSize = new Point(0, talentList.Rect.Height); + } + } + + var specializationList = GetSpecializationList(); + GetSpecializationList().RectTransform.Resize(new Point(specializationList.Content.Children.Sum(c => c.Rect.Width), specializationList.Rect.Height)); + + GUITextBlock.AutoScaleAndNormalize(subTreeNames); + + GUIListBox GetSpecializationList() + { + if (mainList.Content.Children.LastOrDefault() is GUIListBox specializationList) + { + return specializationList; + } + + GUIListBox newSpecializationList = new GUIListBox(new RectTransform(new Vector2(1.0f, 0.5f), mainList.Content.RectTransform, Anchor.TopCenter), isHorizontal: true, style: null); + return newSpecializationList; + } + } + + private void CreateTalentOption(GUIComponent parent, TalentSubTree subTree, int index, TalentOption talentOption, CharacterInfo info) + { + int elementPadding = GUI.IntScale(8); + GUIFrame talentOptionFrame = new GUIFrame(new RectTransform(new Vector2(1f, 0.01f), parent.RectTransform, anchor: Anchor.TopCenter) + { MinSize = new Point(0, GUI.IntScale(65)) }, style: null); + + Point talentFrameSize = talentOptionFrame.RectTransform.NonScaledSize; + + GUIFrame talentBackground = new GUIFrame(new RectTransform(new Point(talentFrameSize.X - elementPadding, talentFrameSize.Y - elementPadding), talentOptionFrame.RectTransform, anchor: Anchor.Center), + style: "TalentBackground") + { + Color = talentStageStyles[Locked].Color + }; + GUIFrame talentBackgroundHighlight = new GUIFrame(new RectTransform(Vector2.One, talentBackground.RectTransform, anchor: Anchor.Center), style: "TalentBackgroundGlow") { Visible = false }; + + GUIImage cornerIcon = new GUIImage(new RectTransform(new Vector2(0.2f), talentOptionFrame.RectTransform, anchor: Anchor.BottomRight, scaleBasis: ScaleBasis.BothHeight) { MaxSize = new Point(16) }, style: null) + { + CanBeFocused = false, + Color = talentStageStyles[Locked].Color + }; + + Point iconSize = cornerIcon.RectTransform.NonScaledSize; + cornerIcon.RectTransform.AbsoluteOffset = new Point(iconSize.X / 2, iconSize.Y / 2); + + GUILayoutGroup talentOptionCenterGroup = new GUILayoutGroup(new RectTransform(new Vector2(0.6f, 0.9f), talentOptionFrame.RectTransform, Anchor.Center), childAnchor: Anchor.CenterLeft); + GUILayoutGroup talentOptionLayoutGroup = new GUILayoutGroup(new RectTransform(Vector2.One, talentOptionCenterGroup.RectTransform), isHorizontal: true, childAnchor: Anchor.CenterLeft) { Stretch = true }; + + HashSet talentOptionIdentifiers = talentOption.TalentIdentifiers.OrderBy(static t => t).ToHashSet(); + bool hasShowcase = talentOption.ShowcaseTalent.TryUnwrap(out Identifier showcaseTalentIdentifier); + GUILayoutGroup showcaseLayout = talentOptionLayoutGroup; + + if (hasShowcase) + { + talentOptionIdentifiers.Add(showcaseTalentIdentifier); + Point parentSize = talentBackground.RectTransform.NonScaledSize; + GUIFrame showCaseFrame = new GUIFrame(new RectTransform(new Point((int)(parentSize.X / 3f * (talentOptionIdentifiers.Count - 1)), parentSize.Y)), style: "GUITooltip") + { + UserData = showcaseTalentIdentifier, + IgnoreLayoutGroups = true, + Visible = false + }; + GUILayoutGroup showcaseCenterGroup = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.7f), showCaseFrame.RectTransform, Anchor.Center), childAnchor: Anchor.CenterLeft); + showcaseLayout = new GUILayoutGroup(new RectTransform(Vector2.One, showcaseCenterGroup.RectTransform), isHorizontal: true) { Stretch = true }; + showCaseTalentFrames.Add(showCaseFrame); + } + + foreach (Identifier talentId in talentOptionIdentifiers) + { + if (!TalentPrefab.TalentPrefabs.TryGet(talentId, out TalentPrefab? talent)) { continue; } + + bool isShowCaseTalent = hasShowcase && talentId == showcaseTalentIdentifier; + GUIComponent talentParent; + + if (hasShowcase && talentId != showcaseTalentIdentifier) + { + talentParent = showcaseLayout; + } + else + { + talentParent = talentOptionLayoutGroup; + } + + GUIFrame talentFrame = new GUIFrame(new RectTransform(Vector2.One, talentParent.RectTransform), style: null) + { + CanBeFocused = false + }; + + GUIFrame croppedTalentFrame = new GUIFrame(new RectTransform(Vector2.One, talentFrame.RectTransform, anchor: Anchor.Center, scaleBasis: ScaleBasis.BothHeight), style: null); + GUIButton talentButton = new GUIButton(new RectTransform(Vector2.One, croppedTalentFrame.RectTransform, anchor: Anchor.Center), style: null) + { + ToolTip = RichString.Rich($"‖color:{Color.White.ToStringHex()}‖{talent.DisplayName}‖color:end‖" + "\n\n" + talent.Description), + UserData = talent.Identifier, + PressedColor = pressedColor, + Enabled = info.Character != null, + OnClicked = (button, userData) => + { + if (isShowCaseTalent) + { + foreach (GUIComponent component in showCaseTalentFrames) + { + if (component.UserData is Identifier showcaseIdentifier && showcaseIdentifier == talentId) + { + component.RectTransform.ScreenSpaceOffset = new Point((int)(button.Rect.Location.X - component.Rect.Width / 2f + button.Rect.Width / 2f), button.Rect.Location.Y - component.Rect.Height); + component.Visible = true; + } + else + { + component.Visible = false; + } + } + + return true; + } + + Character? controlledCharacter = info.Character; + if (controlledCharacter is null) { return false; } + + if (talentOption.MaxChosenTalents is 1) + { + // deselect other buttons in tier by removing their selected talents from pool + foreach (GUIButton guiButton in talentOptionLayoutGroup.GetAllChildren()) + { + if (guiButton.UserData is Identifier otherTalentIdentifier && guiButton != button) + { + if (!controlledCharacter.HasTalent(otherTalentIdentifier)) + { + selectedTalents.Remove(otherTalentIdentifier); + } + } + } + } + + Identifier talentIdentifier = (Identifier)userData; + + if (IsViableTalentForCharacter(info.Character, talentIdentifier, selectedTalents)) + { + if (!selectedTalents.Contains(talentIdentifier)) + { + selectedTalents.Add(talentIdentifier); + } + else + { + selectedTalents.Remove(talentIdentifier); + } + } + else if (!controlledCharacter.HasTalent(talentIdentifier)) + { + selectedTalents.Remove(talentIdentifier); + } + + UpdateTalentInfo(); + return true; + }, + }; + + talentButton.Color = talentButton.HoverColor = talentButton.PressedColor = talentButton.SelectedColor = talentButton.DisabledColor = Color.Transparent; + + GUIComponent iconImage; + if (talent.Icon is null) + { + iconImage = new GUITextBlock(new RectTransform(Vector2.One, talentButton.RectTransform, anchor: Anchor.Center), text: "???", font: GUIStyle.LargeFont, textAlignment: Alignment.Center, style: null) + { + OutlineColor = GUIStyle.Red, + TextColor = GUIStyle.Red, + PressedColor = unselectableColor, + DisabledColor = unselectableColor, + CanBeFocused = false, + }; + } + else + { + iconImage = new GUIImage(new RectTransform(Vector2.One, talentButton.RectTransform, anchor: Anchor.Center), sprite: talent.Icon, scaleToFit: true) + { + Color = talent.ColorOverride.TryUnwrap(out Color color) ? color : Color.White, + PressedColor = unselectableColor, + DisabledColor = unselectableColor * 0.5f, + CanBeFocused = false, + }; + } + + iconImage.Enabled = talentButton.Enabled; + if (isShowCaseTalent) { continue; } + + talentButtons.Add(new TalentButton(talentButton, iconImage, talent)); + } + + talentCornerIcons.Add(new TalentCornerIcon(subTree.Identifier, index, cornerIcon, talentBackground, talentBackgroundHighlight)); + } + + private void CreateFooter(GUIComponent parent, CharacterInfo info) + { + GUILayoutGroup bottomLayout = new GUILayoutGroup(new RectTransform(new Vector2(1f, 0.07f), parent.RectTransform, Anchor.TopCenter), isHorizontal: true) + { + RelativeSpacing = 0.01f, + Stretch = true + }; + + GUILayoutGroup experienceLayout = new GUILayoutGroup(new RectTransform(new Vector2(0.59f, 1f), bottomLayout.RectTransform)); + GUIFrame experienceBarFrame = new GUIFrame(new RectTransform(new Vector2(1f, 0.5f), experienceLayout.RectTransform), style: null); + + experienceBar = new GUIProgressBar(new RectTransform(new Vector2(1f, 1f), experienceBarFrame.RectTransform, Anchor.CenterLeft), + barSize: info.GetProgressTowardsNextLevel(), color: GUIStyle.Green) + { + IsHorizontal = true, + }; + + experienceText = new GUITextBlock(new RectTransform(new Vector2(1.0f, 1.0f), experienceBarFrame.RectTransform, anchor: Anchor.Center), "", font: GUIStyle.Font, textAlignment: Alignment.CenterRight) + { + Shadow = true, + ToolTip = TextManager.Get("experiencetooltip") + }; + + talentPointText = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.5f), experienceLayout.RectTransform, anchor: Anchor.Center), "", font: GUIStyle.SubHeadingFont, textAlignment: Alignment.CenterRight) + { AutoScaleVertical = true }; + + talentResetButton = new GUIButton(new RectTransform(new Vector2(0.19f, 1f), bottomLayout.RectTransform), text: TextManager.Get("reset"), style: "GUIButtonFreeScale") + { + OnClicked = ResetTalentSelection + }; + talentApplyButton = new GUIButton(new RectTransform(new Vector2(0.19f, 1f), bottomLayout.RectTransform), text: TextManager.Get("applysettingsbutton"), style: "GUIButtonFreeScale") + { + OnClicked = ApplyTalentSelection, + }; + GUITextBlock.AutoScaleAndNormalize(talentResetButton.TextBlock, talentApplyButton.TextBlock); + } + + private bool ResetTalentSelection(GUIButton guiButton, object userData) + { + UpdateTalentInfo(); + return true; + } + + private void ApplyTalents(Character controlledCharacter) + { + foreach (Identifier talent in CheckTalentSelection(controlledCharacter, selectedTalents)) + { + controlledCharacter.GiveTalent(talent); + if (GameMain.Client != null) + { + GameMain.Client.CreateEntityEvent(controlledCharacter, new Character.UpdateTalentsEventData()); + } + } + + UpdateTalentInfo(); + } + + private bool ApplyTalentSelection(GUIButton guiButton, object userData) + { + Character controlledCharacter = Character.Controlled; + if (controlledCharacter is null) { return false; } + + ApplyTalents(controlledCharacter); + return true; + } + + public void UpdateTalentInfo() + { + if (!(Character.Controlled is { Info: var info } character)) { return; } + + bool unlockedAllTalents = character.HasUnlockedAllTalents(); + + if (experienceBar is null || experienceText is null) { return; } + + if (unlockedAllTalents) + { + experienceText.Text = string.Empty; + experienceBar.BarSize = 1f; + } + else + { + experienceText.Text = $"{info.ExperiencePoints - info.GetExperienceRequiredForCurrentLevel()} / {info.GetExperienceRequiredToLevelUp() - info.GetExperienceRequiredForCurrentLevel()}"; + experienceBar.BarSize = info.GetProgressTowardsNextLevel(); + } + + selectedTalents = CheckTalentSelection(character, selectedTalents).ToHashSet(); + + string pointsLeft = info.GetAvailableTalentPoints().ToString(); + + int talentCount = selectedTalents.Count - info.GetUnlockedTalentsInTree().Count(); + + if (unlockedAllTalents) + { + talentPointText?.SetRichText($"‖color:{Color.Gray.ToStringHex()}‖{TextManager.Get("talentmenu.alltalentsunlocked")}‖color:end‖"); + } + else if (talentCount > 0) + { + string pointsUsed = $"‖color:{XMLExtensions.ToStringHex(GUIStyle.Red)}‖{-talentCount}‖color:end‖"; + LocalizedString localizedString = TextManager.GetWithVariables("talentmenu.points.spending", ("[amount]", pointsLeft), ("[used]", pointsUsed)); + talentPointText?.SetRichText(localizedString); + } + else + { + talentPointText?.SetRichText(TextManager.GetWithVariable("talentmenu.points", "[amount]", pointsLeft)); + } + + foreach (TalentCornerIcon cornerIcon in talentCornerIcons) + { + TalentTreeStageState state = GetTalentOptionStageState(character, cornerIcon.TalentTree, cornerIcon.Index, selectedTalents); + TalentTreeStyle style = talentStageStyles[state]; + GUIComponentStyle newStyle = style.ComponentStyle; + cornerIcon.IconComponent.ApplyStyle(newStyle); + cornerIcon.IconComponent.Color = newStyle.Color; + cornerIcon.BackgroundComponent.Color = style.Color; + cornerIcon.GlowComponent.Visible = state == Highlighted; + } + + foreach (TalentButton talentButton in talentButtons) + { + Identifier talentIdentifier = talentButton.Identifier; + bool unselectable = !IsViableTalentForCharacter(character, talentIdentifier, selectedTalents) || character.HasTalent(talentIdentifier); + Color newTalentColor = unselectable ? unselectableColor : unselectedColor; + Color hoverColor = Color.White; + bool selected = false; + + if (character.HasTalent(talentIdentifier)) + { + selected = true; + newTalentColor = GUIStyle.Green; + } + else if (selectedTalents.Contains(talentIdentifier)) + { + selected = true; + newTalentColor = GUIStyle.Orange; + hoverColor = Color.Lerp(GUIStyle.Orange, Color.White, 0.7f); + } + + bool shouldOverride = !unselectable || selected; + + if (shouldOverride && talentButton.Prefab.ColorOverride.TryUnwrap(out Color overrideColor)) + { + newTalentColor = overrideColor; + } + + talentButton.IconComponent.Color = newTalentColor; + talentButton.IconComponent.HoverColor = hoverColor; + } + + if (skillListBox is null) { return; } + + TabMenu.CreateSkillList(character, info, skillListBox); + } + + public void AddToGUIUpdateList() + { + bool mouseInteracted = PlayerInput.PrimaryMouseButtonClicked() || PlayerInput.SecondaryMouseButtonClicked() || PlayerInput.ScrollWheelSpeed != 0; + bool keyboardInteracted = PlayerInput.KeyHit(Keys.Escape) || GameSettings.CurrentConfig.KeyMap.Bindings[InputType.InfoTab].IsHit(); + + foreach (GUIComponent component in showCaseTalentFrames) + { + component.AddToGUIUpdateList(order: 1); + if (!component.Visible) { continue; } + + if (keyboardInteracted || (mouseInteracted && !component.Rect.Contains(PlayerInput.MousePosition))) + { + component.Visible = false; + } + } + } + + public void Update() + { + if (Character.Controlled?.Info is not { } characterInfo || talentResetButton is null || talentApplyButton is null) { return; } + + int talentCount = selectedTalents.Count - characterInfo.GetUnlockedTalentsInTree().Count(); + talentResetButton.Enabled = talentApplyButton.Enabled = talentCount > 0; + if (talentApplyButton.Enabled && talentApplyButton.FlashTimer <= 0.0f) + { + talentApplyButton.Flash(GUIStyle.Orange); + } + } + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/UpgradeStore.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/UpgradeStore.cs index 08a186081..b58bcc3fc 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/UpgradeStore.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/UpgradeStore.cs @@ -433,8 +433,8 @@ namespace Barotrauma Location location = Campaign.Map.CurrentLocation; - int hullRepairCost = Campaign.GetHullRepairCost(); - int itemRepairCost = Campaign.GetItemRepairCost(); + int hullRepairCost = CampaignMode.GetHullRepairCost(); + int itemRepairCost = CampaignMode.GetItemRepairCost(); int shuttleRetrieveCost = CampaignMode.ShuttleReplaceCost; if (location != null) { @@ -847,7 +847,7 @@ namespace Barotrauma foreach (UpgradePrefab prefab in prefabs) { - if (prefab.MaxLevel is 0) { continue; } + if (prefab.GetMaxLevelForCurrentSub() == 0) { continue; } CreateUpgradeEntry(prefab, category, parent.Content, submarine, entitiesOnSub); } } @@ -1080,7 +1080,7 @@ namespace Barotrauma public static GUIFrame CreateUpgradeFrame(UpgradePrefab prefab, UpgradeCategory category, CampaignMode campaign, RectTransform rectTransform, bool addBuyButton = true) { - int price = prefab.Price.GetBuyprice(campaign.UpgradeManager.GetUpgradeLevel(prefab, category), campaign.Map?.CurrentLocation); + int price = prefab.Price.GetBuyPrice(campaign.UpgradeManager.GetUpgradeLevel(prefab, category), campaign.Map?.CurrentLocation); return CreateUpgradeEntry(rectTransform, prefab.Sprite, prefab.Name, prefab.Description, price, new CategoryData(category, prefab), addBuyButton, upgradePrefab: prefab, currentLevel: campaign.UpgradeManager.GetUpgradeLevel(prefab, category)); } @@ -1177,11 +1177,12 @@ namespace Barotrauma private static void UpdateUpgradePercentageText(GUITextBlock text, UpgradePrefab upgradePrefab, int currentLevel) { - float nextIncrease = upgradePrefab.IncreaseOnTooltip * (Math.Min(currentLevel + 1, upgradePrefab.MaxLevel)); + int maxLevel = upgradePrefab.GetMaxLevelForCurrentSub(); + float nextIncrease = upgradePrefab.IncreaseOnTooltip * Math.Min(currentLevel + 1, maxLevel); if (nextIncrease != 0f) { text.Text = $"{Math.Round(nextIncrease, 1)} %"; - if (currentLevel == upgradePrefab.MaxLevel) + if (currentLevel == maxLevel) { text.TextColor = Color.Gray; } @@ -1221,7 +1222,7 @@ namespace Barotrauma { LocalizedString promptBody = TextManager.GetWithVariables("Upgrades.PurchasePromptBody", ("[upgradename]", prefab.Name), - ("[amount]", prefab.Price.GetBuyprice(Campaign.UpgradeManager.GetUpgradeLevel(prefab, category), Campaign.Map?.CurrentLocation).ToString())); + ("[amount]", prefab.Price.GetBuyPrice(Campaign.UpgradeManager.GetUpgradeLevel(prefab, category), Campaign.Map?.CurrentLocation).ToString())); currectConfirmation = EventEditorScreen.AskForConfirmation(TextManager.Get("Upgrades.PurchasePromptTitle"), promptBody, () => { if (GameMain.NetworkMember != null) @@ -1617,14 +1618,15 @@ namespace Barotrauma { int currentLevel = campaign.UpgradeManager.GetUpgradeLevel(prefab, category); - LocalizedString progressText = TextManager.GetWithVariables("upgrades.progressformat", ("[level]", currentLevel.ToString()), ("[maxlevel]", prefab.MaxLevel.ToString())); + int maxLevel = prefab.GetMaxLevelForCurrentSub(); + LocalizedString progressText = TextManager.GetWithVariables("upgrades.progressformat", ("[level]", currentLevel.ToString()), ("[maxlevel]", maxLevel.ToString())); if (prefabFrame.FindChild("progressbar", true) is { } progressParent) { GUIProgressBar bar = progressParent.GetChild(); if (bar != null) { - bar.BarSize = currentLevel / (float) prefab.MaxLevel; - bar.Color = currentLevel >= prefab.MaxLevel ? GUIStyle.Green : GUIStyle.Orange; + bar.BarSize = currentLevel / (float)maxLevel; + bar.Color = currentLevel >= maxLevel ? GUIStyle.Green : GUIStyle.Orange; } GUITextBlock block = progressParent.GetChild(); @@ -1637,12 +1639,12 @@ namespace Barotrauma GUITextBlock priceLabel = textBlocks[0]; priceLabel.Visible = true; - int price = prefab.Price.GetBuyprice(campaign.UpgradeManager.GetUpgradeLevel(prefab, category), campaign.Map?.CurrentLocation); + int price = prefab.Price.GetBuyPrice(campaign.UpgradeManager.GetUpgradeLevel(prefab, category), campaign.Map?.CurrentLocation); if (priceLabel != null && !WaitForServerUpdate) { priceLabel.Text = TextManager.FormatCurrency(price); - if (currentLevel >= prefab.MaxLevel) + if (currentLevel >= maxLevel) { priceLabel.Text = TextManager.Get("Upgrade.MaxedUpgrade"); } @@ -1651,7 +1653,7 @@ namespace Barotrauma GUIButton button = buttonParent.GetChild(); if (button != null) { - button.Enabled = currentLevel < prefab.MaxLevel; + button.Enabled = currentLevel < maxLevel; if (WaitForServerUpdate || campaign.GetBalance() < price) { button.Enabled = false; @@ -1697,13 +1699,14 @@ namespace Barotrauma foreach (GUIComponent component in indicators.Children) { - if (!(component is GUIImage image)) { continue; } + if (component is not GUIImage image) { continue; } foreach (UpgradePrefab prefab in prefabs) { if (component.UserData != prefab) { continue; } - if (prefab.MaxLevel is 0) + int maxLevel = prefab.GetMaxLevelForCurrentSub(); + if (maxLevel == 0) { component.Visible = false; continue; @@ -1715,7 +1718,6 @@ namespace Barotrauma GUIComponentStyle onStyle = styles["upgradeindicatoron".ToIdentifier()]; GUIComponentStyle dimStyle = styles["upgradeindicatordim".ToIdentifier()]; GUIComponentStyle offStyle = styles["upgradeindicatoroff".ToIdentifier()]; - int maxLevel = prefab.MaxLevel; if (maxLevel == 0) { diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameAnalytics/GameAnalyticsManager.cs b/Barotrauma/BarotraumaClient/ClientSource/GameAnalytics/GameAnalyticsManager.cs index e8069b34b..a0a55d717 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameAnalytics/GameAnalyticsManager.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameAnalytics/GameAnalyticsManager.cs @@ -30,7 +30,7 @@ namespace Barotrauma Data = data, OnClick = (GUITextBlock component, GUITextBlock.ClickableArea area) => { - GameMain.Instance.ShowOpenUrlInWebBrowserPrompt("https://gameanalytics.com/privacy/"); + GameMain.ShowOpenUrlInWebBrowserPrompt("https://gameanalytics.com/privacy/"); } }); } diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameMain.cs b/Barotrauma/BarotraumaClient/ClientSource/GameMain.cs index 226487ec1..5965d350e 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameMain.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameMain.cs @@ -791,6 +791,10 @@ namespace Barotrauma { GUI.TogglePauseMenu(); } + else if (GameSession?.Campaign is { ShowCampaignUI: true, ForceMapUI: false }) + { + GameSession.Campaign.ShowCampaignUI = false; + } //open the pause menu if not controlling a character OR if the character has no UIs active that can be closed with ESC else if ((Character.Controlled == null || !itemHudActive()) && CharacterHealth.OpenHealthWindow == null @@ -1200,7 +1204,7 @@ namespace Barotrauma base.OnExiting(sender, args); } - public void ShowOpenUrlInWebBrowserPrompt(string url, string promptExtensionTag = null) + public static void ShowOpenUrlInWebBrowserPrompt(string url, string promptExtensionTag = null) { if (string.IsNullOrEmpty(url)) { return; } if (GUIMessageBox.VisibleBox?.UserData as string == "verificationprompt") { return; } @@ -1218,7 +1222,14 @@ namespace Barotrauma }; msgBox.Buttons[0].OnClicked = (btn, userdata) => { - ToolBox.OpenFileWithShell(url); + try + { + ToolBox.OpenFileWithShell(url); + } + catch (Exception e) + { + DebugConsole.ThrowError($"Failed to open the url {url}", e); + } msgBox.Close(); return true; }; diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/CampaignMode.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/CampaignMode.cs index 54d942d3b..3311d1650 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/CampaignMode.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/CampaignMode.cs @@ -86,10 +86,12 @@ namespace Barotrauma } } + private static bool IsOwner(Client client) => client != null && client.IsOwner; + /// /// There is a server-side implementation of the method in /// - public bool AllowedToManageCampaign(ClientPermissions permissions) + public static bool AllowedToManageCampaign(ClientPermissions permissions) { //allow managing the round if the client has permissions, is the owner, the only client in the server, //or if no-one has management permissions @@ -97,9 +99,8 @@ namespace Barotrauma return GameMain.Client.HasPermission(permissions) || GameMain.Client.HasPermission(ClientPermissions.ManageCampaign) || - GameMain.Client.ConnectedClients.Count == 1 || GameMain.Client.IsServerOwner || - GameMain.Client.ConnectedClients.None(c => c.InGame && (c.IsOwner || c.HasPermission(permissions))); + AnyOneAllowedToManageCampaign(permissions); } public static bool AllowedToManageWallets() diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/SinglePlayerCampaign.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/SinglePlayerCampaign.cs index dc7bc12b1..965b3a274 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/SinglePlayerCampaign.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/SinglePlayerCampaign.cs @@ -407,6 +407,11 @@ namespace Barotrauma GUI.SetSavingIndicatorState(success); crewDead = false; + if (success) + { + // Event history must be registered before ending the round or it will be cleared + GameMain.GameSession.EventManager.RegisterEventHistory(); + } GameMain.GameSession.EndRound("", traitorResults, transitionType); var continueButton = GameMain.GameSession.RoundSummary?.ContinueButton; RoundSummary roundSummary = null; @@ -466,7 +471,6 @@ namespace Barotrauma if (success) { GameMain.GameSession.SubmarineInfo = new SubmarineInfo(GameMain.GameSession.Submarine); - GameMain.GameSession.EventManager.RegisterEventHistory(); SaveUtil.SaveGame(GameMain.GameSession.SavePath); } else diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/RoundSummary.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/RoundSummary.cs index a4ec49919..da2c6b35b 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/RoundSummary.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/RoundSummary.cs @@ -506,7 +506,7 @@ namespace Barotrauma private LocalizedString GetHeaderText(bool gameOver, CampaignMode.TransitionType transitionType) { - string locationName = Submarine.MainSub.AtEndExit ? endLocation?.Name : startLocation?.Name; + string locationName = Submarine.MainSub is { AtEndExit: true } ? endLocation?.Name : startLocation?.Name; string textTag; if (gameOver) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/CharacterInventory.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/CharacterInventory.cs index 1645e1be1..ef7418390 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/CharacterInventory.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/CharacterInventory.cs @@ -774,7 +774,6 @@ namespace Barotrauma } else { - bool isEquippable = item.AllowedSlots.Any(s => s != InvSlotType.Any); var selectedContainer = character.SelectedItem?.GetComponent(); if (selectedContainer != null && @@ -802,8 +801,7 @@ namespace Barotrauma } else if (character.HeldItems.Any(i => i.OwnInventory != null && - /*disallow putting into equipped item if the item is equippable (equip as the quick action instead)*/ - ((i.OwnInventory.CanBePut(item) && (allowInventorySwap || !isEquippable)) || (i.OwnInventory.Capacity == 1 && i.OwnInventory.AllowSwappingContainedItems && i.OwnInventory.Container.CanBeContained(item))))) + (i.OwnInventory.CanBePut(item) || (i.OwnInventory.Capacity == 1 && i.OwnInventory.AllowSwappingContainedItems && i.OwnInventory.Container.CanBeContained(item))))) { return QuickUseAction.PutToEquippedItem; } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/ElectricalDischarger.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/ElectricalDischarger.cs index 1684642d0..f649e423c 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/ElectricalDischarger.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/ElectricalDischarger.cs @@ -25,14 +25,31 @@ namespace Barotrauma.Items.Components foreach (Node node in nodes) { GameMain.ParticleManager.CreateParticle("swirlysmoke", node.WorldPosition, Vector2.Zero); + + if (node.ParentIndex > -1) + { + Vector2 diff = nodes[node.ParentIndex].WorldPosition - node.WorldPosition; + float dist = diff.Length(); + Vector2 normalizedDiff = diff / dist; + for (float x = 0.0f; x < dist; x += 50.0f) + { + var spark = GameMain.ParticleManager.CreateParticle("ElectricShock", node.WorldPosition + normalizedDiff * x, Vector2.Zero); + if (spark != null) + { + spark.Size *= 0.3f; + } + } + + } } } public void DrawElectricity(SpriteBatch spriteBatch) { + if (timer <= 0.0f) { return; } for (int i = 0; i < nodes.Count; i++) { - if (nodes[i].Length <= 1.0f) continue; + if (nodes[i].Length <= 1.0f) { continue; } var node = nodes[i]; electricitySprite.Draw(spriteBatch, (i + frameOffset) % electricitySprite.FrameCount, @@ -46,10 +63,16 @@ namespace Barotrauma.Items.Components if (GameMain.DebugDraw) { - for (int i = 0; i < nodes.Count; i++) + for (int i = 1; i < nodes.Count; i++) { - if (nodes[i].Length <= 1.0f) continue; - GUI.DrawRectangle(spriteBatch, new Vector2(nodes[i].WorldPosition.X, -nodes[i].WorldPosition.Y), Vector2.One * 5, Color.LightCyan, isFilled: true); + GUI.DrawLine(spriteBatch, + new Vector2(nodes[i].WorldPosition.X, -nodes[i].WorldPosition.Y), + new Vector2(nodes[nodes[i].ParentIndex].WorldPosition.X, -nodes[nodes[i].ParentIndex].WorldPosition.Y), + Color.LightCyan, + width: 3); + + if (nodes[i].Length <= 1.0f) { continue; } + GUI.DrawRectangle(spriteBatch, new Vector2(nodes[i].WorldPosition.X, -nodes[i].WorldPosition.Y), Vector2.One * 10, Color.LightCyan, isFilled: true); } } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Deconstructor.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Deconstructor.cs index dd3b30b66..71cfdb1b4 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Deconstructor.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Deconstructor.cs @@ -265,6 +265,8 @@ namespace Barotrauma.Items.Components foreach (DeconstructItem deconstructItem in it.Prefab.DeconstructItems) { if (!deconstructItem.IsValidDeconstructor(item)) { continue; } + float percentageHealth = it.Condition / it.MaxCondition; + if (percentageHealth < deconstructItem.MinCondition || percentageHealth > deconstructItem.MaxCondition) { continue; } RegisterItem(deconstructItem.ItemIdentifier, deconstructItem.Amount); } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/MiniMap.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/MiniMap.cs index 3b25c87b0..c0b717496 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/MiniMap.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/MiniMap.cs @@ -1119,7 +1119,7 @@ namespace Barotrauma.Items.Components if (it.GetComponent() is { } battery) { - int batteryCapacity = (int)(battery.Charge / battery.Capacity * 100f); + int batteryCapacity = (int)(battery.Charge / battery.GetCapacity() * 100f); line2 = TextManager.GetWithVariable("statusmonitor.battery.tooltip", "[amount]", batteryCapacity.ToString()); } else if (it.GetComponent() is { } powerTransfer) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Sonar.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Sonar.cs index 188c75cf9..b6ff975de 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Sonar.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Sonar.cs @@ -1028,7 +1028,7 @@ namespace Barotrauma.Items.Components { foreach (var c in MineralClusters) { - var unobtainedMinerals = c.resources.Where(i => i != null && i.GetRootInventoryOwner() == i); + var unobtainedMinerals = c.resources.Where(i => i != null && i.GetComponent() is { Attached: true }); if (unobtainedMinerals.None()) { continue; } if (!CheckResourceMarkerVisibility(c.center, transducerCenter)) { continue; } var i = unobtainedMinerals.FirstOrDefault(); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Steering.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Steering.cs index 7f06e5dbf..1eff3054d 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Steering.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Steering.cs @@ -390,7 +390,7 @@ namespace Barotrauma.Items.Components !ActiveDockingSource.Docked && DockingTarget?.Item?.Submarine == Level.Loaded.StartOutpost && (DockingTarget?.Item?.Submarine?.Info.IsOutpost ?? false)) { // Docking to an outpost - var subsToLeaveBehind = campaign.GetSubsToLeaveBehind(Item.Submarine); + var subsToLeaveBehind = CampaignMode.GetSubsToLeaveBehind(Item.Submarine); if (subsToLeaveBehind.Any()) { enterOutpostPrompt = new GUIMessageBox( diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Power/PowerContainer.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Power/PowerContainer.cs index 72070c051..c3f44c01d 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Power/PowerContainer.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Power/PowerContainer.cs @@ -133,35 +133,43 @@ namespace Barotrauma.Items.Components public void Draw(SpriteBatch spriteBatch, bool editing = false, float itemDepth = -1) { - if (indicatorSize.X <= 1.0f || indicatorSize.Y <= 1.0f) { return; } + Vector2 scaledIndicatorSize = indicatorSize * item.Scale; + if (scaledIndicatorSize.X <= 2.0f || scaledIndicatorSize.Y <= 2.0f) { return; } + const float outlineThickness = 1.0f; Vector2 itemSize = new Vector2(item.Sprite.SourceRect.Width, item.Sprite.SourceRect.Height) * item.Scale; - Vector2 indicatorPos = -itemSize / 2 + indicatorPosition * item.Scale; - if (item.FlippedX && item.Prefab.CanSpriteFlipX) { indicatorPos.X = -indicatorPos.X - indicatorSize.X * item.Scale; } - if (item.FlippedY && item.Prefab.CanSpriteFlipY) { indicatorPos.Y = -indicatorPos.Y - indicatorSize.Y * item.Scale; } + Vector2 indicatorPos = -itemSize / 2.0f + indicatorPosition * item.Scale; + Vector2 itemPosition = new Vector2(item.DrawPosition.X, -item.DrawPosition.Y); + Vector2 flip = new Vector2(item.FlippedX && item.Prefab.CanSpriteFlipX ? -1.0f : 1.0f, item.FlippedY && item.Prefab.CanSpriteFlipY ? -1.0f : 1.0f); + Matrix rotate = Matrix.CreateRotationZ(item.RotationRad); + Vector2 center = Vector2.Transform((indicatorPos + (scaledIndicatorSize * 0.5f)) * flip, rotate) + itemPosition; if (charge > 0 && capacity > 0) { float chargeRatio = MathHelper.Clamp(charge / capacity, 0.0f, 1.0f); Color indicatorColor = ToolBox.GradientLerp(chargeRatio, Color.Red, Color.Orange, Color.Green); - if (!isHorizontal) + Vector2 indicatorCenter = (indicatorPos + (scaledIndicatorSize * 0.5f)) * flip; + Vector2 indicatorSize; + + if (isHorizontal) { - GUI.DrawRectangle(spriteBatch, - new Vector2(item.DrawPosition.X, -item.DrawPosition.Y + ((indicatorSize.Y * item.Scale) * (1.0f - chargeRatio))) + indicatorPos, - new Vector2(indicatorSize.X * item.Scale, (indicatorSize.Y * item.Scale) * chargeRatio), indicatorColor, true, - depth: item.SpriteDepth - 0.00001f); + float indicatorLength = (scaledIndicatorSize.X - outlineThickness * 2.0f) * chargeRatio; + indicatorCenter.X += -scaledIndicatorSize.X * 0.5f + (flipIndicator ? scaledIndicatorSize.X - outlineThickness - indicatorLength * 0.5f : outlineThickness + indicatorLength * 0.5f); + indicatorSize = new Vector2(indicatorLength, scaledIndicatorSize.Y); } else { - GUI.DrawRectangle(spriteBatch, - new Vector2(item.DrawPosition.X, -item.DrawPosition.Y) + indicatorPos, - new Vector2((indicatorSize.X * item.Scale) * chargeRatio, indicatorSize.Y * item.Scale), indicatorColor, true, - depth: item.SpriteDepth - 0.00001f); + float indicatorLength = (scaledIndicatorSize.Y - outlineThickness * 2.0f) * chargeRatio; + indicatorCenter.Y += -scaledIndicatorSize.Y * 0.5f + (flipIndicator ? outlineThickness + indicatorLength * 0.5f : scaledIndicatorSize.Y - outlineThickness - indicatorLength * 0.5f); + indicatorSize = new Vector2(scaledIndicatorSize.X, indicatorLength); } + + indicatorCenter = Vector2.Transform(indicatorCenter, rotate) + itemPosition; + + GUI.DrawFilledRectangle(spriteBatch, indicatorCenter, indicatorSize, indicatorSize * 0.5f, item.RotationRad, indicatorColor, item.SpriteDepth - 0.00001f); } - GUI.DrawRectangle(spriteBatch, - new Vector2(item.DrawPosition.X, -item.DrawPosition.Y) + indicatorPos, - indicatorSize * item.Scale, Color.Black, depth: item.SpriteDepth - 0.000015f); + + GUI.DrawRectangle(spriteBatch, center, scaledIndicatorSize, scaledIndicatorSize * 0.5f, item.RotationRad, Color.Black, item.SpriteDepth - 0.000015f, outlineThickness, GUI.OutlinePosition.Inside); } public void ClientEventWrite(IWriteMessage msg, NetEntityEvent.IData extraData) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Turret.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Turret.cs index 03e4e2eff..a5395e8e0 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Turret.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Turret.cs @@ -581,7 +581,7 @@ namespace Barotrauma.Items.Components var battery = recipient.Item?.GetComponent(); if (battery == null || battery.Item.Condition <= 0.0f) { continue; } availableCharge += battery.Charge; - availableCapacity += battery.Capacity; + availableCapacity += battery.GetCapacity(); } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Item.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Item.cs index 0c35c29eb..05513e00a 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Item.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Item.cs @@ -1415,6 +1415,15 @@ namespace Barotrauma case EventType.ChangeProperty: ReadPropertyChange(msg, false); break; + case EventType.ItemStat: + byte length = msg.ReadByte(); + for (int i = 0; i < length; i++) + { + var statIdentifier = INetSerializableStruct.Read(msg); + var statValue = msg.ReadSingle(); + StatManager.ApplyStat(statIdentifier, statValue); + } + break; case EventType.Upgrade: Identifier identifier = msg.ReadIdentifier(); byte level = msg.ReadByte(); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/ItemPrefab.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/ItemPrefab.cs index 8c6aed81b..bc69b2e51 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/ItemPrefab.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/ItemPrefab.cs @@ -208,6 +208,13 @@ namespace Barotrauma DecorativeSpriteGroups = decorativeSpriteGroups.Select(kvp => (kvp.Key, kvp.Value.ToImmutableArray())).ToImmutableDictionary(); } + public bool CanCharacterBuy() + { + if (!DefaultPrice.RequiresUnlock) { return true; } + + return Character.Controlled is not null && Character.Controlled.HasStoreAccessForItem(this); + } + public override void UpdatePlacing(Camera cam) { Vector2 position = Submarine.MouseToWorldGrid(cam, Submarine.MainSub); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Map/Map/Map.cs b/Barotrauma/BarotraumaClient/ClientSource/Map/Map/Map.cs index 278e3a36c..c32f82187 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Map/Map/Map.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Map/Map/Map.cs @@ -162,23 +162,27 @@ namespace Barotrauma RemoveFogOfWar(StartLocation); - GenerateLocationConnectionVisuals(); + GenerateAllLocationConnectionVisuals(); } - partial void GenerateLocationConnectionVisuals() + partial void GenerateAllLocationConnectionVisuals() { foreach (LocationConnection connection in Connections) { - Vector2 connectionStart = connection.Locations[0].MapPosition; - Vector2 connectionEnd = connection.Locations[1].MapPosition; - float connectionLength = Vector2.Distance(connectionStart, connectionEnd); - int iterations = Math.Min((int)Math.Sqrt(connectionLength * generationParams.ConnectionIndicatorIterationMultiplier), 5); - connection.CrackSegments.Clear(); - connection.CrackSegments.AddRange(MathUtils.GenerateJaggedLine( - connectionStart, connectionEnd, - iterations, connectionLength * generationParams.ConnectionIndicatorDisplacementMultiplier)); + GenerateLocationConnectionVisuals(connection); } } + partial void GenerateLocationConnectionVisuals(LocationConnection connection) + { + Vector2 connectionStart = connection.Locations[0].MapPosition; + Vector2 connectionEnd = connection.Locations[1].MapPosition; + float connectionLength = Vector2.Distance(connectionStart, connectionEnd); + int iterations = Math.Min((int)Math.Sqrt(connectionLength * generationParams.ConnectionIndicatorIterationMultiplier), 5); + connection.CrackSegments.Clear(); + connection.CrackSegments.AddRange(MathUtils.GenerateJaggedLine( + connectionStart, connectionEnd, + iterations, connectionLength * generationParams.ConnectionIndicatorDisplacementMultiplier)); + } private void LocationChanged(Location prevLocation, Location newLocation) { @@ -414,7 +418,7 @@ namespace Barotrauma new GUIMessageBox(string.Empty, TextManager.Get("LockedPathTooltip")); } //clients aren't allowed to select the location without a permission - else if ((GameMain.GameSession?.GameMode as CampaignMode)?.AllowedToManageCampaign(Networking.ClientPermissions.ManageMap) ?? false) + else if (CampaignMode.AllowedToManageCampaign(Networking.ClientPermissions.ManageMap)) { connectionHighlightState = 0.0f; SelectedConnection = connection; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/NetEntityEvent/ClientEntityEventManager.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/NetEntityEvent/ClientEntityEventManager.cs index 4a46f3c9e..c6cce06c2 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/NetEntityEvent/ClientEntityEventManager.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/NetEntityEvent/ClientEntityEventManager.cs @@ -277,16 +277,12 @@ namespace Barotrauma.Networking public void Clear() { - ID = 0; - lastReceivedID = 0; - firstNewID = null; - - events.Clear(); eventLastSent.Clear(); - MidRoundSyncingDone = false; + + ClearSelf(); } /// @@ -297,6 +293,10 @@ namespace Barotrauma.Networking { ID = 0; events.Clear(); + if (thisClient != null) + { + thisClient.LastSentEntityEventID = 0; + } } } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerList/PingUtils.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerList/PingUtils.cs index fc23c4df9..56138ec83 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerList/PingUtils.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerList/PingUtils.cs @@ -14,7 +14,7 @@ namespace Barotrauma.Networking { static class PingUtils { - private static readonly Dictionary activePings = new Dictionary(); + private static readonly Dictionary activePings = new Dictionary(); private static bool steamPingInfoReady; @@ -36,9 +36,9 @@ namespace Barotrauma.Networking switch (serverInfo.Endpoint) { - case LidgrenEndpoint { NetEndpoint: { Address: var address } }: + case LidgrenEndpoint { NetEndpoint: var endPoint }: - GetIPAddressPing(serverInfo, address, onPingDiscovered); + GetIPAddressPing(serverInfo, endPoint, onPingDiscovered); break; case SteamP2PEndpoint steamP2PEndpoint: TaskPool.Add($"EstimateSteamLobbyPing ({steamP2PEndpoint.StringRepresentation})", @@ -131,9 +131,9 @@ namespace Barotrauma.Networking } } - private static void GetIPAddressPing(ServerInfo serverInfo, IPAddress address, Action onPingDiscovered) + private static void GetIPAddressPing(ServerInfo serverInfo, IPEndPoint endPoint, Action onPingDiscovered) { - if (IPAddress.IsLoopback(address)) + if (IPAddress.IsLoopback(endPoint.Address)) { serverInfo.Ping = Option.Some(0); onPingDiscovered(serverInfo); @@ -142,24 +142,24 @@ namespace Barotrauma.Networking { lock (activePings) { - if (activePings.ContainsKey(address)) { return; } - activePings.Add(address, activePings.Any() ? activePings.Values.Max() + 1 : 0); + if (activePings.ContainsKey(endPoint)) { return; } + activePings.Add(endPoint, activePings.Any() ? activePings.Values.Max() + 1 : 0); } serverInfo.Ping = Option.None(); - TaskPool.Add($"PingServerAsync ({address})", PingServerAsync(address, 1000), + TaskPool.Add($"PingServerAsync ({endPoint})", PingServerAsync(endPoint, 1000), rtt => { if (!rtt.TryGetResult(out serverInfo.Ping)) { serverInfo.Ping = Option.None(); } onPingDiscovered(serverInfo); lock (activePings) { - activePings.Remove(address); + activePings.Remove(endPoint); } }); } } - private static async Task> PingServerAsync(IPAddress ipAddress, int timeOut) + private static async Task> PingServerAsync(IPEndPoint endPoint, int timeOut) { await Task.Yield(); bool shouldGo = false; @@ -167,21 +167,21 @@ namespace Barotrauma.Networking { lock (activePings) { - shouldGo = activePings.Count(kvp => kvp.Value < activePings[ipAddress]) < 25; + shouldGo = activePings.Count(kvp => kvp.Value < activePings[endPoint]) < 25; } await Task.Delay(25); } - if (ipAddress == null) { return Option.None(); } + if (endPoint?.Address == null) { return Option.None(); } //don't attempt to ping if the address is IPv6 and it's not supported - if (ipAddress.AddressFamily == AddressFamily.InterNetworkV6 && !Socket.OSSupportsIPv6) { return Option.None(); } + if (endPoint.Address.AddressFamily == AddressFamily.InterNetworkV6 && !Socket.OSSupportsIPv6) { return Option.None(); } Ping ping = new Ping(); byte[] buffer = new byte[32]; try { - PingReply pingReply = await ping.SendPingAsync(ipAddress, timeOut, buffer, new PingOptions(128, true)); + PingReply pingReply = await ping.SendPingAsync(endPoint.Address, timeOut, buffer, new PingOptions(128, true)); return pingReply.Status switch { @@ -191,9 +191,9 @@ namespace Barotrauma.Networking } catch (Exception ex) { - GameAnalyticsManager.AddErrorEventOnce("ServerListScreen.PingServer:PingException" + ipAddress, GameAnalyticsManager.ErrorSeverity.Warning, "Failed to ping a server - " + (ex?.InnerException?.Message ?? ex.Message)); + GameAnalyticsManager.AddErrorEventOnce("ServerListScreen.PingServer:PingException" + endPoint.Address, GameAnalyticsManager.ErrorSeverity.Warning, "Failed to ping a server - " + (ex?.InnerException?.Message ?? ex.Message)); #if DEBUG - DebugConsole.NewMessage("Failed to ping a server (" + ipAddress + ") - " + (ex?.InnerException?.Message ?? ex.Message), Color.Red); + DebugConsole.NewMessage("Failed to ping a server (" + endPoint.Address + ") - " + (ex?.InnerException?.Message ?? ex.Message), Color.Red); #endif return Option.None(); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerSettings.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerSettings.cs index 10829d4fb..b6c1b2583 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerSettings.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerSettings.cs @@ -702,10 +702,30 @@ namespace Barotrauma.Networking { Enabled = !GameMain.NetworkMember.GameStarted }; - var cargoFrame = new GUIListBox(new RectTransform(new Vector2(0.6f, 0.7f), settingsTabs[(int)SettingsTab.Rounds].RectTransform, Anchor.BottomRight, Pivot.BottomLeft)) + + var cargoFrame = new GUIFrame(new RectTransform(new Vector2(0.6f, 0.7f), settingsTabs[(int)SettingsTab.Rounds].RectTransform, Anchor.BottomRight, Pivot.BottomLeft)) { Visible = false }; + var cargoContent = new GUILayoutGroup(new RectTransform(new Vector2(0.95f, 0.95f), cargoFrame.RectTransform, Anchor.Center)) + { + Stretch = true + }; + + var filterText = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), cargoContent.RectTransform), TextManager.Get("serverlog.filter"), font: GUIStyle.SubHeadingFont); + var entityFilterBox = new GUITextBox(new RectTransform(new Vector2(0.5f, 1.0f), filterText.RectTransform, Anchor.CenterRight), font: GUIStyle.Font, createClearButton: true); + filterText.RectTransform.MinSize = new Point(0, entityFilterBox.RectTransform.MinSize.Y); + var cargoList = new GUIListBox(new RectTransform(new Vector2(1.0f, 0.8f), cargoContent.RectTransform)); + entityFilterBox.OnTextChanged += (textBox, text) => + { + foreach (var child in cargoList.Content.Children) + { + if (child.UserData is not ItemPrefab itemPrefab) { continue; } + child.Visible = string.IsNullOrEmpty(text) || itemPrefab.Name.Contains(text, StringComparison.OrdinalIgnoreCase); + } + return true; + }; + cargoButton.UserData = cargoFrame; cargoButton.OnClicked = (button, obj) => { @@ -721,7 +741,7 @@ namespace Barotrauma.Networking GUITextBlock.AutoScaleAndNormalize(buttonHolder.Children.Select(c => ((GUIButton)c).TextBlock)); - foreach (ItemPrefab ip in ItemPrefab.Prefabs) + foreach (ItemPrefab ip in ItemPrefab.Prefabs.OrderBy(ip => ip.Name)) { if (ip.AllowAsExtraCargo.HasValue) { @@ -732,10 +752,10 @@ namespace Barotrauma.Networking if (!ip.CanBeBought) { continue; } } - var itemFrame = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.15f), cargoFrame.Content.RectTransform) { MinSize = new Point(0, 30) }, isHorizontal: true) + var itemFrame = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.15f), cargoList.Content.RectTransform) { MinSize = new Point(0, 30) }, isHorizontal: true) { Stretch = true, - UserData = cargoFrame, + UserData = ip, RelativeSpacing = 0.05f }; @@ -778,7 +798,7 @@ namespace Barotrauma.Networking numberInput.IntValue = ExtraCargo.ContainsKey(ip) ? ExtraCargo[ip] : 0; CoroutineManager.Invoke(() => { - foreach (var child in cargoFrame.Content.GetAllChildren()) + foreach (var child in cargoList.Content.GetAllChildren()) { if (child.GetChild() is GUINumberInput otherNumberInput) { diff --git a/Barotrauma/BarotraumaClient/ClientSource/Particles/ParticleEmitter.cs b/Barotrauma/BarotraumaClient/ClientSource/Particles/ParticleEmitter.cs index cae3906e3..468f07e54 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Particles/ParticleEmitter.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Particles/ParticleEmitter.cs @@ -82,6 +82,9 @@ namespace Barotrauma.Particles [Editable, Serialize(false, IsPropertySaveable.Yes)] public bool CopyEntityAngle { get; set; } + [Editable, Serialize(true, IsPropertySaveable.Yes, description: "Should the entity heading direction be applied to the particle rotation? Only affects after flipping the texture and when CopyEntityAngle is true.")] + public bool CopyEntityDir { get; set; } + [Editable, Serialize("1,1,1,1", IsPropertySaveable.Yes)] public Color ColorMultiplier { get; set; } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignUI.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignUI.cs index a405d730e..f8450df3b 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignUI.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignUI.cs @@ -167,7 +167,7 @@ namespace Barotrauma foreach (GUITickBox tickBox in missionTickBoxes) { bool disable = hasMaxMissions && !tickBox.Selected; - tickBox.Enabled = Campaign.AllowedToManageCampaign(ClientPermissions.ManageMap) && !disable; + tickBox.Enabled = CampaignMode.AllowedToManageCampaign(ClientPermissions.ManageMap) && !disable; tickBox.Box.DisabledColor = disable ? tickBox.Box.Color * 0.5f : tickBox.Box.Color * 0.8f; foreach (GUIComponent child in tickBox.Parent.Parent.Children) { @@ -315,7 +315,7 @@ namespace Barotrauma if (GUI.MouseOn == tickBox) { return false; } if (tickBox != null) { - if (Campaign.AllowedToManageCampaign(ClientPermissions.ManageMap) && tickBox.Enabled) + if (CampaignMode.AllowedToManageCampaign(ClientPermissions.ManageMap) && tickBox.Enabled) { tickBox.Selected = !tickBox.Selected; } @@ -356,10 +356,10 @@ namespace Barotrauma }; tickBox.RectTransform.MinSize = new Point(tickBox.Rect.Height, 0); tickBox.RectTransform.IsFixedSize = true; - tickBox.Enabled = Campaign.AllowedToManageCampaign(ClientPermissions.ManageMap); + tickBox.Enabled = CampaignMode.AllowedToManageCampaign(ClientPermissions.ManageMap); tickBox.OnSelected += (GUITickBox tb) => { - if (!Campaign.AllowedToManageCampaign(Networking.ClientPermissions.ManageMap)) { return false; } + if (!CampaignMode.AllowedToManageCampaign(Networking.ClientPermissions.ManageMap)) { return false; } if (tb.Selected) { @@ -379,7 +379,7 @@ namespace Barotrauma UpdateMaxMissions(connection.OtherLocation(currentDisplayLocation)); if ((Campaign is MultiPlayerCampaign multiPlayerCampaign) && !multiPlayerCampaign.SuppressStateSending && - Campaign.AllowedToManageCampaign(Networking.ClientPermissions.ManageMap)) + CampaignMode.AllowedToManageCampaign(Networking.ClientPermissions.ManageMap)) { GameMain.Client?.SendCampaignState(); } @@ -472,7 +472,12 @@ namespace Barotrauma { TextGetter = () => { - return TextManager.AddPunctuation(':', TextManager.Get("Missions"), $"{Campaign.NumberOfMissionsAtLocation(destination)}/{Campaign.Settings.TotalMaxMissionCount}"); + int missionCount = 0; + if (GameMain.GameSession != null && Campaign.Map?.CurrentLocation?.SelectedMissions != null) + { + missionCount = Campaign.Map.CurrentLocation.SelectedMissions.Count(m => m.Locations.Contains(location) && !GameMain.GameSession.Missions.Contains(m)); + } + return TextManager.AddPunctuation(':', TextManager.Get("Missions"), $"{missionCount}/{Campaign.Settings.TotalMaxMissionCount}"); } }; @@ -500,7 +505,7 @@ namespace Barotrauma return true; }, Enabled = true, - Visible = Campaign.AllowedToManageCampaign(ClientPermissions.ManageMap) + Visible = CampaignMode.AllowedToManageCampaign(ClientPermissions.ManageMap) }; buttonArea.RectTransform.MinSize = new Point(0, StartButton.RectTransform.MinSize.Y); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/CharacterEditor/Wizard.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/CharacterEditor/Wizard.cs index 2f8f73962..642648f1b 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/CharacterEditor/Wizard.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/CharacterEditor/Wizard.cs @@ -351,7 +351,7 @@ namespace Barotrauma.CharacterEditor { if (string.IsNullOrEmpty(contentPackageNameElement.Text)) { - contentPackageNameElement.Flash(); + contentPackageNameElement.Flash(useRectangleFlash: true); return false; } if (ContentPackageManager.AllPackages.Any(cp => cp.Name.ToLower() == contentPackageNameElement.Text.ToLower())) @@ -405,7 +405,7 @@ namespace Barotrauma.CharacterEditor { if (ContentPackage == null) { - contentPackageDropDown.Flash(); + contentPackageDropDown.Flash(useRectangleFlash: true); return false; } @@ -417,7 +417,7 @@ namespace Barotrauma.CharacterEditor if (!File.Exists(evaluatedTexturePath)) { GUI.AddMessage(GetCharacterEditorTranslation("TextureDoesNotExist"), GUIStyle.Red); - texturePathElement.Flash(GUIStyle.Red); + texturePathElement.Flash(useRectangleFlash: true); return false; } } @@ -425,7 +425,7 @@ namespace Barotrauma.CharacterEditor if (!path.EndsWith(".png", StringComparison.OrdinalIgnoreCase)) { GUI.AddMessage(TextManager.Get("WrongFileType"), GUIStyle.Red); - texturePathElement.Flash(GUIStyle.Red); + texturePathElement.Flash(useRectangleFlash: true); return false; } if (IsCopy) @@ -486,7 +486,8 @@ namespace Barotrauma.CharacterEditor { PlaySoundOnSelect = true, }; - var removeLimbButton = new GUIButton(new RectTransform(new Vector2(0.05f, 1.0f), limbEditLayout.RectTransform, scaleBasis: ScaleBasis.BothHeight), style: "GUIMinusButton") + var limbButtonSize = Vector2.One * 0.8f; + var removeLimbButton = new GUIButton(new RectTransform(limbButtonSize, limbEditLayout.RectTransform, scaleBasis: ScaleBasis.BothHeight), style: "GUIMinusButton") { OnClicked = (b, d) => { @@ -497,7 +498,7 @@ namespace Barotrauma.CharacterEditor return true; } }; - var addLimbButton = new GUIButton(new RectTransform(new Vector2(0.05f, 1.0f), limbEditLayout.RectTransform, scaleBasis: ScaleBasis.BothHeight), style: "GUIPlusButton") + var addLimbButton = new GUIButton(new RectTransform(limbButtonSize, limbEditLayout.RectTransform, scaleBasis: ScaleBasis.BothHeight), style: "GUIPlusButton") { OnClicked = (b, d) => { diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/EditorScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/EditorScreen.cs index 38202f624..66ed3c9fd 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/EditorScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/EditorScreen.cs @@ -16,8 +16,8 @@ namespace Barotrauma GameMain.LightManager.LosEnabled = true; Hull.EditFire = false; Hull.EditWater = false; -#endif HumanAIController.DisableCrewAI = false; +#endif } protected virtual void DeselectEditorSpecific() { } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/MainMenuScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/MainMenuScreen.cs index 420328bc7..e89550ec1 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/MainMenuScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/MainMenuScreen.cs @@ -334,7 +334,7 @@ namespace Barotrauma OnClicked = (button, userData) => { string url = TextManager.Get("EditorDisclaimerWikiUrl").Fallback("https://barotraumagame.com/wiki").Value; - GameMain.Instance.ShowOpenUrlInWebBrowserPrompt(url, promptExtensionTag: "wikinotice"); + GameMain.ShowOpenUrlInWebBrowserPrompt(url, promptExtensionTag: "wikinotice"); return true; } }; @@ -1011,7 +1011,7 @@ namespace Barotrauma GUI.DrawLine(spriteBatch, textPos, textPos - Vector2.UnitX * textSize.X, mouseOn ? Color.White : Color.White * 0.7f); if (mouseOn && PlayerInput.PrimaryMouseButtonClicked()) { - GameMain.Instance.ShowOpenUrlInWebBrowserPrompt("http://privacypolicy.daedalic.com"); + GameMain.ShowOpenUrlInWebBrowserPrompt("http://privacypolicy.daedalic.com"); } } textPos.Y -= textSize.Y; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/NetLobbyScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/NetLobbyScreen.cs index 9471d8128..6d966c50e 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/NetLobbyScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/NetLobbyScreen.cs @@ -1817,7 +1817,11 @@ namespace Barotrauma subList = dropDown.ListBox.Content; } - var frame = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.15f), subList.RectTransform) { MinSize = new Point(0, 25) }, + var frame = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.1f), subList.RectTransform) + { + //enough space for 2 lines (price and class) + some padding + MinSize = new Point(0, (int)(GUIStyle.SmallFont.LineHeight * 2.3f)) + }, style: "ListBoxElement") { ToolTip = sub.Description, diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/ServerListScreen/ServerListScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/ServerListScreen/ServerListScreen.cs index 8e54407a4..dcb6ab842 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/ServerListScreen/ServerListScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/ServerListScreen/ServerListScreen.cs @@ -7,6 +7,8 @@ using System; using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; +using System.Net; +using System.Net.Sockets; using System.Xml.Linq; namespace Barotrauma @@ -953,8 +955,19 @@ namespace Barotrauma okButton.Enabled = false; okButton.OnClicked = (btn, userdata) => { - if (!Endpoint.Parse(endpointBox.Text).TryUnwrap(out var endpoint)) { return false; } - JoinServer(endpoint, ""); + if (Endpoint.Parse(endpointBox.Text).TryUnwrap(out var endpoint)) + { + JoinServer(endpoint, ""); + } + else if (LidgrenEndpoint.ParseFromWithHostNameCheck(endpointBox.Text, tryParseHostName: true).TryUnwrap(out var lidgrenEndpoint)) + { + JoinServer(lidgrenEndpoint, ""); + } + else + { + new GUIMessageBox(TextManager.Get("error"), TextManager.GetWithVariable("invalidipaddress", "[serverip]:[port]", endpointBox.Text)); + endpointBox.Flash(); + } msgBox.Close(); return false; }; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/SpriteEditorScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/SpriteEditorScreen.cs index df8fc28ba..f32050a63 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/SpriteEditorScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/SpriteEditorScreen.cs @@ -379,6 +379,9 @@ namespace Barotrauma void CreateSprite(ContentXElement element) { + //empty element, probably an item variant? + if (element.Attributes().None()) { return; } + string spriteFolder = ""; ContentPath texturePath = null; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/SubEditorScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/SubEditorScreen.cs index 0952422e7..aa6c37369 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/SubEditorScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/SubEditorScreen.cs @@ -1920,9 +1920,15 @@ namespace Barotrauma { filePath = $"{ContentPath.ModDirStr}/{filePath[packageDir.Length..]}"; } - if (!modProject.Files.Any(f => f.Type == subFileType && - f.Path == filePath)) + if (!modProject.Files.Any(f => f.Type == subFileType && f.Path == filePath)) { + //check if there's a file with the same name but different filename case + var matchingFile = modProject.Files.FirstOrDefault(f => f.Type == subFileType && filePath.CleanUpPath().Equals(f.Path.CleanUpPath(), StringComparison.OrdinalIgnoreCase)); + if (matchingFile != null) + { + File.Delete(matchingFile.Path.Replace(ContentPath.ModDirStr, packageDir)); + modProject.RemoveFile(matchingFile); + } var newFile = ModProject.File.FromPath(filePath, subFileType); modProject.AddFile(newFile); } @@ -2479,7 +2485,7 @@ namespace Barotrauma new GUINumberInput(new RectTransform(new Vector2(0.4f, 1.0f), tierGroup.RectTransform), NumberType.Int) { - IntValue = SubmarineInfo.GetDefaultTier(MainSub.Info.Price), + IntValue = MainSub.Info.Tier, MinValueInt = 1, MaxValueInt = 3, OnValueChanged = (numberInput) => @@ -2821,6 +2827,7 @@ namespace Barotrauma OnClicked = (button, o) => { var requiredPackages = MapEntity.mapEntityList.Select(e => e.Prefab.ContentPackage) + .Where(cp => cp != null) .Distinct().OfType().Select(p => p.Name).ToHashSet(); var tickboxes = requiredContentPackList.Content.Children.OfType().ToArray(); tickboxes.ForEach(tb => tb.Selected = requiredPackages.Contains(tb.UserData as string ?? "")); @@ -2919,7 +2926,7 @@ namespace Barotrauma subTypeDropdown.SelectItem(MainSub.Info.Type); - if (quickSave) { SaveSub(null); } + if (quickSave) { SaveSub(packageToSaveInList.SelectedData as ContentPackage); } } private void CreateSaveAssemblyScreen() diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/TestScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/TestScreen.cs index abfbb86e2..e36471206 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/TestScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/TestScreen.cs @@ -21,6 +21,7 @@ namespace Barotrauma public static Character? dummyCharacter; public static Effect? BlueprintEffect; + public TabMenu? TabMenu; public TestScreen() { @@ -49,9 +50,10 @@ namespace Barotrauma } dummyCharacter = Character.Create(CharacterPrefab.HumanSpeciesName, Vector2.Zero, "", id: Entity.DummyID, hasAi: false); - dummyCharacter.Info.Job = new Job(JobPrefab.Prefabs.Where(jp => TalentTree.JobTalentTrees.ContainsKey(jp.Identifier)).GetRandom(Rand.RandSync.Unsynced)); + dummyCharacter.Info.Job = new Job(JobPrefab.Prefabs.FirstOrDefault(static jp => jp.Identifier == "assistant")); dummyCharacter.Info.Name = "Galldren"; dummyCharacter.Inventory.CreateSlots(); + dummyCharacter.Info.GiveExperience(999999); miniMapItem = new Item(ItemPrefab.Find(null, "deconstructor".ToIdentifier()), Vector2.Zero, null, 1337, false); @@ -61,6 +63,7 @@ namespace Barotrauma } Character.Controlled = dummyCharacter; GameMain.World.ProcessChanges(); + TabMenu = new TabMenu(); } public override void AddToGUIUpdateList() @@ -68,35 +71,37 @@ namespace Barotrauma Frame.AddToGUIUpdateList(); CharacterHUD.AddToGUIUpdateList(dummyCharacter); dummyCharacter?.SelectedItem?.AddToGUIUpdateList(); + TabMenu?.AddToGUIUpdateList(); } public override void Update(double deltaTime) { base.Update(deltaTime); + TabMenu?.Update((float)deltaTime); - if (dummyCharacter is { } dummy && miniMapItem is { } item) - { - if (dummy.SelectedItem != item) - { - dummy.SelectedItem = item; - } - - dummy.SelectedItem?.UpdateHUD(Cam, dummy, (float)deltaTime); - Vector2 pos = FarseerPhysics.ConvertUnits.ToSimUnits(item.Position); - - foreach (Limb limb in dummy.AnimController.Limbs) - { - limb.body.SetTransform(pos, 0.0f); - } - - if (dummy.AnimController?.Collider is { } collider) - { - collider.SetTransform(pos, 0); - } - - dummy.ControlLocalPlayer((float)deltaTime, Cam, false); - dummy.Control((float)deltaTime, Cam); - } + // if (dummyCharacter is { } dummy && miniMapItem is { } item) + // { + // if (dummy.SelectedConstruction != item) + // { + // dummy.SelectedConstruction = item; + // } + // + // dummy.SelectedConstruction?.UpdateHUD(Cam, dummy, (float)deltaTime); + // Vector2 pos = FarseerPhysics.ConvertUnits.ToSimUnits(item.Position); + // + // foreach (Limb limb in dummy.AnimController.Limbs) + // { + // limb.body.SetTransform(pos, 0.0f); + // } + // + // if (dummy.AnimController?.Collider is { } collider) + // { + // collider.SetTransform(pos, 0); + // } + // + // dummy.ControlLocalPlayer((float)deltaTime, Cam, false); + // dummy.Control((float)deltaTime, Cam); + // } } public override void Draw(double deltaTime, GraphicsDevice graphics, SpriteBatch spriteBatch) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Serialization/SerializableEntityEditor.cs b/Barotrauma/BarotraumaClient/ClientSource/Serialization/SerializableEntityEditor.cs index a63e7c905..c3c4c3873 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Serialization/SerializableEntityEditor.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Serialization/SerializableEntityEditor.cs @@ -1332,16 +1332,18 @@ namespace Barotrauma } } - private void TrySendNetworkUpdate(ISerializableEntity entity, SerializableProperty property) + private static void TrySendNetworkUpdate(ISerializableEntity entity, SerializableProperty property) { - if (entity is ItemComponent e) + if (GameMain.Client != null) { - entity = e.Item; - } - - if (GameMain.Client != null && entity is Item item) - { - GameMain.Client.CreateEntityEvent(item, new Item.ChangePropertyEventData(property)); + if (entity is Item item) + { + GameMain.Client.CreateEntityEvent(item, new Item.ChangePropertyEventData(property, item)); + } + else if (entity is ItemComponent ic) + { + GameMain.Client.CreateEntityEvent(ic.Item, new Item.ChangePropertyEventData(property, ic)); + } } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Settings/SettingsMenu.cs b/Barotrauma/BarotraumaClient/ClientSource/Settings/SettingsMenu.cs index 8e2172550..65a6e87bc 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Settings/SettingsMenu.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Settings/SettingsMenu.cs @@ -785,13 +785,7 @@ namespace Barotrauma { OnClicked = (btn, obj) => { - GameSettings.SetCurrentConfig(unsavedConfig); - if (WorkshopMenu is MutableWorkshopMenu mutableWorkshopMenu && - mutableWorkshopMenu.CurrentTab == MutableWorkshopMenu.Tab.InstalledMods) - { - mutableWorkshopMenu.Apply(); - } - GameSettings.SaveCurrentConfig(); + ApplyInstalledModChanges(); mainFrame.Flash(color: GUIStyle.Green); return false; }, @@ -804,6 +798,17 @@ namespace Barotrauma }; } + public void ApplyInstalledModChanges() + { + GameSettings.SetCurrentConfig(unsavedConfig); + if (WorkshopMenu is MutableWorkshopMenu mutableWorkshopMenu && + mutableWorkshopMenu.CurrentTab == MutableWorkshopMenu.Tab.InstalledMods) + { + mutableWorkshopMenu.Apply(); + } + GameSettings.SaveCurrentConfig(); + } + public void Close() { if (GameMain.Client is null || GameSettings.CurrentConfig.Audio.VoiceSetting == VoiceMode.Disabled) diff --git a/Barotrauma/BarotraumaClient/ClientSource/StatusEffects/StatusEffect.cs b/Barotrauma/BarotraumaClient/ClientSource/StatusEffects/StatusEffect.cs index 82f0bc176..86fb3e0f8 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/StatusEffects/StatusEffect.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/StatusEffects/StatusEffect.cs @@ -21,6 +21,13 @@ namespace Barotrauma private Entity soundEmitter; private double loopStartTime; private bool loopSound; + /// + /// Each new sound overrides the existing sounds that were launched with this status effect, meaning the old sound will be faded out and disposed and the new sound will be played instead of the old. + /// Normally the call to play the sound is ignored if there's an existing sound playing when the effect triggers. + /// Used for example for ensuring that rapid playing sounds restart playing even when the previous clip(s) have not yet stopped. + /// Use with caution. + /// + private bool forcePlaySounds; partial void InitProjSpecific(ContentXElement element, string parentDebugName) { @@ -50,6 +57,7 @@ namespace Barotrauma break; } } + forcePlaySounds = element.GetAttributeBool(nameof(forcePlaySounds), false); } partial void ApplyProjSpecific(float deltaTime, Entity entity, IReadOnlyList targets, Hull hull, Vector2 worldPosition, bool playSound) @@ -71,7 +79,7 @@ namespace Barotrauma { angle = item.body.Rotation + ((item.body.Dir > 0.0f) ? 0.0f : MathHelper.Pi); particleRotation = -item.body.Rotation; - if (item.body.Dir < 0.0f) + if (emitter.Prefab.Properties.CopyEntityDir && item.body.Dir < 0.0f) { particleRotation += MathHelper.Pi; mirrorAngle = true; @@ -96,7 +104,9 @@ namespace Barotrauma { angle = targetLimb.body.Rotation + ((targetLimb.body.Dir > 0.0f) ? 0.0f : MathHelper.Pi); particleRotation = -targetLimb.body.Rotation; - if (targetLimb.body.Dir < 0.0f) + float offset = targetLimb.Params.GetSpriteOrientation() - MathHelper.PiOver2; + particleRotation += offset; + if (emitter.Prefab.Properties.CopyEntityDir && targetLimb.body.Dir < 0.0f) { particleRotation += MathHelper.Pi; mirrorAngle = true; @@ -112,10 +122,14 @@ namespace Barotrauma private void PlaySound(Entity entity, Hull hull, Vector2 worldPosition) { - if (sounds.Count == 0) return; + if (sounds.Count == 0) { return; } - if (soundChannel == null || !soundChannel.IsPlaying) + if (soundChannel == null || !soundChannel.IsPlaying || forcePlaySounds) { + if (soundChannel != null && soundChannel.IsPlaying) + { + soundChannel.FadeOutAndDispose(); + } if (soundSelectionMode == SoundSelectionMode.All) { foreach (RoundSound sound in sounds) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Steam/WorkshopMenu/Mutable/InstalledTab.cs b/Barotrauma/BarotraumaClient/ClientSource/Steam/WorkshopMenu/Mutable/InstalledTab.cs index cce1627d8..afb6f8bd3 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Steam/WorkshopMenu/Mutable/InstalledTab.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Steam/WorkshopMenu/Mutable/InstalledTab.cs @@ -93,7 +93,7 @@ namespace Barotrauma.Steam return (left, center, right); } - private void HandleDraggingAcrossModLists(GUIListBox from, GUIListBox to) + private static void HandleDraggingAcrossModLists(GUIListBox from, GUIListBox to) { if (to.Rect.Contains(PlayerInput.MousePosition) && from.DraggedElement != null) { @@ -197,7 +197,11 @@ namespace Barotrauma.Steam out onInstalledInfoButtonHit, out var deselect); GUILayoutGroup mainLayout = - new GUILayoutGroup(new RectTransform(Vector2.One, outerContainer.Content.RectTransform), childAnchor: Anchor.TopCenter); + new GUILayoutGroup(new RectTransform(Vector2.One, outerContainer.Content.RectTransform), childAnchor: Anchor.TopCenter) + { + Stretch = true, + AbsoluteSpacing = GUI.IntScale(5) + }; mainLayout.RectTransform.SetAsFirstChild(); var (topLeft, _, topRight) = CreateSidebars(mainLayout, centerWidth: 0.05f, leftWidth: 0.475f, rightWidth: 0.475f, height: 0.13f); @@ -257,7 +261,12 @@ namespace Barotrauma.Steam right.ChildAnchor = Anchor.TopRight; //enabled mods - Label(left, TextManager.Get("enabledregular"), GUIStyle.SubHeadingFont); + var label = Label(left, TextManager.Get("enabledregular"), GUIStyle.SubHeadingFont); + new GUIImage(new RectTransform(new Point(label.Rect.Height), label.RectTransform, Anchor.CenterRight), style: "GUIButtonInfo") + { + ToolTip = TextManager.Get("ModLoadOrderExplanation") + }; + var enabledModsList = new GUIListBox(new RectTransform((1.0f, 0.93f), left.RectTransform)) { CurrentDragMode = GUIListBox.DragMode.DragOutsideBox, @@ -478,7 +487,7 @@ namespace Barotrauma.Steam { string str = modsListFilter.Text; enabledRegularModsList.Content.Children.Concat(disabledRegularModsList.Content.Children) - .ForEach(c => c.Visible = !(c.UserData is ContentPackage p) + .ForEach(c => c.Visible = c.UserData is not ContentPackage p || ModNameMatches(p, str) && ModMatchesTickboxes(p, c)); } @@ -504,12 +513,12 @@ namespace Barotrauma.Steam //are enabled, and all files match either of them so show this mod } else if (modsListFilterTickboxes[Filter.ShowOnlySubs].Selected - && p.Files.Any(f => !(f is BaseSubFile))) + && p.Files.Any(f => f is not BaseSubFile)) { matches = false; } else if (modsListFilterTickboxes[Filter.ShowOnlyItemAssemblies].Selected - && p.Files.Any(f => !(f is ItemAssemblyFile))) + && p.Files.Any(f => f is not ItemAssemblyFile)) { matches = false; } @@ -520,7 +529,7 @@ namespace Barotrauma.Steam private void PrepareToShowModInfo(ContentPackage mod) { if (!mod.UgcId.TryUnwrap(out var ugcId) - || !(ugcId is SteamWorkshopId workshopId)) { return; } + || ugcId is not SteamWorkshopId workshopId) { return; } TaskPool.Add($"PrepareToShow{mod.UgcId}Info", SteamManager.Workshop.GetItem(workshopId.Value), t => { diff --git a/Barotrauma/BarotraumaClient/ClientSource/Steam/WorkshopMenu/Mutable/ItemList.cs b/Barotrauma/BarotraumaClient/ClientSource/Steam/WorkshopMenu/Mutable/ItemList.cs index 17a677d57..62e930476 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Steam/WorkshopMenu/Mutable/ItemList.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Steam/WorkshopMenu/Mutable/ItemList.cs @@ -598,13 +598,14 @@ namespace Barotrauma.Steam bool reinstallAction(GUIButton button, object o) { + SettingsMenu.Instance?.ApplyInstalledModChanges(); int prevIndex = ContentPackageManager.EnabledPackages.Regular.IndexOf(contentPackage); TaskPool.AddIfNotFound($"Reinstall{workshopItem.Id}", SteamManager.Workshop.Reinstall(workshopItem), t => { ContentPackageManager.WorkshopPackages.Refresh(); ContentPackageManager.EnabledPackages.RefreshUpdatedMods(); - if (SettingsMenu.Instance?.WorkshopMenu is MutableWorkshopMenu mutableWorkshopMenu) + if (SettingsMenu.Instance?.WorkshopMenu is MutableWorkshopMenu mutableWorkshopMenu && !mutableWorkshopMenu.ViewingItemDetails) { mutableWorkshopMenu.PopulateInstalledModLists(forceRefreshEnabled: true); } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Steam/WorkshopMenu/Mutable/MutableWorkshopMenu.cs b/Barotrauma/BarotraumaClient/ClientSource/Steam/WorkshopMenu/Mutable/MutableWorkshopMenu.cs index c9cbd489d..3193aa9ef 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Steam/WorkshopMenu/Mutable/MutableWorkshopMenu.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Steam/WorkshopMenu/Mutable/MutableWorkshopMenu.cs @@ -44,12 +44,26 @@ namespace Barotrauma.Steam public MutableWorkshopMenu(GUIFrame parent) : base(parent) { var mainLayout - = new GUILayoutGroup(new RectTransform(Vector2.One, parent.RectTransform), isHorizontal: false); + = new GUILayoutGroup(new RectTransform(Vector2.One, parent.RectTransform), isHorizontal: false) + { + Stretch = true, + AbsoluteSpacing = GUI.IntScale(4) + }; tabber = new GUILayoutGroup(new RectTransform((1.0f, 0.05f), mainLayout.RectTransform), isHorizontal: true) { Stretch = true }; tabContents = new Dictionary(); + new GUIButton(new RectTransform((1.0f, 0.05f), mainLayout.RectTransform, Anchor.BottomLeft), + style: "GUIButtonSmall", text: TextManager.Get("FindModsButton")) + { + OnClicked = (button, o) => + { + SteamManager.OverlayCustomUrl($"https://steamcommunity.com/app/{SteamManager.AppID}/workshop/"); + return false; + } + }; + contentFrame = new GUIFrame(new RectTransform((1.0f, 0.95f), mainLayout.RectTransform), style: null); new GUICustomComponent(new RectTransform(Vector2.Zero, mainLayout.RectTransform), @@ -130,17 +144,8 @@ namespace Barotrauma.Steam { tabContents[Tab.PopularMods].Button.Enabled = false; } - GUIFrame listFrame = new GUIFrame(new RectTransform((1.0f, 0.95f), content.RectTransform), style: null); + GUIFrame listFrame = new GUIFrame(new RectTransform(Vector2.One, content.RectTransform), style: null); CreateWorkshopItemList(listFrame, out _, out popularModsList, onSelected: PopulateFrameWithItemInfo); - new GUIButton(new RectTransform((1.0f, 0.05f), content.RectTransform, Anchor.BottomLeft), - style: "GUIButtonSmall", text: TextManager.Get("FindModsButton")) - { - OnClicked = (button, o) => - { - SteamManager.OverlayCustomUrl($"https://steamcommunity.com/app/{SteamManager.AppID}/workshop/"); - return false; - } - }; } private void CreatePublishTab(out GUIListBox selfModsList) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Steam/WorkshopMenu/Mutable/PublishTab.cs b/Barotrauma/BarotraumaClient/ClientSource/Steam/WorkshopMenu/Mutable/PublishTab.cs index 61d849dbe..09bdaafe2 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Steam/WorkshopMenu/Mutable/PublishTab.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Steam/WorkshopMenu/Mutable/PublishTab.cs @@ -543,7 +543,8 @@ namespace Barotrauma.Steam var localModProject = new ModProject(localPackage) { - UgcId = Option.Some(new SteamWorkshopId(resultId)) + UgcId = Option.Some(new SteamWorkshopId(resultId)), + ModVersion = modVersion }; localModProject.DiscardHashAndInstallTime(); localModProject.Save(localPackage.Path); diff --git a/Barotrauma/BarotraumaClient/LinuxClient.csproj b/Barotrauma/BarotraumaClient/LinuxClient.csproj index 10bc6b9b4..41e27b185 100644 --- a/Barotrauma/BarotraumaClient/LinuxClient.csproj +++ b/Barotrauma/BarotraumaClient/LinuxClient.csproj @@ -6,7 +6,7 @@ Barotrauma FakeFish, Undertow Games Barotrauma - 0.19.11.0 + 0.20.0.0 Copyright © FakeFish 2018-2022 AnyCPU;x64 Barotrauma diff --git a/Barotrauma/BarotraumaClient/MacClient.csproj b/Barotrauma/BarotraumaClient/MacClient.csproj index 7fad64083..24e07ca66 100644 --- a/Barotrauma/BarotraumaClient/MacClient.csproj +++ b/Barotrauma/BarotraumaClient/MacClient.csproj @@ -6,7 +6,7 @@ Barotrauma FakeFish, Undertow Games Barotrauma - 0.19.11.0 + 0.20.0.0 Copyright © FakeFish 2018-2022 AnyCPU;x64 Barotrauma diff --git a/Barotrauma/BarotraumaClient/WindowsClient.csproj b/Barotrauma/BarotraumaClient/WindowsClient.csproj index c88fd0394..4b80f7c8d 100644 --- a/Barotrauma/BarotraumaClient/WindowsClient.csproj +++ b/Barotrauma/BarotraumaClient/WindowsClient.csproj @@ -6,7 +6,7 @@ Barotrauma FakeFish, Undertow Games Barotrauma - 0.19.11.0 + 0.20.0.0 Copyright © FakeFish 2018-2022 AnyCPU;x64 Barotrauma diff --git a/Barotrauma/BarotraumaServer/LinuxServer.csproj b/Barotrauma/BarotraumaServer/LinuxServer.csproj index 91c01c717..7e7a57032 100644 --- a/Barotrauma/BarotraumaServer/LinuxServer.csproj +++ b/Barotrauma/BarotraumaServer/LinuxServer.csproj @@ -6,7 +6,7 @@ Barotrauma FakeFish, Undertow Games Barotrauma Dedicated Server - 0.19.11.0 + 0.20.0.0 Copyright © FakeFish 2018-2022 AnyCPU;x64 DedicatedServer diff --git a/Barotrauma/BarotraumaServer/MacServer.csproj b/Barotrauma/BarotraumaServer/MacServer.csproj index 9ddb35313..34e6882e6 100644 --- a/Barotrauma/BarotraumaServer/MacServer.csproj +++ b/Barotrauma/BarotraumaServer/MacServer.csproj @@ -6,7 +6,7 @@ Barotrauma FakeFish, Undertow Games Barotrauma Dedicated Server - 0.19.11.0 + 0.20.0.0 Copyright © FakeFish 2018-2022 AnyCPU;x64 DedicatedServer diff --git a/Barotrauma/BarotraumaServer/ServerSource/Characters/CharacterInfo.cs b/Barotrauma/BarotraumaServer/ServerSource/Characters/CharacterInfo.cs index 49893f4dd..5aca9fbf7 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Characters/CharacterInfo.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Characters/CharacterInfo.cs @@ -70,7 +70,7 @@ namespace Barotrauma msg.WriteByte((byte)Job.Variant); foreach (SkillPrefab skillPrefab in Job.Prefab.Skills.OrderBy(s => s.Identifier)) { - msg.WriteSingle(Job.GetSkill(skillPrefab.Identifier).Level); + msg.WriteSingle(Job.GetSkill(skillPrefab.Identifier)?.Level ?? 0.0f); } } else diff --git a/Barotrauma/BarotraumaServer/ServerSource/Characters/CharacterNetworking.cs b/Barotrauma/BarotraumaServer/ServerSource/Characters/CharacterNetworking.cs index a3e74f054..a80e80caa 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Characters/CharacterNetworking.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Characters/CharacterNetworking.cs @@ -219,9 +219,9 @@ namespace Barotrauma else if (NetIdUtils.Difference(networkUpdateID, LastNetworkUpdateID) > 500) { #if DEBUG || UNSTABLE - DebugConsole.AddWarning($"Large disrepancy between a client character's network update ID server-side and client-side (client: {networkUpdateID}, server: {LastNetworkUpdateID}). Resetting the ID."); + DebugConsole.AddWarning($"Large discrepancy between a client character's network update ID server-side and client-side (client: {networkUpdateID}, server: {LastNetworkUpdateID}). Resetting the ID."); #endif - LastNetworkUpdateID = networkUpdateID; + LastNetworkUpdateID = LastProcessedID = networkUpdateID; } if (memInput.Count > 60) { @@ -549,7 +549,7 @@ namespace Barotrauma msg.WriteByte((byte)statType); foreach (var savedStatValue in Info.SavedStatValues[statType]) { - msg.WriteString(savedStatValue.StatIdentifier); + msg.WriteIdentifier(savedStatValue.StatIdentifier); msg.WriteSingle(savedStatValue.StatValue); msg.WriteBoolean(savedStatValue.RemoveOnDeath); } diff --git a/Barotrauma/BarotraumaServer/ServerSource/DebugConsole.cs b/Barotrauma/BarotraumaServer/ServerSource/DebugConsole.cs index 29f57d01b..fb3703133 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/DebugConsole.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/DebugConsole.cs @@ -1408,6 +1408,21 @@ namespace Barotrauma GameMain.Server.PrintSenderTransters(); })); + + AssignOnExecute("resetcharacternetstate", (string[] args) => + { + if (GameMain.Server == null) { return; } + + if (args.Length < 1) + { + ThrowError("Invalid parameters. The command should be formatted as \"resetcharacternetstate [character]\". If the names consist of multiple words, you should surround them with quotation marks."); + return; + } + + var character = FindMatchingCharacter(args.Skip(1).ToArray(), false); + character?.ResetNetState(); + }); + commands.Add(new Command("eventdata", "", (string[] args) => { if (args.Length == 0) { return; } diff --git a/Barotrauma/BarotraumaServer/ServerSource/GameMain.cs b/Barotrauma/BarotraumaServer/ServerSource/GameMain.cs index 1cf319471..05e6c6f4e 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/GameMain.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/GameMain.cs @@ -158,7 +158,7 @@ namespace Barotrauma XDocument doc = XMLExtensions.TryLoadXml(ServerSettings.SettingsFile); if (doc?.Root == null) { - DebugConsole.ThrowError("File \"" + ServerSettings.SettingsFile + "\" not found. Starting the server with default settings."); + DebugConsole.AddWarning("File \"" + ServerSettings.SettingsFile + "\" not found. Starting the server with default settings."); } else { diff --git a/Barotrauma/BarotraumaServer/ServerSource/GameSession/GameModes/CampaignMode.cs b/Barotrauma/BarotraumaServer/ServerSource/GameSession/GameModes/CampaignMode.cs index 9360c71d2..4283c7206 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/GameSession/GameModes/CampaignMode.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/GameSession/GameModes/CampaignMode.cs @@ -16,16 +16,15 @@ namespace Barotrauma /// /// There is a client-side implementation of the method in /// - public bool AllowedToManageCampaign(Client client, ClientPermissions permissions) + public static bool AllowedToManageCampaign(Client client, ClientPermissions permissions) { //allow managing the campaign if the client has permissions, is the owner, or the only client in the server, //or if no-one has management permissions return client.HasPermission(permissions) || client.HasPermission(ClientPermissions.ManageCampaign) || - GameMain.Server.ConnectedClients.Count == 1 || IsOwner(client) || - GameMain.Server.ConnectedClients.None(c => c.InGame && (IsOwner(c) || c.HasPermission(permissions))); + AnyOneAllowedToManageCampaign(permissions); } public bool AllowedToManageWallets(Client client) diff --git a/Barotrauma/BarotraumaServer/ServerSource/GameSession/GameModes/MultiPlayerCampaign.cs b/Barotrauma/BarotraumaServer/ServerSource/GameSession/GameModes/MultiPlayerCampaign.cs index 502f148fc..bdd6a7b0e 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/GameSession/GameModes/MultiPlayerCampaign.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/GameSession/GameModes/MultiPlayerCampaign.cs @@ -347,6 +347,8 @@ namespace Barotrauma (GameMain.GameSession?.GameMode as MultiPlayerCampaign)?.SaveExperiencePoints(c); } } + // Event history must be registered before ending the round or it will be cleared + GameMain.GameSession.EventManager.RegisterEventHistory(); } GameMain.GameSession.EndRound("", traitorResults, transitionType); @@ -360,7 +362,6 @@ namespace Barotrauma LeaveUnconnectedSubs(leavingSub); NextLevel = newLevel; GameMain.GameSession.SubmarineInfo = new SubmarineInfo(GameMain.GameSession.Submarine); - GameMain.GameSession.EventManager.RegisterEventHistory(); SaveUtil.SaveGame(GameMain.GameSession.SavePath); } else @@ -1019,7 +1020,7 @@ namespace Barotrauma UpgradeManager.PurchaseUpgrade(prefab, category, client: sender); // unstable logging - int price = prefab.Price.GetBuyprice(UpgradeManager.GetUpgradeLevel(prefab, category), Map?.CurrentLocation); + int price = prefab.Price.GetBuyPrice(UpgradeManager.GetUpgradeLevel(prefab, category), Map?.CurrentLocation); int level = UpgradeManager.GetUpgradeLevel(prefab, category); GameServer.Log($"SERVER: Purchased level {level} {category.Identifier}.{prefab.Identifier} for {price}", ServerLog.MessageType.ServerMessage); } diff --git a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/DockingPort.cs b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/DockingPort.cs index b5349e891..c73a10dce 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Items/Components/DockingPort.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Items/Components/DockingPort.cs @@ -17,7 +17,7 @@ namespace Barotrauma.Items.Components { var allowOutpostAutoDocking = (AllowOutpostAutoDocking)msg.ReadByte(); if (outpostAutoDockingPromptShown && - (GameMain.GameSession?.Campaign?.AllowedToManageCampaign(c, ClientPermissions.ManageMap) ?? false)) + CampaignMode.AllowedToManageCampaign(c, ClientPermissions.ManageMap)) { this.allowOutpostAutoDocking = allowOutpostAutoDocking; } diff --git a/Barotrauma/BarotraumaServer/ServerSource/Items/Item.cs b/Barotrauma/BarotraumaServer/ServerSource/Items/Item.cs index 862478ce6..3dc30f6cf 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Items/Item.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Items/Item.cs @@ -106,6 +106,14 @@ namespace Barotrauma $"Failed to write a ChangeProperty network event for the item \"{Name}\" ({e.Message})"); } break; + case SetItemStatEventData setItemStatEventData: + msg.WriteByte((byte)setItemStatEventData.Stats.Count); + foreach (var (key, value) in setItemStatEventData.Stats) + { + msg.WriteNetSerializableStruct(key); + msg.WriteSingle(value); + } + break; case UpgradeEventData upgradeEventData: var upgrade = upgradeEventData.Upgrade; var upgradeTargets = upgrade.TargetComponents; diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/BanList.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/BanList.cs index 15f4d365a..9febcddaf 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/BanList.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/BanList.cs @@ -152,7 +152,9 @@ namespace Barotrauma.Networking public bool IsBanned(AccountId accountId, out string reason) { RemoveExpired(); - var bannedPlayer = bannedPlayers.Find(bp => bp.AddressOrAccountId.TryGet(out AccountId id) && accountId.Equals(id)); + var bannedPlayer = + bannedPlayers.Find(bp => bp.AddressOrAccountId.TryGet(out AccountId id) && accountId.Equals(id)) ?? + bannedPlayers.Find(bp => bp.AddressOrAccountId.TryGet(out Address adr) && adr is SteamP2PAddress steamAdr && steamAdr.SteamId.Equals(accountId)); reason = bannedPlayer?.Reason ?? string.Empty; return bannedPlayer != null; } diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/Client.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/Client.cs index fdea971a5..c6d6559cc 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/Client.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/Client.cs @@ -40,6 +40,8 @@ namespace Barotrauma.Networking public float ChatSpamTimer; public int ChatSpamCount; + public string RejectedName; + public int RoundsSincePlayedAsTraitor; public float KickAFKTimer; @@ -69,6 +71,9 @@ namespace Barotrauma.Networking public DateTime JoinTime; + public static readonly TimeSpan NameChangeCoolDown = new TimeSpan(hours: 0, minutes: 0, seconds: 30); + public DateTime LastNameChangeTime; + private CharacterInfo characterInfo; public CharacterInfo CharacterInfo { diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs index 370627ddb..e48d786f1 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs @@ -486,9 +486,18 @@ namespace Barotrauma.Networking // -> something wen't wrong during startup, re-enable start button and reset AutoRestartTimer if (startGameCoroutine != null && !CoroutineManager.IsCoroutineRunning(startGameCoroutine)) { - if (ServerSettings.AutoRestart) ServerSettings.AutoRestartTimer = Math.Max(ServerSettings.AutoRestartInterval, 5.0f); - //GameMain.NetLobbyScreen.StartButtonEnabled = true; + if (ServerSettings.AutoRestart) { ServerSettings.AutoRestartTimer = Math.Max(ServerSettings.AutoRestartInterval, 5.0f); } + if (startGameCoroutine.Exception != null && OwnerConnection != null) + { + SendConsoleMessage( + startGameCoroutine.Exception.Message + '\n' + + (startGameCoroutine.Exception.StackTrace?.CleanupStackTrace() ?? "null"), + connectedClients.Find(c => c.Connection == OwnerConnection), + Color.Red); + } + + EndGame(); GameMain.NetLobbyScreen.LastUpdateID++; startGameCoroutine = null; @@ -1377,9 +1386,9 @@ namespace Barotrauma.Networking bool end = inc.ReadBoolean(); if (end) { - if (mpCampaign == null || - mpCampaign.AllowedToManageCampaign(sender, ClientPermissions.ManageRound) || - mpCampaign.AllowedToManageCampaign(sender, ClientPermissions.ManageCampaign)) + if (mpCampaign == null || + CampaignMode.AllowedToManageCampaign(sender, ClientPermissions.ManageRound) || + CampaignMode.AllowedToManageCampaign(sender, ClientPermissions.ManageCampaign)) { bool save = inc.ReadBoolean(); if (GameStarted) @@ -1409,7 +1418,7 @@ namespace Barotrauma.Networking SendDirectChatMessage("Cannot continue the campaign from the previous save (round already running).", sender, ChatMessageType.Error); break; } - else if (mpCampaign.AllowedToManageCampaign(sender, ClientPermissions.ManageCampaign) || mpCampaign.AllowedToManageCampaign(sender, ClientPermissions.ManageMap)) + else if (CampaignMode.AllowedToManageCampaign(sender, ClientPermissions.ManageCampaign) || CampaignMode.AllowedToManageCampaign(sender, ClientPermissions.ManageMap)) { MultiPlayerCampaign.LoadCampaign(GameMain.GameSession.SavePath); } @@ -1420,7 +1429,7 @@ namespace Barotrauma.Networking Log("Client \"" + ClientLogName(sender) + "\" started the round.", ServerLog.MessageType.ServerMessage); StartGame(); } - else if (mpCampaign != null && (mpCampaign.AllowedToManageCampaign(sender, ClientPermissions.ManageCampaign) || mpCampaign.AllowedToManageCampaign(sender, ClientPermissions.ManageMap))) + else if (mpCampaign != null && (CampaignMode.AllowedToManageCampaign(sender, ClientPermissions.ManageCampaign) || CampaignMode.AllowedToManageCampaign(sender, ClientPermissions.ManageMap))) { var availableTransition = mpCampaign.GetAvailableTransition(out _, out _); //don't force location if we've teleported @@ -1991,7 +2000,7 @@ namespace Barotrauma.Networking //and assume the message was received, so we don't have to keep resending //these large initial messages until the client acknowledges receiving them - c.LastRecvLobbyUpdate++; + c.LastRecvLobbyUpdate = GameMain.NetLobbyScreen.LastUpdateID; } else @@ -2010,7 +2019,7 @@ namespace Barotrauma.Networking c.ChatMsgQueue.RemoveAll(cMsg => !NetIdUtils.IdMoreRecent(cMsg.NetStateID, c.LastRecvChatMsgID)); for (int i = 0; i < c.ChatMsgQueue.Count && i < ChatMessage.MaxMessagesPerPacket; i++) { - if (outmsg.LengthBytes + c.ChatMsgQueue[i].EstimateLengthBytesServer(c) > MsgConstants.MTU - 5) + if (outmsg.LengthBytes + c.ChatMsgQueue[i].EstimateLengthBytesServer(c) > MsgConstants.MTU - 5 && i > 0) { //not enough room in this packet return; @@ -2589,26 +2598,24 @@ namespace Barotrauma.Networking public void EndGame(CampaignMode.TransitionType transitionType = CampaignMode.TransitionType.None, bool wasSaved = false) { - if (!GameStarted) + if (GameStarted) { - return; - } + if (GameSettings.CurrentConfig.VerboseLogging) + { + Log("Ending the round...\n" + Environment.StackTrace.CleanupStackTrace(), ServerLog.MessageType.ServerMessage); - if (GameSettings.CurrentConfig.VerboseLogging) - { - Log("Ending the round...\n" + Environment.StackTrace.CleanupStackTrace(), ServerLog.MessageType.ServerMessage); - - } - else - { - Log("Ending the round...", ServerLog.MessageType.ServerMessage); + } + else + { + Log("Ending the round...", ServerLog.MessageType.ServerMessage); + } } string endMessage = TextManager.FormatServerMessage("RoundSummaryRoundHasEnded"); var traitorResults = TraitorManager?.GetEndResults() ?? new List(); List missions = GameMain.GameSession.Missions.ToList(); - if (GameMain.GameSession.IsRunning) + if (GameMain.GameSession is { IsRunning: true }) { GameMain.GameSession.EndRound(endMessage, traitorResults); } @@ -2634,7 +2641,10 @@ namespace Barotrauma.Networking c.PositionUpdateLastSent.Clear(); } - KarmaManager.OnRoundEnded(); + if (GameStarted) + { + KarmaManager.OnRoundEnded(); + } RespawnManager = null; GameStarted = false; @@ -2703,9 +2713,24 @@ namespace Barotrauma.Networking CharacterTeamType newTeam = (CharacterTeamType)inc.ReadByte(); if (c == null || string.IsNullOrEmpty(newName) || !NetIdUtils.IdMoreRecent(nameId, c.NameId)) { return false; } + + var timeSinceNameChange = DateTime.Now - c.LastNameChangeTime; + if (timeSinceNameChange < Client.NameChangeCoolDown) + { + //only send once per second at most to prevent using this for spamming + if (timeSinceNameChange.TotalSeconds > 1) + { + var coolDownRemaining = Client.NameChangeCoolDown - timeSinceNameChange; + SendDirectChatMessage($"ServerMessage.NameChangeFailedCooldownActive~[seconds]={(int)coolDownRemaining.TotalSeconds}", c); + } + c.NameId = nameId; + c.RejectedName = newName; + return false; + } + if (!newJob.IsEmpty) { - if (!JobPrefab.Prefabs.TryGet(newJob, out JobPrefab newJobPrefab) || newJobPrefab.HiddenJob) + if (!JobPrefab.Prefabs.TryGet(newJob, out JobPrefab newJobPrefab) || newJobPrefab.HiddenJob) { newJob = Identifier.Empty; } @@ -2721,26 +2746,25 @@ namespace Barotrauma.Networking public bool TryChangeClientName(Client c, string newName) { newName = Client.SanitizeName(newName); - //update client list even if the name cannot be changed to the one sent by the client, - //so the client will be informed what their actual name is - LastClientListUpdateID++; - - if (newName == c.Name || string.IsNullOrEmpty(newName)) { return false; } - - if (IsNameValid(c, newName)) + if (newName != c.Name && !string.IsNullOrEmpty(newName) && IsNameValid(c, newName)) { + c.LastNameChangeTime = DateTime.Now; string oldName = c.Name; c.Name = newName; + c.RejectedName = string.Empty; SendChatMessage($"ServerMessage.NameChangeSuccessful~[oldname]={oldName}~[newname]={newName}", ChatMessageType.Server); + LastClientListUpdateID++; return true; } else { + //update client list even if the name cannot be changed to the one sent by the client, + //so the client will be informed what their actual name is + LastClientListUpdateID++; return false; } } - private bool IsNameValid(Client c, string newName) { newName = Client.SanitizeName(newName); diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/NetEntityEvent/ServerEntityEventManager.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/NetEntityEvent/ServerEntityEventManager.cs index abcbbf42c..f49b85fd2 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/NetEntityEvent/ServerEntityEventManager.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/NetEntityEvent/ServerEntityEventManager.cs @@ -168,9 +168,10 @@ namespace Barotrauma.Networking if (!bufferedEvent.Character.IsIncapacitated && NetIdUtils.IdMoreRecent(bufferedEvent.CharacterStateID, bufferedEvent.Character.LastProcessedID)) { + DebugConsole.Log($"Delaying reading entity event sent by a client until the character state has been processed. Event's character state: {bufferedEvent.CharacterStateID}, last processed character state: {bufferedEvent.Character.LastProcessedID}"); continue; } - + try { ReadEvent(bufferedEvent.Data, bufferedEvent.TargetEntity, bufferedEvent.Sender); diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/Primitives/Peers/Server/ServerPeer.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/Primitives/Peers/Server/ServerPeer.cs index 4e16b15bb..302b5b959 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/Primitives/Peers/Server/ServerPeer.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/Primitives/Peers/Server/ServerPeer.cs @@ -250,7 +250,9 @@ namespace Barotrauma.Networking structToSend = new ServerPeerContentPackageOrderPacket { ServerName = GameMain.Server.ServerName, - ContentPackages = ContentPackageManager.EnabledPackages.All.Where(cp => cp.HasMultiplayerSyncedContent || cp.Files.All(f => f is SubmarineFile)) + ContentPackages = ContentPackageManager.EnabledPackages.All + .Where(cp => cp.Files.Any()) + .Where(cp => cp.HasMultiplayerSyncedContent || cp.Files.All(f => f is SubmarineFile)) .Select(contentPackage => new ServerContentPackage(contentPackage, timeNow)) .ToImmutableArray() }; diff --git a/Barotrauma/BarotraumaServer/WindowsServer.csproj b/Barotrauma/BarotraumaServer/WindowsServer.csproj index 4b9035163..f69fca38a 100644 --- a/Barotrauma/BarotraumaServer/WindowsServer.csproj +++ b/Barotrauma/BarotraumaServer/WindowsServer.csproj @@ -6,7 +6,7 @@ Barotrauma FakeFish, Undertow Games Barotrauma Dedicated Server - 0.19.11.0 + 0.20.0.0 Copyright © FakeFish 2018-2022 AnyCPU;x64 DedicatedServer diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/EnemyAIController.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/EnemyAIController.cs index 1708c86da..4cf5983f2 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/EnemyAIController.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/EnemyAIController.cs @@ -442,6 +442,7 @@ namespace Barotrauma base.Update(deltaTime); UpdateTriggers(deltaTime); Character.ClearInputs(); + Reverse = false; bool ignorePlatforms = Character.AnimController.TargetMovement.Y < -0.5f && (-Character.AnimController.TargetMovement.Y > Math.Abs(Character.AnimController.TargetMovement.X)); if (steeringManager == insideSteering) @@ -804,10 +805,6 @@ namespace Barotrauma Reverse = true; run = true; } - else - { - Reverse = false; - } SteeringManager.SteeringManual(deltaTime, dir * 0.2f); } else @@ -1490,40 +1487,26 @@ namespace Barotrauma canAttack = angle < MathHelper.ToRadians(AttackLimb.attack.RequiredAngle); if (canAttack && AttackLimb.attack.AvoidFriendlyFire) { - float minDistance = MathUtils.Pow(ConvertUnits.ToDisplayUnits(Character.AnimController.Collider.GetMaxExtent() * 3), 2); - bool IsFarEnough(Character other) => Vector2.DistanceSquared(Character.WorldPosition, other.WorldPosition) > minDistance; - if (SwarmBehavior != null) + canAttack = !IsBlocked(Character.GetRelativeSimPosition(SelectedAiTarget.Entity)); + bool IsBlocked(Vector2 targetPosition) { - canAttack = SwarmBehavior.Members.All(c => c == Character || IsFarEnough(c)); - } - else - { - canAttack = Character.CharacterList.All(c => c == Character || !Character.IsFriendly(c) || IsFarEnough(c)); - } - if (canAttack) - { - canAttack = !IsBlocked(attackSimPos) && !IsBlocked(AttackLimb.SimPosition + forward * ConvertUnits.ToSimUnits(AttackLimb.attack.Range)); - - bool IsBlocked(Vector2 targetPosition) + foreach (var body in Submarine.PickBodies(AttackLimb.SimPosition, targetPosition, myBodies, Physics.CollisionCharacter)) { - foreach (var body in Submarine.PickBodies(AttackLimb.SimPosition, targetPosition, myBodies, Physics.CollisionCharacter)) + Character hitTarget = null; + if (body.UserData is Character c) { - Character hitTarget = null; - if (body.UserData is Character c) - { - hitTarget = c; - } - else if (body.UserData is Limb limb) - { - hitTarget = limb.character; - } - if (hitTarget != null && !hitTarget.IsDead && Character.IsFriendly(hitTarget)) - { - return true; - } + hitTarget = c; + } + else if (body.UserData is Limb limb) + { + hitTarget = limb.character; + } + if (hitTarget != null && !hitTarget.IsDead && Character.IsFriendly(hitTarget)) + { + return true; } - return false; } + return false; } } } @@ -1854,7 +1837,33 @@ namespace Barotrauma } } - if (!canAttack || distance > Math.Min(AttackLimb.attack.Range * 0.9f, 100)) + if (AttackLimb is Limb attackLimb && attackLimb.attack.Ranged) + { + bool advance = !canAttack && Character.InWater || distance > attackLimb.attack.Range * 0.9f; + bool fallBack = canAttack && distance < Math.Min(250, attackLimb.attack.Range * 0.25f); + if (fallBack) + { + Reverse = true; + UpdateFallBack(attackWorldPos, deltaTime, followThrough: false); + } + else if (advance) + { + if (pathSteering != null) + { + pathSteering.SteeringSeek(steerPos, weight: 10, minGapWidth: minGapSize); + } + else + { + SteeringManager.SteeringSeek(steerPos, 10); + } + } + else if (!Character.InWater) + { + SteeringManager.Reset(); + FaceTarget(SelectedAiTarget.Entity); + } + } + else if (!canAttack || distance > Math.Min(AttackLimb.attack.Range * 0.9f, 100)) { if (pathSteering != null) { @@ -1865,20 +1874,30 @@ namespace Barotrauma SteeringManager.SteeringSeek(steerPos, 10); } } - else if (AttackLimb.attack.Ranged) - { - // Too close - UpdateFallBack(attackWorldPos, deltaTime, followThrough: false); - } + if (Character.CurrentHull == null && (SelectedAiTarget?.Entity is Character c && c.Submarine == null || distance == 0 || distance > ConvertUnits.ToDisplayUnits(avoidLookAheadDistance * 2))) { SteeringManager.SteeringAvoid(deltaTime, lookAheadDistance: avoidLookAheadDistance, weight: 30); } } } + IDamageable damageTarget = wallTarget != null ? wallTarget.Structure : SelectedAiTarget?.Entity as IDamageable; + if (AttackLimb?.attack is Attack { Ranged: true} attack) + { + Limb limb = GetLimbToRotate(attack); + if (limb != null) + { + Vector2 toTarget = damageTarget.WorldPosition - limb.WorldPosition; + float offset = limb.Params.GetSpriteOrientation() - MathHelper.PiOver2; + limb.body.SuppressSmoothRotationCalls = false; + float angle = MathUtils.VectorToAngle(toTarget); + limb.body.SmoothRotate(angle + offset, attack.AimRotationTorque); + limb.body.SuppressSmoothRotationCalls = true; + } + } if (canAttack) { - if (!UpdateLimbAttack(deltaTime, AttackLimb, attackSimPos, distance, attackTargetLimb)) + if (!UpdateLimbAttack(deltaTime, attackSimPos, damageTarget, distance, attackTargetLimb)) { IgnoreTarget(SelectedAiTarget); } @@ -2114,13 +2133,14 @@ namespace Barotrauma } // 10 dmg, 100 health -> 0.1 - private float GetRelativeDamage(float dmg, float vitality) => dmg / Math.Max(vitality, 1.0f); + private static float GetRelativeDamage(float dmg, float vitality) => dmg / Math.Max(vitality, 1.0f); - private bool UpdateLimbAttack(float deltaTime, Limb attackingLimb, Vector2 attackSimPos, float distance = -1, Limb targetLimb = null) + private bool UpdateLimbAttack(float deltaTime, Vector2 attackSimPos, IDamageable damageTarget, float distance = -1, Limb targetLimb = null) { if (SelectedAiTarget?.Entity == null) { return false; } - if (attackingLimb?.attack == null) { return false; } - ActiveAttack = attackingLimb.attack; + if (AttackLimb?.attack == null) { return false; } + if (damageTarget == null) { return false; } + ActiveAttack = AttackLimb.attack; if (wallTarget != null) { // If the selected target is not the wall target, make the wall target the selected target. @@ -2131,83 +2151,94 @@ namespace Barotrauma State = AIState.Attack; } } - IDamageable damageTarget = wallTarget != null ? wallTarget.Structure : SelectedAiTarget.Entity as IDamageable; - if (damageTarget != null) + if (damageTarget == null) { return false; } + if (ActiveAttack.Ranged && ActiveAttack.RequiredAngleToShoot > 0) { - if (Character.Params.CanInteract && Character.Inventory != null) + Limb referenceLimb = GetLimbToRotate(ActiveAttack); + if (referenceLimb != null) { - // Use equipped items (weapons) - Item item = GetEquippedItem(attackingLimb); - if (item != null) + Vector2 toTarget = damageTarget.WorldPosition - referenceLimb.WorldPosition; + float offset = referenceLimb.Params.GetSpriteOrientation() - MathHelper.PiOver2; + Vector2 forward = VectorExtensions.Forward(referenceLimb.body.TransformedRotation - offset * referenceLimb.Dir); + float angle = MathHelper.ToDegrees(VectorExtensions.Angle(forward, toTarget)); + if (angle > ActiveAttack.RequiredAngleToShoot) { - if (item.RequireAimToUse) - { - if (!Aim(deltaTime, damageTarget as ISpatialEntity, item)) - { - // Valid target, but can't shoot -> return true so that it will not be ignored. - return true; - } - } - Character.SetInput(item.IsShootable ? InputType.Shoot : InputType.Use, false, true); - item.Use(deltaTime, Character); + return true; } } - //simulate attack input to get the character to attack client-side - Character.SetInput(InputType.Attack, true, true); - if (!ActiveAttack.IsRunning) + } + if (Character.Params.CanInteract && Character.Inventory != null) + { + // Use equipped items (weapons) + Item item = GetEquippedItem(AttackLimb); + if (item != null) { + if (item.RequireAimToUse) + { + if (!Aim(deltaTime, damageTarget as ISpatialEntity, item)) + { + // Valid target, but can't shoot -> return true so that it will not be ignored. + return true; + } + } + Character.SetInput(item.IsShootable ? InputType.Shoot : InputType.Use, false, true); + item.Use(deltaTime, Character); + } + } + //simulate attack input to get the character to attack client-side + Character.SetInput(InputType.Attack, true, true); + if (!ActiveAttack.IsRunning) + { #if SERVER GameMain.NetworkMember.CreateEntityEvent(Character, new Character.SetAttackTargetEventData( - attackingLimb, + AttackLimb, damageTarget, targetLimb, SimPosition)); #else - Character.PlaySound(CharacterSound.SoundType.Attack, maxInterval: 3); + Character.PlaySound(CharacterSound.SoundType.Attack, maxInterval: 3); #endif - } + } - if (attackingLimb.UpdateAttack(deltaTime, attackSimPos, damageTarget, out AttackResult attackResult, distance, targetLimb)) + if (AttackLimb.UpdateAttack(deltaTime, attackSimPos, damageTarget, out AttackResult attackResult, distance, targetLimb)) + { + if (ActiveAttack.CoolDownTimer > 0) { - if (attackingLimb.attack.CoolDownTimer > 0) + SetAimTimer(Math.Min(ActiveAttack.CoolDown, 1.5f)); + // Managed to hit a living/non-destroyed target. Increase the priority more if the target is low in health -> dies easily/soon + float greed = AIParams.AggressionGreed; + if (damageTarget is not Barotrauma.Character) + { + // Halve the greed for attacking non-characters. + greed /= 2; + } + selectedTargetMemory.Priority += GetRelativeDamage(attackResult.Damage, damageTarget.Health) * greed; + } + if (LatchOntoAI != null && SelectedAiTarget.Entity is Character targetCharacter) + { + LatchOntoAI.SetAttachTarget(targetCharacter); + } + if (!ActiveAttack.Ranged) + { + if (damageTarget.Health > 0 && attackResult.Damage > 0) { - SetAimTimer(Math.Min(attackingLimb.attack.CoolDown, 1.5f)); // Managed to hit a living/non-destroyed target. Increase the priority more if the target is low in health -> dies easily/soon float greed = AIParams.AggressionGreed; - if (!(damageTarget is Character)) + if (damageTarget is not Barotrauma.Character) { // Halve the greed for attacking non-characters. greed /= 2; } selectedTargetMemory.Priority += GetRelativeDamage(attackResult.Damage, damageTarget.Health) * greed; } - if (LatchOntoAI != null && SelectedAiTarget.Entity is Character targetCharacter) + else { - LatchOntoAI.SetAttachTarget(targetCharacter); - } - if (!attackingLimb.attack.Ranged) - { - if (damageTarget.Health > 0 && attackResult.Damage > 0) - { - // Managed to hit a living/non-destroyed target. Increase the priority more if the target is low in health -> dies easily/soon - float greed = AIParams.AggressionGreed; - if (!(damageTarget is Character)) - { - // Halve the greed for attacking non-characters. - greed /= 2; - } - selectedTargetMemory.Priority += GetRelativeDamage(attackResult.Damage, damageTarget.Health) * greed; - } - else - { - selectedTargetMemory.Priority -= Math.Max(selectedTargetMemory.Priority / 2, 1); - return selectedTargetMemory.Priority > 1; - } + selectedTargetMemory.Priority -= Math.Max(selectedTargetMemory.Priority / 2, 1); + return selectedTargetMemory.Priority > 1; } } - return true; } - return false; + return true; } private float aimTimer; @@ -2299,7 +2330,6 @@ namespace Barotrauma { if (attackVector == null) { - // TODO: test adding some random variance here? attackVector = attackWorldPos - WorldPosition; } Vector2 dir = Vector2.Normalize(followThrough ? attackVector.Value : -attackVector.Value); @@ -2319,6 +2349,16 @@ namespace Barotrauma return true; } + private Limb GetLimbToRotate(Attack attack) + { + Limb limb = AttackLimb; + if (attack.RotationLimbIndex > -1 && attack.RotationLimbIndex < Character.AnimController.Limbs.Length) + { + limb = Character.AnimController.Limbs[attack.RotationLimbIndex]; + } + return limb; + } + #endregion #region Eat @@ -3429,7 +3469,7 @@ namespace Barotrauma private void ChangeParams(string tag, AIState state, float? priority = null, bool onlyExisting = false) => ChangeParams(tag.ToIdentifier(), state, priority, onlyExisting); - private void ChangeParams(Identifier tag, AIState state, float? priority = null, bool onlyExisting = false) + private void ChangeParams(Identifier tag, AIState state, float? priority = null, bool onlyExisting = false, bool ignoreAttacksIfNotInSameSub = false) { if (!AIParams.TryGetTarget(tag, out CharacterParams.TargetParams targetParams)) { @@ -3437,6 +3477,11 @@ namespace Barotrauma { if (AIParams.TryAddNewTarget(tag, state, priority ?? minPriority, out targetParams)) { + if (state == AIState.Attack) + { + // Only applies to new temp target params. Shouldn't affect any existing definitions (handled below). + targetParams.IgnoreIfNotInSameSub = ignoreAttacksIfNotInSameSub; + } tempParams.Add(tag, targetParams); } } @@ -3470,7 +3515,7 @@ namespace Barotrauma { isStateChanged = true; SetStateResetTimer(); - ChangeParams(target.SpeciesName, state, priority); + ChangeParams(target.SpeciesName, state, priority, ignoreAttacksIfNotInSameSub: !target.IsHuman); if (target.IsHuman) { priority = GetTargetParams("human")?.Priority; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveCombat.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveCombat.cs index c0c6f9c69..0a509fdd6 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveCombat.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveCombat.cs @@ -748,6 +748,9 @@ namespace Barotrauma } if (!character.HasEquippedItem(Weapon, predicate: IsHandSlotType)) { + //clear aim and shoot inputs so the bot doesn't immediately fire the weapon if it was previously e.g. using a scooter + character.ClearInput(InputType.Aim); + character.ClearInput(InputType.Shoot); Weapon.TryInteract(character, forceSelectKey: true); var slots = Weapon.AllowedSlots.Where(s => IsHandSlotType(s)); if (character.Inventory.TryPutItem(Weapon, character, slots)) @@ -764,7 +767,7 @@ namespace Barotrauma } return true; - bool IsHandSlotType(InvSlotType s) => s == InvSlotType.LeftHand || s == InvSlotType.RightHand || s == (InvSlotType.LeftHand | InvSlotType.RightHand); + static bool IsHandSlotType(InvSlotType s) => s == InvSlotType.LeftHand || s == InvSlotType.RightHand || s == (InvSlotType.LeftHand | InvSlotType.RightHand); } private float findHullTimer; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRepairItem.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRepairItem.cs index 78fc1a261..e8b5dea26 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRepairItem.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRepairItem.cs @@ -186,8 +186,8 @@ namespace Barotrauma { if (character.SelectedItem != Item) { - if (Item.TryInteract(character, ignoreRequiredItems: true, forceSelectKey: true) || - Item.TryInteract(character, ignoreRequiredItems: true, forceUseKey: true)) + if (Item.TryInteract(character, ignoreRequiredItems: true, forceUseKey: true) || + Item.TryInteract(character, ignoreRequiredItems: true, forceSelectKey: true)) { character.SelectedItem = Item; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/PetBehavior.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/PetBehavior.cs index 1105eab19..24f0ef67d 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/PetBehavior.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/PetBehavior.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Xml.Linq; +using static Barotrauma.CharacterParams; namespace Barotrauma { @@ -44,7 +45,7 @@ namespace Barotrauma public float PlayTimer { get; set; } private float? unstunY { get; set; } - public EnemyAIController AiController { get; private set; } = null; + public EnemyAIController AIController { get; private set; } = null; public Character Owner { get; set; } @@ -134,8 +135,8 @@ namespace Barotrauma aggregate += Items[i].Commonness; if (aggregate >= r && Items[i].Prefab != null) { - GameAnalyticsManager.AddDesignEvent("MicroInteraction:" + (GameMain.GameSession?.GameMode?.Preset.Identifier.Value ?? "null") + ":PetProducedItem:" + pet.AiController.Character.SpeciesName + ":" + Items[i].Prefab.Identifier); - Entity.Spawner.AddItemToSpawnQueue(Items[i].Prefab, pet.AiController.Character.WorldPosition); + GameAnalyticsManager.AddDesignEvent("MicroInteraction:" + (GameMain.GameSession?.GameMode?.Preset.Identifier.Value ?? "null") + ":PetProducedItem:" + pet.AIController.Character.SpeciesName + ":" + Items[i].Prefab.Identifier); + Entity.Spawner.AddItemToSpawnQueue(Items[i].Prefab, pet.AIController.Character.WorldPosition); break; } } @@ -160,8 +161,8 @@ namespace Barotrauma public PetBehavior(XElement element, EnemyAIController aiController) { - AiController = aiController; - AiController.Character.CanBeDragged = true; + AIController = aiController; + AIController.Character.CanBeDragged = true; MaxHappiness = element.GetAttributeFloat("maxhappiness", 100.0f); MaxHunger = element.GetAttributeFloat("maxhunger", 100.0f); @@ -218,7 +219,7 @@ namespace Barotrauma bool success = OnEat(item.GetTags()); if (success) { - GameAnalyticsManager.AddDesignEvent("MicroInteraction:" + (GameMain.GameSession?.GameMode?.Preset.Identifier.Value ?? "null") + ":PetEat:" + AiController.Character.SpeciesName + ":" + item.Prefab.Identifier); + GameAnalyticsManager.AddDesignEvent("MicroInteraction:" + (GameMain.GameSession?.GameMode?.Preset.Identifier.Value ?? "null") + ":PetEat:" + AIController.Character.SpeciesName + ":" + item.Prefab.Identifier); } return success; } @@ -229,7 +230,7 @@ namespace Barotrauma bool success = OnEat("dead".ToIdentifier()); if (success) { - GameAnalyticsManager.AddDesignEvent("MicroInteraction:" + (GameMain.GameSession?.GameMode?.Preset.Identifier.Value ?? "null") + ":PetEat:" + AiController.Character.SpeciesName + ":" + character.SpeciesName); + GameAnalyticsManager.AddDesignEvent("MicroInteraction:" + (GameMain.GameSession?.GameMode?.Preset.Identifier.Value ?? "null") + ":PetEat:" + AIController.Character.SpeciesName + ":" + character.SpeciesName); } return success; } @@ -252,7 +253,7 @@ namespace Barotrauma Hunger += foods[i].Hunger; Happiness += foods[i].Happiness; #if CLIENT - AiController.Character.PlaySound(CharacterSound.SoundType.Happy, 0.5f); + AIController.Character.PlaySound(CharacterSound.SoundType.Happy, 0.5f); #endif return true; } @@ -265,20 +266,20 @@ namespace Barotrauma if (PlayTimer > 0.0f) { return; } if (Owner == null) { Owner = player; } PlayTimer = 5.0f; - AiController.Character.IsRagdolled = true; + AIController.Character.IsRagdolled = true; Happiness += 10.0f; - AiController.Character.AnimController.MainLimb.body.LinearVelocity += new Vector2(0, PlayForce); - unstunY = AiController.Character.SimPosition.Y; + AIController.Character.AnimController.MainLimb.body.LinearVelocity += new Vector2(0, PlayForce); + unstunY = AIController.Character.SimPosition.Y; #if CLIENT - AiController.Character.PlaySound(CharacterSound.SoundType.Happy, 0.9f); + AIController.Character.PlaySound(CharacterSound.SoundType.Happy, 0.9f); #endif } public string GetTagName() { - if (AiController.Character.Inventory != null) + if (AIController.Character.Inventory != null) { - foreach (Item item in AiController.Character.Inventory.AllItems) + foreach (Item item in AIController.Character.Inventory.AllItems) { var tag = item.GetComponent(); if (tag != null && !string.IsNullOrWhiteSpace(tag.WrittenName)) @@ -293,7 +294,7 @@ namespace Barotrauma public void Update(float deltaTime) { - var character = AiController.Character; + var character = AIController.Character; if (character?.Removed ?? true || character.IsDead) { return; } if (unstunY.HasValue) @@ -332,16 +333,27 @@ namespace Barotrauma Food food = foods[i]; if (Hunger >= food.HungerRange.X && Hunger <= food.HungerRange.Y) { - if (food.TargetParams == null && - AiController.AIParams.TryAddNewTarget(food.Tag, AIState.Eat, food.Priority, out CharacterParams.TargetParams targetParams)) + if (food.TargetParams == null) { - targetParams.IgnoreContained = food.IgnoreContained; - food.TargetParams = targetParams; + if (AIController.AIParams.TryGetTarget(food.Tag, out TargetParams target)) + { + food.TargetParams = target; + } + else if (AIController.AIParams.TryAddNewTarget(food.Tag, AIState.Eat, food.Priority, out TargetParams targetParams)) + { + food.TargetParams = targetParams; + } + if (food.TargetParams != null) + { + food.TargetParams.State = AIState.Eat; + food.TargetParams.Priority = food.Priority; + food.TargetParams.IgnoreContained = food.IgnoreContained; + } } } else if (food.TargetParams != null) { - AiController.AIParams.RemoveTarget(food.TargetParams); + AIController.AIParams.RemoveTarget(food.TargetParams); food.TargetParams = null; } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/ShipCommand/ShipIssueWorker.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/ShipCommand/ShipIssueWorker.cs index 95ff37b9c..b1a83f852 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/ShipCommand/ShipIssueWorker.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/ShipCommand/ShipIssueWorker.cs @@ -116,10 +116,10 @@ namespace Barotrauma } // accept only the highest priority order - if (CurrentOrder != null && OrderedCharacter.GetCurrentOrderWithTopPriority() != CurrentOrder) + if (CurrentOrder == null || OrderedCharacter.GetCurrentOrderWithTopPriority() != CurrentOrder) { #if DEBUG - ShipCommandManager.ShipCommandLog($"Order {CurrentOrder.Name} did not match current order for character {OrderedCharacter} in {this}"); + ShipCommandManager.ShipCommandLog($"{this} is no longer the top priority of {OrderedCharacter}, considering the issue unattended."); #endif return false; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/ShipCommandManager.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/ShipCommandManager.cs index a112758f1..b4a18d756 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/ShipCommandManager.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/ShipCommandManager.cs @@ -356,7 +356,7 @@ namespace Barotrauma ShipIssueWorkers.Add(new ShipIssueWorkerSteer(this, order)); } - foreach (Item item in CommandedSubmarine.GetItems(true).FindAll(i => i.HasTag("turret"))) + foreach (Item item in CommandedSubmarine.GetItems(true).FindAll(i => i.HasTag("turret") && !i.HasTag("hardpoint"))) { var order = new Order(OrderPrefab.Prefabs["operateweapons"], item, item.GetComponent()); ShipIssueWorkers.Add(new ShipIssueWorkerOperateWeapons(this, order)); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/AnimController.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/AnimController.cs index 928dd8e74..a2e4e7a3a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/AnimController.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/AnimController.cs @@ -87,7 +87,7 @@ namespace Barotrauma } public bool CanWalk => RagdollParams.CanWalk; - public bool IsMovingBackwards => !InWater && Math.Sign(targetMovement.X) == -Math.Sign(Dir); + public bool IsMovingBackwards => !InWater && Math.Sign(targetMovement.X) == -Math.Sign(Dir) && CurrentAnimationParams is not FishGroundedParams { Flip: false }; // TODO: define death anim duration in XML protected float deathAnimTimer, deathAnimDuration = 5.0f; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/HumanoidAnimController.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/HumanoidAnimController.cs index e2d69fe08..99b8a56dc 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/HumanoidAnimController.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/HumanoidAnimController.cs @@ -610,15 +610,18 @@ namespace Barotrauma torsoAngle -= herpesStrength / 150.0f; torso.body.SmoothRotate(torsoAngle * Dir, CurrentGroundedParams.TorsoTorque); } - if (!Aiming && CurrentGroundedParams.FixedHeadAngle && HeadAngle.HasValue) + if (!head.Disabled) { - float headAngle = HeadAngle.Value; - if (Crouching && !movingHorizontally) { headAngle -= HumanCrouchParams.ExtraHeadAngleWhenStationary; } - head.body.SmoothRotate(headAngle * Dir, CurrentGroundedParams.HeadTorque); - } - else - { - RotateHead(head); + if (!Aiming && CurrentGroundedParams.FixedHeadAngle && HeadAngle.HasValue) + { + float headAngle = HeadAngle.Value; + if (Crouching && !movingHorizontally) { headAngle -= HumanCrouchParams.ExtraHeadAngleWhenStationary; } + head.body.SmoothRotate(headAngle * Dir, CurrentGroundedParams.HeadTorque); + } + else + { + RotateHead(head); + } } if (!onGround) @@ -1389,7 +1392,7 @@ namespace Barotrauma target.Oxygen += deltaTime * 0.5f; //Stabilize them } - bool powerfulCPR = character.HasAbilityFlag(AbilityFlags.PowerfulCPR); + float cprBoost = character.GetStatValue(StatTypes.CPRBoost); int skill = (int)character.GetSkillLevel("medical"); //pump for 15 seconds (cprAnimTimer 0-15), then do mouth-to-mouth for 2 seconds (cprAnimTimer 15-17) @@ -1406,7 +1409,7 @@ namespace Barotrauma { if (target.Oxygen < -10.0f) { - if (powerfulCPR) + if (cprBoost >= 1f) { //prevent the patient from suffocating no matter how fast their oxygen level is dropping target.Oxygen = Math.Max(target.Oxygen, -10.0f); @@ -1453,7 +1456,7 @@ namespace Barotrauma reviveChance = (float)Math.Pow(reviveChance, CPRSettings.Active.ReviveChanceExponent); reviveChance = MathHelper.Clamp(reviveChance, CPRSettings.Active.ReviveChanceMin, CPRSettings.Active.ReviveChanceMax); - if (powerfulCPR) { reviveChance *= 2.0f; } + reviveChance *= 1f + cprBoost; if (Rand.Range(0.0f, 1.0f, Rand.RandSync.ServerAndClient) <= reviveChance) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/Ragdoll.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/Ragdoll.cs index 8c90345cf..81e272765 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/Ragdoll.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/Ragdoll.cs @@ -873,7 +873,7 @@ namespace Barotrauma foreach (Limb limb in Limbs) { - if (limb == null || limb.IsSevered) { continue; } + if (limb == null || limb.IsSevered || !limb.DoesFlip) { continue; } limb.Dir = Dir; limb.MouthPos = new Vector2(-limb.MouthPos.X, limb.MouthPos.Y); limb.MirrorPullJoint(); @@ -1337,7 +1337,7 @@ namespace Barotrauma bool limbsValid = true; foreach (Limb limb in limbs) { - if (limb.body == null || !limb.body.Enabled) { continue; } + if (limb?.body == null || !limb.body.Enabled) { continue; } if (!CheckValidity(limb.body)) { limbsValid = false; @@ -1959,7 +1959,7 @@ namespace Barotrauma { foreach (Limb l in Limbs) { - l.Remove(); + l?.Remove(); } limbs = null; } @@ -1968,7 +1968,7 @@ namespace Barotrauma { foreach (PhysicsBody b in collider) { - b.Remove(); + b?.Remove(); } collider = null; } @@ -1977,7 +1977,7 @@ namespace Barotrauma { foreach (var joint in LimbJoints) { - var j = joint.Joint; + var j = joint?.Joint; if (GameMain.World.JointList.Contains(j)) { GameMain.World.Remove(j); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Attack.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Attack.cs index d5d02d2d4..387472cde 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Attack.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Attack.cs @@ -189,6 +189,15 @@ namespace Barotrauma [Serialize(20f, IsPropertySaveable.Yes)] public float RequiredAngle { get; set; } + [Serialize(0f, IsPropertySaveable.Yes, description: "By default uses the same value as RequiredAngle. Use if you want to allow selecting the attack but not shooting until the angle is smaller. Only affects ranged attacks."), Editable] + public float RequiredAngleToShoot { get; set; } + + [Serialize(0f, IsPropertySaveable.Yes, description: "How much the attack limb is rotated towards the target. Default 0 = no rotation. Only affects ranged attacks."), Editable] + public float AimRotationTorque { get; set; } + + [Serialize(-1, IsPropertySaveable.Yes, description: "Reference to the limb we apply the aim rotation to. By default same as the attack limb. Only affects ranged attacks."), Editable] + public int RotationLimbIndex { get; set; } + /// /// Legacy support. Use Afflictions. /// @@ -529,6 +538,12 @@ namespace Barotrauma effect.Apply(effectType, deltaTime, targetEntity, attacker, worldPosition); } } + if (effect.HasTargetType(StatusEffect.TargetType.Contained)) + { + targets.Clear(); + targets.AddRange(attacker.Inventory.AllItems); + effect.Apply(effectType, deltaTime, attacker, targets); + } } return attackResult; @@ -591,6 +606,12 @@ namespace Barotrauma { effect.Apply(effectType, deltaTime, targetLimb.character, attacker, worldPosition); } + if (effect.HasTargetType(StatusEffect.TargetType.Contained)) + { + targets.Clear(); + targets.AddRange(attacker.Inventory.AllItems); + effect.Apply(effectType, deltaTime, attacker, targets); + } } return attackResult; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Character.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Character.cs index b03d51803..78d43ee78 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Character.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Character.cs @@ -129,6 +129,7 @@ namespace Barotrauma public bool IsCommanding => IsPlayer || (AIController is HumanAIController humanAI && humanAI.ShipCommandManager != null && humanAI.ShipCommandManager.Active); public bool IsBot => !IsPlayer && AIController is HumanAIController humanAI && humanAI.Enabled; public bool IsEscorted { get; set; } + public Identifier JobIdentifier => Info?.Job?.Prefab.Identifier ?? Identifier.Empty; public readonly Dictionary Properties; public Dictionary SerializableProperties @@ -611,7 +612,9 @@ namespace Barotrauma CharacterHealth.SetHealthBarVisibility(value == null); #endif bool isServerOrSingleplayer = GameMain.IsSingleplayer || GameMain.NetworkMember is { IsServer: true }; - if (IsPlayer && isServerOrSingleplayer && value is { IsDead: true, Wallet: { Balance: var balance } grabbedWallet } && balance > 0) + CheckTalents(AbilityEffectType.OnLootCharacter, new AbilityCharacterLoot(value)); + + if (IsPlayer && isServerOrSingleplayer && value is { IsDead: true, Wallet: { Balance: var balance and > 0 } grabbedWallet }) { #if SERVER if (GameMain.GameSession.Campaign is MultiPlayerCampaign mpCampaign && GameMain.Server is { ServerSettings: { } settings }) @@ -999,7 +1002,7 @@ namespace Barotrauma } } - public bool InWater => AnimController?.InWater ?? false; + public bool InWater => AnimController is AnimController { InWater: true }; public bool GodMode = false; @@ -1053,6 +1056,8 @@ namespace Barotrauma } } + public HashSet MarkedAsLooted = new(); + public bool IsInFriendlySub => Submarine != null && Submarine.TeamID == TeamID; public delegate void OnDeathHandler(Character character, CauseOfDeath causeOfDeath); @@ -1574,14 +1579,23 @@ namespace Barotrauma } if (createNetworkEvent && GameMain.NetworkMember is { IsServer: true }) { - GameMain.NetworkMember.CreateEntityEvent(item, new Item.ChangePropertyEventData(item.SerializableProperties[nameof(item.Tags).ToIdentifier()])); + GameMain.NetworkMember.CreateEntityEvent(item, new Item.ChangePropertyEventData(item.SerializableProperties[nameof(item.Tags).ToIdentifier()], item)); } } } public float GetSkillLevel(string skillIdentifier) => GetSkillLevel(skillIdentifier.ToIdentifier()); - + + private static readonly ImmutableDictionary overrideStatTypes = new Dictionary + { + { new("helm"), StatTypes.HelmSkillOverride }, + { new("medical"), StatTypes.MedicalSkillOverride }, + { new("weapons"), StatTypes.WeaponsSkillOverride }, + { new("electrical"), StatTypes.ElectricalSkillOverride }, + { new("mechanical"), StatTypes.MechanicalSkillOverride } + }.ToImmutableDictionary(); + public float GetSkillLevel(Identifier skillIdentifier) { if (Info?.Job == null) { return 0.0f; } @@ -1617,6 +1631,16 @@ namespace Barotrauma skillLevel += GetStatValue(GetSkillStatType(skillIdentifier)); + if (overrideStatTypes.TryGetValue(skillIdentifier, out StatTypes statType)) + { + float skillOverride = GetStatValue(statType); + if (skillOverride > skillLevel) + { + skillLevel = skillOverride; + } + } + + return skillLevel; } @@ -2058,30 +2082,42 @@ namespace Barotrauma { foreach (Item item in HeldItems) { - if (IsKeyDown(InputType.Aim) || !item.RequireAimToSecondaryUse) + tryUseItem(item, deltaTime); + } + foreach (Item item in Inventory.AllItems) + { + if (item.GetComponent() is { AllowUseWhenWorn: true } && HasEquippedItem(item)) { - item.SecondaryUse(deltaTime, this); + tryUseItem(item, deltaTime); } - if (IsKeyDown(InputType.Use) && !item.IsShootable) + } + } + + void tryUseItem(Item item, float deltaTime) + { + if (IsKeyDown(InputType.Aim) || !item.RequireAimToSecondaryUse) + { + item.SecondaryUse(deltaTime, this); + } + if (IsKeyDown(InputType.Use) && !item.IsShootable) + { + if (!item.RequireAimToUse || IsKeyDown(InputType.Aim)) { - if (!item.RequireAimToUse || IsKeyDown(InputType.Aim)) - { - item.Use(deltaTime, this); - } + item.Use(deltaTime, this); } - if (IsKeyDown(InputType.Shoot) && item.IsShootable) + } + if (IsKeyDown(InputType.Shoot) && item.IsShootable) + { + if (!item.RequireAimToUse || IsKeyDown(InputType.Aim)) { - if (!item.RequireAimToUse || IsKeyDown(InputType.Aim)) - { - item.Use(deltaTime, this); - } + item.Use(deltaTime, this); + } #if CLIENT - else if (item.RequireAimToUse && !IsKeyDown(InputType.Aim)) - { - HintManager.OnShootWithoutAiming(this, item); - } -#endif + else if (item.RequireAimToUse && !IsKeyDown(InputType.Aim)) + { + HintManager.OnShootWithoutAiming(this, item); } +#endif } } @@ -2721,6 +2757,11 @@ namespace Barotrauma } } + bool selectInputSameAsDeselect = false; +#if CLIENT + selectInputSameAsDeselect = GameSettings.CurrentConfig.KeyMap.Bindings[InputType.Select] == GameSettings.CurrentConfig.KeyMap.Bindings[InputType.Deselect]; +#endif + if (SelectedCharacter != null && (IsKeyHit(InputType.Grab) || IsKeyHit(InputType.Health))) //Let people use ladders and buttons and stuff when dragging chars { DeselectCharacter(); @@ -2760,14 +2801,16 @@ namespace Barotrauma { FocusedCharacter.onCustomInteract(FocusedCharacter, this); } - else if (IsKeyHit(InputType.Deselect) && SelectedItem != null) + else if (IsKeyHit(InputType.Deselect) && SelectedItem != null && + (focusedItem == null || focusedItem == SelectedItem || !selectInputSameAsDeselect)) { SelectedItem = null; #if CLIENT CharacterHealth.OpenHealthWindow = null; #endif } - else if (IsKeyHit(InputType.Deselect) && SelectedSecondaryItem != null) + else if (IsKeyHit(InputType.Deselect) && SelectedSecondaryItem != null && SelectedSecondaryItem.GetComponent() == null && + (focusedItem == null || focusedItem == SelectedSecondaryItem || !selectInputSameAsDeselect)) { SelectedSecondaryItem = null; #if CLIENT @@ -2782,6 +2825,10 @@ namespace Barotrauma { #if CLIENT if (CharacterInventory.DraggingItemToWorld) { return; } + if (selectInputSameAsDeselect) + { + keys[(int)InputType.Deselect].Reset(); + } #endif bool canInteract = focusedItem.TryInteract(this); #if CLIENT @@ -3787,7 +3834,7 @@ namespace Barotrauma return; } #endif - if (damage < targetLimb.Params.MinSeveranceDamage) { return; } + if (damage > 0 && damage < targetLimb.Params.MinSeveranceDamage) { return; } if (!IsDead) { if (!allowBeheading && targetLimb.type == LimbType.Head) { return; } @@ -3805,7 +3852,7 @@ namespace Barotrauma var referenceLimb = targetLimb.type == LimbType.Head && targetLimb.Params.ID == 0 ? joint.LimbA : joint.LimbB; if (referenceLimb != targetLimb) { continue; } float probability = severLimbsProbability; - if (!IsDead) + if (!IsDead && probability < 1) { probability *= joint.Params.SeveranceProbabilityModifier; } @@ -4778,6 +4825,32 @@ namespace Barotrauma return info.UnlockedTalents.Contains(identifier); } + private readonly HashSet sameRoomHulls = new(); + + /// + /// Check if the character is in the same room + /// Room and hull differ in that a room can consist of multiple linked hulls + /// + public bool IsInSameRoomAs(Character character) + { + if (character == this) { return true; } + + if (character.CurrentHull is null || CurrentHull is null) + { + // Outside doesn't count as a room + return false; + } + + if (character.Submarine != Submarine) { return false; } + if (character.CurrentHull == CurrentHull) { return true; } + + sameRoomHulls.Clear(); + CurrentHull.GetLinkedEntities(sameRoomHulls); + sameRoomHulls.Add(CurrentHull); + + return sameRoomHulls.Contains(character.CurrentHull); + } + public bool HasUnlockedAllTalents() { if (TalentTree.JobTalentTrees.TryGet(Info.Job.Prefab.Identifier, out TalentTree talentTree)) @@ -4786,7 +4859,7 @@ namespace Barotrauma { foreach (TalentOption talentOption in talentSubTree.TalentOptionStages) { - if (talentOption.TalentIdentifiers.None(t => HasTalent(t))) + if (talentOption.TalentIdentifiers.None(HasTalent)) { return false; } @@ -4831,6 +4904,19 @@ namespace Barotrauma return characterTalents.Any(t => t.UnlockedRecipes.Contains(recipeIdentifier)); } + public bool HasStoreAccessForItem(ItemPrefab prefab) + { + foreach (CharacterTalent talent in characterTalents) + { + foreach (Identifier unlockedItem in talent.UnlockedStoreItems) + { + if (prefab.Tags.Contains(unlockedItem)) { return true; } + } + } + + return false; + } + /// /// Shows visual notification of money gained by the specific player. Useful for mid-mission monetary gains. /// @@ -5043,6 +5129,16 @@ namespace Barotrauma } } + internal sealed class AbilityCharacterLoot : AbilityObject, IAbilityCharacter + { + public Character Character { get; set; } + + public AbilityCharacterLoot(Character character) + { + Character = character; + } + } + class AbilityCharacterKill : AbilityObject, IAbilityCharacter { public AbilityCharacterKill(Character character, Character killer) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/CharacterInfo.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/CharacterInfo.cs index b524580df..393db009a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/CharacterInfo.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/CharacterInfo.cs @@ -543,7 +543,7 @@ namespace Barotrauma private void GetName(Rand.RandSync randSync, out string name) { - var nameElement = CharacterConfigElement.GetChildElement("names") ?? CharacterConfigElement.GetChildElement("name"); + ContentXElement nameElement = CharacterConfigElement.GetChildElement("names") ?? CharacterConfigElement.GetChildElement("name"); ContentPath namesXmlFile = nameElement?.GetAttributeContentPath("path") ?? ContentPath.Empty; XElement namesXml = null; if (!namesXmlFile.IsNullOrEmpty()) //names.xml is defined @@ -554,8 +554,8 @@ namespace Barotrauma else //the legacy firstnames.txt/lastnames.txt shit is defined { namesXml = new XElement("names", new XAttribute("format", "[firstname] [lastname]")); - var firstNamesPath = ReplaceVars(nameElement.GetAttributeContentPath("firstname")?.Value ?? ""); - var lastNamesPath = ReplaceVars(nameElement.GetAttributeContentPath("lastname")?.Value ?? ""); + string firstNamesPath = nameElement == null ? string.Empty : ReplaceVars(nameElement.GetAttributeContentPath("firstname")?.Value ?? ""); + string lastNamesPath = nameElement == null ? string.Empty : ReplaceVars(nameElement.GetAttributeContentPath("lastname")?.Value ?? ""); if (File.Exists(firstNamesPath) && File.Exists(lastNamesPath)) { var firstNames = File.ReadAllLines(firstNamesPath); @@ -735,9 +735,7 @@ namespace Barotrauma Name = infoElement.GetAttributeString("name", ""); OriginalName = infoElement.GetAttributeString("originalname", null); Salary = infoElement.GetAttributeInt("salary", 1000); - ExperiencePoints = infoElement.GetAttributeInt("experiencepoints", 0); - UnlockedTalents = new HashSet(infoElement.GetAttributeIdentifierArray("unlockedtalents", Array.Empty())); AdditionalTalentPoints = infoElement.GetAttributeInt("additionaltalentpoints", 0); HashSet tags = infoElement.GetAttributeIdentifierArray("tags", Array.Empty()).ToHashSet(); LoadTagsBackwardsCompatibility(infoElement, tags); @@ -813,18 +811,22 @@ namespace Barotrauma infoElement.GetAttributeIdentifier("npcid", Identifier.Empty)); MissionsCompletedSinceDeath = infoElement.GetAttributeInt("missionscompletedsincedeath", 0); + UnlockedTalents = new HashSet(); foreach (var subElement in infoElement.Elements()) { bool jobCreated = false; - if (subElement.Name.ToString().Equals("job", StringComparison.OrdinalIgnoreCase) && !jobCreated) + + Identifier elementName = subElement.Name.ToIdentifier(); + + if (elementName == "job" && !jobCreated) { Job = new Job(subElement); jobCreated = true; // there used to be a break here, but it had to be removed to make room for statvalues // using the jobCreated boolean to make sure that only the first job found is created } - else if (subElement.Name.ToString().Equals("savedstatvalues", StringComparison.OrdinalIgnoreCase)) + else if (elementName == "savedstatvalues") { foreach (XElement savedStat in subElement.Elements()) { @@ -838,8 +840,8 @@ namespace Barotrauma float value = savedStat.GetAttributeFloat("statvalue", 0f); if (value == 0f) { continue; } - string statIdentifier = savedStat.GetAttributeString("statidentifier", "").ToLowerInvariant(); - if (string.IsNullOrEmpty(statIdentifier)) + Identifier statIdentifier = savedStat.GetAttributeIdentifier("statidentifier", Identifier.Empty); + if (statIdentifier.IsEmpty) { DebugConsole.ThrowError("Stat identifier not specified for Stat Value when loading character data in CharacterInfo!"); return; @@ -849,6 +851,20 @@ namespace Barotrauma ChangeSavedStatValue(statType, value, statIdentifier, removeOnDeath); } } + else if (elementName == "talents") + { + Version version = subElement.GetAttributeVersion("version", GameMain.Version); // for future maybe + + foreach (XElement talentElement in subElement.Elements()) + { + if (talentElement.Name.ToIdentifier() != "talent") { continue; } + + Identifier talentIdentifier = talentElement.GetAttributeIdentifier("identifier", Identifier.Empty); + if (talentIdentifier == Identifier.Empty) { continue; } + + UnlockedTalents.Add(talentIdentifier); + } + } } LoadHeadAttachments(); } @@ -1149,13 +1165,17 @@ namespace Barotrauma increase *= 1f + Character.GetStatValue(StatTypes.SkillGainSpeed); + increase = GetSkillSpecificGain(increase, skillIdentifier); + float prevLevel = Job.GetSkillLevel(skillIdentifier); Job.IncreaseSkillLevel(skillIdentifier, increase, Character.HasAbilityFlag(AbilityFlags.GainSkillPastMaximum)); float newLevel = Job.GetSkillLevel(skillIdentifier); if ((int)newLevel > (int)prevLevel) - { + { + float extraLevel = Character.GetStatValue(StatTypes.ExtraLevelGain); + Job.IncreaseSkillLevel(skillIdentifier, extraLevel, Character.HasAbilityFlag(AbilityFlags.GainSkillPastMaximum)); // assume we are getting at least 1 point in skill, since this logic only runs in such cases float increaseSinceLastSkillPoint = MathHelper.Max(increase, 1f); var abilitySkillGain = new AbilitySkillGain(increaseSinceLastSkillPoint, skillIdentifier, Character, gainedFromAbility); @@ -1169,6 +1189,25 @@ namespace Barotrauma OnSkillChanged(skillIdentifier, prevLevel, newLevel); } + private static readonly ImmutableDictionary skillGainStatValues = new Dictionary + { + { new("helm"), StatTypes.HelmSkillGainSpeed }, + { new("medical"), StatTypes.WeaponsSkillGainSpeed }, + { new("weapons"), StatTypes.MedicalSkillGainSpeed }, + { new("electrical"), StatTypes.ElectricalSkillGainSpeed }, + { new("mechanical"), StatTypes.MechanicalSkillGainSpeed } + }.ToImmutableDictionary(); + + private float GetSkillSpecificGain(float increase, Identifier skillIdentifier) + { + if (skillGainStatValues.TryGetValue(skillIdentifier, out StatTypes statType)) + { + increase *= 1f + Character.GetStatValue(statType); + } + + return increase; + } + public void SetSkillLevel(Identifier skillIdentifier, float level) { if (Job == null) { return; } @@ -1314,7 +1353,6 @@ namespace Barotrauma new XAttribute("tags", string.Join(",", Head.Preset.TagSet)), new XAttribute("salary", Salary), new XAttribute("experiencepoints", ExperiencePoints), - new XAttribute("unlockedtalents", string.Join(",", UnlockedTalents)), new XAttribute("additionaltalentpoints", AdditionalTalentPoints), new XAttribute("hairindex", Head.HairIndex), new XAttribute("beardindex", Head.BeardIndex), @@ -1363,7 +1401,16 @@ namespace Barotrauma } } + XElement talentElement = new XElement("Talents"); + talentElement.Add(new XAttribute("version", GameMain.Version.ToString())); + + foreach (Identifier talentIdentifier in UnlockedTalents) + { + talentElement.Add(new XElement("Talent", new XAttribute("identifier", talentIdentifier))); + } + charElement.Add(savedStatElement); + charElement.Add(talentElement); parentElement?.Add(charElement); return charElement; } @@ -1717,20 +1764,33 @@ namespace Barotrauma } } - public void ResetSavedStatValue(string statIdentifier) + public void ResetSavedStatValue(Identifier statIdentifier) { foreach (StatTypes statType in SavedStatValues.Keys) { bool changed = false; foreach (SavedStatValue savedStatValue in SavedStatValues[statType]) { - if (savedStatValue.StatIdentifier != statIdentifier) { continue; } + if (!MatchesIdentifier(savedStatValue.StatIdentifier, statIdentifier)) { continue; } + if (MathUtils.NearlyEqual(savedStatValue.StatValue, 0.0f)) { continue; } savedStatValue.StatValue = 0.0f; changed = true; } if (changed) { OnPermanentStatChanged(statType); } } + + static bool MatchesIdentifier(Identifier statIdentifier, Identifier identifier) + { + if (statIdentifier == identifier) { return true; } + + if (identifier.IndexOf('*') is var index and > -1) + { + return statIdentifier.StartsWith(identifier[0..index]); + } + + return false; + } } public float GetSavedStatValue(StatTypes statType) @@ -1756,7 +1816,7 @@ namespace Barotrauma } } - public void ChangeSavedStatValue(StatTypes statType, float value, string statIdentifier, bool removeOnDeath, float maxValue = float.MaxValue, bool setValue = false) + public void ChangeSavedStatValue(StatTypes statType, float value, Identifier statIdentifier, bool removeOnDeath, float maxValue = float.MaxValue, bool setValue = false) { if (!SavedStatValues.ContainsKey(statType)) { @@ -1779,13 +1839,13 @@ namespace Barotrauma } } - public class SavedStatValue + internal sealed class SavedStatValue { - public string StatIdentifier { get; set; } + public Identifier StatIdentifier { get; set; } public float StatValue { get; set; } public bool RemoveOnDeath { get; set; } - public SavedStatValue(string statIdentifier, float value, bool removeOnDeath) + public SavedStatValue(Identifier statIdentifier, float value, bool removeOnDeath) { StatValue = value; RemoveOnDeath = removeOnDeath; @@ -1793,7 +1853,7 @@ namespace Barotrauma } } - class AbilitySkillGain : AbilityObject, IAbilityValue, IAbilitySkillIdentifier, IAbilityCharacter + internal sealed class AbilitySkillGain : AbilityObject, IAbilityValue, IAbilitySkillIdentifier, IAbilityCharacter { public AbilitySkillGain(float skillAmount, Identifier skillIdentifier, Character character, bool gainedFromAbility) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionPrefab.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionPrefab.cs index a18f012bc..91c1998b7 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionPrefab.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionPrefab.cs @@ -384,6 +384,8 @@ namespace Barotrauma private readonly ConstructorInfo constructor; + public readonly bool ResetBetweenRounds; + public IEnumerable> TreatmentSuitability { get @@ -465,6 +467,8 @@ namespace Barotrauma AfflictionOverlayAlphaIsLinear = element.GetAttributeBool("afflictionoverlayalphaislinear", false); AchievementOnRemoved = element.GetAttributeIdentifier("achievementonremoved", ""); + ResetBetweenRounds = element.GetAttributeBool("resetbetweenrounds", false); + foreach (var subElement in element.Elements()) { switch (subElement.Name.ToString().ToLowerInvariant()) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/CharacterHealth.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/CharacterHealth.cs index cd028c9ca..b7825be29 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/CharacterHealth.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/CharacterHealth.cs @@ -140,9 +140,20 @@ namespace Barotrauma private float vitality; public float Vitality { - get - { - return Character.IsDead ? minVitality : vitality; + get + { + if (Character.IsDead) + { + return minVitality; + } + + if (Character.HasAbilityFlag(AbilityFlags.CanNotDieToAfflictions)) + { + return Math.Max(vitality, MinVitality + 1); + } + + return vitality; + } private set { @@ -881,6 +892,9 @@ namespace Barotrauma float oxygenlowResistance = GetResistance(oxygenLowAffliction.Prefab); decreaseSpeed *= (1f - oxygenlowResistance); increaseSpeed *= (1f + oxygenlowResistance); + + float holdBreathMultiplier = 1f + GetStatValue(StatTypes.HoldBreathMultiplier); + decreaseSpeed *= holdBreathMultiplier; OxygenAmount = MathHelper.Clamp(OxygenAmount + deltaTime * (Character.OxygenAvailable < InsufficientOxygenThreshold ? decreaseSpeed : increaseSpeed), -100.0f, 100.0f); } @@ -1217,6 +1231,7 @@ namespace Barotrauma var affliction = kvp.Key; var limbHealth = kvp.Value; if (affliction.Strength <= 0.0f || limbHealth != null) { continue; } + if (kvp.Key.Prefab.ResetBetweenRounds) { continue; } healthElement.Add(new XElement("Affliction", new XAttribute("identifier", affliction.Identifier), new XAttribute("strength", affliction.Strength.ToString("G", CultureInfo.InvariantCulture)))); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Limb.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Limb.cs index 030e232b1..03afe476f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Limb.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Limb.cs @@ -778,6 +778,7 @@ namespace Barotrauma { var abilityAfflictionCharacter = new AbilityAfflictionCharacter(newAffliction, character); attacker.CheckTalents(AbilityEffectType.OnAddDamageAffliction, abilityAfflictionCharacter); + newAffliction = abilityAfflictionCharacter.Affliction; } if (applyAffliction) { @@ -896,6 +897,12 @@ namespace Barotrauma { reEnableTimer = duration; } +#if CLIENT + if (Hidden && LightSource != null) + { + LightSource.Enabled = false; + } +#endif } public void ReEnable() @@ -1194,7 +1201,25 @@ namespace Barotrauma } else { - if (statusEffect.HasTargetType(StatusEffect.TargetType.Character)) + + if (statusEffect.HasTargetType(StatusEffect.TargetType.Contained) && character.Inventory is { } inventory) + { + foreach (Item item in inventory.AllItems) + { + if (statusEffect.TargetIdentifiers != null && + !statusEffect.TargetIdentifiers.Contains(item.Prefab.Identifier) && + statusEffect.TargetIdentifiers.None(id => item.HasTag(id))) + { + continue; + } + if (statusEffect.TargetSlot > -1) + { + if (inventory.FindIndex(item) != statusEffect.TargetSlot) { continue; } + } + targets.Add(item); + } + } + else if (statusEffect.HasTargetType(StatusEffect.TargetType.Character)) { statusEffect.Apply(actionType, deltaTime, character, character, WorldPosition); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Params/CharacterParams.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Params/CharacterParams.cs index 5b45d8882..b2323c54d 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Params/CharacterParams.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Params/CharacterParams.cs @@ -649,7 +649,7 @@ namespace Barotrauma if (HasTag(tag)) { target = null; - DebugConsole.ThrowError($"Multiple targets with the same tag ('{tag}') defined! Only the first will be used!"); + DebugConsole.AddWarning($"Trying to add multiple targets with the same tag ('{tag}') defined! Only the first will be used!"); return false; } else diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityCondition.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityCondition.cs index 1b3564d0f..3ce84413a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityCondition.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityCondition.cs @@ -1,8 +1,5 @@ -using Microsoft.Xna.Framework; -using System; +using System; using System.Collections.Generic; -using System.Linq; -using System.Xml.Linq; namespace Barotrauma.Abilities { @@ -34,6 +31,7 @@ namespace Barotrauma.Abilities Alive = 4, Monster = 5, InFriendlySubmarine = 6, + Large = 7, }; protected List ParseTargetTypes(string[] targetTypeStrings) @@ -41,8 +39,7 @@ namespace Barotrauma.Abilities List targetTypes = new List(); foreach (string targetTypeString in targetTypeStrings) { - TargetType targetType = TargetType.Any; - if (!Enum.TryParse(targetTypeString, true, out targetType)) + if (!Enum.TryParse(targetTypeString, true, out TargetType targetType)) { DebugConsole.ThrowError("Invalid target type type \"" + targetTypeString + "\" in CharacterTalent (" + characterTalent.DebugIdentifier + ")"); } @@ -83,6 +80,9 @@ namespace Barotrauma.Abilities return !targetCharacter.IsHuman; case TargetType.InFriendlySubmarine: return targetCharacter.Submarine != null && targetCharacter.Submarine.TeamID == character.TeamID; + case TargetType.Large: + // mass of mudraptor is ~48 + return targetCharacter.AnimController is { Mass: > 50.0f }; default: return true; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionCharacter.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionCharacter.cs index 43a16839d..0ac951fd6 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionCharacter.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionCharacter.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Xml.Linq; namespace Barotrauma.Abilities @@ -8,11 +9,13 @@ namespace Barotrauma.Abilities { private readonly List targetTypes; - private List conditionals = new List(); + private readonly List conditionals = new List(); public AbilityConditionCharacter(CharacterTalent characterTalent, ContentXElement conditionElement) : base(characterTalent, conditionElement) { - targetTypes = ParseTargetTypes(conditionElement.GetAttributeStringArray("targettypes", Array.Empty(), convertToLowerInvariant: true)); + targetTypes = ParseTargetTypes( + conditionElement.GetAttributeStringArray("targettypes", + conditionElement.GetAttributeStringArray("targettype", Array.Empty()))); foreach (XElement subElement in conditionElement.Elements()) { @@ -28,13 +31,18 @@ namespace Barotrauma.Abilities break; } } + + if (!targetTypes.Any() && !conditionals.Any()) + { + DebugConsole.ThrowError($"Error in talent \"{characterTalent}\". No target types or conditionals defined - the condition will match any character."); + } } protected override bool MatchesConditionSpecific(AbilityObject abilityObject) { if (abilityObject is IAbilityCharacter abilityCharacter) { - if (!(abilityCharacter.Character is Character character)) { return false; } + if (abilityCharacter.Character is not Character character) { return false; } if (!IsViableTarget(targetTypes, character)) { return false; } foreach (var conditional in conditionals) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionCharacterNotLooted.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionCharacterNotLooted.cs new file mode 100644 index 000000000..a79830e5b --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionCharacterNotLooted.cs @@ -0,0 +1,19 @@ +namespace Barotrauma.Abilities +{ + internal sealed class AbilityConditionCharacterNotLooted : AbilityConditionData + { + private readonly Identifier identifier; + + public AbilityConditionCharacterNotLooted(CharacterTalent characterTalent, ContentXElement conditionElement) : base(characterTalent, conditionElement) + { + identifier = conditionElement.GetAttributeIdentifier("identifier", Identifier.Empty); + } + + protected override bool MatchesConditionSpecific(AbilityObject abilityObject) + { + if (abilityObject is not IAbilityCharacter ability) { return false; } + + return !ability.Character.MarkedAsLooted.Contains(identifier); + } + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionCharacterUnconcious.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionCharacterUnconcious.cs new file mode 100644 index 000000000..2809f3546 --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionCharacterUnconcious.cs @@ -0,0 +1,16 @@ +#nullable enable + +namespace Barotrauma.Abilities +{ + internal sealed class AbilityConditionCharacterUnconcious : AbilityConditionData + { + public AbilityConditionCharacterUnconcious(CharacterTalent characterTalent, ContentXElement conditionElement) : base(characterTalent, conditionElement) { } + + protected override bool MatchesConditionSpecific(AbilityObject abilityObject) + { + if (abilityObject is not IAbilityCharacter targetCharacter) { return false; } + + return targetCharacter.Character.IsUnconscious; + } + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionItem.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionItem.cs index 5811b3d66..ae8597e64 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionItem.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionItem.cs @@ -1,6 +1,5 @@ using System; using System.Linq; -using System.Xml.Linq; namespace Barotrauma.Abilities { @@ -13,6 +12,11 @@ namespace Barotrauma.Abilities { identifiers = conditionElement.GetAttributeStringArray("identifiers", Array.Empty(), convertToLowerInvariant: true); tags = conditionElement.GetAttributeStringArray("tags", Array.Empty(), convertToLowerInvariant: true); + + if (!identifiers.Any() && !tags.Any()) + { + DebugConsole.ThrowError($"Error in talent \"{characterTalent}\". No identifiers or tags defined."); + } } protected override bool MatchesConditionSpecific(AbilityObject abilityObject) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionLocation.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionLocation.cs index 9e85d367e..bfdb89205 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionLocation.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionLocation.cs @@ -8,6 +8,7 @@ namespace Barotrauma.Abilities { private readonly bool? hasOutpost; private readonly Identifier[] locationIdentifiers; + private readonly bool isPositiveReputation; public AbilityConditionLocation(CharacterTalent characterTalent, ContentXElement conditionElement) : base(characterTalent, conditionElement) { @@ -16,12 +17,19 @@ namespace Barotrauma.Abilities hasOutpost = conditionElement.GetAttributeBool("hasoutpost", false); } locationIdentifiers = conditionElement.GetAttributeIdentifierArray("locationtype", Array.Empty()); + + isPositiveReputation = conditionElement.GetAttributeBool("ispositivereputation", false); } protected override bool MatchesConditionSpecific(AbilityObject abilityObject) { if (abilityObject is IAbilityLocation abilityLocation) { + if (isPositiveReputation) + { + if (abilityLocation.Location.Reputation.Faction.Reputation.Value <= 0) { return false; } + } + if (locationIdentifiers.Any()) { if (!locationIdentifiers.Contains(abilityLocation.Location.Type.Identifier)) { return false; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionMission.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionMission.cs index 0e19ec19e..fd1d55682 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionMission.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionMission.cs @@ -1,38 +1,50 @@ using System; +using System.Collections.Generic; +using System.Collections.Immutable; using System.Linq; -using System.Xml.Linq; namespace Barotrauma.Abilities { class AbilityConditionMission : AbilityConditionData { - private readonly MissionType missionType; + private readonly ImmutableHashSet missionType; + private readonly bool isAffiliated; + public AbilityConditionMission(CharacterTalent characterTalent, ContentXElement conditionElement) : base(characterTalent, conditionElement) { - string missionTypeString = conditionElement.GetAttributeString("missiontype", "None"); - if (!Enum.TryParse(missionTypeString, out missionType)) + string[] missionTypeStrings = conditionElement.GetAttributeStringArray("missiontype", new []{ "None" })!; + HashSet missionTypes = new HashSet(); + foreach (string missionTypeString in missionTypeStrings) { - DebugConsole.ThrowError("Error in AbilityConditionMission \"" + characterTalent.DebugIdentifier + "\" - \"" + missionTypeString + "\" is not a valid mission type."); - return; - } - if (missionType == MissionType.None) - { - DebugConsole.ThrowError("Error in AbilityConditionMission \"" + characterTalent.DebugIdentifier + "\" - mission type cannot be none."); - return; + if (!Enum.TryParse(missionTypeString, out MissionType parsedMission) || parsedMission is MissionType.None) + { + DebugConsole.ThrowError($"Error in AbilityConditionMission \"{characterTalent.DebugIdentifier}\" - \"{missionTypeString}\" is not a valid mission type."); + return; + } + + missionTypes.Add(parsedMission); } + + missionType = missionTypes.ToImmutableHashSet(); + isAffiliated = conditionElement.GetAttributeBool("isaffiliated", false); } protected override bool MatchesConditionSpecific(AbilityObject abilityObject) { - if ((abilityObject as IAbilityMission)?.Mission is Mission mission) + if (abilityObject is IAbilityMission { Mission: { } mission }) { - return mission.Prefab.Type == missionType; - } - else - { - LogAbilityConditionError(abilityObject, typeof(IAbilityMission)); - return false; + if (isAffiliated && GameMain.GameSession?.Campaign?.Factions.MaxBy(static f => f.Reputation.Value) is { } highestFaction) + { + if (highestFaction.Reputation.Value < 0 || !mission.ReputationRewards.ContainsKey(highestFaction.Reputation.Identifier)) + { + return false; + } + } + return missionType.Contains(mission.Prefab.Type); } + + LogAbilityConditionError(abilityObject, typeof(IAbilityMission)); + return false; } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionReduceAffliction.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionReduceAffliction.cs index d3ece3bf8..c27404723 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionReduceAffliction.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionReduceAffliction.cs @@ -1,5 +1,4 @@ using System; -using System.Xml.Linq; namespace Barotrauma.Abilities { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionAllyNearby.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionAllyNearby.cs new file mode 100644 index 000000000..e877c657b --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionAllyNearby.cs @@ -0,0 +1,47 @@ +using System; +using Microsoft.Xna.Framework; + +namespace Barotrauma.Abilities +{ + internal sealed class AbilityConditionAllyNearby : AbilityConditionDataless + { + private enum NearbyCharacterTruthy + { + OneCharacterMatches, + NoCharacterMatches + } + + private readonly NearbyCharacterTruthy truthyWhen; + private readonly float distance; + + public AbilityConditionAllyNearby(CharacterTalent characterTalent, ContentXElement conditionElement) : base(characterTalent, conditionElement) + { + truthyWhen = conditionElement.GetAttributeEnum("truthywhen", NearbyCharacterTruthy.OneCharacterMatches); + distance = conditionElement.GetAttributeFloat("distance", 10f); + } + + protected override bool MatchesConditionSpecific() + { + bool trueCondition = truthyWhen switch + { + NearbyCharacterTruthy.OneCharacterMatches => true, + NearbyCharacterTruthy.NoCharacterMatches => false, + _ => throw new ArgumentOutOfRangeException(nameof(truthyWhen)) + }; + + foreach (Character ally in Character.GetFriendlyCrew(character)) + { + if (ally == character) { continue; } + + float distanceToCharacter = Vector2.DistanceSquared(ally.WorldPosition, character.WorldPosition); + + if (distanceToCharacter < distance * distance) + { + return trueCondition; + } + } + + return !trueCondition; + } + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionCrewMemberUnconscious.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionCrewMemberUnconscious.cs new file mode 100644 index 000000000..09fa7aaf4 --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionCrewMemberUnconscious.cs @@ -0,0 +1,22 @@ +#nullable enable + +namespace Barotrauma.Abilities +{ + internal sealed class AbilityConditionCrewMemberUnconscious : AbilityConditionDataless + { + public AbilityConditionCrewMemberUnconscious(CharacterTalent characterTalent, ContentXElement conditionElement) : base(characterTalent, conditionElement) { } + + protected override bool MatchesConditionSpecific() + { + foreach (Character c in GameSession.GetSessionCrewCharacters(CharacterType.Both)) + { + if (c.IsUnconscious) + { + return true; + } + } + + return false; + } + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionHasAffliction.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionHasAffliction.cs index 8470362c8..bc1e1e71f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionHasAffliction.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionHasAffliction.cs @@ -17,7 +17,7 @@ { var affliction = character.CharacterHealth.GetAffliction(afflictionIdentifier); if (affliction == null) { return false; } - return minimumPercentage <= affliction.Strength / affliction.Prefab.MaxStrength; + return affliction.Strength >= affliction.Prefab.ActivationThreshold && minimumPercentage <= affliction.Strength / affliction.Prefab.MaxStrength; } return false; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionHasItem.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionHasItem.cs index 04d7ebf62..e4458d78b 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionHasItem.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionHasItem.cs @@ -22,7 +22,7 @@ namespace Barotrauma.Abilities { if (tags.None()) { - return character.GetEquippedItem(null) is Item; + return character.GetEquippedItem(null) != null; } if (requireAll) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionHasLevel.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionHasLevel.cs new file mode 100644 index 000000000..f14552583 --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionHasLevel.cs @@ -0,0 +1,43 @@ +#nullable enable + +using System; + +namespace Barotrauma.Abilities +{ + internal sealed class AbilityConditionHasLevel : AbilityConditionDataless + { + private readonly Option matchedLevel; + private readonly Option minLevel; + + public AbilityConditionHasLevel(CharacterTalent characterTalent, ContentXElement conditionElement) : base(characterTalent, conditionElement) + { + matchedLevel = conditionElement.GetAttributeInt("levelequals", 0) is var match and not 0 + ? Option.Some(match) + : Option.None(); + + minLevel = conditionElement.GetAttributeInt("minlevel", 0) is var min and not 0 + ? Option.Some(min) + : Option.None(); + + if (matchedLevel.IsNone() && minLevel.IsNone()) + { + throw new Exception($"{nameof(AbilityConditionHasLevel)} must have either \"levelequals\" or \"minlevel\" attribute."); + } + } + + protected override bool MatchesConditionSpecific() + { + if (matchedLevel.TryUnwrap(out int match)) + { + return character.Info.GetCurrentLevel() == match; + } + + if (minLevel.TryUnwrap(out int min)) + { + return character.Info.GetCurrentLevel() >= min; + } + + return false; + } + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionHasPermanentStat.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionHasPermanentStat.cs index 344a580f2..c4017a87f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionHasPermanentStat.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionHasPermanentStat.cs @@ -1,13 +1,11 @@ -using System.Linq; -using System.Xml.Linq; - -namespace Barotrauma.Abilities +namespace Barotrauma.Abilities { class AbilityConditionHasPermanentStat : AbilityConditionDataless { private readonly Identifier statIdentifier; private readonly StatTypes statType; private readonly float min; + private readonly PermanentStatPlaceholder placeholder; public AbilityConditionHasPermanentStat(CharacterTalent characterTalent, ContentXElement conditionElement) : base(characterTalent, conditionElement) { @@ -19,11 +17,14 @@ namespace Barotrauma.Abilities string statTypeName = conditionElement.GetAttributeString("stattype", string.Empty); statType = string.IsNullOrEmpty(statTypeName) ? StatTypes.None : CharacterAbilityGroup.ParseStatType(statTypeName, characterTalent.DebugIdentifier); min = conditionElement.GetAttributeFloat("min", 0f); + placeholder = conditionElement.GetAttributeEnum("placeholder", PermanentStatPlaceholder.None); } protected override bool MatchesConditionSpecific() { - return character.Info.GetSavedStatValue(statType, statIdentifier) >= min; + Identifier identifier = CharacterAbilityGivePermanentStat.HandlePlaceholders(placeholder, statIdentifier); + + return character.Info.GetSavedStatValue(statType, identifier) >= min; } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionHasTalent.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionHasTalent.cs new file mode 100644 index 000000000..de2f98107 --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionHasTalent.cs @@ -0,0 +1,19 @@ + +namespace Barotrauma.Abilities +{ + class AbilityConditionHasTalent : AbilityConditionDataless + { + private readonly Identifier talentIdentifier; + + public AbilityConditionHasTalent(CharacterTalent characterTalent, ContentXElement conditionElement) : base(characterTalent, conditionElement) + { + talentIdentifier = conditionElement.GetAttributeIdentifier("identifier", Identifier.Empty); + } + + protected override bool MatchesConditionSpecific() + { + bool result = character.HasTalent(talentIdentifier); + return result; + } + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionHoldingItem.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionHoldingItem.cs new file mode 100644 index 000000000..5c6c201de --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionHoldingItem.cs @@ -0,0 +1,34 @@ +#nullable enable +using System.Collections.Immutable; + +namespace Barotrauma.Abilities; + +internal sealed class AbilityConditionHoldingItem : AbilityConditionDataless +{ + private readonly ImmutableHashSet tags; + + public AbilityConditionHoldingItem(CharacterTalent characterTalent, ContentXElement conditionElement) : base(characterTalent, conditionElement) + { + tags = conditionElement.GetAttributeIdentifierImmutableHashSet("tags", ImmutableHashSet.Empty); + } + + protected override bool MatchesConditionSpecific() + { + if (tags.Count is 0) + { + return HasItemInHand(character, null); + } + + foreach (Identifier tag in tags) + { + if (HasItemInHand(character, tag)) { return true; } + } + + return false; + + static bool HasItemInHand(Character character, Identifier? tagOrIdentifier) => + character.GetEquippedItem(tagOrIdentifier?.Value, InvSlotType.RightHand) is not null || + character.GetEquippedItem(tagOrIdentifier?.Value, InvSlotType.LeftHand) is not null; + + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionLowestLevel.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionLowestLevel.cs new file mode 100644 index 000000000..3cf37c2b9 --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionLowestLevel.cs @@ -0,0 +1,23 @@ +#nullable enable + +namespace Barotrauma.Abilities +{ + internal sealed class AbilityConditionLowestLevel : AbilityConditionDataless + { + public AbilityConditionLowestLevel(CharacterTalent characterTalent, ContentXElement conditionElement) : base(characterTalent, conditionElement) { } + + protected override bool MatchesConditionSpecific() + { + int ownLevel = character.Info.GetCurrentLevel(); + + foreach (Character crew in GameSession.GetSessionCrewCharacters(CharacterType.Both)) + { + if (crew == character) { continue; } + + if (crew.Info.GetCurrentLevel() < ownLevel) { return false; } + } + + return true; + } + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionNearbyCharacterCount.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionNearbyCharacterCount.cs new file mode 100644 index 000000000..e8b084f07 --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionNearbyCharacterCount.cs @@ -0,0 +1,39 @@ +#nullable enable +using System; +using System.Collections.Immutable; +using Microsoft.Xna.Framework; + +namespace Barotrauma.Abilities; + +internal sealed class AbilityConditionNearbyCharacterCount : AbilityConditionDataless +{ + private readonly float distance; + private readonly int count; + private readonly ImmutableHashSet targetTypes; + + public AbilityConditionNearbyCharacterCount(CharacterTalent characterTalent, ContentXElement conditionElement) : base(characterTalent, conditionElement) + { + distance = conditionElement.GetAttributeFloat("distance", 10f); + count = conditionElement.GetAttributeInt("count", 1); + targetTypes = ParseTargetTypes(conditionElement.GetAttributeStringArray("targettypes", Array.Empty(), convertToLowerInvariant: true)).ToImmutableHashSet(); + } + + protected override bool MatchesConditionSpecific() + { + int amountNeeded = count; + foreach (Character otherCharacter in Character.CharacterList) + { + if (character.Submarine != otherCharacter.Submarine) { continue; } + if (!IsViableTarget(targetTypes, otherCharacter)) { return false; } + + if (Vector2.DistanceSquared(character.WorldPosition, otherCharacter.WorldPosition) < distance * distance) + { + amountNeeded--; + + if (amountNeeded <= 0) { return true; } + } + } + + return false; + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityObjects.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityObjects.cs index 9d1e093b2..698e7f207 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityObjects.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityObjects.cs @@ -15,5 +15,4 @@ namespace Barotrauma.Abilities } public Character Character { get; set; } } - } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbility.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbility.cs index 044d960a9..c4d73f406 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbility.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbility.cs @@ -67,7 +67,7 @@ namespace Barotrauma.Abilities if (abilityObject is null) { ApplyEffect(); - } + } else { ApplyEffect(abilityObject); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityApplyStatusEffectToNonHumans.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityApplyStatusEffectToNonHumans.cs new file mode 100644 index 000000000..c7ef4461e --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityApplyStatusEffectToNonHumans.cs @@ -0,0 +1,35 @@ +#nullable enable + +using Microsoft.Xna.Framework; + +namespace Barotrauma.Abilities +{ + internal sealed class CharacterAbilityApplyStatusEffectToNonHumans : CharacterAbilityApplyStatusEffects + { + private readonly float maxDistance; + + public CharacterAbilityApplyStatusEffectToNonHumans(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement) : base(characterAbilityGroup, abilityElement) + { + maxDistance = abilityElement.GetAttributeFloat("maxdistance", float.MaxValue); + } + + protected override void ApplyEffect() + { + foreach (Character character in Character.CharacterList) + { + if (character.IsHuman) { continue; } + + if (maxDistance < float.MaxValue) + { + if (Vector2.DistanceSquared(character.WorldPosition, Character.WorldPosition) > maxDistance * maxDistance) { continue; } + } + ApplyEffectSpecific(character); + } + } + + protected override void ApplyEffect(AbilityObject abilityObject) + { + ApplyEffect(); + } + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityApplyStatusEffects.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityApplyStatusEffects.cs index 5711c0ed5..d408fbc83 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityApplyStatusEffects.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityApplyStatusEffects.cs @@ -17,6 +17,8 @@ namespace Barotrauma.Abilities readonly List targets = new List(); + private bool effectBeingApplied; + public CharacterAbilityApplyStatusEffects(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement) : base(characterAbilityGroup, abilityElement) { statusEffects = CharacterAbilityGroup.ParseStatusEffects(CharacterTalent, abilityElement.GetChildElement("statuseffects")); @@ -29,44 +31,57 @@ namespace Barotrauma.Abilities protected void ApplyEffectSpecific(Character targetCharacter) { - foreach (var statusEffect in statusEffects) + //prevent an infinite loop if an effect triggers itself + //(e.g. a talent that triggers when an affliction is applied, and applies that same affliction) + if (effectBeingApplied) { return; } + + effectBeingApplied = true; + + try { - if (statusEffect.HasTargetType(StatusEffect.TargetType.UseTarget)) + foreach (var statusEffect in statusEffects) { - // currently used to spawn items on the targeted character - statusEffect.SetUser(targetCharacter); - statusEffect.Apply(ActionType.OnAbility, EffectDeltaTime, targetCharacter, targetCharacter); - } - else if (statusEffect.HasTargetType(StatusEffect.TargetType.NearbyCharacters)) - { - targets.Clear(); - targets.AddRange(statusEffect.GetNearbyTargets(targetCharacter.WorldPosition, targets)); - if (!nearbyCharactersAppliesToSelf) + if (statusEffect.HasTargetType(StatusEffect.TargetType.UseTarget)) { - targets.RemoveAll(c => c == Character); + // currently used to spawn items on the targeted character + statusEffect.SetUser(targetCharacter); + statusEffect.Apply(ActionType.OnAbility, EffectDeltaTime, targetCharacter, targetCharacter); } - if (!nearbyCharactersAppliesToAllies) + else if (statusEffect.HasTargetType(StatusEffect.TargetType.NearbyCharacters)) { - targets.RemoveAll(c => c is Character otherCharacter && HumanAIController.IsFriendly(otherCharacter, Character)); + targets.Clear(); + targets.AddRange(statusEffect.GetNearbyTargets(targetCharacter.WorldPosition, targets)); + if (!nearbyCharactersAppliesToSelf) + { + targets.RemoveAll(c => c == Character); + } + if (!nearbyCharactersAppliesToAllies) + { + targets.RemoveAll(c => c is Character otherCharacter && HumanAIController.IsFriendly(otherCharacter, Character)); + } + if (!nearbyCharactersAppliesToEnemies) + { + targets.RemoveAll(c => c is Character otherCharacter && !HumanAIController.IsFriendly(otherCharacter, Character)); + } + statusEffect.SetUser(Character); + statusEffect.Apply(ActionType.OnAbility, EffectDeltaTime, targetCharacter, targets); } - if (!nearbyCharactersAppliesToEnemies) + else if (statusEffect.HasTargetType(StatusEffect.TargetType.Character)) { - targets.RemoveAll(c => c is Character otherCharacter && !HumanAIController.IsFriendly(otherCharacter, Character)); + statusEffect.SetUser(Character); + statusEffect.Apply(ActionType.OnAbility, EffectDeltaTime, Character, targetCharacter); + } + else + { + statusEffect.SetUser(Character); + statusEffect.Apply(ActionType.OnAbility, EffectDeltaTime, Character, Character); } - statusEffect.SetUser(Character); - statusEffect.Apply(ActionType.OnAbility, EffectDeltaTime, targetCharacter, targets); - } - else if (statusEffect.HasTargetType(StatusEffect.TargetType.Character)) - { - statusEffect.SetUser(Character); - statusEffect.Apply(ActionType.OnAbility, EffectDeltaTime, Character, targetCharacter); - } - else - { - statusEffect.SetUser(Character); - statusEffect.Apply(ActionType.OnAbility, EffectDeltaTime, Character, Character); } } + finally + { + effectBeingApplied = false; + } } protected override void ApplyEffect() { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityApplyStatusEffectsToAllies.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityApplyStatusEffectsToAllies.cs index 70b871963..83d56c28d 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityApplyStatusEffectsToAllies.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityApplyStatusEffectsToAllies.cs @@ -1,4 +1,5 @@ -using Microsoft.Xna.Framework; +using System.Collections.Immutable; +using Microsoft.Xna.Framework; namespace Barotrauma.Abilities { @@ -6,11 +7,15 @@ namespace Barotrauma.Abilities { private readonly bool allowSelf; private readonly float maxDistance = float.MaxValue; + private readonly bool inSameRoom; + private readonly ImmutableHashSet jobIdentifiers; public CharacterAbilityApplyStatusEffectsToAllies(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement) : base(characterAbilityGroup, abilityElement) { allowSelf = abilityElement.GetAttributeBool("allowself", true); maxDistance = abilityElement.GetAttributeFloat("maxdistance", float.MaxValue); + inSameRoom = abilityElement.GetAttributeBool("insameroom", false); + jobIdentifiers = abilityElement.GetAttributeIdentifierImmutableHashSet("jobs", ImmutableHashSet.Empty); } @@ -19,6 +24,27 @@ namespace Barotrauma.Abilities foreach (Character character in Character.GetFriendlyCrew(Character)) { if (!allowSelf && character == Character) { continue; } + + if (!jobIdentifiers.IsEmpty) + { + bool hadJob = false; + foreach (Identifier job in jobIdentifiers) + { + if (character.HasJob(job.Value)) + { + hadJob = true; + break; + } + } + + if (!hadJob) { continue; } + } + + if (inSameRoom && !character.IsInSameRoomAs(Character)) + { + continue; + } + if (maxDistance < float.MaxValue) { if (Vector2.DistanceSquared(character.WorldPosition, Character.WorldPosition) > maxDistance * maxDistance) { continue; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityApplyStatusEffectsToApprenticeship.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityApplyStatusEffectsToApprenticeship.cs new file mode 100644 index 000000000..27d4afe94 --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityApplyStatusEffectsToApprenticeship.cs @@ -0,0 +1,63 @@ +#nullable enable + +using System.Collections.Generic; +using System.Collections.Immutable; + +namespace Barotrauma.Abilities +{ + internal sealed class CharacterAbilityApplyStatusEffectsToApprenticeship : CharacterAbilityApplyStatusEffects + { + private readonly bool invert; + private readonly ImmutableHashSet jobPrefabList = JobPrefab.Prefabs.ToImmutableHashSet(); + + public CharacterAbilityApplyStatusEffectsToApprenticeship(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement) : base(characterAbilityGroup, abilityElement) + { + invert = abilityElement.GetAttributeBool("invert", false); + } + + protected override void ApplyEffect() + { + ApplyEffectSpecific(Character); + JobPrefab? apprenticeJob = GetApprenticeJob(Character, jobPrefabList); + if (apprenticeJob is null) + { + DebugConsole.ThrowError($"{nameof(CharacterAbilityUnlockApprenticeshipTalentTree)}: Could not find apprentice job for character {Character.Name}"); + return; + } + + foreach (Character character in GameSession.GetSessionCrewCharacters(CharacterType.Both)) + { + JobPrefab? characterJob = character.Info?.Job?.Prefab; + if (characterJob is null) { continue; } + + switch (characterJob.Identifier == apprenticeJob.Identifier) + { + case true when invert: + continue; + case false when !invert: + continue; + } + + ApplyEffectSpecific(character); + } + } + + protected override void ApplyEffect(AbilityObject abilityObject) + { + ApplyEffect(); + } + + public static JobPrefab? GetApprenticeJob(Character character, IReadOnlyCollection jobList) + { + foreach (JobPrefab prefab in jobList) + { + if (character.Info.GetSavedStatValue(StatTypes.Apprenticeship, prefab.Identifier) > 0) + { + return prefab; + } + } + + return null; + } + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGainSimultaneousSkill.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGainSimultaneousSkill.cs index 1204769de..4161a881e 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGainSimultaneousSkill.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGainSimultaneousSkill.cs @@ -6,12 +6,15 @@ namespace Barotrauma.Abilities class CharacterAbilityGainSimultaneousSkill : CharacterAbility { private readonly Identifier skillIdentifier; - private readonly bool ignoreAbilitySkillGain; + + private readonly bool ignoreAbilitySkillGain, + targetAllies; public CharacterAbilityGainSimultaneousSkill(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement) : base(characterAbilityGroup, abilityElement) { skillIdentifier = abilityElement.GetAttributeIdentifier("skillidentifier", ""); ignoreAbilitySkillGain = abilityElement.GetAttributeBool("ignoreabilityskillgain", true); + targetAllies = abilityElement.GetAttributeBool("targetallies", false); } protected override void ApplyEffect(AbilityObject abilityObject) @@ -19,7 +22,20 @@ namespace Barotrauma.Abilities if (abilityObject is AbilitySkillGain abilitySkillGain) { if (ignoreAbilitySkillGain && abilitySkillGain.GainedFromAbility) { return; } - Character.Info?.IncreaseSkillLevel(skillIdentifier, abilitySkillGain.Value, gainedFromAbility: true); + Identifier identifier = skillIdentifier == "inherit" ? abilitySkillGain.SkillIdentifier : skillIdentifier; + + if (targetAllies) + { + foreach (Character character in Character.GetFriendlyCrew(Character)) + { + if (character == Character) { continue; } + Character.Info?.IncreaseSkillLevel(identifier, abilitySkillGain.Value, gainedFromAbility: true); + } + } + else + { + Character.Info?.IncreaseSkillLevel(identifier, abilitySkillGain.Value, gainedFromAbility: true); + } } else { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGiveExperience.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGiveExperience.cs new file mode 100644 index 000000000..5b7d50aa0 --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGiveExperience.cs @@ -0,0 +1,35 @@ +namespace Barotrauma.Abilities; + +internal sealed class CharacterAbilityGiveExperience : CharacterAbility +{ + public override bool AppliesEffectOnIntervalUpdate => true; + + private readonly int amount; + + public CharacterAbilityGiveExperience(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement) : base(characterAbilityGroup, abilityElement) + { + amount = abilityElement.GetAttributeInt("amount", 0); + } + + private void ApplyEffectSpecific(Character targetCharacter) + { + targetCharacter.Info?.GiveExperience(amount); + } + + protected override void ApplyEffect(AbilityObject abilityObject) + { + if ((abilityObject as IAbilityCharacter)?.Character is { } targetCharacter) + { + ApplyEffectSpecific(targetCharacter); + } + else + { + ApplyEffectSpecific(Character); + } + } + + protected override void ApplyEffect() + { + ApplyEffectSpecific(Character); + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGiveItemStat.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGiveItemStat.cs new file mode 100644 index 000000000..4fe2c1c86 --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGiveItemStat.cs @@ -0,0 +1,31 @@ +#nullable enable + +namespace Barotrauma.Abilities +{ + internal sealed class CharacterAbilityGiveItemStat : CharacterAbility + { + private readonly ItemTalentStats stat; + private readonly float value; + + public CharacterAbilityGiveItemStat(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement) : base(characterAbilityGroup, abilityElement) + { + stat = abilityElement.GetAttributeEnum("stattype", ItemTalentStats.None); + value = abilityElement.GetAttributeFloat("value", 0f); + } + + protected override void VerifyState(bool conditionsMatched, float timeSinceLastUpdate) + { + if (conditionsMatched) + { + ApplyEffect(); + } + } + + protected override void ApplyEffect(AbilityObject abilityObject) + { + if (abilityObject is not IAbilityItem ability) { return; } + + ability.Item.StatManager.ApplyStat(stat, value, CharacterTalent); + } + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGiveItemStatToTags.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGiveItemStatToTags.cs new file mode 100644 index 000000000..707663745 --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGiveItemStatToTags.cs @@ -0,0 +1,39 @@ +#nullable enable + +using System.Collections.Immutable; + +namespace Barotrauma.Abilities +{ + internal sealed class CharacterAbilityGiveItemStatToTags: CharacterAbility + { + private readonly ItemTalentStats stat; + private readonly float value; + private readonly ImmutableHashSet tags; + + public CharacterAbilityGiveItemStatToTags(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement) : base(characterAbilityGroup, abilityElement) + { + stat = abilityElement.GetAttributeEnum("stattype", ItemTalentStats.None); + value = abilityElement.GetAttributeFloat("value", 0f); + tags = abilityElement.GetAttributeIdentifierImmutableHashSet("tags", ImmutableHashSet.Empty); + } + + protected override void VerifyState(bool conditionsMatched, float timeSinceLastUpdate) + { + if (conditionsMatched) + { + ApplyEffect(); + } + } + + protected override void ApplyEffect() + { + foreach (Item item in Character.Submarine.GetItems(true)) + { + if (item.HasTag(tags) || tags.Contains(item.Prefab.Identifier)) + { + item.StatManager.ApplyStat(stat, value, CharacterTalent); + } + } + } + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGivePermanentStat.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGivePermanentStat.cs index a0750d5d4..bd54f9413 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGivePermanentStat.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGivePermanentStat.cs @@ -1,11 +1,17 @@ -using Barotrauma.Extensions; -using System.Xml.Linq; +using System; namespace Barotrauma.Abilities { + public enum PermanentStatPlaceholder + { + None, + LocationName, + LocationIndex + } + class CharacterAbilityGivePermanentStat : CharacterAbility { - private readonly string statIdentifier; + private readonly Identifier statIdentifier; private readonly StatTypes statType; private readonly float value; private readonly float maxValue; @@ -13,6 +19,7 @@ namespace Barotrauma.Abilities private readonly bool removeOnDeath; private readonly bool giveOnAddingFirstTime; private readonly bool setValue; + private readonly PermanentStatPlaceholder placeholder; //private readonly float maximumValue; public override bool AllowClientSimulation => true; @@ -20,7 +27,7 @@ namespace Barotrauma.Abilities public CharacterAbilityGivePermanentStat(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement) : base(characterAbilityGroup, abilityElement) { - statIdentifier = abilityElement.GetAttributeString("statidentifier", "").ToLowerInvariant(); + statIdentifier = abilityElement.GetAttributeIdentifier("statidentifier", Identifier.Empty); string statTypeName = abilityElement.GetAttributeString("stattype", string.Empty); statType = string.IsNullOrEmpty(statTypeName) ? StatTypes.None : CharacterAbilityGroup.ParseStatType(statTypeName, CharacterTalent.DebugIdentifier); value = abilityElement.GetAttributeFloat("value", 0f); @@ -29,6 +36,7 @@ namespace Barotrauma.Abilities removeOnDeath = abilityElement.GetAttributeBool("removeondeath", false); giveOnAddingFirstTime = abilityElement.GetAttributeBool("giveonaddingfirsttime", characterAbilityGroup.AbilityEffectType == AbilityEffectType.None); setValue = abilityElement.GetAttributeBool("setvalue", false); + placeholder = abilityElement.GetAttributeEnum("placeholder", PermanentStatPlaceholder.None); } public override void InitializeAbility(bool addingFirstTime) @@ -51,14 +59,33 @@ namespace Barotrauma.Abilities private void ApplyEffectSpecific() { + Identifier identifier = HandlePlaceholders(placeholder, statIdentifier); if (targetAllies) { - Character.GetFriendlyCrew(Character).ForEach(c => c?.Info.ChangeSavedStatValue(statType, value, statIdentifier, removeOnDeath, maxValue: maxValue, setValue: setValue)); + foreach (Character c in Character.GetFriendlyCrew(Character)) + { + c?.Info.ChangeSavedStatValue(statType, value, identifier, removeOnDeath, maxValue: maxValue, setValue: setValue); + } } else { - Character?.Info.ChangeSavedStatValue(statType, value, statIdentifier, removeOnDeath, maxValue: maxValue, setValue: setValue); + Character?.Info.ChangeSavedStatValue(statType, value, identifier, removeOnDeath, maxValue: maxValue, setValue: setValue); } } + + public static Identifier HandlePlaceholders(PermanentStatPlaceholder placeholder, Identifier original) + { + if (GameMain.GameSession?.Campaign?.Map is not { } map) { return original; } + + switch (placeholder) + { + case PermanentStatPlaceholder.LocationName when map.CurrentLocation is { } location: + return original.Replace("[placeholder]", location.Name); + case PermanentStatPlaceholder.LocationIndex: + return original.Replace("[placeholder]", map.CurrentLocationIndex.ToString()); + } + + return original; + } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGiveReputation.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGiveReputation.cs new file mode 100644 index 000000000..37fb09935 --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGiveReputation.cs @@ -0,0 +1,31 @@ +#nullable enable + +namespace Barotrauma.Abilities +{ + internal sealed class CharacterAbilityGiveReputation : CharacterAbility + { + private readonly Identifier factionIdentifier; + private readonly float amount; + + public CharacterAbilityGiveReputation(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement) : base(characterAbilityGroup, abilityElement) + { + factionIdentifier = abilityElement.GetAttributeIdentifier("identifier", Identifier.Empty); + amount = abilityElement.GetAttributeFloat("amount", 0f); + } + + protected override void ApplyEffect() + { + if (GameMain.GameSession?.Campaign is not { } campaign) { return; } + + foreach (Faction faction in campaign.Factions) + { + if (faction.Prefab.Identifier != factionIdentifier) { continue; } + + faction.Reputation.AddReputation(amount); + break; + } + } + + protected override void ApplyEffect(AbilityObject abilityObject) => ApplyEffect(); + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityMarkAsLooted.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityMarkAsLooted.cs new file mode 100644 index 000000000..c9460ff46 --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityMarkAsLooted.cs @@ -0,0 +1,18 @@ +namespace Barotrauma.Abilities +{ + internal sealed class CharacterAbilityMarkAsLooted: CharacterAbility + { + private readonly Identifier identifier; + public CharacterAbilityMarkAsLooted(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement) : base(characterAbilityGroup, abilityElement) + { + identifier = abilityElement.GetAttributeIdentifier("identifier", Identifier.Empty); + } + + protected override void ApplyEffect(AbilityObject abilityObject) + { + if (abilityObject is not IAbilityCharacter { Character: { } character }) { return; } + + character.MarkedAsLooted.Add(identifier); + } + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityModifyAffliction.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityModifyAffliction.cs index 97b0302bd..6c275b1c7 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityModifyAffliction.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityModifyAffliction.cs @@ -1,30 +1,36 @@ -using System.Collections.Generic; -using System.Xml.Linq; - -namespace Barotrauma.Abilities +namespace Barotrauma.Abilities { class CharacterAbilityModifyAffliction : CharacterAbility { - private readonly string[] afflictionIdentifiers; + private readonly Identifier[] afflictionIdentifiers; + + private readonly Identifier replaceWith; private readonly float addedMultiplier; public CharacterAbilityModifyAffliction(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement) : base(characterAbilityGroup, abilityElement) { - afflictionIdentifiers = abilityElement.GetAttributeStringArray("afflictionidentifiers", new string[0], convertToLowerInvariant: true); + afflictionIdentifiers = abilityElement.GetAttributeIdentifierArray("afflictionidentifiers", System.Array.Empty()); + replaceWith = abilityElement.GetAttributeIdentifier("replacewith", Identifier.Empty); addedMultiplier = abilityElement.GetAttributeFloat("addedmultiplier", 0f); } protected override void ApplyEffect(AbilityObject abilityObject) { - if ((abilityObject as IAbilityAffliction)?.Affliction is Affliction affliction) + var abilityAffliction = abilityObject as IAbilityAffliction; + if (abilityAffliction?.Affliction is Affliction affliction) { - foreach (string afflictionIdentifier in afflictionIdentifiers) + foreach (Identifier afflictionIdentifier in afflictionIdentifiers) { - if (affliction.Identifier == afflictionIdentifier) + if (affliction.Identifier != afflictionIdentifier) { continue; } + affliction.Strength *= 1 + addedMultiplier; + if (!replaceWith.IsEmpty) { - affliction.Strength *= 1 + addedMultiplier; - } + if (AfflictionPrefab.Prefabs.TryGet(replaceWith, out AfflictionPrefab afflictionPrefab)) + { + abilityAffliction.Affliction = new Affliction(afflictionPrefab, abilityAffliction.Affliction.Strength); + } + } } } else diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityReduceAffliction.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityReduceAffliction.cs new file mode 100644 index 000000000..14a84d337 --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityReduceAffliction.cs @@ -0,0 +1,27 @@ +#nullable enable + +namespace Barotrauma.Abilities +{ + internal sealed class CharacterAbilityReduceAffliction : CharacterAbility + { + private readonly Identifier afflictionId; + private readonly float amount; + + public CharacterAbilityReduceAffliction(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement) : base(characterAbilityGroup, abilityElement) + { + afflictionId = abilityElement.GetAttributeIdentifier("afflictionid", abilityElement.GetAttributeIdentifier("affliction", Identifier.Empty)); + amount = abilityElement.GetAttributeFloat("amount", 0); + + if (afflictionId.IsEmpty) + { + DebugConsole.ThrowError($"Error in {nameof(CharacterAbilityReduceAffliction)} - affliction identifier not set."); + } + } + + protected override void ApplyEffect(AbilityObject abilityObject) + { + if (abilityObject is not IAbilityCharacter character) { return; } + character.Character.CharacterHealth.ReduceAfflictionOnAllLimbs(afflictionId, amount); + } + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityRemoveRandomIngredient.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityRemoveRandomIngredient.cs new file mode 100644 index 000000000..78d7f501a --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityRemoveRandomIngredient.cs @@ -0,0 +1,19 @@ +#nullable enable + +using Barotrauma.Items.Components; + +namespace Barotrauma.Abilities +{ + internal sealed class CharacterAbilityRemoveRandomIngredient : CharacterAbility + { + public CharacterAbilityRemoveRandomIngredient(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement) : base(characterAbilityGroup, abilityElement) { } + + protected override void ApplyEffect(AbilityObject abilityObject) + { + if (abilityObject is not Fabricator.AbilityFabricationItemIngredients { Items.Count: > 0 } ingredients) { return; } + + int randomIndex = Rand.Int(ingredients.Items.Count, Rand.RandSync.Unsynced); + ingredients.Items.RemoveAt(randomIndex); + } + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityResetPermanentStat.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityResetPermanentStat.cs index 1660c54e1..df57f5f1c 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityResetPermanentStat.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityResetPermanentStat.cs @@ -1,16 +1,15 @@ -using System.Xml.Linq; - + namespace Barotrauma.Abilities { class CharacterAbilityResetPermanentStat : CharacterAbility { - private readonly string statIdentifier; + private readonly Identifier statIdentifier; public override bool AppliesEffectOnIntervalUpdate => true; public override bool AllowClientSimulation => true; public CharacterAbilityResetPermanentStat(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement) : base(characterAbilityGroup, abilityElement) { - statIdentifier = abilityElement.GetAttributeString("statidentifier", "").ToLowerInvariant(); + statIdentifier = abilityElement.GetAttributeIdentifier("statidentifier", Identifier.Empty); } protected override void ApplyEffect(AbilityObject abilityObject) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilitySetMetadataInt.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilitySetMetadataInt.cs new file mode 100644 index 000000000..d24a201f3 --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilitySetMetadataInt.cs @@ -0,0 +1,29 @@ +#nullable enable + +namespace Barotrauma.Abilities +{ + internal sealed class CharacterAbilitySetMetadataInt : CharacterAbility + { + private readonly Identifier identifier; + private readonly int value; + + public CharacterAbilitySetMetadataInt(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement) : base(characterAbilityGroup, abilityElement) + { + identifier = abilityElement.GetAttributeIdentifier("identifier", Identifier.Empty); + value = abilityElement.GetAttributeInt("value", 0); + } + + protected override void ApplyEffect() + { + if (identifier == Identifier.Empty) { return; } + if (GameMain.GameSession?.Campaign?.CampaignMetadata is not { } metadata) { return; } + + metadata.SetValue(identifier, value); + } + + protected override void ApplyEffect(AbilityObject abilityObject) + { + ApplyEffect(); + } + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityUnlockTree.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityUnlockTree.cs deleted file mode 100644 index e8d0ad788..000000000 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityUnlockTree.cs +++ /dev/null @@ -1,29 +0,0 @@ -namespace Barotrauma.Abilities -{ - class CharacterAbilityUnlockTree : CharacterAbility - { - public CharacterAbilityUnlockTree(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement) : base(characterAbilityGroup, abilityElement) - { - } - - public override void InitializeAbility(bool addingFirstTime) - { - if (!TalentTree.JobTalentTrees.TryGet(Character.Info.Job.Prefab.Identifier, out TalentTree talentTree)) { return; } - - var subTree = talentTree.TalentSubTrees.Find(t => t.AllTalentIdentifiers.Contains(CharacterTalent.Prefab.Identifier)); - if (subTree == null) { return; } - - subTree.ForceUnlock = true; - if (!addingFirstTime) { return; } - - foreach (var talentId in subTree.AllTalentIdentifiers) - { - if (talentId == CharacterTalent.Prefab.Identifier) { continue; } - if (Character.GiveTalent(talentId)) - { - Character.Info.AdditionalTalentPoints++; - } - } - } - } -} diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CustomAbilities/CharacterAbilityTandemFire.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CustomAbilities/CharacterAbilityTandemFire.cs index d58d73b49..ff1e5ccde 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CustomAbilities/CharacterAbilityTandemFire.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CustomAbilities/CharacterAbilityTandemFire.cs @@ -13,21 +13,23 @@ namespace Barotrauma.Abilities protected override void ApplyEffect() { - if (!SelectedItemHasTag(Character)) { return; } + if (!SelectedItemHasTag(Character, tag)) { return; } Character closestCharacter = null; float closestDistance = squaredMaxDistance; foreach (Character crewCharacter in Character.GetFriendlyCrew(Character)) { - if (crewCharacter != Character && Vector2.DistanceSquared(Character.SimPosition, Character.GetRelativeSimPosition(crewCharacter)) is float tempDistance && tempDistance < closestDistance) + if (crewCharacter != Character && + Vector2.DistanceSquared(Character.WorldPosition, crewCharacter.WorldPosition) is float tempDistance && tempDistance < closestDistance && + SelectedItemHasTag(crewCharacter, tag)) { closestCharacter = crewCharacter; closestDistance = tempDistance; } } - if (closestCharacter == null || !SelectedItemHasTag(closestCharacter)) { return; } + if (closestCharacter == null) { return; } if (closestDistance < squaredMaxDistance) { @@ -35,7 +37,7 @@ namespace Barotrauma.Abilities ApplyEffectSpecific(closestCharacter); } - bool SelectedItemHasTag(Character character) => + static bool SelectedItemHasTag(Character character, string tag) => (character.SelectedItem != null && character.SelectedItem.HasTag(tag)) || (character.SelectedSecondaryItem != null && character.SelectedSecondaryItem.HasTag(tag)); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CustomAbilities/CharacterAbilityUnlockApprenticeshipTalentTree.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CustomAbilities/CharacterAbilityUnlockApprenticeshipTalentTree.cs new file mode 100644 index 000000000..9994e51e6 --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CustomAbilities/CharacterAbilityUnlockApprenticeshipTalentTree.cs @@ -0,0 +1,48 @@ +#nullable enable + +using System.Collections.Generic; +using System.Collections.Immutable; +using Barotrauma.Extensions; + +namespace Barotrauma.Abilities +{ + internal sealed class CharacterAbilityUnlockApprenticeshipTalentTree : CharacterAbility + { + public CharacterAbilityUnlockApprenticeshipTalentTree(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement) : base(characterAbilityGroup, abilityElement) { } + + public override void InitializeAbility(bool addingFirstTime) + { + JobPrefab? apprentice = CharacterAbilityApplyStatusEffectsToApprenticeship.GetApprenticeJob(Character, JobPrefab.Prefabs.ToImmutableHashSet()); + if (apprentice is null) + { + DebugConsole.ThrowError($"{nameof(CharacterAbilityUnlockApprenticeshipTalentTree)}: Could not find apprentice job for character {Character.Name}"); + return; + } + + if (!TalentTree.JobTalentTrees.TryGet(apprentice.Identifier, out TalentTree? talentTree)) { return; } + + HashSet> talentsTrees = new HashSet>(); + foreach (TalentSubTree subTree in talentTree.TalentSubTrees) + { + if (subTree.Type != TalentTreeType.Specialization) { continue; } + talentsTrees.Add(subTree.AllTalentIdentifiers); + } + + ImmutableHashSet selectedTalentTree = talentsTrees.GetRandomUnsynced(); + + foreach (Identifier identifier in selectedTalentTree) + { + if (Character.HasTalent(identifier)) { continue; } + if (Character.GiveTalent(identifier)) + { + Character.Info.AdditionalTalentPoints++; + } + } + } + + protected override void ApplyEffect(AbilityObject abilityObject) + { + ApplyEffect(); + } + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/AbilityGroups/CharacterAbilityGroup.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/AbilityGroups/CharacterAbilityGroup.cs index bd4b45998..766b48ea3 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/AbilityGroups/CharacterAbilityGroup.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/AbilityGroups/CharacterAbilityGroup.cs @@ -18,12 +18,15 @@ namespace Barotrauma.Abilities protected readonly int maxTriggerCount; protected int timesTriggered = 0; - - // add support for OR conditions? + // add support for OR conditions? protected readonly List abilityConditions = new List(); - // separate dictionaries for each type of characterability? - protected readonly List characterAbilities = new List(); + /// + /// List of abilities that are triggered by this group. + /// Fallback abilities are triggered if the conditional fails + /// + protected readonly List characterAbilities = new List(), + fallbackAbilities = new List(); public CharacterAbilityGroup(AbilityEffectType abilityEffectType, CharacterTalent characterTalent, ContentXElement abilityElementGroup) { @@ -38,6 +41,9 @@ namespace Barotrauma.Abilities case "abilities": LoadAbilities(subElement); break; + case "fallbackabilities": + LoadFallbackAbilities(subElement); + break; case "conditions": LoadConditions(subElement); break; @@ -47,10 +53,23 @@ namespace Barotrauma.Abilities public void ActivateAbilityGroup(bool addingFirstTime) { + if (!CheckActivatingCondition()) { return; } + foreach (var characterAbility in characterAbilities) { characterAbility.InitializeAbility(addingFirstTime); } + + foreach (var characterAbility in fallbackAbilities) + { + characterAbility.InitializeAbility(addingFirstTime); + } + } + + private bool CheckActivatingCondition() + { + if (AbilityEffectType is not AbilityEffectType.None) { return true; } + return !abilityConditions.Any(static abilityCondition => !abilityCondition.MatchesCondition()); } public void LoadConditions(ContentXElement conditionElements) @@ -85,6 +104,17 @@ namespace Barotrauma.Abilities characterAbilities.Add(characterAbility); } + public void AddFallbackAbility(CharacterAbility characterAbility) + { + if (characterAbility == null) + { + DebugConsole.ThrowError($"Trying to add null ability for talent {CharacterTalent.DebugIdentifier}!"); + return; + } + + fallbackAbilities.Add(characterAbility); + } + // XML private AbilityCondition ConstructCondition(CharacterTalent characterTalent, ContentXElement conditionElement, bool errorMessages = true) { @@ -135,6 +165,14 @@ namespace Barotrauma.Abilities } } + private void LoadFallbackAbilities(ContentXElement abilityElements) + { + foreach (var abilityElementGroup in abilityElements.Elements()) + { + AddFallbackAbility(ConstructAbility(abilityElementGroup, CharacterTalent)); + } + } + private CharacterAbility ConstructAbility(ContentXElement abilityElement, CharacterTalent characterTalent) { CharacterAbility newAbility = CharacterAbility.Load(abilityElement, this); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/AbilityGroups/CharacterAbilityGroupEffect.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/AbilityGroups/CharacterAbilityGroupEffect.cs index b77f4332d..b9418955f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/AbilityGroups/CharacterAbilityGroupEffect.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/AbilityGroups/CharacterAbilityGroupEffect.cs @@ -1,29 +1,38 @@ -namespace Barotrauma.Abilities +using System.Collections.Generic; + +namespace Barotrauma.Abilities { class CharacterAbilityGroupEffect : CharacterAbilityGroup { - public CharacterAbilityGroupEffect(AbilityEffectType abilityEffectType, CharacterTalent characterTalent, ContentXElement abilityElementGroup) : + public CharacterAbilityGroupEffect(AbilityEffectType abilityEffectType, CharacterTalent characterTalent, ContentXElement abilityElementGroup) : base(abilityEffectType, characterTalent, abilityElementGroup) { } public void CheckAbilityGroup(AbilityObject abilityObject) { if (!IsActive) { return; } - if (IsApplicable(abilityObject)) + + if (IsOverTriggerCount) { return; } + + List abilities = IsApplicable(abilityObject) ? characterAbilities : fallbackAbilities; + + foreach (CharacterAbility characterAbility in abilities) { - foreach (var characterAbility in characterAbilities) + if (characterAbility.IsViable()) { - if (characterAbility.IsViable()) - { - characterAbility.ApplyAbilityEffect(abilityObject); - } + characterAbility.ApplyAbilityEffect(abilityObject); } + } + + if (abilities.Count > 0) + { timesTriggered++; } } + private bool IsOverTriggerCount => timesTriggered >= maxTriggerCount; + private bool IsApplicable(AbilityObject abilityObject) { - if (timesTriggered >= maxTriggerCount) { return false; } foreach (var abilityCondition in abilityConditions) { if (!abilityCondition.MatchesCondition(abilityObject)) @@ -31,7 +40,8 @@ return false; } } + return true; } } -} +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/AbilityGroups/CharacterAbilityGroupInterval.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/AbilityGroups/CharacterAbilityGroupInterval.cs index 7cc1e24eb..18725da29 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/AbilityGroups/CharacterAbilityGroupInterval.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/AbilityGroups/CharacterAbilityGroupInterval.cs @@ -1,4 +1,7 @@ -namespace Barotrauma.Abilities +using System.Collections.Generic; +using System.Linq; + +namespace Barotrauma.Abilities { class CharacterAbilityGroupInterval : CharacterAbilityGroup { @@ -9,48 +12,71 @@ private float effectDelayTimer; - public CharacterAbilityGroupInterval(AbilityEffectType abilityEffectType, CharacterTalent characterTalent, ContentXElement abilityElementGroup) : + public CharacterAbilityGroupInterval(AbilityEffectType abilityEffectType, CharacterTalent characterTalent, ContentXElement abilityElementGroup) : base(abilityEffectType, characterTalent, abilityElementGroup) - { + { // too many overlapping intervals could cause hitching? maybe randomize a little interval = abilityElementGroup.GetAttributeFloat("interval", 0f); effectDelay = abilityElementGroup.GetAttributeFloat("effectdelay", 0f); } + public void UpdateAbilityGroup(float deltaTime) { if (!IsActive) { return; } - TimeSinceLastUpdate += deltaTime; - if (TimeSinceLastUpdate >= interval) - { - bool conditionsMatched = IsApplicable(); - effectDelayTimer = conditionsMatched ? effectDelayTimer + TimeSinceLastUpdate : 0f; - conditionsMatched &= effectDelayTimer >= effectDelay; - foreach (var characterAbility in characterAbilities) - { - if (characterAbility.IsViable()) - { - characterAbility.UpdateCharacterAbility(conditionsMatched, TimeSinceLastUpdate); - } - } - if (conditionsMatched) - { - timesTriggered++; - } - TimeSinceLastUpdate = 0; + TimeSinceLastUpdate += deltaTime; + if (TimeSinceLastUpdate < interval) { return; } + + bool shouldApplyDelayedEffect; + bool conditionsDidntMatch; + + if (AllConditionsMatched()) + { + effectDelayTimer += TimeSinceLastUpdate; + shouldApplyDelayedEffect = effectDelayTimer >= effectDelay; + conditionsDidntMatch = false; } + else + { + effectDelayTimer = 0f; + shouldApplyDelayedEffect = false; + conditionsDidntMatch = true; + } + + bool hasFallbacks = fallbackAbilities.Count > 0; + + List abilitiesToRun = + conditionsDidntMatch && hasFallbacks + ? fallbackAbilities + : characterAbilities; + + foreach (var characterAbility in abilitiesToRun) + { + if (!characterAbility.IsViable()) { continue; } + + characterAbility.UpdateCharacterAbility( + shouldApplyDelayedEffect || conditionsDidntMatch, + TimeSinceLastUpdate); + } + + if (shouldApplyDelayedEffect || (conditionsDidntMatch && hasFallbacks)) + { + timesTriggered++; + } + + TimeSinceLastUpdate = 0; } - private bool IsApplicable() + + private bool AllConditionsMatched() { if (timesTriggered >= maxTriggerCount) { return false; } + foreach (var abilityCondition in abilityConditions) { - if (!abilityCondition.MatchesCondition()) - { - return false; - } + if (!abilityCondition.MatchesCondition()) { return false; } } + return true; } } -} +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/CharacterTalent.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/CharacterTalent.cs index 0cf4b3420..4cc374e79 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/CharacterTalent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/CharacterTalent.cs @@ -19,6 +19,7 @@ namespace Barotrauma // works functionally but a missing recipe is not represented on GUI side. this might be better placed in the character class itself, though it might be fine here as well public List UnlockedRecipes { get; } = new List(); + public List UnlockedStoreItems { get; } = new List(); public CharacterTalent(TalentPrefab talentPrefab, Character character) { @@ -45,7 +46,17 @@ namespace Barotrauma } else { - DebugConsole.ThrowError("No recipe identifier defined for talent " + DebugIdentifier); + DebugConsole.ThrowError($"No recipe identifier defined for talent {DebugIdentifier}"); + } + break; + case "addedstoreitem": + if (subElement.GetAttributeIdentifier("itemtag", Identifier.Empty) is { IsEmpty: false } storeItemTag) + { + UnlockedStoreItems.Add(storeItemTag); + } + else + { + DebugConsole.ThrowError($"No store item identifier defined for talent {DebugIdentifier}"); } break; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/TalentPrefab.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/TalentPrefab.cs index d8f954873..d3cc70e56 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/TalentPrefab.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/TalentPrefab.cs @@ -1,6 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Xml.Linq; +#if CLIENT +using Microsoft.Xna.Framework; +#endif namespace Barotrauma { @@ -14,6 +14,10 @@ namespace Barotrauma public readonly Sprite Icon; +#if CLIENT + public readonly Option ColorOverride; +#endif + public static readonly PrefabCollection TalentPrefabs = new PrefabCollection(); public ContentXElement ConfigElement @@ -28,8 +32,22 @@ namespace Barotrauma DisplayName = TextManager.Get($"talentname.{Identifier}").Fallback(Identifier.Value); - Description = ""; - + Identifier nameIdentifier = element.GetAttributeIdentifier("nameidentifier", Identifier.Empty); + if (!nameIdentifier.IsEmpty) + { + DisplayName = TextManager.Get(nameIdentifier).Fallback(Identifier.Value); + } + + Description = string.Empty; + +#if CLIENT + Color colorOverride = element.GetAttributeColor("coloroverride", Color.TransparentBlack); + + ColorOverride = colorOverride != Color.TransparentBlack + ? Option.Some(colorOverride) + : Option.None(); +#endif + foreach (var subElement in element.Elements()) { switch (subElement.Name.ToString().ToLowerInvariant()) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/TalentTree.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/TalentTree.cs index e3379314f..396244f9a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/TalentTree.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/TalentTree.cs @@ -5,7 +5,7 @@ using System.Linq; namespace Barotrauma { - class TalentTree : Prefab + internal sealed class TalentTree : Prefab { public enum TalentTreeStageState { @@ -40,16 +40,17 @@ namespace Barotrauma DebugConsole.ThrowError($"No job defined for talent tree in \"{file.Path}\"!"); return; } - + List subTrees = new List(); foreach (var subTreeElement in element.GetChildElements("subtree")) { subTrees.Add(new TalentSubTree(subTreeElement)); } + TalentSubTrees = subTrees.ToImmutableArray(); AllTalentIdentifiers = TalentSubTrees.SelectMany(t => t.AllTalentIdentifiers).ToImmutableHashSet(); } - + public bool TalentIsInTree(Identifier talentIdentifier) { return AllTalentIdentifiers.Contains(talentIdentifier); @@ -57,29 +58,42 @@ namespace Barotrauma public static bool IsViableTalentForCharacter(Character character, Identifier talentIdentifier) { - return IsViableTalentForCharacter(character, talentIdentifier, character?.Info?.UnlockedTalents ?? (ICollection)Array.Empty()); + return IsViableTalentForCharacter(character, talentIdentifier, character?.Info?.UnlockedTalents ?? (IReadOnlyCollection)Array.Empty()); + } + + public static bool TalentTreeMeetsRequirements(TalentTree tree, TalentSubTree targetTree, IReadOnlyCollection selectedTalents) + { + IEnumerable blockingSubTrees = tree.TalentSubTrees.Where(tst => tst.BlockedTrees.Contains(targetTree.Identifier)), + requiredSubTrees = tree.TalentSubTrees.Where(tst => targetTree.RequiredTrees.Contains(tst.Identifier)); + + return requiredSubTrees.All(tst => tst.IsCompleted(selectedTalents)) && // check if we meet requirements + !blockingSubTrees.Any(tst => tst.HasAnyTalent(selectedTalents)); // check if any other talent trees are blocking this one } // i hate this function - markus // me too - joonas - public static TalentTreeStageState GetTalentOptionStageState(Character character, Identifier subTreeIdentifier, int index, List selectedTalents) + public static TalentTreeStageState GetTalentOptionStageState(Character character, Identifier subTreeIdentifier, int index, IReadOnlyCollection selectedTalents) { if (character?.Info?.Job.Prefab is null) { return TalentTreeStageState.Invalid; } if (!JobTalentTrees.TryGet(character.Info.Job.Prefab.Identifier, out TalentTree talentTree)) { return TalentTreeStageState.Invalid; } - TalentSubTree subTree = talentTree.TalentSubTrees.FirstOrDefault(tst => tst.Identifier == subTreeIdentifier); + TalentSubTree subTree = talentTree!.TalentSubTrees.FirstOrDefault(tst => tst.Identifier == subTreeIdentifier); + if (subTree is null) { return TalentTreeStageState.Invalid; } - if (subTree == null) { return TalentTreeStageState.Invalid; } + if (!TalentTreeMeetsRequirements(talentTree, subTree, selectedTalents)) + { + return TalentTreeStageState.Locked; + } TalentOption targetTalentOption = subTree.TalentOptionStages[index]; - if (targetTalentOption.TalentIdentifiers.Any(t => character.HasTalent(t))) + if (targetTalentOption.HasEnoughTalents(character.Info)) { return TalentTreeStageState.Unlocked; } - if (targetTalentOption.TalentIdentifiers.Any(t => selectedTalents.Contains(t))) + if (targetTalentOption.HasSelectedTalent(selectedTalents)) { return TalentTreeStageState.Highlighted; } @@ -91,8 +105,8 @@ namespace Barotrauma if (lastindex >= 0) { TalentOption lastLatentOption = subTree.TalentOptionStages[lastindex]; - hasTalentInLastTier = lastLatentOption.TalentIdentifiers.Any(HasTalent); - isLastTalentPurchased = lastLatentOption.TalentIdentifiers.Any(t => character.HasTalent(t)); + hasTalentInLastTier = lastLatentOption.HasEnoughTalents(selectedTalents); + isLastTalentPurchased = lastLatentOption.HasEnoughTalents(character.Info); } if (!hasTalentInLastTier) @@ -108,38 +122,29 @@ namespace Barotrauma } return TalentTreeStageState.Locked; - - bool HasTalent(Identifier talentId) - { - return selectedTalents.Contains(talentId); - } } - public static bool IsViableTalentForCharacter(Character character, Identifier talentIdentifier, ICollection selectedTalents) + public static bool IsViableTalentForCharacter(Character character, Identifier talentIdentifier, IReadOnlyCollection selectedTalents) { if (character?.Info?.Job.Prefab == null) { return false; } - if (character.Info.GetTotalTalentPoints() - selectedTalents.Count() <= 0) { return false; } + + if (character.Info.GetTotalTalentPoints() - selectedTalents.Count <= 0) { return false; } if (!JobTalentTrees.TryGet(character.Info.Job.Prefab.Identifier, out TalentTree talentTree)) { return false; } - foreach (var subTree in talentTree.TalentSubTrees) + foreach (var subTree in talentTree!.TalentSubTrees) { - if (subTree.ForceUnlock && subTree.TalentOptionStages.Any(option => option.TalentIdentifiers.Contains(talentIdentifier))) { return true; } - foreach (var talentOptionStage in subTree.TalentOptionStages) { - bool hasTalentInThisTier = talentOptionStage.TalentIdentifiers.Any(t => selectedTalents.Contains(t)); + bool hasTalentInThisTier = talentOptionStage.HasEnoughTalents(selectedTalents); if (!hasTalentInThisTier) { if (talentOptionStage.TalentIdentifiers.Contains(talentIdentifier)) { - return true; - } - else - { - break; + return TalentTreeMeetsRequirements(talentTree, subTree, selectedTalents); } + break; } } } @@ -164,60 +169,119 @@ namespace Barotrauma } } } + return viableTalents; } public override void Dispose() { } } - class TalentSubTree + internal enum TalentTreeType + { + Specialization, + Primary + } + + internal sealed class TalentSubTree { public Identifier Identifier { get; } public LocalizedString DisplayName { get; } - public bool ForceUnlock; - public readonly ImmutableArray TalentOptionStages; public readonly ImmutableHashSet AllTalentIdentifiers; + public readonly TalentTreeType Type; + public readonly ImmutableHashSet RequiredTrees; + public readonly ImmutableHashSet BlockedTrees; + + public bool IsCompleted(IReadOnlyCollection talents) => TalentOptionStages.All(option => option.HasEnoughTalents(talents)); + public bool HasAnyTalent(IReadOnlyCollection talents) => TalentOptionStages.Any(option => option.HasSelectedTalent(talents)); + public TalentSubTree(ContentXElement subTreeElement) { Identifier = subTreeElement.GetAttributeIdentifier("identifier", ""); - DisplayName = TextManager.Get("talenttree." + Identifier).Fallback(Identifier.Value); + string nameIdentifier = subTreeElement.GetAttributeString("nameidentifier", string.Empty); + if (string.IsNullOrWhiteSpace(nameIdentifier)) + { + nameIdentifier = $"talenttree.{Identifier}"; + } + DisplayName = TextManager.Get($"talenttree.{nameIdentifier}").Fallback(Identifier.Value); + Type = subTreeElement.GetAttributeEnum("type", TalentTreeType.Specialization); + RequiredTrees = subTreeElement.GetAttributeIdentifierImmutableHashSet("requires", ImmutableHashSet.Empty); + BlockedTrees = subTreeElement.GetAttributeIdentifierImmutableHashSet("blocks", ImmutableHashSet.Empty); List talentOptionStages = new List(); foreach (var talentOptionsElement in subTreeElement.GetChildElements("talentoptions")) { talentOptionStages.Add(new TalentOption(talentOptionsElement, Identifier)); } + TalentOptionStages = talentOptionStages.ToImmutableArray(); AllTalentIdentifiers = TalentOptionStages.SelectMany(t => t.TalentIdentifiers).ToImmutableHashSet(); } - } - class TalentOption + internal readonly struct TalentOption { private readonly ImmutableHashSet talentIdentifiers; public IEnumerable TalentIdentifiers => talentIdentifiers; - public bool HasTalent(Identifier talentIdentifier) + public readonly int MaxChosenTalents; + + /// + /// When specified the talent option will show talent with this identifier + /// and clicking on it will expand the talent option to show the talents + /// + public readonly Option ShowcaseTalent; + + public bool HasEnoughTalents(CharacterInfo character) => CountMatchingTalents(character.UnlockedTalents) >= MaxChosenTalents; + public bool HasEnoughTalents(IReadOnlyCollection selectedTalents) => CountMatchingTalents(selectedTalents) >= MaxChosenTalents; + + // No LINQ + public bool HasSelectedTalent(IReadOnlyCollection selectedTalents) { - return talentIdentifiers.Contains(talentIdentifier); + foreach (Identifier talent in selectedTalents) + { + if (talentIdentifiers.Contains(talent)) + { + return true; + } + } + return false; + } + + public int CountMatchingTalents(IReadOnlyCollection talents) + { + int i = 0; + foreach (Identifier talent in talents) + { + if (talentIdentifiers.Contains(talent)) + { + i++; + } + } + return i; } public TalentOption(ContentXElement talentOptionsElement, Identifier debugIdentifier) { + MaxChosenTalents = talentOptionsElement.GetAttributeInt("maxchosentalents", 1); + + Identifier showcaseTalent = talentOptionsElement.GetAttributeIdentifier("showcasetalent", Identifier.Empty); + ShowcaseTalent = !showcaseTalent.IsEmpty + ? Option.Some(showcaseTalent) + : Option.None(); + var talentIdentifiers = new HashSet(); foreach (var talentOptionElement in talentOptionsElement.GetChildElements("talentoption")) { Identifier identifier = talentOptionElement.GetAttributeIdentifier("identifier", Identifier.Empty); talentIdentifiers.Add(identifier); } + this.talentIdentifiers = talentIdentifiers.ToImmutableHashSet(); } } - -} +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/ContentManagement/ContentPath.cs b/Barotrauma/BarotraumaShared/SharedSource/ContentManagement/ContentPath.cs index 4e0a4328b..18da93f92 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/ContentManagement/ContentPath.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/ContentManagement/ContentPath.cs @@ -57,7 +57,7 @@ namespace Barotrauma { Option ugcId = ContentPackageId.Parse(otherModName.Value); ContentPackage? otherMod = - allPackages.FirstOrDefault(p => ugcId == p.UgcId) + allPackages.FirstOrDefault(p => ugcId.IsSome() && ugcId == p.UgcId) ?? allPackages.FirstOrDefault(p => p.Name == otherModName) ?? allPackages.FirstOrDefault(p => p.NameMatches(otherModName)) ?? throw new MissingContentPackageException(ContentPackage, otherModName.Value); diff --git a/Barotrauma/BarotraumaShared/SharedSource/ContentManagement/ContentXElement.cs b/Barotrauma/BarotraumaShared/SharedSource/ContentManagement/ContentXElement.cs index b184da625..f2b9dbae6 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/ContentManagement/ContentXElement.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/ContentManagement/ContentXElement.cs @@ -1,6 +1,8 @@ #nullable enable using System; using System.Collections.Generic; +using System.Collections.Immutable; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Reflection.Metadata.Ecma335; using System.Xml.Linq; @@ -63,6 +65,8 @@ namespace Barotrauma public Identifier GetAttributeIdentifier(string key, string def) => Element.GetAttributeIdentifier(key, def); public Identifier GetAttributeIdentifier(string key, Identifier def) => Element.GetAttributeIdentifier(key, def); public Identifier[]? GetAttributeIdentifierArray(string key, Identifier[] def, bool trim = true) => Element.GetAttributeIdentifierArray(key, def, trim); + [return:NotNullIfNotNull("def")] + public ImmutableHashSet? GetAttributeIdentifierImmutableHashSet(string key, ImmutableHashSet? def, bool trim = true) => Element.GetAttributeIdentifierImmutableHashSet(key, def, trim); public string? GetAttributeString(string key, string? def) => Element.GetAttributeString(key, def); public string GetAttributeStringUnrestricted(string key, string def) => Element.GetAttributeStringUnrestricted(key, def); public string[]? GetAttributeStringArray(string key, string[]? def, bool convertToLowerInvariant = false) => Element.GetAttributeStringArray(key, def, convertToLowerInvariant); diff --git a/Barotrauma/BarotraumaShared/SharedSource/ContentManagement/Identifier.cs b/Barotrauma/BarotraumaShared/SharedSource/ContentManagement/Identifier.cs index b19d0f034..824924101 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/ContentManagement/Identifier.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/ContentManagement/Identifier.cs @@ -121,6 +121,10 @@ namespace Barotrauma public static bool operator !=(string str, in Identifier? identifier) => !(identifier == str); + + internal int IndexOf(char c) => Value.IndexOf(c); + + internal Identifier this[Range range] => Value[range].ToIdentifier(); } public static class IdentifierExtensions diff --git a/Barotrauma/BarotraumaShared/SharedSource/DebugConsole.cs b/Barotrauma/BarotraumaShared/SharedSource/DebugConsole.cs index 9a7710898..050230110 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/DebugConsole.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/DebugConsole.cs @@ -1334,7 +1334,7 @@ namespace Barotrauma if (!prefab.UpgradeCategories.Contains(category)) { continue; } if (!string.IsNullOrWhiteSpace(prefabIdentifier) && prefab.Identifier != prefabIdentifier) { continue; } - int targetLevel = prefab.MaxLevel - upgradeManager.GetRealUpgradeLevel(prefab, category); + int targetLevel = prefab.GetMaxLevelForCurrentSub() - upgradeManager.GetRealUpgradeLevel(prefab, category); for (int i = 0; i < targetLevel; i++) { upgradeManager.PurchaseUpgrade(prefab, category, force: true); @@ -1750,6 +1750,17 @@ namespace Barotrauma NewMessage("Set minimum loading time to " + time + " seconds.", Color.White); })); + + commands.Add(new Command("resetcharacternetstate", "resetcharacternetstate [character name]: A debug-only command that resets a character's network state, intended for diagnosing character syncing issues.", null, + () => + { + if (GameMain.NetworkMember == null) { return null; } + return new string[][] + { + Character.CharacterList.Select(c => c.Name).Distinct().OrderBy(n => n).ToArray() + }; + })); + commands.Add(new Command("storeinfo", "", (string[] args) => { if (GameMain.GameSession?.Map?.CurrentLocation is Location location) @@ -1803,6 +1814,7 @@ namespace Barotrauma commands.Add(new Command("lighting|lights", "Toggle lighting on/off (client-only).", null, isCheat: true)); commands.Add(new Command("ambientlight", "ambientlight [color]: Change the color of the ambient light in the level.", null, isCheat: true)); commands.Add(new Command("debugdraw", "Toggle the debug drawing mode on/off (client-only).", null, isCheat: true)); + commands.Add(new Command("debugdrawlocalization", "Toggle the localization debug drawing mode on/off (client-only). Colors all text that hasn't been fetched from a localization file magenta, making it easier to spot hard-coded or missing texts.", null, isCheat: false)); commands.Add(new Command("togglevoicechatfilters", "Toggle the radio/muffle filters in the voice chat (client-only).", null, isCheat: false)); commands.Add(new Command("togglehud|hud", "Toggle the character HUD (inventories, icons, buttons, etc) on/off (client-only).", null)); commands.Add(new Command("toggleupperhud", "Toggle the upper part of the ingame HUD (chatbox, crewmanager) on/off (client-only).", null)); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Enums.cs b/Barotrauma/BarotraumaShared/SharedSource/Enums.cs index bf8d1addd..f23d4a02c 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Enums.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Enums.cs @@ -43,6 +43,7 @@ namespace Barotrauma OnRepairComplete, OnItemFabricationSkillGain, OnItemFabricatedAmount, + OnItemFabricatedIngredients, OnAllyItemFabricatedAmount, OnOpenItemContainer, OnUseRangedWeapon, @@ -51,6 +52,7 @@ namespace Barotrauma OnSelfRagdoll, OnRagdoll, OnRoundEnd, + OnLootCharacter, OnAnyMissionCompleted, OnAllMissionsCompleted, OnGiveOrder, @@ -80,6 +82,11 @@ namespace Barotrauma // Skills ElectricalSkillBonus, HelmSkillBonus, + HelmSkillOverride, + MedicalSkillOverride, + WeaponsSkillOverride, + ElectricalSkillOverride, + MechanicalSkillOverride, MechanicalSkillBonus, MedicalSkillBonus, WeaponsSkillBonus, @@ -105,6 +112,7 @@ namespace Barotrauma RangedSpreadReduction, // Utility RepairSpeed, + MechanicalRepairSpeed, DeconstructorSpeedMultiplier, RepairToolStructureRepairMultiplier, RepairToolStructureDamageMultiplier, @@ -115,20 +123,53 @@ namespace Barotrauma GeneticMaterialRefineBonus, GeneticMaterialTaintedProbabilityReductionOnCombine, SkillGainSpeed, + ExtraLevelGain, + HelmSkillGainSpeed, + WeaponsSkillGainSpeed, + MedicalSkillGainSpeed, + ElectricalSkillGainSpeed, + MechanicalSkillGainSpeed, MedicalItemApplyingMultiplier, + MedicalItemDurationMultiplier, + PoisonMultiplier, // Tinker TinkeringDuration, TinkeringStrength, TinkeringDamage, // Misc ReputationGainMultiplier, + ReputationLossMultiplier, MissionMoneyGainMultiplier, ExperienceGainMultiplier, MissionExperienceGainMultiplier, ExtraMissionCount, ExtraSpecialSalesCount, - ApplyTreatmentsOnSelfFraction, + StoreSellMultiplier, + StoreBuyMultiplierAffiliated, + StoreBuyMultiplier, MaxAttachableCount, + ExplosionRadiusMultiplier, + ExplosionDamageMultiplier, + FabricateMedicineSpeedMultiplier, + BallastFloraDamageMultiplier, + HoldBreathMultiplier, + Apprenticeship, + CPRBoost + } + + internal enum ItemTalentStats + { + None, + DetoriationSpeed, + BatteryCapacity, + EngineSpeed, + EngineMaxSpeed, + PumpSpeed, + PumpMaxFlow, + ReactorMaxOutput, + ReactorFuelEfficiency, + DeconstructorSpeed, + FabricationSpeed } [Flags] @@ -145,8 +186,8 @@ namespace Barotrauma GainSkillPastMaximum = 0x80, RetainExperienceForNewCharacter = 0x100, AllowSecondOrderedTarget = 0x200, - PowerfulCPR = 0x400, - AlwaysStayConscious = 0x800, + AlwaysStayConscious = 0x400, + CanNotDieToAfflictions = 0x800, } [Flags] diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/NPCChangeTeamAction.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/NPCChangeTeamAction.cs index 143563584..1db3cdd56 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/NPCChangeTeamAction.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/NPCChangeTeamAction.cs @@ -1,4 +1,5 @@ using Barotrauma.Networking; +using System; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; @@ -21,7 +22,14 @@ namespace Barotrauma private bool isFinished = false; - public NPCChangeTeamAction(ScriptedEvent parentEvent, ContentXElement element) : base(parentEvent, element) { } + public NPCChangeTeamAction(ScriptedEvent parentEvent, ContentXElement element) : base(parentEvent, element) + { + var enums = Enum.GetValues(typeof(CharacterTeamType)).Cast(); + if (!enums.Contains(TeamTag)) + { + DebugConsole.ThrowError($"Error in {nameof(NPCChangeTeamAction)} in the event {ParentEvent.Prefab.Identifier}. \"{TeamTag}\" is not a valid Team ID. Valid values are {string.Join(',', Enum.GetNames(typeof(CharacterTeamType)))}."); + } + } private List affectedNpcs = null; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/SpawnAction.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/SpawnAction.cs index 657c6af21..77661bdbc 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/SpawnAction.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/SpawnAction.cs @@ -139,7 +139,7 @@ namespace Barotrauma humanPrefab.GiveItems(newCharacter, newCharacter.Submarine); if (LootingIsStealing) { - foreach (Item item in newCharacter.Inventory.AllItems) + foreach (Item item in newCharacter.Inventory.FindAllItems(recursive: true)) { item.SpawnedInCurrentOutpost = true; item.AllowStealing = false; @@ -257,21 +257,11 @@ namespace Barotrauma { if (!SpawnPointTag.IsEmpty) { - List potentialItems = SpawnLocation switch - { - SpawnLocationType.MainSub => Item.ItemList.FindAll(it => it.Submarine == Submarine.MainSub), - SpawnLocationType.MainPath => Item.ItemList.FindAll(it => it.Submarine == null), - SpawnLocationType.Outpost => Item.ItemList.FindAll(it => it.Submarine?.Info != null && it.Submarine.Info.IsOutpost), - SpawnLocationType.Wreck => Item.ItemList.FindAll(it => it.Submarine?.Info != null && it.Submarine.Info.IsWreck), - SpawnLocationType.Ruin => Item.ItemList.FindAll(it => it.Submarine?.Info != null && it.Submarine.Info.IsRuin), - SpawnLocationType.BeaconStation => Item.ItemList.FindAll(it => it.Submarine?.Info != null && it.Submarine.Info.IsBeacon), - _ => throw new NotImplementedException() - }; - + List potentialItems = Item.ItemList.FindAll(it => IsValidSubmarineType(SpawnLocation, it.Submarine)); var item = potentialItems.Where(it => it.HasTag(SpawnPointTag)).GetRandomUnsynced(); if (item != null) { return item; } - var target = ParentEvent.GetTargets(SpawnPointTag).GetRandomUnsynced(); + var target = ParentEvent.GetTargets(SpawnPointTag).Where(t => IsValidSubmarineType(SpawnLocation, t.Submarine)).GetRandomUnsynced(); if (target != null) { return target; } } @@ -281,19 +271,25 @@ namespace Barotrauma return GetSpawnPos(SpawnLocation, spawnPointType, targetModuleTags, SpawnPointTag.ToEnumerable(), requireTaggedSpawnPoint: RequireSpawnPointTag); } + private static bool IsValidSubmarineType(SpawnLocationType spawnLocation, Submarine submarine) + { + return spawnLocation switch + { + SpawnLocationType.MainSub => submarine == Submarine.MainSub, + SpawnLocationType.MainPath => submarine == null, + SpawnLocationType.Outpost => submarine is { Info: { IsOutpost: true } }, + SpawnLocationType.Wreck => submarine is { Info: { IsWreck: true } }, + SpawnLocationType.Ruin => submarine is { Info: { IsRuin: true } }, + SpawnLocationType.BeaconStation => submarine?.Info?.BeaconStationInfo != null, + _ => throw new NotImplementedException(), + }; + } + public static WayPoint GetSpawnPos(SpawnLocationType spawnLocation, SpawnType? spawnPointType, IEnumerable moduleFlags = null, IEnumerable spawnpointTags = null, bool asFarAsPossibleFromAirlock = false, bool requireTaggedSpawnPoint = false) { - List potentialSpawnPoints = spawnLocation switch - { - SpawnLocationType.MainSub => WayPoint.WayPointList.FindAll(wp => wp.Submarine == Submarine.MainSub && wp.CurrentHull != null), - SpawnLocationType.MainPath => WayPoint.WayPointList.FindAll(wp => wp.Submarine == null), - SpawnLocationType.Outpost => WayPoint.WayPointList.FindAll(wp => wp.Submarine?.Info != null && wp.CurrentHull != null && wp.Submarine.Info.IsOutpost), - SpawnLocationType.Wreck => WayPoint.WayPointList.FindAll(wp => wp.Submarine?.Info != null && wp.Submarine.Info.IsWreck), - SpawnLocationType.Ruin => WayPoint.WayPointList.FindAll(wp => wp.Submarine?.Info != null && wp.Submarine.Info.IsRuin), - SpawnLocationType.BeaconStation => WayPoint.WayPointList.FindAll(wp => wp.Submarine?.Info != null && wp.Submarine.Info.IsBeacon), - _ => throw new NotImplementedException() - }; - + bool requireHull = spawnLocation == SpawnLocationType.MainSub || spawnLocation == SpawnLocationType.Outpost; + List potentialSpawnPoints = WayPoint.WayPointList.FindAll(wp => IsValidSubmarineType(spawnLocation, wp.Submarine) && (wp.CurrentHull != null || !requireHull)); + potentialSpawnPoints = potentialSpawnPoints.FindAll(wp => wp.ConnectedDoor == null && wp.Ladders == null && !wp.isObstructed); if (moduleFlags != null && moduleFlags.Any()) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/EventSet.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/EventSet.cs index 9b397d4be..cd6a3cae6 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/EventSet.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/EventSet.cs @@ -273,13 +273,13 @@ namespace Barotrauma IsCampaignSet = element.GetAttributeBool("campaign", LevelType == LevelData.LevelType.Outpost || (parentSet?.IsCampaignSet ?? false)); ResetTime = element.GetAttributeFloat("resettime", 0); - DefaultCommonness = 1.0f; + DefaultCommonness = element.GetAttributeFloat("commonness", 1.0f); foreach (var subElement in element.Elements()) { switch (subElement.Name.ToString().ToLowerInvariant()) { case "commonness": - DefaultCommonness = subElement.GetAttributeFloat("commonness", 0.0f); + DefaultCommonness = subElement.GetAttributeFloat("commonness", DefaultCommonness); foreach (XElement overrideElement in subElement.Elements()) { if (overrideElement.NameAsIdentifier() == "override") diff --git a/Barotrauma/BarotraumaShared/SharedSource/GameSession/AutoItemPlacer.cs b/Barotrauma/BarotraumaShared/SharedSource/GameSession/AutoItemPlacer.cs index 4d06bc9a9..4347b8687 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/GameSession/AutoItemPlacer.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/GameSession/AutoItemPlacer.cs @@ -163,6 +163,7 @@ namespace Barotrauma { if (!subs.Contains(item.Submarine)) { continue; } if (item.GetRootInventoryOwner() is Character) { continue; } + if (item.NonInteractable) { continue; } containers.AddRange(item.GetComponents()); } containers.Shuffle(Rand.RandSync.ServerAndClient); diff --git a/Barotrauma/BarotraumaShared/SharedSource/GameSession/CargoManager.cs b/Barotrauma/BarotraumaShared/SharedSource/GameSession/CargoManager.cs index 6fa21d9ae..edcf1532a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/GameSession/CargoManager.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/GameSession/CargoManager.cs @@ -158,6 +158,16 @@ namespace Barotrauma this.campaign = campaign; } + public static bool HasUnlockedStoreItem(ItemPrefab prefab) + { + foreach (Character character in GameSession.GetSessionCrewCharacters(CharacterType.Both)) + { + if (character.HasStoreAccessForItem(prefab)) { return true; } + } + + return false; + } + private List GetItems(Identifier identifier, Dictionary> items, bool create = false) { if (items.TryGetValue(identifier, out var storeSpecificItems) && storeSpecificItems != null) diff --git a/Barotrauma/BarotraumaShared/SharedSource/GameSession/Data/Factions.cs b/Barotrauma/BarotraumaShared/SharedSource/GameSession/Data/Factions.cs index 581566f00..76ba0fc8b 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/GameSession/Data/Factions.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/GameSession/Data/Factions.cs @@ -1,6 +1,7 @@ #nullable enable using Microsoft.Xna.Framework; using System; +using System.Linq; namespace Barotrauma { @@ -14,6 +15,13 @@ namespace Barotrauma Prefab = prefab; Reputation = new Reputation(metadata, this, prefab.MinReputation, prefab.MaxReputation, prefab.InitialReputation); } + + public bool IsAffiliated() + { + if (GameMain.GameSession?.Campaign?.Factions.MaxBy(static f => f.Reputation.Value) is not { } highestFaction) { return false; } + + return highestFaction.Reputation.Value < 0 || Prefab.Identifier == highestFaction.Prefab.Identifier; + } } internal class FactionPrefab : Prefab diff --git a/Barotrauma/BarotraumaShared/SharedSource/GameSession/Data/Reputation.cs b/Barotrauma/BarotraumaShared/SharedSource/GameSession/Data/Reputation.cs index fe45446d3..ed89cf0c7 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/GameSession/Data/Reputation.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/GameSession/Data/Reputation.cs @@ -70,6 +70,15 @@ namespace Barotrauma } reputationChange *= reputationGainMultiplier; } + else if (reputationChange < 0f) + { + float reputationLossMultiplier = 1f; + foreach (Character character in GameSession.GetSessionCrewCharacters(CharacterType.Both)) + { + reputationLossMultiplier += character.GetStatValue(StatTypes.ReputationLossMultiplier); + } + reputationChange *= reputationLossMultiplier; + } Value += reputationChange; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/CampaignMode.cs b/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/CampaignMode.cs index b6868a586..4409e74f7 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/CampaignMode.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/CampaignMode.cs @@ -139,6 +139,15 @@ namespace Barotrauma public virtual bool PurchasedLostShuttles { get; set; } public virtual bool PurchasedItemRepairs { get; set; } + private static bool AnyOneAllowedToManageCampaign(ClientPermissions permissions) + { + if (GameMain.NetworkMember == null) { return true; } + //allow managing if no-one with permissions is alive + return + GameMain.NetworkMember.ConnectedClients.Count == 1 || + GameMain.NetworkMember.ConnectedClients.None(c => c.InGame && c.Character is { IsIncapacitated: false, IsDead: false } && (IsOwner(c) || c.HasPermission(permissions))); + } + protected CampaignMode(GameModePreset preset, CampaignSettings settings) : base(preset) { @@ -156,7 +165,7 @@ namespace Barotrauma { if (!(e.ChangedData.BalanceChanged is Some { Value: var changed })) { return; } - if (changed != 0) { return; } + if (changed == 0) { return; } bool isGain = changed > 0; Color clr = isGain ? GUIStyle.Yellow : GUIStyle.Red; @@ -211,7 +220,7 @@ namespace Barotrauma return Level.Loaded?.StartLocation ?? Map.CurrentLocation; } - public List GetSubsToLeaveBehind(Submarine leavingSub) + public static List GetSubsToLeaveBehind(Submarine leavingSub) { //leave subs behind if they're not docked to the leaving sub and not at the same exit return Submarine.Loaded.FindAll(sub => @@ -266,7 +275,7 @@ namespace Barotrauma wasDocked = Level.Loaded.StartOutpost != null && connectedSubs.Contains(Level.Loaded.StartOutpost); } - public int GetHullRepairCost() + public static int GetHullRepairCost() { float totalDamage = 0; foreach (Structure wall in Structure.WallList) @@ -283,7 +292,7 @@ namespace Barotrauma return (int)Math.Min(totalDamage * HullRepairCostPerDamage, MaxHullRepairCost); } - public int GetItemRepairCost() + public static int GetItemRepairCost() { float totalRepairDuration = 0.0f; foreach (Item item in Item.ItemList) @@ -551,7 +560,7 @@ namespace Barotrauma /// /// Which submarine is at a position where it can leave the level and enter another one (if any). /// - private Submarine GetLeavingSub() + private static Submarine GetLeavingSub() { if (Level.IsLoadedOutpost) { @@ -1025,7 +1034,7 @@ namespace Barotrauma } } - protected void LeaveUnconnectedSubs(Submarine leavingSub) + protected static void LeaveUnconnectedSubs(Submarine leavingSub) { if (leavingSub != Submarine.MainSub && !leavingSub.DockedTo.Contains(Submarine.MainSub)) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/CampaignSettings.cs b/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/CampaignSettings.cs index 1d96fa2fa..15c864bd7 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/CampaignSettings.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/CampaignSettings.cs @@ -2,6 +2,7 @@ using Microsoft.Xna.Framework; using System.Collections.Generic; +using System.Linq; using System.Xml.Linq; namespace Barotrauma @@ -103,12 +104,7 @@ namespace Barotrauma private static int GetAddedMissionCount() { - int count = 0; - foreach (Character character in GameSession.GetSessionCrewCharacters(CharacterType.Both)) - { - count += (int)character.GetStatValue(StatTypes.ExtraMissionCount); - } - return count; + return GameSession.GetSessionCrewCharacters(CharacterType.Both).Max(static character => (int)character.GetStatValue(StatTypes.ExtraMissionCount)); } } } \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameSession.cs b/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameSession.cs index 1b56b6f5c..26bb6fc58 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameSession.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameSession.cs @@ -756,7 +756,7 @@ namespace Barotrauma /// public static ImmutableHashSet GetSessionCrewCharacters(CharacterType type) { - if (!(GameMain.GameSession.CrewManager is { } crewManager)) { return ImmutableHashSet.Empty; } + if (GameMain.GameSession.CrewManager is not { } crewManager) { return ImmutableHashSet.Empty; } IEnumerable players; IEnumerable bots; @@ -766,8 +766,8 @@ namespace Barotrauma players = GameMain.Server.ConnectedClients.Select(c => c.Character).Where(c => c?.Info != null && !c.IsDead); bots = crewManager.GetCharacters().Where(c => !c.IsRemotePlayer); #elif CLIENT - players = crewManager.GetCharacters().Where(c => c.IsPlayer); - bots = crewManager.GetCharacters().Where(c => c.IsBot); + players = crewManager.GetCharacters().Where(static c => c.IsPlayer); + bots = crewManager.GetCharacters().Where(static c => c.IsBot); #endif if (type.HasFlag(CharacterType.Bot)) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/GameSession/UpgradeManager.cs b/Barotrauma/BarotraumaShared/SharedSource/GameSession/UpgradeManager.cs index a35b86654..e4c16b822 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/GameSession/UpgradeManager.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/GameSession/UpgradeManager.cs @@ -177,12 +177,13 @@ namespace Barotrauma return; } - int price = prefab.Price.GetBuyprice(GetUpgradeLevel(prefab, category), Campaign.Map?.CurrentLocation); + int price = prefab.Price.GetBuyPrice(GetUpgradeLevel(prefab, category), Campaign.Map?.CurrentLocation); int currentLevel = GetUpgradeLevel(prefab, category); - if (currentLevel + 1 > prefab.MaxLevel) + int maxLevel = prefab.GetMaxLevelForCurrentSub(); + if (currentLevel + 1 > maxLevel) { - DebugConsole.ThrowError($"Tried to purchase \"{prefab.Name}\" over the max level! ({currentLevel + 1} > {prefab.MaxLevel}). The transaction has been cancelled."); + DebugConsole.ThrowError($"Tried to purchase \"{prefab.Name}\" over the max level! ({currentLevel + 1} > {maxLevel}). The transaction has been cancelled."); return; } @@ -206,7 +207,7 @@ namespace Barotrauma price = 0; } - if (Campaign.TryPurchase(client, price)) + if (force || Campaign.TryPurchase(client, price)) { if (GameMain.NetworkMember == null || GameMain.NetworkMember.IsServer) { @@ -472,7 +473,7 @@ namespace Barotrauma { int newLevel = BuyUpgrade(prefab, category, Submarine.MainSub, level); DebugConsole.Log($" - {category.Identifier}.{prefab.Identifier} lvl. {level}, new: ({newLevel})"); - SetUpgradeLevel(prefab, category, Math.Clamp(GetRealUpgradeLevel(prefab, category) + level, 0, prefab.MaxLevel)); + SetUpgradeLevel(prefab, category, GetRealUpgradeLevel(prefab, category) + level); } PendingUpgrades.Clear(); @@ -652,16 +653,13 @@ namespace Barotrauma /// /// Gets the progress that is shown on the store interface. - /// Includes values stored in the metadata and + /// Includes values stored in the metadata and , and takes submarine tier and class restrictions into account /// - /// - /// - /// public int GetUpgradeLevel(UpgradePrefab prefab, UpgradeCategory category) { if (!Metadata.HasKey(FormatIdentifier(prefab, category))) { return GetPendingLevel(); } - return GetRealUpgradeLevel(prefab, category) + GetPendingLevel(); + return Math.Min(GetRealUpgradeLevel(prefab, category) + GetPendingLevel(), prefab.GetMaxLevelForCurrentSub()); int GetPendingLevel() { @@ -671,11 +669,8 @@ namespace Barotrauma } /// - /// Gets the level of the upgrade that is stored in the metadata. + /// Gets the level of the upgrade that is stored in the metadata. May be higher than the apparent level on the current sub if the player has switched to a lower-tier sub /// - /// - /// - /// public int GetRealUpgradeLevel(UpgradePrefab prefab, UpgradeCategory category) { return !Metadata.HasKey(FormatIdentifier(prefab, category)) ? 0 : Metadata.GetInt(FormatIdentifier(prefab, category), 0); @@ -684,9 +679,6 @@ namespace Barotrauma /// /// Stores the target upgrade level in the campaign metadata. /// - /// - /// - /// private void SetUpgradeLevel(UpgradePrefab prefab, UpgradeCategory category, int level) { Metadata.SetValue(FormatIdentifier(prefab, category), level); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/DockingPort.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/DockingPort.cs index 8ef6c05ad..40585fad2 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/DockingPort.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/DockingPort.cs @@ -1164,11 +1164,14 @@ namespace Barotrauma.Items.Components public override void ReceiveSignal(Signal signal, Connection connection) { #if CLIENT - if (GameMain.NetworkMember != null && GameMain.NetworkMember.IsClient && - !(GameMain.GameSession?.Campaign?.AllowedToManageCampaign(ClientPermissions.ManageMap) ?? false)) + if (GameMain.NetworkMember != null && GameMain.NetworkMember.IsClient) { return; } + if (GameMain.GameSession?.Campaign != null && !CampaignMode.AllowedToManageCampaign(ClientPermissions.ManageMap)) + { + return; + } #endif if (dockingCooldown > 0.0f) { return; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ElectricalDischarger.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ElectricalDischarger.cs index 8188d52c9..c6b403f9e 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ElectricalDischarger.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ElectricalDischarger.cs @@ -1,4 +1,5 @@ using Barotrauma.Networking; +using FarseerPhysics; using Microsoft.Xna.Framework; using System; using System.Collections.Generic; @@ -63,6 +64,9 @@ namespace Barotrauma.Items.Components set; } + [Serialize(0.0f, IsPropertySaveable.No)] + public float RaycastRange { get; set; } + [Serialize(0.25f, IsPropertySaveable.Yes, description: "The duration of an individual discharge (in seconds)."), Editable(MinValueFloat = 0.0f, MaxValueFloat = 60.0f, ValueStep = 0.1f, DecimalCount = 2)] public float Duration { @@ -70,6 +74,13 @@ namespace Barotrauma.Items.Components set; } + [Serialize(0.25f, IsPropertySaveable.Yes), Editable(MinValueFloat = 0.0f, MaxValueFloat = 60.0f, ValueStep = 0.1f, DecimalCount = 2)] + public float Reload + { + get; + set; + } + [Serialize(false, IsPropertySaveable.Yes, "If set to true, the discharge cannot travel inside the submarine nor shock anyone inside."), Editable] public bool OutdoorsOnly { @@ -77,6 +88,13 @@ namespace Barotrauma.Items.Components set; } + [Serialize(false, IsPropertySaveable.Yes)] + public bool IgnoreUser + { + get; + set; + } + private readonly List nodes = new List(); public IEnumerable Nodes { @@ -91,6 +109,10 @@ namespace Barotrauma.Items.Components private readonly Attack attack; + private Character user; + + private float reloadTimer; + public ElectricalDischarger(Item item, ContentXElement element) : base(item, element) { @@ -125,6 +147,7 @@ namespace Barotrauma.Items.Components charging = true; timer = Duration; IsActive = true; + user = character; #if SERVER if (GameMain.Server != null) { item.CreateServerEvent(this); } #endif @@ -144,6 +167,11 @@ namespace Barotrauma.Items.Components if (timer <= 0.0f) { + if (reloadTimer > 0.0f) + { + reloadTimer -= deltaTime; + return; + } IsActive = false; return; } @@ -196,6 +224,7 @@ namespace Barotrauma.Items.Components private void Discharge() { + reloadTimer = Reload; ApplyStatusEffects(ActionType.OnUse, 1.0f); FindNodes(item.WorldPosition, Range); if (attack != null) @@ -203,7 +232,7 @@ namespace Barotrauma.Items.Components foreach ((Character character, Node node) in charactersInRange) { if (character == null || character.Removed) { continue; } - character.ApplyAttack(null, node.WorldPosition, attack, MathHelper.Clamp(Voltage, 1.0f, MaxOverVoltageFactor)); + character.ApplyAttack(user, node.WorldPosition, attack, MathHelper.Clamp(Voltage, 1.0f, MaxOverVoltageFactor)); } } DischargeProjSpecific(); @@ -214,6 +243,18 @@ namespace Barotrauma.Items.Components public void FindNodes(Vector2 worldPosition, float range) { + if (RaycastRange > 0.0f) + { + float angle = 0.0f; + float dir = 1; + if (item.body != null) + { + angle += item.body.Rotation; + dir = item.body.Dir; + } + worldPosition += new Vector2((float)Math.Cos(angle), (float)Math.Sin(angle)) * RaycastRange * dir; + } + //see which submarines are within range so we can skip structures that are in far-away subs List submarinesInRange = new List(); foreach (Submarine sub in Submarine.Loaded) @@ -222,7 +263,7 @@ namespace Barotrauma.Items.Components { submarinesInRange.Add(sub); } - else + else if (sub != null) { Rectangle subBorders = new Rectangle( sub.Borders.X - (int)range, sub.Borders.Y + (int)range, @@ -263,26 +304,41 @@ namespace Barotrauma.Items.Components entitiesInRange.Add(structure); } + + nodes.Clear(); + if (RaycastRange > 0.0f) + { + nodes.Add(new Node(item.WorldPosition, -1)); + int parentNodeIndex = 0; + AddNodesBetweenPoints(item.WorldPosition, worldPosition, 0.5f, ref parentNodeIndex); + } + else + { + nodes.Add(new Node(worldPosition, -1)); + } + + float totalRange = RaycastRange + range; foreach (Character character in Character.CharacterList) { - if (!character.Enabled) continue; - if (OutdoorsOnly && character.Submarine != null) continue; - if (character.Submarine != null && !submarinesInRange.Contains(character.Submarine)) continue; + if (!character.Enabled) { continue; } + if (IgnoreUser && character == user) { continue; } + if (OutdoorsOnly && character.Submarine != null) { continue; } + if (character.Submarine != null && !submarinesInRange.Contains(character.Submarine)) { continue; } - if (Vector2.DistanceSquared(character.WorldPosition, worldPosition) < range * range * RangeMultiplierInWalls) + if (Vector2.DistanceSquared(character.WorldPosition, worldPosition) < totalRange * totalRange * RangeMultiplierInWalls || + (RaycastRange > 0.0f && MathUtils.LineToPointDistanceSquared(worldPosition, item.WorldPosition, character.WorldPosition) < range * range * RangeMultiplierInWalls)) { entitiesInRange.Add(character); + charactersInRange.Add((character, nodes[0])); } } - nodes.Clear(); - nodes.Add(new Node(worldPosition, -1)); - FindNodes(entitiesInRange, worldPosition, 0, range); + FindNodes(entitiesInRange, worldPosition, nodes.Count - 1, range); //construct final nodes (w/ lengths and angles so they don't have to be recalculated when rendering the discharge) for (int i = 0; i < nodes.Count; i++) { - if (nodes[i].ParentIndex < 0) continue; + if (nodes[i].ParentIndex < 0) { continue; } Node parentNode = nodes[nodes[i].ParentIndex]; float length = Vector2.Distance(nodes[i].WorldPosition, parentNode.WorldPosition) * Rand.Range(1.0f, 1.25f); float angle = MathUtils.VectorToAngle(parentNode.WorldPosition - nodes[i].WorldPosition); @@ -292,7 +348,7 @@ namespace Barotrauma.Items.Components private void FindNodes(List entitiesInRange, Vector2 currPos, int parentNodeIndex, float currentRange) { - if (currentRange <= 0.0f || nodes.Count >= MaxNodes) return; + if (currentRange <= 0.0f || nodes.Count >= MaxNodes) { return; } //find the closest structure int closestIndex = -1; @@ -434,20 +490,21 @@ namespace Barotrauma.Items.Components for (int j = 0; j < entitiesInRange.Count; j++) { var otherEntity = entitiesInRange[j]; - if (!(otherEntity is Character character)) continue; - if (OutdoorsOnly && character.Submarine != null) continue; + if (otherEntity is not Character character) { continue; } + if (IgnoreUser && character == user) { continue; } + if (OutdoorsOnly && character.Submarine != null) { continue; } if (targetStructure.IsHorizontal) { - if (otherEntity.WorldPosition.X < targetStructure.WorldRect.X) continue; - if (otherEntity.WorldPosition.X > targetStructure.WorldRect.Right) continue; - if (Math.Abs(otherEntity.WorldPosition.Y - targetStructure.WorldPosition.Y) > currentRange) continue; + if (otherEntity.WorldPosition.X < targetStructure.WorldRect.X) { continue; } + if (otherEntity.WorldPosition.X > targetStructure.WorldRect.Right) { continue; } + if (Math.Abs(otherEntity.WorldPosition.Y - targetStructure.WorldPosition.Y) > currentRange) { continue; } } else { - if (otherEntity.WorldPosition.Y < targetStructure.WorldRect.Y - targetStructure.Rect.Height) continue; - if (otherEntity.WorldPosition.Y > targetStructure.WorldRect.Y) continue; - if (Math.Abs(otherEntity.WorldPosition.X - targetStructure.WorldPosition.X) > currentRange) continue; + if (otherEntity.WorldPosition.Y < targetStructure.WorldRect.Y - targetStructure.Rect.Height) { continue; } + if (otherEntity.WorldPosition.Y > targetStructure.WorldRect.Y) { continue; } + if (Math.Abs(otherEntity.WorldPosition.X - targetStructure.WorldPosition.X) > currentRange) { continue; } } float closestNodeDistSqr = float.MaxValue; int closestNodeIndex = -1; @@ -473,7 +530,10 @@ namespace Barotrauma.Items.Components AddNodesBetweenPoints(currPos, targetPos, 0.25f, ref parentNodeIndex); nodes.Add(new Node(targetPos, parentNodeIndex)); entitiesInRange.RemoveAt(closestIndex); - charactersInRange.Add((character, nodes[parentNodeIndex])); + if (!charactersInRange.Any(c => c.character == character)) + { + charactersInRange.Add((character, nodes[parentNodeIndex])); + } FindNodes(entitiesInRange, targetPos, nodes.Count - 1, currentRange); } } @@ -483,7 +543,7 @@ namespace Barotrauma.Items.Components Vector2 diff = targetPos - currPos; float dist = diff.Length(); Vector2 normal = new Vector2(-diff.Y, diff.X) / dist; - for (float x = MaxNodeDistance; x < dist - MaxNodeDistance; x += MaxNodeDistance * Rand.Range(0.5f, 1.5f)) + for (float x = MaxNodeDistance; x < dist - MaxNodeDistance; x += MaxNodeDistance * Rand.Range(0.5f, 1.0f)) { //0 at the edges, 1 at the center float normalOffset = (0.5f - Math.Abs(x / dist - 0.5f)) * 2.0f; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Holdable.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Holdable.cs index 5641b078f..aa5dc7d28 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Holdable.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Holdable.cs @@ -22,7 +22,7 @@ namespace Barotrauma.Items.Components } } - const float MaxAttachDistance = 150.0f; + private const float MaxAttachDistance = ItemPrefab.DefaultInteractDistance * 0.95f; //the position(s) in the item that the Character grabs protected Vector2[] handlePos; @@ -127,7 +127,7 @@ namespace Barotrauma.Items.Components set { attachedByDefault = value; } } - [Editable, Serialize("0.0,0.0", IsPropertySaveable.No, description: "The position the character holds the item at (in pixels, as an offset from the character's shoulder)."+ + [Serialize("0.0,0.0", IsPropertySaveable.No, description: "The position the character holds the item at (in pixels, as an offset from the character's shoulder)."+ " For example, a value of 10,-100 would make the character hold the item 100 pixels below the shoulder and 10 pixels forwards.")] public Vector2 HoldPos { @@ -143,7 +143,11 @@ namespace Barotrauma.Items.Components set { aimPos = ConvertUnits.ToSimUnits(value); } } +#if DEBUG [Editable, Serialize(0.0f, IsPropertySaveable.No, description: "The rotation at which the character holds the item (in degrees, relative to the rotation of the character's hand).")] +#else + [Serialize(0.0f, IsPropertySaveable.No)] +#endif public float HoldAngle { get { return MathHelper.ToDegrees(holdAngle); } @@ -151,23 +155,50 @@ namespace Barotrauma.Items.Components } private Vector2 swingAmount; +#if DEBUG [Editable, Serialize("0.0,0.0", IsPropertySaveable.No, description: "How much the item swings around when aiming/holding it (in pixels, as an offset from AimPos/HoldPos).")] +#else + [Serialize("0.0,0.0", IsPropertySaveable.No)] +#endif public Vector2 SwingAmount { get { return ConvertUnits.ToDisplayUnits(swingAmount); } set { swingAmount = ConvertUnits.ToSimUnits(value); } } - +#if DEBUG [Editable, Serialize(0.0f, IsPropertySaveable.No, description: "How fast the item swings around when aiming/holding it (only valid if SwingAmount is set).")] +#else + [Serialize(0.0f, IsPropertySaveable.No)] +#endif + public float SwingSpeed { get; set; } +#if DEBUG [Editable, Serialize(false, IsPropertySaveable.No, description: "Should the item swing around when it's being held.")] +#else + [Serialize(false, IsPropertySaveable.No)] +#endif public bool SwingWhenHolding { get; set; } + +#if DEBUG [Editable, Serialize(false, IsPropertySaveable.No, description: "Should the item swing around when it's being aimed.")] +#else + [Serialize(false, IsPropertySaveable.No)] +#endif public bool SwingWhenAiming { get; set; } + +#if DEBUG [Editable, Serialize(false, IsPropertySaveable.No, description: "Should the item swing around when it's being used (for example, when firing a weapon or a welding tool).")] +#else + [Serialize(false, IsPropertySaveable.No)] +#endif public bool SwingWhenUsing { get; set; } + +#if DEBUG [Editable, Serialize(false, IsPropertySaveable.No)] +#else + [Serialize(false, IsPropertySaveable.No)] +#endif public bool DisableHeadRotation { get; set; } [ConditionallyEditable(ConditionallyEditable.ConditionType.Attachable, MinValueFloat = 0.0f, MaxValueFloat = 0.999f, DecimalCount = 3), Serialize(0.55f, IsPropertySaveable.No, description: "Sprite depth that's used when the item is NOT attached to a wall.")] @@ -731,10 +762,24 @@ namespace Barotrauma.Items.Components mouseDiff = mouseDiff.ClampLength(MaxAttachDistance); Vector2 userPos = useWorldCoordinates ? user.WorldPosition : user.Position; - Vector2 attachPos = userPos + mouseDiff; - if (user.Submarine == null && Level.Loaded != null) + if (user.Submarine != null) + { + if (Submarine.PickBody( + ConvertUnits.ToSimUnits(user.Position), + ConvertUnits.ToSimUnits(user.Position + mouseDiff), collisionCategory: Physics.CollisionWall) != null) + { + attachPos = userPos + mouseDiff * Submarine.LastPickedFraction; + + //round down if we're placing on the right side and vice versa: ensures we don't round the position inside a wall + return + new Vector2( + mouseDiff.X > 0 ? (float)Math.Floor(attachPos.X / Submarine.GridSize.X) * Submarine.GridSize.X : (float)Math.Ceiling(attachPos.X / Submarine.GridSize.X) * Submarine.GridSize.X, + mouseDiff.Y > 0 ? (float)Math.Floor(attachPos.Y / Submarine.GridSize.Y) * Submarine.GridSize.X : (float)Math.Ceiling(attachPos.Y / Submarine.GridSize.Y) * Submarine.GridSize.Y); + } + } + else if (Level.Loaded != null) { bool edgeFound = false; foreach (var cell in Level.Loaded.GetCells(attachPos)) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/MeleeWeapon.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/MeleeWeapon.cs index da4e9b663..f0b500c43 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/MeleeWeapon.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/MeleeWeapon.cs @@ -112,7 +112,7 @@ namespace Barotrauma.Items.Components reloadTimer = reload; reloadTimer /= 1f + character.GetStatValue(StatTypes.MeleeAttackSpeed); reloadTimer /= 1f + item.GetQualityModifier(Quality.StatType.StrikingSpeedMultiplier); - character.AnimController.LockFlippingUntil = (float)Timing.TotalTime + reloadTimer; + character.AnimController.LockFlippingUntil = (float)Timing.TotalTime + reloadTimer * 0.9f; item.body.FarseerBody.CollisionCategories = Physics.CollisionProjectile; item.body.FarseerBody.CollidesWith = Physics.CollisionCharacter | Physics.CollisionWall | Physics.CollisionItemBlocking; @@ -421,7 +421,7 @@ namespace Barotrauma.Items.Components if (targetItem.Removed) { return; } var attackResult = Attack.DoDamage(User, targetItem, item.WorldPosition, 1.0f); #if CLIENT - if (attackResult.Damage > 0.0f) + if (attackResult.Damage > 0.0f && targetItem.Prefab.ShowHealthBar) { Character.Controlled?.UpdateHUDProgressBar(targetItem, targetItem.WorldPosition, diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/RepairTool.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/RepairTool.cs index 9986d7130..bf808c48a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/RepairTool.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/RepairTool.cs @@ -514,7 +514,7 @@ namespace Barotrauma.Items.Components if (GameMain.NetworkMember == null || GameMain.NetworkMember.IsServer) { - if (Rand.Range(0.0f, 1.0f) < FireProbability * deltaTime) + if (Rand.Range(0.0f, 1.0f) < FireProbability * deltaTime && item.CurrentHull != null) { Vector2 displayPos = ConvertUnits.ToDisplayUnits(rayStart + (rayEnd - rayStart) * lastPickedFraction * 0.9f); if (item.CurrentHull.Submarine != null) { displayPos += item.CurrentHull.Submarine.Position; } @@ -636,11 +636,14 @@ namespace Barotrauma.Items.Components float addedDetachTime = deltaTime * (1f + user.GetStatValue(StatTypes.RepairToolDeattachTimeMultiplier)) * (1f + item.GetQualityModifier(Quality.StatType.RepairToolDeattachTimeMultiplier)); levelResource.DeattachTimer += addedDetachTime; #if CLIENT - Character.Controlled?.UpdateHUDProgressBar( - this, - targetItem.WorldPosition, - levelResource.DeattachTimer / levelResource.DeattachDuration, - GUIStyle.Red, GUIStyle.Green, "progressbar.deattaching"); + if (targetItem.Prefab.ShowHealthBar) + { + Character.Controlled?.UpdateHUDProgressBar( + this, + targetItem.WorldPosition, + levelResource.DeattachTimer / levelResource.DeattachDuration, + GUIStyle.Red, GUIStyle.Green, "progressbar.deattaching"); + } #endif FixItemProjSpecific(user, deltaTime, targetItem, showProgressBar: false); return true; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ItemComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ItemComponent.cs index af53b043f..ca421f499 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ItemComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ItemComponent.cs @@ -111,6 +111,13 @@ namespace Barotrauma.Items.Components private bool drawable = true; + [Serialize(PropertyConditional.Comparison.And, IsPropertySaveable.No)] + public PropertyConditional.Comparison IsActiveConditionalComparison + { + get; + set; + } + public List IsActiveConditionals; public bool Drawable @@ -241,6 +248,18 @@ namespace Barotrauma.Items.Components [Serialize(0, IsPropertySaveable.Yes, alwaysUseInstanceValues: true)] public int ManuallySelectedSound { get; private set; } + + /// + /// Can be used by status effects or conditionals to the speed of the item + /// + public float Speed + { + get + { + return item.Speed; + } + } + public ItemComponent(Item item, ContentXElement element) { this.item = item; @@ -814,7 +833,7 @@ namespace Barotrauma.Items.Components } } - public void ApplyStatusEffects(ActionType type, float deltaTime, Character character = null, Limb targetLimb = null, Entity useTarget = null, Character user = null, Vector2? worldPosition = null, float afflictionMultiplier = 1.0f, float applyOnUserFraction = 0.0f) + public void ApplyStatusEffects(ActionType type, float deltaTime, Character character = null, Limb targetLimb = null, Entity useTarget = null, Character user = null, Vector2? worldPosition = null, float afflictionMultiplier = 1.0f) { if (statusEffectLists == null) { return; } @@ -828,11 +847,6 @@ namespace Barotrauma.Items.Components if (user != null) { effect.SetUser(user); } effect.AfflictionMultiplier = afflictionMultiplier; item.ApplyStatusEffect(effect, type, deltaTime, character, targetLimb, useTarget, isNetworkEvent: false, checkCondition: false, worldPosition); - if (user != null && applyOnUserFraction > 0.0f && effect.HasTargetType(StatusEffect.TargetType.Character)) - { - effect.AfflictionMultiplier = applyOnUserFraction; - item.ApplyStatusEffect(effect, type, deltaTime, user, targetLimb == null ? null : user.AnimController.GetLimb(targetLimb.type), useTarget, false, false, worldPosition); - } effect.AfflictionMultiplier = 1.0f; reducesCondition |= effect.ReducesItemCondition(); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Deconstructor.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Deconstructor.cs index 1de5e3c80..21179fc74 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Deconstructor.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Deconstructor.cs @@ -104,12 +104,14 @@ namespace Barotrauma.Items.Components // doesn't quite work properly, remaining time changes if tinkering stops float deconstructionSpeedModifier = userDeconstructorSpeedMultiplier * (1f + tinkeringStrength * TinkeringSpeedIncrease); + float deconstructionSpeed = item.StatManager.GetAdjustedValue(ItemTalentStats.DeconstructorSpeed, DeconstructionSpeed); + if (DeconstructItemsSimultaneously) { float deconstructTime = 0.0f; foreach (Item targetItem in inputContainer.Inventory.AllItems) { - deconstructTime += targetItem.Prefab.DeconstructTime / (DeconstructionSpeed * deconstructionSpeedModifier); + deconstructTime += targetItem.Prefab.DeconstructTime / (deconstructionSpeed * deconstructionSpeedModifier); } progressState = Math.Min(progressTimer / deconstructTime, 1.0f); @@ -139,7 +141,7 @@ namespace Barotrauma.Items.Components if (targetItem == null) { return; } var validDeconstructItems = targetItem.Prefab.DeconstructItems.Where(it => it.IsValidDeconstructor(item)).ToList(); - float deconstructTime = validDeconstructItems.Any() ? targetItem.Prefab.DeconstructTime / (DeconstructionSpeed * deconstructionSpeedModifier) : 1.0f; + float deconstructTime = validDeconstructItems.Any() ? targetItem.Prefab.DeconstructTime / (deconstructionSpeed * deconstructionSpeedModifier) : 1.0f; progressState = Math.Min(progressTimer / deconstructTime, 1.0f); if (progressTimer > deconstructTime) @@ -218,7 +220,7 @@ namespace Barotrauma.Items.Components if (percentageHealth < deconstructProduct.MinCondition || percentageHealth > deconstructProduct.MaxCondition) { return; } - if (!(MapEntityPrefab.Find(null, deconstructProduct.ItemIdentifier) is ItemPrefab itemPrefab)) + if (MapEntityPrefab.FindByIdentifier(deconstructProduct.ItemIdentifier) is not ItemPrefab itemPrefab) { DebugConsole.ThrowError("Tried to deconstruct item \"" + targetItem.Name + "\" but couldn't find item prefab \"" + deconstructProduct.ItemIdentifier + "\"!"); return; @@ -284,9 +286,10 @@ namespace Barotrauma.Items.Components { Entity.Spawner.AddItemToSpawnQueue(itemPrefab, outputContainer.Inventory, condition, onSpawned: (Item spawnedItem) => { - spawnedItem.SpawnedInCurrentOutpost = item.SpawnedInCurrentOutpost; spawnedItem.StolenDuringRound = targetItem.StolenDuringRound; spawnedItem.AllowStealing = targetItem.AllowStealing; + spawnedItem.OriginalOutpost = targetItem.OriginalOutpost; + spawnedItem.SpawnedInCurrentOutpost = targetItem.SpawnedInCurrentOutpost; for (int i = 0; i < outputContainer.Capacity; i++) { var containedItem = outputContainer.Inventory.GetItemAt(i); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Engine.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Engine.cs index 13f858f37..d6ae48ec5 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Engine.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Engine.cs @@ -30,11 +30,8 @@ namespace Barotrauma.Items.Components Serialize(500.0f, IsPropertySaveable.Yes, description: "The amount of force exerted on the submarine when the engine is operating at full power.")] public float MaxForce { - get { return maxForce; } - set - { - maxForce = Math.Max(0.0f, value); - } + get => maxForce; + set => maxForce = Math.Max(0.0f, value); } [Editable, Serialize("0.0,0.0", IsPropertySaveable.Yes, @@ -94,7 +91,7 @@ namespace Barotrauma.Items.Components } partial void InitProjSpecific(ContentXElement element); - + public override void Update(float deltaTime, Camera cam) { UpdateOnActiveEffects(deltaTime); @@ -129,12 +126,14 @@ namespace Barotrauma.Items.Components { forceMultiplier *= MathHelper.Lerp(0.5f, 2.0f, (float)Math.Sqrt(User.GetSkillLevel("helm") / 100)); } - currForce *= maxForce * forceMultiplier; - if (item.GetComponent() is Repairable repairable && repairable.IsTinkering) + currForce *= item.StatManager.GetAdjustedValue(ItemTalentStats.EngineMaxSpeed, MaxForce) * forceMultiplier; + if (item.GetComponent() is { IsTinkering: true } repairable) { currForce *= 1f + repairable.TinkeringStrength * TinkeringForceIncrease; } + currForce = item.StatManager.GetAdjustedValue(ItemTalentStats.EngineSpeed, currForce); + //less effective when in a bad condition currForce *= MathHelper.Lerp(0.5f, 2.0f, condition); if (item.Submarine.FlippedX) { currForce *= -1; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Fabricator.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Fabricator.cs index 9047d2f5e..537366213 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Fabricator.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Fabricator.cs @@ -89,7 +89,7 @@ namespace Barotrauma.Items.Components { DebugConsole.ThrowError("Error in item " + item.Name + "! Fabrication recipes should be defined in the craftable item's xml, not in the fabricator."); break; - } + } } var fabricationRecipes = new Dictionary(); @@ -104,6 +104,18 @@ namespace Barotrauma.Items.Components continue; } } + + bool recipeInvalid = false; + foreach (var requiredItem in recipe.RequiredItems) + { + if (requiredItem.ItemPrefabs.None()) + { + DebugConsole.ThrowError($"Error in the fabrication recipe for \"{itemPrefab.Name}\". Could not find the ingredient \"{requiredItem}\"."); + recipeInvalid = true; + } + } + if (recipeInvalid) { continue; } + fabricationRecipes.Add(recipe.RecipeHash, recipe); if (recipe.FabricationLimitMax >= 0) { @@ -356,9 +368,10 @@ namespace Barotrauma.Items.Components bool ingredientsStolen = false; bool ingredientsAllowStealing = true; - if (GameMain.NetworkMember == null || GameMain.NetworkMember.IsServer) + if (GameMain.NetworkMember is null || GameMain.NetworkMember.IsServer) { - fabricatedItem.RequiredItems.ForEach(requiredItem => + List foundAvailableItems = new List(); + foreach (FabricationRecipe.RequiredItem requiredItem in fabricatedItem.RequiredItems) { for (int usedPrefabsAmount = 0; usedPrefabsAmount < requiredItem.Amount; usedPrefabsAmount++) { @@ -367,10 +380,7 @@ namespace Barotrauma.Items.Components if (!availableIngredients.ContainsKey(requiredPrefab.Identifier)) { continue; } var availableItems = availableIngredients[requiredPrefab.Identifier]; - var availableItem = availableItems.FirstOrDefault(potentialPrefab => - { - return requiredItem.IsConditionSuitable(potentialPrefab.ConditionPercentage); - }); + var availableItem = availableItems.FirstOrDefault(potentialPrefab => requiredItem.IsConditionSuitable(potentialPrefab.ConditionPercentage)); if (availableItem == null) { continue; } @@ -401,13 +411,21 @@ namespace Barotrauma.Items.Components } } + foundAvailableItems.Add(availableItem); availableItems.Remove(availableItem); - Entity.Spawner.AddItemToRemoveQueue(availableItem); - inputContainer.Inventory.RemoveItem(availableItem); break; } } - }); + } + + var fabricationIngredients = new AbilityFabricationItemIngredients(foundAvailableItems); + user.CheckTalents(AbilityEffectType.OnItemFabricatedIngredients, fabricationIngredients); + + foreach (Item availableItem in fabricationIngredients.Items) + { + Entity.Spawner.AddItemToRemoveQueue(availableItem); + inputContainer.Inventory.RemoveItem(availableItem); + } int amountFittingContainer = outputContainer.Inventory.HowManyCanBePut(fabricatedItem.TargetItem, fabricatedItem.OutCondition * fabricatedItem.TargetItem.Health); @@ -535,12 +553,13 @@ namespace Barotrauma.Items.Components return currPowerConsumption; } - private int GetFabricatedItemQuality(FabricationRecipe fabricatedItem, Character user) + private static int GetFabricatedItemQuality(FabricationRecipe fabricatedItem, Character user) { - if (user == null) { return 0; } + if (user?.Info == null) { return 0; } if (fabricatedItem.TargetItem.ConfigElement.GetChildElement("Quality") == null) { return 0; } int quality = 0; float floatQuality = 0.0f; + floatQuality += user.GetStatValue(StatTypes.IncreaseFabricationQuality); foreach (var tag in fabricatedItem.TargetItem.Tags) { floatQuality += user.Info.GetSavedStatValue(StatTypes.IncreaseFabricationQuality, tag); @@ -637,9 +656,14 @@ namespace Barotrauma.Items.Components //fabricating takes 100 times longer if degree of success is close to 0 //characters with a higher skill than required can fabricate up to 100% faster - return fabricableItem.RequiredTime / FabricationSpeed / MathHelper.Clamp(t, 0.01f, 2.0f); + float time = fabricableItem.RequiredTime / item.StatManager.GetAdjustedValue(ItemTalentStats.FabricationSpeed, FabricationSpeed) / MathHelper.Clamp(t, 0.01f, 2.0f); + if (user is not null && fabricableItem.TargetItem is { } it && it.Tags.Contains("medical")) + { + time *= 1f + user.GetStatValue(StatTypes.FabricateMedicineSpeedMultiplier); + } + return time; } - + public float FabricationDegreeOfSuccess(Character character, ImmutableArray skills) { if (skills.Length == 0) { return 1.0f; } @@ -713,7 +737,14 @@ namespace Barotrauma.Items.Components { availableIngredients[itemIdentifier] = new List(itemList.Count); } - availableIngredients[itemIdentifier].Add(item); + //order by condition (prefer using worst-condition items) + int index = 0; + while (index < availableIngredients[itemIdentifier].Count && + availableIngredients[itemIdentifier][index].Condition < item.Condition) + { + index++; + } + availableIngredients[itemIdentifier].Insert(index, item); } } @@ -827,5 +858,15 @@ namespace Barotrauma.Items.Components public float Value { get; set; } public ItemPrefab ItemPrefab { get; set; } } + + internal sealed class AbilityFabricationItemIngredients : AbilityObject + { + public List Items { get; set; } + + public AbilityFabricationItemIngredients(List items) + { + Items = items; + } + } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Pump.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Pump.cs index db2eae084..923623a3e 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Pump.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Pump.cs @@ -57,8 +57,8 @@ namespace Barotrauma.Items.Components [Editable, Serialize(80.0f, IsPropertySaveable.No, description: "How fast the item pumps water in/out when operating at 100%.", alwaysUseInstanceValues: true)] public float MaxFlow { - get { return maxFlow; } - set { maxFlow = value; } + get => maxFlow; + set => maxFlow = value; } [Editable, Serialize(true, IsPropertySaveable.Yes, alwaysUseInstanceValues: true)] @@ -92,13 +92,16 @@ namespace Barotrauma.Items.Components } partial void InitProjSpecific(ContentXElement element); - + public override void Update(float deltaTime, Camera cam) { pumpSpeedLockTimer -= deltaTime; isActiveLockTimer -= deltaTime; - if (!IsActive) { return; } + if (!IsActive) + { + return; + } currFlow = 0.0f; @@ -122,7 +125,10 @@ namespace Barotrauma.Items.Components FlowPercentage = ((float)TargetLevel - hullPercentage) * 10.0f; } - if (!HasPower) { return; } + if (!HasPower) + { + return; + } UpdateProjSpecific(deltaTime); @@ -132,13 +138,15 @@ namespace Barotrauma.Items.Components float powerFactor = Math.Min(currPowerConsumption <= 0.0f || MinVoltage <= 0.0f ? 1.0f : Voltage, MaxOverVoltageFactor); - currFlow = flowPercentage / 100.0f * maxFlow * powerFactor; + currFlow = flowPercentage / 100.0f * item.StatManager.GetAdjustedValue(ItemTalentStats.PumpMaxFlow, MaxFlow) * powerFactor; - if (item.GetComponent() is Repairable repairable && repairable.IsTinkering) + if (item.GetComponent() is { IsTinkering: true } repairable) { currFlow *= 1f + repairable.TinkeringStrength * TinkeringSpeedIncrease; } + currFlow = item.StatManager.GetAdjustedValue(ItemTalentStats.PumpSpeed, currFlow); + //less effective when in a bad condition currFlow *= MathHelper.Lerp(0.5f, 1.0f, item.Condition / item.MaxCondition); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Reactor.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Reactor.cs index 4630a0bf2..8a70da4c7 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Reactor.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Reactor.cs @@ -83,19 +83,24 @@ namespace Barotrauma.Items.Components { if (lastUser == value) { return; } lastUser = value; - degreeOfSuccess = lastUser == null ? 0.0f : Math.Min(DegreeOfSuccess(lastUser), 1.0f); - LastUserWasPlayer = lastUser.IsPlayer; + if (lastUser == null) + { + degreeOfSuccess = 0.0f; + LastUserWasPlayer = false; + } + else + { + degreeOfSuccess = Math.Min(DegreeOfSuccess(lastUser), 1.0f); + LastUserWasPlayer = lastUser.IsPlayer; + } } } - + [Editable(0.0f, float.MaxValue), Serialize(10000.0f, IsPropertySaveable.Yes, description: "How much power (kW) the reactor generates when operating at full capacity.", alwaysUseInstanceValues: true)] public float MaxPowerOutput { - get { return maxPowerOutput; } - set - { - maxPowerOutput = Math.Max(0.0f, value); - } + get => maxPowerOutput; + set => maxPowerOutput = Math.Max(0.0f, value); } [Editable(0.0f, float.MaxValue), Serialize(120.0f, IsPropertySaveable.Yes, description: "How long the temperature has to stay critical until a meltdown occurs.")] @@ -144,11 +149,11 @@ namespace Barotrauma.Items.Components turbineOutput = MathHelper.Clamp(value, 0.0f, 100.0f); } } - + [Serialize(0.2f, IsPropertySaveable.Yes, description: "How fast the condition of the contained fuel rods deteriorates per second."), Editable(0.0f, 1000.0f, decimals: 3)] public float FuelConsumptionRate { - get { return fuelConsumptionRate; } + get => fuelConsumptionRate; set { if (!MathUtils.IsValid(value)) return; @@ -248,6 +253,8 @@ namespace Barotrauma.Items.Components } #endif + float maxPowerOut = GetMaxOutput(); + if (signalControlledTargetFissionRate.HasValue && lastReceivedFissionRateSignalTime > Timing.TotalTime - 1) { TargetFissionRate = adjustValueWithoutOverShooting(TargetFissionRate, signalControlledTargetFissionRate.Value, deltaTime * 5.0f); @@ -281,9 +288,9 @@ namespace Barotrauma.Items.Components //use a smoothed "correct output" instead of the actual correct output based on the load //so the player doesn't have to keep adjusting the rate impossibly fast when the load fluctuates heavily - if (!MathUtils.NearlyEqual(MaxPowerOutput, 0.0f)) + if (!MathUtils.NearlyEqual(maxPowerOut, 0.0f)) { - CorrectTurbineOutput += MathHelper.Clamp((Load / MaxPowerOutput * 100.0f) - CorrectTurbineOutput, -20.0f, 20.0f) * deltaTime; + CorrectTurbineOutput += MathHelper.Clamp((Load / maxPowerOut * 100.0f) - CorrectTurbineOutput, -20.0f, 20.0f) * deltaTime; } //calculate tolerances of the meters based on the skills of the user @@ -342,7 +349,7 @@ namespace Barotrauma.Items.Components if (!isConnectedToFriendlyOutpost) { - item.Condition -= fissionRate / 100.0f * fuelConsumptionRate * deltaTime; + item.Condition -= fissionRate / 100.0f * GetFuelConsumption() * deltaTime; } } fuelLeft += item.ConditionPercentage; @@ -351,10 +358,10 @@ namespace Barotrauma.Items.Components if (fissionRate > 0.0f) { - if (item.AiTarget != null && MaxPowerOutput > 0) + if (item.AiTarget != null && maxPowerOut > 0) { var aiTarget = item.AiTarget; - float range = Math.Abs(currPowerConsumption) / MaxPowerOutput; + float range = Math.Abs(currPowerConsumption) / maxPowerOut; aiTarget.SoundRange = MathHelper.Lerp(aiTarget.MinSoundRange, aiTarget.MaxSoundRange, range); if (item.CurrentHull != null) { @@ -425,15 +432,17 @@ namespace Barotrauma.Items.Components tolerance = 3f; } + float maxPowerOut = GetMaxOutput(); + float temperatureFactor = Math.Min(temperature / 50.0f, 1.0f); - float minOutput = MaxPowerOutput * Math.Clamp(Math.Min((turbineOutput - tolerance) / 100.0f, temperatureFactor), 0, 1); - float maxOutput = MaxPowerOutput * Math.Min((turbineOutput + tolerance) / 100.0f, temperatureFactor); + float minOutput = maxPowerOut * Math.Clamp(Math.Min((turbineOutput - tolerance) / 100.0f, temperatureFactor), 0, 1); + float maxOutput = maxPowerOut * Math.Min((turbineOutput + tolerance) / 100.0f, temperatureFactor); minUpdatePowerOut = minOutput; maxUpdatePowerOut = maxOutput; - float reactorMax = PowerOn ? MaxPowerOutput : maxUpdatePowerOut; - + float reactorMax = PowerOn ? maxPowerOut : maxUpdatePowerOut; + return new PowerRange(minOutput, maxOutput, reactorMax); } @@ -456,11 +465,13 @@ namespace Barotrauma.Items.Components float output = MathHelper.Clamp(ratio * (maxUpdatePowerOut - minUpdatePowerOut) + minUpdatePowerOut, minUpdatePowerOut, maxUpdatePowerOut); float newLoad = loadLeft; + float maxOutput = GetMaxOutput(); + //Adjust behaviour for multi reactor setup - if (MaxPowerOutput != minMaxPower.ReactorMaxOutput) + if (maxOutput != minMaxPower.ReactorMaxOutput) { - float idealLoad = MaxPowerOutput / minMaxPower.ReactorMaxOutput * loadLeft; - float loadAdjust = MathHelper.Clamp((ratio - 0.5f) * 25 + idealLoad - (turbineOutput / 100 * MaxPowerOutput), -MaxPowerOutput / 100, MaxPowerOutput / 100); + float idealLoad = maxOutput / minMaxPower.ReactorMaxOutput * loadLeft; + float loadAdjust = MathHelper.Clamp((ratio - 0.5f) * 25 + idealLoad - (turbineOutput / 100 * maxOutput), -maxOutput / 100, maxOutput / 100); newLoad = MathHelper.Clamp(loadLeft - (expectedPower - output) + loadAdjust, 0, loadLeft); } @@ -501,7 +512,7 @@ namespace Barotrauma.Items.Components //calculate the maximum output if the fission rate is cranked as high as it goes and turbine output is at max float theoreticalMaxHeat = GetGeneratedHeat(fissionRate: maxFissionRate); float temperatureFactor = Math.Min(theoreticalMaxHeat / 50.0f, 1.0f); - float theoreticalMaxOutput = Math.Min(maxTurbineOutput / 100.0f, temperatureFactor) * MaxPowerOutput; + float theoreticalMaxOutput = Math.Min(maxTurbineOutput / 100.0f, temperatureFactor) * GetMaxOutput(); //maximum output not enough, we need more fuel return theoreticalMaxOutput < Load * minimumOutputRatio; @@ -685,7 +696,7 @@ namespace Barotrauma.Items.Components aiUpdateTimer = AIUpdateInterval; // load more fuel if the current maximum output is only 50% of the current load // or if the fuel rod is (almost) deplenished - float minCondition = fuelConsumptionRate * MathUtils.Pow2((degreeOfSuccess - refuelLimit) * 2); + float minCondition = GetFuelConsumption() * MathUtils.Pow2((degreeOfSuccess - refuelLimit) * 2); if (NeedMoreFuel(minimumOutputRatio: 0.5f, minCondition: minCondition)) { bool outOfFuel = false; @@ -863,5 +874,8 @@ namespace Barotrauma.Items.Components if (GameMain.NetworkMember is { IsServer: true }) { unsentChanges = true; } } } + + private float GetMaxOutput() => item.StatManager.GetAdjustedValue(ItemTalentStats.ReactorMaxOutput, MaxPowerOutput); + private float GetFuelConsumption() => item.StatManager.GetAdjustedValue(ItemTalentStats.ReactorFuelEfficiency, fuelConsumptionRate); } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Sonar.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Sonar.cs index 077ae053f..6e727c30d 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Sonar.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Sonar.cs @@ -153,13 +153,6 @@ namespace Barotrauma.Items.Components bool changed = currentMode != value; currentMode = value; - if (value == Mode.Passive) - { - if (item.AiTarget != null) - { - item.AiTarget.SectorDegrees = 360.0f; - } - } #if CLIENT if (changed) { prevPassivePingRadius = float.MaxValue; } UpdateGUIElements(); @@ -204,15 +197,13 @@ namespace Barotrauma.Items.Components if (currentPingIndex != -1) { var activePing = activePings[currentPingIndex]; + if (item.AiTarget != null) + { + float range = MathUtils.InverseLerp(item.AiTarget.MinSoundRange, item.AiTarget.MaxSoundRange, Range * activePing.State / zoom); + item.AiTarget.SoundRange = MathHelper.Lerp(item.AiTarget.MinSoundRange, item.AiTarget.MaxSoundRange, range); + } if (activePing.State > 1.0f) { - if (item.AiTarget != null) - { - float range = MathUtils.InverseLerp(item.AiTarget.MinSoundRange, item.AiTarget.MaxSoundRange, Range * activePing.State / zoom); - item.AiTarget.SoundRange = MathHelper.Lerp(item.AiTarget.MinSoundRange, item.AiTarget.MaxSoundRange, range); - item.AiTarget.SectorDegrees = activePing.IsDirectional ? DirectionalPingSector : 360.0f; - item.AiTarget.SectorDir = new Vector2(pingDirection.X, -pingDirection.Y); - } aiPingCheckPending = true; currentPingIndex = -1; } @@ -228,15 +219,16 @@ namespace Barotrauma.Items.Components activePings[currentPingIndex].Direction = pingDirection; activePings[currentPingIndex].State = 0.0f; activePings[currentPingIndex].PrevPingRadius = 0.0f; + if (item.AiTarget != null) + { + item.AiTarget.SectorDegrees = useDirectionalPing ? DirectionalPingSector : 360.0f; + item.AiTarget.SectorDir = new Vector2(pingDirection.X, -pingDirection.Y); + } item.Use(deltaTime); } } else { - if (item.AiTarget != null) - { - item.AiTarget.SectorDegrees = 360.0f; - } aiPingCheckPending = false; } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Power/PowerContainer.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Power/PowerContainer.cs index 67c2f4a94..b1ce29df7 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Power/PowerContainer.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Power/PowerContainer.cs @@ -65,7 +65,7 @@ namespace Barotrauma.Items.Components [Editable, Serialize(10.0f, IsPropertySaveable.Yes, description: "The maximum capacity of the device (kW * min). For example, a value of 1000 means the device can output 100 kilowatts of power for 10 minutes, or 1000 kilowatts for 1 minute.")] public float Capacity { - get { return capacity; } + get => capacity; set { capacity = Math.Max(value, 1.0f); } } @@ -89,7 +89,7 @@ namespace Barotrauma.Items.Components } } - public float ChargePercentage => MathUtils.Percentage(Charge, Capacity); + public float ChargePercentage => MathUtils.Percentage(Charge, GetCapacity()); [Editable, Serialize(10.0f, IsPropertySaveable.Yes, description: "How fast the device can be recharged. For example, a recharge speed of 100 kW and a capacity of 1000 kW*min would mean it takes 10 minutes to fully charge the device.")] public float MaxRechargeSpeed @@ -125,10 +125,19 @@ namespace Barotrauma.Items.Components set { efficiency = MathHelper.Clamp(value, 0.0f, 1.0f); } } + private bool flipIndicator; + [Editable, Serialize(false, IsPropertySaveable.Yes, description: "Should the progress bar indicating the charge be flipped to fill from the other side.")] + public bool FlipIndicator + { + get { return flipIndicator; } + set { flipIndicator = value; } + } + public float RechargeRatio => RechargeSpeed / MaxRechargeSpeed; public const float aiRechargeTargetRatio = 0.5f; private bool isRunning; + public bool HasBeenTuned { get; private set; } public PowerContainer(Item item, ContentXElement element) @@ -146,7 +155,7 @@ namespace Barotrauma.Items.Components return picker != null; } - public override void Update(float deltaTime, Camera cam) + public override void Update(float deltaTime, Camera cam) { if (item.Connections == null) { @@ -283,7 +292,7 @@ namespace Barotrauma.Items.Components else { //Decrease charge based on how much power is leaving the device - Charge = Math.Clamp(Charge - CurrPowerOutput / 60 * UpdateInterval, 0, Capacity); + Charge = Math.Clamp(Charge - CurrPowerOutput / 60 * UpdateInterval, 0, GetCapacity()); prevCharge = Charge; } } @@ -370,5 +379,7 @@ namespace Barotrauma.Items.Components } } } + + public float GetCapacity() => item.StatManager.GetAdjustedValue(ItemTalentStats.BatteryCapacity, Capacity); } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Projectile.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Projectile.cs index b2d26005a..a56e5afde 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Projectile.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Projectile.cs @@ -736,6 +736,7 @@ namespace Barotrauma.Items.Components { return false; } + if (target.IsSensor) { return false; } if (hits.Contains(target.Body)) { return false; } if (target.Body.UserData is Submarine) { @@ -881,7 +882,7 @@ namespace Barotrauma.Items.Components { attackResult = Attack.DoDamage(User ?? Attacker, targetItem, item.WorldPosition, 1.0f); #if CLIENT - if (attackResult.Damage > 0.0f) + if (attackResult.Damage > 0.0f && targetItem.Prefab.ShowHealthBar) { Character.Controlled?.UpdateHUDProgressBar(targetItem, targetItem.WorldPosition, diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Repairable.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Repairable.cs index e486300c6..e5604f449 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Repairable.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Repairable.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Xml.Linq; +using Barotrauma.Abilities; namespace Barotrauma.Items.Components { @@ -420,7 +421,8 @@ namespace Barotrauma.Items.Components if (item.ConditionPercentage > MinDeteriorationCondition) { - item.Condition -= DeteriorationSpeed * deltaTime; + float deteriorationSpeed = item.StatManager.GetAdjustedValue(ItemTalentStats.DetoriationSpeed, DeteriorationSpeed); + item.Condition -= deteriorationSpeed * deltaTime; } } return; @@ -467,8 +469,14 @@ namespace Barotrauma.Items.Components wasGoodCondition = true; } + float talentMultiplier = CurrentFixer.GetStatValue(StatTypes.RepairSpeed); + if (requiredSkills.Any(static skill => skill.Identifier == "mechanical")) + { + talentMultiplier += CurrentFixer.GetStatValue(StatTypes.MechanicalRepairSpeed); + } + float fixDuration = MathHelper.Lerp(FixDurationLowSkill, FixDurationHighSkill, successFactor); - fixDuration /= 1 + CurrentFixer.GetStatValue(StatTypes.RepairSpeed) + currentRepairItem?.Prefab.AddedRepairSpeedMultiplier ?? 0f; + fixDuration /= 1 + talentMultiplier + currentRepairItem?.Prefab.AddedRepairSpeedMultiplier ?? 0f; fixDuration /= 1 + item.GetQualityModifier(Quality.StatType.RepairSpeed); item.MaxRepairConditionMultiplier = GetMaxRepairConditionMultiplier(CurrentFixer); @@ -500,7 +508,7 @@ namespace Barotrauma.Items.Components SkillSettings.Current.SkillIncreasePerRepair / Math.Max(characterSkillLevel, 1.0f)); } SteamAchievementManager.OnItemRepaired(item, CurrentFixer); - CurrentFixer.CheckTalents(AbilityEffectType.OnRepairComplete); + CurrentFixer.CheckTalents(AbilityEffectType.OnRepairComplete, new AbilityRepairable(item)); } if (CurrentFixer?.SelectedItem == item) { CurrentFixer.SelectedItem = null; } deteriorationTimer = Rand.Range(MinDeteriorationDelay, MaxDeteriorationDelay); @@ -687,4 +695,14 @@ namespace Barotrauma.Items.Components //where set_active/set_state signals can disable the component } } + + internal sealed class AbilityRepairable : AbilityObject, IAbilityItem + { + public Item Item { get; set; } + + public AbilityRepairable(Item item) + { + Item = item; + } + } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Wearable.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Wearable.cs index 57b4dc685..67084c123 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Wearable.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Wearable.cs @@ -270,6 +270,9 @@ namespace Barotrauma.Items.Components public bool AutoEquipWhenFull { get; private set; } public bool DisplayContainedStatus { get; private set; } + [Serialize(false, IsPropertySaveable.No, description: "Can the item be used (assuming it has components that are usable in some way) when worn."), Editable(MinValueFloat = -1000.0f, MaxValueFloat = 1000.0f)] + public bool AllowUseWhenWorn { get; set; } + public readonly int Variants; private int variant; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Inventory.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Inventory.cs index afb94878c..2a9d2ff17 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Inventory.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Inventory.cs @@ -226,6 +226,14 @@ namespace Barotrauma { foreach (var item in slots[i].Items) { + if (item == null) + { +#if DEBUG + DebugConsole.ThrowError($"Null item in inventory {Owner.ToString() ?? "null"}, slot {i}!"); +#endif + continue; + } + bool duplicateFound = false; for (int j = 0; j < i; j++) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Item.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Item.cs index 8181756f4..8902fd99e 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Item.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Item.cs @@ -424,6 +424,39 @@ namespace Barotrauma public Color? HighlightColor; + /// + /// Can be used by status effects or conditionals to check whether the item is contained inside something + /// + public bool IsContained + { + get + { + return parentInventory != null; + } + } + + /// + /// Can be used by status effects or conditionals to the speed of the item + /// + public float Speed + { + get + { + if (body != null && body.PhysEnabled) + { + return body.LinearVelocity.Length(); + } + else if (ParentInventory?.Owner is Character character) + { + return character.AnimController.MainLimb.LinearVelocity.Length(); + } + else if (container != null) + { + return container.Speed; + } + return 0.0f; + } + } [Serialize("", IsPropertySaveable.Yes)] @@ -821,6 +854,16 @@ namespace Barotrauma public bool IsSecondaryItem { get; } + private ItemStatManager statManager; + public ItemStatManager StatManager + { + get + { + statManager ??= new ItemStatManager(this); + return statManager; + } + } + public Item(ItemPrefab itemPrefab, Vector2 position, Submarine submarine, ushort id = Entity.NullEntityID, bool callOnItemLoaded = true) : this(new Rectangle( (int)(position.X - itemPrefab.Sprite.size.X / 2 * itemPrefab.Scale), @@ -1837,16 +1880,32 @@ namespace Barotrauma if (ic.IsActiveConditionals != null) { - bool shouldBeActive = true; - foreach (var conditional in ic.IsActiveConditionals) + if (ic.IsActiveConditionalComparison == PropertyConditional.Comparison.And) { - if (!ConditionalMatches(conditional)) + bool shouldBeActive = true; + foreach (var conditional in ic.IsActiveConditionals) { - shouldBeActive = false; - break; + if (!ConditionalMatches(conditional)) + { + shouldBeActive = false; + break; + } } + ic.IsActive = shouldBeActive; + } + else + { + bool shouldBeActive = false; + foreach (var conditional in ic.IsActiveConditionals) + { + if (ConditionalMatches(conditional)) + { + shouldBeActive = true; + break; + } + } + ic.IsActive = shouldBeActive; } - ic.IsActive = shouldBeActive; } #if CLIENT if (ic.HasSounds) @@ -2072,7 +2131,7 @@ namespace Barotrauma } //no need to apply buoyancy if the item is still and not light enough to float - if (moving || body.Density < 10.0f) + if (moving || body.Density <= 10.0f) { Vector2 buoyancy = -GameMain.World.Gravity * forceFactor * volume * Physics.NeutralDensity; body.ApplyForce(buoyancy); @@ -2699,8 +2758,6 @@ namespace Barotrauma } #endif - float applyOnSelfFraction = user?.GetStatValue(StatTypes.ApplyTreatmentsOnSelfFraction) ?? 0.0f; - bool remove = false; foreach (ItemComponent ic in components) { @@ -2713,19 +2770,7 @@ namespace Barotrauma ic.PlaySound(actionType, user); #endif ic.WasUsed = true; - ic.ApplyStatusEffects(actionType, 1.0f, character, targetLimb, user: user, applyOnUserFraction: applyOnSelfFraction); - - if (applyOnSelfFraction > 0.0f) - { - //hacky af - ic.statusEffectLists.TryGetValue(actionType, out var effectList); - if (effectList != null) - { - effectList.ForEach(e => e.AfflictionMultiplier = applyOnSelfFraction); - ic.ApplyStatusEffects(actionType, 1.0f, user, targetLimb == null ? null : user.AnimController.GetLimb(targetLimb.type), user: user); - effectList.ForEach(e => e.AfflictionMultiplier = 1.0f); - } - } + ic.ApplyStatusEffects(actionType, 1.0f, character, targetLimb, user: user); if (GameMain.NetworkMember is { IsServer: true }) { @@ -2866,15 +2911,20 @@ namespace Barotrauma //to ensure client/server doesn't get any properties mixed up if there's some conditions that can vary between the server and the clients var allProperties = inGameEditableOnly ? GetInGameEditableProperties(ignoreConditions: true) : GetProperties(); SerializableProperty property = extraData.SerializableProperty; + ISerializableEntity entity = extraData.Entity; if (property != null) { - var propertyOwner = allProperties.Find(p => p.property == property); if (allProperties.Count > 1) { - msg.WriteByte((byte)allProperties.FindIndex(p => p.property == property)); + int propertyIndex = allProperties.FindIndex(p => p.property == property && p.obj == entity); + if (propertyIndex < -1) + { + throw new Exception($"Could not find the property \"{property.Name}\" in \"{entity.Name ?? "null"}\""); + } + msg.WriteVariableUInt32((uint)propertyIndex); } - object value = property.GetValue(propertyOwner.obj); + object value = property.GetValue(entity); if (value is string stringVal) { msg.WriteString(stringVal); @@ -2979,7 +3029,7 @@ namespace Barotrauma int propertyIndex = 0; if (allProperties.Count > 1) { - propertyIndex = msg.ReadByte(); + propertyIndex = (int)msg.ReadVariableUInt32(); } bool allowEditing = true; @@ -3119,14 +3169,14 @@ namespace Barotrauma } logPropertyChangeCoroutine = CoroutineManager.Invoke(() => { - GameServer.Log($"{sender.Character.Name} set the value \"{property.Name}\" of the item \"{Name}\" to \"{logValue}\".", ServerLog.MessageType.ItemInteraction); + GameServer.Log($"{sender.Character?.Name ?? sender.Name} set the value \"{property.Name}\" of the item \"{Name}\" to \"{logValue}\".", ServerLog.MessageType.ItemInteraction); }, delay: 1.0f); } #endif - if (GameMain.NetworkMember is { IsServer: true }) + if (GameMain.NetworkMember is { IsServer: true } && parentObject is ISerializableEntity entity) { - GameMain.NetworkMember.CreateEntityEvent(this, new ChangePropertyEventData(property)); + GameMain.NetworkMember.CreateEntityEvent(this, new ChangePropertyEventData(property, entity)); } } @@ -3230,7 +3280,7 @@ namespace Barotrauma { if (!(property.GetValue(item)?.Equals(prevValue) ?? true)) { - GameMain.NetworkMember.CreateEntityEvent(item, new ChangePropertyEventData(property)); + GameMain.NetworkMember.CreateEntityEvent(item, new ChangePropertyEventData(property, item)); } } } @@ -3349,8 +3399,24 @@ namespace Barotrauma item.PurchasedNewSwap = false; } - item.condition = element.GetAttributeFloat("condition", item.condition); - item.condition = MathHelper.Clamp(item.condition, 0, item.MaxCondition); + if (element.GetAttribute("conditionpercentage") != null) + { + item.condition = element.GetAttributeFloat("conditionpercentage", 100.0f) / 100.0f * item.MaxCondition; + } + else + { + //backwards compatibility + item.condition = element.GetAttributeFloat("condition", item.condition); + //if the item was in full condition considering the unmodified health + //(not taking possible HealthMultipliers added by mods into account), + //make sure it stays in full condition + bool wasFullCondition = item.condition >= item.Prefab.Health; + if (wasFullCondition) + { + item.condition = item.MaxCondition; + } + item.condition = MathHelper.Clamp(item.condition, 0, item.MaxCondition); + } item.lastSentCondition = item.condition; item.RecalculateConditionValues(); item.SetActiveSprite(); @@ -3370,6 +3436,7 @@ namespace Barotrauma foreach (ItemComponent component in item.components) { + if (component.Parent != null) { component.IsActive = component.Parent.IsActive; } component.OnItemLoaded(); } @@ -3401,11 +3468,6 @@ namespace Barotrauma element.Add(new XAttribute("availableswaps", string.Join(',', AvailableSwaps.Select(s => s.Identifier)))); } - if (condition < MaxCondition) - { - element.Add(new XAttribute("condition", condition.ToString("G", CultureInfo.InvariantCulture))); - } - if (!MathUtils.NearlyEqual(healthMultiplier, 1.0f)) { element.Add(new XAttribute("healthmultiplier", HealthMultiplier.ToString("G", CultureInfo.InvariantCulture))); @@ -3442,6 +3504,16 @@ namespace Barotrauma upgrade.Save(element); } + if (condition < MaxCondition) + { + element.Add(new XAttribute("conditionpercentage", ConditionPercentage.ToString("G", CultureInfo.InvariantCulture))); + } + else + { + var conditionAttribute = element.GetAttribute("condition"); + if (conditionAttribute != null) { conditionAttribute.Remove(); } + } + parentElement.Add(element); return element; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/ItemEventData.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/ItemEventData.cs index e0c65a747..77b03826f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/ItemEventData.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/ItemEventData.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using Barotrauma.Items.Components; using Barotrauma.Networking; using Microsoft.Xna.Framework; @@ -18,9 +19,10 @@ namespace Barotrauma AssignCampaignInteraction = 6, ApplyStatusEffect = 7, Upgrade = 8, + ItemStat = 9, MinValue = 0, - MaxValue = 6 + MaxValue = 9 } public interface IEventData : NetEntityEvent.IData @@ -56,10 +58,24 @@ namespace Barotrauma { public EventType EventType => EventType.ChangeProperty; public readonly SerializableProperty SerializableProperty; + public readonly ISerializableEntity Entity; - public ChangePropertyEventData(SerializableProperty serializableProperty) + public ChangePropertyEventData(SerializableProperty serializableProperty, ISerializableEntity entity) { SerializableProperty = serializableProperty; + Entity = entity; + } + } + + public readonly struct SetItemStatEventData : IEventData + { + public EventType EventType => EventType.ItemStat; + + public readonly Dictionary Stats; + + public SetItemStatEventData(Dictionary stats) + { + Stats = stats; } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/ItemPrefab.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/ItemPrefab.cs index 59ee01824..478b231fa 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/ItemPrefab.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/ItemPrefab.cs @@ -47,8 +47,8 @@ namespace Barotrauma CopyCondition = element.GetAttributeBool("copycondition", false); Commonness = element.GetAttributeFloat("commonness", 1.0f); RequiredDeconstructor = element.GetAttributeStringArray("requireddeconstructor", - element.Parent?.GetAttributeStringArray("requireddeconstructor", new string[0]) ?? new string[0]); - RequiredOtherItem = element.GetAttributeStringArray("requiredotheritem", new string[0]); + element.Parent?.GetAttributeStringArray("requireddeconstructor", Array.Empty()) ?? Array.Empty()); + RequiredOtherItem = element.GetAttributeStringArray("requiredotheritem", Array.Empty()); ActivateButtonText = element.GetAttributeString("activatebuttontext", string.Empty); InfoText = element.GetAttributeString("infotext", string.Empty); InfoTextOnOtherItemMissing = element.GetAttributeString("infotextonotheritemmissing", string.Empty); @@ -102,12 +102,13 @@ namespace Barotrauma { public readonly Identifier ItemPrefabIdentifier; - public ItemPrefab ItemPrefab => ItemPrefab.Prefabs.TryGet(ItemPrefabIdentifier, out var prefab) ? prefab - : MapEntityPrefab.FindByName(ItemPrefabIdentifier.Value) as ItemPrefab ?? throw new Exception($"No ItemPrefab with identifier or name \"{ItemPrefabIdentifier}\""); + public ItemPrefab ItemPrefab => + ItemPrefab.Prefabs.TryGet(ItemPrefabIdentifier, out var prefab) ? prefab + : MapEntityPrefab.FindByName(ItemPrefabIdentifier.Value) as ItemPrefab; public override UInt32 UintIdentifier { get; } - public override IEnumerable ItemPrefabs => ItemPrefab.ToEnumerable(); + public override IEnumerable ItemPrefabs => ItemPrefab == null ? Enumerable.Empty() : ItemPrefab.ToEnumerable(); public override ItemPrefab FirstMatchingPrefab => ItemPrefab; @@ -122,6 +123,11 @@ namespace Barotrauma using MD5 md5 = MD5.Create(); UintIdentifier = ToolBox.IdentifierToUint32Hash(itemPrefab, md5); } + + public override string ToString() + { + return $"{base.ToString()} ({ItemPrefabIdentifier})"; + } } public class RequiredItemByTag : RequiredItem @@ -146,6 +152,11 @@ namespace Barotrauma using MD5 md5 = MD5.Create(); UintIdentifier = ToolBox.IdentifierToUint32Hash(tag, md5); } + + public override string ToString() + { + return $"{base.ToString()} ({Tag})"; + } } public readonly Identifier TargetItemPrefabIdentifier; @@ -390,6 +401,8 @@ namespace Barotrauma { public static readonly PrefabCollection Prefabs = new PrefabCollection(); + public const float DefaultInteractDistance = 120.0f; + //default size public Vector2 Size { get; private set; } @@ -410,7 +423,6 @@ namespace Barotrauma public ImmutableArray Triggers { get; private set; } private ImmutableDictionary treatmentSuitability; - private readonly List fabricationRecipeElements = new List(); /// /// Is this prefab overriding a prefab in another content package @@ -590,7 +602,7 @@ namespace Barotrauma public override ImmutableHashSet Aliases => aliases; //how close the Character has to be to the item to pick it up - [Serialize(120.0f, IsPropertySaveable.No)] + [Serialize(DefaultInteractDistance, IsPropertySaveable.No)] public float InteractDistance { get; private set; } // this can be used to allow items which are behind other items tp @@ -752,6 +764,9 @@ namespace Barotrauma [Serialize(false, IsPropertySaveable.No)] public bool DontTransferBetweenSubs { get; private set; } + [Serialize(true, IsPropertySaveable.No)] + public bool ShowHealthBar { get; private set; } + protected override Identifier DetermineIdentifier(XElement element) { Identifier identifier = base.DetermineIdentifier(element); @@ -1143,7 +1158,7 @@ namespace Barotrauma public bool CanBeBoughtFrom(Location.StoreInfo store, out PriceInfo priceInfo) { priceInfo = GetPriceInfo(store); - return priceInfo != null && priceInfo.CanBeBought && (store.Location?.LevelData?.Difficulty ?? 0) >= priceInfo.MinLevelDifficulty; + return priceInfo is { CanBeBought: true } && (store.Location?.LevelData?.Difficulty ?? 0) >= priceInfo.MinLevelDifficulty; } public bool CanBeBoughtFrom(Location location) @@ -1240,13 +1255,12 @@ namespace Barotrauma throw new ArgumentException("Both name and identifier cannot be null."); } - ItemPrefab prefab; if (identifier.IsEmpty) { //legacy support identifier = GenerateLegacyIdentifier(name); } - Prefabs.TryGet(identifier, out prefab); + Prefabs.TryGet(identifier, out ItemPrefab prefab); //not found, see if we can find a prefab with a matching alias if (prefab == null && !string.IsNullOrEmpty(name)) @@ -1294,8 +1308,8 @@ namespace Barotrauma return PreferredContainers.Any(pc => IsItemConditionAcceptable(item, pc) && IsContainerPreferred(pc.Secondary, identifiersOrTags)); } - private bool IsItemConditionAcceptable(Item item, PreferredContainer pc) => item.ConditionPercentage >= pc.MinCondition && item.ConditionPercentage <= pc.MaxCondition; - private bool CanBeTransferred(Identifier item, PreferredContainer pc, ItemContainer targetContainer) => + private static bool IsItemConditionAcceptable(Item item, PreferredContainer pc) => item.ConditionPercentage >= pc.MinCondition && item.ConditionPercentage <= pc.MaxCondition; + private static bool CanBeTransferred(Identifier item, PreferredContainer pc, ItemContainer targetContainer) => pc.AllowTransfersHere && (!pc.TransferOnlyOnePerContainer || targetContainer.Inventory.AllItems.None(i => i.Prefab.Identifier == item)); public static bool IsContainerPreferred(IEnumerable preferences, ItemContainer c) => preferences.Any(id => c.Item.Prefab.Identifier == id || c.Item.HasTag(id)); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/ItemStatManager.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/ItemStatManager.cs new file mode 100644 index 000000000..4ad18a238 --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/ItemStatManager.cs @@ -0,0 +1,64 @@ +#nullable enable + +using System; +using System.Collections.Generic; + +namespace Barotrauma +{ + internal sealed class ItemStatManager + { + private Item item; + + public ItemStatManager(Item item) + { + this.item = item; + } + + [NetworkSerialize] + public readonly record struct TalentStatIdentifier(ItemTalentStats Stat, Identifier TalentIdentifier, UInt32 CharacterID) : INetSerializableStruct + { + public override int GetHashCode() => HashCode.Combine(TalentIdentifier, CharacterID, Stat); + } + + private readonly Dictionary talentStats = new(); + + public void ApplyStat(ItemTalentStats stat, float value, CharacterTalent talent) + { + if (talent.Character?.ID is not { } characterId || + talent.Prefab?.Identifier is not { } talentIdentifier) + { + return; + } + + TalentStatIdentifier identifier = new TalentStatIdentifier(stat, talentIdentifier, characterId); + talentStats[identifier] = value; + +#if SERVER + if (GameMain.NetworkMember is { IsServer: true } server) + { + server.CreateEntityEvent(item, new Item.SetItemStatEventData(talentStats)); + } +#endif + } + + // Used for getting the value value from network packet + public void ApplyStat(TalentStatIdentifier identifier, float value) + { + talentStats[identifier] = value; + } + + public float GetAdjustedValue(ItemTalentStats stat, float originalValue) + { + float total = originalValue; + foreach (var (key, value) in talentStats) + { + if (key.Stat == stat) + { + total *= value; + } + } + + return total; + } + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/RelatedItem.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/RelatedItem.cs index 04351e385..26b7d6e00 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/RelatedItem.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/RelatedItem.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; using System.Xml.Linq; +using Barotrauma.Extensions; namespace Barotrauma { @@ -21,6 +22,8 @@ namespace Barotrauma public bool MatchOnEmpty { get; set; } + public bool RequireEmpty { get; set; } + public bool IgnoreInEditor { get; set; } private ImmutableHashSet excludedIdentifiers; @@ -133,40 +136,52 @@ namespace Barotrauma if (parentItem == null) { return false; } return CheckContained(parentItem); case RelationType.Container: - if (parentItem == null || parentItem.Container == null) { return MatchOnEmpty; } - return (!ExcludeBroken || parentItem.Container.Condition > 0.0f) && (!ExcludeFullCondition || !parentItem.Container.IsFullCondition) && MatchesItem(parentItem.Container); + if (parentItem == null || parentItem.Container == null) { return MatchOnEmpty || RequireEmpty; } + return CheckItem(parentItem.Container, this); case RelationType.Equipped: if (character == null) { return false; } - if (MatchOnEmpty && !character.HeldItems.Any()) { return true; } - foreach (Item equippedItem in character.HeldItems) + var heldItems = character.HeldItems; + if ((RequireEmpty || MatchOnEmpty) && heldItems.None()) { return true; } + foreach (Item equippedItem in heldItems) { if (equippedItem == null) { continue; } - if ((!ExcludeBroken || equippedItem.Condition > 0.0f) && (!ExcludeFullCondition || !equippedItem.IsFullCondition) && MatchesItem(equippedItem)) { return true; } + if (CheckItem(equippedItem, this)) + { + if (RequireEmpty && equippedItem.Condition > 0) { return false; } + return true; + } } break; case RelationType.Picked: - if (character == null || character.Inventory == null) { return false; } - foreach (Item pickedItem in character.Inventory.AllItems) + if (character == null) { return false; } + if (character.Inventory == null) { return MatchOnEmpty || RequireEmpty; } + var allItems = character.Inventory.AllItems; + if ((RequireEmpty || MatchOnEmpty) && allItems.None()) { return true; } + foreach (Item pickedItem in allItems) { - if (MatchesItem(pickedItem)) { return true; } + if (pickedItem == null) { continue; } + if (CheckItem(pickedItem, this)) + { + if (RequireEmpty && pickedItem.Condition > 0) { return false; } + return true; + } } break; default: return true; } + static bool CheckItem(Item i, RelatedItem ri) => (!ri.ExcludeBroken || ri.RequireEmpty || i.Condition > 0.0f) && (!ri.ExcludeFullCondition || !i.IsFullCondition) && ri.MatchesItem(i); + return false; } private bool CheckContained(Item parentItem) { if (parentItem.OwnInventory == null) { return false; } - - if (MatchOnEmpty && parentItem.OwnInventory.IsEmpty()) - { - return true; - } - + bool isEmpty = parentItem.OwnInventory.IsEmpty(); + if (RequireEmpty && !isEmpty) { return false; } + if (MatchOnEmpty && isEmpty) { return true; } foreach (Item contained in parentItem.ContainedItems) { if (TargetSlot > -1 && parentItem.OwnInventory.FindIndex(contained) != TargetSlot) { continue; } @@ -184,6 +199,7 @@ namespace Barotrauma new XAttribute("optional", IsOptional), new XAttribute("ignoreineditor", IgnoreInEditor), new XAttribute("excludebroken", ExcludeBroken), + new XAttribute("requireempty", RequireEmpty), new XAttribute("excludefullcondition", ExcludeFullCondition), new XAttribute("targetslot", TargetSlot), new XAttribute("allowvariants", AllowVariants)); @@ -249,6 +265,7 @@ namespace Barotrauma RelatedItem ri = new RelatedItem(identifiers, excludedIdentifiers) { ExcludeBroken = element.GetAttributeBool("excludebroken", true), + RequireEmpty = element.GetAttributeBool("requireempty", false), ExcludeFullCondition = element.GetAttributeBool("excludefullcondition", false), AllowVariants = element.GetAttributeBool("allowvariants", true) }; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Creatures/BallastFloraBehavior.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Creatures/BallastFloraBehavior.cs index 8eabe4b03..0770ba69f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Creatures/BallastFloraBehavior.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Creatures/BallastFloraBehavior.cs @@ -1026,7 +1026,7 @@ namespace Barotrauma.MapCreatures.Behavior branch.DamageVisualizationTimer = 1.0f; } - if (branch.IsRootGrowth && root != null && root.Health > 0.0f) { return; } + if (branch.IsRootGrowth && root is { Health: > 0.0f }) { return; } if (type != AttackType.Other && type != AttackType.CutFromRoot) { @@ -1035,7 +1035,7 @@ namespace Barotrauma.MapCreatures.Behavior } if (GameMain.NetworkMember != null) - { + { // damage is handled server side if (GameMain.NetworkMember.IsClient) { @@ -1059,6 +1059,11 @@ namespace Barotrauma.MapCreatures.Behavior if (type == AttackType.Fire) { + if (attacker is not null) + { + damage *= 1f + attacker.GetStatValue(StatTypes.BallastFloraDamageMultiplier); + } + if (IsInWater(branch)) { damage *= 1f - SubmergedWaterResistance; @@ -1066,7 +1071,7 @@ namespace Barotrauma.MapCreatures.Behavior if (defenseCooldown <= 0) { - if (!(StateMachine.State is DefendWithPumpState)) + if (StateMachine.State is not DefendWithPumpState) { StateMachine.EnterState(new DefendWithPumpState(branch, ClaimedTargets, attacker)); defenseCooldown = 180f; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Explosion.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Explosion.cs index 329102f51..58f800b98 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Explosion.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Explosion.cs @@ -1,13 +1,12 @@ -using Barotrauma.Items.Components; +using Barotrauma.Extensions; +using Barotrauma.Items.Components; +using Barotrauma.MapCreatures.Behavior; using Barotrauma.Networking; using FarseerPhysics; using Microsoft.Xna.Framework; using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; -using Barotrauma.Extensions; -using Barotrauma.MapCreatures.Behavior; namespace Barotrauma { @@ -131,17 +130,23 @@ namespace Barotrauma if (damageSource is Item sourceItem) { var launcher = sourceItem.GetComponent()?.Launcher; - displayRange *= - 1.0f - + sourceItem.GetQualityModifier(Quality.StatType.ExplosionRadius) + displayRange *= + 1.0f + + sourceItem.GetQualityModifier(Quality.StatType.ExplosionRadius) + (launcher?.GetQualityModifier(Quality.StatType.ExplosionRadius) ?? 0); - Attack.DamageMultiplier *= - 1.0f + Attack.DamageMultiplier *= + 1.0f + sourceItem.GetQualityModifier(Quality.StatType.ExplosionDamage) + (launcher?.GetQualityModifier(Quality.StatType.ExplosionDamage) ?? 0); Attack.SourceItem ??= sourceItem; } + if (attacker is not null) + { + displayRange *= 1f + attacker.GetStatValue(StatTypes.ExplosionRadiusMultiplier); + Attack.DamageMultiplier *= 1f + attacker.GetStatValue(StatTypes.ExplosionDamageMultiplier); + } + Vector2 cameraPos = GameMain.GameScreen.Cam.Position; float cameraDist = Vector2.Distance(cameraPos, worldPosition) / 2.0f; GameMain.GameScreen.Cam.Shake = cameraShake * Math.Max((cameraShakeRange - cameraDist) / cameraShakeRange, 0.0f); @@ -187,7 +192,7 @@ namespace Barotrauma var powerContainer = item.GetComponent(); if (powerContainer != null) { - powerContainer.Charge -= powerContainer.Capacity * EmpStrength * distFactor; + powerContainer.Charge -= powerContainer.GetCapacity() * EmpStrength * distFactor; } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Level.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Level.cs index 508032303..433b711a2 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Level.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Level.cs @@ -3015,6 +3015,7 @@ namespace Barotrauma var selectedLocation = allValidLocations.FirstOrDefault(l => Vector2.Distance(l.Edge.Point1, l.Edge.Point2) is float edgeLength && !l.Edge.OutsideLevel && + ((l.Edge.Cell1?.IsDestructible ?? false) || (l.Edge.Cell2?.IsDestructible ?? false)) && requiredAmount <= (int)Math.Floor(edgeLength / ((1.0f - maxResourceOverlap) * prefab.Size.X))); @@ -3905,7 +3906,7 @@ namespace Barotrauma private bool HasEndOutpost() { - if (preSelectedStartOutpost != null) { return true; } + if (preSelectedEndOutpost != null) { return true; } //don't create an end outpost for locations if (LevelData.Type == LevelData.LevelType.Outpost) { return false; } if (EndLocation != null && !EndLocation.Type.HasOutpost) { return false; } @@ -4323,6 +4324,10 @@ namespace Barotrauma sp = corpsePoints.FirstOrDefault(sp => sp.AssignedJob == null) ?? pathPoints.FirstOrDefault(sp => sp.AssignedJob == null); // Deduce the job from the selected prefab selectedPrefab = GetCorpsePrefab(usedJobs); + if (selectedPrefab != null) + { + job = selectedPrefab.GetJobPrefab(); + } } } if (selectedPrefab == null) { continue; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/LevelObjects/LevelObjectManager.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/LevelObjects/LevelObjectManager.cs index 8e30125de..5b9d587fc 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/LevelObjects/LevelObjectManager.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/LevelObjects/LevelObjectManager.cs @@ -542,38 +542,41 @@ namespace Barotrauma GlobalForceDecreaseTimer = 0.0f; } - foreach (LevelObject obj in updateableObjects) + if (updateableObjects is not null) { - if (GameMain.NetworkMember is { IsServer: true }) + foreach (LevelObject obj in updateableObjects) { - obj.NetworkUpdateTimer -= deltaTime; - if (obj.NeedsNetworkSyncing && obj.NetworkUpdateTimer <= 0.0f) + if (GameMain.NetworkMember is { IsServer: true }) { - GameMain.NetworkMember.CreateEntityEvent(this, new EventData(obj)); - obj.NeedsNetworkSyncing = false; - obj.NetworkUpdateTimer = NetConfig.LevelObjectUpdateInterval; - } - } - if (obj.Prefab.HideWhenBroken && obj.Health <= 0.0f) { continue; } - - if (obj.Triggers != null) - { - obj.ActivePrefab = obj.Prefab; - for (int i = 0; i < obj.Triggers.Count; i++) - { - obj.Triggers[i].Update(deltaTime); - if (obj.Triggers[i].IsTriggered && obj.Prefab.OverrideProperties[i] != null) + obj.NetworkUpdateTimer -= deltaTime; + if (obj.NeedsNetworkSyncing && obj.NetworkUpdateTimer <= 0.0f) { - obj.ActivePrefab = obj.Prefab.OverrideProperties[i]; + GameMain.NetworkMember.CreateEntityEvent(this, new EventData(obj)); + obj.NeedsNetworkSyncing = false; + obj.NetworkUpdateTimer = NetConfig.LevelObjectUpdateInterval; } } - } + if (obj.Prefab.HideWhenBroken && obj.Health <= 0.0f) { continue; } - if (obj.PhysicsBody != null) - { - if (obj.Prefab.PhysicsBodyTriggerIndex > -1) { obj.PhysicsBody.Enabled = obj.Triggers[obj.Prefab.PhysicsBodyTriggerIndex].IsTriggered; } - /*obj.Position = new Vector3(obj.PhysicsBody.Position, obj.Position.Z); - obj.Rotation = -obj.PhysicsBody.Rotation;*/ + if (obj.Triggers != null) + { + obj.ActivePrefab = obj.Prefab; + for (int i = 0; i < obj.Triggers.Count; i++) + { + obj.Triggers[i].Update(deltaTime); + if (obj.Triggers[i].IsTriggered && obj.Prefab.OverrideProperties[i] != null) + { + obj.ActivePrefab = obj.Prefab.OverrideProperties[i]; + } + } + } + + if (obj.PhysicsBody != null) + { + if (obj.Prefab.PhysicsBodyTriggerIndex > -1) { obj.PhysicsBody.Enabled = obj.Triggers[obj.Prefab.PhysicsBodyTriggerIndex].IsTriggered; } + /*obj.Position = new Vector3(obj.PhysicsBody.Position, obj.Position.Z); + obj.Rotation = -obj.PhysicsBody.Rotation;*/ + } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Map/Location.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Map/Location.cs index cb1861ec7..80b11198b 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Map/Location.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Map/Location.cs @@ -135,7 +135,7 @@ namespace Barotrauma foreach (var stockElement in storeElement.GetChildElements("stock")) { var identifier = stockElement.GetAttributeIdentifier("id", Identifier.Empty); - if (identifier.IsEmpty || !(ItemPrefab.FindByIdentifier(identifier) is ItemPrefab prefab)) { continue; } + if (identifier.IsEmpty || ItemPrefab.FindByIdentifier(identifier) is not ItemPrefab prefab) { continue; } int qty = stockElement.GetAttributeInt("qty", 0); if (qty < 1) { continue; } Stock.Add(new PurchasedItem(prefab, qty, buyer: null)); @@ -157,7 +157,7 @@ namespace Barotrauma foreach (var childElement in element.GetChildElements("item")) { var id = childElement.GetAttributeIdentifier("id", Identifier.Empty); - if (id.IsEmpty || !(ItemPrefab.FindByIdentifier(id) is ItemPrefab prefab)) { continue; } + if (id.IsEmpty || ItemPrefab.FindByIdentifier(id) is not ItemPrefab prefab) { continue; } specials.Add(prefab); } return specials; @@ -240,7 +240,7 @@ namespace Barotrauma availableStock.Add(stockItem.ItemPrefab, weight); } DailySpecials.Clear(); - int extraSpecialSalesCount = Location.GetExtraSpecialSalesCount(); + int extraSpecialSalesCount = GetExtraSpecialSalesCount(); for (int i = 0; i < Location.DailySpecialsCount + extraSpecialSalesCount; i++) { if (availableStock.None()) { break; } @@ -283,6 +283,17 @@ namespace Barotrauma } // Adjust by current location reputation price *= Location.GetStoreReputationModifier(true); + + var characters = GameSession.GetSessionCrewCharacters(CharacterType.Both); + if (characters.Any()) + { + if (Location.Reputation?.Faction is { } faction && faction.IsAffiliated()) + { + price *= 1f - characters.Max(static c => c.GetStatValue(StatTypes.StoreBuyMultiplierAffiliated)); + } + price *= 1f - characters.Max(static c => c.GetStatValue(StatTypes.StoreBuyMultiplier)); + price *= 1f + characters.Max(c => item.Tags.Sum(tag => c.Info.GetSavedStatValue(StatTypes.StoreBuyMultiplier, tag))); + } // Price should never go below 1 mk return Math.Max((int)price, 1); } @@ -303,6 +314,14 @@ namespace Barotrauma } // Adjust by current location reputation price *= Location.GetStoreReputationModifier(false); + + var characters = GameSession.GetSessionCrewCharacters(CharacterType.Both); + if (characters.Any()) + { + price *= 1f + characters.Max(static c => c.GetStatValue(StatTypes.StoreSellMultiplier)); + price *= 1f + characters.Max(c => item.Tags.Sum(tag => c.Info.GetSavedStatValue(StatTypes.StoreSellMultiplier, tag))); + } + // Price should never go below 1 mk return Math.Max((int)price, 1); } @@ -906,11 +925,17 @@ namespace Barotrauma public LocationType GetLocationType() { - if (IsCriticallyRadiated() && LocationType.Prefabs[Type.ReplaceInRadiation] is { } newLocationType) + if (IsCriticallyRadiated() && !Type.ReplaceInRadiation.IsEmpty) { - return newLocationType; + if (LocationType.Prefabs.TryGet(Type.ReplaceInRadiation, out LocationType newLocationType)) + { + return newLocationType; + } + else + { + DebugConsole.ThrowError($"Error when trying to get a new location type for an irradiated location - location type \"{newLocationType}\" not found."); + } } - return Type; } @@ -1119,7 +1144,7 @@ namespace Barotrauma public void UpdateStores() { // In multiplayer, stores should be updated by the server and loaded from save data by clients - if (GameMain.NetworkMember != null && GameMain.NetworkMember.IsClient) { return; } + if (GameMain.NetworkMember is { IsClient: true }) { return; } if (Stores == null) { CreateStores(); @@ -1161,13 +1186,10 @@ namespace Barotrauma stockToRemove.ForEach(i => stock.Remove(i)); store.Stock.Clear(); store.Stock.AddRange(stock); - int extraSpecialSalesCount = GetExtraSpecialSalesCount(); - if (++StepsSinceSpecialsUpdated >= SpecialsUpdateInterval || store.DailySpecials.Count() != DailySpecialsCount + extraSpecialSalesCount) - { - store.GenerateSpecials(); - } store.GeneratePriceModifier(); } + + StepsSinceSpecialsUpdated++; foreach (var identifier in storesToRemove) { Stores.Remove(identifier); @@ -1178,6 +1200,20 @@ namespace Barotrauma } } + public void UpdateSpecials() + { + if (GameMain.NetworkMember is { IsClient: true } || Stores is null) { return; } + + int extraSpecialSalesCount = GetExtraSpecialSalesCount(); + + foreach (StoreInfo store in Stores.Values) + { + if (StepsSinceSpecialsUpdated < SpecialsUpdateInterval && store.DailySpecials.Count == DailySpecialsCount + extraSpecialSalesCount) { continue; } + + store.GenerateSpecials(); + } + } + private void UpdateStoreIdentifiers() { StoreIdentifiers.Clear(); @@ -1249,7 +1285,7 @@ namespace Barotrauma } } - public int GetExtraSpecialSalesCount() + public static int GetExtraSpecialSalesCount() { var characters = GameSession.GetSessionCrewCharacters(CharacterType.Both); if (!characters.Any()) { return 0; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Map/LocationType.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Map/LocationType.cs index e402b8073..97651462a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Map/LocationType.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Map/LocationType.cs @@ -65,7 +65,7 @@ namespace Barotrauma private set; } - public string ReplaceInRadiation { get; } + public Identifier ReplaceInRadiation { get; } public Sprite Sprite { get; private set; } public Sprite RadiationSprite { get; } @@ -108,7 +108,7 @@ namespace Barotrauma HideEntitySubcategories = element.GetAttributeStringArray("hideentitysubcategories", Array.Empty()).ToList(); - ReplaceInRadiation = element.GetAttributeString(nameof(ReplaceInRadiation).ToLower(), ""); + ReplaceInRadiation = element.GetAttributeIdentifier(nameof(ReplaceInRadiation), Identifier.Empty); string teamStr = element.GetAttributeString("outpostteam", "FriendlyNPC"); Enum.TryParse(teamStr, out OutpostTeam); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Map/Map.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Map/Map.cs index ff196b2d6..3da878131 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Map/Map.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Map/Map.cs @@ -560,6 +560,42 @@ namespace Barotrauma } } + //make sure the location at the right side of the gate between biomes isn't a dead-end + //those may sometimes generate if all the connections of the right-side location lead to the previous biome + //(i.e. a situation where the adjacent locations happen to be at the left side of the border of the biomes, see see Regalis11/Barotrauma#10047) + for (int i = 0; i < Connections.Count; i++) + { + var connection = Connections[i]; + if (!connection.Locked) { continue; } + var rightMostLocation = + connection.Locations[0].MapPosition.X > connection.Locations[1].MapPosition.X ? + connection.Locations[0] : + connection.Locations[1]; + + //if there's only one connection (= the connection between biomes), create a new connection to the closest location to the right + if (rightMostLocation.Connections.Count == 1) + { + Location closestLocation = null; + float closestDist = float.PositiveInfinity; + foreach (Location otherLocation in Locations) + { + if (otherLocation == rightMostLocation || otherLocation.MapPosition.X < rightMostLocation.MapPosition.X) { continue; } + float dist = Vector2.DistanceSquared(rightMostLocation.MapPosition, otherLocation.MapPosition); + if (dist < closestDist || closestLocation == null) + { + closestLocation = otherLocation; + closestDist = dist; + } + } + + var newConnection = new LocationConnection(rightMostLocation, closestLocation); + rightMostLocation.Connections.Add(newConnection); + closestLocation.Connections.Add(newConnection); + Connections.Add(newConnection); + GenerateLocationConnectionVisuals(newConnection); + } + } + //remove orphans Locations.RemoveAll(l => !Connections.Any(c => c.Locations.Contains(l))); @@ -606,7 +642,9 @@ namespace Barotrauma } } - partial void GenerateLocationConnectionVisuals(); + partial void GenerateAllLocationConnectionVisuals(); + + partial void GenerateLocationConnectionVisuals(LocationConnection connection); private int GetZoneIndex(float xPos) { @@ -944,6 +982,16 @@ namespace Barotrauma ProgressWorld(); } + // always update specials every step + for (int i = 0; i < Math.Max(1, steps); i++) + { + foreach (Location location in Locations) + { + if (!location.Discovered) { continue; } + location.UpdateSpecials(); + } + } + Radiation?.OnStep(steps); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/PriceInfo.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/PriceInfo.cs index 96a8e9028..38cf694b1 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/PriceInfo.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/PriceInfo.cs @@ -27,6 +27,8 @@ namespace Barotrauma public bool DisplayNonEmpty { get; } = false; public Identifier StoreIdentifier { get; } + public bool RequiresUnlock { get; } + /// /// Used when both and are set to 0. /// @@ -48,6 +50,7 @@ namespace Barotrauma int maxAmount = GetMaxAmount(element); maxAmount = Math.Min(maxAmount, CargoManager.MaxQuantity); MaxAvailableAmount = Math.Max(maxAmount, MinAvailableAmount); + RequiresUnlock = element.GetAttributeBool("requiresunlock", false); } public PriceInfo(int price, bool canBeBought, diff --git a/Barotrauma/BarotraumaShared/SharedSource/NetStructBitField.cs b/Barotrauma/BarotraumaShared/SharedSource/NetStructBitField.cs index 4885dd27a..f28300c70 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/NetStructBitField.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/NetStructBitField.cs @@ -8,23 +8,7 @@ using Lidgren.Network; namespace Barotrauma { - interface IWritableBitField - { - public void WriteBoolean(bool b); - public void WriteInteger(int value, int min, int max); - public void WriteFloat(float value, float min, float max, int numberOfBits); - - public void WriteToMessage(IWriteMessage msg); - } - - interface IReadableBitField - { - public bool ReadBoolean(); - public int ReadInteger(int min, int max); - public float ReadFloat(float min, float max, int numberOfBits); - } - - sealed class WriteOnlyBitField : IWritableBitField, IDisposable + sealed class WriteOnlyBitField : IDisposable { private const int AmountOfBoolsInByte = 7; // Reserve last bit for end marker private readonly List Buffer = new List(); @@ -100,7 +84,7 @@ namespace Barotrauma } } - sealed class ReadOnlyBitField : IReadableBitField + sealed class ReadOnlyBitField { private const int AmountOfBoolsInByte = 7; // Reserve last bit for end marker private readonly ImmutableArray buffer; @@ -110,17 +94,14 @@ namespace Barotrauma { List bytes = new List(); byte currentByte; - int reads = 0; do { + if (inc.BitPosition >= inc.LengthBits) + { + throw new Exception("Failed to find the end of the bit field: end of the message reached."); + } currentByte = inc.ReadByte(); bytes.Add(currentByte); - - reads++; - if (reads > 100) - { - throw new Exception($"Failed to find the end of the bit field after 100 reads. Terminating to prevent the game from freezing."); - } } while (!IsBitSet(currentByte, AmountOfBoolsInByte)); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/ChildServerRelay.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/ChildServerRelay.cs index 8cb93bbb2..cd1b6ad8a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/ChildServerRelay.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/ChildServerRelay.cs @@ -113,6 +113,11 @@ namespace Barotrauma.Networking break; } } + catch (AggregateException aggregateException) + { + if (aggregateException.InnerException is OperationCanceledException) { return -1; } + throw; + } catch (OperationCanceledException) { return -1; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/INetSerializableStruct.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/INetSerializableStruct.cs index b8e4460b7..e3f946325 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/INetSerializableStruct.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/INetSerializableStruct.cs @@ -61,9 +61,9 @@ namespace Barotrauma { public interface IReadWriteBehavior { - public delegate object? ReadDelegate(IReadMessage inc, NetworkSerialize attribute, IReadableBitField bitField); + public delegate object? ReadDelegate(IReadMessage inc, NetworkSerialize attribute, ReadOnlyBitField bitField); - public delegate void WriteDelegate(object? obj, NetworkSerialize attribute, IWriteMessage msg, IWritableBitField bitField); + public delegate void WriteDelegate(object? obj, NetworkSerialize attribute, IWriteMessage msg, WriteOnlyBitField bitField); public ReadDelegate ReadAction { get; } public WriteDelegate WriteAction { get; } @@ -71,9 +71,9 @@ namespace Barotrauma public readonly struct ReadWriteBehavior : IReadWriteBehavior { - public delegate T ReadDelegate(IReadMessage inc, NetworkSerialize attribute, IReadableBitField bitField); + public delegate T ReadDelegate(IReadMessage inc, NetworkSerialize attribute, ReadOnlyBitField bitField); - public delegate void WriteDelegate(T obj, NetworkSerialize attribute, IWriteMessage msg, IWritableBitField bitField); + public delegate void WriteDelegate(T obj, NetworkSerialize attribute, IWriteMessage msg, WriteOnlyBitField bitField); public IReadWriteBehavior.ReadDelegate ReadAction { get; } public IReadWriteBehavior.WriteDelegate WriteAction { get; } @@ -256,18 +256,18 @@ namespace Barotrauma ReadImmutableArray, WriteImmutableArray); - private static ImmutableArray ReadImmutableArray(IReadMessage inc, NetworkSerialize attribute, IReadableBitField bitField) where T : notnull + private static ImmutableArray ReadImmutableArray(IReadMessage inc, NetworkSerialize attribute, ReadOnlyBitField bitField) where T : notnull { return ReadArray(inc, attribute, bitField).ToImmutableArray(); } - private static void WriteImmutableArray(ImmutableArray array, NetworkSerialize attribute, IWriteMessage msg, IWritableBitField bitField) where T : notnull + private static void WriteImmutableArray(ImmutableArray array, NetworkSerialize attribute, IWriteMessage msg, WriteOnlyBitField bitField) where T : notnull { ToolBox.ThrowIfNull(array); WriteIReadOnlyCollection(array, attribute, msg, bitField); } - private static T[] ReadArray(IReadMessage inc, NetworkSerialize attribute, IReadableBitField bitField) where T : notnull + private static T[] ReadArray(IReadMessage inc, NetworkSerialize attribute, ReadOnlyBitField bitField) where T : notnull { int length = bitField.ReadInteger(0, attribute.ArrayMaxSize); @@ -286,13 +286,13 @@ namespace Barotrauma return array; } - private static void WriteArray(T[] array, NetworkSerialize attribute, IWriteMessage msg, IWritableBitField bitField) where T : notnull + private static void WriteArray(T[] array, NetworkSerialize attribute, IWriteMessage msg, WriteOnlyBitField bitField) where T : notnull { ToolBox.ThrowIfNull(array); WriteIReadOnlyCollection(array, attribute, msg, bitField); } - private static void WriteIReadOnlyCollection(IReadOnlyCollection array, NetworkSerialize attribute, IWriteMessage msg, IWritableBitField bitField) where T : notnull + private static void WriteIReadOnlyCollection(IReadOnlyCollection array, NetworkSerialize attribute, IWriteMessage msg, WriteOnlyBitField bitField) where T : notnull { bitField.WriteInteger(array.Count, 0, attribute.ArrayMaxSize); @@ -307,18 +307,18 @@ namespace Barotrauma } } - private static T ReadINetSerializableStruct(IReadMessage inc, NetworkSerialize attribute, IReadableBitField bitField) where T : INetSerializableStruct + private static T ReadINetSerializableStruct(IReadMessage inc, NetworkSerialize attribute, ReadOnlyBitField bitField) where T : INetSerializableStruct { return INetSerializableStruct.ReadInternal(inc, bitField); } - private static void WriteINetSerializableStruct(T serializableStruct, NetworkSerialize attribute, IWriteMessage msg, IWritableBitField bitField) where T : INetSerializableStruct + private static void WriteINetSerializableStruct(T serializableStruct, NetworkSerialize attribute, IWriteMessage msg, WriteOnlyBitField bitField) where T : INetSerializableStruct { ToolBox.ThrowIfNull(serializableStruct); serializableStruct.WriteInternal(msg, bitField); } - private static T ReadEnum(IReadMessage inc, NetworkSerialize attribute, IReadableBitField bitField) where T : Enum + private static T ReadEnum(IReadMessage inc, NetworkSerialize attribute, ReadOnlyBitField bitField) where T : Enum { var type = typeof(T); @@ -338,7 +338,7 @@ namespace Barotrauma throw new InvalidOperationException($"An enum {type} with value {enumIndex} could not be found in {nameof(ReadEnum)}"); } - private static void WriteEnum(T value, NetworkSerialize attribute, IWriteMessage msg, IWritableBitField bitField) where T : Enum + private static void WriteEnum(T value, NetworkSerialize attribute, IWriteMessage msg, WriteOnlyBitField bitField) where T : Enum { ToolBox.ThrowIfNull(value); @@ -346,7 +346,7 @@ namespace Barotrauma bitField.WriteInteger((int)Convert.ChangeType(value, value.GetTypeCode()), range.Start, range.End); } - private static T? ReadNullable(IReadMessage inc, NetworkSerialize attribute, IReadableBitField bitField) where T : struct => + private static T? ReadNullable(IReadMessage inc, NetworkSerialize attribute, ReadOnlyBitField bitField) where T : struct => ReadOption(inc, attribute, bitField) switch { Some { Value: var value } => value, @@ -354,10 +354,10 @@ namespace Barotrauma _ => throw new ArgumentOutOfRangeException() }; - private static void WriteNullable(T? value, NetworkSerialize attribute, IWriteMessage msg, IWritableBitField bitField) where T : struct => + private static void WriteNullable(T? value, NetworkSerialize attribute, IWriteMessage msg, WriteOnlyBitField bitField) where T : struct => WriteOption(value.HasValue ? Option.Some(value.Value) : Option.None(), attribute, msg, bitField); - private static Option ReadOption(IReadMessage inc, NetworkSerialize attribute, IReadableBitField bitField) where T : notnull + private static Option ReadOption(IReadMessage inc, NetworkSerialize attribute, ReadOnlyBitField bitField) where T : notnull { bool hasValue = bitField.ReadBoolean(); if (!hasValue) @@ -373,7 +373,7 @@ namespace Barotrauma throw new InvalidOperationException($"Could not find suitable behavior for type {typeof(T)} in {nameof(ReadOption)}"); } - private static void WriteOption(Option option, NetworkSerialize attribute, IWriteMessage msg, IWritableBitField bitField) where T : notnull + private static void WriteOption(Option option, NetworkSerialize attribute, IWriteMessage msg, WriteOnlyBitField bitField) where T : notnull { ToolBox.ThrowIfNull(option); @@ -391,22 +391,22 @@ namespace Barotrauma } } - private static bool ReadBoolean(IReadMessage inc, NetworkSerialize attribute, IReadableBitField bitField) => bitField.ReadBoolean(); - private static void WriteBoolean(bool b, NetworkSerialize attribute, IWriteMessage msg, IWritableBitField bitField) { bitField.WriteBoolean(b); } + private static bool ReadBoolean(IReadMessage inc, NetworkSerialize attribute, ReadOnlyBitField bitField) => bitField.ReadBoolean(); + private static void WriteBoolean(bool b, NetworkSerialize attribute, IWriteMessage msg, WriteOnlyBitField bitField) { bitField.WriteBoolean(b); } - private static byte ReadByte(IReadMessage inc, NetworkSerialize attribute, IReadableBitField bitField) => inc.ReadByte(); - private static void WriteByte(byte b, NetworkSerialize attribute, IWriteMessage msg, IWritableBitField bitField) { msg.WriteByte(b); } + private static byte ReadByte(IReadMessage inc, NetworkSerialize attribute, ReadOnlyBitField bitField) => inc.ReadByte(); + private static void WriteByte(byte b, NetworkSerialize attribute, IWriteMessage msg, WriteOnlyBitField bitField) { msg.WriteByte(b); } - private static ushort ReadUInt16(IReadMessage inc, NetworkSerialize attribute, IReadableBitField bitField) => inc.ReadUInt16(); - private static void WriteUInt16(ushort b, NetworkSerialize attribute, IWriteMessage msg, IWritableBitField bitField) { msg.WriteUInt16(b); } + private static ushort ReadUInt16(IReadMessage inc, NetworkSerialize attribute, ReadOnlyBitField bitField) => inc.ReadUInt16(); + private static void WriteUInt16(ushort b, NetworkSerialize attribute, IWriteMessage msg, WriteOnlyBitField bitField) { msg.WriteUInt16(b); } - private static short ReadInt16(IReadMessage inc, NetworkSerialize attribute, IReadableBitField bitField) => inc.ReadInt16(); - private static void WriteInt16(short b, NetworkSerialize attribute, IWriteMessage msg, IWritableBitField bitField) { msg.WriteInt16(b); } + private static short ReadInt16(IReadMessage inc, NetworkSerialize attribute, ReadOnlyBitField bitField) => inc.ReadInt16(); + private static void WriteInt16(short b, NetworkSerialize attribute, IWriteMessage msg, WriteOnlyBitField bitField) { msg.WriteInt16(b); } - private static uint ReadUInt32(IReadMessage inc, NetworkSerialize attribute, IReadableBitField bitField) => inc.ReadUInt32(); - private static void WriteUInt32(uint b, NetworkSerialize attribute, IWriteMessage msg, IWritableBitField bitField) { msg.WriteUInt32(b); } + private static uint ReadUInt32(IReadMessage inc, NetworkSerialize attribute, ReadOnlyBitField bitField) => inc.ReadUInt32(); + private static void WriteUInt32(uint b, NetworkSerialize attribute, IWriteMessage msg, WriteOnlyBitField bitField) { msg.WriteUInt32(b); } - private static int ReadInt32(IReadMessage inc, NetworkSerialize attribute, IReadableBitField bitField) + private static int ReadInt32(IReadMessage inc, NetworkSerialize attribute, ReadOnlyBitField bitField) { if (IsRanged(attribute.MinValueInt, attribute.MaxValueInt)) { @@ -416,7 +416,7 @@ namespace Barotrauma return inc.ReadInt32(); } - private static void WriteInt32(int i, NetworkSerialize attribute, IWriteMessage msg, IWritableBitField bitField) + private static void WriteInt32(int i, NetworkSerialize attribute, IWriteMessage msg, WriteOnlyBitField bitField) { ToolBox.ThrowIfNull(i); @@ -429,13 +429,13 @@ namespace Barotrauma msg.WriteInt32(i); } - private static ulong ReadUInt64(IReadMessage inc, NetworkSerialize attribute, IReadableBitField bitField) => inc.ReadUInt64(); - private static void WriteUInt64(ulong b, NetworkSerialize attribute, IWriteMessage msg, IWritableBitField bitField) { msg.WriteUInt64(b); } + private static ulong ReadUInt64(IReadMessage inc, NetworkSerialize attribute, ReadOnlyBitField bitField) => inc.ReadUInt64(); + private static void WriteUInt64(ulong b, NetworkSerialize attribute, IWriteMessage msg, WriteOnlyBitField bitField) { msg.WriteUInt64(b); } - private static long ReadInt64(IReadMessage inc, NetworkSerialize attribute, IReadableBitField bitField) => inc.ReadInt64(); - private static void WriteInt64(long b, NetworkSerialize attribute, IWriteMessage msg, IWritableBitField bitField) { msg.WriteInt64(b); } + private static long ReadInt64(IReadMessage inc, NetworkSerialize attribute, ReadOnlyBitField bitField) => inc.ReadInt64(); + private static void WriteInt64(long b, NetworkSerialize attribute, IWriteMessage msg, WriteOnlyBitField bitField) { msg.WriteInt64(b); } - private static float ReadSingle(IReadMessage inc, NetworkSerialize attribute, IReadableBitField bitField) + private static float ReadSingle(IReadMessage inc, NetworkSerialize attribute, ReadOnlyBitField bitField) { if (IsRanged(attribute.MinValueFloat, attribute.MaxValueFloat)) { @@ -445,7 +445,7 @@ namespace Barotrauma return inc.ReadSingle(); } - private static void WriteSingle(float f, NetworkSerialize attribute, IWriteMessage msg, IWritableBitField bitField) + private static void WriteSingle(float f, NetworkSerialize attribute, IWriteMessage msg, WriteOnlyBitField bitField) { ToolBox.ThrowIfNull(f); @@ -458,16 +458,16 @@ namespace Barotrauma msg.WriteSingle(f); } - private static double ReadDouble(IReadMessage inc, NetworkSerialize attribute, IReadableBitField bitField) => inc.ReadDouble(); - private static void WriteDouble(double b, NetworkSerialize attribute, IWriteMessage msg, IWritableBitField bitField) { msg.WriteDouble(b); } + private static double ReadDouble(IReadMessage inc, NetworkSerialize attribute, ReadOnlyBitField bitField) => inc.ReadDouble(); + private static void WriteDouble(double b, NetworkSerialize attribute, IWriteMessage msg, WriteOnlyBitField bitField) { msg.WriteDouble(b); } - private static string ReadString(IReadMessage inc, NetworkSerialize attribute, IReadableBitField bitField) => inc.ReadString(); - private static void WriteString(string b, NetworkSerialize attribute, IWriteMessage msg, IWritableBitField bitField) { msg.WriteString(b); } + private static string ReadString(IReadMessage inc, NetworkSerialize attribute, ReadOnlyBitField bitField) => inc.ReadString(); + private static void WriteString(string b, NetworkSerialize attribute, IWriteMessage msg, WriteOnlyBitField bitField) { msg.WriteString(b); } - private static Identifier ReadIdentifier(IReadMessage inc, NetworkSerialize attribute, IReadableBitField bitField) => inc.ReadIdentifier(); - private static void WriteIdentifier(Identifier b, NetworkSerialize attribute, IWriteMessage msg, IWritableBitField bitField) { msg.WriteIdentifier(b); } + private static Identifier ReadIdentifier(IReadMessage inc, NetworkSerialize attribute, ReadOnlyBitField bitField) => inc.ReadIdentifier(); + private static void WriteIdentifier(Identifier b, NetworkSerialize attribute, IWriteMessage msg, WriteOnlyBitField bitField) { msg.WriteIdentifier(b); } - private static AccountId ReadAccountId(IReadMessage inc, NetworkSerialize attribute, IReadableBitField bitField) + private static AccountId ReadAccountId(IReadMessage inc, NetworkSerialize attribute, ReadOnlyBitField bitField) { string str = inc.ReadString(); return AccountId.Parse(str).TryUnwrap(out var accountId) @@ -475,14 +475,14 @@ namespace Barotrauma : throw new InvalidCastException($"Could not parse \"{str}\" as an {nameof(AccountId)}"); } - private static void WriteAccountId(AccountId accountId, NetworkSerialize attribute, IWriteMessage msg, IWritableBitField bitField) + private static void WriteAccountId(AccountId accountId, NetworkSerialize attribute, IWriteMessage msg, WriteOnlyBitField bitField) { msg.WriteString(accountId.StringRepresentation); } - private static Color ReadColor(IReadMessage inc, NetworkSerialize attribute, IReadableBitField bitField) => attribute.IncludeColorAlpha ? inc.ReadColorR8G8B8A8() : inc.ReadColorR8G8B8(); + private static Color ReadColor(IReadMessage inc, NetworkSerialize attribute, ReadOnlyBitField bitField) => attribute.IncludeColorAlpha ? inc.ReadColorR8G8B8A8() : inc.ReadColorR8G8B8(); - private static void WriteColor(Color color, NetworkSerialize attribute, IWriteMessage msg, IWritableBitField bitField) + private static void WriteColor(Color color, NetworkSerialize attribute, IWriteMessage msg, WriteOnlyBitField bitField) { ToolBox.ThrowIfNull(color); @@ -495,7 +495,7 @@ namespace Barotrauma msg.WriteColorR8G8B8(color); } - private static Vector2 ReadVector2(IReadMessage inc, NetworkSerialize attribute, IReadableBitField bitField) + private static Vector2 ReadVector2(IReadMessage inc, NetworkSerialize attribute, ReadOnlyBitField bitField) { float x = ReadSingle(inc, attribute, bitField); float y = ReadSingle(inc, attribute, bitField); @@ -503,7 +503,7 @@ namespace Barotrauma return new Vector2(x, y); } - private static void WriteVector2(Vector2 vector2, NetworkSerialize attribute, IWriteMessage msg, IWritableBitField bitField) + private static void WriteVector2(Vector2 vector2, NetworkSerialize attribute, IWriteMessage msg, WriteOnlyBitField bitField) { ToolBox.ThrowIfNull(vector2); @@ -690,11 +690,11 @@ namespace Barotrauma /// A new struct of type T with fields and properties deserialized public static T Read(IReadMessage inc) where T : INetSerializableStruct { - IReadableBitField bitField = new ReadOnlyBitField(inc); + ReadOnlyBitField bitField = new ReadOnlyBitField(inc); return ReadInternal(inc, bitField); } - public static T ReadInternal(IReadMessage inc, IReadableBitField bitField) where T : INetSerializableStruct + public static T ReadInternal(IReadMessage inc, ReadOnlyBitField bitField) where T : INetSerializableStruct { object? newObject = Activator.CreateInstance(typeof(T)); if (newObject is null) { return default!; } @@ -744,14 +744,14 @@ namespace Barotrauma /// Outgoing network message public void Write(IWriteMessage msg) { - IWritableBitField bitField = new WriteOnlyBitField(); + WriteOnlyBitField bitField = new WriteOnlyBitField(); IWriteMessage structWriteMsg = new WriteOnlyMessage(); WriteInternal(structWriteMsg, bitField); bitField.WriteToMessage(msg); msg.WriteBytes(structWriteMsg.Buffer, 0, structWriteMsg.LengthBytes); } - public void WriteInternal(IWriteMessage msg, IWritableBitField bitField) + public void WriteInternal(IWriteMessage msg, WriteOnlyBitField bitField) { var properties = NetSerializableProperties.GetPropertiesAndFields(GetType()); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/Primitives/Address/LidgrenAddress.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/Primitives/Address/LidgrenAddress.cs index 5fadd7644..eaea9b556 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/Primitives/Address/LidgrenAddress.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/Primitives/Address/LidgrenAddress.cs @@ -40,6 +40,25 @@ namespace Barotrauma.Networking return Option.None(); } + public static Option ParseHostName(string endpointStr) + { + try + { + var resolvedAddresses = Dns.GetHostAddresses(endpointStr); + return resolvedAddresses.Any() + ? Option.Some(new LidgrenAddress(resolvedAddresses.First())) + : Option.None(); + } + catch (SocketException) + { + return Option.None(); + } + catch (ArgumentOutOfRangeException) + { + return Option.None(); + } + } + public override bool Equals(object? obj) => obj switch { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/Primitives/Endpoint/LidgrenEndpoint.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/Primitives/Endpoint/LidgrenEndpoint.cs index 44d20264a..8e11264c6 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/Primitives/Endpoint/LidgrenEndpoint.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/Primitives/Endpoint/LidgrenEndpoint.cs @@ -23,6 +23,11 @@ namespace Barotrauma.Networking } public new static Option Parse(string endpointStr) + { + return ParseFromWithHostNameCheck(endpointStr, tryParseHostName: false); + } + + public static Option ParseFromWithHostNameCheck(string endpointStr, bool tryParseHostName) { string hostName = endpointStr; int port = NetConfig.DefaultPort; @@ -33,7 +38,8 @@ namespace Barotrauma.Networking port = int.TryParse(split[1], out var tmpPort) ? tmpPort : port; } - if (LidgrenAddress.Parse(hostName).TryUnwrap(out var adr)) + if (LidgrenAddress.Parse(hostName).TryUnwrap(out var adr) || + (tryParseHostName && LidgrenAddress.ParseHostName(hostName).TryUnwrap(out adr))) { return Option.Some(new LidgrenEndpoint(adr.NetAddress, port)); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/Primitives/Message/Message.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/Primitives/Message/Message.cs index d4330e11e..87e0463a9 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/Primitives/Message/Message.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/Primitives/Message/Message.cs @@ -37,7 +37,12 @@ namespace Barotrauma.Networking internal static class MsgWriter { - internal static void Write(ref byte[] buf, ref int bitPos, bool val) + internal static void UpdateBitLength(ref int bitLength, int bitPos) + { + bitLength = Math.Max(bitLength, bitPos); + } + + internal static void WriteBoolean(ref byte[] buf, ref int bitPos, ref int bitLength, bool val) { #if DEBUG int resetPos = bitPos; @@ -52,7 +57,7 @@ namespace Barotrauma.Networking buf[bytePos] &= bitMask; if (val) buf[bytePos] |= bitFlag; bitPos++; - + UpdateBitLength(ref bitLength, bitPos); #if DEBUG bool testVal = MsgReader.ReadBoolean(buf, ref resetPos); if (testVal != val || resetPos != bitPos) @@ -62,63 +67,71 @@ namespace Barotrauma.Networking #endif } - internal static void WritePadBits(ref byte[] buf, ref int bitPos) + internal static void WritePadBits(ref byte[] buf, ref int bitPos, ref int bitLength) { int bitOffset = bitPos % 8; bitPos += ((8 - bitOffset) % 8); + UpdateBitLength(ref bitLength, bitPos); EnsureBufferSize(ref buf, bitPos); } - internal static void Write(ref byte[] buf, ref int bitPos, byte val) + internal static void WriteByte(ref byte[] buf, ref int bitPos, ref int bitLength, byte val) { EnsureBufferSize(ref buf, bitPos + 8); NetBitWriter.WriteByte(val, 8, buf, bitPos); bitPos += 8; + UpdateBitLength(ref bitLength, bitPos); } - internal static void Write(ref byte[] buf, ref int bitPos, UInt16 val) + internal static void WriteUInt16(ref byte[] buf, ref int bitPos, ref int bitLength, UInt16 val) { EnsureBufferSize(ref buf, bitPos + 16); NetBitWriter.WriteUInt16(val, 16, buf, bitPos); bitPos += 16; + UpdateBitLength(ref bitLength, bitPos); } - internal static void Write(ref byte[] buf, ref int bitPos, Int16 val) + internal static void WriteInt16(ref byte[] buf, ref int bitPos, ref int bitLength, Int16 val) { EnsureBufferSize(ref buf, bitPos + 16); NetBitWriter.WriteUInt16((UInt16)val, 16, buf, bitPos); bitPos += 16; + UpdateBitLength(ref bitLength, bitPos); } - internal static void Write(ref byte[] buf, ref int bitPos, UInt32 val) + internal static void WriteUInt32(ref byte[] buf, ref int bitPos, ref int bitLength, UInt32 val) { EnsureBufferSize(ref buf, bitPos + 32); NetBitWriter.WriteUInt32(val, 32, buf, bitPos); bitPos += 32; + UpdateBitLength(ref bitLength, bitPos); } - internal static void Write(ref byte[] buf, ref int bitPos, Int32 val) + internal static void WriteInt32(ref byte[] buf, ref int bitPos, ref int bitLength, Int32 val) { EnsureBufferSize(ref buf, bitPos + 32); NetBitWriter.WriteUInt32((UInt32)val, 32, buf, bitPos); bitPos += 32; + UpdateBitLength(ref bitLength, bitPos); } - internal static void Write(ref byte[] buf, ref int bitPos, UInt64 val) + internal static void WriteUInt64(ref byte[] buf, ref int bitPos, ref int bitLength, UInt64 val) { EnsureBufferSize(ref buf, bitPos + 64); NetBitWriter.WriteUInt64(val, 64, buf, bitPos); bitPos += 64; + UpdateBitLength(ref bitLength, bitPos); } - internal static void Write(ref byte[] buf, ref int bitPos, Int64 val) + internal static void WriteInt64(ref byte[] buf, ref int bitPos, ref int bitLength, Int64 val) { EnsureBufferSize(ref buf, bitPos + 64); NetBitWriter.WriteUInt64((UInt64)val, 64, buf, bitPos); bitPos += 64; + UpdateBitLength(ref bitLength, bitPos); } - internal static void Write(ref byte[] buf, ref int bitPos, Single val) + internal static void WriteSingle(ref byte[] buf, ref int bitPos, ref int bitLength, Single val) { // Use union to avoid BitConverter.GetBytes() which allocates memory on the heap SingleUIntUnion su; @@ -129,61 +142,62 @@ namespace Barotrauma.Networking NetBitWriter.WriteUInt32(su.UIntValue, 32, buf, bitPos); bitPos += 32; + UpdateBitLength(ref bitLength, bitPos); } - internal static void Write(ref byte[] buf, ref int bitPos, Double val) + internal static void WriteDouble(ref byte[] buf, ref int bitPos, ref int bitLength, Double val) { EnsureBufferSize(ref buf, bitPos + 64); byte[] bytes = BitConverter.GetBytes(val); - WriteBytes(ref buf, ref bitPos, bytes, 0, 8); + WriteBytes(ref buf, ref bitPos, ref bitLength, bytes, 0, 8); } - internal static void WriteColorR8G8B8(ref byte[] buf, ref int bitPos, Color val) + internal static void WriteColorR8G8B8(ref byte[] buf, ref int bitPos, ref int bitLength, Color val) { EnsureBufferSize(ref buf, bitPos + 24); - Write(ref buf, ref bitPos, val.R); - Write(ref buf, ref bitPos, val.G); - Write(ref buf, ref bitPos, val.B); + WriteByte(ref buf, ref bitPos, ref bitLength, val.R); + WriteByte(ref buf, ref bitPos, ref bitLength, val.G); + WriteByte(ref buf, ref bitPos, ref bitLength, val.B); } - internal static void WriteColorR8G8B8A8(ref byte[] buf, ref int bitPos, Color val) + internal static void WriteColorR8G8B8A8(ref byte[] buf, ref int bitPos, ref int bitLength, Color val) { EnsureBufferSize(ref buf, bitPos + 32); - Write(ref buf, ref bitPos, val.R); - Write(ref buf, ref bitPos, val.G); - Write(ref buf, ref bitPos, val.B); - Write(ref buf, ref bitPos, val.A); + WriteByte(ref buf, ref bitPos, ref bitLength, val.R); + WriteByte(ref buf, ref bitPos, ref bitLength, val.G); + WriteByte(ref buf, ref bitPos, ref bitLength, val.B); + WriteByte(ref buf, ref bitPos, ref bitLength, val.A); } - internal static void Write(ref byte[] buf, ref int bitPos, string val) + internal static void WriteString(ref byte[] buf, ref int bitPos, ref int bitLength, string val) { if (string.IsNullOrEmpty(val)) { - WriteVariableUInt32(ref buf, ref bitPos, 0u); + WriteVariableUInt32(ref buf, ref bitPos, ref bitLength, 0u); return; } byte[] bytes = Encoding.UTF8.GetBytes(val); - WriteVariableUInt32(ref buf, ref bitPos, (uint)bytes.Length); - WriteBytes(ref buf, ref bitPos, bytes, 0, bytes.Length); + WriteVariableUInt32(ref buf, ref bitPos, ref bitLength, (uint)bytes.Length); + WriteBytes(ref buf, ref bitPos, ref bitLength, bytes, 0, bytes.Length); } - internal static void WriteVariableUInt32(ref byte[] buf, ref int bitPos, uint value) + internal static void WriteVariableUInt32(ref byte[] buf, ref int bitPos, ref int bitLength, uint value) { uint remainingValue = value; while (remainingValue >= 0x80) { - Write(ref buf, ref bitPos, (byte)(remainingValue | 0x80)); + WriteByte(ref buf, ref bitPos, ref bitLength, (byte)(remainingValue | 0x80)); remainingValue >>= 7; } - Write(ref buf, ref bitPos, (byte)remainingValue); + WriteByte(ref buf, ref bitPos, ref bitLength, (byte)remainingValue); } - internal static void WriteRangedInteger(ref byte[] buf, ref int bitPos, int val, int min, int max) + internal static void WriteRangedInteger(ref byte[] buf, ref int bitPos, ref int bitLength, int val, int min, int max) { uint range = (uint)(max - min); int numberOfBits = NetUtility.BitsToHoldUInt(range); @@ -193,9 +207,10 @@ namespace Barotrauma.Networking uint rvalue = (uint)(val - min); NetBitWriter.WriteUInt32(rvalue, numberOfBits, buf, bitPos); bitPos += numberOfBits; + UpdateBitLength(ref bitLength, bitPos); } - internal static void WriteRangedSingle(ref byte[] buf, ref int bitPos, Single val, Single min, Single max, int numberOfBits) + internal static void WriteRangedSingle(ref byte[] buf, ref int bitPos, ref int bitLength, Single val, Single min, Single max, int numberOfBits) { float range = max - min; float unit = ((val - min) / range); @@ -205,13 +220,15 @@ namespace Barotrauma.Networking NetBitWriter.WriteUInt32((UInt32)(maxVal * unit), numberOfBits, buf, bitPos); bitPos += numberOfBits; + UpdateBitLength(ref bitLength, bitPos); } - internal static void WriteBytes(ref byte[] buf, ref int bitPos, byte[] val, int pos, int length) + internal static void WriteBytes(ref byte[] buf, ref int bitPos, ref int bitLength, byte[] val, int pos, int length) { EnsureBufferSize(ref buf, bitPos + length * 8); NetBitWriter.WriteBytes(val, pos, length, buf, bitPos); bitPos += length * 8; + UpdateBitLength(ref bitLength, bitPos); } internal static void EnsureBufferSize(ref byte[] buf, int numberOfBits) @@ -447,77 +464,77 @@ namespace Barotrauma.Networking public void WriteBoolean(bool val) { - MsgWriter.Write(ref buf, ref seekPos, val); + MsgWriter.WriteBoolean(ref buf, ref seekPos, ref lengthBits, val); } public void WritePadBits() { - MsgWriter.WritePadBits(ref buf, ref seekPos); + MsgWriter.WritePadBits(ref buf, ref seekPos, ref lengthBits); } public void WriteByte(byte val) { - MsgWriter.Write(ref buf, ref seekPos, val); + MsgWriter.WriteByte(ref buf, ref seekPos, ref lengthBits, val); } public void WriteUInt16(UInt16 val) { - MsgWriter.Write(ref buf, ref seekPos, val); + MsgWriter.WriteUInt16(ref buf, ref seekPos, ref lengthBits, val); } public void WriteInt16(Int16 val) { - MsgWriter.Write(ref buf, ref seekPos, val); + MsgWriter.WriteInt16(ref buf, ref seekPos, ref lengthBits, val); } public void WriteUInt32(UInt32 val) { - MsgWriter.Write(ref buf, ref seekPos, val); + MsgWriter.WriteUInt32(ref buf, ref seekPos, ref lengthBits, val); } public void WriteInt32(Int32 val) { - MsgWriter.Write(ref buf, ref seekPos, val); + MsgWriter.WriteInt32(ref buf, ref seekPos, ref lengthBits, val); } public void WriteUInt64(UInt64 val) { - MsgWriter.Write(ref buf, ref seekPos, val); + MsgWriter.WriteUInt64(ref buf, ref seekPos, ref lengthBits, val); } public void WriteInt64(Int64 val) { - MsgWriter.Write(ref buf, ref seekPos, val); + MsgWriter.WriteInt64(ref buf, ref seekPos, ref lengthBits, val); } public void WriteSingle(Single val) { - MsgWriter.Write(ref buf, ref seekPos, val); + MsgWriter.WriteSingle(ref buf, ref seekPos, ref lengthBits, val); } public void WriteDouble(Double val) { - MsgWriter.Write(ref buf, ref seekPos, val); + MsgWriter.WriteDouble(ref buf, ref seekPos, ref lengthBits, val); } public void WriteColorR8G8B8(Color val) { - MsgWriter.WriteColorR8G8B8(ref buf, ref seekPos, val); + MsgWriter.WriteColorR8G8B8(ref buf, ref seekPos, ref lengthBits, val); } public void WriteColorR8G8B8A8(Color val) { - MsgWriter.WriteColorR8G8B8A8(ref buf, ref seekPos, val); + MsgWriter.WriteColorR8G8B8A8(ref buf, ref seekPos, ref lengthBits, val); } public void WriteVariableUInt32(UInt32 val) { - MsgWriter.WriteVariableUInt32(ref buf, ref seekPos, val); + MsgWriter.WriteVariableUInt32(ref buf, ref seekPos, ref lengthBits, val); } public void WriteString(String val) { - MsgWriter.Write(ref buf, ref seekPos, val); + MsgWriter.WriteString(ref buf, ref seekPos, ref lengthBits, val); } public void WriteIdentifier(Identifier val) @@ -527,17 +544,17 @@ namespace Barotrauma.Networking public void WriteRangedInteger(int val, int min, int max) { - MsgWriter.WriteRangedInteger(ref buf, ref seekPos, val, min, max); + MsgWriter.WriteRangedInteger(ref buf, ref seekPos, ref lengthBits, val, min, max); } public void WriteRangedSingle(Single val, Single min, Single max, int bitCount) { - MsgWriter.WriteRangedSingle(ref buf, ref seekPos, val, min, max, bitCount); + MsgWriter.WriteRangedSingle(ref buf, ref seekPos, ref lengthBits, val, min, max, bitCount); } public void WriteBytes(byte[] val, int startPos, int length) { - MsgWriter.WriteBytes(ref buf, ref seekPos, val, startPos, length); + MsgWriter.WriteBytes(ref buf, ref seekPos, ref lengthBits, val, startPos, length); } public byte[] PrepareForSending(bool compressPastThreshold, out bool isCompressed, out int length) @@ -814,77 +831,77 @@ namespace Barotrauma.Networking public void WriteBoolean(bool val) { - MsgWriter.Write(ref buf, ref seekPos, val); + MsgWriter.WriteBoolean(ref buf, ref seekPos, ref lengthBits, val); } public void WritePadBits() { - MsgWriter.WritePadBits(ref buf, ref seekPos); + MsgWriter.WritePadBits(ref buf, ref seekPos, ref lengthBits); } public void WriteByte(byte val) { - MsgWriter.Write(ref buf, ref seekPos, val); + MsgWriter.WriteByte(ref buf, ref seekPos, ref lengthBits, val); } public void WriteUInt16(UInt16 val) { - MsgWriter.Write(ref buf, ref seekPos, val); + MsgWriter.WriteUInt16(ref buf, ref seekPos, ref lengthBits, val); } public void WriteInt16(Int16 val) { - MsgWriter.Write(ref buf, ref seekPos, val); + MsgWriter.WriteInt16(ref buf, ref seekPos, ref lengthBits, val); } public void WriteUInt32(UInt32 val) { - MsgWriter.Write(ref buf, ref seekPos, val); + MsgWriter.WriteUInt32(ref buf, ref seekPos, ref lengthBits, val); } public void WriteInt32(Int32 val) { - MsgWriter.Write(ref buf, ref seekPos, val); + MsgWriter.WriteInt32(ref buf, ref seekPos, ref lengthBits, val); } public void WriteUInt64(UInt64 val) { - MsgWriter.Write(ref buf, ref seekPos, val); + MsgWriter.WriteUInt64(ref buf, ref seekPos, ref lengthBits, val); } public void WriteInt64(Int64 val) { - MsgWriter.Write(ref buf, ref seekPos, val); + MsgWriter.WriteInt64(ref buf, ref seekPos, ref lengthBits, val); } public void WriteSingle(Single val) { - MsgWriter.Write(ref buf, ref seekPos, val); + MsgWriter.WriteSingle(ref buf, ref seekPos, ref lengthBits, val); } public void WriteDouble(Double val) { - MsgWriter.Write(ref buf, ref seekPos, val); + MsgWriter.WriteDouble(ref buf, ref seekPos, ref lengthBits, val); } public void WriteColorR8G8B8(Color val) { - MsgWriter.WriteColorR8G8B8(ref buf, ref seekPos, val); + MsgWriter.WriteColorR8G8B8(ref buf, ref seekPos, ref lengthBits, val); } public void WriteColorR8G8B8A8(Color val) { - MsgWriter.WriteColorR8G8B8A8(ref buf, ref seekPos, val); + MsgWriter.WriteColorR8G8B8A8(ref buf, ref seekPos, ref lengthBits, val); } public void WriteVariableUInt32(UInt32 val) { - MsgWriter.WriteVariableUInt32(ref buf, ref seekPos, val); + MsgWriter.WriteVariableUInt32(ref buf, ref seekPos, ref lengthBits, val); } public void WriteString(String val) { - MsgWriter.Write(ref buf, ref seekPos, val); + MsgWriter.WriteString(ref buf, ref seekPos, ref lengthBits, val); } public void WriteIdentifier(Identifier val) @@ -894,17 +911,17 @@ namespace Barotrauma.Networking public void WriteRangedInteger(int val, int min, int max) { - MsgWriter.WriteRangedInteger(ref buf, ref seekPos, val, min, max); + MsgWriter.WriteRangedInteger(ref buf, ref seekPos, ref lengthBits, val, min, max); } public void WriteRangedSingle(Single val, Single min, Single max, int bitCount) { - MsgWriter.WriteRangedSingle(ref buf, ref seekPos, val, min, max, bitCount); + MsgWriter.WriteRangedSingle(ref buf, ref seekPos, ref lengthBits, val, min, max, bitCount); } public void WriteBytes(byte[] val, int startPos, int length) { - MsgWriter.WriteBytes(ref buf, ref seekPos, val, startPos, length); + MsgWriter.WriteBytes(ref buf, ref seekPos, ref lengthBits, val, startPos, length); } public bool ReadBoolean() diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/Primitives/NetworkPeerStructs.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/Primitives/NetworkPeerStructs.cs index 0a042c27f..2ef9e10ec 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/Primitives/NetworkPeerStructs.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/Primitives/NetworkPeerStructs.cs @@ -286,8 +286,13 @@ namespace Barotrauma.Networking } public DateTime InstallTime => cachedDateTime ??= DateTime.UtcNow + TimeSpan.FromSeconds(InstallTimeDiffInSeconds); - public RegularPackage? RegularPackage => ContentPackageManager.RegularPackages.FirstOrDefault(p => p.Hash.Equals(Hash)); - public CorePackage? CorePackage => ContentPackageManager.CorePackages.FirstOrDefault(p => p.Hash.Equals(Hash)); + public RegularPackage? RegularPackage => + ContentPackageManager.RegularPackages.FirstOrDefault(p => p.Name.Equals(Name) && p.Hash.Equals(Hash)) ?? + ContentPackageManager.RegularPackages.FirstOrDefault(p => p.Hash.Equals(Hash)); + + public CorePackage? CorePackage => + ContentPackageManager.CorePackages.FirstOrDefault(p => p.Name.Equals(Name) && p.Hash.Equals(Hash)) ?? + ContentPackageManager.CorePackages.FirstOrDefault(p => p.Hash.Equals(Hash)); public ContentPackage? ContentPackage => (ContentPackage?)RegularPackage ?? CorePackage; public ServerContentPackage() { } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/RespawnManager.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/RespawnManager.cs index 6f68b3730..15a041953 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/RespawnManager.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/RespawnManager.cs @@ -258,7 +258,7 @@ namespace Barotrauma.Networking var powerContainer = item.GetComponent(); if (powerContainer != null) { - powerContainer.Charge = powerContainer.Capacity; + powerContainer.Charge = powerContainer.GetCapacity(); } var door = item.GetComponent(); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Physics/PhysicsBody.cs b/Barotrauma/BarotraumaShared/SharedSource/Physics/PhysicsBody.cs index ee9831e4d..8286eee68 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Physics/PhysicsBody.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Physics/PhysicsBody.cs @@ -97,7 +97,6 @@ namespace Barotrauma get { return list; } } - protected Vector2 prevPosition; protected float prevRotation; @@ -344,6 +343,22 @@ namespace Barotrauma } } + /// + /// Ignore rotation calls for the rest of this and the next update. Automatically disabled after that. Used for temporarily suppressing the SmoothRotate calls to prevent conflicting or unitentionally amplified rotations. + /// + public bool SuppressSmoothRotationCalls + { + get => _suppressSmoothRotationCalls; + set + { + _suppressSmoothRotationCalls = value; + smoothRotationSuppressionCounter = 0; + } + } + + private bool _suppressSmoothRotationCalls; + private int smoothRotationSuppressionCounter; + public PhysicsBody(XElement element, float scale = 1.0f, bool findNewContacts = true) : this(element, Vector2.Zero, scale, findNewContacts: findNewContacts) { } public PhysicsBody(ColliderParams cParams, bool findNewContacts = true) : this(cParams, Vector2.Zero, findNewContacts) { } public PhysicsBody(LimbParams lParams, bool findNewContacts = true) : this(lParams, Vector2.Zero, findNewContacts) { } @@ -831,6 +846,17 @@ namespace Barotrauma } drawOffset = NetConfig.InterpolateSimPositionError(drawOffset, PositionSmoothingFactor); rotationOffset = NetConfig.InterpolateRotationError(rotationOffset); + if (SuppressSmoothRotationCalls) + { + if (smoothRotationSuppressionCounter > 0) + { + SuppressSmoothRotationCalls = false; + } + else + { + smoothRotationSuppressionCounter++; + } + } } public void UpdateDrawPosition() @@ -873,6 +899,7 @@ namespace Barotrauma /// Should the angles be wrapped. Set to false if it makes a difference whether the angle of the body is 0.0f or 360.0f. public void SmoothRotate(float targetRotation, float force = 10.0f, bool wrapAngle = true) { + if (SuppressSmoothRotationCalls) { return; } float nextAngle = FarseerBody.Rotation + FarseerBody.AngularVelocity * (float)Timing.Step; float angle = wrapAngle ? MathUtils.GetShortestAngle(nextAngle, targetRotation) : @@ -881,7 +908,7 @@ namespace Barotrauma if (FarseerBody.BodyType == BodyType.Kinematic) { - if (!IsValidValue(torque, "torque")) return; + if (!IsValidValue(torque, "torque")) { return; } FarseerBody.AngularVelocity = torque; } else diff --git a/Barotrauma/BarotraumaShared/SharedSource/Prefabs/PrefabCollection.cs b/Barotrauma/BarotraumaShared/SharedSource/Prefabs/PrefabCollection.cs index 93fa4d6a7..4b3b7edc9 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Prefabs/PrefabCollection.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Prefabs/PrefabCollection.cs @@ -4,6 +4,7 @@ using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Security.Cryptography; @@ -256,7 +257,7 @@ namespace Barotrauma /// Prefab identifier /// The matching prefab (if one is found) /// Whether a prefab with the identifier exists or not - public bool TryGet(Identifier identifier, out T? result) + public bool TryGet(Identifier identifier, [NotNullWhen(true)] out T? result) { Prefab.DisallowCallFromConstructor(); if (prefabs.TryGetValue(identifier, out PrefabSelector? selector)) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Screens/NetLobbyScreen.cs b/Barotrauma/BarotraumaShared/SharedSource/Screens/NetLobbyScreen.cs index 2b8e658f9..226e1c3c1 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Screens/NetLobbyScreen.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Screens/NetLobbyScreen.cs @@ -65,7 +65,7 @@ namespace Barotrauma } #endif #if CLIENT - (botCountText as GUITextBlock).Text = botCount.ToString(); + botCountText.Text = botCount.ToString(); #endif } @@ -79,7 +79,13 @@ namespace Barotrauma } #endif #if CLIENT - (botSpawnModeText as GUITextBlock).Text = TextManager.Get(botSpawnMode.ToString()); + + botSpawnModeText.Text = TextManager.Get(botSpawnMode.ToString()); + botSpawnModeText.ToolTip = TextManager.Get($"botspawnmode.{botSpawnMode}.tooltip") + "\n\n" + TextManager.Get("botspawn.campaignnote"); + foreach (var btn in botSpawnModeButtons) + { + btn.ToolTip = botSpawnModeText.ToolTip; + } #endif } @@ -89,7 +95,7 @@ namespace Barotrauma if (GameMain.Server != null) GameMain.Server.ServerSettings.TraitorsEnabled = enabled; #endif #if CLIENT - (traitorProbabilityText as GUITextBlock).Text = TextManager.Get(enabled.ToString()); + traitorProbabilityText.Text = TextManager.Get(enabled.ToString()); #endif } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Serialization/XMLExtensions.cs b/Barotrauma/BarotraumaShared/SharedSource/Serialization/XMLExtensions.cs index 16e5022f4..09e78f943 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Serialization/XMLExtensions.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Serialization/XMLExtensions.cs @@ -214,6 +214,7 @@ namespace Barotrauma return splitValue; } + public static Identifier[] GetAttributeIdentifierArray(this XElement element, string name, Identifier[] defaultValue, bool trim = true) { return element.GetAttributeStringArray(name, null, trim: trim, convertToLowerInvariant: false) @@ -221,6 +222,12 @@ namespace Barotrauma ?? defaultValue; } + public static ImmutableHashSet GetAttributeIdentifierImmutableHashSet(this XElement element, string key, ImmutableHashSet defaultValue, bool trim = true) + { + return element.GetAttributeIdentifierArray(key, null, trim)?.ToImmutableHashSet() + ?? defaultValue; + } + public static float GetAttributeFloat(this XElement element, float defaultValue, params string[] matchingAttributeName) { if (element == null) { return defaultValue; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/StatusEffect.cs b/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/StatusEffect.cs index 4b625e9e8..3173558d7 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/StatusEffect.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/StatusEffect.cs @@ -1,6 +1,7 @@ using Barotrauma.Abilities; using Barotrauma.Extensions; using Barotrauma.Items.Components; +using Barotrauma.Networking; using FarseerPhysics; using Microsoft.Xna.Framework; using System; @@ -278,6 +279,13 @@ namespace Barotrauma [Serialize(1, IsPropertySaveable.No)] public int Count { get; private set; } + /// + /// The maximum amount of creatures of the same species in the same team that are allowed to be spawned via this status effect. + /// Also the creatures spawned by other means are counted in the check. + /// + [Serialize(0, IsPropertySaveable.No)] + public int TotalMaxCount { get; private set; } + [Serialize(0, IsPropertySaveable.No)] public int Stun { get; private set; } @@ -362,7 +370,7 @@ namespace Barotrauma private readonly int useItemCount; - private readonly bool removeItem, dropContainedItems, removeCharacter, breakLimb, hideLimb; + private readonly bool removeItem, dropContainedItems, dropItem, removeCharacter, breakLimb, hideLimb; private readonly float hideLimbTimer; public readonly ActionType type = ActionType.OnActive; @@ -656,6 +664,9 @@ namespace Barotrauma case "dropcontaineditems": dropContainedItems = true; break; + case "dropitem": + dropItem = true; + break; case "removecharacter": removeCharacter = true; break; @@ -1282,6 +1293,16 @@ namespace Barotrauma } } + if (dropItem) + { + for (int i = 0; i < targets.Count; i++) + { + if (targets[i] is Item item) + { + item.Drop(dropper: null); + } + } + } if (dropContainedItems) { for (int i = 0; i < targets.Count; i++) @@ -1333,17 +1354,20 @@ namespace Barotrauma if (limb.body == sourceBody) { targetLimb = limb; - if (breakLimb) - { - character.TrySeverLimbJoints(limb, severLimbsProbability: 100, damage: 100, allowBeheading: true, attacker: user); - } break; } } } - if (hideLimb) + if (targetLimb != null) { - targetLimb?.HideAndDisable(hideLimbTimer); + if (breakLimb) + { + targetLimb.character.TrySeverLimbJoints(targetLimb, severLimbsProbability: 1, damage: -1, allowBeheading: true, attacker: user); + } + if (hideLimb) + { + targetLimb.HideAndDisable(hideLimbTimer); + } } } } @@ -1475,6 +1499,9 @@ namespace Barotrauma targetCharacter = targetLimb.character; } } + + Character entityCharacter = entity as Character; + targetCharacter ??= entityCharacter; if (targetCharacter != null && !targetCharacter.Removed && !targetCharacter.IsPlayer) { if (targetCharacter.AIController is EnemyAIController enemyAI) @@ -1482,7 +1509,13 @@ namespace Barotrauma foreach (AITrigger trigger in aiTriggers) { if (Rand.Value(Rand.RandSync.Unsynced) > trigger.Probability) { continue; } - if (target is Limb targetLimb && targetCharacter.LastDamage.HitLimb != targetLimb) { continue; } + if (entityCharacter != targetCharacter) + { + if (target is Limb targetLimb && targetCharacter.LastDamage.HitLimb is Limb hitLimb) + { + if (hitLimb != targetLimb) { continue; } + } + } if (targetCharacter.LastDamage.Damage < trigger.MinDamage) { continue; } enemyAI.LaunchTrigger(trigger); break; @@ -1606,6 +1639,14 @@ namespace Barotrauma Entity.Spawner.AddCharacterToSpawnQueue(characterSpawnInfo.SpeciesName, position + Rand.Vector(characterSpawnInfo.Spread, Rand.RandSync.Unsynced) + characterSpawnInfo.Offset, onSpawn: newCharacter => { + if (characterSpawnInfo.TotalMaxCount > 0) + { + if (Character.CharacterList.Count(c => c.SpeciesName == characterSpawnInfo.SpeciesName && c.TeamID == newCharacter.TeamID) > characterSpawnInfo.TotalMaxCount) + { + Entity.Spawner?.AddEntityToRemoveQueue(newCharacter); + return; + } + } if (newCharacter.AIController is EnemyAIController enemyAi && enemyAi.PetBehavior != null && entity is Item item && @@ -1666,11 +1707,11 @@ namespace Barotrauma Character.Controlled = newCharacter; } #elif SERVER - /*foreach (Client c in GameMain.Server.ConnectedClients) + foreach (Client c in GameMain.Server.ConnectedClients) { if (c.Character != target) { continue; } GameMain.Server.SetClientCharacter(c, newCharacter); - }*/ + } #endif } if (characterSpawnInfo.RemovePreviousCharacter) { Entity.Spawner?.AddEntityToRemoveQueue(character); } @@ -1787,10 +1828,16 @@ namespace Barotrauma rotation += spread; if (projectile != null) { - projectile.Shoot(user, - ConvertUnits.ToSimUnits(worldPos), - ConvertUnits.ToSimUnits(worldPos), - rotation, + Vector2 spawnPos; + if (projectile.Hitscan) + { + spawnPos = sourceBody != null ? sourceBody.SimPosition : entity.SimPosition; + } + else + { + spawnPos = ConvertUnits.ToSimUnits(worldPos); + } + projectile.Shoot(user, spawnPos, spawnPos, rotation, ignoredBodies: user?.AnimController.Limbs.Where(l => !l.IsSevered).Select(l => l.body.FarseerBody).ToList(), createNetworkEvent: true); } else if (newItem.body != null) @@ -2070,12 +2117,13 @@ namespace Barotrauma if (entity is Item sourceItem && sourceItem.HasTag("medical")) { multiplier *= 1 + targetCharacter.GetStatValue(StatTypes.MedicalItemEffectivenessMultiplier); - - if (user != null) + + if (user is not null) { multiplier *= 1 + user.GetStatValue(StatTypes.MedicalItemApplyingMultiplier); } } + return multiplier * AfflictionMultiplier; } @@ -2087,6 +2135,18 @@ namespace Barotrauma afflictionMultiplier *= targetCharacter.MaxVitality / 100f; } + if (user is not null) + { + if (affliction.Prefab.IsBuff) + { + afflictionMultiplier *= 1 + user.GetStatValue(StatTypes.MedicalItemDurationMultiplier); + } + else if (affliction.Prefab.AfflictionType == "poison") + { + afflictionMultiplier *= 1 + user.GetStatValue(StatTypes.PoisonMultiplier); + } + } + if (!MathUtils.NearlyEqual(afflictionMultiplier, 1.0f)) { return affliction.CreateMultiplied(afflictionMultiplier, affliction.Probability); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Text/LocalizedString/LocalizedString.cs b/Barotrauma/BarotraumaShared/SharedSource/Text/LocalizedString/LocalizedString.cs index 7f27612ea..6ddc13c18 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Text/LocalizedString/LocalizedString.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Text/LocalizedString/LocalizedString.cs @@ -13,7 +13,7 @@ namespace Barotrauma Yes } - protected LanguageIdentifier language { get; private set; } = LanguageIdentifier.None; + public LanguageIdentifier Language { get; private set; } = LanguageIdentifier.None; private int languageVersion = 0; protected string cachedValue = ""; @@ -32,13 +32,13 @@ namespace Barotrauma protected void UpdateLanguage() { - language = GameSettings.CurrentConfig.Language; + Language = GameSettings.CurrentConfig.Language; languageVersion = TextManager.LanguageVersion; } protected virtual bool MustRetrieveValue() //this can't be called on other LocalizedStrings by derived classes { - return language != GameSettings.CurrentConfig.Language || languageVersion != TextManager.LanguageVersion; + return Language != GameSettings.CurrentConfig.Language || languageVersion != TextManager.LanguageVersion; } protected static bool MustRetrieveValue(LocalizedString str) //this can be called by derived classes diff --git a/Barotrauma/BarotraumaShared/SharedSource/Text/LocalizedString/TagLString.cs b/Barotrauma/BarotraumaShared/SharedSource/Text/LocalizedString/TagLString.cs index 0056fc9da..7c8ede811 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Text/LocalizedString/TagLString.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Text/LocalizedString/TagLString.cs @@ -54,10 +54,10 @@ namespace Barotrauma return (loaded ? candidates.GetRandomUnsynced() : "", loaded); } - var (value, loaded) = tryLoad(language); + var (value, loaded) = tryLoad(Language); loadedSuccessfully = loaded ? LoadedSuccessfully.Yes : LoadedSuccessfully.No; cachedValue = value; - if (!loaded && language != TextManager.DefaultLanguage) + if (!loaded && Language != TextManager.DefaultLanguage) { (value, _) = tryLoad(TextManager.DefaultLanguage); cachedValue = value; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Text/TextManager.cs b/Barotrauma/BarotraumaShared/SharedSource/Text/TextManager.cs index 78cc321f7..f4bd75f05 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Text/TextManager.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Text/TextManager.cs @@ -20,6 +20,8 @@ namespace Barotrauma public static class TextManager { + public static bool DebugDraw; + public readonly static LanguageIdentifier DefaultLanguage = "English".ToLanguageIdentifier(); public readonly static ConcurrentDictionary> TextPacks = new ConcurrentDictionary>(); public static IEnumerable AvailableLanguages => TextPacks.Keys; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Upgrades/UpgradePrefab.cs b/Barotrauma/BarotraumaShared/SharedSource/Upgrades/UpgradePrefab.cs index f66cdcfe5..1aa43ae28 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Upgrades/UpgradePrefab.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Upgrades/UpgradePrefab.cs @@ -43,9 +43,9 @@ namespace Barotrauma } } - public int GetBuyprice(int level, Location? location = null) + public int GetBuyPrice(int level, Location? location = null) { - int maxLevel = Prefab.MaxLevel; + int maxLevel = Prefab.GetMaxLevelForCurrentSub(); if (level > maxLevel) { maxLevel = level; } @@ -209,9 +209,17 @@ namespace Barotrauma { if (type is MaxLevelModType.Invalid) { return false; } + int subTier = sub.Tier; + if (GameMain.GameSession?.Campaign?.CampaignMetadata is { } metadata) + { + int modifier = metadata.GetInt(new Identifier("tiermodifieroverride"), 0); + + subTier = Math.Max(modifier, subTier); + } + if (tierOrClass.TryGet(out int tier)) { - return sub.Tier == tier; + return subTier == tier; } if (tierOrClass.TryGet(out SubmarineClass subClass)) @@ -292,16 +300,10 @@ namespace Barotrauma onRemoveOverrideFile: null ); - private readonly int maxLevel; - - public int MaxLevel - { - get - { - Submarine? sub = GameMain.GameSession?.Submarine ?? Submarine.MainSub; - return sub is { Info: var info } ? GetMaxLevel(info) : maxLevel; - } - } + /// + /// Maximum upgrade level without taking submarine tier or class restrictions into account + /// + public readonly int MaxLevel; public LocalizedString Name { get; } @@ -343,7 +345,7 @@ namespace Barotrauma { Name = element.GetAttributeString("name", string.Empty)!; Description = element.GetAttributeString("description", string.Empty)!; - maxLevel = element.GetAttributeInt("maxlevel", 1); + MaxLevel = element.GetAttributeInt("maxlevel", 1); SuppressWarnings = element.GetAttributeBool("supresswarnings", false); HideInMenus = element.GetAttributeBool("hideinmenus", false); SourceElement = element; @@ -428,15 +430,33 @@ namespace Barotrauma .ToImmutableHashSet() ?? ImmutableHashSet.Empty; } + /// + /// Returns the maximum upgrade level for the current sub, taking tier and class restrictions into account + /// + public int GetMaxLevelForCurrentSub() + { + Submarine? sub = GameMain.GameSession?.Submarine ?? Submarine.MainSub; + return sub is { Info: var info } ? GetMaxLevel(info) : MaxLevel; + } + + /// + /// Returns the maximum upgrade level for the specified sub, taking tier and class restrictions into account + /// public int GetMaxLevel(SubmarineInfo info) { - int level = maxLevel; + int level = MaxLevel; foreach (UpgradeMaxLevelMod mod in MaxLevelsMods) { if (mod.AppliesTo(info)) { level = mod.GetLevelAfter(level); } } + if (GameMain.GameSession?.Campaign?.CampaignMetadata is { } metadata) + { + int modifier = metadata.GetInt(new Identifier($"tiermodifiers.{Identifier}"), 0); + level += modifier; + } + return level; } diff --git a/Barotrauma/BarotraumaShared/changelog.txt b/Barotrauma/BarotraumaShared/changelog.txt index 8e9e8e7ac..d8999df6b 100644 --- a/Barotrauma/BarotraumaShared/changelog.txt +++ b/Barotrauma/BarotraumaShared/changelog.txt @@ -1,3 +1,111 @@ +--------------------------------------------------------------------------------------------------------- +v0.20.0.0 +--------------------------------------------------------------------------------------------------------- + +Talent overhaul: +- Redesigned and rebalanced talents: lots of new talents, changes and balancing to existing ones and replacing some of the more broken ones with new ones. +- Redesigned talent tree structure: there's now a selection of "generic" talents, and after you've unlocked 4 of them, you can choose one specialization talent tree (meaning that you can no longer unlock all trees, but have to specialize in one). +- There's still a lot to test, balance and fix in the new talents, so all feedback and issue reports regarding the talents are much appreciated: + - Are there some talents that don't work as expected? + - Are the XP bonuses too large or too small? + - In general, how balanced are the talents, are there any that feel OP or too weak? + - Any inaccuracies or things to improve in the talent descriptions? + +Changes and additions: +- Added a button for opening the Steam Workshop to all tabs of the workshop menu. +- Added tooltips that explain how the bot spawn modes work to the server lobby. +- Made saline significantly less effective as a treatment for bloodloss to make blood packs more useful. +- Nerfed flak cannon's explosive ammo. +- Allow putting medium items (e.g. storage container) in medical and toxic cabinets. + +Multiplayer: +- Fixed "Input contains duplicate packages" error still occuring if you try to join a server that has empty content packages when you don't have those packages yourself. +- Fixed networking errors when the connection to the server is momentarily lost and then re-established. +- Added a cooldown to client name changes to prevent using it for spamming. +- Fixed bans issued with the "banaddress" command using a client's Steam ID not working. + +Bugfixes: +- Fixed Esc not closing the campaign interfaces (map, store, shipyard, etc) but opening the pause menu instead. +- Fixed bots sometimes firing in a random direction when they equip a weapon. Happened because the aim and shoot inputs could already be active when the bot switches from another item to the weapon (e.g. from underwater scooter to some gun). +- Fixed pirates sometimes being unable to operate multiple turrets at the same time (even if there's enough crew to operate multiple), and attempting to operate hardpoints. +- Fabricator chooses the available ingredient that's in the worst condition when there's multiple suitable ingredients available. +- Fixed characters falling off ladders when using aimable tools. +- Fixed currently selected mission being included in the mission count displayed on the campaign map (i.e. showing "1/2" when you're choosing a new destination at an empty location). +- Fixed inability to sit in cafeteria chairs. +- Fixed projectile impacts getting triggered by gravity spheres and other TriggerComponents (meaning you couldn't hit monsters near a gravity sphere). +- Fixed blood pack fabrication recipe outputting only one item. +- Fixed tutorial not progressing when inserting a welding fuel tank inside the welding tool straight away, rather than inventory first. +- Fixed PUCS not beeping when you're underwater without a tank if you're inside a hull that has oxygen in it. +- Fixed some issues in sonar AITargets which made monsters hear the sonar when they shouldn't: switching to passive would immediately make the current directional ping cover 360 degrees, and whether the ping was directional or not would actually depend on whether the previous ping was directional, not what the mode is now. +- Fixed items getting autofilled into non-interactable containers in wrecks and outposts. +- Fixes to ID card tag issues in wrecks (prevented accessing the secure containers with the ID cards looted from the corpses). +- Fixed verifying file integrity on Steam resetting the server settings file. +- Fixed crashing if you try to open an access-restricted directory in the file selection dialog. +- Fixed a typo in physicorium shell's damage config, causing it to not do bleeding damage. +- Fixed money gain/lose popups no longer showing in the campaign. +- Fixed bloodloss and drunkenness never fully healing, just dropping below the threshold at which the icon appears. Caused e.g. drunkenness and bloodloss to never fully go away, causing issues with some talent effects. +- Fixed bots always opening the door/hatch they're trying to repair. +- Fixed power indicator not rotating with batteries. +- Fixed lights on welding tools and plasma cutters emitting light the next round if the round ends while using them. +- Fixed Camel's airlock not draining fully. +- Fixed Berilia's bottom EDC not being wired to a supercapacitor and a loose wire between the flak cannon and the right supercapacitor. + +Modding: +- Fixed increasing an item's HealthMultiplier making the items appear damaged in existing subs/saves (e.g. if you doubled an item's maximum condition, the items would remain in the old maximum condition and appear 50% damaged). +- Fixed crashing if a talent is triggered when the character receives some affliction, and that talent applies the same affliction on the character. +- Fixed crashing if the ingredient of a fabrication recipe can't be found. +- Fixed inability to sync properties of ItemComponents that the item has multiple of (meaning that it was only possible to e.g. edit the light color of the item's first LightComponent if it has multiple). + +--------------------------------------------------------------------------------------------------------- +v0.19.14.0 +--------------------------------------------------------------------------------------------------------- + +- Fixed submarine upgrades getting clamped to the maximum of that upgrade between rounds, disregarding class/tier bonuses. + +--------------------------------------------------------------------------------------------------------- +v0.19.13.0 +--------------------------------------------------------------------------------------------------------- + +- Fixed "failed to find the end of the bit field after 100 reads" error when trying to join a server that has a large number of mods enabled. +- Fixed "Tandem Fire" talent causing a crash due to the changes in the previous version. + +--------------------------------------------------------------------------------------------------------- +v0.19.12.0 +--------------------------------------------------------------------------------------------------------- + +- Fixed submarine upgrades getting lost if you switch to a lower-tier sub that can't have as many levels of upgrades as the current sub, and then back again. +- Fixed some monster events not being as common/uncommon as intended. In more technical terms (which may be of interest to modders): the commonness defined as an attribute of an EventSet did nothing, making the event default to a commonness of 1. The commonnesses defined for specific level types worked correctly. +- Fixed clients getting stuck in a non-functional lobby if they happen to disconnect or get kicked back to the lobby at a specific point when loading a new round. +- Fixed large turret hardpoint origin being off, causing turrets installed on a large hardpoint to be misaligned. +- Attempt to fix crashing when disconnecting from the server you're hosting. +- Fixed Ctrl+Shift+S shortcut (quicksave) not working in the sub editor. +- Fixed toolbelts and storage containers in old subs going inside toolbelts. +- Fixed submarine tier resetting to default when reopening the sub editor's save dialog. +- Fixed sub editor not taking filename case into account when saving an existing sub: if you'd try to save the file with a different filename case, it'd ask about overwriting the existing sub, but save it as a new file even if you opt to overwrite. +- Fixes to Herja room names (use Engineering, Gunnery compartment, etc. labels), add camera to the front, with a periscope for the captain. +- Fixed non-purchaseable talent items not being available as extra cargo. +- Sorted extra cargo alphabetically + added a filter box. +- Fixed taking items that spawned inside another item (e.g. tanks in a diving mask) from NPCs spawned by an event not counting as stealing. +- Fixed characters falling off ladders when using aimable tools. +- Fixed money gain/lose popups no longer showing in the campaign. +- Fixed inability to manage the campaign if there's no-one with permissions alive. Previously we allowed anyone to manage the campaign if there's no-one with permissions present in the server, but that's not enough, because the players with permissions can't end the round if they're dead. Now if there's no-one with permissions alive, anyone is allowed to manage the campaign. +- If Select and Deselect have been bound to the same key, the deselect input is ignored when interacting with another item than the selected one. Prevents e.g. falling off ladders when trying to open a hatch when both Select and Deselect have been bound to E. +- Made it possible to enter a hostname (e.g. someserver.com) in the direct join prompt. +- Adjusted the size of the submarine list elements in the server lobby to reduce the amount of empty space on large resolutions. +- Fixed event texts for the "scan ruin" mission being in an incorrect language. +- Attachable items cannot be attached inside walls. +- Fixed distance at which you can attach items being slightly longer than the interact distance, making it possible to attach items out of reach. +- Fixed inability to turn when you're dual wielding melee weapons and attacking continuously. +- Fixed inability to cancel deconstruction if there's non-deconstructible items in the queue. +- Fixed local copy of a mod you're publishing not using the version number you've entered in the publish menu. +- Fixed crashing when trying to open the tab menu's character tab with a character who has no personality trait (may happen e.g. if you use a mod that adds custom personality traits and try to play that save without the mod). +- Fixed sourcerect issue in alien generator + decorative sprite not disappearing when the fuel rod is taken out. +- Fixed corrupted mods causing a nullref exception when autodetecting required mods in the sub editor. +- Fixed minerals not disappearing from mineral scanner if they get detached by something else than a character picking them up (e.g. by the destructible ice wall they're on breaking). +- Fixed event-specific metal crate deconstructing to steel. +- Fixed inability to join servers that have enabled multiple mods with identical content. +- Fixed tandem fire not working if there's a character between you and the other character on a periscope. + --------------------------------------------------------------------------------------------------------- v0.19.11.0 --------------------------------------------------------------------------------------------------------- diff --git a/Barotrauma/BarotraumaShared/serversettings.xml b/Barotrauma/BarotraumaShared/serversettings.xml deleted file mode 100644 index 482899fc2..000000000 --- a/Barotrauma/BarotraumaShared/serversettings.xml +++ /dev/null @@ -1,57 +0,0 @@ - - \ No newline at end of file diff --git a/Barotrauma/BarotraumaTest/INetSerializableStructTests.cs b/Barotrauma/BarotraumaTest/INetSerializableStructTests.cs index e319baede..fdd87cc18 100644 --- a/Barotrauma/BarotraumaTest/INetSerializableStructTests.cs +++ b/Barotrauma/BarotraumaTest/INetSerializableStructTests.cs @@ -29,7 +29,17 @@ namespace TestProject [Fact] public void TestBitField() { + // 0-length bitfield test + SerializeDeserializeBitField(Array.Empty()); + + // Normal bitfield test Prop.ForAll(SerializeDeserializeBitField).VerboseCheckThrowOnFailure(); + + // Large bitfield test + Prop.ForAll( + Arb.Generate().Resize(1000).Where(arr => arr.Length >= 800) + .ToArbitrary(), + SerializeDeserializeBitField).VerboseCheckThrowOnFailure(); } [Fact] @@ -278,7 +288,7 @@ namespace TestProject private static void SerializeDeserializeBitField(bool[] arg) { ReadWriteMessage msg = new ReadWriteMessage(); - IWritableBitField bitFieldWrite = new WriteOnlyBitField(); + WriteOnlyBitField bitFieldWrite = new WriteOnlyBitField(); foreach (bool b in arg) { @@ -288,7 +298,7 @@ namespace TestProject bitFieldWrite.WriteToMessage(msg); msg.BitPosition = 0; - IReadableBitField bitFieldRead = new ReadOnlyBitField(msg); + ReadOnlyBitField bitFieldRead = new ReadOnlyBitField(msg); foreach (bool b in arg) { From 93856c5f95ddd2b7a9a0402768e25a79935d1f5e Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Sat, 29 Oct 2022 17:44:54 +0300 Subject: [PATCH 02/23] Update bug_report.yml --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index a497ba770..a2637396c 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -53,6 +53,7 @@ body: description: Which version of the game did the bug happen in? You can see the current version number in the bottom left corner of your screen in the main menu. options: - 0.19.14.0 + - 0.20.0.0 (Unstable) - Other validations: required: true From 68493f845a25d37bcce1a765188f9216b15eba4f Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Tue, 1 Nov 2022 19:36:51 +0200 Subject: [PATCH 03/23] Update bug_report.yml --- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index a2637396c..b23c6c385 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -53,7 +53,7 @@ body: description: Which version of the game did the bug happen in? You can see the current version number in the bottom left corner of your screen in the main menu. options: - 0.19.14.0 - - 0.20.0.0 (Unstable) + - 0.20.1.0 (Unstable) - Other validations: required: true From c8b4869e049f7f1bb89caf1b3ac507e4be7f5256 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Thu, 3 Nov 2022 20:43:22 +0200 Subject: [PATCH 04/23] Update bug_report.yml --- .github/ISSUE_TEMPLATE/bug_report.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index b23c6c385..6e1ba4251 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -54,6 +54,7 @@ body: options: - 0.19.14.0 - 0.20.1.0 (Unstable) + - Faction test branch - Other validations: required: true From a03f043b475ab9d91bd941bf08cc17d8b2ee6218 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Fri, 4 Nov 2022 19:34:23 +0200 Subject: [PATCH 05/23] Update bug_report.yml --- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 6e1ba4251..bb17c0056 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -53,7 +53,7 @@ body: description: Which version of the game did the bug happen in? You can see the current version number in the bottom left corner of your screen in the main menu. options: - 0.19.14.0 - - 0.20.1.0 (Unstable) + - 0.20.3.0 (Unstable) - Faction test branch - Other validations: From 54712b5dc90941122f4d730375f9ad00c52412a1 Mon Sep 17 00:00:00 2001 From: Markus Isberg <3e849f2e5c@pm.me> Date: Fri, 11 Nov 2022 17:57:23 +0200 Subject: [PATCH 06/23] Build 0.20.4.0 --- .../Characters/AI/EnemyAIController.cs | 4 +- .../ClientSource/Characters/Character.cs | 19 +- .../ClientSource/Characters/CharacterHUD.cs | 15 +- .../ClientSource/Characters/CharacterInfo.cs | 30 +- .../Characters/Health/CharacterHealth.cs | 233 +++-- .../ClientSource/DebugConsole.cs | 13 +- .../ClientSource/EventInput/EventInput.cs | 20 + .../EventInput/KeyboardDispatcher.cs | 50 +- .../EventActions/CheckObjectiveAction.cs | 37 + .../Events/EventActions/ConversationAction.cs | 5 +- .../Events/EventActions/MessageBoxAction.cs | 8 +- .../EventActions/TutorialSegmentAction.cs | 53 +- .../BarotraumaClient/ClientSource/GUI/GUI.cs | 32 +- .../ClientSource/GUI/GUIComponent.cs | 5 +- .../ClientSource/GUI/GUIDropDown.cs | 4 + .../ClientSource/GUI/GUIListBox.cs | 4 + .../ClientSource/GUI/GUIMessageBox.cs | 9 +- .../ClientSource/GUI/GUITextBlock.cs | 19 +- .../ClientSource/GUI/GUITextBox.cs | 51 +- .../ClientSource/GUI/GUITextBoxIME.cs | 86 ++ .../ClientSource/GUI/HUDLayoutSettings.cs | 8 +- .../ClientSource/GUI/IMEPreviewText.cs | 54 + .../ClientSource/GUI/MedicalClinicUI.cs | 84 +- .../ClientSource/GUI/Store.cs | 22 +- .../ClientSource/GUI/SubmarineSelection.cs | 14 +- .../ClientSource/GUI/TabMenu.cs | 29 +- .../ClientSource/GUI/TalentMenu.cs | 331 ++++-- .../ClientSource/GUI/UpgradeStore.cs | 7 +- .../BarotraumaClient/ClientSource/GameMain.cs | 10 +- .../GameSession/GameModes/CampaignMode.cs | 19 +- .../GameModes/SinglePlayerCampaign.cs | 4 +- .../GameModes/Tutorials/Tutorial.cs | 586 ++--------- .../GameModes/Tutorials/TutorialMode.cs | 8 +- .../ClientSource/GameSession/GameSession.cs | 7 +- .../ClientSource/GameSession/HintManager.cs | 36 +- .../ClientSource/GameSession/MedicalClinic.cs | 113 +- .../GameSession/ObjectiveManager.cs | 599 +++++++++++ .../ClientSource/Items/CharacterInventory.cs | 4 +- .../Items/Components/Holdable/Sprayer.cs | 70 +- .../Items/Components/ItemContainer.cs | 73 +- .../Items/Components/LightComponent.cs | 2 +- .../Items/Components/Machines/Sonar.cs | 4 +- .../Items/Components/Machines/Steering.cs | 29 +- .../Items/Components/StatusHUD.cs | 2 +- .../ClientSource/Items/Components/Wearable.cs | 14 +- .../ClientSource/Items/Inventory.cs | 8 +- .../ClientSource/Items/ItemPrefab.cs | 60 +- .../Levels/LevelObjects/LevelObjectManager.cs | 7 +- .../ClientSource/Map/Map/Map.cs | 57 +- .../ClientSource/Networking/GameClient.cs | 9 +- .../ClientSource/Networking/ServerSettings.cs | 49 +- .../BarotraumaClient/ClientSource/Program.cs | 69 +- .../CampaignSetupUI/CampaignSetupUI.cs | 9 +- .../MultiPlayerCampaignSetupUI.cs | 2 +- .../SinglePlayerCampaignSetupUI.cs | 9 +- .../CharacterEditor/CharacterEditorScreen.cs | 20 +- .../Screens/CharacterEditor/Wizard.cs | 266 +---- .../ClientSource/Screens/MainMenuScreen.cs | 18 +- .../ClientSource/Screens/SubEditorScreen.cs | 11 +- .../ClientSource/Settings/SettingsMenu.cs | 86 +- .../ClientSource/Steam/Lobby.cs | 21 +- .../ClientSource/Utils/SpreadsheetExport.cs | 2 +- .../BarotraumaClient/LinuxClient.csproj | 4 +- Barotrauma/BarotraumaClient/MacClient.csproj | 3 +- .../BarotraumaClient/WindowsClient.csproj | 4 +- .../BarotraumaServer/LinuxServer.csproj | 2 +- Barotrauma/BarotraumaServer/MacServer.csproj | 2 +- .../Characters/CharacterNetworking.cs | 7 +- .../ServerSource/Events/EventManager.cs | 2 +- .../ServerSource/GameSession/MedicalClinic.cs | 25 +- .../ServerSource/Networking/GameServer.cs | 1 + .../ServerSource/Networking/ServerSettings.cs | 1 - .../BarotraumaServer/WindowsServer.csproj | 2 +- .../Data/campaignsettings.xml | 3 + .../Data/permissionpresets.xml | 2 +- .../Characters/AI/EnemyAIController.cs | 50 +- .../Characters/AI/HumanAIController.cs | 26 +- .../AI/Objectives/AIObjectiveRescue.cs | 4 +- .../Animation/HumanoidAnimController.cs | 2 - .../SharedSource/Characters/Attack.cs | 15 +- .../SharedSource/Characters/Character.cs | 62 +- .../SharedSource/Characters/CharacterInfo.cs | 6 +- .../Health/Afflictions/Affliction.cs | 2 +- .../Health/Afflictions/AfflictionPrefab.cs | 118 ++- .../Characters/Health/CharacterHealth.cs | 6 +- .../Characters/Health/DamageModifier.cs | 30 +- .../SharedSource/Characters/Limb.cs | 2 +- .../Characters/Params/CharacterParams.cs | 3 + .../AbilityConditionLocation.cs | 3 +- .../AbilityConditionMission.cs | 13 +- .../AbilityConditionHasItem.cs | 8 +- .../AbilityConditionNearbyCharacterCount.cs | 2 +- .../CharacterAbilityApplyStatusEffects.cs | 2 +- .../CharacterAbilityGiveItemStatToTags.cs | 2 + ...haracterAbilityGiveTalentPointsToAllies.cs | 25 + .../CharacterAbilityModifyAttackData.cs | 1 - .../CharacterAbilitySetMetadataInt.cs | 5 + ...erAbilityUnlockApprenticeshipTalentTree.cs | 2 + .../CharacterAbilityGroupInterval.cs | 23 +- .../Characters/Talents/TalentTree.cs | 55 +- .../ContentPackage/ContentPackage.cs | 2 +- .../ContentManagement/Identifier.cs | 1 + .../SharedSource/DebugConsole.cs | 2 +- .../BarotraumaShared/SharedSource/Enums.cs | 1 + .../Events/EventActions/CheckItemAction.cs | 5 +- .../Events/EventActions/CheckMissionAction.cs | 58 ++ .../EventActions/CheckObjectiveAction.cs | 15 + .../Events/EventActions/CheckOrderAction.cs | 69 +- .../EventActions/CheckPurchasedItemsAction.cs | 87 ++ .../Events/EventActions/ConversationAction.cs | 75 +- .../Events/EventActions/MessageBoxAction.cs | 6 + .../EventActions/NPCChangeTeamAction.cs | 2 +- .../Events/EventActions/SpawnAction.cs | 11 +- .../Events/EventActions/TagAction.cs | 21 +- .../Events/EventActions/TriggerAction.cs | 119 ++- .../EventActions/TutorialSegmentAction.cs | 6 + .../SharedSource/Events/EventManager.cs | 92 +- .../SharedSource/Events/EventSet.cs | 35 + .../SharedSource/Events/Missions/Mission.cs | 23 +- .../Extensions/IEnumerableExtensions.cs | 2 + .../SharedSource/GameSession/Data/Factions.cs | 27 +- .../GameSession/GameModes/CampaignMode.cs | 1 + .../GameSession/GameModes/CampaignSettings.cs | 7 +- .../GameModes/MultiPlayerCampaign.cs | 6 +- .../GameModes/Tutorials/TutorialPrefab.cs | 15 + .../SharedSource/GameSession/GameSession.cs | 4 + .../SharedSource/GameSession/MedicalClinic.cs | 70 +- .../SharedSource/Items/CharacterInventory.cs | 4 + .../Items/Components/Holdable/Holdable.cs | 48 +- .../Items/Components/Holdable/MeleeWeapon.cs | 57 +- .../Items/Components/Holdable/Propulsion.cs | 19 +- .../Items/Components/Holdable/RangedWeapon.cs | 53 +- .../Items/Components/Holdable/Throwable.cs | 71 +- .../Items/Components/ItemContainer.cs | 157 ++- .../Components/Machines/Deconstructor.cs | 6 + .../Items/Components/Machines/Fabricator.cs | 23 +- .../Items/Components/Machines/MiniMap.cs | 12 +- .../Items/Components/Machines/Sonar.cs | 10 +- .../Items/Components/Machines/Steering.cs | 5 + .../Items/Components/Projectile.cs | 41 +- .../Items/Components/Signal/LightComponent.cs | 4 +- .../SharedSource/Items/Item.cs | 23 +- .../SharedSource/Items/ItemPrefab.cs | 4 +- .../SharedSource/Items/RelatedItem.cs | 40 +- .../SharedSource/Map/Levels/Biome.cs | 55 + .../SharedSource/Map/Levels/Level.cs | 4 +- .../SharedSource/Map/Levels/LevelData.cs | 10 +- .../Levels/LevelObjects/LevelObjectPrefab.cs | 7 + .../Map/Levels/LevelObjects/LevelTrigger.cs | 2 +- .../SharedSource/Map/Map/Location.cs | 30 +- .../SharedSource/Map/Map/LocationType.cs | 22 + .../SharedSource/Map/Map/Map.cs | 132 ++- .../Map/Outposts/OutpostGenerationParams.cs | 3 + .../Map/Outposts/OutpostGenerator.cs | 23 +- .../SharedSource/Map/PriceInfo.cs | 40 +- .../SharedSource/Map/Submarine.cs | 3 +- .../SharedSource/Map/SubmarineInfo.cs | 5 +- .../Networking/ClientPermissions.cs | 3 +- .../SharedSource/Networking/ServerSettings.cs | 18 +- .../SharedSource/Settings/GameSettings.cs | 14 +- .../StatusEffects/PropertyConditional.cs | 66 +- .../StatusEffects/StatusEffect.cs | 10 +- .../SharedSource/Steam/Workshop.cs | 2 +- .../SharedSource/Upgrades/UpgradePrefab.cs | 39 +- .../SharedSource/Utils/MathUtils.cs | 2 + .../SharedSource/Utils/NetCollection.cs | 17 + .../SharedSource/Utils/SaveUtil.cs | 70 +- .../SharedSource/Utils/ToolBox.cs | 117 ++- Barotrauma/BarotraumaShared/changelog.txt | 152 ++- Barotrauma/BarotraumaShared/hintmanager.xml | 5 + .../BarotraumaTest/GenericToolBoxTests.cs | 55 + Barotrauma/BarotraumaTest/TestProject.cs | 6 + Libraries/ImeSharp/IMEString.cs | 201 ++++ .../ImeSharp/IMETextCompositionEventArgs.cs | 61 ++ Libraries/ImeSharp/IMETextInputEventArgs.cs | 12 + Libraries/ImeSharp/ImeSharp.csproj | 30 + Libraries/ImeSharp/Imm32Manager.cs | 349 +++++++ .../ImeSharp/ImmCompositionResultHandler.cs | 119 +++ Libraries/ImeSharp/InputMethod.cs | 246 +++++ Libraries/ImeSharp/Native/NativeMethods.cs | 149 +++ .../ImeSharp/Native/NativeMethodsIMM32.cs | 156 +++ Libraries/ImeSharp/Native/NativeValues.cs | 95 ++ Libraries/ImeSharp/SafeSystemMetrics.cs | 58 ++ Libraries/ImeSharp/TextInputCallbacks.cs | 6 + Libraries/ImeSharp/TextServicesContext.cs | 374 +++++++ Libraries/ImeSharp/TextServicesLoader.cs | 338 ++++++ Libraries/ImeSharp/TextStore.cs | 963 ++++++++++++++++++ .../Src/MonoGame.Framework/GameWindow.cs | 10 + ...onoGame.Framework.Linux.NetStandard.csproj | 2 + ...onoGame.Framework.MacOS.NetStandard.csproj | 2 + ...oGame.Framework.Windows.NetStandard.csproj | 2 + .../Src/MonoGame.Framework/SDL/SDL2.cs | 16 + .../MonoGame.Framework/SDL/SDLGamePlatform.cs | 48 +- .../MonoGame.Framework/SDL/SDLGameWindow.cs | 11 + .../TextEditingEventArgs.cs | 17 + .../Src/MonoGame.Framework/TextInput.cs | 29 + .../SDL/Linux/x64/libSDL2-2.0.so.0 | Bin 1525760 -> 1737448 bytes .../SDL/Linux/x86/libSDL2-2.0.so.0 | Bin 1600880 -> 1818724 bytes LinuxSolution.sln | 11 +- MacSolution.sln | 11 +- WindowsSolution.sln | 17 +- 201 files changed, 7618 insertions(+), 2020 deletions(-) create mode 100644 Barotrauma/BarotraumaClient/ClientSource/Events/EventActions/CheckObjectiveAction.cs create mode 100644 Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBoxIME.cs create mode 100644 Barotrauma/BarotraumaClient/ClientSource/GUI/IMEPreviewText.cs create mode 100644 Barotrauma/BarotraumaClient/ClientSource/GameSession/ObjectiveManager.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGiveTalentPointsToAllies.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/CheckMissionAction.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/CheckObjectiveAction.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/CheckPurchasedItemsAction.cs create mode 100644 Barotrauma/BarotraumaShared/SharedSource/Utils/NetCollection.cs create mode 100644 Barotrauma/BarotraumaTest/GenericToolBoxTests.cs create mode 100644 Libraries/ImeSharp/IMEString.cs create mode 100644 Libraries/ImeSharp/IMETextCompositionEventArgs.cs create mode 100644 Libraries/ImeSharp/IMETextInputEventArgs.cs create mode 100644 Libraries/ImeSharp/ImeSharp.csproj create mode 100644 Libraries/ImeSharp/Imm32Manager.cs create mode 100644 Libraries/ImeSharp/ImmCompositionResultHandler.cs create mode 100644 Libraries/ImeSharp/InputMethod.cs create mode 100644 Libraries/ImeSharp/Native/NativeMethods.cs create mode 100644 Libraries/ImeSharp/Native/NativeMethodsIMM32.cs create mode 100644 Libraries/ImeSharp/Native/NativeValues.cs create mode 100644 Libraries/ImeSharp/SafeSystemMetrics.cs create mode 100644 Libraries/ImeSharp/TextInputCallbacks.cs create mode 100644 Libraries/ImeSharp/TextServicesContext.cs create mode 100644 Libraries/ImeSharp/TextServicesLoader.cs create mode 100644 Libraries/ImeSharp/TextStore.cs create mode 100644 Libraries/MonoGame.Framework/Src/MonoGame.Framework/TextEditingEventArgs.cs create mode 100644 Libraries/MonoGame.Framework/Src/MonoGame.Framework/TextInput.cs mode change 100644 => 100755 Libraries/MonoGame.Framework/Src/ThirdParty/Dependencies/SDL/Linux/x64/libSDL2-2.0.so.0 mode change 100644 => 100755 Libraries/MonoGame.Framework/Src/ThirdParty/Dependencies/SDL/Linux/x86/libSDL2-2.0.so.0 diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/AI/EnemyAIController.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/AI/EnemyAIController.cs index c43d3f26b..56cb2ac83 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/AI/EnemyAIController.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/AI/EnemyAIController.cs @@ -47,8 +47,8 @@ namespace Barotrauma GUI.DrawRectangle(spriteBatch, wallTargetPos - new Vector2(10.0f, 10.0f), new Vector2(20.0f, 20.0f), Color.Orange, false); GUI.DrawLine(spriteBatch, pos, wallTargetPos, Color.Orange * 0.5f, 0, 5); } - GUI.DrawString(spriteBatch, pos - Vector2.UnitY * 60.0f, $"{SelectedAiTarget.Entity} ({GetTargetMemory(SelectedAiTarget, false)?.Priority.FormatZeroDecimal()})", GUIStyle.Red, Color.Black); - GUI.DrawString(spriteBatch, pos - Vector2.UnitY * 40.0f, $"({targetValue.FormatZeroDecimal()})", GUIStyle.Red, Color.Black); + GUI.DrawString(spriteBatch, pos - Vector2.UnitY * 60.0f, $"{SelectedAiTarget.Entity}", GUIStyle.Red, Color.Black); + GUI.DrawString(spriteBatch, pos - Vector2.UnitY * 40.0f, $"{targetValue.FormatZeroDecimal()} (M: {SelectedTargetMemory?.Priority.FormatZeroDecimal()}, P: {SelectedTargetingParams?.Priority.FormatZeroDecimal()})", GUIStyle.Red, Color.Black); } /*GUIStyle.Font.DrawString(spriteBatch, targetValue.ToString(), pos - Vector2.UnitY * 80.0f, GUIStyle.Red); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/Character.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/Character.cs index 99cd9bd2d..7cbb4e91d 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/Character.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/Character.cs @@ -981,7 +981,24 @@ namespace Barotrauma } if (IsDead) { return; } - + + var healthBarMode = GameMain.NetworkMember?.ServerSettings.ShowEnemyHealthBars ?? GameSettings.CurrentConfig.ShowEnemyHealthBars; + if (healthBarMode != EnemyHealthBarMode.ShowAll) + { + if (Controlled == null) + { + if (!IsOnPlayerTeam) { return; } + } + else + { + if (!HumanAIController.IsFriendly(Controlled, this) || + (AIController is HumanAIController humanAi && humanAi.ObjectiveManager.CurrentObjective is AIObjectiveCombat combatObjective && HumanAIController.IsFriendly(Controlled, combatObjective.Enemy))) + { + return; + } + } + } + if (CharacterHealth.DisplayedVitality < MaxVitality * 0.98f && hudInfoVisible) { hudInfoAlpha = Math.Max(hudInfoAlpha, Math.Min(CharacterHealth.DamageOverlayTimer, 1.0f)); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterHUD.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterHUD.cs index df6381f18..44c9ab4ac 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterHUD.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterHUD.cs @@ -1,6 +1,5 @@ using Barotrauma.Extensions; using Barotrauma.Items.Components; -using Barotrauma.Tutorials; using FarseerPhysics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; @@ -114,7 +113,7 @@ namespace Barotrauma return character?.Inventory != null && !character.Removed && !character.IsKnockedDown && - (controller?.User != character || !controller.HideHUD) && + (controller?.User != character || !controller.HideHUD || Screen.Selected.IsEditor) && !IsCampaignInterfaceOpen && !ConversationAction.FadeScreenToBlack; } @@ -548,7 +547,7 @@ namespace Barotrauma if (CharacterHealth.OpenHealthWindow == character.SelectedCharacter.CharacterHealth) { character.SelectedCharacter.CharacterHealth.Alignment = Alignment.Left; - character.SelectedCharacter.CharacterHealth.DrawStatusHUD(spriteBatch); + //character.SelectedCharacter.CharacterHealth.DrawStatusHUD(spriteBatch); } } else if (character.Inventory != null) @@ -644,6 +643,12 @@ namespace Barotrauma { if (character == null || character.IsDead || character.Removed) { return; } + var healthBarMode = GameMain.NetworkMember?.ServerSettings.ShowEnemyHealthBars ?? GameSettings.CurrentConfig.ShowEnemyHealthBars; + if (healthBarMode == EnemyHealthBarMode.HideAll) + { + return; + } + var existingBar = bossHealthBars.Find(b => b.Character == character); if (existingBar != null) { @@ -669,6 +674,8 @@ namespace Barotrauma public static void UpdateBossHealthBars(float deltaTime) { + var healthBarMode = GameMain.NetworkMember?.ServerSettings.ShowEnemyHealthBars ?? GameSettings.CurrentConfig.ShowEnemyHealthBars; + for (int i = 0; i < bossHealthBars.Count; i++) { var bossHealthBar = bossHealthBars[i]; @@ -710,7 +717,7 @@ namespace Barotrauma for (int i = bossHealthBars.Count - 1; i >= 0 ; i--) { var bossHealthBar = bossHealthBars[i]; - if (bossHealthBar.FadeTimer <= 0) + if (bossHealthBar.FadeTimer <= 0 || healthBarMode == EnemyHealthBarMode.HideAll) { bossHealthBar.SideContainer.Parent?.RemoveChild(bossHealthBar.SideContainer); bossHealthBar.TopContainer.Parent?.RemoveChild(bossHealthBar.TopContainer); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterInfo.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterInfo.cs index ab2942b42..b472749ff 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterInfo.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/CharacterInfo.cs @@ -78,7 +78,7 @@ namespace Barotrauma Color? nameColor = null; if (Job != null) { nameColor = Job.Prefab.UIColor; } - GUITextBlock characterNameBlock = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), headerTextArea.RectTransform), ToolBox.LimitString(Name, GUIStyle.Font, headerTextArea.Rect.Width), textColor: nameColor, font: GUIStyle.Font) + GUITextBlock characterNameBlock = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.25f), headerTextArea.RectTransform), ToolBox.LimitString(Name, GUIStyle.Font, headerTextArea.Rect.Width), textColor: nameColor, font: GUIStyle.Font) { ForceUpperCase = ForceUpperCase.Yes, Padding = Vector4.Zero @@ -92,8 +92,8 @@ namespace Barotrauma } if (Job != null) - { - new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), headerTextArea.RectTransform), Job.Name, textColor: Job.Prefab.UIColor, font: font) + { + new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.25f), headerTextArea.RectTransform), Job.Name, textColor: Job.Prefab.UIColor, font: font) { Padding = Vector4.Zero }; @@ -101,7 +101,7 @@ namespace Barotrauma if (PersonalityTrait != null) { - new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), headerTextArea.RectTransform), + new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.25f), headerTextArea.RectTransform), TextManager.AddPunctuation(':', TextManager.Get("PersonalityTrait"), PersonalityTrait.DisplayName), font: font) { @@ -109,7 +109,23 @@ namespace Barotrauma }; } - if (Job != null && (Character == null || !Character.IsDead)) + GUIButton manageTalentButton = new GUIButton(new RectTransform(new Vector2(1.0f, 0.25f), headerTextArea.RectTransform), + text: TextManager.Get("ClientPermission.ManageBotTalents"), style: "GUIButtonSmall") + { + Enabled = false, + UserData = TalentMenu.ManageBotTalentsButtonUserData, + TextBlock = + { + AutoScaleHorizontal = true + } + }; + + if (TalentMenu.CanManageTalents(this)) + { + manageTalentButton.Enabled = true; + } + + if (Job != null && Character is not { IsDead: true }) { var skillsArea = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.63f), paddedFrame.RectTransform, Anchor.BottomCenter, Pivot.BottomCenter)) { @@ -120,7 +136,7 @@ namespace Barotrauma skills.Sort((s1, s2) => -s1.Level.CompareTo(s2.Level)); new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), skillsArea.RectTransform), TextManager.AddPunctuation(':', TextManager.Get("skills"), string.Empty), font: font) { Padding = Vector4.Zero }; - + foreach (Skill skill in skills) { Color textColor = Color.White * (0.5f + skill.Level / 200.0f); @@ -144,7 +160,7 @@ namespace Barotrauma } } } - else if (Character != null && Character.IsDead) + else if (Character is { IsDead: true }) { var deadArea = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.63f), paddedFrame.RectTransform, Anchor.BottomCenter, Pivot.BottomCenter)) { diff --git a/Barotrauma/BarotraumaClient/ClientSource/Characters/Health/CharacterHealth.cs b/Barotrauma/BarotraumaClient/ClientSource/Characters/Health/CharacterHealth.cs index 983906c72..ac3cbf968 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Characters/Health/CharacterHealth.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Characters/Health/CharacterHealth.cs @@ -89,11 +89,23 @@ namespace Barotrauma private int selectedLimbIndex = -1; private LimbHealth currentDisplayedLimb; + /// + /// Container for the icons above the health bar + /// + private GUIComponent afflictionIconContainer; + + private GUIButton showHiddenAfflictionsButton; + + /// + /// Container for passive afflictions that have been hidden from afflictionIconContainer + /// + private GUIComponent hiddenAfflictionIconContainer; + private GUIProgressBar healthWindowHealthBar; private GUIProgressBar healthWindowHealthBarShadow; private GUITextBlock characterName; - private GUIListBox afflictionIconContainer; + private GUIListBox afflictionIconList; private GUILayoutGroup treatmentLayout; private GUIListBox recommendedTreatmentContainer; @@ -331,7 +343,7 @@ namespace Barotrauma deadIndicator.AutoScaleHorizontal = true; } - afflictionIconContainer = new GUIListBox(new RectTransform(new Vector2(0.25f, 1.0f), characterIndicatorArea.RectTransform), style: null); + afflictionIconList = new GUIListBox(new RectTransform(new Vector2(0.25f, 1.0f), characterIndicatorArea.RectTransform), style: null); new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.1f), healthWindowVerticalLayout.RectTransform), TextManager.Get("SuitableTreatments"), font: GUIStyle.SubHeadingFont, textAlignment: Alignment.BottomCenter); @@ -379,6 +391,25 @@ namespace Barotrauma Enabled = true }; + afflictionIconContainer = new GUILayoutGroup( + HUDLayoutSettings.ToRectTransform(HUDLayoutSettings.HealthBarAfflictionArea, GUI.Canvas), + isHorizontal: true, childAnchor: Anchor.CenterRight) + { + AbsoluteSpacing = GUI.IntScale(5) + }; + + showHiddenAfflictionsButton = new GUIButton(new RectTransform(new Point(afflictionIconContainer.Rect.Height), afflictionIconContainer.RectTransform), style: "GUIButtonCircular") + { + CanBeFocused = false + }; + + hiddenAfflictionIconContainer = new GUILayoutGroup( + HUDLayoutSettings.ToRectTransform(HUDLayoutSettings.HealthBarAfflictionArea, GUI.Canvas), + isHorizontal: true, childAnchor: Anchor.CenterRight) + { + AbsoluteSpacing = GUI.IntScale(5) + }; + UpdateAlignment(); SuicideButton = new GUIButton(new RectTransform(new Vector2(0.1f, 0.02f), GUI.Canvas, Anchor.TopCenter) @@ -596,7 +627,7 @@ namespace Barotrauma public void UpdateHUD(float deltaTime) { - if (GUI.DisableHUD) return; + if (GUI.DisableHUD) { return; } if (openHealthWindow != null) { if (openHealthWindow != Character.Controlled?.CharacterHealth && openHealthWindow != Character.Controlled?.SelectedCharacter?.CharacterHealth) @@ -700,6 +731,8 @@ namespace Barotrauma distortTimer = 0.0f; } + UpdateStatusHUD(deltaTime); + if (PlayerInput.KeyHit(InputType.Health) && GUI.KeyboardDispatcher.Subscriber == null && Character.Controlled.AllowInput && !toggledThisFrame) { @@ -726,9 +759,9 @@ namespace Barotrauma OpenHealthWindow = null; } - foreach (GUIComponent afflictionIcon in afflictionIconContainer.Content.Children) + foreach (GUIComponent afflictionIcon in afflictionIconList.Content.Children) { - if (!(afflictionIcon.UserData is Affliction affliction)) { continue; } + if (afflictionIcon.UserData is not Affliction affliction) { continue; } if (affliction.AppliedAsFailedTreatmentTime > Timing.TotalTime - 1.0 && afflictionIcon.FlashTimer <= 0.0f) { afflictionIcon.Flash(GUIStyle.Red); @@ -900,7 +933,7 @@ namespace Barotrauma healthBarHolder.CanBeFocused = healthBar.CanBeFocused = healthBarShadow.CanBeFocused = !Character.ShouldLockHud(); if (Character.AllowInput && UseHealthWindow && !Character.DisableHealthWindow && healthBar.Enabled && healthBar.CanBeFocused && - (GUI.IsMouseOn(healthBar) || highlightedAfflictionIcon != null) && Inventory.SelectedSlot == null) + (GUI.IsMouseOn(healthBar) || GUI.MouseOn?.UserData is AfflictionPrefab) && Inventory.SelectedSlot == null) { healthBar.State = GUIComponent.ComponentState.Hover; if (PlayerInput.PrimaryMouseButtonClicked()) @@ -960,7 +993,12 @@ namespace Barotrauma } else if (Character.Controlled == Character && !CharacterHUD.IsCampaignInterfaceOpen) { - healthBarHolder.AddToGUIUpdateList(); + healthBarHolder.AddToGUIUpdateList(); + afflictionIconContainer.AddToGUIUpdateList(); + if (hiddenAfflictionIconContainer.Visible) + { + hiddenAfflictionIconContainer.AddToGUIUpdateList(); + } } if (SuicideButton.Visible && Character == Character.Controlled) { @@ -989,7 +1027,7 @@ namespace Barotrauma if (affliction.Prefab.AfflictionOverlay != null) { Sprite ScreenAfflictionOverlay = affliction.Prefab.AfflictionOverlay; - ScreenAfflictionOverlay?.Draw(spriteBatch, Vector2.Zero, Color.White * (affliction.GetAfflictionOverlayMultiplier()), Vector2.Zero, 0.0f, + ScreenAfflictionOverlay?.Draw(spriteBatch, Vector2.Zero, Color.White * affliction.GetAfflictionOverlayMultiplier(), Vector2.Zero, 0.0f, new Vector2(GameMain.GraphicsWidth / DamageOverlay.size.X, GameMain.GraphicsHeight / DamageOverlay.size.Y)); } } @@ -1021,94 +1059,133 @@ namespace Barotrauma // If manning a turret the portrait doesn't get rendered so we push the health bar to remove the empty gap healthBarHolder.RectTransform.ScreenSpaceOffset = Character.ShouldLockHud() ? new Point(0, HUDLayoutSettings.PortraitArea.Height) : Point.Zero; } - - DrawStatusHUD(spriteBatch); } - private (Affliction Affliction, LocalizedString NameToolTip)? highlightedAfflictionIcon = null; - public void DrawStatusHUD(SpriteBatch spriteBatch) + //private (Affliction Affliction, LocalizedString NameToolTip)? highlightedAfflictionIcon = null; + + private readonly List statusIcons = new List(); + private readonly Dictionary statusIconVisibleTime = new Dictionary(); + private float hideStatusIconDelay = 5.0f; + + public void UpdateStatusHUD(float deltaTime) { - highlightedAfflictionIcon = null; - //Rectangle interactArea = healthBar.Rect; if (Character.Controlled?.SelectedCharacter == null && openHealthWindow == null) { - var statusIcons = new List<(Affliction Affliction, LocalizedString Warning)>(); + statusIcons.Clear(); if (Character.InPressure) { - statusIcons.Add((pressureAffliction, TextManager.Get("PressureHUDWarning"))); + statusIcons.Add(pressureAffliction); } if (Character.CurrentHull != null && Character.OxygenAvailable < LowOxygenThreshold && oxygenLowAffliction.Strength < oxygenLowAffliction.Prefab.ShowIconThreshold) { - statusIcons.Add((oxygenLowAffliction, TextManager.Get("OxygenHUDWarning"))); + statusIcons.Add(oxygenLowAffliction); } foreach (Affliction affliction in currentDisplayedAfflictions) { - statusIcons.Add((affliction, affliction.Prefab.Name)); + statusIcons.Add(affliction); } - Vector2 highlightedIconPos = Vector2.Zero; - Rectangle afflictionArea = HUDLayoutSettings.AfflictionAreaLeft; - - // Push the icons down since the portrait doesn't get rendered + int spacing = GUI.IntScale(10); if (Character.ShouldLockHud()) { - afflictionArea.Y += HUDLayoutSettings.PortraitArea.Height; + // Push the icons down since the portrait doesn't get rendered + afflictionIconContainer.RectTransform.ScreenSpaceOffset = new Point(0, HUDLayoutSettings.PortraitArea.Height); + hiddenAfflictionIconContainer.RectTransform.ScreenSpaceOffset = new Point(0, -hiddenAfflictionIconContainer.Rect.Height - spacing + HUDLayoutSettings.PortraitArea.Height); } + else + { + afflictionIconContainer.RectTransform.ScreenSpaceOffset = new Point(0, 0); + hiddenAfflictionIconContainer.RectTransform.ScreenSpaceOffset = new Point(0, -hiddenAfflictionIconContainer.Rect.Height - spacing); + } + //remove affliction icons for afflictions that no longer exist - bool horizontal = afflictionArea.Width > afflictionArea.Height; - int iconSize = horizontal ? afflictionArea.Height : afflictionArea.Width; - - Point pos = new Point(afflictionArea.Right - iconSize, afflictionArea.Top); + RemoveNonExistentIcons(afflictionIconContainer); + RemoveNonExistentIcons(hiddenAfflictionIconContainer); + void RemoveNonExistentIcons(GUIComponent container) + { + for (int i = container.CountChildren - 1; i >= 0; i--) + { + var child = container.GetChild(i); + if (child.UserData is not AfflictionPrefab afflictionPrefab) { continue; } + if (!statusIcons.Any(s => s.Prefab == afflictionPrefab)) + { + container.RemoveChild(child); + statusIconVisibleTime.Remove(afflictionPrefab); + } + } + } foreach (var statusIcon in statusIcons) { - Affliction affliction = statusIcon.Affliction; + Affliction affliction = statusIcon; AfflictionPrefab afflictionPrefab = affliction.Prefab; - Rectangle afflictionIconRect = new Rectangle(pos, new Point(iconSize)); - if (afflictionIconRect.Contains(PlayerInput.MousePosition) && !Character.ShouldLockHud() && GUI.MouseOn == null) + if (!statusIconVisibleTime.ContainsKey(afflictionPrefab)) { statusIconVisibleTime.Add(afflictionPrefab, 0.0f); } + statusIconVisibleTime[afflictionPrefab] += deltaTime; + + var matchingIcon = + afflictionIconContainer.GetChildByUserData(afflictionPrefab) ?? + hiddenAfflictionIconContainer.GetChildByUserData(afflictionPrefab); + if (matchingIcon == null) { - highlightedAfflictionIcon = statusIcon; - highlightedIconPos = afflictionIconRect.Location.ToVector2(); + matchingIcon = new GUIButton(new RectTransform(new Point(afflictionIconContainer.Rect.Height), afflictionIconContainer.RectTransform), style: null) + { + UserData = afflictionPrefab, + ToolTip = affliction.Prefab.Name, + CanBeSelected = false + }; + if (affliction == pressureAffliction) + { + matchingIcon.ToolTip = TextManager.Get("PressureHUDWarning"); + } + else if (affliction == pressureAffliction) + { + matchingIcon.ToolTip = TextManager.Get("OxygenHUDWarning"); + } + new GUIImage(new RectTransform(Vector2.One, matchingIcon.RectTransform, Anchor.BottomCenter), afflictionPrefab.Icon, scaleToFit: true) + { + CanBeFocused = false + }; } - - if (affliction.DamagePerSecond > 1.0f) + if (afflictionPrefab.HideIconAfterDelay && statusIconVisibleTime[afflictionPrefab] > hideStatusIconDelay) { - Rectangle glowRect = afflictionIconRect; - glowRect.Inflate((int)(20 * GUI.Scale), (int)(20 * GUI.Scale)); - var glow = GUIStyle.GetComponentStyle("OuterGlowCircular"); - glow.Sprites[GUIComponent.ComponentState.None][0].Draw( - spriteBatch, glowRect, - GUIStyle.Red * (float)((Math.Sin(affliction.DamagePerSecondTimer * MathHelper.TwoPi - MathHelper.PiOver2) + 1.0f) * 0.5f)); + matchingIcon.RectTransform.Parent = hiddenAfflictionIconContainer.RectTransform; } + var image = matchingIcon.GetChild(); + image.Color = GetAfflictionIconColor(afflictionPrefab, affliction); + image.HoverColor = Color.Lerp(image.Color, Color.White, 0.5f); - float alphaMultiplier = highlightedAfflictionIcon == statusIcon ? 1f : 0.8f; - - afflictionPrefab.Icon?.Draw(spriteBatch, - pos.ToVector2(), - /*highlightedIcon == statusIcon ? statusIcon.First.Prefab.IconColor : statusIcon.First.Prefab.IconColor * 0.8f,*/ // OLD IMPLEMENTATION - GetAfflictionIconColor(afflictionPrefab, affliction) * alphaMultiplier, - rotate: 0, - scale: iconSize / afflictionPrefab.Icon.size.X); - - if (horizontal) - pos.X -= iconSize + (int)(5 * GUI.Scale); - else - pos.Y += iconSize + (int)(5 * GUI.Scale); + if (affliction.DamagePerSecond > 1.0f && matchingIcon.FlashTimer <= 0.0f) + { + matchingIcon.Flash(useCircularFlash: true, flashDuration: 1.5f, flashRectInflate: Vector2.One * 15.0f * GUI.Scale); + image.Pulsate(Vector2.One, Vector2.One * 1.2f, 1.0f); + } } - if (highlightedAfflictionIcon != null) + afflictionIconContainer.RectTransform.SortChildren((r1, r2) => { - LocalizedString nameTooltip = highlightedAfflictionIcon.Value.NameToolTip; - Vector2 offset = GUIStyle.Font.MeasureString(nameTooltip); + if (r1.GUIComponent.UserData is not AfflictionPrefab prefab1) { return -1; } + if (r2.GUIComponent.UserData is not AfflictionPrefab prefab2) { return 1; } + var index1 = statusIcons.IndexOf(s => s.Prefab == prefab1); + var index2 = statusIcons.IndexOf(s => s.Prefab == prefab2); + return index1.CompareTo(index2); + }); + (afflictionIconContainer as GUILayoutGroup).NeedsToRecalculate = true; - GUI.DrawString(spriteBatch, - alignment == Alignment.Left ? highlightedIconPos + offset : highlightedIconPos - offset, - nameTooltip, - Color.White * 0.8f, Color.Black * 0.5f); + Rectangle hiddenAfflictionHoverArea = showHiddenAfflictionsButton.Rect; + foreach (GUIComponent child in hiddenAfflictionIconContainer.Children) + { + hiddenAfflictionHoverArea = Rectangle.Union(hiddenAfflictionHoverArea, child.Rect); } + hiddenAfflictionIconContainer.Visible = + showHiddenAfflictionsButton.Rect.Contains(PlayerInput.MousePosition) || + (hiddenAfflictionIconContainer.Visible && hiddenAfflictionHoverArea.Contains(PlayerInput.MousePosition)); + showHiddenAfflictionsButton.Visible = hiddenAfflictionIconContainer.CountChildren > 0; + showHiddenAfflictionsButton.IgnoreLayoutGroups = !showHiddenAfflictionsButton.Visible; + showHiddenAfflictionsButton.Text = $"+{hiddenAfflictionIconContainer.CountChildren}"; + if (Vitality > 0.0f) { float currHealth = healthBar.BarSize; @@ -1150,18 +1227,20 @@ namespace Barotrauma public static Color GetAfflictionIconColor(AfflictionPrefab prefab, float afflictionStrength) { + //use sqrt to make the color change rapidly when strength is low + //(low strength is where seeing the severity of the affliction makes more difference - at high strengths the character is already unconscious or dead) + float colorT = MathF.Sqrt(afflictionStrength / prefab.MaxStrength); // No specific colors, use generic if (prefab.IconColors == null) { if (prefab.IsBuff) { - return ToolBox.GradientLerp(afflictionStrength / prefab.MaxStrength, GUIStyle.BuffColorLow, GUIStyle.BuffColorMedium, GUIStyle.BuffColorHigh); + return ToolBox.GradientLerp(colorT, GUIStyle.BuffColorLow, GUIStyle.BuffColorMedium, GUIStyle.BuffColorHigh); } - return ToolBox.GradientLerp(afflictionStrength / prefab.MaxStrength, GUIStyle.DebuffColorLow, GUIStyle.DebuffColorMedium, GUIStyle.DebuffColorHigh); + return ToolBox.GradientLerp(colorT, GUIStyle.DebuffColorLow, GUIStyle.DebuffColorMedium, GUIStyle.DebuffColorHigh); } - - return ToolBox.GradientLerp(afflictionStrength / prefab.MaxStrength, prefab.IconColors); + return ToolBox.GradientLerp(colorT, prefab.IconColors); } public static Color GetAfflictionIconColor(Affliction affliction) => GetAfflictionIconColor(affliction.Prefab, affliction); @@ -1172,7 +1251,7 @@ namespace Barotrauma { if (selectedLimb == null) { - afflictionIconContainer.Content.ClearChildren(); + afflictionIconList.Content.ClearChildren(); return; } @@ -1207,7 +1286,7 @@ namespace Barotrauma private void CreateAfflictionInfos(IEnumerable afflictions) { - afflictionIconContainer.ClearChildren(); + afflictionIconList.ClearChildren(); displayedAfflictions.Clear(); Affliction mostSevereAffliction = SortAfflictionsBySeverity(afflictions, excludeBuffs: false).FirstOrDefault(); @@ -1217,7 +1296,7 @@ namespace Barotrauma { displayedAfflictions.Add((affliction, affliction.Strength)); - var frame = new GUIButton(new RectTransform(new Vector2(1.0f, 0.25f), afflictionIconContainer.Content.RectTransform), style: "ListBoxElement") + var frame = new GUIButton(new RectTransform(new Vector2(1.0f, 0.25f), afflictionIconList.Content.RectTransform), style: "ListBoxElement") { UserData = affliction, OnClicked = SelectAffliction @@ -1275,7 +1354,7 @@ namespace Barotrauma } buttonToSelect?.OnClicked(buttonToSelect, buttonToSelect.UserData); - afflictionIconContainer.RecalculateChildren(); + afflictionIconList.RecalculateChildren(); } private void CreateRecommendedTreatments() @@ -1386,7 +1465,7 @@ namespace Barotrauma recommendedTreatmentContainer.RecalculateChildren(); - afflictionIconContainer.Content.RectTransform.SortChildren((r1, r2) => + afflictionIconList.Content.RectTransform.SortChildren((r1, r2) => { var first = r1.GUIComponent.UserData as Affliction; var second = r2.GUIComponent.UserData as Affliction; @@ -1437,7 +1516,10 @@ namespace Barotrauma }; var description = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.3f), parent.RectTransform), - affliction.Prefab.Description, textAlignment: Alignment.TopLeft, wrap: true) + affliction.Prefab.GetDescription( + affliction.Strength, + Character == Character.Controlled ? AfflictionPrefab.Description.TargetType.Self : AfflictionPrefab.Description.TargetType.OtherCharacter), + textAlignment: Alignment.TopLeft, wrap: true) { CanBeFocused = false }; @@ -1482,10 +1564,9 @@ namespace Barotrauma private bool SelectAffliction(GUIButton button, object userData) { bool selected = button.Selected; - foreach (var child in afflictionIconContainer.Content.Children) + foreach (var child in afflictionIconList.Content.Children) { - GUIButton btn = child.GetChild(); - if (btn != null) + if (child is GUIButton btn) { btn.Selected = btn == button && !selected; } @@ -1516,7 +1597,7 @@ namespace Barotrauma afflictionEffectColor = GUIStyle.Green; } - var child = afflictionIconContainer.Content.FindChild(affliction); + var child = afflictionIconList.Content.FindChild(affliction); var afflictionStrengthPredictionBar = child.GetChild().GetChildByUserData("afflictionstrengthprediction") as GUIProgressBar; afflictionStrengthPredictionBar.BarSize = 0.0f; @@ -1836,14 +1917,14 @@ namespace Barotrauma i++; } - if (selectedLimbIndex > -1 && afflictionIconContainer.Content.CountChildren > 0) + if (selectedLimbIndex > -1 && afflictionIconList.Content.CountChildren > 0) { LimbHealth limbHealth = limbHealths[selectedLimbIndex]; if (limbHealth?.IndicatorSprite != null) { Rectangle selectedLimbArea = GetLimbHighlightArea(limbHealth, drawArea); GUI.DrawLine(spriteBatch, - new Vector2(afflictionIconContainer.Rect.X, afflictionIconContainer.Rect.Y), + new Vector2(afflictionIconList.Rect.X, afflictionIconList.Rect.Y), selectedLimbArea.Center.ToVector2(), Color.LightGray * 0.5f, width: 4); } diff --git a/Barotrauma/BarotraumaClient/ClientSource/DebugConsole.cs b/Barotrauma/BarotraumaClient/ClientSource/DebugConsole.cs index 9d6be3cbd..f3350b2ed 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/DebugConsole.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/DebugConsole.cs @@ -1823,7 +1823,18 @@ namespace Barotrauma Identifier afflictionId = affliction.TranslationIdentifier; addIfMissing($"afflictionname.{afflictionId}".ToIdentifier(), language); - addIfMissing($"afflictiondescription.{afflictionId}".ToIdentifier(), language); + + if (affliction.Descriptions.Any()) + { + foreach (var description in affliction.Descriptions) + { + addIfMissing(description.TextTag, language); + } + } + else + { + addIfMissing($"afflictiondescription.{afflictionId}".ToIdentifier(), language); + } } foreach (var talentTree in TalentTree.JobTalentTrees) diff --git a/Barotrauma/BarotraumaClient/ClientSource/EventInput/EventInput.cs b/Barotrauma/BarotraumaClient/ClientSource/EventInput/EventInput.cs index 474f8c570..fdf54af3f 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/EventInput/EventInput.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/EventInput/EventInput.cs @@ -70,6 +70,7 @@ namespace EventInput public delegate void CharEnteredHandler(object sender, CharacterEventArgs e); public delegate void KeyEventHandler(object sender, KeyEventArgs e); + public delegate void EditingTextHandler(object sender, TextEditingEventArgs e); public static class EventInput { @@ -88,6 +89,15 @@ namespace EventInput /// public static event KeyEventHandler KeyUp; + +#if !WINDOWS + /// + /// Raised when the user is editing text and IME is in progress. + /// Windows build uses ImeSharp instead because SDL2's IME implementation is broken on Windows (https://github.com/libsdl-org/SDL/issues/2243) + /// + public static event EditingTextHandler EditingText; +#endif + static bool initialized; /// @@ -102,6 +112,9 @@ namespace EventInput } window.TextInput += ReceiveInput; +#if !WINDOWS + window.TextEditing += ReceiveTextEditing; +#endif initialized = true; } @@ -112,6 +125,13 @@ namespace EventInput KeyDown?.Invoke(sender, new KeyEventArgs(e.Key)); } +#if !WINDOWS + private static void ReceiveTextEditing(object sender, TextEditingEventArgs e) + { + EditingText?.Invoke(sender, e); + } +#endif + public static void OnCharEntered(char character) { CharEntered?.Invoke(null, new CharacterEventArgs(character, 0)); diff --git a/Barotrauma/BarotraumaClient/ClientSource/EventInput/KeyboardDispatcher.cs b/Barotrauma/BarotraumaClient/ClientSource/EventInput/KeyboardDispatcher.cs index b52e392a1..f18dbcd73 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/EventInput/KeyboardDispatcher.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/EventInput/KeyboardDispatcher.cs @@ -1,8 +1,4 @@ -using System; -using System.Threading; -#if WINDOWS -using System.Windows; -#endif +using Barotrauma; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; @@ -15,6 +11,11 @@ namespace EventInput void ReceiveCommandInput(char command); void ReceiveSpecialInput(Keys key); +#if !WINDOWS + /// Windows build uses ImeSharp instead because SDL2's IME implementation is broken on Windows (https://github.com/libsdl-org/SDL/issues/2243) + void ReceiveEditingInput(string text, int start); +#endif + bool Selected { get; set; } //or Focused } @@ -25,14 +26,26 @@ namespace EventInput EventInput.Initialize(window); EventInput.CharEntered += EventInput_CharEntered; EventInput.KeyDown += EventInput_KeyDown; - } +#if !WINDOWS + EventInput.EditingText += EventInput_TextEditing; +#endif + /* + * SDL by default starts in a state where it accepts IME inputs + * this is bad because this blocks keybinds since the IME thinks + * it's typing in a text box and not forwarding keybinds to the game. + */ + TextInput.StopTextInput(); + } +#if !WINDOWS + public void EventInput_TextEditing(object sender, TextEditingEventArgs e) + { + _subscriber?.ReceiveEditingInput(e.Text, e.Start); + } +#endif public void EventInput_KeyDown(object sender, KeyEventArgs e) { - if (_subscriber == null) - return; - - _subscriber.ReceiveSpecialInput(e.KeyCode); + _subscriber?.ReceiveSpecialInput(e.KeyCode); } void EventInput_CharEntered(object sender, CharacterEventArgs e) @@ -74,12 +87,25 @@ namespace EventInput get { return _subscriber; } set { - if (_subscriber == value) return; - if (_subscriber != null) + if (_subscriber == value) { return; } + + if (_subscriber is GUITextBox) + { + TextInput.StopTextInput(); _subscriber.Selected = false; + } + + if (value is GUITextBox box) + { + TextInput.SetTextInputRect(box.Rect); + TextInput.StartTextInput(); + } + _subscriber = value; if (value != null) + { value.Selected = true; + } } } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Events/EventActions/CheckObjectiveAction.cs b/Barotrauma/BarotraumaClient/ClientSource/Events/EventActions/CheckObjectiveAction.cs new file mode 100644 index 000000000..ce251c05a --- /dev/null +++ b/Barotrauma/BarotraumaClient/ClientSource/Events/EventActions/CheckObjectiveAction.cs @@ -0,0 +1,37 @@ +using Barotrauma.Tutorials; +using Segment = Barotrauma.ObjectiveManager.Segment; + +namespace Barotrauma; + +partial class CheckObjectiveAction : BinaryOptionAction +{ + public enum CheckType + { + Added, + Completed + } + + [Serialize(CheckType.Completed, IsPropertySaveable.Yes)] + public CheckType Type { get; set; } + + [Serialize("", IsPropertySaveable.Yes)] + public Identifier Identifier { get; set; } + + partial void DetermineSuccessProjSpecific(ref bool success) + { + success = false; + if (Identifier.IsEmpty) + { + success = ObjectiveManager.AllActiveObjectivesCompleted(); + } + else if (ObjectiveManager.GetObjective(Identifier) is Segment segment) + { + success = Type switch + { + CheckType.Added => true, + CheckType.Completed => segment.IsCompleted, + _ => false + }; + } + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaClient/ClientSource/Events/EventActions/ConversationAction.cs b/Barotrauma/BarotraumaClient/ClientSource/Events/EventActions/ConversationAction.cs index 865634dd1..18e93bfbd 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Events/EventActions/ConversationAction.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Events/EventActions/ConversationAction.cs @@ -323,7 +323,10 @@ namespace Barotrauma AlwaysOverrideCursor = true }; - LocalizedString translatedText = TextManager.ParseInputTypes(TextManager.Get(text)).Fallback(text); + LocalizedString translatedText = speaker?.DisplayName is not null ? + TextManager.GetWithVariable(text, "[speakername]", speaker?.DisplayName) : + TextManager.Get(text); + translatedText = TextManager.ParseInputTypes(translatedText).Fallback(text); if (speaker?.Info != null && drawChathead) { diff --git a/Barotrauma/BarotraumaClient/ClientSource/Events/EventActions/MessageBoxAction.cs b/Barotrauma/BarotraumaClient/ClientSource/Events/EventActions/MessageBoxAction.cs index b75a1af4a..2cf27ab55 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Events/EventActions/MessageBoxAction.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Events/EventActions/MessageBoxAction.cs @@ -11,11 +11,13 @@ partial class MessageBoxAction : EventAction if (Type == ActionType.Create || Type == ActionType.ConnectObjective) { CreateMessageBox(); - if (!ObjectiveTag.IsEmpty && GameMain.GameSession?.GameMode is TutorialMode tutorialMode) + if (!ObjectiveTag.IsEmpty) { Identifier id = Identifier.IfEmpty(Text); - var segment = Tutorial.Segment.CreateMessageBoxSegment(id, ObjectiveTag, CreateMessageBox); - tutorialMode.Tutorial?.TriggerTutorialSegment(segment, connectObjective: Type == ActionType.ConnectObjective); + var segment = ObjectiveManager.Segment.CreateMessageBoxSegment(id, ObjectiveTag, CreateMessageBox); + segment.CanBeCompleted = ObjectiveCanBeCompleted; + segment.ParentId = ParentObjectiveId; + ObjectiveManager.TriggerTutorialSegment(segment, connectObjective: Type == ActionType.ConnectObjective); } } else if (Type == ActionType.Close) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Events/EventActions/TutorialSegmentAction.cs b/Barotrauma/BarotraumaClient/ClientSource/Events/EventActions/TutorialSegmentAction.cs index ab9b097d3..6420009e8 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Events/EventActions/TutorialSegmentAction.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Events/EventActions/TutorialSegmentAction.cs @@ -1,50 +1,43 @@ -using Barotrauma.Tutorials; - namespace Barotrauma; partial class TutorialSegmentAction : EventAction { - private Tutorial.Segment segment; + private ObjectiveManager.Segment segment; partial void UpdateProjSpecific() { // Only need to create the segment when it's being triggered (otherwise the tutorial already has the segment instance) if (Type == SegmentActionType.Trigger) { - segment = Tutorial.Segment.CreateInfoBoxSegment(Identifier, ObjectiveTag, AutoPlayVideo ? Tutorials.AutoPlayVideo.Yes : Tutorials.AutoPlayVideo.No, - new Tutorial.Segment.Text(TextTag, Width, Height, Anchor.Center), - new Tutorial.Segment.Video(VideoFile, TextTag, Width, Height)); + segment = ObjectiveManager.Segment.CreateInfoBoxSegment(Identifier, ObjectiveTag, AutoPlayVideo ? Tutorials.AutoPlayVideo.Yes : Tutorials.AutoPlayVideo.No, + new ObjectiveManager.Segment.Text(TextTag, Width, Height, Anchor.Center), + new ObjectiveManager.Segment.Video(VideoFile, TextTag, Width, Height)); } else if (Type == SegmentActionType.Add) { - segment = Tutorial.Segment.CreateObjectiveSegment(Identifier, !ObjectiveTag.IsEmpty ? ObjectiveTag : Identifier); + segment = ObjectiveManager.Segment.CreateObjectiveSegment(Identifier, !ObjectiveTag.IsEmpty ? ObjectiveTag : Identifier); } - if (GameMain.GameSession?.GameMode is TutorialMode tutorialMode) + if (segment is not null) { - if (tutorialMode.Tutorial is Tutorial tutorial) - { - switch (Type) - { - case SegmentActionType.Trigger: - case SegmentActionType.Add: - tutorial.TriggerTutorialSegment(segment); - break; - case SegmentActionType.Complete: - tutorial.CompleteTutorialSegment(Identifier); - break; - case SegmentActionType.Remove: - tutorial.RemoveTutorialSegment(Identifier); - break; - case SegmentActionType.CompleteAndRemove: - tutorial.CompleteTutorialSegment(Identifier); - tutorial.RemoveTutorialSegment(Identifier); - break; - } - } + segment.CanBeCompleted = CanBeCompleted; + segment.ParentId = ParentObjectiveId; } - else + switch (Type) { - DebugConsole.ThrowError($"Error in event \"{ParentEvent.Prefab.Identifier}\": attempting to use TutorialSegmentAction during a non-Tutorial game mode!"); + case SegmentActionType.Trigger: + case SegmentActionType.Add: + ObjectiveManager.TriggerTutorialSegment(segment); + break; + case SegmentActionType.Complete: + ObjectiveManager.CompleteTutorialSegment(Identifier); + break; + case SegmentActionType.Remove: + ObjectiveManager.RemoveTutorialSegment(Identifier); + break; + case SegmentActionType.CompleteAndRemove: + ObjectiveManager.CompleteTutorialSegment(Identifier); + ObjectiveManager.RemoveTutorialSegment(Identifier); + break; } } } \ No newline at end of file diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUI.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUI.cs index fb4fd861b..2a78ce8ef 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUI.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUI.cs @@ -255,7 +255,17 @@ namespace Barotrauma ScreenChanged = false; } - updateList.ForEach(c => c.DrawAuto(spriteBatch)); + foreach (GUIComponent c in updateList) + { + c.DrawAuto(spriteBatch); + } + + // always draw IME preview on top of everything else + foreach (GUIComponent c in updateList) + { + if (c is not GUITextBox box) { continue; } + box.DrawIMEPreview(spriteBatch); + } if (ScreenOverlayColor.A > 0.0f) { @@ -1251,6 +1261,10 @@ namespace Barotrauma UpdateMessages(deltaTime); UpdateSavingIndicator(deltaTime); } + +#if WINDOWS + GUITextBox.UpdateIME(); +#endif } public static void UpdateGUIMessageBoxesOnly(float deltaTime) @@ -1357,7 +1371,7 @@ namespace Barotrauma } } - #region Element drawing +#region Element drawing private static readonly List usedIndicatorAngles = new List(); @@ -1843,9 +1857,9 @@ namespace Barotrauma Vector2 pos = new Vector2(GameMain.GraphicsWidth, GameMain.GraphicsHeight) - new Vector2(HUDLayoutSettings.Padding) - 2 * Scale * sheet.FrameSize.ToVector2(); sheet.Draw(spriteBatch, (int)Math.Floor(savingIndicatorSpriteIndex), pos, savingIndicatorColor, origin: Vector2.Zero, rotate: 0.0f, scale: new Vector2(Scale)); } - #endregion +#endregion - #region Element creation +#region Element creation public static Texture2D CreateCircle(int radius, bool filled = false) { @@ -2217,9 +2231,9 @@ namespace Barotrauma return msgBox; } - #endregion +#endregion - #region Element positioning +#region Element positioning private static List CreateElements(int count, RectTransform parent, Func constructor, Vector2? relativeSize = null, Point? absoluteSize = null, Anchor anchor = Anchor.TopLeft, Pivot? pivot = null, Point? minSize = null, Point? maxSize = null, @@ -2418,9 +2432,9 @@ namespace Barotrauma } } - #endregion +#endregion - #region Misc +#region Misc public static void TogglePauseMenu() { if (Screen.Selected == GameMain.MainMenuScreen) { return; } @@ -2658,6 +2672,6 @@ namespace Barotrauma if (!isSavingIndicatorEnabled) { return; } timeUntilSavingIndicatorDisabled = delay; } - #endregion +#endregion } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIComponent.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIComponent.cs index 926e5520b..2d8523b58 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIComponent.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIComponent.cs @@ -9,6 +9,7 @@ using Barotrauma.IO; using RestSharp; using System.Net; using System.Collections.Immutable; +using Barotrauma.Tutorials; namespace Barotrauma { @@ -736,7 +737,7 @@ namespace Barotrauma public static void DrawToolTip(SpriteBatch spriteBatch, RichString toolTip, Vector2 pos) { - if (GameMain.GameSession?.GameMode is TutorialMode tutorialMode && tutorialMode.Tutorial.ContentRunning) { return; } + if (ObjectiveManager.ContentRunning) { return; } int width = (int)(400 * GUI.Scale); int height = (int)(18 * GUI.Scale); @@ -759,7 +760,7 @@ namespace Barotrauma public static void DrawToolTip(SpriteBatch spriteBatch, RichString toolTip, Rectangle targetElement) { - if (GameMain.GameSession?.GameMode is TutorialMode tutorialMode && tutorialMode.Tutorial.ContentRunning) { return; } + if (ObjectiveManager.ContentRunning) { return; } int width = (int)(400 * GUI.Scale); int height = (int)(18 * GUI.Scale); diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIDropDown.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIDropDown.cs index a8ca188cc..465e5d771 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIDropDown.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIDropDown.cs @@ -112,6 +112,10 @@ namespace Barotrauma public void ReceiveTextInput(string text) { } public void ReceiveCommandInput(char command) { } +#if !WINDOWS + public void ReceiveEditingInput(string text, int start) { } +#endif + public void ReceiveSpecialInput(Keys key) { switch (key) diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIListBox.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIListBox.cs index 71173d75d..fc0b5c098 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIListBox.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIListBox.cs @@ -1349,6 +1349,10 @@ namespace Barotrauma public void ReceiveTextInput(string text) { } public void ReceiveCommandInput(char command) { } +#if !WINDOWS + public void ReceiveEditingInput(string text, int start) { } +#endif + public void ReceiveSpecialInput(Keys key) { switch (key) diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIMessageBox.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIMessageBox.cs index 3aa1cff1c..81ad4ac35 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIMessageBox.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUIMessageBox.cs @@ -24,7 +24,8 @@ namespace Barotrauma InGame, Vote, Hint, - Tutorial + Tutorial, + Warning // Keep this last so that it's always drawn in front } private bool IsAnimated => type == Type.InGame || type == Type.Hint || type == Type.Tutorial; @@ -84,8 +85,8 @@ namespace Barotrauma public static GUIComponent VisibleBox => MessageBoxes.LastOrDefault(); - public GUIMessageBox(LocalizedString headerText, LocalizedString text, Vector2? relativeSize = null, Point? minSize = null) - : this(headerText, text, new LocalizedString[] { "OK" }, relativeSize, minSize) + public GUIMessageBox(LocalizedString headerText, LocalizedString text, Vector2? relativeSize = null, Point? minSize = null, Type type = Type.Default) + : this(headerText, text, new LocalizedString[] { "OK" }, relativeSize, minSize, type: type) { this.Buttons[0].OnClicked = Close; } @@ -147,7 +148,7 @@ namespace Barotrauma Tag = tag.ToIdentifier(); #warning TODO: These should be broken into separate methods at least - if (type == Type.Default || type == Type.Vote) + if (type == Type.Default || type == Type.Vote || type == Type.Warning) { Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 }; diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBlock.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBlock.cs index e4a94bc56..168f53a7e 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBlock.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBlock.cs @@ -4,6 +4,7 @@ using Microsoft.Xna.Framework.Graphics; using System; using System.Collections.Generic; using System.Collections.Immutable; +using System.Diagnostics.CodeAnalysis; using System.Linq; namespace Barotrauma @@ -285,8 +286,8 @@ namespace Barotrauma /// This is the new constructor. /// If the rectT height is set 0, the height is calculated from the text. /// - public GUITextBlock(RectTransform rectT, RichString text, Color? textColor = null, GUIFont font = null, - Alignment textAlignment = Alignment.Left, bool wrap = false, string style = "", Color? color = null) + public GUITextBlock(RectTransform rectT, RichString text, Color? textColor = null, GUIFont font = null, + Alignment textAlignment = Alignment.Left, bool wrap = false, string style = "", Color? color = null) : base(style, rectT) { if (color.HasValue) @@ -551,6 +552,8 @@ namespace Barotrauma if (TextGetter != null) { Text = TextGetter(); } + string textToShow = Censor ? censoredText : (Wrap ? wrappedText.Value : text.SanitizedValue); + Rectangle prevScissorRect = spriteBatch.GraphicsDevice.ScissorRectangle; if (overflowClipActive) { @@ -561,7 +564,7 @@ namespace Barotrauma spriteBatch.Begin(SpriteSortMode.Deferred, samplerState: GUI.SamplerState, rasterizerState: GameMain.ScissorTestEnable); } - if (!text.IsNullOrEmpty()) + if (!string.IsNullOrEmpty(textToShow)) { Vector2 pos = rect.Location.ToVector2() + textPos + TextOffset; if (RoundToNearestPixel) @@ -570,7 +573,8 @@ namespace Barotrauma pos.Y = (int)pos.Y; } - Color currentTextColor = State == ComponentState.Hover || State == ComponentState.HoverSelected ? HoverTextColor : TextColor; + Color currentTextColor = State is ComponentState.Hover or ComponentState.HoverSelected ? HoverTextColor : TextColor; + if (!enabled) { currentTextColor = disabledTextColor; @@ -582,7 +586,6 @@ namespace Barotrauma if (!HasColorHighlight) { - string textToShow = Censor ? censoredText : (Wrap ? wrappedText.Value : text.SanitizedValue); Color colorToShow = currentTextColor * (currentTextColor.A / 255.0f); if (TextManager.DebugDraw) { @@ -604,10 +607,10 @@ namespace Barotrauma { if (OverrideRichTextDataAlpha) { - RichTextData.Value.ForEach(rt => rt.Alpha = currentTextColor.A / 255.0f); + RichTextData?.ForEach(rt => rt.Alpha = currentTextColor.A / 255.0f); } - Font.DrawStringWithColors(spriteBatch, Censor ? censoredText : (Wrap ? wrappedText : text.SanitizedString).Value, pos, - currentTextColor * (currentTextColor.A / 255.0f), 0.0f, origin, TextScale, SpriteEffects.None, textDepth, RichTextData.Value, alignment: textAlignment, forceUpperCase: ForceUpperCase); + Font.DrawStringWithColors(spriteBatch, textToShow, pos, + currentTextColor * (currentTextColor.A / 255.0f), 0.0f, origin, TextScale, SpriteEffects.None, textDepth, RichTextData, alignment: textAlignment, forceUpperCase: ForceUpperCase); } Strikethrough?.Draw(spriteBatch, (int)Math.Ceiling(TextSize.X / 2f), pos.X, diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBox.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBox.cs index 27a558c5c..dae60140f 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBox.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBox.cs @@ -11,7 +11,7 @@ namespace Barotrauma public delegate void TextBoxEvent(GUITextBox sender, Keys key); - public class GUITextBox : GUIComponent, IKeyboardSubscriber + public partial class GUITextBox : GUIComponent, IKeyboardSubscriber { public event TextBoxEvent OnSelected; public event TextBoxEvent OnDeselected; @@ -67,12 +67,12 @@ namespace Barotrauma private int selectionEndIndex; private bool IsLeftToRight => selectionStartIndex <= selectionEndIndex; - private GUICustomComponent caretAndSelectionRenderer; + private readonly GUICustomComponent caretAndSelectionRenderer; private bool mouseHeldInside; private readonly Memento memento = new Memento(); - + // Skip one update cycle, fixes Enter key instantly deselecting the chatbox private bool skipUpdate; @@ -189,6 +189,7 @@ namespace Barotrauma base.Font = value; if (textBlock == null) { return; } textBlock.Font = value; + imePreviewTextHandler.Font = Font; } } @@ -253,6 +254,8 @@ namespace Barotrauma public override bool PlaySoundOnSelect { get; set; } = true; + private readonly IMEPreviewTextHandler imePreviewTextHandler; + public GUITextBox(RectTransform rectT, string text = "", Color? textColor = null, GUIFont font = null, Alignment textAlignment = Alignment.Left, bool wrap = false, string style = "", Color? color = null, bool createClearButton = false, bool createPenIcon = true) : base(style, rectT) @@ -264,6 +267,7 @@ namespace Barotrauma frame = new GUIFrame(new RectTransform(Vector2.One, rectT, Anchor.Center), style, color); GUIStyle.Apply(frame, style == "" ? "GUITextBox" : style); textBlock = new GUITextBlock(new RectTransform(Vector2.One, frame.RectTransform, Anchor.CenterLeft), text ?? "", textColor, font, textAlignment, wrap); + imePreviewTextHandler = new IMEPreviewTextHandler(textBlock.Font); GUIStyle.Apply(textBlock, "", this); if (font != null) { textBlock.Font = font; } CaretEnabled = true; @@ -295,18 +299,17 @@ namespace Barotrauma textBlock.RectTransform.MaxSize = new Point(frame.Rect.Width - icon.Rect.Height - clearButtonWidth - icon.RectTransform.AbsoluteOffset.X * 2, int.MaxValue); } Font = textBlock.Font; - Enabled = true; - rectT.SizeChanged += () => + rectT.SizeChanged += () => { if (icon != null) { textBlock.RectTransform.MaxSize = new Point(frame.Rect.Width - icon.Rect.Height - icon.RectTransform.AbsoluteOffset.X * 2, int.MaxValue); } - caretPosDirty = true; + caretPosDirty = true; }; rectT.ScaleChanged += () => { if (icon != null) { textBlock.RectTransform.MaxSize = new Point(frame.Rect.Width - icon.Rect.Height - icon.RectTransform.AbsoluteOffset.X * 2, int.MaxValue); } - caretPosDirty = true; + caretPosDirty = true; }; } @@ -381,14 +384,16 @@ namespace Barotrauma { GUI.KeyboardDispatcher.Subscriber = null; } + OnDeselected?.Invoke(this, Keys.None); + imePreviewTextHandler.Reset(); } public override void Flash(Color? color = null, float flashDuration = 1.5f, bool useRectangleFlash = false, bool useCircularFlash = false, Vector2? flashRectOffset = null) { frame.Flash(color, flashDuration, useRectangleFlash, useCircularFlash, flashRectOffset); } - + protected override void Update(float deltaTime) { if (!Visible) return; @@ -673,6 +678,18 @@ namespace Barotrauma break; } } +#if !WINDOWS + public void ReceiveEditingInput(string text, int start) + { + if (string.IsNullOrEmpty(text)) + { + if (start is 0) { imePreviewTextHandler.Reset(); } + return; + } + + imePreviewTextHandler.UpdateText(text, start); + } +#endif public void ReceiveSpecialInput(Keys key) { @@ -864,6 +881,24 @@ namespace Barotrauma } } + public void DrawIMEPreview(SpriteBatch spriteBatch) + { + if (!imePreviewTextHandler.HasText) { return; } + + Vector2 imePosition = CaretScreenPos; + int inflate = GUI.IntScale(3); + + RectangleF rect = new RectangleF(imePosition, imePreviewTextHandler.TextSize); + rect.Inflate(inflate, inflate); + + RectangleF borderRect = rect; + borderRect.Inflate(1, 1); + + GUI.DrawFilledRectangle(spriteBatch, borderRect, Color.White, depth: 0.02f); + GUI.DrawFilledRectangle(spriteBatch, rect, Color.Black, depth: 0.01f); + Font.DrawString(spriteBatch, imePreviewTextHandler.PreviewText, imePosition, GUIStyle.Orange, 0.0f, Vector2.Zero, 1f, SpriteEffects.None, 0, alignment: textBlock.TextAlignment, forceUpperCase: textBlock.ForceUpperCase); + } + private void CalculateSelection() { string textDrawn = Censor ? textBlock.CensoredText : WrappedText; diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBoxIME.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBoxIME.cs new file mode 100644 index 000000000..ca20e30cf --- /dev/null +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/GUITextBoxIME.cs @@ -0,0 +1,86 @@ +using ImeSharp; +using Microsoft.Xna.Framework; +using System; + +namespace Barotrauma; + +/// +/// A class for handling Input Method Editor (used for inputting e.g. Chinese and Japanese text) +/// +public partial class GUITextBox : GUIComponent +{ + private static bool initialized; + + public static GUIFrame IMEWindow { get; set; } + public static GUITextBlock IMETextBlock { get; set; } + + public static void UpdateIME() + { + if (!initialized) { InitializeIME(); } + if (GUI.KeyboardDispatcher.Subscriber is GUITextBox { Selected: true }) + { + IMEWindow?.AddToGUIUpdateList(order: 10); + } + } + + private static void InitializeIME() + { + InputMethod.Initialize(GameMain.Instance.Window.Hwnd, false); + InputMethod.TextCompositionCallback = OnTextComposition; + InputMethod.CommitTextCompositionCallback = OnCommitTextComposition; + InputMethod.Enabled = true; + IMEWindow = new GUIFrame(new RectTransform(new Point(GUI.IntScale(300), GUI.IntScale(300)), GUI.Canvas), "InnerFrame") { CanBeFocused = false, Visible = false }; + IMETextBlock = new GUITextBlock(new RectTransform(Vector2.One, IMEWindow.RectTransform), "") { CanBeFocused = false }; + + initialized = true; + } + + private static void OnTextComposition(IMEString compositionText, int cursorPosition, IMEString[] candidateList, int candidatePageStart, int candidatePageSize, int candidateSelection) + { + if (GUI.KeyboardDispatcher.Subscriber is not GUITextBox { Selected: true } textBox) { return; } + IMEWindow.Visible = true; + string text = compositionText.ToString().Insert(cursorPosition, "|"); + if (candidateList != null) + { + text += "\n"; + for (int i = 0; i < candidatePageSize; i++) + { + string candidateStr = $"\t{candidatePageStart + i + 1} {candidateList[i]}"; + if (candidateSelection == i) + { + candidateStr = $" ‖color:{XMLExtensions.ToStringHex(Color.White)}‖{candidateStr}‖end‖"; + } + candidateStr += "\n"; + text += candidateStr; + } + } + IMETextBlock.Text = RichString.Rich(text); + + IMEWindow.RectTransform.NonScaledSize = new Point( + Math.Max(IMEWindow.Rect.Width, (int)IMETextBlock.TextSize.X + GUI.IntScale(32)), + (int)IMETextBlock.TextSize.Y); + + Point windowPos = new Point(textBox.Rect.X, textBox.Rect.Bottom); + if (windowPos.Y + IMEWindow.Rect.Height > GameMain.GraphicsHeight) + { + windowPos.Y = textBox.Rect.Y - IMEWindow.Rect.Height; + } + IMEWindow.RectTransform.ScreenSpaceOffset = windowPos; + } + + private static void OnCommitTextComposition(string text) + { + if (IMEWindow.Visible) + { + foreach (char c in text) + { + if (!char.IsControl(c)) + { + GUI.KeyboardDispatcher.Subscriber?.ReceiveTextInput(c); + } + } + } + IMEWindow.Visible = false; + } +} + diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/HUDLayoutSettings.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/HUDLayoutSettings.cs index ded2b870e..dec3485bb 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/HUDLayoutSettings.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/HUDLayoutSettings.cs @@ -65,7 +65,7 @@ namespace Barotrauma get; private set; } - public static Rectangle AfflictionAreaLeft + public static Rectangle HealthBarAfflictionArea { get; private set; } @@ -143,7 +143,7 @@ namespace Barotrauma } int healthBarHeight = (int)(50f * GUI.Scale); HealthBarArea = new Rectangle(BottomRightInfoArea.Right - healthBarWidth + (int)Math.Floor(1 / GUI.Scale), BottomRightInfoArea.Y - healthBarHeight + GUI.IntScale(10), healthBarWidth, healthBarHeight); - AfflictionAreaLeft = new Rectangle(HealthBarArea.X, HealthBarArea.Y - Padding - afflictionAreaHeight, HealthBarArea.Width, afflictionAreaHeight); + HealthBarAfflictionArea = new Rectangle(HealthBarArea.X, HealthBarArea.Y - Padding - afflictionAreaHeight, HealthBarArea.Width, afflictionAreaHeight); int messageAreaWidth = GameMain.GraphicsWidth / 3; @@ -173,7 +173,7 @@ namespace Barotrauma int objectiveListAreaX = HealthWindowAreaLeft.Right + Padding; int objectiveListAreaY = ButtonAreaTop.Bottom + Padding; - TutorialObjectiveListArea = new Rectangle(objectiveListAreaX, objectiveListAreaY, (GameMain.GraphicsWidth - Padding) - objectiveListAreaX, (AfflictionAreaLeft.Top - Padding) - objectiveListAreaY); + TutorialObjectiveListArea = new Rectangle(objectiveListAreaX, objectiveListAreaY, (GameMain.GraphicsWidth - Padding) - objectiveListAreaX, (HealthBarAfflictionArea.Top - Padding) - objectiveListAreaY); int votingAreaWidth = (int)(400 * GUI.Scale); int votingAreaX = GameMain.GraphicsWidth - Padding - votingAreaWidth; @@ -193,7 +193,7 @@ namespace Barotrauma DrawRectangle(CrewArea, Color.Blue * 0.5f); DrawRectangle(ChatBoxArea, Color.Cyan * 0.5f); DrawRectangle(HealthBarArea, Color.Red * 0.5f); - DrawRectangle(AfflictionAreaLeft, Color.Red * 0.5f); + DrawRectangle(HealthBarAfflictionArea, Color.Red * 0.5f); DrawRectangle(InventoryAreaLower, Color.Yellow * 0.5f); DrawRectangle(HealthWindowAreaLeft, Color.Red * 0.5f); DrawRectangle(BottomRightInfoArea, Color.Green * 0.5f); diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/IMEPreviewText.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/IMEPreviewText.cs new file mode 100644 index 000000000..96f137a08 --- /dev/null +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/IMEPreviewText.cs @@ -0,0 +1,54 @@ +#nullable enable + +using Microsoft.Xna.Framework; + +namespace Barotrauma +{ + public sealed class IMEPreviewTextHandler + { + public string PreviewText { get; private set; } = string.Empty; + public Vector2 TextSize { get; private set; } + public bool HasText => !string.IsNullOrEmpty(PreviewText); + + // This has to be settable because for some reason we update the font of GUITextBox in some places + public GUIFont Font { get; set; } + + public IMEPreviewTextHandler(GUIFont font) + { + Font = font; + } + + public void Reset() + { + TextSize = Vector2.Zero; + PreviewText = string.Empty; + } + + public void UpdateText(string text, int start) + { + if (string.IsNullOrEmpty(text) && start is 0) + { + Reset(); + return; + } + + int totalLength = start + text.Length; + string newText = PreviewText; + if (newText.Length > totalLength) + { + newText = newText[..totalLength]; + } + + if (totalLength > newText.Length) + { + // this is required for some reason on Windows + // my guess is that the order which TextEditing events come thru is not guaranteed + newText = newText.PadRight(totalLength); + } + + newText = newText.Remove(start, text.Length).Insert(start, text); + PreviewText = newText; + TextSize = Font.MeasureString(PreviewText); + } + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/MedicalClinicUI.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/MedicalClinicUI.cs index 54373bcff..6e7e2e637 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/MedicalClinicUI.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/MedicalClinicUI.cs @@ -12,7 +12,7 @@ using PlayerBalanceElement = Barotrauma.CampaignUI.PlayerBalanceElement; namespace Barotrauma { [SuppressMessage("ReSharper", "UnusedVariable")] - internal class MedicalClinicUI + internal sealed class MedicalClinicUI { private enum ElementState { @@ -127,12 +127,14 @@ namespace Barotrauma { public readonly GUIComponent Panel; public readonly GUIListBox HealList; + public readonly GUIComponent TreatAllButton; public readonly List HealElements; - public CrewHealList(GUIListBox healList, GUIComponent panel) + public CrewHealList(GUIListBox healList, GUIComponent panel, GUIComponent treatAllButton) { Panel = panel; HealList = healList; + TreatAllButton = treatAllButton; HealElements = new List(); } } @@ -179,7 +181,7 @@ namespace Barotrauma private PopupAfflictionList? selectedCrewAfflictionList; private bool isWaitingForServer; private const float refreshTimerMax = 3f; - private float refreshTimer = 0; + private float refreshTimer; private PlayerBalanceElement? playerBalanceElement; @@ -196,7 +198,7 @@ namespace Barotrauma { new GUIButton(new RectTransform(new Vector2(0.2f, 0.1f), parent.RectTransform, Anchor.TopCenter), "Recreate UI - NOT PRESENT IN RELEASE!") { - OnClicked = (_, __) => + OnClicked = (_, _) => { parent.ClearChildren(); CreateUI(); @@ -254,7 +256,7 @@ namespace Barotrauma continue; } - CreatePendingHealElement(healList.HealList.Content, crewMember, healList, Array.Empty()); + CreatePendingHealElement(healList.HealList.Content, crewMember, healList, ImmutableArray.Empty); } // check if there are elements that the crew doesn't have @@ -309,7 +311,7 @@ namespace Barotrauma private void UpdateCrewPanel() { - if (!(crewHealList is { } healList)) { return; } + if (crewHealList is not { } healList) { return; } ImmutableArray crew = MedicalClinic.GetCrewCharacters(); @@ -334,12 +336,21 @@ namespace Barotrauma healList.HealList.Content.RemoveChild(element.UIElement); } - IEnumerable orderedList = healList.HealElements.OrderBy(element => element.Target.Character?.HealthPercentage ?? 100); + IEnumerable orderedList = healList.HealElements.OrderBy(static element => element.Target.Character?.HealthPercentage ?? 100); foreach (CrewElement element in orderedList) { element.UIElement.SetAsLastChild(); } + + healList.TreatAllButton.Enabled = false; + foreach (CrewElement element in healList.HealElements) + { + if (element.Afflictions.Count is 0) { continue; } + + healList.TreatAllButton.Enabled = true; + break; + } } private static void UpdateAfflictionList(CrewElement healElement) @@ -350,7 +361,7 @@ namespace Barotrauma // sum up all the afflictions and their strengths Dictionary afflictionAndStrength = new Dictionary(); - foreach (Affliction affliction in health.GetAllAfflictions().Where(a => MedicalClinic.IsHealable(a))) + foreach (Affliction affliction in health.GetAllAfflictions().Where(MedicalClinic.IsHealable)) { if (afflictionAndStrength.TryGetValue(affliction.Prefab, out float strength)) { @@ -446,8 +457,8 @@ namespace Barotrauma }; GUILayoutGroup clinicLabelLayout = new GUILayoutGroup(new RectTransform(new Vector2(1f, 0.1f), clinicContent.RectTransform), isHorizontal: true, childAnchor: Anchor.CenterLeft); - GUIImage clinicIcon = new GUIImage(new RectTransform(Vector2.One, clinicLabelLayout.RectTransform, scaleBasis: ScaleBasis.BothHeight), style: "CrewManagementHeaderIcon", scaleToFit: true); - GUITextBlock clinicLabel = new GUITextBlock(new RectTransform(Vector2.One, clinicLabelLayout.RectTransform), TextManager.Get("medicalclinic.medicalclinic"), font: GUIStyle.LargeFont); + new GUIImage(new RectTransform(Vector2.One, clinicLabelLayout.RectTransform, scaleBasis: ScaleBasis.BothHeight), style: "CrewManagementHeaderIcon", scaleToFit: true); + new GUITextBlock(new RectTransform(Vector2.One, clinicLabelLayout.RectTransform), TextManager.Get("medicalclinic.medicalclinic"), font: GUIStyle.LargeFont); GUIFrame clinicBackground = new GUIFrame(new RectTransform(Vector2.One, clinicContent.RectTransform)); @@ -480,22 +491,24 @@ namespace Barotrauma Stretch = true }; - // GUILayoutGroup sortLayout = new GUILayoutGroup(new RectTransform(new Vector2(1f, 0.05f), clinicContainer.RectTransform), isHorizontal: true, childAnchor: Anchor.CenterLeft); - - // new GUITextBlock(new RectTransform(new Vector2(0.2f, 1f), sortLayout.RectTransform), TextManager.Get("campaignstore.sortby"), font: GUI.SubHeadingFont); - - // GUIDropDown sortDropdown = new GUIDropDown(new RectTransform(new Vector2(0.3f, 1f), sortLayout.RectTransform)); - // - // foreach (SortMode mode in Enum.GetValues(typeof(SortMode)).Cast()) - // { - // sortDropdown.AddItem(TextManager.Get($"medicalclinic.sortmode.{mode}"), mode); - // } - // - // sortDropdown.SelectItem(SortMode.Severity); - GUIListBox crewList = new GUIListBox(new RectTransform(Vector2.One, clinicContainer.RectTransform)); - crewHealList = new CrewHealList(crewList, parent); + GUIButton treatAllButton = new GUIButton(new RectTransform(new Vector2(1.0f, 0.05f), clinicContainer.RectTransform), TextManager.Get("medicalclinic.treateveryone")) + { + OnClicked = (_, _) => + { + isWaitingForServer = true; + medicalClinic.TreatAllButtonAction(OnReceived); + return true; + } + }; + + crewHealList = new CrewHealList(crewList, parent, treatAllButton); + + void OnReceived(MedicalClinic.CallbackOnlyRequest obj) + { + isWaitingForServer = false; + } } private void CreateCrewEntry(GUIComponent parent, CrewHealList healList, CharacterInfo info, GUIComponent panel) @@ -525,9 +538,9 @@ namespace Barotrauma TextColor = GUIStyle.Red }; - MedicalClinic.NetCrewMember member = new MedicalClinic.NetCrewMember { CharacterInfo = info, Afflictions = Array.Empty() }; + MedicalClinic.NetCrewMember member = new MedicalClinic.NetCrewMember(info); - crewBackground.OnClicked = (_, __) => + crewBackground.OnClicked = (_, _) => { SelectCharacter(member, new Vector2(panel.Rect.Right, crewBackground.Rect.Top)); return true; @@ -618,7 +631,7 @@ namespace Barotrauma pendingHealList = list; } - private void CreatePendingHealElement(GUIComponent parent, MedicalClinic.NetCrewMember crewMember, PendingHealList healList, MedicalClinic.NetAffliction[] afflictions) + private void CreatePendingHealElement(GUIComponent parent, MedicalClinic.NetCrewMember crewMember, PendingHealList healList, ImmutableArray afflictions) { CharacterInfo? healInfo = crewMember.FindCharacterInfo(MedicalClinic.GetCrewCharacters()); if (healInfo is null) { return; } @@ -803,7 +816,7 @@ namespace Barotrauma } allComponents.Add(treatAllButton); - treatAllButton.OnClicked = (_, __) => + treatAllButton.OnClicked = (_, _) => { ImmutableArray afflictions = request.Afflictions.Where(a => !medicalClinic.IsAfflictionPending(crewMember, a)).ToImmutableArray(); if (!afflictions.Any()) { return true; } @@ -873,9 +886,13 @@ namespace Barotrauma { RelativeSpacing = 0.05f }; - GUITextBlock descriptionBlock = new GUITextBlock(new RectTransform(new Vector2(1f, 0.6f), bottomTextLayout.RectTransform), prefab.Description, font: GUIStyle.SmallFont, wrap: true) + LocalizedString description = affliction.Prefab.GetDescription(affliction.Strength, AfflictionPrefab.Description.TargetType.OtherCharacter); + GUITextBlock descriptionBlock = new GUITextBlock(new RectTransform(new Vector2(1f, 0.6f), bottomTextLayout.RectTransform), + description, + font: GUIStyle.SmallFont, + wrap: true) { - ToolTip = prefab.Description + ToolTip = description }; bool truncated = false; while (descriptionBlock.TextSize.Y > descriptionBlock.Rect.Height && descriptionBlock.WrappedText.Contains('\n')) @@ -919,10 +936,9 @@ namespace Barotrauma } else { - MedicalClinic.NetCrewMember newMember = new MedicalClinic.NetCrewMember + MedicalClinic.NetCrewMember newMember = crewMember with { - CharacterInfoID = crewMember.CharacterInfoID, - Afflictions = Array.Empty() + Afflictions = ImmutableArray.Empty }; existingMember = newMember; @@ -936,7 +952,7 @@ namespace Barotrauma } } - existingMember.Afflictions = existingMember.Afflictions.Concat(afflictions).ToArray(); + existingMember.Afflictions = existingMember.Afflictions.Concat(afflictions).ToImmutableArray(); ToggleElements(ElementState.Disabled, elementsToDisable); medicalClinic.AddPendingButtonAction(existingMember, request => { diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/Store.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/Store.cs index b48a3867f..a9a532278 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/Store.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/Store.cs @@ -745,7 +745,7 @@ namespace Barotrauma } ?? Enumerable.Empty(); foreach (var button in itemCategoryButtons) { - if (!(button.UserData is MapEntityCategory category)) + if (button.UserData is not MapEntityCategory category) { continue; } @@ -1110,7 +1110,7 @@ namespace Barotrauma private void SetPriceGetters(GUIComponent itemFrame, bool buying) { - if (itemFrame == null || !(itemFrame.UserData is PurchasedItem pi)) { return; } + if (itemFrame == null || itemFrame.UserData is not PurchasedItem pi) { return; } if (itemFrame.FindChild("undiscountedprice", recursive: true) is GUITextBlock undiscountedPriceBlock) { @@ -1667,8 +1667,8 @@ namespace Barotrauma { foreach (var subItem in subItems) { - if (!subItem.Components.All(c => !(c is Holdable h) || !h.Attachable || !h.Attached)) { continue; } - if (!subItem.Components.All(c => !(c is Wire w) || w.Connections.All(c => c == null))) { continue; } + if (!subItem.Components.All(c => c is not Holdable h || !h.Attachable || !h.Attached)) { continue; } + if (!subItem.Components.All(c => c is not Wire w || w.Connections.All(c => c == null))) { continue; } if (!ItemAndAllContainersInteractable(subItem)) { continue; } AddOwnedItem(subItem); } @@ -1701,7 +1701,7 @@ namespace Barotrauma void AddOwnedItem(Item item) { - if (!(item?.Prefab.GetPriceInfo(ActiveStore) is PriceInfo priceInfo)) { return; } + if (item?.Prefab.GetPriceInfo(ActiveStore) is not PriceInfo priceInfo) { return; } bool isNonEmpty = !priceInfo.DisplayNonEmpty || item.ConditionPercentage > 5.0f; if (OwnedItems.TryGetValue(item.Prefab, out ItemQuantity itemQuantity)) { @@ -1729,7 +1729,7 @@ namespace Barotrauma private void SetItemFrameStatus(GUIComponent itemFrame, bool enabled) { - if (!(itemFrame?.UserData is PurchasedItem pi)) { return; } + if (itemFrame?.UserData is not PurchasedItem pi) { return; } bool refreshFrameStatus = !pi.IsStoreComponentEnabled.HasValue || pi.IsStoreComponentEnabled.Value != enabled; if (!refreshFrameStatus) { return; } if (itemFrame.FindChild("icon", recursive: true) is GUIImage icon) @@ -1841,11 +1841,7 @@ namespace Barotrauma LocalizedString toolTip = string.Empty; if (purchasedItem.ItemPrefab != null) { - toolTip = purchasedItem.ItemPrefab.Name; - if (!purchasedItem.ItemPrefab.Description.IsNullOrEmpty()) - { - toolTip += $"\n{purchasedItem.ItemPrefab.Description}"; - } + toolTip = purchasedItem.ItemPrefab.GetTooltip(); if (itemQuantity != null) { if (itemQuantity.AllNonEmpty) @@ -1859,7 +1855,7 @@ namespace Barotrauma } } } - itemComponent.ToolTip = toolTip; + itemComponent.ToolTip = RichString.Rich(toolTip); } if (ownedLabel != null) { @@ -2181,7 +2177,7 @@ namespace Barotrauma { needsRefresh = itemsToSellFromSub.Count != prevSubItems.Count || itemsToSellFromSub.Sum(i => i.Quantity) != prevSubItems.Sum(i => i.Quantity) || - itemsToSellFromSub.Any(i => !(prevSubItems.FirstOrDefault(prev => prev.ItemPrefab == i.ItemPrefab) is PurchasedItem prev) || i.Quantity != prev.Quantity) || + itemsToSellFromSub.Any(i => prevSubItems.FirstOrDefault(prev => prev.ItemPrefab == i.ItemPrefab) is not PurchasedItem prev || i.Quantity != prev.Quantity) || prevSubItems.Any(prev => itemsToSellFromSub.None(i => i.ItemPrefab == prev.ItemPrefab)); } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/SubmarineSelection.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/SubmarineSelection.cs index 0bdb26de7..21481ef4e 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/SubmarineSelection.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/SubmarineSelection.cs @@ -472,7 +472,7 @@ namespace Barotrauma if (transferService) { subsToShow.AddRange(GameMain.GameSession.OwnedSubmarines); - subsToShow.Sort((x, y) => x.SubmarineClass.CompareTo(y.SubmarineClass)); + subsToShow.Sort(ComparePrice); string currentSubName = CurrentOrPendingSubmarine().Name; int currentIndex = subsToShow.FindIndex(s => s.Name == currentSubName); if (currentIndex != -1) @@ -484,7 +484,11 @@ namespace Barotrauma { subsToShow.AddRange((GameMain.Client is null ? SubmarineInfo.SavedSubmarines : MultiPlayerCampaign.GetCampaignSubs()) .Where(s => s.IsCampaignCompatible && !GameMain.GameSession.OwnedSubmarines.Any(os => os.Name == s.Name))); - subsToShow.Sort((x, y) => x.SubmarineClass.CompareTo(y.SubmarineClass)); + if (GameMain.GameSession.Campaign?.Map?.CurrentLocation is Location currentLocation) + { + subsToShow.RemoveAll(sub => !currentLocation.IsSubmarineAvailable(sub)); + } + subsToShow.Sort(ComparePrice); } if (transferService) @@ -492,10 +496,14 @@ namespace Barotrauma SetConfirmButtonState(selectedSubmarine != null && selectedSubmarine.Name != CurrentOrPendingSubmarine().Name); } - subsToShow.Sort((x, y) => x.SubmarineClass.CompareTo(y.SubmarineClass)); pageCount = Math.Max(1, (int)Math.Ceiling(subsToShow.Count / (float)submarinesPerPage)); UpdatePaging(); ContentRefreshRequired = false; + + static int ComparePrice(SubmarineInfo x, SubmarineInfo y) + { + return x.Price.CompareTo(y.Price) * 100 + x.Name.CompareTo(y.Name); + } } private SubmarineInfo GetSubToDisplay(int index) diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/TabMenu.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/TabMenu.cs index 7518da497..d001fa648 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/TabMenu.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/TabMenu.cs @@ -208,10 +208,7 @@ namespace Barotrauma } GameSession.UpdateTalentNotificationIndicator(talentPointNotification); - if (SelectedTab is InfoFrameTab.Talents) - { - talentMenu?.Update(); - } + talentMenu?.Update(); if (SelectedTab != InfoFrameTab.Crew) { return; } if (linkedGUIList == null) { return; } @@ -248,10 +245,6 @@ namespace Barotrauma { infoFrame?.AddToGUIUpdateList(); NetLobbyScreen.JobInfoFrame?.AddToGUIUpdateList(); - if (SelectedTab is InfoFrameTab.Talents) - { - talentMenu?.AddToGUIUpdateList(); - } } public static void OnRoundEnded() @@ -404,7 +397,7 @@ namespace Barotrauma CreateSubmarineInfo(infoFrameHolder, Submarine.MainSub); break; case InfoFrameTab.Talents: - talentMenu.CreateGUI(infoFrameHolder); + talentMenu.CreateGUI(infoFrameHolder, Character.Controlled ?? GameMain.Client?.Character); break; } } @@ -958,16 +951,26 @@ namespace Barotrauma if (character != null) { - if (GameMain.Client == null) + if (GameMain.Client is null) { GUIComponent preview = character.Info.CreateInfoFrame(background, false, null); } else { GUIComponent preview = character.Info.CreateInfoFrame(background, false, GetPermissionIcon(GameMain.Client.ConnectedClients.Find(c => c.Character == character))); + GameMain.Client.SelectCrewCharacter(character, preview); if (!character.IsBot && GameMain.GameSession?.Campaign is MultiPlayerCampaign mpCampaign) { CreateWalletFrame(background, character, mpCampaign); } } + + if (background.FindChild(TalentMenu.ManageBotTalentsButtonUserData, recursive: true) is GUIButton { Enabled: true } talentButton) + { + talentButton.OnClicked = (button, o) => + { + talentMenu.CreateGUI(infoFrameHolder, character); + return true; + }; + } } else if (client != null) { @@ -1792,10 +1795,10 @@ namespace Barotrauma new GUITextBlock(new RectTransform(new Vector2(0.15f, 1.0f), skillContainer.RectTransform), Math.Floor(skill.Level).ToString("F0"), textAlignment: Alignment.TopRight); - float modifiedSkillLevel = character?.GetSkillLevel(skill.Identifier) ?? skill.Level; + float modifiedSkillLevel = MathF.Floor(character?.GetSkillLevel(skill.Identifier) ?? skill.Level); if (!MathUtils.NearlyEqual(MathF.Floor(modifiedSkillLevel), MathF.Floor(skill.Level))) { - int skillChange = (int)MathF.Floor(modifiedSkillLevel - skill.Level); + int skillChange = (int)MathF.Floor(modifiedSkillLevel - MathF.Floor(skill.Level)); string stringColor = skillChange switch { > 0 => XMLExtensions.ToStringHex(GUIStyle.Green), @@ -1806,7 +1809,7 @@ namespace Barotrauma RichString changeText = RichString.Rich($"(‖color:{stringColor}‖{(skillChange > 0 ? "+" : string.Empty) + skillChange}‖color:end‖)"); new GUITextBlock(new RectTransform(new Vector2(0.15f, 1.0f), skillContainer.RectTransform), changeText) { Padding = Vector4.Zero }; } - //skillContainer.Recalculate(); + skillContainer.Recalculate(); } parent.RecalculateChildren(); diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/TalentMenu.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/TalentMenu.cs index a3151bf46..cdb5059d9 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/TalentMenu.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/TalentMenu.cs @@ -5,15 +5,18 @@ using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; using Barotrauma.Extensions; +using Barotrauma.Networking; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Input; using static Barotrauma.TalentTree; -using static Barotrauma.TalentTree.TalentTreeStageState; +using static Barotrauma.TalentTree.TalentStages; namespace Barotrauma { - internal readonly record struct TalentButton(GUIButton Button, - GUIComponent IconComponent, + internal readonly record struct TalentShowCaseButton(ImmutableHashSet Buttons, + GUIComponent IconComponent); + + internal readonly record struct TalentButton(GUIComponent IconComponent, TalentPrefab Prefab) { public Identifier Identifier => Prefab.Identifier; @@ -39,6 +42,11 @@ namespace Barotrauma internal sealed class TalentMenu { + public const string ManageBotTalentsButtonUserData = "managebottalentsbutton"; + + private Character? character; + private CharacterInfo? characterInfo; + private static readonly Color unselectedColor = new Color(240, 255, 255, 225), unselectableColor = new Color(100, 100, 100, 225), pressedColor = new Color(60, 60, 60, 225), @@ -46,8 +54,8 @@ namespace Barotrauma unlockedColor = new Color(24, 37, 31, 255), availableColor = new Color(50, 47, 33, 255); - private static readonly ImmutableDictionary talentStageStyles = - new Dictionary + private static readonly ImmutableDictionary talentStageStyles = + new Dictionary { [Invalid] = new TalentTreeStyle("TalentTreeLocked", lockedColor), [Locked] = new TalentTreeStyle("TalentTreeLocked", lockedColor), @@ -57,10 +65,13 @@ namespace Barotrauma }.ToImmutableDictionary(); private readonly HashSet talentButtons = new HashSet(); + private readonly HashSet talentShowCaseButtons = new HashSet(); private readonly HashSet showCaseTalentFrames = new HashSet(); private readonly HashSet talentCornerIcons = new HashSet(); private HashSet selectedTalents = new HashSet(); + private readonly Queue showCaseClosureQueue = new(); + private GUIListBox? skillListBox; private GUITextBlock? talentPointText; private GUIProgressBar? experienceBar; @@ -70,13 +81,17 @@ namespace Barotrauma private GUIButton? talentApplyButton, talentResetButton; - public void CreateGUI(GUIFrame parent) + public void CreateGUI(GUIFrame parent, Character? targetCharacter) { parent.ClearChildren(); talentButtons.Clear(); + talentShowCaseButtons.Clear(); talentCornerIcons.Clear(); showCaseTalentFrames.Clear(); + character = targetCharacter; + characterInfo = targetCharacter?.Info; + GUIFrame background = new GUIFrame(new RectTransform(Vector2.One, parent.RectTransform, Anchor.TopCenter), style: "GUIFrameListBox"); int padding = GUI.IntScale(15); GUIFrame frame = new GUIFrame(new RectTransform(new Point(background.Rect.Width - padding, background.Rect.Height - padding), parent.RectTransform, Anchor.Center), style: null); @@ -89,23 +104,21 @@ namespace Barotrauma Stretch = true }; - Character? controlledCharacter = Character.Controlled; - CharacterInfo? info = controlledCharacter?.Info ?? GameMain.Client?.CharacterInfo; - if (info is null) { return; } + if (characterInfo is null) { return; } - CreateStatPanel(contentLayout, info); + CreateStatPanel(contentLayout, characterInfo); new GUIFrame(new RectTransform(new Vector2(1f, 1f), contentLayout.RectTransform), style: "HorizontalLine"); - if (JobTalentTrees.TryGet(info.Job.Prefab.Identifier, out TalentTree? talentTree)) + if (JobTalentTrees.TryGet(characterInfo.Job.Prefab.Identifier, out TalentTree? talentTree)) { - CreateTalentMenu(contentLayout, info, talentTree!); + CreateTalentMenu(contentLayout, characterInfo, talentTree!); } - CreateFooter(contentLayout, info); + CreateFooter(contentLayout, characterInfo); UpdateTalentInfo(); - if (GameMain.NetworkMember != null) + if (GameMain.NetworkMember != null && IsOwnCharacter(characterInfo)) { CreateMultiplayerCharacterSettings(frame, content); } @@ -164,7 +177,7 @@ namespace Barotrauma OnClicked = (button, o) => { GameMain.Client?.SendCharacterInfo(GameMain.Client.PendingName); - characterSettingsFrame!.Visible = false; + characterSettingsFrame.Visible = false; content.Visible = true; return true; } @@ -179,8 +192,7 @@ namespace Barotrauma new GUICustomComponent(new RectTransform(new Vector2(0.25f, 1f), topLayout.RectTransform), onDraw: (batch, component) => { - float posY = component.Rect.Center.Y - component.Rect.Width / 2; - info.DrawPortrait(batch, new Vector2(component.Rect.X, posY), Vector2.Zero, component.Rect.Width, false, false); + info.DrawPortrait(batch, component.Rect.Location.ToVector2(), Vector2.Zero, component.Rect.Width, false, false); }); GUILayoutGroup nameLayout = new GUILayoutGroup(new RectTransform(new Vector2(0.3f, 1f), topLayout.RectTransform)) @@ -209,20 +221,22 @@ namespace Barotrauma if (talentsOutsideTree.Any()) { //spacing - new GUIFrame(new RectTransform(new Vector2(1.0f, 0.05f), nameLayout.RectTransform), style: null); + new GUIFrame(new RectTransform(new Vector2(1.0f, 0.01f), nameLayout.RectTransform), style: null); - GUILayoutGroup extraTalentLayout = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.3f), nameLayout.RectTransform), childAnchor: Anchor.TopCenter); + GUILayoutGroup extraTalentLayout = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.55f), nameLayout.RectTransform), childAnchor: Anchor.TopCenter); - talentPointText = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), extraTalentLayout.RectTransform, anchor: Anchor.Center), TextManager.Get("talentmenu.extratalents"), font: GUIStyle.SubHeadingFont); + talentPointText = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.3f), extraTalentLayout.RectTransform, anchor: Anchor.Center), TextManager.Get("talentmenu.extratalents"), font: GUIStyle.SubHeadingFont) + { + AutoScaleVertical = true + }; talentPointText.RectTransform.MaxSize = new Point(int.MaxValue, (int)talentPointText.TextSize.Y); - var extraTalentList = new GUIListBox(new RectTransform(new Vector2(0.9f, 0.8f), extraTalentLayout.RectTransform, anchor: Anchor.Center), isHorizontal: true) + var extraTalentList = new GUIListBox(new RectTransform(new Vector2(0.9f, 0.7f), extraTalentLayout.RectTransform, anchor: Anchor.Center), isHorizontal: true) { AutoHideScrollBar = false, ResizeContentToMakeSpaceForScrollBar = false }; extraTalentList.ScrollBar.RectTransform.SetPosition(Anchor.BottomCenter, Pivot.TopCenter); - extraTalentList.RectTransform.MinSize = new Point(0, GUI.IntScale(65)); extraTalentLayout.Recalculate(); extraTalentList.ForceLayoutRecalculation(); @@ -231,7 +245,7 @@ namespace Barotrauma if (extraTalent is null) { continue; } GUIImage talentImg = new GUIImage(new RectTransform(Vector2.One, extraTalentList.Content.RectTransform, scaleBasis: ScaleBasis.BothHeight), sprite: extraTalent.Icon, scaleToFit: true) { - ToolTip = RichString.Rich($"‖color:{Color.White.ToStringHex()}‖{extraTalent.DisplayName}‖color:end‖" + "\n\n" + extraTalent.Description), + ToolTip = RichString.Rich($"‖color:{Color.White.ToStringHex()}‖{extraTalent.DisplayName}‖color:end‖" + "\n\n" + ToolBox.ExtendColorToPercentageSigns(extraTalent.Description.Value)), Color = GUIStyle.Green }; } @@ -298,10 +312,11 @@ namespace Barotrauma TalentOption option = subTree.TalentOptionStages[i]; CreateTalentOption(subTreeLayoutGroup, subTree, i, option, info); } - subTreeLayoutGroup.RectTransform.Resize(new Point(subTreeLayoutGroup.Rect.Width, + subTreeLayoutGroup.RectTransform.Resize(new Point(subTreeLayoutGroup.Rect.Width, subTreeLayoutGroup.Children.Sum(c => c.Rect.Height + subTreeLayoutGroup.AbsoluteSpacing))); subTreeLayoutGroup.RectTransform.MinSize = new Point(subTreeLayoutGroup.Rect.Width, subTreeLayoutGroup.Rect.Height); subTreeLayoutGroup.Recalculate(); + if (subTree.Type == TalentTreeType.Specialization) { talentList.RectTransform.Resize(new Point(talentList.Rect.Width, Math.Max(subTreeLayoutGroup.Rect.Height, talentList.Rect.Height))); @@ -310,15 +325,15 @@ namespace Barotrauma } var specializationList = GetSpecializationList(); - GetSpecializationList().RectTransform.Resize(new Point(specializationList.Content.Children.Sum(c => c.Rect.Width), specializationList.Rect.Height)); + GetSpecializationList().RectTransform.Resize(new Point(specializationList.Content.Children.Sum(static c => c.Rect.Width), specializationList.Rect.Height)); GUITextBlock.AutoScaleAndNormalize(subTreeNames); GUIListBox GetSpecializationList() { - if (mainList.Content.Children.LastOrDefault() is GUIListBox specializationList) + if (mainList.Content.Children.LastOrDefault() is GUIListBox specList) { - return specializationList; + return specList; } GUIListBox newSpecializationList = new GUIListBox(new RectTransform(new Vector2(1.0f, 0.5f), mainList.Content.RectTransform, Anchor.TopCenter), isHorizontal: true, style: null); @@ -354,21 +369,24 @@ namespace Barotrauma GUILayoutGroup talentOptionLayoutGroup = new GUILayoutGroup(new RectTransform(Vector2.One, talentOptionCenterGroup.RectTransform), isHorizontal: true, childAnchor: Anchor.CenterLeft) { Stretch = true }; HashSet talentOptionIdentifiers = talentOption.TalentIdentifiers.OrderBy(static t => t).ToHashSet(); - bool hasShowcase = talentOption.ShowcaseTalent.TryUnwrap(out Identifier showcaseTalentIdentifier); - GUILayoutGroup showcaseLayout = talentOptionLayoutGroup; + HashSet buttonsToAdd = new(); - if (hasShowcase) + Dictionary> showCaseTalentParents = new(); + Dictionary showCaseTalentButtonsToAdd = new(); + + foreach (var (showCaseTalentIdentifier, talents) in talentOption.ShowCaseTalents) { - talentOptionIdentifiers.Add(showcaseTalentIdentifier); + talentOptionIdentifiers.Add(showCaseTalentIdentifier); Point parentSize = talentBackground.RectTransform.NonScaledSize; - GUIFrame showCaseFrame = new GUIFrame(new RectTransform(new Point((int)(parentSize.X / 3f * (talentOptionIdentifiers.Count - 1)), parentSize.Y)), style: "GUITooltip") + GUIFrame showCaseFrame = new GUIFrame(new RectTransform(new Point((int)(parentSize.X / 3f * (talents.Count - 1)), parentSize.Y)), style: "GUITooltip") { - UserData = showcaseTalentIdentifier, + UserData = showCaseTalentIdentifier, IgnoreLayoutGroups = true, Visible = false }; GUILayoutGroup showcaseCenterGroup = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.7f), showCaseFrame.RectTransform, Anchor.Center), childAnchor: Anchor.CenterLeft); - showcaseLayout = new GUILayoutGroup(new RectTransform(Vector2.One, showcaseCenterGroup.RectTransform), isHorizontal: true) { Stretch = true }; + GUILayoutGroup showcaseLayout = new GUILayoutGroup(new RectTransform(Vector2.One, showcaseCenterGroup.RectTransform), isHorizontal: true) { Stretch = true }; + showCaseTalentParents.Add(showcaseLayout, talents); showCaseTalentFrames.Add(showCaseFrame); } @@ -376,16 +394,16 @@ namespace Barotrauma { if (!TalentPrefab.TalentPrefabs.TryGet(talentId, out TalentPrefab? talent)) { continue; } - bool isShowCaseTalent = hasShowcase && talentId == showcaseTalentIdentifier; - GUIComponent talentParent; + bool isShowCaseTalent = talentOption.ShowCaseTalents.ContainsKey(talentId); + GUIComponent talentParent = talentOptionLayoutGroup; - if (hasShowcase && talentId != showcaseTalentIdentifier) + foreach (var (key, value) in showCaseTalentParents) { - talentParent = showcaseLayout; - } - else - { - talentParent = talentOptionLayoutGroup; + if (value.Contains(talentId)) + { + talentParent = key; + break; + } } GUIFrame talentFrame = new GUIFrame(new RectTransform(Vector2.One, talentParent.RectTransform), style: null) @@ -396,7 +414,7 @@ namespace Barotrauma GUIFrame croppedTalentFrame = new GUIFrame(new RectTransform(Vector2.One, talentFrame.RectTransform, anchor: Anchor.Center, scaleBasis: ScaleBasis.BothHeight), style: null); GUIButton talentButton = new GUIButton(new RectTransform(Vector2.One, croppedTalentFrame.RectTransform, anchor: Anchor.Center), style: null) { - ToolTip = RichString.Rich($"‖color:{Color.White.ToStringHex()}‖{talent.DisplayName}‖color:end‖" + "\n\n" + talent.Description), + ToolTip = RichString.Rich($"‖color:{Color.White.ToStringHex()}‖{talent.DisplayName}‖color:end‖" + "\n\n" + ToolBox.ExtendColorToPercentageSigns(talent.Description.Value)), UserData = talent.Identifier, PressedColor = pressedColor, Enabled = info.Character != null, @@ -420,20 +438,18 @@ namespace Barotrauma return true; } - Character? controlledCharacter = info.Character; - if (controlledCharacter is null) { return false; } + if (character is null) { return false; } if (talentOption.MaxChosenTalents is 1) { // deselect other buttons in tier by removing their selected talents from pool - foreach (GUIButton guiButton in talentOptionLayoutGroup.GetAllChildren()) + foreach (Identifier identifier in selectedTalents) { - if (guiButton.UserData is Identifier otherTalentIdentifier && guiButton != button) + if (character.HasTalent(identifier) || identifier == talentId) { continue; } + + if (talentOptionIdentifiers.Contains(identifier)) { - if (!controlledCharacter.HasTalent(otherTalentIdentifier)) - { - selectedTalents.Remove(otherTalentIdentifier); - } + selectedTalents.Remove(identifier); } } } @@ -451,7 +467,7 @@ namespace Barotrauma selectedTalents.Remove(talentIdentifier); } } - else if (!controlledCharacter.HasTalent(talentIdentifier)) + else if (!character.HasTalent(talentIdentifier)) { selectedTalents.Remove(talentIdentifier); } @@ -487,9 +503,31 @@ namespace Barotrauma } iconImage.Enabled = talentButton.Enabled; - if (isShowCaseTalent) { continue; } + if (isShowCaseTalent) + { + showCaseTalentButtonsToAdd.Add(talentId, iconImage); + continue; + } - talentButtons.Add(new TalentButton(talentButton, iconImage, talent)); + buttonsToAdd.Add(new TalentButton(iconImage, talent)); + } + + foreach (TalentButton button in buttonsToAdd) + { + talentButtons.Add(button); + } + + foreach (var (key, value) in showCaseTalentButtonsToAdd) + { + HashSet buttons = new(); + foreach (Identifier identifier in talentOption.ShowCaseTalents[key]) + { + if (talentButtons.FirstOrNull(talentButton => talentButton.Identifier == identifier) is not { } button) { continue; } + + buttons.Add(button); + } + + talentShowCaseButtons.Add(new TalentShowCaseButton(buttons.ToImmutableHashSet(), value)); } talentCornerIcons.Add(new TalentCornerIcon(subTree.Identifier, index, cornerIcon, talentBackground, talentBackgroundHighlight)); @@ -534,6 +572,8 @@ namespace Barotrauma private bool ResetTalentSelection(GUIButton guiButton, object userData) { + if (characterInfo is null) { return false; } + selectedTalents = characterInfo.GetUnlockedTalentsInTree().ToHashSet(); UpdateTalentInfo(); return true; } @@ -554,16 +594,15 @@ namespace Barotrauma private bool ApplyTalentSelection(GUIButton guiButton, object userData) { - Character controlledCharacter = Character.Controlled; - if (controlledCharacter is null) { return false; } + if (character is null) { return false; } - ApplyTalents(controlledCharacter); + ApplyTalents(character); return true; } public void UpdateTalentInfo() { - if (!(Character.Controlled is { Info: var info } character)) { return; } + if (character is null || characterInfo is null) { return; } bool unlockedAllTalents = character.HasUnlockedAllTalents(); @@ -576,15 +615,15 @@ namespace Barotrauma } else { - experienceText.Text = $"{info.ExperiencePoints - info.GetExperienceRequiredForCurrentLevel()} / {info.GetExperienceRequiredToLevelUp() - info.GetExperienceRequiredForCurrentLevel()}"; - experienceBar.BarSize = info.GetProgressTowardsNextLevel(); + experienceText.Text = $"{characterInfo.ExperiencePoints - characterInfo.GetExperienceRequiredForCurrentLevel()} / {characterInfo.GetExperienceRequiredToLevelUp() - characterInfo.GetExperienceRequiredForCurrentLevel()}"; + experienceBar.BarSize = characterInfo.GetProgressTowardsNextLevel(); } selectedTalents = CheckTalentSelection(character, selectedTalents).ToHashSet(); - string pointsLeft = info.GetAvailableTalentPoints().ToString(); + string pointsLeft = characterInfo.GetAvailableTalentPoints().ToString(); - int talentCount = selectedTalents.Count - info.GetUnlockedTalentsInTree().Count(); + int talentCount = selectedTalents.Count - characterInfo.GetUnlockedTalentsInTree().Count(); if (unlockedAllTalents) { @@ -603,7 +642,7 @@ namespace Barotrauma foreach (TalentCornerIcon cornerIcon in talentCornerIcons) { - TalentTreeStageState state = GetTalentOptionStageState(character, cornerIcon.TalentTree, cornerIcon.Index, selectedTalents); + TalentStages state = GetTalentOptionStageState(character, cornerIcon.TalentTree, cornerIcon.Index, selectedTalents); TalentTreeStyle style = talentStageStyles[state]; GUIComponentStyle newStyle = style.ComponentStyle; cornerIcon.IconComponent.ApplyStyle(newStyle); @@ -614,60 +653,94 @@ namespace Barotrauma foreach (TalentButton talentButton in talentButtons) { - Identifier talentIdentifier = talentButton.Identifier; - bool unselectable = !IsViableTalentForCharacter(character, talentIdentifier, selectedTalents) || character.HasTalent(talentIdentifier); - Color newTalentColor = unselectable ? unselectableColor : unselectedColor; - Color hoverColor = Color.White; - bool selected = false; + TalentStages stage = GetTalentState(character, talentButton.Identifier, selectedTalents); + ApplyTalentIconColor(stage, talentButton.IconComponent, talentButton.Prefab.ColorOverride); + } - if (character.HasTalent(talentIdentifier)) - { - selected = true; - newTalentColor = GUIStyle.Green; - } - else if (selectedTalents.Contains(talentIdentifier)) - { - selected = true; - newTalentColor = GUIStyle.Orange; - hoverColor = Color.Lerp(GUIStyle.Orange, Color.White, 0.7f); - } - - bool shouldOverride = !unselectable || selected; - - if (shouldOverride && talentButton.Prefab.ColorOverride.TryUnwrap(out Color overrideColor)) - { - newTalentColor = overrideColor; - } - - talentButton.IconComponent.Color = newTalentColor; - talentButton.IconComponent.HoverColor = hoverColor; + foreach (TalentShowCaseButton showCaseTalentButton in talentShowCaseButtons) + { + TalentStages collectiveTalentStage = GetCollectiveTalentState(character, showCaseTalentButton.Buttons, selectedTalents); + ApplyTalentIconColor(collectiveTalentStage, showCaseTalentButton.IconComponent, Option.None()); } if (skillListBox is null) { return; } - TabMenu.CreateSkillList(character, info, skillListBox); - } + TabMenu.CreateSkillList(character, characterInfo, skillListBox); - public void AddToGUIUpdateList() - { - bool mouseInteracted = PlayerInput.PrimaryMouseButtonClicked() || PlayerInput.SecondaryMouseButtonClicked() || PlayerInput.ScrollWheelSpeed != 0; - bool keyboardInteracted = PlayerInput.KeyHit(Keys.Escape) || GameSettings.CurrentConfig.KeyMap.Bindings[InputType.InfoTab].IsHit(); - - foreach (GUIComponent component in showCaseTalentFrames) + static TalentStages GetTalentState(Character character, Identifier talentIdentifier, IReadOnlyCollection selectedTalents) { - component.AddToGUIUpdateList(order: 1); - if (!component.Visible) { continue; } - - if (keyboardInteracted || (mouseInteracted && !component.Rect.Contains(PlayerInput.MousePosition))) + bool unselectable = !IsViableTalentForCharacter(character, talentIdentifier, selectedTalents) || character.HasTalent(talentIdentifier); + TalentStages stage = unselectable ? Locked : Available; + if (unselectable) { - component.Visible = false; + stage = Locked; } + + if (character.HasTalent(talentIdentifier)) + { + stage = Unlocked; + } + else if (selectedTalents.Contains(talentIdentifier)) + { + stage = Highlighted; + } + + return stage; + } + + static void ApplyTalentIconColor(TalentStages stage, GUIComponent component, Option colorOverride) + { + Color color = stage switch + { + Invalid => unselectableColor, + Locked => unselectableColor, + Unlocked => GetColorOrOverride(GUIStyle.Green, colorOverride), + Highlighted => GetColorOrOverride(GUIStyle.Orange, colorOverride), + Available => GetColorOrOverride(unselectedColor, colorOverride), + _ => throw new ArgumentOutOfRangeException(nameof(stage), stage, null) + }; + + component.Color = color; + component.HoverColor = Color.Lerp(color, Color.White, 0.7f); + + static Color GetColorOrOverride(Color color, Option colorOverride) => colorOverride.TryUnwrap(out Color overrideColor) ? overrideColor : color; + } + + // this could also be reused for setting colors for talentCornerIcons but that's for another time + static TalentStages GetCollectiveTalentState(Character character, IReadOnlyCollection buttons, IReadOnlyCollection selectedTalents) + { + HashSet talentStages = new HashSet(); + foreach (TalentButton button in buttons) + { + talentStages.Add(GetTalentState(character, button.Identifier, selectedTalents)); + } + + TalentStages collectiveStage = talentStages.Any(static stage => stage is Locked) + ? Locked + : Available; + + foreach (TalentStages stage in talentStages) + { + if (stage is Highlighted) + { + collectiveStage = Highlighted; + break; + } + + if (stage is Unlocked) + { + collectiveStage = Unlocked; + break; + } + } + + return collectiveStage; } } public void Update() { - if (Character.Controlled?.Info is not { } characterInfo || talentResetButton is null || talentApplyButton is null) { return; } + if (characterInfo is null || talentResetButton is null || talentApplyButton is null) { return; } int talentCount = selectedTalents.Count - characterInfo.GetUnlockedTalentsInTree().Count(); talentResetButton.Enabled = talentApplyButton.Enabled = talentCount > 0; @@ -675,6 +748,58 @@ namespace Barotrauma { talentApplyButton.Flash(GUIStyle.Orange); } + + while (showCaseClosureQueue.TryDequeue(out Identifier identifier)) + { + foreach (GUIComponent component in showCaseTalentFrames) + { + if (component.UserData is Identifier showcaseIdentifier && showcaseIdentifier == identifier) + { + component.Visible = false; + } + } + } + + bool mouseInteracted = PlayerInput.PrimaryMouseButtonClicked() || PlayerInput.SecondaryMouseButtonClicked() || PlayerInput.ScrollWheelSpeed != 0; + bool keyboardInteracted = PlayerInput.KeyHit(Keys.Escape) || GameSettings.CurrentConfig.KeyMap.Bindings[InputType.InfoTab].IsHit(); + + foreach (GUIComponent component in showCaseTalentFrames) + { + if (component.UserData is not Identifier identifier) { continue; } + + component.AddToGUIUpdateList(order: 1); + if (!component.Visible) { continue; } + + if (keyboardInteracted || (mouseInteracted && !component.Rect.Contains(PlayerInput.MousePosition))) + { + showCaseClosureQueue.Enqueue(identifier); + } + } + } + + private static bool IsOwnCharacter(CharacterInfo? info) + { + if (info is null) { return false; } + + CharacterInfo? ownCharacterInfo = Character.Controlled?.Info ?? GameMain.Client?.CharacterInfo; + if (ownCharacterInfo is null) { return false; } + + return info == ownCharacterInfo; + } + + public static bool CanManageTalents(CharacterInfo targetInfo) + { + // in singleplayer we can do whatever we want + if (GameMain.IsSingleplayer) { return true; } + + // always allow managing talents for own character + if (IsOwnCharacter(targetInfo)) { return true; } + + // don't allow controlling non-bot characters + if (targetInfo.Character is not { IsBot: true }) { return false; } + + // lastly check if we have the permission to do this + return GameMain.Client is { } client && client.HasPermission(ClientPermissions.ManageBotTalents); } } } \ No newline at end of file diff --git a/Barotrauma/BarotraumaClient/ClientSource/GUI/UpgradeStore.cs b/Barotrauma/BarotraumaClient/ClientSource/GUI/UpgradeStore.cs index b58bcc3fc..445a77787 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GUI/UpgradeStore.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GUI/UpgradeStore.cs @@ -278,10 +278,13 @@ namespace Barotrauma * | upgrades | maintenance | <- 1/3rd empty space | * |---------------------------------------------------------------------------------------------------| */ - GUILayoutGroup leftLayout = new GUILayoutGroup(rectT(0.5f, 1, topHeaderLayout)) { RelativeSpacing = 0.05f }; + GUILayoutGroup leftLayout = new GUILayoutGroup(rectT(0.4f, 1, topHeaderLayout)) { RelativeSpacing = 0.05f }; GUILayoutGroup locationLayout = new GUILayoutGroup(rectT(1, 0.5f, leftLayout), isHorizontal: true); GUIImage submarineIcon = new GUIImage(rectT(new Point(locationLayout.Rect.Height, locationLayout.Rect.Height), locationLayout), style: "SubmarineIcon", scaleToFit: true); - new GUITextBlock(rectT(1.0f - submarineIcon.RectTransform.RelativeSize.X, 1, locationLayout), TextManager.Get("UpgradeUI.Title"), font: GUIStyle.LargeFont); + var header = new GUITextBlock(rectT(1.0f - submarineIcon.RectTransform.RelativeSize.X, 1, locationLayout), TextManager.Get("UpgradeUI.Title"), font: GUIStyle.LargeFont); + header.RectTransform.MaxSize = new Point((int)(header.TextSize.X + header.Padding.X + header.Padding.Z), int.MaxValue); + new GUITextBlock(rectT(1.0f, 1, locationLayout), TextManager.Get("UpgradeUI.AllSubmarinesInfo"), font: GUIStyle.SmallFont, wrap: true); + categoryButtonLayout = new GUILayoutGroup(rectT(0.4f, 0.3f, leftLayout), isHorizontal: true) { Stretch = true }; GUIButton upgradeButton = new GUIButton(rectT(1, 1f, categoryButtonLayout), TextManager.Get("UICategory.Upgrades"), style: "GUITabButton") { UserData = UpgradeTab.Upgrade, Selected = selectedUpgradeTab == UpgradeTab.Upgrade }; GUIButton repairButton = new GUIButton(rectT(1, 1f, categoryButtonLayout), TextManager.Get("UICategory.Maintenance"), style: "GUITabButton") { UserData = UpgradeTab.Repairs, Selected = selectedUpgradeTab == UpgradeTab.Repairs }; diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameMain.cs b/Barotrauma/BarotraumaClient/ClientSource/GameMain.cs index 5965d350e..21dc20279 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameMain.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameMain.cs @@ -4,6 +4,7 @@ using Barotrauma.Networking; using Barotrauma.Particles; using Barotrauma.Steam; using Barotrauma.Transition; +using Barotrauma.Tutorials; using FarseerPhysics; using FarseerPhysics.Dynamics; using Microsoft.Xna.Framework; @@ -774,9 +775,9 @@ namespace Barotrauma { GUIMessageBox.MessageBoxes.Remove(GUIMessageBox.VisibleBox); } - else if (GameSession?.GameMode is TutorialMode tutorialMode && tutorialMode.Tutorial.ContentRunning) + else if (ObjectiveManager.ContentRunning) { - tutorialMode.Tutorial.CloseActiveContentGUI(); + ObjectiveManager.CloseActiveContentGUI(); } else if (GameSession.IsTabMenuOpen) { @@ -828,7 +829,7 @@ namespace Barotrauma Paused = (DebugConsole.IsOpen || DebugConsole.Paused || GUI.PauseMenuOpen || GUI.SettingsMenuOpen || - (GameSession?.GameMode is TutorialMode tutoMode && tutoMode.Tutorial.ContentRunning)) && + (GameSession?.GameMode is TutorialMode && ObjectiveManager.ContentRunning)) && (NetworkMember == null || !NetworkMember.GameStarted); if (GameSession?.GameMode != null && GameSession.GameMode.Paused) { @@ -862,8 +863,9 @@ namespace Barotrauma { Screen.Selected.Update(Timing.Step); } - else if (GameSession?.GameMode is TutorialMode tutorialMode && tutorialMode.Tutorial.ContentRunning) + else if (ObjectiveManager.ContentRunning && GameSession?.GameMode is TutorialMode tutorialMode) { + ObjectiveManager.VideoPlayer.Update(); tutorialMode.Update((float)Timing.Step); } else diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/CampaignMode.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/CampaignMode.cs index 3311d1650..856417e04 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/CampaignMode.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/CampaignMode.cs @@ -4,6 +4,7 @@ using Barotrauma.Networking; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using System; +using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -203,6 +204,10 @@ namespace Barotrauma } break; } + if (Level.IsLoadedOutpost && !ObjectiveManager.AllActiveObjectivesCompleted()) + { + endRoundButton.Visible = false; + } if (ReadyCheckButton != null) { ReadyCheckButton.Visible = endRoundButton.Visible; } @@ -266,7 +271,7 @@ namespace Barotrauma Rand.ThreadId = Thread.CurrentThread.ManagedThreadId; try { - GameMain.GameSession.StartRound(newLevel, mirrorLevel: mirror); + GameMain.GameSession.StartRound(newLevel, mirrorLevel: mirror, startOutpost: GetPredefinedStartOutpost()); } catch (Exception e) { @@ -283,6 +288,18 @@ namespace Barotrauma return loadTask; } + protected SubmarineInfo GetPredefinedStartOutpost() + { + if (Map?.CurrentLocation?.Type?.GetForcedOutpostGenerationParams() is OutpostGenerationParams parameters && !parameters.OutpostFilePath.IsNullOrEmpty()) + { + return new SubmarineInfo(parameters.OutpostFilePath.Value) + { + OutpostGenerationParams = parameters + }; + } + return null; + } + partial void NPCInteractProjSpecific(Character npc, Character interactor) { if (npc == null || interactor == null) { return; } diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/SinglePlayerCampaign.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/SinglePlayerCampaign.cs index 965b3a274..74b5d0b9d 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/SinglePlayerCampaign.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/SinglePlayerCampaign.cs @@ -265,8 +265,8 @@ namespace Barotrauma private IEnumerable DoLoadInitialLevel(LevelData level, bool mirror) { - GameMain.GameSession.StartRound(level, - mirrorLevel: mirror); + + GameMain.GameSession.StartRound(level, mirrorLevel: mirror, startOutpost: GetPredefinedStartOutpost()); GameMain.GameScreen.Select(); CoroutineManager.StartCoroutine(DoInitialCameraTransition(), "SinglePlayerCampaign.DoInitialCameraTransition"); diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/Tutorial.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/Tutorial.cs index a9c7f14e8..d6c8f225d 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/Tutorial.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/Tutorial.cs @@ -1,7 +1,5 @@ using Barotrauma.Extensions; -using Barotrauma.IO; using Barotrauma.Items.Components; -using Microsoft.Xna.Framework; using System; using System.Collections.Generic; using System.Linq; @@ -25,107 +23,9 @@ namespace Barotrauma.Tutorials #region Tutorial variables public readonly Identifier Identifier; - public LocalizedString DisplayName { get; } - - public bool ContentRunning { get; private set; } - - private GUIComponent infoBox; - private Action infoBoxClosedCallback; - - private VideoPlayer videoPlayer; - private Point screenResolution; - private WindowMode windowMode; - private float prevUIScale; - - private GUILayoutGroup objectiveGroup; - private readonly LocalizedString objectiveTextTranslated; - - private readonly List ActiveObjectives = new List(); - private const float ObjectiveComponentAnimationTime = 1.5f; - private Segment ActiveContentSegment { get; set; } - - public class Segment - { - public readonly record struct Text( - Identifier Tag, - int Width = DefaultWidth, - int Height = DefaultHeight, - Anchor Anchor = Anchor.Center); - - public readonly record struct Video( - string FullPath, - Identifier TextTag, - int Width = DefaultWidth, - int Height = DefaultHeight) - { - public string FileName => Path.GetFileName(FullPath.CleanUpPath()); - public string ContentPath => Path.GetDirectoryName(FullPath.CleanUpPath()); - } - - private const int DefaultWidth = 450; - private const int DefaultHeight = 80; - - public GUIImage ObjectiveStateIndicator; - public GUIButton ObjectiveButton; - public GUITextBlock LinkedTextBlock; - public LocalizedString ObjectiveText; - - public readonly Identifier Id; - public readonly Text TextContent; - public readonly Video VideoContent; - public readonly AutoPlayVideo AutoPlayVideo; - - public Action OnClickObjective; - - public TutorialSegmentType SegmentType { get; private set; } - - public static Segment CreateInfoBoxSegment(Identifier id, Identifier objectiveTextTag, AutoPlayVideo autoPlayVideo, Text textContent = default, Video videoContent = default) - { - return new Segment(id, objectiveTextTag, autoPlayVideo, textContent, videoContent); - } - - public static Segment CreateMessageBoxSegment(Identifier id, Identifier objectiveTextTag, Action onClickObjective) - { - return new Segment(id, objectiveTextTag, onClickObjective); - } - - public static Segment CreateObjectiveSegment(Identifier id, Identifier objectiveTextTag) - { - return new Segment(id, objectiveTextTag); - } - - private Segment(Identifier id, Identifier objectiveTextTag, AutoPlayVideo autoPlayVideo, Text textContent = default, Video videoContent = default) - { - Id = id; - ObjectiveText = TextManager.ParseInputTypes(TextManager.Get(objectiveTextTag)); - AutoPlayVideo = autoPlayVideo; - TextContent = textContent; - VideoContent = videoContent; - SegmentType = TutorialSegmentType.InfoBox; - } - - private Segment(Identifier id, Identifier objectiveTextTag, Action onClickObjective) - { - Id = id; - ObjectiveText = TextManager.ParseInputTypes(TextManager.Get(objectiveTextTag)); - OnClickObjective = onClickObjective; - SegmentType = TutorialSegmentType.MessageBox; - } - - private Segment(Identifier id, Identifier objectiveTextTag) - { - Id = id; - ObjectiveText = TextManager.ParseInputTypes(TextManager.Get(objectiveTextTag)); - SegmentType = TutorialSegmentType.Objective; - } - - public void ConnectMessageBox(Segment messageBoxSegment) - { - SegmentType = TutorialSegmentType.MessageBox; - OnClickObjective = messageBoxSegment.OnClickObjective; - } - } + public LocalizedString Description { get; } + private bool completed; public bool Completed @@ -163,6 +63,8 @@ namespace Barotrauma.Tutorials public readonly List<(Entity entity, Identifier iconStyle)> Icons = new List<(Entity entity, Identifier iconStyle)>(); + public bool Paused { get; private set; } + #endregion #region Tutorial Controls @@ -171,8 +73,7 @@ namespace Barotrauma.Tutorials { Identifier = $"tutorial.{prefab.Identifier}".ToIdentifier(); DisplayName = TextManager.Get(Identifier); - objectiveTextTranslated = TextManager.Get("Tutorial.Objective"); - + Description = TextManager.Get($"tutorial.{prefab.Identifier}.description"); TutorialPrefab = prefab; eventPrefab = EventSet.GetEventPrefab(prefab.EventIdentifier); } @@ -260,35 +161,26 @@ namespace Barotrauma.Tutorials tutorialCoroutine = CoroutineManager.StartCoroutine(UpdateState()); - Initialize(); + GameMain.GameSession.CrewManager.AllowCharacterSwitch = TutorialPrefab.AllowCharacterSwitch; + GameMain.GameSession.CrewManager.AutoHideCrewList(); + + if (Character.Controlled?.Inventory is CharacterInventory inventory) + { + foreach (Item item in inventory.AllItemsMod) + { + if (item.HasTag(TutorialPrefab.StartingItemTags)) { continue; } + item.Unequip(Character.Controlled); + Character.Controlled.Inventory.RemoveItem(item); + } + } yield return CoroutineStatus.Success; } - private void Initialize() - { - GameMain.GameSession.CrewManager.AllowCharacterSwitch = TutorialPrefab.AllowCharacterSwitch; - GameMain.GameSession.CrewManager.AutoHideCrewList(); - - if (Character.Controlled is Character character) - { - foreach (Item item in character.Inventory.AllItemsMod) - { - if (item.HasTag(TutorialPrefab.StartingItemTags)) { continue; } - item.Unequip(character); - character.Inventory.RemoveItem(item); - } - } - } - public void Start() { - videoPlayer = new VideoPlayer(); GameMain.Instance.ShowLoading(Loading()); - ActiveObjectives.Clear(); - ActiveContentSegment = null; - - CreateObjectiveFrame(); + ObjectiveManager.ResetObjectives(); // Setup doors: Clear all requirements, unless the door is setup as locked. foreach (var item in Item.ItemList) @@ -304,24 +196,8 @@ namespace Barotrauma.Tutorials } } - public void AddToGUIUpdateList() - { - if (GameMain.GraphicsWidth != screenResolution.X || GameMain.GraphicsHeight != screenResolution.Y || prevUIScale != GUI.Scale || GameSettings.CurrentConfig.Graphics.DisplayMode != windowMode) - { - CreateObjectiveFrame(); - } - if (ActiveObjectives.Count > 0) - { - objectiveGroup?.AddToGUIUpdateList(order: -1); - } - infoBox?.AddToGUIUpdateList(order: 100); - videoPlayer?.AddToGUIUpdateList(order: 100); - } - public void Update() { - videoPlayer?.Update(); - if (character != null) { if (character.Oxygen < 1) @@ -342,8 +218,7 @@ namespace Barotrauma.Tutorials { GUI.PreventPauseMenuToggle = false; } - ContentRunning = false; - infoBox = null; + ObjectiveManager.ClearContent(); } else { @@ -374,18 +249,6 @@ namespace Barotrauma.Tutorials yield return CoroutineStatus.Success; } - public void CloseActiveContentGUI() - { - if (videoPlayer.IsPlaying) - { - videoPlayer.Stop(); - } - else if (infoBox != null) - { - CloseInfoFrame(); - } - } - public IEnumerable UpdateState() { while (GameMain.Instance.LoadingScreenOpen || Level.Loaded == null || Level.Loaded.Generating) @@ -432,13 +295,56 @@ namespace Barotrauma.Tutorials yield return new WaitForSeconds(WaitBeforeFade); + Action onEnd = () => GameMain.MainMenuScreen.ReturnToMainMenu(null, null); + + TutorialPrefab nextTutorialPrefab = null; + bool displayEndMessage = + TutorialPrefab.EndMessage.EndType == TutorialPrefab.EndType.Restart || + (TutorialPrefab.EndMessage.EndType == TutorialPrefab.EndType.Continue && TutorialPrefab.Prefabs.TryGet(TutorialPrefab.EndMessage.NextTutorialIdentifier, out nextTutorialPrefab)); + + if (displayEndMessage) + { + Paused = true; + var endingMessageBox = new GUIMessageBox( + headerText: "", + text: TextManager.Get($"{Identifier}.completed"), + buttons: new LocalizedString[] + { + TextManager.Get(nextTutorialPrefab is null ? "restart" : "campaigncontinue"), + TextManager.Get("pausemenuquit") + }); + + endingMessageBox.Buttons[0].OnClicked += (_, _) => + { + if (nextTutorialPrefab is null) + { + onEnd = () => Restart(null, null); + } + else + { + onEnd = () => + { + GameMain.MainMenuScreen.ReturnToMainMenu(null, null); + new Tutorial(nextTutorialPrefab).Start(); + }; + } + return true; + }; + endingMessageBox.Buttons[0].OnClicked += endingMessageBox.Close; + endingMessageBox.Buttons[0].OnClicked += (_, _) => Paused = false; + endingMessageBox.Buttons[1].OnClicked += endingMessageBox.Close; + endingMessageBox.Buttons[1].OnClicked += (_, _) => Paused = false; + } + + while (Paused) { yield return CoroutineStatus.Running; } + var endCinematic = new CameraTransition(Submarine.MainSub, GameMain.GameScreen.Cam, null, Alignment.Center, panDuration: FadeOutTime); Completed = true; while (endCinematic.Running) { yield return CoroutineStatus.Running; } Stop(); - GameMain.MainMenuScreen.ReturnToMainMenu(null, null); + onEnd(); } } @@ -450,379 +356,15 @@ namespace Barotrauma.Tutorials return true; } - public void TriggerTutorialSegment(Segment segment, bool connectObjective = false) - { - if (segment.SegmentType != TutorialSegmentType.InfoBox) - { - ActiveObjectives.Add(segment); - AddToObjectiveList(segment, connectObjective); - return; - } - - Inventory.DraggingItems.Clear(); - ContentRunning = true; - ActiveContentSegment = segment; - - var title = TextManager.Get(segment.Id); - LocalizedString tutorialText = TextManager.GetFormatted(segment.TextContent.Tag); - tutorialText = TextManager.ParseInputTypes(tutorialText); - - switch (segment.AutoPlayVideo) - { - case AutoPlayVideo.Yes: - infoBox = CreateInfoFrame( - title, - tutorialText, - segment.TextContent.Width, - segment.TextContent.Height, - segment.TextContent.Anchor, - hasButton: true, - onInfoBoxClosed: LoadActiveContentVideo); - break; - case AutoPlayVideo.No: - infoBox = CreateInfoFrame( - title, - tutorialText, - segment.TextContent.Width, - segment.TextContent.Height, - segment.TextContent.Anchor, - hasButton: true, - onInfoBoxClosed: StopCurrentContentSegment, - onVideoButtonClicked: LoadActiveContentVideo); - break; - } - } - - public void CompleteTutorialSegment(Identifier segmentId) - { - if (GetActiveObjective(segmentId) is not Segment segment) - { - DebugConsole.AddWarning($"Warning: tried to complete the tutorial segment \"{segmentId}\" in tutorial \"{Identifier}\" but it isn't active!"); - return; - } - if (GUIStyle.GetComponentStyle("ObjectiveIndicatorCompleted") is GUIComponentStyle style) - { - //return if already completed - if (segment.ObjectiveStateIndicator.Style == style) { return; } - segment.ObjectiveStateIndicator.ApplyStyle(style); - } - segment.ObjectiveStateIndicator.Parent.Flash(color: GUIStyle.Green, flashDuration: 0.35f, useRectangleFlash: true); - segment.ObjectiveButton.OnClicked = null; - segment.ObjectiveButton.CanBeFocused = false; - GameAnalyticsManager.AddDesignEvent($"Tutorial:{Identifier}:{segmentId}:Completed"); - } - - public void RemoveTutorialSegment(Identifier segmentId) - { - if (GetActiveObjective(segmentId) is not Segment segment) - { - DebugConsole.AddWarning($"Warning: tried to remove the tutorial segment \"{segmentId}\" in tutorial \"{Identifier}\" but it isn't active!"); - return; - } - segment.ObjectiveStateIndicator.FadeOut(ObjectiveComponentAnimationTime, false); - segment.LinkedTextBlock.FadeOut(ObjectiveComponentAnimationTime, false); - var parent = segment.LinkedTextBlock.Parent; - parent.FadeOut(ObjectiveComponentAnimationTime, true, onRemove: () => - { - ActiveObjectives.Remove(segment); - objectiveGroup?.Recalculate(); - }); - parent.RectTransform.MoveOverTime(GetObjectiveHiddenPosition(parent.RectTransform), ObjectiveComponentAnimationTime); - segment.ObjectiveButton.OnClicked = null; - segment.ObjectiveButton.CanBeFocused = false; - } - - private Segment GetActiveObjective(Identifier id) => ActiveObjectives.FirstOrDefault(s => s.Id == id); - public void Stop() { if (tutorialCoroutine != null) { CoroutineManager.StopCoroutines(tutorialCoroutine); } - ContentRunning = false; - infoBox = null; - videoPlayer?.Remove(); + ObjectiveManager.ResetUI(); } #endregion - - #region Objectives - - /// - /// Create the objective list that holds the objectives (called on start and on resolution change) - /// - private void CreateObjectiveFrame() - { - var objectiveListFrame = new GUIFrame(HUDLayoutSettings.ToRectTransform(HUDLayoutSettings.TutorialObjectiveListArea, GUI.Canvas), style: null); - objectiveGroup = new GUILayoutGroup(new RectTransform(Vector2.One, objectiveListFrame.RectTransform)) - { - AbsoluteSpacing = (int)GUIStyle.Font.LineHeight - }; - for (int i = 0; i < ActiveObjectives.Count; i++) - { - AddToObjectiveList(ActiveObjectives[i]); - } - screenResolution = new Point(GameMain.GraphicsWidth, GameMain.GraphicsHeight); - windowMode = GameSettings.CurrentConfig.Graphics.DisplayMode; - prevUIScale = GUI.Scale; - } - - /// - /// Stops content running and adds the active segment to the objective list - /// - private void StopCurrentContentSegment() - { - if (!ActiveContentSegment.ObjectiveText.IsNullOrEmpty()) - { - ActiveObjectives.Add(ActiveContentSegment); - AddToObjectiveList(ActiveContentSegment); - } - ContentRunning = false; - ActiveContentSegment = null; - } - - /// - /// Adds the segment to the objective list - /// - private void AddToObjectiveList(Segment segment, bool connectExisting = false) - { - if (connectExisting) - { - if (ActiveObjectives.Find(o => o.Id == segment.Id) is { } existingSegment) - { - existingSegment.ConnectMessageBox(segment); - SetButtonBehavior(existingSegment); - } - return; - } - - var frameRt = new RectTransform(new Vector2(1.0f, 0.1f), objectiveGroup.RectTransform) - { - AbsoluteOffset = GetObjectiveHiddenPosition(), - MinSize = new Point(0, objectiveGroup.AbsoluteSpacing) - }; - var frame = new GUIFrame(frameRt, style: null) - { - CanBeFocused = true - }; - objectiveGroup.Recalculate(); - - segment.LinkedTextBlock = new GUITextBlock( - new RectTransform(new Point(frameRt.Rect.Width - objectiveGroup.AbsoluteSpacing, 0), frame.RectTransform, anchor: Anchor.TopRight), - TextManager.ParseInputTypes(segment.ObjectiveText), - wrap: true); - - var size = new Point(segment.LinkedTextBlock.Rect.Width, segment.LinkedTextBlock.Rect.Height); - segment.LinkedTextBlock.RectTransform.NonScaledSize = size; - segment.LinkedTextBlock.RectTransform.MinSize = size; - segment.LinkedTextBlock.RectTransform.MaxSize = size; - segment.LinkedTextBlock.RectTransform.IsFixedSize = true; - frame.RectTransform.Resize(new Point(frame.Rect.Width, segment.LinkedTextBlock.RectTransform.Rect.Height), resizeChildren: false); - frame.RectTransform.IsFixedSize = true; - - var indicatorRt = new RectTransform(new Point(objectiveGroup.AbsoluteSpacing), frame.RectTransform, isFixedSize: true); - segment.ObjectiveStateIndicator = new GUIImage(indicatorRt, "ObjectiveIndicatorIncomplete"); - - SetTransparent(segment.LinkedTextBlock); - - segment.ObjectiveButton = new GUIButton(new RectTransform(Vector2.One, segment.LinkedTextBlock.RectTransform, Anchor.TopLeft, Pivot.TopLeft), style: null) - { - ToolTip = objectiveTextTranslated - }; - SetButtonBehavior(segment); - SetTransparent(segment.ObjectiveButton); - - frameRt.MoveOverTime(new Point(0, frameRt.AbsoluteOffset.Y), ObjectiveComponentAnimationTime, onDoneMoving: () => objectiveGroup?.Recalculate()); - - static void SetTransparent(GUIComponent component) => component.Color = component.HoverColor = component.PressedColor = component.SelectedColor = Color.Transparent; - - void SetButtonBehavior(Segment segment) - { - segment.ObjectiveButton.CanBeFocused = segment.SegmentType != TutorialSegmentType.Objective; - segment.ObjectiveButton.OnClicked = (GUIButton btn, object userdata) => - { - if (segment.SegmentType == TutorialSegmentType.InfoBox) - { - if (segment.AutoPlayVideo == AutoPlayVideo.Yes) - { - ReplaySegmentVideo(segment); - } - else - { - ShowSegmentText(segment); - } - } - else if (segment.SegmentType == TutorialSegmentType.MessageBox) - { - segment.OnClickObjective?.Invoke(); - } - return true; - }; - } - } - - private void ReplaySegmentVideo(Segment segment) - { - if (ContentRunning) { return; } - Inventory.DraggingItems.Clear(); - ContentRunning = true; - LoadVideo(segment); - } - - private void ShowSegmentText(Segment segment) - { - if (ContentRunning) { return; } - Inventory.DraggingItems.Clear(); - ContentRunning = true; - ActiveContentSegment = segment; - infoBox = CreateInfoFrame( - TextManager.Get(segment.Id), - TextManager.Get(segment.TextContent.Tag), - segment.TextContent.Width, - segment.TextContent.Height, - segment.TextContent.Anchor, - hasButton: true, - onInfoBoxClosed: () => ContentRunning = false, - onVideoButtonClicked: () => LoadVideo(segment)); - } - - private Point GetObjectiveHiddenPosition(RectTransform rt = null) - { - return new Point(GameMain.GraphicsWidth - objectiveGroup.Rect.X, rt?.AbsoluteOffset.Y ?? 0); - } - - #endregion - - #region InfoFrame - - private void CloseInfoFrame() => CloseInfoFrame(null, null); - - private bool CloseInfoFrame(GUIButton button, object userData) - { - infoBox = null; - infoBoxClosedCallback?.Invoke(); - return true; - } - - /// - // Creates and displays a tutorial info box - /// - private GUIComponent CreateInfoFrame(LocalizedString title, LocalizedString text, int width = 300, int height = 80, Anchor anchor = Anchor.TopRight, bool hasButton = false, Action onInfoBoxClosed = null, Action onVideoButtonClicked = null) - { - if (hasButton) - { - height += 60; - } - - width = (int)(width * GUI.Scale); - height = (int)(height * GUI.Scale); - - LocalizedString wrappedText = ToolBox.WrapText(text, width, GUIStyle.Font); - height += (int)GUIStyle.Font.MeasureString(wrappedText).Y; - - if (title.Length > 0) - { - height += (int)GUIStyle.Font.MeasureString(title).Y + (int)(150 * GUI.Scale); - } - - var background = new GUIFrame(new RectTransform(new Point(GameMain.GraphicsWidth, GameMain.GraphicsHeight), GUI.Canvas, Anchor.Center), style: "GUIBackgroundBlocker"); - - var infoBlock = new GUIFrame(new RectTransform(new Point(width, height), background.RectTransform, anchor)); - infoBlock.Flash(GUIStyle.Green); - - var infoContent = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.9f), infoBlock.RectTransform, Anchor.Center)) - { - Stretch = true, - AbsoluteSpacing = 5 - }; - - if (title.Length > 0) - { - var titleBlock = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), infoContent.RectTransform), - title, font: GUIStyle.LargeFont, textAlignment: Alignment.Center, textColor: new Color(253, 174, 0)); - titleBlock.RectTransform.IsFixedSize = true; - } - - text = RichString.Rich(text); - GUITextBlock textBlock = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), infoContent.RectTransform), text, wrap: true); - - textBlock.RectTransform.IsFixedSize = true; - infoBoxClosedCallback = onInfoBoxClosed; - - if (hasButton) - { - var buttonContainer = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.15f), infoContent.RectTransform), isHorizontal: true) - { - RelativeSpacing = 0.1f - }; - buttonContainer.RectTransform.IsFixedSize = true; - - if (onVideoButtonClicked != null) - { - buttonContainer.Stretch = true; - var videoButton = new GUIButton(new RectTransform(new Vector2(0.4f, 1.0f), buttonContainer.RectTransform), - TextManager.Get("Video"), style: "GUIButtonLarge") - { - OnClicked = (GUIButton button, object obj) => - { - onVideoButtonClicked(); - return true; - } - }; - } - else - { - buttonContainer.Stretch = false; - buttonContainer.ChildAnchor = Anchor.Center; - } - - var okButton = new GUIButton(new RectTransform(new Vector2(0.4f, 1.0f), buttonContainer.RectTransform), - TextManager.Get("OK"), style: "GUIButtonLarge") - { - OnClicked = CloseInfoFrame - }; - } - - infoBlock.RectTransform.NonScaledSize = new Point(infoBlock.Rect.Width, (int)(infoContent.Children.Sum(c => c.Rect.Height + infoContent.AbsoluteSpacing) / infoContent.RectTransform.RelativeSize.Y)); - - SoundPlayer.PlayUISound(GUISoundType.UIMessage); - - return background; - } - - #endregion - - #region Video - - private void LoadVideo(Segment segment) - { - videoPlayer ??= new VideoPlayer(); - if (segment.AutoPlayVideo == AutoPlayVideo.Yes) - { - videoPlayer.LoadContent( - contentPath: segment.VideoContent.ContentPath, - videoSettings: new VideoPlayer.VideoSettings(segment.VideoContent.FileName), - textSettings: new VideoPlayer.TextSettings(segment.VideoContent.TextTag, segment.VideoContent.Width), - contentId: segment.Id, - startPlayback: true, - objective: segment.ObjectiveText, - onStop: StopCurrentContentSegment); - } - else - { - videoPlayer.LoadContent( - contentPath: segment.VideoContent.ContentPath, - videoSettings: new VideoPlayer.VideoSettings(segment.VideoContent.FileName), - textSettings: null, - contentId: segment.Id, - startPlayback: true, - objective: string.Empty); - } - } - - private void LoadActiveContentVideo() => LoadVideo(ActiveContentSegment); - - #endregion } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/TutorialMode.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/TutorialMode.cs index d155a1c23..3a8b4a7f5 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/TutorialMode.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameModes/Tutorials/TutorialMode.cs @@ -6,6 +6,8 @@ namespace Barotrauma { public Tutorial Tutorial; + public override bool Paused => Tutorial.Paused; + public TutorialMode(GameModePreset preset) : base(preset) { } public override void Start() @@ -19,12 +21,6 @@ namespace Barotrauma } } - public override void AddToGUIUpdateList() - { - base.AddToGUIUpdateList(); - Tutorial.AddToGUIUpdateList(); - } - public override void Update(float deltaTime) { base.Update(deltaTime); diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameSession.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameSession.cs index dd566ee34..90226c5e0 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameSession.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/GameSession.cs @@ -1,4 +1,5 @@ -using Microsoft.Xna.Framework; +using Barotrauma.Tutorials; +using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; namespace Barotrauma @@ -128,8 +129,9 @@ namespace Barotrauma if (GUI.DisableHUD) { return; } GameMode?.AddToGUIUpdateList(); tabMenu?.AddToGUIUpdateList(); + ObjectiveManager.AddToGUIUpdateList(); - if ((!(GameMode is CampaignMode campaign) || (!campaign.ForceMapUI && !campaign.ShowCampaignUI)) && + if ((GameMode is not CampaignMode campaign || (!campaign.ForceMapUI && !campaign.ShowCampaignUI)) && !CoroutineManager.IsCoroutineRunning("LevelTransition") && !CoroutineManager.IsCoroutineRunning("SubmarineTransition")) { if (topLeftButtonGroup == null) @@ -223,6 +225,7 @@ namespace Barotrauma } HintManager.Update(); + ObjectiveManager.VideoPlayer.Update(); } public void SetRespawnInfo(bool visible, string text, Color textColor, bool buttonsVisible, bool waitForNextRoundRespawn) diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/HintManager.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/HintManager.cs index 0dfc29ed7..fcb5438dc 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/HintManager.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/HintManager.cs @@ -1,6 +1,7 @@ using Barotrauma.Extensions; using Barotrauma.IO; using Barotrauma.Items.Components; +using Barotrauma.Tutorials; using Microsoft.Xna.Framework; using System; using System.Collections.Generic; @@ -209,7 +210,7 @@ namespace Barotrauma { if (item.CurrentHull == null) { continue; } if (item.GetComponent() == null) { continue; } - if (!item.HasTag("ballast")) { continue; } + if (!item.HasTag("ballast") && !item.CurrentHull.RoomName.Contains("ballast", StringComparison.OrdinalIgnoreCase)) { continue; } BallastHulls.Add(item.CurrentHull); } } @@ -383,6 +384,34 @@ namespace Barotrauma IgnoreReminder("tabmenu"); } + public static void OnObtainedItem(Character character, Item item) + { + if (!CanDisplayHints()) { return; } + if (character != Character.Controlled || item == null) { return; } + + if (DisplayHint($"onobtaineditem.{item.Prefab.Identifier}".ToIdentifier())) { return; } + foreach (Identifier tag in item.GetTags()) + { + if (DisplayHint($"onobtaineditem.{tag}".ToIdentifier())) { return; } + } + + if ((item.HasTag("geneticmaterial") && character.Inventory.FindItemByTag("geneticdevice".ToIdentifier(), recursive: true) != null) || + (item.HasTag("geneticdevice") && character.Inventory.FindItemByTag("geneticmaterial".ToIdentifier(), recursive: true) != null)) + { + if (DisplayHint($"geneticmaterial.useinstructions".ToIdentifier())) { return; } + } + } + + public static void OnStartDeconstructing(Character character, Deconstructor deconstructor) + { + if (!CanDisplayHints()) { return; } + if (character != Character.Controlled || deconstructor == null) { return; } + if (deconstructor.InputContainer.Inventory.AllItems.All(it => it.GetComponent() is not null)) + { + DisplayHint($"geneticmaterial.onrefiningorcombining".ToIdentifier()); + } + } + public static void OnStoleItem(Character character, Item item) { if (!CanDisplayHints()) { return; } @@ -507,7 +536,7 @@ namespace Barotrauma if (!CanDisplayHints()) { return; } if (character != Character.Controlled) { return; } // Could make this more generic if there will ever be any other status effect related hints - if (!(component is Repairable) || actionType != ActionType.OnFailure) { return; } + if (component is not Repairable || actionType != ActionType.OnFailure) { return; } DisplayHint("onrepairfailed".ToIdentifier()); } @@ -563,7 +592,7 @@ namespace Barotrauma foreach (var me in gap.linkedTo) { if (me == Character.Controlled.CurrentHull) { continue; } - if (!(me is Hull adjacentHull)) { continue; } + if (me is not Hull adjacentHull) { continue; } if (!IsOnFriendlySub()) { continue; } if (IsWearingDivingSuit()) { continue; } if (adjacentHull.LethalPressure > 5.0f && DisplayHint("onadjacenthull.highpressure".ToIdentifier())) { return; } @@ -720,6 +749,7 @@ namespace Barotrauma if (requireControllingCharacter && Character.Controlled == null) { return false; } var gameMode = GameMain.GameSession?.GameMode; if (!(gameMode is CampaignMode || gameMode is MissionMode)) { return false; } + if (ObjectiveManager.AnyObjectives) { return false; } if (requireGameScreen && Screen.Selected != GameMain.GameScreen) { return false; } return true; } diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/MedicalClinic.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/MedicalClinic.cs index c06efe8d5..232e84838 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/GameSession/MedicalClinic.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/MedicalClinic.cs @@ -9,7 +9,7 @@ using Barotrauma.Networking; namespace Barotrauma { - internal partial class MedicalClinic + internal sealed partial class MedicalClinic { public enum RequestResult { @@ -19,63 +19,11 @@ namespace Barotrauma Timeout } - public readonly struct RequestAction - { - public readonly Action Callback; - public readonly DateTimeOffset Timeout; - - public RequestAction(Action callback, DateTimeOffset timeout) - { - Callback = callback; - Timeout = timeout; - } - } - - public readonly struct AfflictionRequest - { - public readonly RequestResult Result; - public readonly ImmutableArray Afflictions; - - public AfflictionRequest(RequestResult result, ImmutableArray afflictions) - { - Result = result; - Afflictions = afflictions; - } - } - - public readonly struct PendingRequest - { - public readonly RequestResult Result; - public readonly ImmutableArray CrewMembers; - - public PendingRequest(RequestResult result, ImmutableArray crewMembers) - { - Result = result; - CrewMembers = crewMembers; - } - } - - public readonly struct CallbackOnlyRequest - { - public readonly RequestResult Result; - - public CallbackOnlyRequest(RequestResult result) - { - Result = result; - } - } - - public readonly struct HealRequest - { - public readonly RequestResult Result; - public readonly HealRequestResult HealResult; - - public HealRequest(RequestResult result, HealRequestResult healResult) - { - Result = result; - HealResult = healResult; - } - } + public readonly record struct RequestAction(Action Callback, DateTimeOffset Timeout); + public readonly record struct AfflictionRequest(RequestResult Result, ImmutableArray Afflictions); + public readonly record struct PendingRequest(RequestResult Result, NetCollection CrewMembers); + public readonly record struct CallbackOnlyRequest(RequestResult Result); + public readonly record struct HealRequest(RequestResult Result, HealRequestResult HealResult); private readonly List> afflictionRequests = new List>(); private readonly List> pendingHealRequests = new List>(); @@ -96,7 +44,7 @@ namespace Barotrauma } #endif - if (!(info is { Character: { CharacterHealth: { } health } })) + if (info is not { Character.CharacterHealth: { } health }) { onReceived.Invoke(new AfflictionRequest(RequestResult.Error, ImmutableArray.Empty)); return; @@ -123,14 +71,14 @@ namespace Barotrauma public void Update(float deltaTime) { DateTimeOffset now = DateTimeOffset.Now; - UpdateQueue(afflictionRequests, now, onTimeout: callback => { callback(new AfflictionRequest(RequestResult.Timeout, ImmutableArray.Empty)); }); - UpdateQueue(pendingHealRequests, now, onTimeout: callback => { callback(new PendingRequest(RequestResult.Timeout, ImmutableArray.Empty)); }); - UpdateQueue(healAllRequests, now, onTimeout: callback => { callback(new HealRequest(RequestResult.Timeout, HealRequestResult.Unknown)); }); + UpdateQueue(afflictionRequests, now, onTimeout: static callback => { callback(new AfflictionRequest(RequestResult.Timeout, ImmutableArray.Empty)); }); + UpdateQueue(pendingHealRequests, now, onTimeout: static callback => { callback(new PendingRequest(RequestResult.Timeout, NetCollection.Empty)); }); + UpdateQueue(healAllRequests, now, onTimeout: static callback => { callback(new HealRequest(RequestResult.Timeout, HealRequestResult.Unknown)); }); UpdateQueue(clearAllRequests, now, onTimeout: CallbackOnlyTimeout); UpdateQueue(addRequests, now, onTimeout: CallbackOnlyTimeout); UpdateQueue(removeRequests, now, onTimeout: CallbackOnlyTimeout); - void CallbackOnlyTimeout(Action callback) { callback(new CallbackOnlyRequest(RequestResult.Timeout)); } + static void CallbackOnlyTimeout(Action callback) { callback(new CallbackOnlyRequest(RequestResult.Timeout)); } } public bool IsAfflictionPending(NetCrewMember character, NetAffliction affliction) @@ -148,9 +96,9 @@ namespace Barotrauma private static bool TryDequeue(List> requestQueue, out Action result) { RequestAction? first = requestQueue.FirstOrNull(); - if (!(first is { } action)) + if (first is not { } action) { - result = _ => { }; + result = static _ => { }; return false; } @@ -191,11 +139,25 @@ namespace Barotrauma private static int GetPing() { - if (GameMain.IsSingleplayer || !(GameMain.Client?.Name is { } ownName) || !(GameMain.NetworkMember?.ConnectedClients is { } clients)) { return 0; } + if (GameMain.IsSingleplayer || GameMain.Client?.Name is not { } ownName || GameMain.NetworkMember?.ConnectedClients is not { } clients) { return 0; } return (from client in clients where client.Name == ownName select client.Ping).FirstOrDefault(); } + public void TreatAllButtonAction(Action onReceived) + { + if (GameMain.IsSingleplayer) + { + AddEverythingToPending(); + onReceived(new CallbackOnlyRequest(RequestResult.Success)); + OnUpdate?.Invoke(); + return; + } + + addRequests.Add(new RequestAction(onReceived, GetTimeout())); + ClientSend(null, NetworkHeader.ADD_EVERYTHING_TO_PENDING, DeliveryMethod.Reliable); + } + public void HealAllButtonAction(Action onReceived) { if (GameMain.IsSingleplayer) @@ -296,8 +258,11 @@ namespace Barotrauma private void NewAdditonReceived(IReadMessage inc, MessageFlag flag) { - NetCrewMember crewMember = INetSerializableStruct.Read(inc); - InsertPendingCrewMember(crewMember); + var crewMembers = INetSerializableStruct.Read>(inc); + foreach (var crewMember in crewMembers) + { + InsertPendingCrewMember(crewMember); + } if (flag == MessageFlag.Response && TryDequeue(addRequests, out var callback)) { callback(new CallbackOnlyRequest(RequestResult.Success)); @@ -318,11 +283,7 @@ namespace Barotrauma private static void SendAfflictionRequest(CharacterInfo info) { - INetSerializableStruct crewMember = new NetCrewMember - { - CharacterInfo = info, - Afflictions = Array.Empty() - }; + INetSerializableStruct crewMember = new NetCrewMember(info); ClientSend(crewMember, NetworkHeader.REQUEST_AFFLICTIONS, DeliveryMethod.Unreliable); } @@ -337,17 +298,17 @@ namespace Barotrauma NetCrewMember crewMember = INetSerializableStruct.Read(inc); if (TryDequeue(afflictionRequests, out var callback)) { - RequestResult result = crewMember.CharacterInfoID == 0 ? RequestResult.Error : RequestResult.Success; + RequestResult result = crewMember.CharacterInfoID is 0 ? RequestResult.Error : RequestResult.Success; callback(new AfflictionRequest(result, crewMember.Afflictions.ToImmutableArray())); } } private void PendingRequestReceived(IReadMessage inc) { - NetPendingCrew pendingCrew = INetSerializableStruct.Read(inc); + var pendingCrew = INetSerializableStruct.Read>(inc); if (TryDequeue(pendingHealRequests, out var callback)) { - callback(new PendingRequest(RequestResult.Success, pendingCrew.CrewMembers.ToImmutableArray())); + callback(new PendingRequest(RequestResult.Success, pendingCrew)); } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/GameSession/ObjectiveManager.cs b/Barotrauma/BarotraumaClient/ClientSource/GameSession/ObjectiveManager.cs new file mode 100644 index 000000000..7e70ed7f5 --- /dev/null +++ b/Barotrauma/BarotraumaClient/ClientSource/GameSession/ObjectiveManager.cs @@ -0,0 +1,599 @@ +using Barotrauma.Extensions; +using Barotrauma.IO; +using Barotrauma.Tutorials; +using Microsoft.Xna.Framework; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Barotrauma; + +static class ObjectiveManager +{ + public class Segment + { + public readonly record struct Text( + Identifier Tag, + int Width = DefaultWidth, + int Height = DefaultHeight, + Anchor Anchor = Anchor.Center); + + public readonly record struct Video( + string FullPath, + Identifier TextTag, + int Width = DefaultWidth, + int Height = DefaultHeight) + { + public string FileName => Path.GetFileName(FullPath.CleanUpPath()); + public string ContentPath => Path.GetDirectoryName(FullPath.CleanUpPath()); + } + + private const int DefaultWidth = 450; + private const int DefaultHeight = 80; + + public GUIImage ObjectiveStateIndicator; + public GUIButton ObjectiveButton; + public GUITextBlock LinkedTextBlock; + public LocalizedString ObjectiveText; + + public readonly Identifier Id; + public readonly Text TextContent; + public readonly Video VideoContent; + public readonly AutoPlayVideo AutoPlayVideo; + + public Action OnClickObjective; + + public bool IsCompleted { get; set; } + + public bool CanBeCompleted { get; set; } + + public Identifier ParentId { get; set; } + + public TutorialSegmentType SegmentType { get; private set; } + + public static Segment CreateInfoBoxSegment(Identifier id, Identifier objectiveTextTag, AutoPlayVideo autoPlayVideo, Text textContent = default, Video videoContent = default) + { + return new Segment(id, objectiveTextTag, autoPlayVideo, textContent, videoContent); + } + + public static Segment CreateMessageBoxSegment(Identifier id, Identifier objectiveTextTag, Action onClickObjective) + { + return new Segment(id, objectiveTextTag, onClickObjective); + } + + public static Segment CreateObjectiveSegment(Identifier id, Identifier objectiveTextTag) + { + return new Segment(id, objectiveTextTag); + } + + private Segment(Identifier id, Identifier objectiveTextTag, AutoPlayVideo autoPlayVideo, Text textContent = default, Video videoContent = default) + { + Id = id; + ObjectiveText = TextManager.ParseInputTypes(TextManager.Get(objectiveTextTag)); + AutoPlayVideo = autoPlayVideo; + TextContent = textContent; + VideoContent = videoContent; + SegmentType = TutorialSegmentType.InfoBox; + } + + private Segment(Identifier id, Identifier objectiveTextTag, Action onClickObjective) + { + Id = id; + ObjectiveText = TextManager.ParseInputTypes(TextManager.Get(objectiveTextTag)); + OnClickObjective = onClickObjective; + SegmentType = TutorialSegmentType.MessageBox; + } + + private Segment(Identifier id, Identifier objectiveTextTag) + { + Id = id; + ObjectiveText = TextManager.ParseInputTypes(TextManager.Get(objectiveTextTag)); + SegmentType = TutorialSegmentType.Objective; + } + + public void ConnectMessageBox(Segment messageBoxSegment) + { + SegmentType = TutorialSegmentType.MessageBox; + OnClickObjective = messageBoxSegment.OnClickObjective; + } + } + + private readonly record struct ScreenSettings( + Point ScreenResolution = default, + float UiScale = default, + WindowMode WindowMode = default) + { + public bool HaveChanged() => + GameMain.GraphicsWidth != ScreenResolution.X || + GameMain.GraphicsHeight != ScreenResolution.Y || + GUI.Scale != UiScale || + GameSettings.CurrentConfig.Graphics.DisplayMode != WindowMode; + }; + + private const float ObjectiveComponentAnimationTime = 1.5f; + + public static bool ContentRunning { get; private set; } + + public static VideoPlayer VideoPlayer { get; } = new VideoPlayer(); + + private static Segment ActiveContentSegment { get; set; } + + private readonly static List activeObjectives = new List(); + private static GUIComponent infoBox; + private static Action infoBoxClosedCallback; + private static ScreenSettings screenSettings; + private static GUILayoutGroup objectiveGroup; + private static LocalizedString objectiveTextTranslated; + + public static void AddToGUIUpdateList() + { + if (screenSettings.HaveChanged()) + { + CreateObjectiveFrame(); + } + if (activeObjectives.Count > 0 && GameMain.GameSession?.Campaign is not { ShowCampaignUI: true }) + { + objectiveGroup?.AddToGUIUpdateList(order: -1); + } + infoBox?.AddToGUIUpdateList(order: 100); + VideoPlayer.AddToGUIUpdateList(order: 100); + } + + public static void TriggerTutorialSegment(Segment segment, bool connectObjective = false) + { + if (segment.SegmentType != TutorialSegmentType.InfoBox) + { + activeObjectives.Add(segment); + AddToObjectiveList(segment, connectObjective); + return; + } + + Inventory.DraggingItems.Clear(); + ContentRunning = true; + ActiveContentSegment = segment; + + var title = TextManager.Get(segment.Id); + LocalizedString tutorialText = TextManager.GetFormatted(segment.TextContent.Tag); + tutorialText = TextManager.ParseInputTypes(tutorialText); + + switch (segment.AutoPlayVideo) + { + case AutoPlayVideo.Yes: + infoBox = CreateInfoFrame( + title, + tutorialText, + segment.TextContent.Width, + segment.TextContent.Height, + segment.TextContent.Anchor, + hasButton: true, + onInfoBoxClosed: LoadActiveContentVideo); + break; + case AutoPlayVideo.No: + infoBox = CreateInfoFrame( + title, + tutorialText, + segment.TextContent.Width, + segment.TextContent.Height, + segment.TextContent.Anchor, + hasButton: true, + onInfoBoxClosed: StopCurrentContentSegment, + onVideoButtonClicked: LoadActiveContentVideo); + break; + } + } + + public static void CompleteTutorialSegment(Identifier segmentId) + { + if (GetActiveObjective(segmentId) is not Segment segment || !segment.CanBeCompleted || segment.IsCompleted) + { + return; + } + if (!MarkSegmentCompleted(segment)) + { + return; + } + if (GameMain.GameSession?.GameMode is TutorialMode tutorialMode) + { + GameAnalyticsManager.AddDesignEvent($"Tutorial:{tutorialMode.Tutorial?.Identifier}:{segmentId}:Completed"); + } + else if (GameMain.GameSession?.GameMode is CampaignMode campaign) + { + GameAnalyticsManager.AddDesignEvent($"Tutorial:CampaignMode:{segmentId}:Completed"); + campaign?.CampaignMetadata?.SetValue(segmentId, true); + } + } + + public static bool MarkSegmentCompleted(Segment segment, bool flash = true) + { + segment.IsCompleted = true; + if (GUIStyle.GetComponentStyle("ObjectiveIndicatorCompleted") is GUIComponentStyle style) + { + if (segment.ObjectiveStateIndicator.Style == style) + { + return false; + } + segment.ObjectiveStateIndicator.ApplyStyle(style); + } + if (flash) + { + segment.ObjectiveStateIndicator.Parent.Flash(color: GUIStyle.Green, flashDuration: 0.35f, useRectangleFlash: true); + } + segment.ObjectiveButton.OnClicked = null; + segment.ObjectiveButton.CanBeFocused = false; + return true; + } + + public static void RemoveTutorialSegment(Identifier segmentId) + { + if (GetActiveObjective(segmentId) is not Segment segment) + { + if (GameMain.GameSession?.GameMode is TutorialMode tutorialMode) + { + DebugConsole.AddWarning($"Warning: tried to remove the tutorial segment \"{segmentId}\" in tutorial \"{tutorialMode.Tutorial?.Identifier}\" but it isn't active!"); + } + return; + } + segment.ObjectiveStateIndicator.FadeOut(ObjectiveComponentAnimationTime, false); + segment.LinkedTextBlock.FadeOut(ObjectiveComponentAnimationTime, false); + var parent = segment.LinkedTextBlock.Parent; + parent.FadeOut(ObjectiveComponentAnimationTime, true, onRemove: () => + { + activeObjectives.Remove(segment); + objectiveGroup?.Recalculate(); + }); + parent.RectTransform.MoveOverTime(GetObjectiveHiddenPosition(parent.RectTransform), ObjectiveComponentAnimationTime); + segment.ObjectiveButton.OnClicked = null; + segment.ObjectiveButton.CanBeFocused = false; + } + + public static void CloseActiveContentGUI() + { + if (VideoPlayer.IsPlaying) + { + VideoPlayer.Stop(); + } + else if (infoBox != null) + { + CloseInfoFrame(); + } + } + + public static void ClearContent() + { + ContentRunning = false; + infoBox = null; + } + + public static void ResetUI() + { + ContentRunning = false; + infoBox = null; + VideoPlayer.Remove(); + } + + #region Objectives + private static Segment GetActiveObjective(Identifier id) => activeObjectives.FirstOrDefault(s => s.Id == id); + + public static void ResetObjectives() + { + activeObjectives.Clear(); + ActiveContentSegment = null; + CreateObjectiveFrame(); + } + + /// + /// Create the objective list that holds the objectives (called on start and on resolution change) + /// + private static void CreateObjectiveFrame() + { + var objectiveListFrame = new GUIFrame(HUDLayoutSettings.ToRectTransform(HUDLayoutSettings.TutorialObjectiveListArea, GUI.Canvas), style: null) + { + CanBeFocused = false + }; + objectiveGroup = new GUILayoutGroup(new RectTransform(Vector2.One, objectiveListFrame.RectTransform)) + { + AbsoluteSpacing = (int)GUIStyle.Font.LineHeight + }; + for (int i = 0; i < activeObjectives.Count; i++) + { + AddToObjectiveList(activeObjectives[i]); + } + screenSettings = new ScreenSettings(new Point(GameMain.GraphicsWidth, GameMain.GraphicsHeight), GUI.Scale, GameSettings.CurrentConfig.Graphics.DisplayMode); + } + + /// + /// Stops content running and adds the active segment to the objective list + /// + private static void StopCurrentContentSegment() + { + if (!ActiveContentSegment.ObjectiveText.IsNullOrEmpty()) + { + activeObjectives.Add(ActiveContentSegment); + AddToObjectiveList(ActiveContentSegment); + } + ContentRunning = false; + ActiveContentSegment = null; + } + + /// + /// Adds the segment to the objective list + /// + private static void AddToObjectiveList(Segment segment, bool connectExisting = false) + { + if (connectExisting) + { + if (activeObjectives.Find(o => o.Id == segment.Id) is { } existingSegment) + { + existingSegment.ConnectMessageBox(segment); + SetButtonBehavior(existingSegment); + } + return; + } + + var frameRt = new RectTransform(new Vector2(1.0f, 0.1f), objectiveGroup.RectTransform) + { + MinSize = new Point(0, objectiveGroup.AbsoluteSpacing) + }; + Segment parentSegment = activeObjectives.FirstOrDefault(s => s.Id == segment.ParentId); + if (parentSegment is not null) + { + // Add this child as the last child in case there are other existing children already + int totalChildren = activeObjectives.Count(s => s.ParentId == segment.ParentId); + int childIndex = activeObjectives.IndexOf(parentSegment) + totalChildren; + if (objectiveGroup.RectTransform.GetChildIndex(frameRt) != childIndex) + { + frameRt.RepositionChildInHierarchy(childIndex); + activeObjectives.Remove(segment); + activeObjectives.Insert(childIndex, segment); + } + } + frameRt.AbsoluteOffset = GetObjectiveHiddenPosition(); + + var frame = new GUIFrame(frameRt, style: null) + { + CanBeFocused = true + }; + + objectiveGroup.Recalculate(); + + int textWidth = parentSegment is null ? frameRt.Rect.Width - objectiveGroup.AbsoluteSpacing + : frameRt.Rect.Width - 2 * objectiveGroup.AbsoluteSpacing; + segment.LinkedTextBlock = new GUITextBlock( + new RectTransform(new Point(textWidth, 0), frame.RectTransform, anchor: Anchor.TopRight), + TextManager.ParseInputTypes(segment.ObjectiveText), + wrap: true); + + var size = new Point(segment.LinkedTextBlock.Rect.Width, segment.LinkedTextBlock.Rect.Height); + segment.LinkedTextBlock.RectTransform.NonScaledSize = size; + segment.LinkedTextBlock.RectTransform.MinSize = size; + segment.LinkedTextBlock.RectTransform.MaxSize = size; + segment.LinkedTextBlock.RectTransform.IsFixedSize = true; + frame.RectTransform.Resize(new Point(frame.Rect.Width, segment.LinkedTextBlock.RectTransform.Rect.Height), resizeChildren: false); + frame.RectTransform.IsFixedSize = true; + + var indicatorRt = new RectTransform(new Point(objectiveGroup.AbsoluteSpacing), frame.RectTransform, isFixedSize: true); + if (parentSegment is not null) + { + indicatorRt.AbsoluteOffset = new Point(objectiveGroup.AbsoluteSpacing, 0); + } + segment.ObjectiveStateIndicator = new GUIImage(indicatorRt, "ObjectiveIndicatorIncomplete"); + + SetTransparent(segment.LinkedTextBlock); + + objectiveTextTranslated ??= TextManager.Get("Tutorial.Objective"); + segment.ObjectiveButton = new GUIButton(new RectTransform(Vector2.One, segment.LinkedTextBlock.RectTransform, Anchor.TopLeft, Pivot.TopLeft), style: null) + { + ToolTip = objectiveTextTranslated + }; + SetButtonBehavior(segment); + SetTransparent(segment.ObjectiveButton); + + frameRt.MoveOverTime(new Point(0, frameRt.AbsoluteOffset.Y), ObjectiveComponentAnimationTime, onDoneMoving: () => objectiveGroup?.Recalculate()); + + // Check if the objective has already been completed in the campaign + if (!segment.IsCompleted && GameMain.GameSession?.Campaign?.CampaignMetadata is CampaignMetadata data && data.GetBoolean(segment.Id)) + { + MarkSegmentCompleted(segment, flash: false); + } + + static void SetTransparent(GUIComponent component) => component.Color = component.HoverColor = component.PressedColor = component.SelectedColor = Color.Transparent; + + void SetButtonBehavior(Segment segment) + { + segment.ObjectiveButton.CanBeFocused = segment.SegmentType != TutorialSegmentType.Objective; + segment.ObjectiveButton.OnClicked = (GUIButton btn, object userdata) => + { + if (segment.SegmentType == TutorialSegmentType.InfoBox) + { + if (segment.AutoPlayVideo == AutoPlayVideo.Yes) + { + ReplaySegmentVideo(segment); + } + else + { + ShowSegmentText(segment); + } + } + else if (segment.SegmentType == TutorialSegmentType.MessageBox) + { + segment.OnClickObjective?.Invoke(); + } + return true; + }; + } + } + + private static void ReplaySegmentVideo(Segment segment) + { + if (ContentRunning) { return; } + Inventory.DraggingItems.Clear(); + ContentRunning = true; + LoadVideo(segment); + } + + private static void ShowSegmentText(Segment segment) + { + if (ContentRunning) { return; } + Inventory.DraggingItems.Clear(); + ContentRunning = true; + ActiveContentSegment = segment; + infoBox = CreateInfoFrame( + TextManager.Get(segment.Id), + TextManager.Get(segment.TextContent.Tag), + segment.TextContent.Width, + segment.TextContent.Height, + segment.TextContent.Anchor, + hasButton: true, + onInfoBoxClosed: () => ContentRunning = false, + onVideoButtonClicked: () => LoadVideo(segment)); + } + + private static Point GetObjectiveHiddenPosition(RectTransform rt = null) + { + return new Point(GameMain.GraphicsWidth - objectiveGroup.Rect.X, rt?.AbsoluteOffset.Y ?? 0); + } + + public static Segment GetObjective(Identifier identifier) + { + return activeObjectives.FirstOrDefault(o => o.Id == identifier); + } + + public static bool AllActiveObjectivesCompleted() + { + return activeObjectives.None() || activeObjectives.All(o => !o.CanBeCompleted || o.IsCompleted); + } + + public static bool AnyObjectives => activeObjectives.Any(); + + #endregion + + #region InfoFrame + + private static void CloseInfoFrame() => CloseInfoFrame(null, null); + + private static bool CloseInfoFrame(GUIButton button, object userData) + { + infoBox = null; + infoBoxClosedCallback?.Invoke(); + return true; + } + + /// + // Creates and displays a tutorial info box + /// + private static GUIComponent CreateInfoFrame(LocalizedString title, LocalizedString text, int width = 300, int height = 80, Anchor anchor = Anchor.TopRight, bool hasButton = false, Action onInfoBoxClosed = null, Action onVideoButtonClicked = null) + { + if (hasButton) + { + height += 60; + } + + width = (int)(width * GUI.Scale); + height = (int)(height * GUI.Scale); + + LocalizedString wrappedText = ToolBox.WrapText(text, width, GUIStyle.Font); + height += (int)GUIStyle.Font.MeasureString(wrappedText).Y; + + if (title.Length > 0) + { + height += (int)GUIStyle.Font.MeasureString(title).Y + (int)(150 * GUI.Scale); + } + + var background = new GUIFrame(new RectTransform(new Point(GameMain.GraphicsWidth, GameMain.GraphicsHeight), GUI.Canvas, Anchor.Center), style: "GUIBackgroundBlocker"); + + var infoBlock = new GUIFrame(new RectTransform(new Point(width, height), background.RectTransform, anchor)); + infoBlock.Flash(GUIStyle.Green); + + var infoContent = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.9f), infoBlock.RectTransform, Anchor.Center)) + { + Stretch = true, + AbsoluteSpacing = 5 + }; + + if (title.Length > 0) + { + var titleBlock = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), infoContent.RectTransform), + title, font: GUIStyle.LargeFont, textAlignment: Alignment.Center, textColor: new Color(253, 174, 0)); + titleBlock.RectTransform.IsFixedSize = true; + } + + text = RichString.Rich(text); + GUITextBlock textBlock = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), infoContent.RectTransform), text, wrap: true); + + textBlock.RectTransform.IsFixedSize = true; + infoBoxClosedCallback = onInfoBoxClosed; + + if (hasButton) + { + var buttonContainer = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.15f), infoContent.RectTransform), isHorizontal: true) + { + RelativeSpacing = 0.1f + }; + buttonContainer.RectTransform.IsFixedSize = true; + + if (onVideoButtonClicked != null) + { + buttonContainer.Stretch = true; + var videoButton = new GUIButton(new RectTransform(new Vector2(0.4f, 1.0f), buttonContainer.RectTransform), + TextManager.Get("Video"), style: "GUIButtonLarge") + { + OnClicked = (GUIButton button, object obj) => + { + onVideoButtonClicked(); + return true; + } + }; + } + else + { + buttonContainer.Stretch = false; + buttonContainer.ChildAnchor = Anchor.Center; + } + + var okButton = new GUIButton(new RectTransform(new Vector2(0.4f, 1.0f), buttonContainer.RectTransform), + TextManager.Get("OK"), style: "GUIButtonLarge") + { + OnClicked = CloseInfoFrame + }; + } + + infoBlock.RectTransform.NonScaledSize = new Point(infoBlock.Rect.Width, (int)(infoContent.Children.Sum(c => c.Rect.Height + infoContent.AbsoluteSpacing) / infoContent.RectTransform.RelativeSize.Y)); + + SoundPlayer.PlayUISound(GUISoundType.UIMessage); + + return background; + } + + #endregion + + #region Video + + private static void LoadVideo(Segment segment) + { + if (segment.AutoPlayVideo == AutoPlayVideo.Yes) + { + VideoPlayer.LoadContent( + contentPath: segment.VideoContent.ContentPath, + videoSettings: new VideoPlayer.VideoSettings(segment.VideoContent.FileName), + textSettings: new VideoPlayer.TextSettings(segment.VideoContent.TextTag, segment.VideoContent.Width), + contentId: segment.Id, + startPlayback: true, + objective: segment.ObjectiveText, + onStop: StopCurrentContentSegment); + } + else + { + VideoPlayer.LoadContent( + contentPath: segment.VideoContent.ContentPath, + videoSettings: new VideoPlayer.VideoSettings(segment.VideoContent.FileName), + textSettings: null, + contentId: segment.Id, + startPlayback: true, + objective: string.Empty); + } + } + + private static void LoadActiveContentVideo() => LoadVideo(ActiveContentSegment); + + #endregion +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/CharacterInventory.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/CharacterInventory.cs index ef7418390..714a96576 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/CharacterInventory.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/CharacterInventory.cs @@ -801,7 +801,7 @@ namespace Barotrauma } else if (character.HeldItems.Any(i => i.OwnInventory != null && - (i.OwnInventory.CanBePut(item) || (i.OwnInventory.Capacity == 1 && i.OwnInventory.AllowSwappingContainedItems && i.OwnInventory.Container.CanBeContained(item))))) + (i.OwnInventory.CanBePut(item) || ((i.OwnInventory.Capacity == 1 || i.OwnInventory.Container.HasSubContainers) && i.OwnInventory.AllowSwappingContainedItems && i.OwnInventory.Container.CanBeContained(item))))) { return QuickUseAction.PutToEquippedItem; } @@ -975,7 +975,7 @@ namespace Barotrauma heldItem.OwnInventory.GetItemAt(0)?.Prefab == item.Prefab && heldItem.OwnInventory.GetItemsAt(0).Count() > 1; if (heldItem.OwnInventory.TryPutItem(item, Character.Controlled) || - (heldItem.OwnInventory.Capacity == 1 && heldItem.OwnInventory.TryPutItem(item, 0, allowSwapping: !disallowSwapping, allowCombine: false, user: Character.Controlled))) + ((heldItem.OwnInventory.Capacity == 1 || heldItem.OwnInventory.Container.HasSubContainers) && heldItem.OwnInventory.TryPutItem(item, 0, allowSwapping: !disallowSwapping, allowCombine: false, user: Character.Controlled))) { success = true; for (int j = 0; j < capacity; j++) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Holdable/Sprayer.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Holdable/Sprayer.cs index f97cdc3be..539273366 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Holdable/Sprayer.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Holdable/Sprayer.cs @@ -224,68 +224,60 @@ namespace Barotrauma.Items.Components if (character == null) { return false; } if (character == Character.Controlled) { - if (targetSections.Count == 0) { return false; } - Spray(deltaTime); + if (targetSections.Count == 0) { return false; } + Spray(character, deltaTime, applyColors: true); return true; } else { //allow remote players to use the sprayer, but don't actually color the walls (we'll receive the data from the server) - return character.IsRemotePlayer; + Spray(character, deltaTime, applyColors: false); + return true; } } - public void Spray(float deltaTime) + public void Spray(Character user, float deltaTime, bool applyColors) { - if (targetSections.Count == 0) { return; } - Item liquidItem = liquidContainer?.Inventory.FirstOrDefault(); if (liquidItem == null) { return; } bool isCleaning = false; liquidColors.TryGetValue(liquidItem.Prefab.Identifier, out color); - // Ethanol or other cleaning solvent - if (color.A == 0) { isCleaning = true; } - - float sizeAdjustedSprayStrength = SprayStrength / targetSections.Count; - - if (!isCleaning) + if (applyColors && targetSections.Any()) { - for (int i = 0; i < targetSections.Count; i++) + // Ethanol or other cleaning solvent + if (color.A == 0) { isCleaning = true; } + float sizeAdjustedSprayStrength = SprayStrength / targetSections.Count; + if (!isCleaning) { - targetHull.IncreaseSectionColorOrStrength(targetSections[i], color, sizeAdjustedSprayStrength * deltaTime, true, false); + for (int i = 0; i < targetSections.Count; i++) + { + targetHull.IncreaseSectionColorOrStrength(targetSections[i], color, sizeAdjustedSprayStrength * deltaTime, true, false); + } + if (GameMain.GameSession != null) + { + GameMain.GameSession.TimeSpentCleaning += deltaTime; + } } - if (GameMain.GameSession != null) + else { - GameMain.GameSession.TimeSpentCleaning += deltaTime; - } - } - else - { - for (int i = 0; i < targetSections.Count; i++) - { - targetHull.CleanSection(targetSections[i], -sizeAdjustedSprayStrength * deltaTime, true); - } - if (GameMain.GameSession != null) - { - GameMain.GameSession.TimeSpentPainting += deltaTime; + for (int i = 0; i < targetSections.Count; i++) + { + targetHull.CleanSection(targetSections[i], -sizeAdjustedSprayStrength * deltaTime, true); + } + if (GameMain.GameSession != null) + { + GameMain.GameSession.TimeSpentPainting += deltaTime; + } } } Vector2 particleStartPos = item.WorldPosition + ConvertUnits.ToDisplayUnits(TransformedBarrelPos); - Vector2 particleEndPos = Vector2.Zero; - for (int i = 0; i < targetSections.Count; i++) - { - particleEndPos += new Vector2(targetSections[i].Rect.Center.X, targetSections[i].Rect.Y - targetSections[i].Rect.Height / 2) + targetHull.Rect.Location.ToVector2(); - } - particleEndPos /= targetSections.Count; - if (targetHull?.Submarine != null) - { - particleEndPos += targetHull.Submarine.Position; - } - float dist = Vector2.Distance(particleStartPos, particleEndPos); - + Vector2 particleEndPos = user.CursorWorldPosition; + //the cursor position is not exact for remote players, we only know the direction they're aiming at but not the distance + // -> use 50% range, looks good enough + float dist = Math.Min(Vector2.Distance(particleStartPos, particleEndPos), Range * 0.5f); foreach (ParticleEmitter particleEmitter in particleEmitters) { float particleAngle = item.body.Rotation + ((item.body.Dir > 0.0f) ? 0.0f : MathHelper.Pi); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/ItemContainer.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/ItemContainer.cs index d43d947fd..d8c379c03 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/ItemContainer.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/ItemContainer.cs @@ -309,21 +309,53 @@ namespace Barotrauma.Items.Components Vector2 currentItemPos = transformedItemPos; - SpriteEffects spriteEffects = SpriteEffects.None; - if ((item.body != null && item.body.Dir == -1) || item.FlippedX) - { - spriteEffects |= MathUtils.NearlyEqual(ItemRotation % 180, 90.0f) ? SpriteEffects.FlipVertically : SpriteEffects.FlipHorizontally; - } - if (item.FlippedY) - { - spriteEffects |= MathUtils.NearlyEqual(ItemRotation % 180, 90.0f) ? SpriteEffects.FlipHorizontally : SpriteEffects.FlipVertically; - } - bool isWiringMode = SubEditorScreen.TransparentWiringMode && SubEditorScreen.IsWiringMode(); int i = 0; foreach (Item containedItem in Inventory.AllItems) { + Vector2 itemPos = currentItemPos; + var relatedItem = FindContainableItem(containedItem); + if (relatedItem != null) + { + if (relatedItem.Hide.HasValue && relatedItem.Hide.Value) { continue; } + if (relatedItem.ItemPos.HasValue) + { + Vector2 pos = relatedItem.ItemPos.Value; + if (item.body != null) + { + Matrix transform = Matrix.CreateRotationZ(item.body.DrawRotation); + pos.X *= item.body.Dir; + itemPos = Vector2.Transform(pos, transform) + item.body.DrawPosition; + } + else + { + itemPos = pos; + // This code is aped based on above. Not tested. + if (item.FlippedX) + { + itemPos.X = -itemPos.X; + itemPos.X += item.Rect.Width; + } + if (item.FlippedY) + { + itemPos.Y = -itemPos.Y; + itemPos.Y -= item.Rect.Height; + } + itemPos += new Vector2(item.Rect.X, item.Rect.Y); + if (item.Submarine != null) + { + itemPos += item.Submarine.DrawPosition; + } + if (Math.Abs(item.RotationRad) > 0.01f) + { + Matrix transform = Matrix.CreateRotationZ(-item.RotationRad); + itemPos = Vector2.Transform(itemPos - item.DrawPosition, transform) + item.DrawPosition; + } + } + } + } + if (containedItem?.Sprite == null) { continue; } if (AutoInteractWithContained) @@ -343,19 +375,34 @@ namespace Barotrauma.Items.Components } containedSpriteDepth = itemDepth + (containedSpriteDepth - (item.Sprite?.Depth ?? item.SpriteDepth)) / 10000.0f; + SpriteEffects spriteEffects = SpriteEffects.None; + float spriteRotation = ItemRotation; + if (relatedItem != null && relatedItem.Rotation != 0) + { + spriteRotation = relatedItem.Rotation; + } + if ((item.body != null && item.body.Dir == -1) || item.FlippedX) + { + spriteEffects |= MathUtils.NearlyEqual(spriteRotation % 180, 90.0f) ? SpriteEffects.FlipVertically : SpriteEffects.FlipHorizontally; + } + if (item.FlippedY) + { + spriteEffects |= MathUtils.NearlyEqual(spriteRotation % 180, 90.0f) ? SpriteEffects.FlipHorizontally : SpriteEffects.FlipVertically; + } + containedItem.Sprite.Draw( spriteBatch, - new Vector2(currentItemPos.X, -currentItemPos.Y), + new Vector2(itemPos.X, -itemPos.Y), isWiringMode ? containedItem.GetSpriteColor(withHighlight: true) * 0.15f : containedItem.GetSpriteColor(withHighlight: true), origin, - -(containedItem.body == null ? 0.0f : containedItem.body.DrawRotation ), + -(containedItem.body == null ? 0.0f : containedItem.body.DrawRotation), containedItem.Scale, spriteEffects, depth: containedSpriteDepth); foreach (ItemContainer ic in containedItem.GetComponents()) { - if (ic.hideItems) continue; + if (ic.hideItems) { continue; } ic.DrawContainedItems(spriteBatch, containedSpriteDepth); } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/LightComponent.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/LightComponent.cs index 332f924cd..1d4db25d2 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/LightComponent.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/LightComponent.cs @@ -86,7 +86,7 @@ namespace Barotrauma.Items.Components public override void FlipX(bool relativeToSub) { - if (Light?.LightSprite != null && item.Prefab.CanSpriteFlipX && item.body == null) + if (Light?.LightSprite != null && item.Prefab.CanSpriteFlipX) { Light.LightSpriteEffect = Light.LightSpriteEffect == SpriteEffects.None ? SpriteEffects.FlipHorizontally : SpriteEffects.None; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Sonar.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Sonar.cs index b6ff975de..90ff7ba05 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Sonar.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Sonar.cs @@ -811,7 +811,7 @@ namespace Barotrauma.Items.Components if (distSqr > t.SoundRange * t.SoundRange * 2) { continue; } float dist = (float)Math.Sqrt(distSqr); - if (dist > prevPassivePingRadius * Range && dist <= passivePingRadius * Range && Rand.Int(sonarBlips.Count) < 500) + if (dist > prevPassivePingRadius * Range && dist <= passivePingRadius * Range && Rand.Int(sonarBlips.Count) < 500 && t.IsWithinSector(transducerCenter)) { Ping(t.WorldPosition, transducerCenter, Math.Min(t.SoundRange, range * 0.5f) * displayScale, 0, displayScale, Math.Min(t.SoundRange, range * 0.5f), @@ -1276,7 +1276,7 @@ namespace Barotrauma.Items.Components float indicatorSector = sector * 0.75f; float indicatorSectorLength = (float)(midLength / Math.Cos(indicatorSector)); - bool withinSector = + bool withinSector = (Math.Abs(diff.X) < steering.ActiveDockingSource.DistanceTolerance.X && Math.Abs(diff.Y) < steering.ActiveDockingSource.DistanceTolerance.Y) || Vector2.Dot(normalizedDockingDir, MathUtils.RotatePoint(normalizedDockingDir, indicatorSector)) < Vector2.Dot(normalizedDockingDir, Vector2.Normalize(dockingDir)); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Steering.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Steering.cs index 1eff3054d..3759e9fd1 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Steering.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Machines/Steering.cs @@ -54,7 +54,7 @@ namespace Barotrauma.Items.Components private bool? swapDestinationOrder; - private GUIMessageBox enterOutpostPrompt; + private GUIMessageBox enterOutpostPrompt, exitOutpostPrompt; private bool levelStartSelected; public bool LevelStartSelected @@ -382,9 +382,20 @@ namespace Barotrauma.Items.Components DockingSources.Any(d => d.Docked && (d.DockingTarget?.Item.Submarine?.Info?.IsOutpost ?? false))) { // Undocking from an outpost - campaign.ShowCampaignUI = true; - campaign.CampaignUI.SelectTab(CampaignMode.InteractionType.Map); - return false; + if (!ObjectiveManager.AllActiveObjectivesCompleted()) + { + exitOutpostPrompt = new GUIMessageBox("", + TextManager.GetWithVariable("CampaignExitTutorialOutpostPrompt", "[locationname]", campaign.Map.CurrentLocation.Name), + new LocalizedString[] { TextManager.Get("yes"), TextManager.Get("no") }); + exitOutpostPrompt.Buttons[0].OnClicked += (_, _) => + { + exitOutpostPrompt.Close(); + return OpenMap(campaign); + }; + exitOutpostPrompt.Buttons[1].OnClicked += exitOutpostPrompt.Close; + return false; + } + return OpenMap(campaign); } else if (!Level.IsLoadedOutpost && DockingModeEnabled && ActiveDockingSource != null && !ActiveDockingSource.Docked && DockingTarget?.Item?.Submarine == Level.Loaded.StartOutpost && (DockingTarget?.Item?.Submarine?.Info.IsOutpost ?? false)) @@ -419,6 +430,14 @@ namespace Barotrauma.Items.Components return true; } }; + + bool OpenMap(CampaignMode campaign) + { + campaign.ShowCampaignUI = true; + campaign.CampaignUI.SelectTab(CampaignMode.InteractionType.Map); + return false; + } + void SendDockingSignal() { if (GameMain.Client == null) @@ -431,6 +450,7 @@ namespace Barotrauma.Items.Components item.CreateClientEvent(this); } } + dockingButton.Font = GUIStyle.SubHeadingFont; dockingButton.TextBlock.RectTransform.MaxSize = new Point((int)(dockingButton.Rect.Width * 0.7f), int.MaxValue); dockingButton.TextBlock.AutoScaleHorizontal = true; @@ -913,6 +933,7 @@ namespace Barotrauma.Items.Components maintainPosOriginIndicator?.Remove(); steeringIndicator?.Remove(); enterOutpostPrompt?.Close(); + exitOutpostPrompt?.Close(); pathFinder = null; } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/StatusHUD.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/StatusHUD.cs index d6e5500c3..afe938020 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/StatusHUD.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/StatusHUD.cs @@ -293,7 +293,7 @@ namespace Barotrauma.Items.Components if (target.Bleeding > 0.0f) { - int bleedingTextIndex = MathHelper.Clamp((int)Math.Floor(target.Bleeding / 100.0f) * BleedingTexts.Length, 0, BleedingTexts.Length - 1); + int bleedingTextIndex = MathHelper.Clamp((int)Math.Floor(target.Bleeding / 100.0f * BleedingTexts.Length), 0, BleedingTexts.Length - 1); texts.Add(BleedingTexts[bleedingTextIndex]); textColors.Add(Color.Lerp(GUIStyle.Orange, GUIStyle.Red, target.Bleeding / 100.0f)); } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Wearable.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Wearable.cs index 4d4893e4e..58093440a 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Wearable.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Components/Wearable.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Linq; using Barotrauma.Networking; @@ -6,7 +7,7 @@ namespace Barotrauma.Items.Components { partial class Wearable : Pickable, IServerSerializable { - private void GetDamageModifierText(ref LocalizedString description, DamageModifier damageModifier, Identifier afflictionIdentifier) + private static void GetDamageModifierText(ref LocalizedString description, DamageModifier damageModifier, Identifier afflictionIdentifier) { int roundedValue = (int)Math.Round((1 - damageModifier.DamageMultiplier * damageModifier.ProbabilityMultiplier) * 100); if (roundedValue == 0) { return; } @@ -19,8 +20,13 @@ namespace Barotrauma.Items.Components if (!description.IsNullOrWhiteSpace()) { description += '\n'; } description += $" ‖color:{colorStr}‖{roundedValue.ToString("-0;+#")}%‖color:end‖ {afflictionName}"; } - + public override void AddTooltipInfo(ref LocalizedString name, ref LocalizedString description) + { + AddTooltipInfo(damageModifiers, SkillModifiers, ref description); + } + + public static void AddTooltipInfo(IReadOnlyList damageModifiers, IReadOnlyDictionary skillModifiers, ref LocalizedString description) { if (damageModifiers.Any()) { @@ -41,9 +47,9 @@ namespace Barotrauma.Items.Components } } } - if (SkillModifiers.Any()) + if (skillModifiers.Any()) { - foreach (var skillModifier in SkillModifiers) + foreach (var skillModifier in skillModifiers) { string colorStr = XMLExtensions.ToStringHex(GUIStyle.Green); int roundedValue = (int)Math.Round(skillModifier.Value); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/Inventory.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/Inventory.cs index 7858e3154..d0a4414a1 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/Inventory.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/Inventory.cs @@ -1610,15 +1610,19 @@ namespace Barotrauma } else if (itemContainer.ShowTotalStackCapacityInContainedStateIndicator) { - containedState = itemContainer.Inventory.AllItems.Count() / (float)(itemContainer.GetMaxStackSize(0) * itemContainer.Capacity); + int ignoredItems = itemContainer.AllSubContainableItems == null ? 0 : itemContainer.AllSubContainableItems.Count; + int itemCount = itemContainer.Inventory.AllItems.Count() - ignoredItems; + containedState = itemCount / (float)(itemContainer.GetMaxStackSize(0) * itemContainer.MainContainerCapacity); } else { var containedItem = itemContainer.Inventory.slots[Math.Max(itemContainer.ContainedStateIndicatorSlot, 0)].FirstOrDefault(); + containedState = itemContainer.Inventory.Capacity == 1 || itemContainer.ContainedStateIndicatorSlot > -1 ? (containedItem == null ? 0.0f : containedItem.Condition / containedItem.MaxCondition) : itemContainer.Inventory.slots.Count(i => !i.Empty()) / (float)itemContainer.Inventory.capacity; - if (containedItem != null && itemContainer.Inventory.Capacity == 1) + + if (containedItem != null && (itemContainer.Inventory.Capacity == 1 || itemContainer.HasSubContainers)) { int maxStackSize = Math.Min(containedItem.Prefab.MaxStackSize, itemContainer.GetMaxStackSize(0)); if (maxStackSize > 1 || containedItem.Prefab.HideConditionBar) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Items/ItemPrefab.cs b/Barotrauma/BarotraumaClient/ClientSource/Items/ItemPrefab.cs index bc69b2e51..a39cd80e5 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Items/ItemPrefab.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Items/ItemPrefab.cs @@ -1,5 +1,5 @@ -using Barotrauma.IO; -using Barotrauma.Extensions; +using Barotrauma.Extensions; +using Barotrauma.Items.Components; using FarseerPhysics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; @@ -7,7 +7,6 @@ using System; using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; -using System.Xml.Linq; namespace Barotrauma { @@ -73,6 +72,9 @@ namespace Barotrauma public float UpgradePreviewScale = 1.0f; + private IReadOnlyList wearableDamageModifiers; + private IReadOnlyDictionary wearableSkillModifiers; + //only used to display correct color in the sub editor, item instances have their own property that can be edited on a per-item basis [Serialize("1.0,1.0,1.0,1.0", IsPropertySaveable.No)] public Color InventoryIconColor { get; protected set; } @@ -101,6 +103,9 @@ namespace Barotrauma var containedSprites = new List(); var decorativeSpriteGroups = new Dictionary>(); + var wearableDamageModifiers = new List(); + var wearableSkillModifiers = new Dictionary(); + foreach (var subElement in element.Elements()) { switch (subElement.Name.LocalName.ToLowerInvariant()) @@ -198,8 +203,33 @@ namespace Barotrauma containedSprites.Add(containedSprite); } break; + case "wearable": + foreach (ContentXElement wearableSubElement in subElement.Elements()) + { + switch (wearableSubElement.Name.LocalName.ToLowerInvariant()) + { + case "damagemodifier": + wearableDamageModifiers.Add(new DamageModifier(wearableSubElement, Name.Value + ", Wearable", checkErrors: false)); + break; + case "skillmodifier": + Identifier skillIdentifier = wearableSubElement.GetAttributeIdentifier("skillidentifier", Identifier.Empty); + float skillValue = wearableSubElement.GetAttributeFloat("skillvalue", 0f); + if (wearableSkillModifiers.ContainsKey(skillIdentifier)) + { + wearableSkillModifiers[skillIdentifier] += skillValue; + } + else + { + wearableSkillModifiers.TryAdd(skillIdentifier, skillValue); + } + break; + } + } + break; } } + this.wearableDamageModifiers = wearableDamageModifiers.ToImmutableList(); + this.wearableSkillModifiers = wearableSkillModifiers.ToImmutableDictionary(); UpgradeOverrideSprites = upgradeOverrideSprites.Select(kvp => (kvp.Key, kvp.Value.ToImmutableArray())).ToImmutableDictionary(); BrokenSprites = brokenSprites.ToImmutableArray(); @@ -211,9 +241,21 @@ namespace Barotrauma public bool CanCharacterBuy() { if (!DefaultPrice.RequiresUnlock) { return true; } - return Character.Controlled is not null && Character.Controlled.HasStoreAccessForItem(this); } + public LocalizedString GetTooltip() + { + LocalizedString tooltip = $"‖color:{XMLExtensions.ToStringHex(GUIStyle.TextColorBright)}‖{Name}‖color:end‖"; + if (!Description.IsNullOrEmpty()) + { + tooltip += $"\n{Description}"; + } + if (wearableDamageModifiers.Any() || wearableSkillModifiers.Any()) + { + Wearable.AddTooltipInfo(wearableDamageModifiers, wearableSkillModifiers, ref tooltip); + } + return tooltip; + } public override void UpdatePlacing(Camera cam) { @@ -320,15 +362,7 @@ namespace Barotrauma } else { - Vector2 position = Submarine.MouseToWorldGrid(Screen.Selected.Cam, Submarine.MainSub); - Vector2 placeSize = Size * Scale; - if (placePosition != Vector2.Zero) - { - if (ResizeHorizontal) { placeSize.X = Math.Max(position.X - placePosition.X, placeSize.X); } - if (ResizeVertical) { placeSize.Y = Math.Max(placePosition.Y - position.Y, placeSize.Y); } - position = placePosition; - } - Sprite?.DrawTiled(spriteBatch, new Vector2(position.X, -position.Y), placeSize, color: SpriteColor); + Sprite.DrawTiled(spriteBatch, new Vector2(placeRect.X, -placeRect.Y), placeRect.Size.ToVector2(), SpriteColor * 0.8f); } } } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Map/Levels/LevelObjects/LevelObjectManager.cs b/Barotrauma/BarotraumaClient/ClientSource/Map/Levels/LevelObjects/LevelObjectManager.cs index bdf919218..c123c22f0 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Map/Levels/LevelObjects/LevelObjectManager.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Map/Levels/LevelObjects/LevelObjectManager.cs @@ -1,4 +1,5 @@ -using Barotrauma.Networking; +using Barotrauma.Extensions; +using Barotrauma.Networking; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using System; @@ -178,7 +179,7 @@ namespace Barotrauma activeSprite?.Draw( spriteBatch, new Vector2(obj.Position.X, -obj.Position.Y) - camDiff * obj.Position.Z / 10000.0f, - Color.Lerp(Color.White, Level.Loaded.BackgroundTextureColor, obj.Position.Z / 3000.0f), + Color.Lerp(obj.Prefab.SpriteColor, obj.Prefab.SpriteColor.Multiply(Level.Loaded.BackgroundTextureColor), obj.Position.Z / 3000.0f), activeSprite.Origin, obj.CurrentRotation, obj.CurrentScale, @@ -200,7 +201,7 @@ namespace Barotrauma obj.ActivePrefab.DeformableSprite.Origin, obj.CurrentRotation, obj.CurrentScale, - Color.Lerp(Color.White, Level.Loaded.BackgroundTextureColor, obj.Position.Z / 5000.0f)); + Color.Lerp(obj.Prefab.SpriteColor, obj.Prefab.SpriteColor.Multiply(Level.Loaded.BackgroundTextureColor), obj.Position.Z / 5000.0f)); } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Map/Map/Map.cs b/Barotrauma/BarotraumaClient/ClientSource/Map/Map/Map.cs index c32f82187..db0dcb504 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Map/Map/Map.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Map/Map/Map.cs @@ -291,7 +291,7 @@ namespace Barotrauma if (!currentDisplayLocation.Discovered) { RemoveFogOfWar(currentDisplayLocation); - currentDisplayLocation.Discover(); + Discover(currentDisplayLocation); if (currentDisplayLocation.MapPosition.X > furthestDiscoveredLocation.MapPosition.X) { furthestDiscoveredLocation = currentDisplayLocation; @@ -452,7 +452,7 @@ namespace Barotrauma Level.Loaded.DebugSetStartLocation(CurrentLocation); Level.Loaded.DebugSetEndLocation(null); - CurrentLocation.Discover(); + Discover(CurrentLocation); OnLocationChanged?.Invoke(new LocationChangeInfo(prevLocation, CurrentLocation)); SelectLocation(-1); if (GameMain.Client == null) @@ -693,7 +693,22 @@ namespace Barotrauma pos.Y = (int)pos.Y; Vector2 nameSize = GUIStyle.LargeFont.MeasureString(HighlightedLocation.Name); Vector2 typeSize = HighlightedLocation.Type.Name.IsNullOrEmpty() ? Vector2.Zero : GUIStyle.Font.MeasureString(HighlightedLocation.Type.Name); - Vector2 size = new Vector2(Math.Max(nameSize.X, typeSize.X), nameSize.Y + typeSize.Y); + Vector2 descSize = HighlightedLocation.Type.Description.IsNullOrEmpty() ? Vector2.Zero : GUIStyle.SmallFont.MeasureString(HighlightedLocation.Type.Description); + Vector2 size = new Vector2(Math.Max(nameSize.X, Math.Max(typeSize.X, descSize.X)), nameSize.Y + typeSize.Y + descSize.Y); + + int highestSubTier = HighlightedLocation.HighestSubmarineTierAvailable(); + var overrideTiers = new List<(SubmarineClass subClass, int tier)>(); + foreach (SubmarineClass subClass in Enum.GetValues(typeof(SubmarineClass))) + { + if (subClass == SubmarineClass.Undefined) { continue; } + int highestClassTier = HighlightedLocation.HighestSubmarineTierAvailable(subClass); + if (highestClassTier > 0 && highestClassTier > highestSubTier) + { + overrideTiers.Add((subClass, highestClassTier)); + } + } + size.Y += ((highestSubTier > 0 ? 1 : 0) + overrideTiers.Count) * GUIStyle.SmallFont.MeasureString(TextManager.Get("advancedsub.all")).Y; + bool showReputation = hudVisibility > 0.0f && HighlightedLocation.Discovered && HighlightedLocation.Type.HasOutpost && HighlightedLocation.Reputation != null; LocalizedString repLabelText = null, repValueText = null; Vector2 repLabelSize = Vector2.Zero, repBarSize = Vector2.Zero; @@ -706,21 +721,51 @@ namespace Barotrauma repValueText = HighlightedLocation.Reputation.GetFormattedReputationText(addColorTags: false); size.X = Math.Max(size.X, repBarSize.X + GUIStyle.Font.MeasureString(repValueText).X + GUI.IntScale(10)); } + GUIStyle.GetComponentStyle("OuterGlow").Sprites[GUIComponent.ComponentState.None][0].Draw( - spriteBatch, new Rectangle((int)(pos.X - 60 * GUI.Scale), (int)(pos.Y - size.Y), (int)(size.X + 120 * GUI.Scale), (int)(size.Y * 2.2f)), Color.Black * hudVisibility); + spriteBatch, + new Rectangle( + (int)(pos.X - 60 * GUI.Scale), + (int)(pos.Y - size.Y), + (int)(size.X + 120 * GUI.Scale), + (int)(size.Y * 2.2f)), + Color.Black * hudVisibility); + var topLeftPos = pos - new Vector2(0.0f, size.Y / 2); GUI.DrawString(spriteBatch, topLeftPos, HighlightedLocation.Name, GUIStyle.TextColorNormal * hudVisibility * 1.5f, font: GUIStyle.LargeFont); topLeftPos += new Vector2(0.0f, nameSize.Y); - GUI.DrawString(spriteBatch, topLeftPos, HighlightedLocation.Type.Name, GUIStyle.TextColorNormal * hudVisibility * 1.5f); + DrawText(HighlightedLocation.Type.Name); + if (!HighlightedLocation.Type.Description.IsNullOrEmpty()) + { + topLeftPos += new Vector2(0.0f, descSize.Y); + DrawText(HighlightedLocation.Type.Description, font: GUIStyle.SmallFont); + } + + if (highestSubTier > 0) + { + DrawSubAvailabilityText("advancedsub.all", highestSubTier); + } + foreach (var (subClass, tier) in overrideTiers) + { + DrawSubAvailabilityText($"advancedsub.{subClass}", tier); + } + void DrawSubAvailabilityText(string tag, int tier) + { + topLeftPos += new Vector2(0.0f, typeSize.Y); + DrawText(TextManager.GetWithVariable(tag, "[tiernumber]", tier.ToString()), font: GUIStyle.SmallFont); + } + if (showReputation) { topLeftPos += new Vector2(0.0f, typeSize.Y + repLabelSize.Y); - GUI.DrawString(spriteBatch, topLeftPos, repLabelText.Value, GUIStyle.TextColorNormal * hudVisibility * 1.5f); + DrawText(repLabelText.Value); topLeftPos += new Vector2(0.0f, repLabelSize.Y + GUI.IntScale(10)); Rectangle repBarRect = new Rectangle(new Point((int)topLeftPos.X, (int)topLeftPos.Y), new Point((int)repBarSize.X, (int)repBarSize.Y)); RoundSummary.DrawReputationBar(spriteBatch, repBarRect, HighlightedLocation.Reputation.NormalizedValue); GUI.DrawString(spriteBatch, new Vector2(repBarRect.Right + GUI.IntScale(5), repBarRect.Top), repValueText.Value, Reputation.GetReputationColor(HighlightedLocation.Reputation.NormalizedValue)); } + + void DrawText(LocalizedString text, GUIFont font = null) => GUI.DrawString(spriteBatch, topLeftPos, text, GUIStyle.TextColorNormal * hudVisibility * 1.5f, font: font); } if (drawRadiationTooltip) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/GameClient.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/GameClient.cs index 76040fcd3..061191f03 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/GameClient.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/GameClient.cs @@ -311,6 +311,12 @@ namespace Barotrauma.Networking CoroutineManager.StartCoroutine(WaitForStartingInfo(), "WaitForStartingInfo"); } + public void SetLobbyPublic(bool isPublic) + { + GameMain.NetLobbyScreen.SetPublic(isPublic); + SteamManager.SetLobbyPublic(isPublic); + } + private ClientPeer CreateNetPeer() { Networking.ClientPeer.Callbacks callbacks = new ClientPeer.Callbacks( @@ -1319,6 +1325,7 @@ namespace Barotrauma.Networking ServerSettings.MaximumMoneyTransferRequest = inc.ReadInt32(); bool usingShuttle = GameMain.NetLobbyScreen.UsingShuttle = inc.ReadBoolean(); GameMain.LightManager.LosMode = (LosMode)inc.ReadByte(); + ServerSettings.ShowEnemyHealthBars = (EnemyHealthBarMode)inc.ReadByte(); bool includesFinalize = inc.ReadBoolean(); inc.ReadPadBits(); GameMain.LightManager.LightingEnabled = true; @@ -2521,7 +2528,7 @@ namespace Barotrauma.Networking public override void CreateEntityEvent(INetSerializable entity, NetEntityEvent.IData extraData = null) { - if (!(entity is IClientSerializable clientSerializable)) + if (entity is not IClientSerializable clientSerializable) { throw new InvalidCastException($"Entity is not {nameof(IClientSerializable)}"); } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerSettings.cs b/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerSettings.cs index b6c1b2583..c6a97de44 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerSettings.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Networking/ServerSettings.cs @@ -140,7 +140,7 @@ namespace Barotrauma.Networking MaxPlayers = incMsg.ReadByte(); HasPassword = incMsg.ReadBoolean(); IsPublic = incMsg.ReadBoolean(); - GameMain.NetLobbyScreen.SetPublic(IsPublic); + GameMain.Client?.SetLobbyPublic(IsPublic); AllowFileTransfers = incMsg.ReadBoolean(); incMsg.ReadPadBits(); TickRate = incMsg.ReadRangedInteger(1, 60); @@ -367,6 +367,17 @@ namespace Barotrauma.Networking //*********************************************** + //changing server visibility on the fly is not supported in dedicated servers + if (GameMain.Client?.ClientPeer is not LidgrenClientPeer) + { + var isPublic = new GUITickBox(new RectTransform(new Vector2(1.0f, 0.05f), serverTab.RectTransform), + TextManager.Get("publicserver")) + { + ToolTip = TextManager.Get("publicservertooltip") + }; + GetPropertyData(nameof(IsPublic)).AssignGUIComponent(isPublic); + } + // Sub Selection new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), serverTab.RectTransform), TextManager.Get("ServerSettingsSubSelection"), font: GUIStyle.SubHeadingFont); var selectionFrame = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.02f), serverTab.RectTransform), isHorizontal: true) @@ -475,9 +486,10 @@ namespace Barotrauma.Networking // game settings //-------------------------------------------------------------------------------- - var roundsTab = new GUILayoutGroup(new RectTransform(new Vector2(0.95f, 0.95f), settingsTabs[(int)SettingsTab.Rounds].RectTransform, Anchor.Center)) { }; + var roundsTab = new GUILayoutGroup(new RectTransform(new Vector2(0.95f, 0.95f), settingsTabs[(int)SettingsTab.Rounds].RectTransform, Anchor.Center)); + var roundsContent = new GUIListBox(new RectTransform(Vector2.One, roundsTab.RectTransform, Anchor.Center), style: "GUIListBoxNoBorder").Content; - GUILayoutGroup playStyleLayout = new GUILayoutGroup(new RectTransform(new Vector2(1f, 0.2f), roundsTab.RectTransform)); + GUILayoutGroup playStyleLayout = new GUILayoutGroup(new RectTransform(new Vector2(1f, 0.2f), roundsContent.RectTransform)); // Play Style Selection new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.2f), playStyleLayout.RectTransform), TextManager.Get("ServerSettingsPlayStyle"), font: GUIStyle.SubHeadingFont); var playstyleList = new GUIListBox(new RectTransform(new Vector2(1.0f, 0.7f), playStyleLayout.RectTransform)) @@ -502,7 +514,7 @@ namespace Barotrauma.Networking GUITextBlock.AutoScaleAndNormalize(playStyleTickBoxes.Select(t => t.TextBlock)); playstyleList.RectTransform.MinSize = new Point(0, (int)(playstyleList.Content.Children.First().Rect.Height * 2.0f + playstyleList.Padding.Y + playstyleList.Padding.W)); - GUILayoutGroup sliderLayout = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.35f), roundsTab.RectTransform)) + GUILayoutGroup sliderLayout = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.35f), roundsContent.RectTransform)) { Stretch = true }; @@ -608,7 +620,7 @@ namespace Barotrauma.Networking }; slider.OnMoved(slider, slider.BarScroll); - GUILayoutGroup losModeLayout = new GUILayoutGroup(new RectTransform(new Vector2(1f, 0.14f), roundsTab.RectTransform)); + GUILayoutGroup losModeLayout = new GUILayoutGroup(new RectTransform(new Vector2(1f, 0.14f), roundsContent.RectTransform)); var losModeLabel = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.4f), losModeLayout.RectTransform), TextManager.Get("LosEffect")); @@ -629,7 +641,30 @@ namespace Barotrauma.Networking } GetPropertyData(nameof(LosMode)).AssignGUIComponent(losModeRadioButtonGroup); - GUILayoutGroup numberLayout = new GUILayoutGroup(new RectTransform(new Vector2(1f, 0.3f), roundsTab.RectTransform)) + GUILayoutGroup healthBarModeLayout = new GUILayoutGroup(new RectTransform(new Vector2(1f, 0.14f), roundsContent.RectTransform)); + + var healthBarModeLabel = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.4f), healthBarModeLayout.RectTransform), + TextManager.Get("ShowEnemyHealthBars")); + + var healthBarModeRadioButtonLayout + = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.6f), healthBarModeLayout.RectTransform), + isHorizontal: true) + { + Stretch = true + }; + + var healthBarModeRadioButtonGroup = new GUIRadioButtonGroup(); + EnemyHealthBarMode[] healthBarModeModes = Enum.GetValues(); + for (int i = 0; i < healthBarModeModes.Length; i++) + { + var losTick = new GUITickBox(new RectTransform(new Vector2(0.3f, 1.0f), healthBarModeRadioButtonLayout.RectTransform), + TextManager.Get($"ShowEnemyHealthBars.{healthBarModeModes[i]}"), + font: GUIStyle.SmallFont, style: "GUIRadioButton"); + healthBarModeRadioButtonGroup.AddRadioButton(i, losTick); + } + GetPropertyData(nameof(ShowEnemyHealthBars)).AssignGUIComponent(healthBarModeRadioButtonGroup); + + GUILayoutGroup numberLayout = new GUILayoutGroup(new RectTransform(new Vector2(1f, 0.3f), roundsContent.RectTransform)) { Stretch = true }; @@ -651,7 +686,7 @@ namespace Barotrauma.Networking var disableBotConversationsBox = new GUITickBox(new RectTransform(new Vector2(1.0f, 0.05f), numberLayout.RectTransform), TextManager.Get("ServerSettingsDisableBotConversations")); GetPropertyData(nameof(DisableBotConversations)).AssignGUIComponent(disableBotConversationsBox); - GUILayoutGroup buttonHolder = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.1f), roundsTab.RectTransform), isHorizontal: true) + GUILayoutGroup buttonHolder = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.1f), roundsContent.RectTransform), isHorizontal: true) { Stretch = true, RelativeSpacing = 0.05f diff --git a/Barotrauma/BarotraumaClient/ClientSource/Program.cs b/Barotrauma/BarotraumaClient/ClientSource/Program.cs index 436132dba..3da38f7df 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Program.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Program.cs @@ -112,10 +112,23 @@ namespace Barotrauma } StringBuilder sb = new StringBuilder(); + sb.AppendLine("Barotrauma Client crash report (generated on " + DateTime.Now + ")"); - sb.AppendLine("\n"); + sb.AppendLine(); sb.AppendLine("Barotrauma seems to have crashed. Sorry for the inconvenience! "); - sb.AppendLine("\n"); + sb.AppendLine(); + + string dxgiErrorHelpText = +#if WINDOWS + GetDXGIErrorHelpText(game, exception); +#else + string.Empty; +#endif + if (!string.IsNullOrEmpty(dxgiErrorHelpText)) + { + sb.AppendLine(dxgiErrorHelpText); + sb.AppendLine(); + } try { @@ -135,7 +148,7 @@ namespace Barotrauma XDocument newDoc = new XDocument(newElement); newDoc.Save(GameSettings.PlayerConfigPath); sb.AppendLine("To prevent further startup errors, installed mods will be disabled the next time you launch the game."); - sb.AppendLine("\n"); + sb.AppendLine(); } } } @@ -148,7 +161,7 @@ namespace Barotrauma { sb.AppendLine(exeHash.StringRepresentation); } - sb.AppendLine("\n"); + sb.AppendLine(); sb.AppendLine("Game version " + GameMain.Version + " (" + AssemblyInfo.BuildString + ", branch " + AssemblyInfo.GitBranch + ", revision " + AssemblyInfo.GitRevision + ")"); sb.AppendLine($"Graphics mode: {GameSettings.CurrentConfig.Graphics.Width}x{GameSettings.CurrentConfig.Graphics.Height} ({GameSettings.CurrentConfig.Graphics.DisplayMode})"); @@ -171,7 +184,7 @@ namespace Barotrauma sb.AppendLine("Client (" + (GameMain.Client.GameStarted ? "Round had started)" : "Round hadn't been started)")); } - sb.AppendLine("\n"); + sb.AppendLine(); sb.AppendLine("System info:"); sb.AppendLine(" Operating system: " + System.Environment.OSVersion + (System.Environment.Is64BitOperatingSystem ? " 64 bit" : " x86")); @@ -201,13 +214,14 @@ namespace Barotrauma } } - sb.AppendLine("\n"); - sb.AppendLine("Exception: " + exception.Message + " (" + exception.GetType().ToString() + ")"); + sb.AppendLine(); + sb.AppendLine($"Exception: {exception.Message} ({exception.GetType()})"); #if WINDOWS if (exception is SharpDXException sharpDxException && ((uint)sharpDxException.HResult) == 0x887A0005) { var dxDevice = (SharpDX.Direct3D11.Device)game.GraphicsDevice.Handle; - sb.AppendLine("Device removed reason: " + dxDevice.DeviceRemovedReason.ToString()); + var descriptor = ResultDescriptor.Find(dxDevice.DeviceRemovedReason)?.ApiCode ?? "UNKNOWN"; + sb.AppendLine($"Device removed reason: {descriptor} ({dxDevice.DeviceRemovedReason})"); } #endif if (exception.TargetSite != null) @@ -219,7 +233,7 @@ namespace Barotrauma { sb.AppendLine("Stack trace: "); sb.AppendLine(exception.StackTrace.CleanupStackTrace()); - sb.AppendLine("\n"); + sb.AppendLine(); } if (exception.InnerException != null) @@ -260,18 +274,43 @@ namespace Barotrauma if (GameSettings.CurrentConfig.SaveDebugConsoleLogs || GameSettings.CurrentConfig.VerboseLogging) { DebugConsole.SaveLogs(); } - + + string msg = string.Empty; if (GameAnalyticsManager.SendUserStatistics) { - CrashMessageBox("A crash report (\"" + filePath + "\") was saved in the root folder of the game and sent to the developers.", filePath); + msg = "A crash report (\"" + filePath + "\") was saved in the root folder of the game and sent to the developers."; } else { - CrashMessageBox("A crash report (\"" + filePath + "\") was saved in the root folder of the game. The error was not sent to the developers because user statistics have been disabled, but" + - " if you'd like to help fix this bug, you may post it on Barotrauma's GitHub issue tracker: https://github.com/Regalis11/Barotrauma/issues/", filePath); + msg = "A crash report (\"" + filePath + "\") was saved in the root folder of the game. The error was not sent to the developers because user statistics have been disabled, but" + + " if you'd like to help fix this bug, you may post it on Barotrauma's GitHub issue tracker: https://github.com/Regalis11/Barotrauma/issues/"; } + if (string.IsNullOrEmpty(dxgiErrorHelpText)) + { + msg += "\n\n" + dxgiErrorHelpText; + } + CrashMessageBox(msg, filePath); } +#if WINDOWS + private static string GetDXGIErrorHelpText(GameMain game, Exception exception) + { + string text = string.Empty; + if (exception is SharpDXException sharpDxException && ((uint)sharpDxException.HResult) == 0x887A0005) + { + var dxDevice = (SharpDX.Direct3D11.Device)game.GraphicsDevice.Handle; + var descriptor = ResultDescriptor.Find(dxDevice.DeviceRemovedReason)?.ApiCode ?? "UNKNOWN"; + + text += + $"The crash was caused by the DirectX error {descriptor} ({dxDevice.DeviceRemovedReason}). " + + "This is a common DirectX error that can be related to various different issues, such as outdated drivers, RAM problems or an overclocked or otherwise overstressed GPU. " + + "There are several potential ways to fix the issue: ensuring your graphics drivers and DirectX installation are up-to-date, disabling overclocking and adjusting various GPU-specific settings. " + + $"You may also be able to find potential solutions to the problem by using the error code {descriptor} ({dxDevice.DeviceRemovedReason}) and your GPU manufacturer as search terms."; + } + return text; + } +#endif + private static IntPtr nvApi64Dll = IntPtr.Zero; private static void EnableNvOptimus() { @@ -287,11 +326,11 @@ namespace Barotrauma private static void FreeNvOptimus() { - #warning TODO: determine if we can do this safely +#warning TODO: determine if we can do this safely //NativeLibrary.Free(nvApi64Dll); } } #endif - + } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignSetupUI/CampaignSetupUI.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignSetupUI/CampaignSetupUI.cs index 46dfef1ef..5083a49c3 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignSetupUI/CampaignSetupUI.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignSetupUI/CampaignSetupUI.cs @@ -104,6 +104,7 @@ namespace Barotrauma public struct CampaignSettingElements { + public SettingValue TutorialEnabled; public SettingValue RadiationEnabled; public SettingValue MaxMissionCount; public SettingValue StartingFunds; @@ -114,6 +115,7 @@ namespace Barotrauma { return new CampaignSettings(element: null) { + TutorialEnabled = TutorialEnabled.GetValue(), RadiationEnabled = RadiationEnabled.GetValue(), MaxMissionCount = MaxMissionCount.GetValue(), StartingBalanceAmount = StartingFunds.GetValue(), @@ -159,7 +161,7 @@ namespace Barotrauma } } - protected static CampaignSettingElements CreateCampaignSettingList(GUIComponent parent, CampaignSettings prevSettings) + protected static CampaignSettingElements CreateCampaignSettingList(GUIComponent parent, CampaignSettings prevSettings, bool isSinglePlayer) { const float verticalSize = 0.14f; @@ -180,6 +182,9 @@ namespace Barotrauma Spacing = GUI.IntScale(5) }; + SettingValue tutorialEnabled = isSinglePlayer ? + CreateTickbox(settingsList.Content, TextManager.Get("CampaignOption.EnableTutorial"), TextManager.Get("campaignoption.enabletutorial.tooltip"), prevSettings.TutorialEnabled, verticalSize) : + new SettingValue(() => false, b => { }); SettingValue radiationEnabled = CreateTickbox(settingsList.Content, TextManager.Get("CampaignOption.EnableRadiation"), TextManager.Get("campaignoption.enableradiation.tooltip"), prevSettings.RadiationEnabled, verticalSize); ImmutableArray> startingSetOptions = StartItemSet.Sets.OrderBy(s => s.Order).Select(set => new SettingCarouselElement(set.Identifier, $"startitemset.{set.Identifier}")).ToImmutableArray(); @@ -214,6 +219,7 @@ namespace Barotrauma { if (o is CampaignSettings settings) { + tutorialEnabled.SetValue(isSinglePlayer && settings.TutorialEnabled); radiationEnabled.SetValue(settings.RadiationEnabled); maxMissionCountInput.SetValue(settings.MaxMissionCount); startingFundsInput.SetValue(settings.StartingBalanceAmount); @@ -226,6 +232,7 @@ namespace Barotrauma return new CampaignSettingElements { + TutorialEnabled = tutorialEnabled, RadiationEnabled = radiationEnabled, MaxMissionCount = maxMissionCountInput, StartingFunds = startingFundsInput, diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignSetupUI/MultiPlayerCampaignSetupUI.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignSetupUI/MultiPlayerCampaignSetupUI.cs index 70a8bbd8c..66f0877d6 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignSetupUI/MultiPlayerCampaignSetupUI.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignSetupUI/MultiPlayerCampaignSetupUI.cs @@ -46,7 +46,7 @@ namespace Barotrauma nameSeedLayout.RectTransform.MinSize = new Point(0, nameSeedLayout.Children.Sum(c => c.RectTransform.MinSize.Y)); - CampaignSettingElements elements = CreateCampaignSettingList(campaignSettingLayout, CampaignSettings.Empty); + CampaignSettingElements elements = CreateCampaignSettingList(campaignSettingLayout, CampaignSettings.Empty, false); var buttonContainer = new GUILayoutGroup(new RectTransform(new Vector2(1f, 0.1f), verticalLayout.RectTransform) { MaxSize = new Point(int.MaxValue, 60) }, childAnchor: Anchor.BottomRight, isHorizontal: true); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignSetupUI/SinglePlayerCampaignSetupUI.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignSetupUI/SinglePlayerCampaignSetupUI.cs index 5688ea044..1b8f74e3c 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignSetupUI/SinglePlayerCampaignSetupUI.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/CampaignSetupUI/SinglePlayerCampaignSetupUI.cs @@ -370,7 +370,7 @@ namespace Barotrauma GUILayoutGroup campaignSettingContent = new GUILayoutGroup(new RectTransform(new Vector2(0.95f, 0.8f), CampaignCustomizeSettings.Content.RectTransform, Anchor.TopCenter)); - CampaignSettingElements elements = CreateCampaignSettingList(campaignSettingContent, prevSettings); + CampaignSettingElements elements = CreateCampaignSettingList(campaignSettingContent, prevSettings, true); CampaignCustomizeSettings.Buttons[0].OnClicked += (button, o) => { @@ -608,15 +608,16 @@ namespace Barotrauma { OnClicked = (btn, userdata) => { + var saveFolder = SaveUtil.GetSaveFolder(SaveUtil.SaveType.Singleplayer); try { - ToolBox.OpenFileWithShell(SaveUtil.SaveFolder); + ToolBox.OpenFileWithShell(saveFolder); } catch (Exception e) { new GUIMessageBox( - TextManager.Get("error"), - TextManager.GetWithVariables("showinfoldererror", ("[folder]", SaveUtil.SaveFolder), ("[errormessage]", e.Message))); + TextManager.Get("error"), + TextManager.GetWithVariables("showinfoldererror", ("[folder]", saveFolder), ("[errormessage]", e.Message))); } return true; } diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/CharacterEditor/CharacterEditorScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/CharacterEditor/CharacterEditorScreen.cs index 668226715..ede525285 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/CharacterEditor/CharacterEditorScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/CharacterEditor/CharacterEditorScreen.cs @@ -39,6 +39,7 @@ namespace Barotrauma.CharacterEditor private bool ShowExtraRagdollControls => editLimbs || editJoints; + public Character SpawnedCharacter => character; private Character character; private Vector2 spawnPosition; @@ -1513,7 +1514,7 @@ namespace Barotrauma.CharacterEditor } } - private Character SpawnCharacter(Identifier speciesName, RagdollParams ragdoll = null) + public Character SpawnCharacter(Identifier speciesName, RagdollParams ragdoll = null) { DebugConsole.NewMessage(GetCharacterEditorTranslation("TryingToSpawnCharacter").Replace("[config]", speciesName.ToString()), Color.HotPink); OnPreSpawn(); @@ -3181,10 +3182,7 @@ namespace Barotrauma.CharacterEditor OnClicked = (button, data) => { ResetView(); - CharacterParams.Serialize(); - RagdollParams.Serialize(); - AnimParams.ForEach(a => a.Serialize()); - Wizard.Instance.CopyExisting(CharacterParams, RagdollParams, AnimParams); + PrepareCharacterCopy(); Wizard.Instance.SelectTab(Wizard.Tab.Character); return true; } @@ -3209,9 +3207,17 @@ namespace Barotrauma.CharacterEditor fileEditPanel.RectTransform.MinSize = new Point(0, (int)(layoutGroup.RectTransform.Children.Sum(c => c.MinSize.Y + layoutGroup.AbsoluteSpacing) * 1.2f)); } -#endregion + #endregion -#region ToggleButtons + public void PrepareCharacterCopy() + { + CharacterParams.Serialize(); + RagdollParams.Serialize(); + AnimParams.ForEach(a => a.Serialize()); + Wizard.Instance.CopyExisting(CharacterParams, RagdollParams, AnimParams); + } + + #region ToggleButtons private enum Direction { Left, diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/CharacterEditor/Wizard.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/CharacterEditor/Wizard.cs index 642648f1b..64a6b65c9 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/CharacterEditor/Wizard.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/CharacterEditor/Wizard.cs @@ -101,7 +101,7 @@ namespace Barotrauma.CharacterEditor { bool isSamePackage = contentPackage.GetFiles().Any(f => Path.GetFileNameWithoutExtension(f.Path.Value) == name); LocalizedString verificationText = isSamePackage ? GetCharacterEditorTranslation("existingcharacterfoundreplaceverification") : GetCharacterEditorTranslation("existingcharacterfoundoverrideverification"); - var msgBox = new GUIMessageBox("", verificationText, new LocalizedString[] { TextManager.Get("Yes"), TextManager.Get("No") }) + var msgBox = new GUIMessageBox("", verificationText, new LocalizedString[] { TextManager.Get("Yes"), TextManager.Get("No") }, type: GUIMessageBox.Type.Warning) { UserData = "verificationprompt" }; @@ -356,7 +356,7 @@ namespace Barotrauma.CharacterEditor } if (ContentPackageManager.AllPackages.Any(cp => cp.Name.ToLower() == contentPackageNameElement.Text.ToLower())) { - new GUIMessageBox("", TextManager.Get("charactereditor.contentpackagenameinuse", "leveleditorlevelobjnametaken")); + new GUIMessageBox("", TextManager.Get("charactereditor.contentpackagenameinuse", "leveleditorlevelobjnametaken"), type: GUIMessageBox.Type.Warning); return false; } string modName = contentPackageNameElement.Text; @@ -428,17 +428,26 @@ namespace Barotrauma.CharacterEditor texturePathElement.Flash(useRectangleFlash: true); return false; } + if (Name == CharacterPrefab.HumanSpeciesName && !IsCopy) + { + // Force a copy when trying to override a human, because handling the crash would be very difficult (we require humans to have certain definitions). + if (!CharacterEditorScreen.Instance.SpawnedCharacter.IsHuman) + { + CharacterEditorScreen.Instance.SpawnCharacter(CharacterPrefab.HumanSpeciesName); + } + CharacterEditorScreen.Instance.PrepareCharacterCopy(); + } if (IsCopy) { SourceRagdoll.Texture = evaluatedTexturePath; SourceRagdoll.CanEnterSubmarine = CanEnterSubmarine; SourceRagdoll.CanWalk = CanWalk; SourceRagdoll.Serialize(); - Wizard.Instance.CreateCharacter(SourceRagdoll.MainElement, SourceCharacter.MainElement, SourceAnimations); + Instance.CreateCharacter(SourceRagdoll.MainElement, SourceCharacter.MainElement, SourceAnimations); } else { - Wizard.Instance.SelectTab(Tab.Ragdoll); + Instance.SelectTab(Tab.Ragdoll); } return true; }; @@ -470,9 +479,6 @@ namespace Barotrauma.CharacterEditor Stretch = true, RelativeSpacing = 0.02f }; - // HTML - GUIMessageBox htmlBox = null; - var loadHtmlButton = new GUIButton(new RectTransform(new Point(content.Rect.Width / 3, elementSize), content.RectTransform), GetCharacterEditorTranslation("LoadFromHTML")); // Limbs var limbsElement = new GUIFrame(new RectTransform(new Vector2(1, 0.05f), content.RectTransform), style: null) { CanBeFocused = false }; @@ -689,69 +695,6 @@ namespace Barotrauma.CharacterEditor return true; } }; - loadHtmlButton.OnClicked = (b, d) => - { - if (htmlBox == null) - { - htmlBox = new GUIMessageBox(GetCharacterEditorTranslation("LoadHTML"), string.Empty, new LocalizedString[] { TextManager.Get("Close"), TextManager.Get("Load") }, new Vector2(0.65f, 1f)); - htmlBox.Header.Font = GUIStyle.LargeFont; - var element = new GUIFrame(new RectTransform(new Vector2(0.9f, 0.05f), htmlBox.Content.RectTransform), style: null, color: Color.Gray * 0.25f); - //new GUITextBlock(new RectTransform(new Vector2(0.3f, 1), element.RectTransform), GetCharacterEditorTranslation("HTMLPath")); - var htmlPathElement = new GUITextBox(new RectTransform(new Vector2(0.7f, 1), element.RectTransform, Anchor.TopRight), GetCharacterEditorTranslation("HTMLPath").Value); - LocalizedString title = GetCharacterEditorTranslation("SelectFile"); - new GUIButton(new RectTransform(new Vector2(0.3f, 1), element.RectTransform), title) - { - OnClicked = (button, data) => - { - FileSelection.OnFileSelected = (file) => - { - htmlPathElement.Text = file; - }; - FileSelection.ClearFileTypeFilters(); - FileSelection.AddFileTypeFilter("HTML", "*.html, *.htm"); - FileSelection.AddFileTypeFilter("All files", "*.*"); - FileSelection.SelectFileTypeFilter("*.html, *.htm"); - FileSelection.Open = true; - return true; - } - }; - var list = new GUIListBox(new RectTransform(new Vector2(1, 0.8f), htmlBox.Content.RectTransform)); - var htmlOutput = new GUITextBlock(new RectTransform(Vector2.One, list.Content.RectTransform), string.Empty) { CanBeFocused = false }; - htmlBox.Buttons[0].OnClicked += (_b, _d) => - { - htmlBox.Close(); - return true; - }; - htmlBox.Buttons[1].OnClicked += (_b, _d) => - { - LimbGUIElements.ForEach(l => l.RectTransform.Parent = null); - LimbGUIElements.Clear(); - JointGUIElements.ForEach(j => j.RectTransform.Parent = null); - JointGUIElements.Clear(); - LimbXElements.Clear(); - JointXElements.Clear(); - ParseRagdollFromHTML(htmlPathElement.Text, (id, limbName, limbType, rect) => - { - CreateLimbGUIElement(limbsList.Content.RectTransform, elementSize, id, limbName, limbType, rect); - }, (id1, id2, anchor1, anchor2, jointName) => - { - CreateJointGUIElement(jointsList.Content.RectTransform, elementSize, id1, id2, anchor1, anchor2, jointName); - }); - htmlOutput.Text = new XDocument(new XElement("Ragdoll", new object[] - { - new XAttribute("type", Name), LimbXElements.Values, JointXElements - })).ToString(); - htmlOutput.CalculateHeightFromText(); - list.UpdateScrollBarSize(); - return true; - }; - } - else - { - GUIMessageBox.MessageBoxes.Add(htmlBox); - } - return true; - }; // Previous box.Buttons[0].OnClicked += (b, d) => { @@ -1070,7 +1013,6 @@ namespace Barotrauma.CharacterEditor // Rectangles colliderAttributes.Add(new XAttribute("height", (int)(height * 0.85f))); colliderAttributes.Add(new XAttribute("width", (int)(width * 0.85f))); - idToCodeName.TryGetValue(id, out string notes); LimbXElements.Add(id.ToString(), new XElement("limb", new XAttribute("id", id), new XAttribute("name", limbName), @@ -1107,188 +1049,6 @@ namespace Barotrauma.CharacterEditor } } - Dictionary idToCodeName = new Dictionary(); - protected void ParseRagdollFromHTML(string path, Action limbCallback = null, Action jointCallback = null) - { - // TODO: parse as xml files -> allows to load ragdolls onto the wizard. - //XDocument doc = XMLExtensions.TryLoadXml(path); - //var xElements = doc.Elements().ToArray(); - string html = string.Empty; - try - { - html = File.ReadAllText(path); - } - catch (Exception e) - { - DebugConsole.ThrowError(GetCharacterEditorTranslation("FailedToReadHTML").Replace("[path]", path), e); - return; - } - - var lines = html.Split(new string[] { "", Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries) - .Where(s => s.Contains("left") && s.Contains("top") && s.Contains("width") && s.Contains("height")); - int id = 0; - Dictionary hierarchyToID = new Dictionary(); - Dictionary idToHierarchy = new Dictionary(); - Dictionary idToPositionCode = new Dictionary(); - Dictionary idToName = new Dictionary(); - idToCodeName.Clear(); - foreach (var line in lines) - { - var codeNames = new string(line.SkipWhile(c => c != '>').Skip(1).ToArray()).Split(','); - for (int i = 0; i < codeNames.Length; i++) - { - string codeName = codeNames[i].Trim(); - if (string.IsNullOrWhiteSpace(codeName)) { continue; } - idToCodeName.Add(id, codeName); - string limbName = new string(codeName.SkipWhile(c => c != '_').Skip(1).ToArray()); - if (string.IsNullOrWhiteSpace(limbName)) { continue; } - idToName.Add(id, limbName); - var parts = line.Split(' '); - int ParseToInt(string selector) - { - string part = parts.First(p => p.Contains(selector)); - string s = new string(part.SkipWhile(c => c != ':').Skip(1).TakeWhile(c => char.IsNumber(c)).ToArray()); - int.TryParse(s, out int v); - return v; - }; - // example: 111311cr -> 111311 - string hierarchy = new string(codeName.TakeWhile(c => char.IsNumber(c)).ToArray()); - if (hierarchyToID.ContainsKey(hierarchy)) - { - DebugConsole.ThrowError(GetCharacterEditorTranslation("MultipleItemsWithSameHierarchy").Replace("[hierarchy]", hierarchy).Replace("[name]", codeName)); - return; - } - hierarchyToID.Add(hierarchy, id); - idToHierarchy.Add(id, hierarchy); - string positionCode = new string(codeName.SkipWhile(c => char.IsNumber(c)).TakeWhile(c => c != '_').ToArray()); - idToPositionCode.Add(id, positionCode.ToLowerInvariant()); - int x = ParseToInt("left"); - int y = ParseToInt("top"); - int width = ParseToInt("width"); - int height = ParseToInt("height"); - // This is overridden when the data is loaded from the gui fields. - LimbXElements.Add(hierarchy, new XElement("limb", - new XAttribute("id", id), - new XAttribute("name", limbName), - new XAttribute("type", ParseLimbType(limbName).ToString()), - new XElement("sprite", - new XAttribute("texture", ""), - new XAttribute("sourcerect", $"{x}, {y}, {width}, {height}")) - )); - limbCallback?.Invoke(id, limbName, ParseLimbType(limbName), new Rectangle(x, y, width, height)); - id++; - } - } - for (int i = 0; i < id; i++) - { - if (idToHierarchy.TryGetValue(i, out string hierarchy)) - { - if (hierarchy != "0") - { - // NEW LOGIC: if hierarchy length == 1, parent to 0 - // Else parent to the last bone in the current hierarchy (11 is parented to 1, 212 is parented to 21 etc) - string parent = hierarchy.Length > 1 ? hierarchy.Remove(hierarchy.Length - 1, 1) : "0"; - if (hierarchyToID.TryGetValue(parent, out int parentID)) - { - Vector2 anchor1 = Vector2.Zero; - Vector2 anchor2 = Vector2.Zero; - idToName.TryGetValue(parentID, out string parentName); - idToName.TryGetValue(i, out string limbName); - string jointName = $"{GetCharacterEditorTranslation("Joint")} {parentName} - {limbName}"; - if (idToPositionCode.TryGetValue(i, out string positionCode)) - { - float scalar = 0.8f; - if (LimbXElements.TryGetValue(parent, out XElement parentElement)) - { - Rectangle parentSourceRect = parentElement.Element("sprite").GetAttributeRect("sourcerect", Rectangle.Empty); - float parentWidth = parentSourceRect.Width / 2 * scalar; - float parentHeight = parentSourceRect.Height / 2 * scalar; - switch (positionCode) - { - case "tl": // -1, 1 - anchor1 = new Vector2(-parentWidth, parentHeight); - break; - case "tc": // 0, 1 - anchor1 = new Vector2(0, parentHeight); - break; - case "tr": // -1, 1 - anchor1 = new Vector2(-parentWidth, parentHeight); - break; - case "cl": // -1, 0 - anchor1 = new Vector2(-parentWidth, 0); - break; - case "cr": // 1, 0 - anchor1 = new Vector2(parentWidth, 0); - break; - case "bl": // -1, -1 - anchor1 = new Vector2(-parentWidth, -parentHeight); - break; - case "bc": // 0, -1 - anchor1 = new Vector2(0, -parentHeight); - break; - case "br": // 1, -1 - anchor1 = new Vector2(parentWidth, -parentHeight); - break; - } - if (LimbXElements.TryGetValue(hierarchy, out XElement element)) - { - Rectangle sourceRect = element.Element("sprite").GetAttributeRect("sourcerect", Rectangle.Empty); - float width = sourceRect.Width / 2 * scalar; - float height = sourceRect.Height / 2 * scalar; - switch (positionCode) - { - // Inverse - case "tl": - // br - anchor2 = new Vector2(-width, -height); - break; - case "tc": - // bc - anchor2 = new Vector2(0, -height); - break; - case "tr": - // bl - anchor2 = new Vector2(-width, -height); - break; - case "cl": - // cr - anchor2 = new Vector2(width, 0); - break; - case "cr": - // cl - anchor2 = new Vector2(-width, 0); - break; - case "bl": - // tr - anchor2 = new Vector2(-width, height); - break; - case "bc": - // tc - anchor2 = new Vector2(0, height); - break; - case "br": - // tl - anchor2 = new Vector2(-width, height); - break; - } - } - } - } - // This is overridden when the data is loaded from the gui fields. - JointXElements.Add(new XElement("joint", - new XAttribute("name", jointName), - new XAttribute("limb1", parentID), - new XAttribute("limb2", i), - new XAttribute("limb1anchor", $"{anchor1.X.Format(2)}, {anchor1.Y.Format(2)}"), - new XAttribute("limb2anchor", $"{anchor2.X.Format(2)}, {anchor2.Y.Format(2)}") - )); - jointCallback?.Invoke(parentID, i, anchor1, anchor2, jointName); - } - } - } - } - } - protected LimbType ParseLimbType(string limbName) { var limbType = LimbType.None; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/MainMenuScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/MainMenuScreen.cs index e89550ec1..0ae5127d6 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/MainMenuScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/MainMenuScreen.cs @@ -269,7 +269,7 @@ namespace Barotrauma }; #if USE_STEAM - steamWorkshopButton = new GUIButton(new RectTransform(new Vector2(1.0f, 1.0f), customizeList.RectTransform), TextManager.Get("SteamWorkshopButton"), textAlignment: Alignment.Left, style: "MainMenuGUIButton") + steamWorkshopButton = new GUIButton(new RectTransform(new Vector2(1.0f, 1.0f), customizeList.RectTransform), TextManager.Get("settingstab.mods"), textAlignment: Alignment.Left, style: "MainMenuGUIButton") { ForceUpperCase = ForceUpperCase.Yes, Enabled = true, @@ -463,13 +463,17 @@ namespace Barotrauma } }; var tutorialPreview = new GUILayoutGroup(new RectTransform(new Vector2(0.6f, 1.0f), tutorialContent.RectTransform)) { RelativeSpacing = 0.05f, Stretch = true }; - var imageContainer = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.6f), tutorialPreview.RectTransform), style: "InnerFrame"); + var imageContainer = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.5f), tutorialPreview.RectTransform), style: "InnerFrame"); tutorialBanner = new GUIImage(new RectTransform(Vector2.One, imageContainer.RectTransform), style: null, scaleToFit: true); - var infoContainer = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.4f), tutorialPreview.RectTransform), style: "GUIFrameListBox"); - var infoContent = new GUILayoutGroup(new RectTransform(new Vector2(0.95f, 0.9f), infoContainer.RectTransform, Anchor.Center), childAnchor: Anchor.TopCenter); + var infoContainer = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.5f), tutorialPreview.RectTransform), style: "GUIFrameListBox"); + var infoContent = new GUILayoutGroup(new RectTransform(new Vector2(0.95f, 0.9f), infoContainer.RectTransform, Anchor.Center), childAnchor: Anchor.TopLeft) + { + AbsoluteSpacing = GUI.IntScale(10) + }; - tutorialHeader = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.75f), infoContent.RectTransform), string.Empty, font: GUIStyle.SubHeadingFont, textAlignment: Alignment.Center); + tutorialHeader = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), infoContent.RectTransform), string.Empty, font: GUIStyle.SubHeadingFont); + tutorialDescription = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), infoContent.RectTransform), string.Empty, wrap: true); var startButton = new GUIButton(new RectTransform(new Vector2(0.5f, 0.0f), infoContent.RectTransform, Anchor.BottomRight), text: TextManager.Get("startgamebutton")) { @@ -500,6 +504,10 @@ namespace Barotrauma private void SelectTutorial(Tutorial tutorial) { tutorialHeader.Text = tutorial.DisplayName; + tutorialHeader.CalculateHeightFromText(); + tutorialDescription.Text = tutorial.Description; + tutorialDescription.CalculateHeightFromText(); + (tutorialDescription.Parent as GUILayoutGroup)?.Recalculate(); tutorial.TutorialPrefab.Banner?.EnsureLazyLoaded(); tutorialBanner.Sprite = tutorial.TutorialPrefab.Banner; tutorialBanner.Color = tutorial.TutorialPrefab.Banner == null ? Color.Black : Color.White; diff --git a/Barotrauma/BarotraumaClient/ClientSource/Screens/SubEditorScreen.cs b/Barotrauma/BarotraumaClient/ClientSource/Screens/SubEditorScreen.cs index aa6c37369..c8366b171 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Screens/SubEditorScreen.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Screens/SubEditorScreen.cs @@ -2487,7 +2487,7 @@ namespace Barotrauma { IntValue = MainSub.Info.Tier, MinValueInt = 1, - MaxValueInt = 3, + MaxValueInt = SubmarineInfo.HighestTier, OnValueChanged = (numberInput) => { MainSub.Info.Tier = numberInput.IntValue; @@ -2495,7 +2495,7 @@ namespace Barotrauma }; if (MainSub?.Info != null) { - MainSub.Info.Tier = Math.Clamp(MainSub.Info.Tier, 1, 3); + MainSub.Info.Tier = Math.Clamp(MainSub.Info.Tier, 1, SubmarineInfo.HighestTier); } var crewSizeArea = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.25f), subSettingsContainer.RectTransform), isHorizontal: true) @@ -3228,7 +3228,7 @@ namespace Barotrauma } string pathWithoutUserName = Path.GetFullPath(sub.FilePath); - string saveFolder = Path.GetFullPath(SaveUtil.SaveFolder); + string saveFolder = Path.GetFullPath(SaveUtil.DefaultSaveFolder); if (pathWithoutUserName.StartsWith(saveFolder)) { pathWithoutUserName = "..." + pathWithoutUserName[saveFolder.Length..]; @@ -4217,7 +4217,8 @@ namespace Barotrauma GUIListBox listBox = new GUIListBox(new RectTransform(new Vector2(0.9f, 0.9f), frame.RectTransform, Anchor.Center)) { PlaySoundOnSelect = true, - OnSelected = SelectWire + OnSelected = SelectWire, + CanTakeKeyBoardFocus = false }; List wirePrefabs = new List(); @@ -5866,7 +5867,7 @@ namespace Barotrauma decimal realWorldDistance = decimal.Round((decimal) (Vector2.Distance(startPos, mouseWorldPos) * Physics.DisplayToRealWorldRatio), 2); Vector2 offset = new Vector2(GUI.IntScale(24)); - GUI.DrawString(spriteBatch, PlayerInput.MousePosition + offset, $"{realWorldDistance}m", GUIStyle.TextColorNormal, font: GUIStyle.SubHeadingFont, backgroundColor: Color.Black, backgroundPadding: 4); + GUI.DrawString(spriteBatch, PlayerInput.MousePosition + offset, $"{realWorldDistance} m", GUIStyle.TextColorNormal, font: GUIStyle.Font, backgroundColor: Color.Black, backgroundPadding: 4); } spriteBatch.End(); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Settings/SettingsMenu.cs b/Barotrauma/BarotraumaClient/ClientSource/Settings/SettingsMenu.cs index 65a6e87bc..594e36ad4 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Settings/SettingsMenu.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Settings/SettingsMenu.cs @@ -176,7 +176,7 @@ namespace Barotrauma Action setter) where T : Enum => Dropdown(parent, textFunc, tooltipFunc, (T[])Enum.GetValues(typeof(T)), currentValue, setter); - private static void Dropdown(GUILayoutGroup parent, Func textFunc, Func? tooltipFunc, IReadOnlyList values, T currentValue, Action setter) + private static GUIDropDown Dropdown(GUILayoutGroup parent, Func textFunc, Func? tooltipFunc, IReadOnlyList values, T currentValue, Action setter) { var dropdown = new GUIDropDown(NewItemRectT(parent)); values.ForEach(v => dropdown.AddItem(text: textFunc(v), userData: v, toolTip: tooltipFunc?.Invoke(v) ?? null)); @@ -189,9 +189,10 @@ namespace Barotrauma setter((T)obj); return true; }; + return dropdown; } - private void Slider(GUILayoutGroup parent, Vector2 range, int steps, Func labelFunc, float currentValue, Action setter, LocalizedString? tooltip = null) + private static (GUIScrollBar slider, GUITextBlock label) Slider(GUILayoutGroup parent, Vector2 range, int steps, Func labelFunc, float currentValue, Action setter, LocalizedString? tooltip = null) { var layout = new GUILayoutGroup(NewItemRectT(parent), isHorizontal: true); var slider = new GUIScrollBar(new RectTransform((0.72f, 1.0f), layout.RectTransform), style: "GUISlider") @@ -213,11 +214,12 @@ namespace Barotrauma setter(sb.BarScrollValue); return true; }; + return (slider, label); } - private void Tickbox(GUILayoutGroup parent, LocalizedString label, LocalizedString tooltip, bool currentValue, Action setter) + private static GUITickBox Tickbox(GUILayoutGroup parent, LocalizedString label, LocalizedString tooltip, bool currentValue, Action setter) { - var tickbox = new GUITickBox(NewItemRectT(parent), label) + return new GUITickBox(NewItemRectT(parent), label) { Selected = currentValue, ToolTip = tooltip, @@ -231,7 +233,7 @@ namespace Barotrauma private string Percentage(float v) => ToolBox.GetFormattedPercentage(v); - private int Round(float v) => (int)MathF.Round(v); + private static int Round(float v) => MathUtils.RoundToInt(v); private void CreateGraphicsTab() { @@ -262,30 +264,30 @@ namespace Barotrauma Spacer(left); Label(left, TextManager.Get("DisplayMode"), GUIStyle.SubHeadingFont); - DropdownEnum(left, (m) => TextManager.Get($"{m}"), null, unsavedConfig.Graphics.DisplayMode, (v) => unsavedConfig.Graphics.DisplayMode = v); + DropdownEnum(left, (m) => TextManager.Get($"{m}"), null, unsavedConfig.Graphics.DisplayMode, v => unsavedConfig.Graphics.DisplayMode = v); Spacer(left); - Tickbox(left, TextManager.Get("EnableVSync"), TextManager.Get("EnableVSyncTooltip"), unsavedConfig.Graphics.VSync, (v) => unsavedConfig.Graphics.VSync = v); - Tickbox(left, TextManager.Get("EnableTextureCompression"), TextManager.Get("EnableTextureCompressionTooltip"), unsavedConfig.Graphics.CompressTextures, (v) => unsavedConfig.Graphics.CompressTextures = v); + Tickbox(left, TextManager.Get("EnableVSync"), TextManager.Get("EnableVSyncTooltip"), unsavedConfig.Graphics.VSync, v => unsavedConfig.Graphics.VSync = v); + Tickbox(left, TextManager.Get("EnableTextureCompression"), TextManager.Get("EnableTextureCompressionTooltip"), unsavedConfig.Graphics.CompressTextures, v => unsavedConfig.Graphics.CompressTextures = v); Label(right, TextManager.Get("LOSEffect"), GUIStyle.SubHeadingFont); - DropdownEnum(right, (m) => TextManager.Get($"LosMode{m}"), null, unsavedConfig.Graphics.LosMode, (v) => unsavedConfig.Graphics.LosMode = v); + DropdownEnum(right, (m) => TextManager.Get($"LosMode{m}"), null, unsavedConfig.Graphics.LosMode, v => unsavedConfig.Graphics.LosMode = v); Spacer(right); Label(right, TextManager.Get("LightMapScale"), GUIStyle.SubHeadingFont); - Slider(right, (0.5f, 1.0f), 11, (v) => TextManager.GetWithVariable("percentageformat", "[value]", Round(v * 100).ToString()).Value, unsavedConfig.Graphics.LightMapScale, (v) => unsavedConfig.Graphics.LightMapScale = v, TextManager.Get("LightMapScaleTooltip")); + Slider(right, (0.5f, 1.0f), 11, v => TextManager.GetWithVariable("percentageformat", "[value]", Round(v * 100).ToString()).Value, unsavedConfig.Graphics.LightMapScale, v => unsavedConfig.Graphics.LightMapScale = v, TextManager.Get("LightMapScaleTooltip")); Spacer(right); Label(right, TextManager.Get("VisibleLightLimit"), GUIStyle.SubHeadingFont); - Slider(right, (10, 210), 21, (v) => v > 200 ? TextManager.Get("unlimited").Value : Round(v).ToString(), unsavedConfig.Graphics.VisibleLightLimit, - (v) => unsavedConfig.Graphics.VisibleLightLimit = v > 200 ? int.MaxValue : Round(v), TextManager.Get("VisibleLightLimitTooltip")); + Slider(right, (10, 210), 21, v => v > 200 ? TextManager.Get("unlimited").Value : Round(v).ToString(), unsavedConfig.Graphics.VisibleLightLimit, + v => unsavedConfig.Graphics.VisibleLightLimit = v > 200 ? int.MaxValue : Round(v), TextManager.Get("VisibleLightLimitTooltip")); Spacer(right); - Tickbox(right, TextManager.Get("RadialDistortion"), TextManager.Get("RadialDistortionTooltip"), unsavedConfig.Graphics.RadialDistortion, (v) => unsavedConfig.Graphics.RadialDistortion = v); - Tickbox(right, TextManager.Get("ChromaticAberration"), TextManager.Get("ChromaticAberrationTooltip"), unsavedConfig.Graphics.ChromaticAberration, (v) => unsavedConfig.Graphics.ChromaticAberration = v); + Tickbox(right, TextManager.Get("RadialDistortion"), TextManager.Get("RadialDistortionTooltip"), unsavedConfig.Graphics.RadialDistortion, v => unsavedConfig.Graphics.RadialDistortion = v); + Tickbox(right, TextManager.Get("ChromaticAberration"), TextManager.Get("ChromaticAberrationTooltip"), unsavedConfig.Graphics.ChromaticAberration, v => unsavedConfig.Graphics.ChromaticAberration = v); Label(right, TextManager.Get("ParticleLimit"), GUIStyle.SubHeadingFont); - Slider(right, (100, 1500), 15, (v) => Round(v).ToString(), unsavedConfig.Graphics.ParticleLimit, (v) => unsavedConfig.Graphics.ParticleLimit = Round(v)); + Slider(right, (100, 1500), 15, v => Round(v).ToString(), unsavedConfig.Graphics.ParticleLimit, v => unsavedConfig.Graphics.ParticleLimit = Round(v)); Spacer(right); } @@ -399,23 +401,23 @@ namespace Barotrauma Spacer(audio); Label(audio, TextManager.Get("SoundVolume"), GUIStyle.SubHeadingFont); - Slider(audio, (0, 1), 101, Percentage, unsavedConfig.Audio.SoundVolume, (v) => unsavedConfig.Audio.SoundVolume = v); + Slider(audio, (0, 1), 101, Percentage, unsavedConfig.Audio.SoundVolume, v => unsavedConfig.Audio.SoundVolume = v); Label(audio, TextManager.Get("MusicVolume"), GUIStyle.SubHeadingFont); - Slider(audio, (0, 1), 101, Percentage, unsavedConfig.Audio.MusicVolume, (v) => unsavedConfig.Audio.MusicVolume = v); + Slider(audio, (0, 1), 101, Percentage, unsavedConfig.Audio.MusicVolume, v => unsavedConfig.Audio.MusicVolume = v); Label(audio, TextManager.Get("UiSoundVolume"), GUIStyle.SubHeadingFont); - Slider(audio, (0, 1), 101, Percentage, unsavedConfig.Audio.UiVolume, (v) => unsavedConfig.Audio.UiVolume = v); + Slider(audio, (0, 1), 101, Percentage, unsavedConfig.Audio.UiVolume, v => unsavedConfig.Audio.UiVolume = v); - Tickbox(audio, TextManager.Get("MuteOnFocusLost"), TextManager.Get("MuteOnFocusLostTooltip"), unsavedConfig.Audio.MuteOnFocusLost, (v) => unsavedConfig.Audio.MuteOnFocusLost = v); - Tickbox(audio, TextManager.Get("DynamicRangeCompression"), TextManager.Get("DynamicRangeCompressionTooltip"), unsavedConfig.Audio.DynamicRangeCompressionEnabled, (v) => unsavedConfig.Audio.DynamicRangeCompressionEnabled = v); + Tickbox(audio, TextManager.Get("MuteOnFocusLost"), TextManager.Get("MuteOnFocusLostTooltip"), unsavedConfig.Audio.MuteOnFocusLost, v => unsavedConfig.Audio.MuteOnFocusLost = v); + Tickbox(audio, TextManager.Get("DynamicRangeCompression"), TextManager.Get("DynamicRangeCompressionTooltip"), unsavedConfig.Audio.DynamicRangeCompressionEnabled, v => unsavedConfig.Audio.DynamicRangeCompressionEnabled = v); Spacer(audio); Label(audio, TextManager.Get("VoiceChatVolume"), GUIStyle.SubHeadingFont); - Slider(audio, (0, 2), 201, Percentage, unsavedConfig.Audio.VoiceChatVolume, (v) => unsavedConfig.Audio.VoiceChatVolume = v); + Slider(audio, (0, 2), 201, Percentage, unsavedConfig.Audio.VoiceChatVolume, v => unsavedConfig.Audio.VoiceChatVolume = v); - Tickbox(audio, TextManager.Get("DirectionalVoiceChat"), TextManager.Get("DirectionalVoiceChatTooltip"), unsavedConfig.Audio.UseDirectionalVoiceChat, (v) => unsavedConfig.Audio.UseDirectionalVoiceChat = v); - Tickbox(audio, TextManager.Get("VoipAttenuation"), TextManager.Get("VoipAttenuationTooltip"), unsavedConfig.Audio.VoipAttenuationEnabled, (v) => unsavedConfig.Audio.VoipAttenuationEnabled = v); + Tickbox(audio, TextManager.Get("DirectionalVoiceChat"), TextManager.Get("DirectionalVoiceChatTooltip"), unsavedConfig.Audio.UseDirectionalVoiceChat, v => unsavedConfig.Audio.UseDirectionalVoiceChat = v); + Tickbox(audio, TextManager.Get("VoipAttenuation"), TextManager.Get("VoipAttenuationTooltip"), unsavedConfig.Audio.VoipAttenuationEnabled, v => unsavedConfig.Audio.VoipAttenuationEnabled = v); Label(voiceChat, TextManager.Get("AudioInputDevice"), GUIStyle.SubHeadingFont); @@ -424,7 +426,7 @@ namespace Barotrauma Spacer(voiceChat); Label(voiceChat, TextManager.Get("VCInputMode"), GUIStyle.SubHeadingFont); - DropdownEnum(voiceChat, (v) => TextManager.Get($"VoiceMode.{v}"), (v) => TextManager.Get($"VoiceMode.{v}Tooltip"), unsavedConfig.Audio.VoiceSetting, (v) => unsavedConfig.Audio.VoiceSetting = v); + DropdownEnum(voiceChat, v => TextManager.Get($"VoiceMode.{v}"), v => TextManager.Get($"VoiceMode.{v}Tooltip"), unsavedConfig.Audio.VoiceSetting, v => unsavedConfig.Audio.VoiceSetting = v); Spacer(voiceChat); var noiseGateThresholdLabel = Label(voiceChat, TextManager.Get("NoiseGateThreshold"), GUIStyle.SubHeadingFont); @@ -464,11 +466,11 @@ namespace Barotrauma Spacer(voiceChat); Label(voiceChat, TextManager.Get("MicrophoneVolume"), GUIStyle.SubHeadingFont); - Slider(voiceChat, (0, 10), 101, Percentage, unsavedConfig.Audio.MicrophoneVolume, (v) => unsavedConfig.Audio.MicrophoneVolume = v); + Slider(voiceChat, (0, 10), 101, Percentage, unsavedConfig.Audio.MicrophoneVolume, v => unsavedConfig.Audio.MicrophoneVolume = v); Spacer(voiceChat); Label(voiceChat, TextManager.Get("CutoffPrevention"), GUIStyle.SubHeadingFont); - Slider(voiceChat, (0, 500), 26, (v) => $"{Round(v)} ms", unsavedConfig.Audio.VoiceChatCutoffPrevention, (v) => unsavedConfig.Audio.VoiceChatCutoffPrevention = Round(v), TextManager.Get("CutoffPreventionTooltip")); + Slider(voiceChat, (0, 500), 26, v => $"{Round(v)} ms", unsavedConfig.Audio.VoiceChatCutoffPrevention, v => unsavedConfig.Audio.VoiceChatCutoffPrevention = Round(v), TextManager.Get("CutoffPreventionTooltip")); } private readonly Dictionary> inputButtonValueNameGetters = new Dictionary>(); @@ -481,8 +483,10 @@ namespace Barotrauma GUILayoutGroup layout = CreateCenterLayout(content); Label(layout, TextManager.Get("AimAssist"), GUIStyle.SubHeadingFont); - Slider(layout, (0, 1), 101, Percentage, unsavedConfig.AimAssistAmount, (v) => unsavedConfig.AimAssistAmount = v, TextManager.Get("AimAssistTooltip")); - Tickbox(layout, TextManager.Get("EnableMouseLook"), TextManager.Get("EnableMouseLookTooltip"), unsavedConfig.EnableMouseLook, (v) => unsavedConfig.EnableMouseLook = v); + + var aimAssistSlider = Slider(layout, (0, 1), 101, Percentage, unsavedConfig.AimAssistAmount, v => unsavedConfig.AimAssistAmount = v, TextManager.Get("AimAssistTooltip")); + Tickbox(layout, TextManager.Get("EnableMouseLook"), TextManager.Get("EnableMouseLookTooltip"), unsavedConfig.EnableMouseLook, v => unsavedConfig.EnableMouseLook = v); + Spacer(layout); GUIListBox keyMapList = @@ -523,7 +527,7 @@ namespace Barotrauma if (willBeSelected) { inputBoxSelectedThisFrame = true; - currentSetter = (v) => + currentSetter = v => { valueSetter(v); btn.Text = valueNameGetter(); @@ -626,7 +630,7 @@ namespace Barotrauma currRow, TextManager.Get($"InputType.{input}"), () => unsavedConfig.KeyMap.Bindings[input].Name, - (v) => unsavedConfig.KeyMap = unsavedConfig.KeyMap.WithBinding(input, v), + v => unsavedConfig.KeyMap = unsavedConfig.KeyMap.WithBinding(input, v), LegacyInputTypes.Contains(input)); } } @@ -644,7 +648,7 @@ namespace Barotrauma currRow, TextManager.GetWithVariable("inventoryslotkeybind", "[slotnumber]", (currIndex + 1).ToString(CultureInfo.InvariantCulture)), () => unsavedConfig.InventoryKeyMap.Bindings[currIndex].Name, - (v) => unsavedConfig.InventoryKeyMap = unsavedConfig.InventoryKeyMap.WithBinding(currIndex, v)); + v => unsavedConfig.InventoryKeyMap = unsavedConfig.InventoryKeyMap.WithBinding(currIndex, v)); } } @@ -663,6 +667,8 @@ namespace Barotrauma { unsavedConfig.InventoryKeyMap = GameSettings.Config.InventoryKeyMapping.GetDefault(); unsavedConfig.KeyMap = GameSettings.Config.KeyMapping.GetDefault(); + aimAssistSlider.slider.BarScrollValue = GameSettings.Config.DefaultAimAssist; + aimAssistSlider.label.Text = Percentage(GameSettings.Config.DefaultAimAssist); foreach (var btn in inputButtonValueNameGetters.Keys) { btn.Text = inputButtonValueNameGetters[btn](); @@ -683,13 +689,13 @@ namespace Barotrauma .OrderBy(l => TextManager.GetTranslatedLanguageName(l).ToIdentifier()) .ToArray(); Label(layout, TextManager.Get("Language"), GUIStyle.SubHeadingFont); - Dropdown(layout, (v) => TextManager.GetTranslatedLanguageName(v), null, languages, unsavedConfig.Language, (v) => unsavedConfig.Language = v); + Dropdown(layout, v => TextManager.GetTranslatedLanguageName(v), null, languages, unsavedConfig.Language, v => unsavedConfig.Language = v); Spacer(layout); - Tickbox(layout, TextManager.Get("PauseOnFocusLost"), TextManager.Get("PauseOnFocusLostTooltip"), unsavedConfig.PauseOnFocusLost, (v) => unsavedConfig.PauseOnFocusLost = v); + Tickbox(layout, TextManager.Get("PauseOnFocusLost"), TextManager.Get("PauseOnFocusLostTooltip"), unsavedConfig.PauseOnFocusLost, v => unsavedConfig.PauseOnFocusLost = v); Spacer(layout); - Tickbox(layout, TextManager.Get("DisableInGameHints"), TextManager.Get("DisableInGameHintsTooltip"), unsavedConfig.DisableInGameHints, (v) => unsavedConfig.DisableInGameHints = v); + Tickbox(layout, TextManager.Get("DisableInGameHints"), TextManager.Get("DisableInGameHintsTooltip"), unsavedConfig.DisableInGameHints, v => unsavedConfig.DisableInGameHints = v); var resetInGameHintsButton = new GUIButton(new RectTransform(new Vector2(1.0f, 1.0f), layout.RectTransform), TextManager.Get("ResetInGameHints"), style: "GUIButtonSmall") @@ -710,13 +716,17 @@ namespace Barotrauma } }; Spacer(layout); - + + Label(layout, TextManager.Get("ShowEnemyHealthBars"), GUIStyle.SubHeadingFont); + DropdownEnum(layout, v => TextManager.Get($"ShowEnemyHealthBars.{v}"), null, unsavedConfig.ShowEnemyHealthBars, v => unsavedConfig.ShowEnemyHealthBars = v); + Spacer(layout); + Label(layout, TextManager.Get("HUDScale"), GUIStyle.SubHeadingFont); - Slider(layout, (0.75f, 1.25f), 51, Percentage, unsavedConfig.Graphics.HUDScale, (v) => unsavedConfig.Graphics.HUDScale = v); + Slider(layout, (0.75f, 1.25f), 51, Percentage, unsavedConfig.Graphics.HUDScale, v => unsavedConfig.Graphics.HUDScale = v); Label(layout, TextManager.Get("InventoryScale"), GUIStyle.SubHeadingFont); - Slider(layout, (0.75f, 1.25f), 51, Percentage, unsavedConfig.Graphics.InventoryScale, (v) => unsavedConfig.Graphics.InventoryScale = v); + Slider(layout, (0.75f, 1.25f), 51, Percentage, unsavedConfig.Graphics.InventoryScale, v => unsavedConfig.Graphics.InventoryScale = v); Label(layout, TextManager.Get("TextScale"), GUIStyle.SubHeadingFont); - Slider(layout, (0.75f, 1.25f), 51, Percentage, unsavedConfig.Graphics.TextScale, (v) => unsavedConfig.Graphics.TextScale = v); + Slider(layout, (0.75f, 1.25f), 51, Percentage, unsavedConfig.Graphics.TextScale, v => unsavedConfig.Graphics.TextScale = v); #if !OSX Spacer(layout); diff --git a/Barotrauma/BarotraumaClient/ClientSource/Steam/Lobby.cs b/Barotrauma/BarotraumaClient/ClientSource/Steam/Lobby.cs index 54cab99e7..258594f3d 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Steam/Lobby.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Steam/Lobby.cs @@ -50,20 +50,25 @@ namespace Barotrauma.Steam lobbyState = LobbyState.Owner; lobbyID = (currentLobby?.Id).Value; - if (serverSettings.IsPublic) - { - currentLobby?.SetPublic(); - } - else - { - currentLobby?.SetFriendsOnly(); - } + SetLobbyPublic(serverSettings.IsPublic); currentLobby?.SetJoinable(true); UpdateLobby(serverSettings); }); } + public static void SetLobbyPublic(bool isPublic) + { + if (isPublic) + { + currentLobby?.SetPublic(); + } + else + { + currentLobby?.SetFriendsOnly(); + } + } + public static void UpdateLobby(ServerSettings serverSettings) { if (GameMain.Client == null) diff --git a/Barotrauma/BarotraumaClient/ClientSource/Utils/SpreadsheetExport.cs b/Barotrauma/BarotraumaClient/ClientSource/Utils/SpreadsheetExport.cs index 2d4a1ffb2..67bc81568 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/Utils/SpreadsheetExport.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/Utils/SpreadsheetExport.cs @@ -104,7 +104,7 @@ namespace Barotrauma } } - List successEffects = statusEffects.Where(se => se.type == ActionType.OnUse).ToList(); + List successEffects = statusEffects.Where(se => se.type == ActionType.OnSuccess).ToList(); List failureEffects = statusEffects.Where(se => se.type == ActionType.OnFailure).ToList(); foreach (StatusEffect statusEffect in successEffects) diff --git a/Barotrauma/BarotraumaClient/LinuxClient.csproj b/Barotrauma/BarotraumaClient/LinuxClient.csproj index 41e27b185..92a7c8a82 100644 --- a/Barotrauma/BarotraumaClient/LinuxClient.csproj +++ b/Barotrauma/BarotraumaClient/LinuxClient.csproj @@ -6,7 +6,7 @@ Barotrauma FakeFish, Undertow Games Barotrauma - 0.20.0.0 + 0.20.4.0 Copyright © FakeFish 2018-2022 AnyCPU;x64 Barotrauma @@ -100,6 +100,8 @@ PreserveNewest + + Icon.bmp diff --git a/Barotrauma/BarotraumaClient/MacClient.csproj b/Barotrauma/BarotraumaClient/MacClient.csproj index 24e07ca66..2a8218f30 100644 --- a/Barotrauma/BarotraumaClient/MacClient.csproj +++ b/Barotrauma/BarotraumaClient/MacClient.csproj @@ -6,7 +6,7 @@ Barotrauma FakeFish, Undertow Games Barotrauma - 0.20.0.0 + 0.20.4.0 Copyright © FakeFish 2018-2022 AnyCPU;x64 Barotrauma @@ -99,6 +99,7 @@ PreserveNewest + Icon.bmp diff --git a/Barotrauma/BarotraumaClient/WindowsClient.csproj b/Barotrauma/BarotraumaClient/WindowsClient.csproj index 4b80f7c8d..77fedbce5 100644 --- a/Barotrauma/BarotraumaClient/WindowsClient.csproj +++ b/Barotrauma/BarotraumaClient/WindowsClient.csproj @@ -6,7 +6,7 @@ Barotrauma FakeFish, Undertow Games Barotrauma - 0.20.0.0 + 0.20.4.0 Copyright © FakeFish 2018-2022 AnyCPU;x64 Barotrauma @@ -117,6 +117,7 @@ + @@ -126,6 +127,7 @@ + diff --git a/Barotrauma/BarotraumaServer/LinuxServer.csproj b/Barotrauma/BarotraumaServer/LinuxServer.csproj index 7e7a57032..38f6eccc6 100644 --- a/Barotrauma/BarotraumaServer/LinuxServer.csproj +++ b/Barotrauma/BarotraumaServer/LinuxServer.csproj @@ -6,7 +6,7 @@ Barotrauma FakeFish, Undertow Games Barotrauma Dedicated Server - 0.20.0.0 + 0.20.4.0 Copyright © FakeFish 2018-2022 AnyCPU;x64 DedicatedServer diff --git a/Barotrauma/BarotraumaServer/MacServer.csproj b/Barotrauma/BarotraumaServer/MacServer.csproj index 34e6882e6..56a08b7b4 100644 --- a/Barotrauma/BarotraumaServer/MacServer.csproj +++ b/Barotrauma/BarotraumaServer/MacServer.csproj @@ -6,7 +6,7 @@ Barotrauma FakeFish, Undertow Games Barotrauma Dedicated Server - 0.20.0.0 + 0.20.4.0 Copyright © FakeFish 2018-2022 AnyCPU;x64 DedicatedServer diff --git a/Barotrauma/BarotraumaServer/ServerSource/Characters/CharacterNetworking.cs b/Barotrauma/BarotraumaServer/ServerSource/Characters/CharacterNetworking.cs index a80e80caa..eedb1f10b 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Characters/CharacterNetworking.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Characters/CharacterNetworking.cs @@ -269,10 +269,13 @@ namespace Barotrauma case EventType.UpdateTalents: if (c.Character != this) { + if (!IsBot || !c.HasPermission(ClientPermissions.ManageBotTalents)) + { #if DEBUG - DebugConsole.Log("Received a character update message from a client who's not controlling the character"); + DebugConsole.Log("Received a character update message from a client who's not controlling the character"); #endif - return; + return; + } } // get the full list of talents from the player, only give the ones diff --git a/Barotrauma/BarotraumaServer/ServerSource/Events/EventManager.cs b/Barotrauma/BarotraumaServer/ServerSource/Events/EventManager.cs index dfa4bc4c0..5d9dde87c 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Events/EventManager.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Events/EventManager.cs @@ -31,7 +31,7 @@ namespace Barotrauma if (convAction.SelectedOption > -1) { //someone else already chose an option for this conversation: interrupt for this client - convAction.ServerWrite(convAction.speaker, sender, interrupt: true); + convAction.ServerWrite(convAction.Speaker, sender, interrupt: true); } else { diff --git a/Barotrauma/BarotraumaServer/ServerSource/GameSession/MedicalClinic.cs b/Barotrauma/BarotraumaServer/ServerSource/GameSession/MedicalClinic.cs index e30b1148f..e46134ca6 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/GameSession/MedicalClinic.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/GameSession/MedicalClinic.cs @@ -2,7 +2,9 @@ using System; using System.Collections.Generic; +using System.Collections.Immutable; using System.Linq; +using Barotrauma.Extensions; using Barotrauma.Networking; namespace Barotrauma @@ -30,6 +32,9 @@ namespace Barotrauma switch (header) { + case NetworkHeader.ADD_EVERYTHING_TO_PENDING: + ProcessAddEverything(sender); + break; case NetworkHeader.REQUEST_AFFLICTIONS: ProcessRequestedAfflictions(inc, sender); break; @@ -57,7 +62,14 @@ namespace Barotrauma NetCrewMember newCrewMember = INetSerializableStruct.Read(inc); InsertPendingCrewMember(newCrewMember); - ServerSend(newCrewMember, NetworkHeader.ADD_PENDING, DeliveryMethod.Reliable, reponseClient: client); + ServerSend(new NetCollection(newCrewMember), NetworkHeader.ADD_PENDING, DeliveryMethod.Reliable, reponseClient: client); + } + + private void ProcessAddEverything(Client client) + { + if (CheckRateLimit(client) == RateLimitResult.LimitReached) { return; } + AddEverythingToPending(); + ServerSend(PendingHeals.ToNetCollection(), NetworkHeader.ADD_PENDING, DeliveryMethod.Reliable, reponseClient: client); } private void ProcessNewRemoval(IReadMessage inc, Client client) @@ -73,12 +85,7 @@ namespace Barotrauma { if (CheckRateLimit(client) == RateLimitResult.LimitReached) { return; } - INetSerializableStruct writeCrewMember = new NetPendingCrew - { - CrewMembers = PendingHeals.ToArray() - }; - - ServerSend(writeCrewMember, NetworkHeader.REQUEST_PENDING, DeliveryMethod.Reliable, targetClient: client); + ServerSend(PendingHeals.ToNetCollection(), NetworkHeader.REQUEST_PENDING, DeliveryMethod.Reliable, targetClient: client); } private void ProcessHealing(Client client) @@ -107,10 +114,10 @@ namespace Barotrauma CharacterInfo? foundInfo = crewMember.FindCharacterInfo(GetCrewCharacters()); - NetAffliction[] pendingAfflictions = Array.Empty(); + ImmutableArray pendingAfflictions = ImmutableArray.Empty; int infoId = 0; - if (foundInfo is { Character: { CharacterHealth: { } health } }) + if (foundInfo is { Character.CharacterHealth: { } health }) { pendingAfflictions = GetAllAfflictions(health); infoId = foundInfo.GetIdentifierUsingOriginalName(); diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs index e48d786f1..666cd3039 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs @@ -2516,6 +2516,7 @@ namespace Barotrauma.Networking msg.WriteInt32(ServerSettings.MaximumMoneyTransferRequest); msg.WriteBoolean(IsUsingRespawnShuttle()); msg.WriteByte((byte)ServerSettings.LosMode); + msg.WriteByte((byte)ServerSettings.ShowEnemyHealthBars); msg.WriteBoolean(includesFinalize); msg.WritePadBits(); ServerSettings.WriteMonsterEnabled(msg); diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/ServerSettings.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/ServerSettings.cs index 603683348..7e348523a 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/ServerSettings.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/ServerSettings.cs @@ -272,7 +272,6 @@ namespace Barotrauma.Networking XDocument doc = new XDocument(new XElement("serversettings")); doc.Root.SetAttributeValue("name", ServerName); - doc.Root.SetAttributeValue("public", IsPublic); doc.Root.SetAttributeValue("port", Port); #if USE_STEAM doc.Root.SetAttributeValue("queryport", QueryPort); diff --git a/Barotrauma/BarotraumaServer/WindowsServer.csproj b/Barotrauma/BarotraumaServer/WindowsServer.csproj index f69fca38a..575b0e435 100644 --- a/Barotrauma/BarotraumaServer/WindowsServer.csproj +++ b/Barotrauma/BarotraumaServer/WindowsServer.csproj @@ -6,7 +6,7 @@ Barotrauma FakeFish, Undertow Games Barotrauma Dedicated Server - 0.20.0.0 + 0.20.4.0 Copyright © FakeFish 2018-2022 AnyCPU;x64 DedicatedServer diff --git a/Barotrauma/BarotraumaShared/Data/campaignsettings.xml b/Barotrauma/BarotraumaShared/Data/campaignsettings.xml index d88b556aa..40605ddf4 100644 --- a/Barotrauma/BarotraumaShared/Data/campaignsettings.xml +++ b/Barotrauma/BarotraumaShared/Data/campaignsettings.xml @@ -7,18 +7,21 @@ + permissions="ManageRound,Kick,SelectSub,SelectMode,ManageCampaign,ConsoleCommands,ServerLog,ManageSettings,ManageMoney,ManageBotTalents"> diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/EnemyAIController.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/EnemyAIController.cs index 4cf5983f2..f3ac3917c 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/EnemyAIController.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/EnemyAIController.cs @@ -1836,8 +1836,7 @@ namespace Barotrauma float GetTargetMaxSpeed() => Character.ApplyTemporarySpeedLimits(Character.AnimController.CurrentSwimParams.MovementSpeed * 0.3f); } } - - if (AttackLimb is Limb attackLimb && attackLimb.attack.Ranged) + if (selectedTargetingParams.AttackPattern == AttackPattern.Straight && AttackLimb is Limb attackLimb && attackLimb.attack.Ranged) { bool advance = !canAttack && Character.InWater || distance > attackLimb.attack.Range * 0.9f; bool fallBack = canAttack && distance < Math.Min(250, attackLimb.attack.Range * 0.25f); @@ -1881,19 +1880,11 @@ namespace Barotrauma } } } - IDamageable damageTarget = wallTarget != null ? wallTarget.Structure : SelectedAiTarget?.Entity as IDamageable; - if (AttackLimb?.attack is Attack { Ranged: true} attack) + Entity targetEntity = wallTarget?.Structure ?? SelectedAiTarget?.Entity; + IDamageable damageTarget = targetEntity as IDamageable; + if (AttackLimb?.attack is Attack { Ranged: true} attack && targetEntity != null) { - Limb limb = GetLimbToRotate(attack); - if (limb != null) - { - Vector2 toTarget = damageTarget.WorldPosition - limb.WorldPosition; - float offset = limb.Params.GetSpriteOrientation() - MathHelper.PiOver2; - limb.body.SuppressSmoothRotationCalls = false; - float angle = MathUtils.VectorToAngle(toTarget); - limb.body.SmoothRotate(angle + offset, attack.AimRotationTorque); - limb.body.SuppressSmoothRotationCalls = true; - } + AimRangedAttack(attack, targetEntity); } if (canAttack) { @@ -1908,6 +1899,22 @@ namespace Barotrauma } } + public void AimRangedAttack(Attack attack, Entity targetEntity) + { + if (attack == null || attack.Ranged == false || targetEntity == null) { return; } + Character.SetInput(InputType.Aim, false, true); + Limb limb = GetLimbToRotate(attack); + if (limb != null) + { + Vector2 toTarget = targetEntity.WorldPosition - limb.WorldPosition; + float offset = limb.Params.GetSpriteOrientation() - MathHelper.PiOver2; + limb.body.SuppressSmoothRotationCalls = false; + float angle = MathUtils.VectorToAngle(toTarget); + limb.body.SmoothRotate(angle + offset, attack.AimRotationTorque); + limb.body.SuppressSmoothRotationCalls = true; + } + } + private bool IsValidAttack(Limb attackingLimb, IEnumerable currentContexts, Entity target) { if (attackingLimb == null) { return false; } @@ -2190,11 +2197,11 @@ namespace Barotrauma if (!ActiveAttack.IsRunning) { #if SERVER - GameMain.NetworkMember.CreateEntityEvent(Character, new Character.SetAttackTargetEventData( - AttackLimb, - damageTarget, - targetLimb, - SimPosition)); + GameMain.NetworkMember.CreateEntityEvent(Character, new Character.SetAttackTargetEventData( + AttackLimb, + damageTarget, + targetLimb, + SimPosition)); #else Character.PlaySound(CharacterSound.SoundType.Attack, maxInterval: 3); #endif @@ -3599,7 +3606,10 @@ namespace Barotrauma { // We only want to check the visibility when the target is in ruins/wreck/similiar place where sneaking should be possible. // When the monsters attack the player sub, they wall hack so that they can be more aggressive. - checkVisibility = target.Entity.Submarine != null && target.Entity.Submarine == Character.Submarine && target.Entity.Submarine.TeamID == CharacterTeamType.None; + // Pets should always check the visibility, unless the pet and the target are both outside the submarine -> shouldn't target when they can't perceive (= no wall hack) + checkVisibility = + Character.IsPet && (Character.Submarine == null) != (target.Entity.Submarine == null) || + target.Entity.Submarine != null && target.Entity.Submarine == Character.Submarine && target.Entity.Submarine.TeamID == CharacterTeamType.None; } if (dist > 0) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/HumanAIController.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/HumanAIController.cs index 3ed35dd0a..a50997a87 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/HumanAIController.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/HumanAIController.cs @@ -395,6 +395,10 @@ namespace Barotrauma } objectiveManager.UpdateObjectives(deltaTime); + if (reportProblemsTimer > 0) + { + reportProblemsTimer -= deltaTime; + } if (reactTimer > 0.0f) { reactTimer -= deltaTime; @@ -407,7 +411,6 @@ namespace Barotrauma else { Character.UpdateTeam(); - if (Character.CurrentHull != null) { if (Character.IsOnPlayerTeam) @@ -425,19 +428,15 @@ namespace Barotrauma } } } - if (Character.SpeechImpediment < 100.0f) + if (reportProblemsTimer <= 0.0f) { - reportProblemsTimer -= deltaTime; - if (reportProblemsTimer <= 0.0f) + if (Character.Submarine != null && (Character.Submarine.TeamID == Character.TeamID || Character.IsEscorted) && !Character.Submarine.Info.IsWreck) { - if (Character.Submarine != null && (Character.Submarine.TeamID == Character.TeamID || Character.IsEscorted) && !Character.Submarine.Info.IsWreck) - { - ReportProblems(); - } - reportProblemsTimer = reportProblemsInterval; + ReportProblems(); } - UpdateSpeaking(); + reportProblemsTimer = reportProblemsInterval; } + UpdateSpeaking(); UnequipUnnecessaryItems(); reactTimer = GetReactionTime(); } @@ -912,7 +911,7 @@ namespace Barotrauma { Order newOrder = null; Hull targetHull = null; - bool speak = true; + bool speak = Character.SpeechImpediment < 100; if (Character.CurrentHull != null) { bool isFighting = ObjectiveManager.HasActiveObjective(); @@ -1063,17 +1062,15 @@ namespace Barotrauma private void UpdateSpeaking() { if (!Character.IsOnPlayerTeam) { return; } - + if (Character.SpeechImpediment >= 100) { return; } if (Character.Oxygen < 20.0f) { Character.Speak(TextManager.Get("DialogLowOxygen").Value, null, Rand.Range(0.5f, 5.0f), "lowoxygen".ToIdentifier(), 30.0f); } - if (Character.Bleeding > 2.0f) { Character.Speak(TextManager.Get("DialogBleeding").Value, null, Rand.Range(0.5f, 5.0f), "bleeding".ToIdentifier(), 30.0f); } - if (Character.PressureTimer > 50.0f && Character.CurrentHull?.DisplayName != null) { Character.Speak(TextManager.GetWithVariable("DialogPressure", "[roomname]", Character.CurrentHull.DisplayName, FormatCapitals.Yes).Value, null, Rand.Range(0.5f, 5.0f), "pressure".ToIdentifier(), 30.0f); @@ -1860,6 +1857,7 @@ namespace Barotrauma bool targetAdded = false; DoForEachCrewMember(caller, humanAI => { + if (caller != humanAI.Character && caller.SpeechImpediment >= 100) { return; } var objective = humanAI.ObjectiveManager.GetObjective(); if (objective != null) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRescue.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRescue.cs index 30d687a2a..7af3858b9 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRescue.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/AI/Objectives/AIObjectiveRescue.cs @@ -502,10 +502,12 @@ namespace Barotrauma public static IEnumerable GetTreatableAfflictions(Character character) { - foreach (Affliction affliction in character.CharacterHealth.GetAllAfflictions()) + var allAfflictions = character.CharacterHealth.GetAllAfflictions(); + foreach (Affliction affliction in allAfflictions) { if (affliction.Prefab.IsBuff || affliction.Strength < affliction.Prefab.TreatmentThreshold) { continue; } if (!affliction.Prefab.TreatmentSuitability.Any(kvp => kvp.Value > 0)) { continue; } + if (allAfflictions.Any(otherAffliction => affliction.Prefab.IgnoreTreatmentIfAfflictedBy.Contains(otherAffliction.Identifier))) { continue; } yield return affliction; } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/HumanoidAnimController.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/HumanoidAnimController.cs index 99b8a56dc..3a9a063ac 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/HumanoidAnimController.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Animation/HumanoidAnimController.cs @@ -1836,8 +1836,6 @@ namespace Barotrauma { heldItem.FlipX(relativeToSub: false); } - // TODO: was this added by a mistake? - //heldItem.FlipX(relativeToSub: false); } foreach (Limb limb in Limbs) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Attack.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Attack.cs index 387472cde..abc470dcd 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Attack.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Attack.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Xml.Linq; +using Barotrauma.Items.Components; namespace Barotrauma { @@ -530,7 +531,7 @@ namespace Barotrauma effect.HasTargetType(StatusEffect.TargetType.NearbyCharacters)) { targets.Clear(); - targets.AddRange(effect.GetNearbyTargets(worldPosition, targets)); + effect.AddNearbyTargets(worldPosition, targets); effect.Apply(effectType, deltaTime, targetEntity, targets); } if (effect.HasTargetType(StatusEffect.TargetType.UseTarget)) @@ -569,7 +570,15 @@ namespace Barotrauma DamageParticles(deltaTime, worldPosition); - var attackResult = targetLimb.character.ApplyAttack(attacker, worldPosition, this, deltaTime, playSound, targetLimb, penetration: Penetration); + float penetration = Penetration; + + float? penetrationValue = SourceItem?.GetComponent()?.Penetration; + if (penetrationValue.HasValue) + { + penetration += penetrationValue.Value; + } + + var attackResult = targetLimb.character.ApplyAttack(attacker, worldPosition, this, deltaTime, playSound, targetLimb, penetration); var effectType = attackResult.Damage > 0.0f ? ActionType.OnUse : ActionType.OnFailure; foreach (StatusEffect effect in statusEffects) @@ -599,7 +608,7 @@ namespace Barotrauma effect.HasTargetType(StatusEffect.TargetType.NearbyCharacters)) { targets.Clear(); - targets.AddRange(effect.GetNearbyTargets(worldPosition, targets)); + effect.AddNearbyTargets(worldPosition, targets); effect.Apply(effectType, deltaTime, targetLimb.character, targets); } if (effect.HasTargetType(StatusEffect.TargetType.UseTarget)) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Character.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Character.cs index 78d43ee78..caad557b6 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Character.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Character.cs @@ -1601,6 +1601,15 @@ namespace Barotrauma if (Info?.Job == null) { return 0.0f; } float skillLevel = Info.Job.GetSkillLevel(skillIdentifier); + if (overrideStatTypes.TryGetValue(skillIdentifier, out StatTypes statType)) + { + float skillOverride = GetStatValue(statType); + if (skillOverride > skillLevel) + { + skillLevel = skillOverride; + } + } + // apply multipliers first so that multipliers only affect base skill value foreach (Affliction affliction in CharacterHealth.GetAllAfflictions()) { @@ -1631,15 +1640,6 @@ namespace Barotrauma skillLevel += GetStatValue(GetSkillStatType(skillIdentifier)); - if (overrideStatTypes.TryGetValue(skillIdentifier, out StatTypes statType)) - { - float skillOverride = GetStatValue(statType); - if (skillOverride > skillLevel) - { - skillLevel = skillOverride; - } - } - return skillLevel; } @@ -1972,6 +1972,15 @@ namespace Barotrauma } } #endif + + if (GameMain.NetworkMember != null && GameMain.NetworkMember.IsClient && Controlled != this && IsKeyDown(InputType.Aim)) + { + if (currentAttackTarget.AttackLimb?.attack is Attack { Ranged: true } attack && AIController is EnemyAIController enemyAi) + { + enemyAi.AimRangedAttack(attack, currentAttackTarget.DamageTarget as Entity); + } + } + if (attackCoolDown > 0.0f) { attackCoolDown -= deltaTime; @@ -1982,7 +1991,7 @@ namespace Barotrauma { if ((currentAttackTarget.DamageTarget as Entity)?.Removed ?? false) { - currentAttackTarget = default(AttackTargetData); + currentAttackTarget = default; } currentAttackTarget.AttackLimb?.UpdateAttack(deltaTime, currentAttackTarget.AttackPos, currentAttackTarget.DamageTarget, out _); } @@ -2077,19 +2086,22 @@ namespace Barotrauma } } - bool CanUseItemsWhenSelected(Item item) => item == null || !item.Prefab.DisableItemUsageWhenSelected; - if (CanUseItemsWhenSelected(SelectedItem) && CanUseItemsWhenSelected(SelectedSecondaryItem)) + if (Inventory != null) { - foreach (Item item in HeldItems) + bool CanUseItemsWhenSelected(Item item) => item == null || !item.Prefab.DisableItemUsageWhenSelected; + if (CanUseItemsWhenSelected(SelectedItem) && CanUseItemsWhenSelected(SelectedSecondaryItem)) { - tryUseItem(item, deltaTime); - } - foreach (Item item in Inventory.AllItems) - { - if (item.GetComponent() is { AllowUseWhenWorn: true } && HasEquippedItem(item)) + foreach (Item item in HeldItems) { tryUseItem(item, deltaTime); } + foreach (Item item in Inventory.AllItems) + { + if (item.GetComponent() is { AllowUseWhenWorn: true } && HasEquippedItem(item)) + { + tryUseItem(item, deltaTime); + } + } } } @@ -2170,6 +2182,8 @@ namespace Barotrauma private AttackTargetData currentAttackTarget; public void SetAttackTarget(Limb attackLimb, IDamageable damageTarget, Vector2 attackPos) { + DebugConsole.NewMessage($"SetAttackTarget {this.ToString()}: " + (damageTarget?.ToString() ?? null)); + currentAttackTarget = new AttackTargetData() { AttackLimb = attackLimb, @@ -3824,7 +3838,7 @@ namespace Barotrauma return attackResult; } - public void TrySeverLimbJoints(Limb targetLimb, float severLimbsProbability, float damage, bool allowBeheading, Character attacker = null) + public void TrySeverLimbJoints(Limb targetLimb, float severLimbsProbability, float damage, bool allowBeheading, bool ignoreSeveranceProbabilityModifier = false, Character attacker = null) { if (GameMain.NetworkMember != null && GameMain.NetworkMember.IsClient) { return; } #if DEBUG @@ -3852,7 +3866,7 @@ namespace Barotrauma var referenceLimb = targetLimb.type == LimbType.Head && targetLimb.Params.ID == 0 ? joint.LimbA : joint.LimbB; if (referenceLimb != targetLimb) { continue; } float probability = severLimbsProbability; - if (!IsDead && probability < 1) + if (!IsDead && !ignoreSeveranceProbabilityModifier) { probability *= joint.Params.SeveranceProbabilityModifier; } @@ -4111,7 +4125,7 @@ namespace Barotrauma statusEffect.HasTargetType(StatusEffect.TargetType.NearbyCharacters)) { targets.Clear(); - targets.AddRange(statusEffect.GetNearbyTargets(WorldPosition, targets)); + statusEffect.AddNearbyTargets(WorldPosition, targets); statusEffect.Apply(actionType, deltaTime, this, targets); } else if (statusEffect.targetLimbs != null) @@ -4745,6 +4759,8 @@ namespace Barotrauma public bool HasJob(string identifier) => Info?.Job?.Prefab.Identifier == identifier; + public bool HasJob(Identifier identifier) => Info?.Job?.Prefab.Identifier == identifier; + public bool IsProtectedFromPressure() { return HasAbilityFlag(AbilityFlags.ImmuneToPressure) || PressureProtection >= (Level.Loaded?.GetRealWorldDepth(WorldPosition.Y) ?? 1.0f); @@ -4975,7 +4991,7 @@ namespace Barotrauma /// private readonly Dictionary wearableStatValues = new Dictionary(); - public float GetStatValue(StatTypes statType) + public float GetStatValue(StatTypes statType, bool includeSaved = true) { if (!IsHuman) { return 0f; } @@ -4988,7 +5004,7 @@ namespace Barotrauma { statValue += CharacterHealth.GetStatValue(statType); } - if (Info != null) + if (Info != null && includeSaved) { // could be optimized by instead updating the Character.cs statvalues dictionary whenever the CharacterInfo.cs values change statValue += Info.GetSavedStatValue(statType); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/CharacterInfo.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/CharacterInfo.cs index 393db009a..24a96e3fe 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/CharacterInfo.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/CharacterInfo.cs @@ -1233,10 +1233,6 @@ namespace Barotrauma int prevAmount = ExperiencePoints; var experienceGainMultiplier = new AbilityExperienceGainMultiplier(1f); - if (isMissionExperience) - { - Character?.CheckTalents(AbilityEffectType.OnGainMissionExperience, experienceGainMultiplier); - } experienceGainMultiplier.Value += Character?.GetStatValue(StatTypes.ExperienceGainMultiplier) ?? 0; amount = (int)(amount * experienceGainMultiplier.Value); @@ -1808,7 +1804,7 @@ namespace Barotrauma { if (SavedStatValues.TryGetValue(statType, out var statValues)) { - return statValues.Where(s => s.StatIdentifier == statIdentifier).Sum(v => v.StatValue); + return statValues.Where(value => ToolBox.StatIdentifierMatches(value.StatIdentifier, statIdentifier)).Sum(static v => v.StatValue); } else { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/Affliction.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/Affliction.cs index 4aebc88c4..a1a28bd20 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/Affliction.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/Affliction.cs @@ -429,7 +429,7 @@ namespace Barotrauma statusEffect.HasTargetType(StatusEffect.TargetType.NearbyCharacters)) { targets.Clear(); - targets.AddRange(statusEffect.GetNearbyTargets(characterHealth.Character.WorldPosition, targets)); + statusEffect.AddNearbyTargets(characterHealth.Character.WorldPosition, targets); statusEffect.Apply(type, deltaTime, characterHealth.Character, targets); } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionPrefab.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionPrefab.cs index 91c1998b7..93bbe63d7 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionPrefab.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/Afflictions/AfflictionPrefab.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Reflection; using System.Xml.Linq; using Barotrauma.Extensions; +using System.Collections.Immutable; namespace Barotrauma { @@ -214,7 +215,6 @@ namespace Barotrauma [Serialize("", IsPropertySaveable.No)] public Identifier DialogFlag { get; private set; } - [Serialize("", IsPropertySaveable.No)] public Identifier Tag { get; private set; } @@ -276,6 +276,47 @@ namespace Barotrauma } } + public class Description + { + public enum TargetType + { + Any, + Self, + OtherCharacter + } + + public readonly LocalizedString Text; + public readonly Identifier TextTag; + public readonly float MinStrength, MaxStrength; + public readonly TargetType Target; + + public Description(ContentXElement element, AfflictionPrefab affliction) + { + TextTag = element.GetAttributeIdentifier("textidentifier", Identifier.Empty); + if (!TextTag.IsEmpty) + { + Text = TextManager.Get(TextTag); + } + string text = element.GetAttributeString("text", string.Empty); + if (!text.IsNullOrEmpty()) + { + Text = Text?.Fallback(text) ?? text; + } + else if (TextTag.IsEmpty) + { + DebugConsole.ThrowError($"Error in affliction \"{affliction.Identifier}\" - no text defined for one of the descriptions."); + } + + MinStrength = element.GetAttributeFloat(nameof(MinStrength), 0.0f); + MaxStrength = element.GetAttributeFloat(nameof(MaxStrength), 100.0f); + if (MinStrength >= MaxStrength) + { + DebugConsole.ThrowError($"Error in affliction \"{affliction.Identifier}\" - max strength is not larger than min."); + } + Target = element.GetAttributeEnum(nameof(Target), TargetType.Any); + } + } + public class PeriodicEffect { public readonly List StatusEffects = new List(); @@ -313,7 +354,6 @@ namespace Barotrauma public static readonly PrefabCollection Prefabs = new PrefabCollection(); - private bool disposed = false; public override void Dispose() { } public static IEnumerable List => Prefabs; @@ -330,15 +370,21 @@ namespace Barotrauma //(e.g. mental health problems on head, lack of oxygen on torso...) public readonly LimbType IndicatorLimb; - public readonly LocalizedString Name, Description; + public readonly LocalizedString Name; public readonly Identifier TranslationIdentifier; public readonly bool IsBuff; + public readonly bool AffectMachines; public readonly bool HealableInMedicalClinic; public readonly float HealCostMultiplier; public readonly int BaseHealCost; public readonly LocalizedString CauseOfDeathDescription, SelfCauseOfDeathDescription; + private readonly LocalizedString defaultDescription; + public readonly ImmutableList Descriptions; + + public readonly bool HideIconAfterDelay; + //how high the strength has to be for the affliction to take affect public readonly float ActivationThreshold = 0.0f; //how high the strength has to be for the affliction icon to be shown in the UI @@ -355,6 +401,11 @@ namespace Barotrauma //how strong the affliction needs to be before bots attempt to treat it public readonly float TreatmentThreshold = 5.0f; + /// + /// Bots will not try to treat the affliction if the character has any of these afflictions + /// + public ImmutableHashSet IgnoreTreatmentIfAfflictedBy; + /// /// The affliction is automatically removed after this time. 0 = unlimited /// @@ -413,13 +464,14 @@ namespace Barotrauma { Name = Name.Fallback(fallbackName); } - Description = TextManager.Get($"AfflictionDescription.{TranslationIdentifier}"); + defaultDescription = TextManager.Get($"AfflictionDescription.{TranslationIdentifier}"); string fallbackDescription = element.GetAttributeString("description", ""); if (!string.IsNullOrEmpty(fallbackDescription)) { - Description = Description.Fallback(fallbackDescription); + defaultDescription = defaultDescription.Fallback(fallbackDescription); } - IsBuff = element.GetAttributeBool("isbuff", false); + IsBuff = element.GetAttributeBool(nameof(IsBuff), false); + AffectMachines = element.GetAttributeBool(nameof(AffectMachines), true); HealableInMedicalClinic = element.GetAttributeBool("healableinmedicalclinic", !IsBuff && @@ -428,6 +480,8 @@ namespace Barotrauma HealCostMultiplier = element.GetAttributeFloat(nameof(HealCostMultiplier), 1f); BaseHealCost = element.GetAttributeInt(nameof(BaseHealCost), 0); + IgnoreTreatmentIfAfflictedBy = element.GetAttributeIdentifierArray(nameof(IgnoreTreatmentIfAfflictedBy), Array.Empty()).ToImmutableHashSet(); + Duration = element.GetAttributeFloat(nameof(Duration), 0.0f); if (element.GetAttribute("nameidentifier") != null) @@ -445,30 +499,33 @@ namespace Barotrauma } } - ActivationThreshold = element.GetAttributeFloat("activationthreshold", 0.0f); - ShowIconThreshold = element.GetAttributeFloat("showiconthreshold", Math.Max(ActivationThreshold, 0.05f)); - ShowIconToOthersThreshold = element.GetAttributeFloat("showicontoothersthreshold", ShowIconThreshold); - MaxStrength = element.GetAttributeFloat("maxstrength", 100.0f); - GrainBurst = element.GetAttributeFloat(nameof(GrainBurst).ToLowerInvariant(), 0.0f); + HideIconAfterDelay = element.GetAttributeBool(nameof(HideIconAfterDelay), false); - ShowInHealthScannerThreshold = element.GetAttributeFloat("showinhealthscannerthreshold", + ActivationThreshold = element.GetAttributeFloat(nameof(ActivationThreshold), 0.0f); + ShowIconThreshold = element.GetAttributeFloat(nameof(ShowIconThreshold), Math.Max(ActivationThreshold, 0.05f)); + ShowIconToOthersThreshold = element.GetAttributeFloat(nameof(ShowIconToOthersThreshold), ShowIconThreshold); + MaxStrength = element.GetAttributeFloat(nameof(MaxStrength), 100.0f); + GrainBurst = element.GetAttributeFloat(nameof(GrainBurst), 0.0f); + + ShowInHealthScannerThreshold = element.GetAttributeFloat(nameof(ShowInHealthScannerThreshold), Math.Max(ActivationThreshold, AfflictionType == "talentbuff" ? float.MaxValue : ShowIconToOthersThreshold)); - TreatmentThreshold = element.GetAttributeFloat("treatmentthreshold", Math.Max(ActivationThreshold, 5.0f)); + TreatmentThreshold = element.GetAttributeFloat(nameof(TreatmentThreshold), Math.Max(ActivationThreshold, 5.0f)); - DamageOverlayAlpha = element.GetAttributeFloat("damageoverlayalpha", 0.0f); - BurnOverlayAlpha = element.GetAttributeFloat("burnoverlayalpha", 0.0f); + DamageOverlayAlpha = element.GetAttributeFloat(nameof(DamageOverlayAlpha), 0.0f); + BurnOverlayAlpha = element.GetAttributeFloat(nameof(BurnOverlayAlpha), 0.0f); - KarmaChangeOnApplied = element.GetAttributeFloat("karmachangeonapplied", 0.0f); + KarmaChangeOnApplied = element.GetAttributeFloat(nameof(KarmaChangeOnApplied), 0.0f); CauseOfDeathDescription = TextManager.Get($"AfflictionCauseOfDeath.{TranslationIdentifier}").Fallback(element.GetAttributeString("causeofdeathdescription", "")); SelfCauseOfDeathDescription = TextManager.Get($"AfflictionCauseOfDeathSelf.{TranslationIdentifier}").Fallback(element.GetAttributeString("selfcauseofdeathdescription", "")); - IconColors = element.GetAttributeColorArray("iconcolors", null); - AfflictionOverlayAlphaIsLinear = element.GetAttributeBool("afflictionoverlayalphaislinear", false); - AchievementOnRemoved = element.GetAttributeIdentifier("achievementonremoved", ""); + IconColors = element.GetAttributeColorArray(nameof(IconColors), null); + AfflictionOverlayAlphaIsLinear = element.GetAttributeBool(nameof(AfflictionOverlayAlphaIsLinear), false); + AchievementOnRemoved = element.GetAttributeIdentifier(nameof(AchievementOnRemoved), ""); ResetBetweenRounds = element.GetAttributeBool("resetbetweenrounds", false); + List descriptions = new List(); foreach (var subElement in element.Elements()) { switch (subElement.Name.ToString().ToLowerInvariant()) @@ -485,15 +542,38 @@ namespace Barotrauma case "effect": case "periodiceffect": break; + case "description": + descriptions.Add(new Description(subElement, this)); + break; default: DebugConsole.AddWarning($"Unrecognized element in affliction \"{Identifier}\" ({subElement.Name})"); break; } } + Descriptions = descriptions.ToImmutableList(); constructor = type.GetConstructor(new[] { typeof(AfflictionPrefab), typeof(float) }); } + public LocalizedString GetDescription(float strength, Description.TargetType targetType) + { + foreach (var description in Descriptions) + { + if (strength < description.MinStrength || strength > description.MaxStrength) { continue; } + switch (targetType) + { + case Description.TargetType.Self: + if (description.Target == Description.TargetType.OtherCharacter) { continue; } + break; + case Description.TargetType.OtherCharacter: + if (description.Target == Description.TargetType.Self) { continue; } + break; + } + return description.Text; + } + return defaultDescription; + } + public static void LoadAllEffects() { Prefabs.ForEach(p => p.LoadEffects()); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/CharacterHealth.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/CharacterHealth.cs index b7825be29..a4774e7a0 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/CharacterHealth.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/CharacterHealth.cs @@ -104,7 +104,7 @@ namespace Barotrauma public bool DoesBleed { - get => Character.Params.Health.DoesBleed; + get => Character.Params.Health.DoesBleed && !Character.Params.IsMachine; private set => Character.Params.Health.DoesBleed = value; } @@ -550,7 +550,7 @@ namespace Barotrauma amount -= reduceAmount; if (treatmentAction != null) { - if (treatmentAction.Value == ActionType.OnUse) + if (treatmentAction.Value == ActionType.OnUse || treatmentAction.Value == ActionType.OnSuccess) { matchingAffliction.AppliedAsSuccessfulTreatmentTime = Timing.TotalTime; } @@ -690,6 +690,7 @@ namespace Barotrauma private void AddLimbAffliction(LimbHealth limbHealth, Affliction newAffliction, bool allowStacking = true) { + if (Character.Params.IsMachine && !newAffliction.Prefab.AffectMachines) { return; } if (!DoesBleed && newAffliction is AfflictionBleeding) { return; } if (!Character.NeedsOxygen && newAffliction.Prefab == AfflictionPrefab.OxygenLow) { return; } if (Character.Params.Health.StunImmunity && newAffliction.Prefab.AfflictionType == "stun") { return; } @@ -1076,6 +1077,7 @@ namespace Barotrauma } if (strength <= affliction.Prefab.TreatmentThreshold) { continue; } + if (afflictions.Any(otherAffliction => affliction.Prefab.IgnoreTreatmentIfAfflictedBy.Contains(otherAffliction.Key.Identifier))) { continue; } if (ignoreHiddenAfflictions) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/DamageModifier.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/DamageModifier.cs index a71d1e73e..03fb3ad7d 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/DamageModifier.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Health/DamageModifier.cs @@ -79,27 +79,35 @@ namespace Barotrauma public ref readonly ImmutableArray ParsedAfflictionTypes => ref parsedAfflictionTypes; - public DamageModifier(XElement element, string parentDebugName) + public DamageModifier(XElement element, string parentDebugName, bool checkErrors = true) { Deserialize(element); if (element.Attribute("afflictionnames") != null) { DebugConsole.ThrowError("Error in DamageModifier config (" + parentDebugName + ") - define afflictions using identifiers or types instead of names."); } - foreach (var afflictionType in parsedAfflictionTypes) + if (checkErrors) { - if (!AfflictionPrefab.Prefabs.Any(p => p.AfflictionType == afflictionType)) + foreach (var afflictionType in parsedAfflictionTypes) { - createWarningOrError($"Potentially invalid damage modifier in \"{parentDebugName}\". Could not find any afflictions of the type \"{afflictionType}\". Did you mean to use an affliction identifier instead?"); - } - } - foreach (var afflictionIdentifier in parsedAfflictionIdentifiers) - { - if (!AfflictionPrefab.Prefabs.ContainsKey(afflictionIdentifier)) - { - createWarningOrError($"Potentially invalid damage modifier in \"{parentDebugName}\". Could not find any afflictions with the identifier \"{afflictionIdentifier}\". Did you mean to use an affliction type instead?"); + if (!AfflictionPrefab.Prefabs.Any(p => p.AfflictionType == afflictionType)) + { + createWarningOrError($"Potentially invalid damage modifier in \"{parentDebugName}\". Could not find any afflictions of the type \"{afflictionType}\". Did you mean to use an affliction identifier instead?"); + } + } + foreach (var afflictionIdentifier in parsedAfflictionIdentifiers) + { + if (!AfflictionPrefab.Prefabs.ContainsKey(afflictionIdentifier)) + { + createWarningOrError($"Potentially invalid damage modifier in \"{parentDebugName}\". Could not find any afflictions with the identifier \"{afflictionIdentifier}\". Did you mean to use an affliction type instead?"); + } + } + if (!parsedAfflictionTypes.Any() && !parsedAfflictionIdentifiers.Any()) + { + createWarningOrError($"Potentially invalid damage modifier in \"{parentDebugName}\". Neither affliction types of identifiers defined."); } } + static void createWarningOrError(string msg) { #if DEBUG diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Limb.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Limb.cs index 03afe476f..b8bc40ecf 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Limb.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Limb.cs @@ -1196,7 +1196,7 @@ namespace Barotrauma statusEffect.HasTargetType(StatusEffect.TargetType.NearbyCharacters)) { targets.Clear(); - targets.AddRange(statusEffect.GetNearbyTargets(WorldPosition, targets)); + statusEffect.AddNearbyTargets(WorldPosition, targets); statusEffect.Apply(actionType, deltaTime, character, targets); } else diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Params/CharacterParams.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Params/CharacterParams.cs index b2323c54d..b29d6c2a3 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Params/CharacterParams.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Params/CharacterParams.cs @@ -50,6 +50,9 @@ namespace Barotrauma [Serialize(false, IsPropertySaveable.Yes, description: "Can the creature live without water or does it die on dry land?"), Editable] public bool NeedsWater { get; set; } + [Serialize(false, IsPropertySaveable.Yes, description: "Is this creature an artificial creature, like robot or machine that shouldn't be affected by afflictions that affect only organic creatures? Overrides DoesBleed."), Editable] + public bool IsMachine { get; set; } + [Serialize(false, IsPropertySaveable.No), Editable] public bool CanSpeak { get; set; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionLocation.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionLocation.cs index bfdb89205..c3d2e872e 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionLocation.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionLocation.cs @@ -27,7 +27,8 @@ namespace Barotrauma.Abilities { if (isPositiveReputation) { - if (abilityLocation.Location.Reputation.Faction.Reputation.Value <= 0) { return false; } + if (abilityLocation.Location?.Reputation is not { } reputation) { return false; } + if (reputation.Value <= 0) { return false; } } if (locationIdentifiers.Any()) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionMission.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionMission.cs index fd1d55682..4ed81b82f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionMission.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionData/AbilityConditionMission.cs @@ -33,13 +33,20 @@ namespace Barotrauma.Abilities { if (abilityObject is IAbilityMission { Mission: { } mission }) { - if (isAffiliated && GameMain.GameSession?.Campaign?.Factions.MaxBy(static f => f.Reputation.Value) is { } highestFaction) + if (isAffiliated) { - if (highestFaction.Reputation.Value < 0 || !mission.ReputationRewards.ContainsKey(highestFaction.Reputation.Identifier)) + if (GameMain.GameSession?.Campaign?.Factions is not { } factions) { return false; } + + // FIXME there's probably a better way to check the faction affiliated with the mission later + foreach (Identifier factionIdentifier in mission.ReputationRewards.Keys) { - return false; + if (factions.Where(faction => factionIdentifier == faction.Prefab.Identifier).Any(static faction => faction.GetPlayerAffiliationStatus() != FactionAffiliation.Affiliated)) + { + return false; + } } } + return missionType.Contains(mission.Prefab.Type); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionHasItem.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionHasItem.cs index e4458d78b..8b20847b1 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionHasItem.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionHasItem.cs @@ -1,9 +1,5 @@ -using System; -using Barotrauma.Items.Components; -using System.Collections.Generic; -using System.Linq; -using System.Xml.Linq; -using Barotrauma.Extensions; +using Barotrauma.Extensions; +using System; namespace Barotrauma.Abilities { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionNearbyCharacterCount.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionNearbyCharacterCount.cs index e8b084f07..5d0acdbf0 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionNearbyCharacterCount.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/AbilityConditionals/AbilityConditionDataless/AbilityConditionNearbyCharacterCount.cs @@ -24,7 +24,7 @@ internal sealed class AbilityConditionNearbyCharacterCount : AbilityConditionDat foreach (Character otherCharacter in Character.CharacterList) { if (character.Submarine != otherCharacter.Submarine) { continue; } - if (!IsViableTarget(targetTypes, otherCharacter)) { return false; } + if (!IsViableTarget(targetTypes, otherCharacter)) { continue; } if (Vector2.DistanceSquared(character.WorldPosition, otherCharacter.WorldPosition) < distance * distance) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityApplyStatusEffects.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityApplyStatusEffects.cs index d408fbc83..969c9c5bd 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityApplyStatusEffects.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityApplyStatusEffects.cs @@ -50,7 +50,7 @@ namespace Barotrauma.Abilities else if (statusEffect.HasTargetType(StatusEffect.TargetType.NearbyCharacters)) { targets.Clear(); - targets.AddRange(statusEffect.GetNearbyTargets(targetCharacter.WorldPosition, targets)); + statusEffect.AddNearbyTargets(targetCharacter.WorldPosition, targets); if (!nearbyCharactersAppliesToSelf) { targets.RemoveAll(c => c == Character); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGiveItemStatToTags.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGiveItemStatToTags.cs index 707663745..1b4f880f8 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGiveItemStatToTags.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGiveItemStatToTags.cs @@ -27,6 +27,8 @@ namespace Barotrauma.Abilities protected override void ApplyEffect() { + if (Character?.Submarine is null) { return; } + foreach (Item item in Character.Submarine.GetItems(true)) { if (item.HasTag(tags) || tags.Contains(item.Prefab.Identifier)) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGiveTalentPointsToAllies.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGiveTalentPointsToAllies.cs new file mode 100644 index 000000000..130b5b988 --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityGiveTalentPointsToAllies.cs @@ -0,0 +1,25 @@ +#nullable enable + +namespace Barotrauma.Abilities +{ + internal sealed class CharacterAbilityGiveTalentPointsToAllies : CharacterAbility + { + private readonly int amount; + + public CharacterAbilityGiveTalentPointsToAllies(CharacterAbilityGroup characterAbilityGroup, ContentXElement abilityElement) : base(characterAbilityGroup, abilityElement) + { + amount = abilityElement.GetAttributeInt("amount", 0); + } + + public override void InitializeAbility(bool addingFirstTime) + { + if (!addingFirstTime) { return; } + + foreach (Character character in GameSession.GetSessionCrewCharacters(CharacterType.Both)) + { + if (character.Info is null) { return; } + character.Info.AdditionalTalentPoints += amount; + } + } + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityModifyAttackData.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityModifyAttackData.cs index a6141b79f..686aa6d48 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityModifyAttackData.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilityModifyAttackData.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using System.Xml.Linq; namespace Barotrauma.Abilities { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilitySetMetadataInt.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilitySetMetadataInt.cs index d24a201f3..a8da25c74 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilitySetMetadataInt.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CharacterAbilitySetMetadataInt.cs @@ -13,6 +13,11 @@ namespace Barotrauma.Abilities value = abilityElement.GetAttributeInt("value", 0); } + public override void InitializeAbility(bool addingFirstTime) + { + ApplyEffect(); + } + protected override void ApplyEffect() { if (identifier == Identifier.Empty) { return; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CustomAbilities/CharacterAbilityUnlockApprenticeshipTalentTree.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CustomAbilities/CharacterAbilityUnlockApprenticeshipTalentTree.cs index 9994e51e6..96bdd50a9 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CustomAbilities/CharacterAbilityUnlockApprenticeshipTalentTree.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/Abilities/CustomAbilities/CharacterAbilityUnlockApprenticeshipTalentTree.cs @@ -12,6 +12,8 @@ namespace Barotrauma.Abilities public override void InitializeAbility(bool addingFirstTime) { + if (!addingFirstTime) { return; } + JobPrefab? apprentice = CharacterAbilityApplyStatusEffectsToApprenticeship.GetApprenticeJob(Character, JobPrefab.Prefabs.ToImmutableHashSet()); if (apprentice is null) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/AbilityGroups/CharacterAbilityGroupInterval.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/AbilityGroups/CharacterAbilityGroupInterval.cs index 18725da29..cf1100db6 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/AbilityGroups/CharacterAbilityGroupInterval.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/AbilityGroups/CharacterAbilityGroupInterval.cs @@ -27,39 +27,40 @@ namespace Barotrauma.Abilities TimeSinceLastUpdate += deltaTime; if (TimeSinceLastUpdate < interval) { return; } - bool shouldApplyDelayedEffect; - bool conditionsDidntMatch; + bool conditionsMatched; if (AllConditionsMatched()) { effectDelayTimer += TimeSinceLastUpdate; - shouldApplyDelayedEffect = effectDelayTimer >= effectDelay; - conditionsDidntMatch = false; + bool shouldApplyDelayedEffect = effectDelayTimer >= effectDelay; + conditionsMatched = shouldApplyDelayedEffect; } else { effectDelayTimer = 0f; - shouldApplyDelayedEffect = false; - conditionsDidntMatch = true; + conditionsMatched = false; } bool hasFallbacks = fallbackAbilities.Count > 0; List abilitiesToRun = - conditionsDidntMatch && hasFallbacks + !conditionsMatched && hasFallbacks ? fallbackAbilities : characterAbilities; + if (hasFallbacks) + { + conditionsMatched = true; + } + foreach (var characterAbility in abilitiesToRun) { if (!characterAbility.IsViable()) { continue; } - characterAbility.UpdateCharacterAbility( - shouldApplyDelayedEffect || conditionsDidntMatch, - TimeSinceLastUpdate); + characterAbility.UpdateCharacterAbility(conditionsMatched, TimeSinceLastUpdate); } - if (shouldApplyDelayedEffect || (conditionsDidntMatch && hasFallbacks)) + if (conditionsMatched) { timesTriggered++; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/TalentTree.cs b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/TalentTree.cs index 396244f9a..2702f649f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/TalentTree.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Characters/Talents/TalentTree.cs @@ -7,7 +7,7 @@ namespace Barotrauma { internal sealed class TalentTree : Prefab { - public enum TalentTreeStageState + public enum TalentStages { Invalid, Locked, @@ -72,30 +72,30 @@ namespace Barotrauma // i hate this function - markus // me too - joonas - public static TalentTreeStageState GetTalentOptionStageState(Character character, Identifier subTreeIdentifier, int index, IReadOnlyCollection selectedTalents) + public static TalentStages GetTalentOptionStageState(Character character, Identifier subTreeIdentifier, int index, IReadOnlyCollection selectedTalents) { - if (character?.Info?.Job.Prefab is null) { return TalentTreeStageState.Invalid; } + if (character?.Info?.Job.Prefab is null) { return TalentStages.Invalid; } - if (!JobTalentTrees.TryGet(character.Info.Job.Prefab.Identifier, out TalentTree talentTree)) { return TalentTreeStageState.Invalid; } + if (!JobTalentTrees.TryGet(character.Info.Job.Prefab.Identifier, out TalentTree talentTree)) { return TalentStages.Invalid; } TalentSubTree subTree = talentTree!.TalentSubTrees.FirstOrDefault(tst => tst.Identifier == subTreeIdentifier); - if (subTree is null) { return TalentTreeStageState.Invalid; } + if (subTree is null) { return TalentStages.Invalid; } if (!TalentTreeMeetsRequirements(talentTree, subTree, selectedTalents)) { - return TalentTreeStageState.Locked; + return TalentStages.Locked; } TalentOption targetTalentOption = subTree.TalentOptionStages[index]; if (targetTalentOption.HasEnoughTalents(character.Info)) { - return TalentTreeStageState.Unlocked; + return TalentStages.Unlocked; } if (targetTalentOption.HasSelectedTalent(selectedTalents)) { - return TalentTreeStageState.Highlighted; + return TalentStages.Highlighted; } bool hasTalentInLastTier = true; @@ -111,17 +111,17 @@ namespace Barotrauma if (!hasTalentInLastTier) { - return TalentTreeStageState.Locked; + return TalentStages.Locked; } bool hasPointsForNewTalent = character.Info.GetTotalTalentPoints() - selectedTalents.Count > 0; if (hasPointsForNewTalent) { - return isLastTalentPurchased ? TalentTreeStageState.Highlighted : TalentTreeStageState.Available; + return isLastTalentPurchased ? TalentStages.Highlighted : TalentStages.Available; } - return TalentTreeStageState.Locked; + return TalentStages.Locked; } @@ -207,7 +207,7 @@ namespace Barotrauma { nameIdentifier = $"talenttree.{Identifier}"; } - DisplayName = TextManager.Get($"talenttree.{nameIdentifier}").Fallback(Identifier.Value); + DisplayName = TextManager.Get(nameIdentifier).Fallback(Identifier.Value); Type = subTreeElement.GetAttributeEnum("type", TalentTreeType.Specialization); RequiredTrees = subTreeElement.GetAttributeIdentifierImmutableHashSet("requires", ImmutableHashSet.Empty); BlockedTrees = subTreeElement.GetAttributeIdentifierImmutableHashSet("blocks", ImmutableHashSet.Empty); @@ -234,7 +234,7 @@ namespace Barotrauma /// When specified the talent option will show talent with this identifier /// and clicking on it will expand the talent option to show the talents /// - public readonly Option ShowcaseTalent; + public readonly Dictionary> ShowCaseTalents = new Dictionary>(); public bool HasEnoughTalents(CharacterInfo character) => CountMatchingTalents(character.UnlockedTalents) >= MaxChosenTalents; public bool HasEnoughTalents(IReadOnlyCollection selectedTalents) => CountMatchingTalents(selectedTalents) >= MaxChosenTalents; @@ -269,19 +269,30 @@ namespace Barotrauma { MaxChosenTalents = talentOptionsElement.GetAttributeInt("maxchosentalents", 1); - Identifier showcaseTalent = talentOptionsElement.GetAttributeIdentifier("showcasetalent", Identifier.Empty); - ShowcaseTalent = !showcaseTalent.IsEmpty - ? Option.Some(showcaseTalent) - : Option.None(); + HashSet identifiers = new HashSet(); - var talentIdentifiers = new HashSet(); - foreach (var talentOptionElement in talentOptionsElement.GetChildElements("talentoption")) + foreach (ContentXElement talentOptionElement in talentOptionsElement.Elements()) { - Identifier identifier = talentOptionElement.GetAttributeIdentifier("identifier", Identifier.Empty); - talentIdentifiers.Add(identifier); + Identifier elementName = talentOptionElement.Name.ToIdentifier(); + if (elementName == "talentoption") + { + identifiers.Add(talentOptionElement.GetAttributeIdentifier("identifier", Identifier.Empty)); + } + else if (elementName == "showcasetalent") + { + Identifier showCaseIdentifier = talentOptionElement.GetAttributeIdentifier("identifier", Identifier.Empty); + HashSet showCaseTalentIdentifiers = new HashSet(); + foreach (ContentXElement subElement in talentOptionElement.Elements()) + { + Identifier identifier = subElement.GetAttributeIdentifier("identifier", Identifier.Empty); + showCaseTalentIdentifiers.Add(identifier); + identifiers.Add(identifier); + } + ShowCaseTalents.Add(showCaseIdentifier, showCaseTalentIdentifiers.ToImmutableHashSet()); + } } - this.talentIdentifiers = talentIdentifiers.ToImmutableHashSet(); + talentIdentifiers = identifiers.ToImmutableHashSet(); } } } \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/ContentManagement/ContentPackage/ContentPackage.cs b/Barotrauma/BarotraumaShared/SharedSource/ContentManagement/ContentPackage/ContentPackage.cs index d99d29b57..1e2dccfad 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/ContentManagement/ContentPackage/ContentPackage.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/ContentManagement/ContentPackage/ContentPackage.cs @@ -18,7 +18,7 @@ namespace Barotrauma public const string LocalModsDir = "LocalMods"; public static readonly string WorkshopModsDir = Barotrauma.IO.Path.Combine( - SaveUtil.SaveFolder, + SaveUtil.DefaultSaveFolder, "WorkshopMods", "Installed"); diff --git a/Barotrauma/BarotraumaShared/SharedSource/ContentManagement/Identifier.cs b/Barotrauma/BarotraumaShared/SharedSource/ContentManagement/Identifier.cs index 824924101..7fb3453ce 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/ContentManagement/Identifier.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/ContentManagement/Identifier.cs @@ -125,6 +125,7 @@ namespace Barotrauma internal int IndexOf(char c) => Value.IndexOf(c); internal Identifier this[Range range] => Value[range].ToIdentifier(); + internal Char this[int i] => Value[i]; } public static class IdentifierExtensions diff --git a/Barotrauma/BarotraumaShared/SharedSource/DebugConsole.cs b/Barotrauma/BarotraumaShared/SharedSource/DebugConsole.cs index 050230110..7425edd16 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/DebugConsole.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/DebugConsole.cs @@ -2199,7 +2199,7 @@ namespace Barotrauma //Dont do a thing, random is basically Human points anyways - its in the help description. break; default: - var matchingCharacter = FindMatchingCharacter(args.Skip(1).ToArray()); + var matchingCharacter = FindMatchingCharacter(args.Skip(1).Take(1).ToArray()); if (matchingCharacter != null){ spawnInventory = matchingCharacter.Inventory; } break; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Enums.cs b/Barotrauma/BarotraumaShared/SharedSource/Enums.cs index f23d4a02c..2eafaf60e 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Enums.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Enums.cs @@ -154,6 +154,7 @@ namespace Barotrauma BallastFloraDamageMultiplier, HoldBreathMultiplier, Apprenticeship, + Affiliation, CPRBoost } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/CheckItemAction.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/CheckItemAction.cs index 9413193d1..4269be922 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/CheckItemAction.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/CheckItemAction.cs @@ -25,6 +25,9 @@ namespace Barotrauma [Serialize(false, IsPropertySaveable.Yes)] public bool RequireEquipped { get; set; } + [Serialize(true, IsPropertySaveable.Yes)] + public bool Recursive { get; set; } + [Serialize(-1, IsPropertySaveable.Yes)] public int ItemContainerIndex { get; set; } @@ -97,7 +100,7 @@ namespace Barotrauma { if (inventory == null) { return false; } int count = 0; - foreach (Item item in inventory.FindAllItems(it => itemTags.Any(it.HasTag) || itemIdentifierSplit.Contains(it.Prefab.Identifier))) + foreach (Item item in inventory.FindAllItems(it => itemTags.Any(it.HasTag) || itemIdentifierSplit.Contains(it.Prefab.Identifier), recursive: Recursive)) { if (!ConditionalsMatch(item, character)) { continue; } count++; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/CheckMissionAction.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/CheckMissionAction.cs new file mode 100644 index 000000000..530a63429 --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/CheckMissionAction.cs @@ -0,0 +1,58 @@ +using System; +using System.Linq; + +namespace Barotrauma; + +class CheckMissionAction : BinaryOptionAction +{ + public enum MissionType + { + Current, + Selected, + Available + } + + [Serialize(MissionType.Current, IsPropertySaveable.Yes)] + public MissionType Type { get; set; } + + [Serialize("", IsPropertySaveable.Yes)] + public Identifier MissionIdentifier { get; set; } + + [Serialize("", IsPropertySaveable.Yes)] + public Identifier MissionTag { get; set; } + + [Serialize(1, IsPropertySaveable.Yes)] + public int MissionCount { get; set; } + + public CheckMissionAction(ScriptedEvent parentEvent, ContentXElement element) : base(parentEvent, element) + { + MissionCount = Math.Max(MissionCount, 0); + } + + protected override bool? DetermineSuccess() + { + var missions = Type switch + { + MissionType.Current => GameMain.GameSession?.Missions, + MissionType.Selected => GameMain.GameSession?.Campaign?.Missions, + MissionType.Available => GameMain.GameSession?.Map?.CurrentLocation?.AvailableMissions, + _ => null + }; + if (missions is not null) + { + if (!MissionIdentifier.IsEmpty) + { + return missions.Any(m => m.Prefab.Identifier == MissionIdentifier); + } + else if (!MissionTag.IsEmpty) + { + return missions.Count(m => m.Prefab.Tags.Contains(MissionTag.Value)) >= MissionCount; + } + else + { + return missions.Count() >= MissionCount; + } + } + return MissionIdentifier.IsEmpty && MissionTag.IsEmpty && MissionCount == 0; + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/CheckObjectiveAction.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/CheckObjectiveAction.cs new file mode 100644 index 000000000..15e5e90a9 --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/CheckObjectiveAction.cs @@ -0,0 +1,15 @@ +namespace Barotrauma; + +partial class CheckObjectiveAction : BinaryOptionAction +{ + public CheckObjectiveAction(ScriptedEvent parentEvent, ContentXElement element) : base(parentEvent, element) { } + + protected override bool? DetermineSuccess() + { + bool success = false; + DetermineSuccessProjSpecific(ref success); + return success; + } + + partial void DetermineSuccessProjSpecific(ref bool success); +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/CheckOrderAction.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/CheckOrderAction.cs index 6723d3abb..bb8b8e44d 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/CheckOrderAction.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/CheckOrderAction.cs @@ -1,7 +1,15 @@ +using Barotrauma.Extensions; + namespace Barotrauma { class CheckOrderAction : BinaryOptionAction { + public enum OrderPriority + { + Top, + Any + } + [Serialize("", IsPropertySaveable.Yes)] public Identifier TargetTag { get; set; } @@ -14,35 +22,58 @@ namespace Barotrauma [Serialize("", IsPropertySaveable.Yes)] public Identifier OrderTargetTag { get; set; } + [Serialize(OrderPriority.Top, IsPropertySaveable.Yes)] + public OrderPriority Priority { get; set; } + public CheckOrderAction(ScriptedEvent parentEvent, ContentXElement element) : base(parentEvent, element) { } protected override bool? DetermineSuccess() { - Character targetCharacter = null; - if (!TargetTag.IsEmpty) + var targetCharacters = ParentEvent.GetTargets(TargetTag); + if (targetCharacters.None()) { - foreach (var t in ParentEvent.GetTargets(TargetTag)) - { - if (t is Character c) - { - targetCharacter = c; - break; - } - } - } - if (targetCharacter == null) - { - DebugConsole.LogError($"CheckConditionalAction error: {GetEventName()} uses a CheckOrderAction but no valid target character was found for tag \"{TargetTag}\"! This will cause the check to automatically fail."); + DebugConsole.LogError($"CheckConditionalAction error: {GetEventName()} uses a CheckOrderAction but no valid target characters were found for tag \"{TargetTag}\"! This will cause the check to automatically fail."); return false; } - var currentOrderInfo = targetCharacter.GetCurrentOrderWithTopPriority(); - if (currentOrderInfo?.Identifier == OrderIdentifier) + foreach (var t in targetCharacters) { - if (!OrderTargetTag.IsEmpty) + if (t is not Character c) { - if (currentOrderInfo.TargetEntity is not Item targetItem || !targetItem.HasTag(OrderTargetTag)) { return false; } + continue; + } + if (Priority == OrderPriority.Top) + { + if (c.GetCurrentOrderWithTopPriority() is Order topPrioOrder && IsMatch(topPrioOrder)) + { + return true; + } + } + else if (Priority == OrderPriority.Any) + { + foreach (var order in c.CurrentOrders) + { + if (IsMatch(order)) + { + return true; + } + } + } + + bool IsMatch(Order order) + { + if (order?.Identifier == OrderIdentifier) + { + if (!OrderTargetTag.IsEmpty && (order.TargetEntity is not Item targetItem || !targetItem.HasTag(OrderTargetTag))) + { + return false; + } + if (OrderOption.IsEmpty || order?.Option == OrderOption) + { + return true; + } + } + return false; } - return OrderOption.IsEmpty || currentOrderInfo?.Option == OrderOption; } return false; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/CheckPurchasedItemsAction.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/CheckPurchasedItemsAction.cs new file mode 100644 index 000000000..b0ac35616 --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/CheckPurchasedItemsAction.cs @@ -0,0 +1,87 @@ +using System; +using System.Linq; + +namespace Barotrauma; + +class CheckPurchasedItemsAction : BinaryOptionAction +{ + public enum TransactionType + { + Purchased, + Sold + } + + [Serialize(TransactionType.Purchased, IsPropertySaveable.Yes)] + public TransactionType Type { get; set; } + + [Serialize("", IsPropertySaveable.Yes)] + public Identifier ItemIdentifier { get; set; } + + [Serialize("", IsPropertySaveable.Yes)] + public Identifier ItemTag { get; set; } + + [Serialize(1, IsPropertySaveable.Yes)] + public int MinCount { get; set; } + + public CheckPurchasedItemsAction(ScriptedEvent parentEvent, ContentXElement element) : base(parentEvent, element) + { + MinCount = Math.Max(MinCount, 1); + } + + protected override bool? DetermineSuccess() + { + if (ItemIdentifier.IsEmpty && ItemTag.IsEmpty) + { + return false; + } + if (GameMain.GameSession?.Campaign?.CargoManager is not CargoManager cargoManager) + { + return false; + } + if (Type == TransactionType.Purchased) + { + int totalPurchased = 0; + foreach ((Identifier id, var items) in cargoManager.PurchasedItems) + { + if (!ItemIdentifier.IsEmpty) + { + totalPurchased += items.Find(i => i.ItemPrefabIdentifier == ItemIdentifier)?.Quantity ?? 0; + } + else if (!ItemTag.IsEmpty) + { + foreach (var item in items) + { + if (item.ItemPrefab.Tags.Contains(ItemTag)) + { + totalPurchased += item.Quantity; + } + } + } + if (totalPurchased >= MinCount) + { + return true; + } + } + } + else + { + int totalSold = 0; + foreach ((Identifier id, var items) in cargoManager.SoldItems) + { + if (!ItemIdentifier.IsEmpty) + { + totalSold += items.Count(i => i.ItemPrefab.Identifier == ItemIdentifier); + } + else if (!ItemTag.IsEmpty) + { + totalSold += items.Count(i => i.ItemPrefab.Tags.Contains(ItemTag)); + } + if (totalSold >= MinCount) + { + return true; + } + } + } + return false; + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/ConversationAction.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/ConversationAction.cs index a438db9a5..1c5c8f0b5 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/ConversationAction.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/ConversationAction.cs @@ -59,7 +59,10 @@ namespace Barotrauma [Serialize(false, IsPropertySaveable.Yes)] public bool ContinueConversation { get; set; } - public Character speaker + [Serialize(false, IsPropertySaveable.Yes)] + public bool IgnoreInterruptDistance { get; set; } + + public Character Speaker { get; private set; @@ -124,7 +127,7 @@ namespace Barotrauma #else foreach (Client c in GameMain.Server.ConnectedClients) { - if (c.InGame && c.Character != null) { ServerWrite(speaker, c, interrupt); } + if (c.InGame && c.Character != null) { ServerWrite(Speaker, c, interrupt); } } #endif ResetSpeaker(); @@ -160,7 +163,7 @@ namespace Barotrauma selectedOption = -1; interrupt = false; dialogOpened = false; - speaker = null; + Speaker = null; } public override bool SetGoToTarget(string goTo) @@ -181,15 +184,14 @@ namespace Barotrauma private void ResetSpeaker() { - if (speaker == null) { return; } - speaker.CampaignInteractionType = CampaignMode.InteractionType.None; - speaker.ActiveConversation = null; - speaker.SetCustomInteract(null, null); + if (Speaker == null) { return; } + Speaker.CampaignInteractionType = CampaignMode.InteractionType.None; + Speaker.ActiveConversation = null; + Speaker.SetCustomInteract(null, null); #if SERVER - GameMain.NetworkMember.CreateEntityEvent(speaker, new Character.AssignCampaignInteractionEventData()); + GameMain.NetworkMember.CreateEntityEvent(Speaker, new Character.AssignCampaignInteractionEventData()); #endif - var humanAI = speaker.AIController as HumanAIController; - if (humanAI != null && !speaker.IsDead && !speaker.Removed) + if (Speaker.AIController is HumanAIController humanAI && !Speaker.IsDead && !Speaker.Removed) { humanAI.ClearForcedOrder(); if (prevIdleObjective != null) { humanAI.ObjectiveManager.AddObjective(prevIdleObjective); } @@ -207,7 +209,6 @@ namespace Barotrauma public override void Update(float deltaTime) { - lastActiveTime = Timing.TotalTime; if (interrupt) { Interrupted?.Update(deltaTime); @@ -216,6 +217,7 @@ namespace Barotrauma { if (dialogOpened) { + lastActiveTime = Timing.TotalTime; #if CLIENT if (GUIMessageBox.MessageBoxes.Any(mb => mb.UserData as string == "ConversationAction")) { @@ -226,7 +228,7 @@ namespace Barotrauma Reset(); } #endif - if (ShouldInterrupt()) + if (ShouldInterrupt(requireTarget: true)) { ResetSpeaker(); interrupt = true; @@ -236,34 +238,34 @@ namespace Barotrauma if (!SpeakerTag.IsEmpty) { - if (speaker != null && !speaker.Removed && speaker.CampaignInteractionType == CampaignMode.InteractionType.Talk && speaker.ActiveConversation?.ParentEvent != this.ParentEvent) { return; } - speaker = ParentEvent.GetTargets(SpeakerTag).FirstOrDefault(e => e is Character) as Character; - if (speaker == null || speaker.Removed) + if (Speaker != null && !Speaker.Removed && Speaker.CampaignInteractionType == CampaignMode.InteractionType.Talk && Speaker.ActiveConversation?.ParentEvent != this.ParentEvent) { return; } + Speaker = ParentEvent.GetTargets(SpeakerTag).FirstOrDefault(e => e is Character) as Character; + if (Speaker == null || Speaker.Removed) { return; } //some conversation already assigned to the speaker, wait for it to be removed - if (speaker.CampaignInteractionType == CampaignMode.InteractionType.Talk && speaker.ActiveConversation?.ParentEvent != this.ParentEvent) + if (Speaker.CampaignInteractionType == CampaignMode.InteractionType.Talk && Speaker.ActiveConversation?.ParentEvent != this.ParentEvent) { return; } else if (!WaitForInteraction) { - TryStartConversation(speaker); + TryStartConversation(Speaker); } - else if (speaker.ActiveConversation != this) + else if (Speaker.ActiveConversation != this) { - speaker.CampaignInteractionType = CampaignMode.InteractionType.Talk; - speaker.ActiveConversation = this; + Speaker.CampaignInteractionType = CampaignMode.InteractionType.Talk; + Speaker.ActiveConversation = this; #if CLIENT - speaker.SetCustomInteract( + Speaker.SetCustomInteract( TryStartConversation, TextManager.GetWithVariable("CampaignInteraction.Talk", "[key]", GameSettings.CurrentConfig.KeyMap.KeyBindText(InputType.Use))); #else - speaker.SetCustomInteract( + Speaker.SetCustomInteract( TryStartConversation, TextManager.Get("CampaignInteraction.Talk")); - GameMain.NetworkMember.CreateEntityEvent(speaker, new Character.AssignCampaignInteractionEventData()); + GameMain.NetworkMember.CreateEntityEvent(Speaker, new Character.AssignCampaignInteractionEventData()); #endif } return; @@ -275,7 +277,9 @@ namespace Barotrauma } else { - if (ShouldInterrupt()) + //after the conversation has been finished and the target character assigned, + //we no longer care if we still have a target + if (ShouldInterrupt(requireTarget: false)) { ResetSpeaker(); interrupt = true; @@ -287,35 +291,36 @@ namespace Barotrauma } } - private bool ShouldInterrupt() + private bool ShouldInterrupt(bool requireTarget) { IEnumerable targets = Enumerable.Empty(); - if (!TargetTag.IsEmpty) + if (!TargetTag.IsEmpty && requireTarget) { - targets = ParentEvent.GetTargets(TargetTag).Where(e => IsValidTarget(e)); + targets = ParentEvent.GetTargets(TargetTag).Where(e => IsValidTarget(e, requireTarget)); if (!targets.Any()) { return true; } } - if (speaker != null) + if (Speaker != null) { - if (!TargetTag.IsEmpty) + if (!TargetTag.IsEmpty && requireTarget && !IgnoreInterruptDistance) { - if (targets.All(t => Vector2.DistanceSquared(t.WorldPosition, speaker.WorldPosition) > InterruptDistance * InterruptDistance)) { return true; } + if (targets.All(t => Vector2.DistanceSquared(t.WorldPosition, Speaker.WorldPosition) > InterruptDistance * InterruptDistance)) { return true; } } - if (speaker.AIController is HumanAIController humanAI && !humanAI.AllowCampaignInteraction()) + if (Speaker.AIController is HumanAIController humanAI && !humanAI.AllowCampaignInteraction()) { return true; } - return speaker.Removed || speaker.IsDead || speaker.IsIncapacitated; + return Speaker.Removed || Speaker.IsDead || Speaker.IsIncapacitated; } return false; } - private bool IsValidTarget(Entity e) + private bool IsValidTarget(Entity e, bool requirePlayerControlled = true) { - bool isValid = e is Character character && !character.Removed && !character.IsDead && !character.IsIncapacitated && - (e == Character.Controlled || character.IsRemotePlayer); + bool isValid = + e is Character character && !character.Removed && !character.IsDead && !character.IsIncapacitated && + (character == Character.Controlled || character.IsRemotePlayer || !requirePlayerControlled); #if SERVER if (!dialogOpened) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/MessageBoxAction.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/MessageBoxAction.cs index 2834b8b84..6ac082e66 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/MessageBoxAction.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/MessageBoxAction.cs @@ -49,6 +49,12 @@ namespace Barotrauma [Serialize("", IsPropertySaveable.Yes)] public Identifier ObjectiveTag { get; set; } + [Serialize(true, IsPropertySaveable.Yes)] + public bool ObjectiveCanBeCompleted { get; set; } + + [Serialize("", IsPropertySaveable.Yes)] + public Identifier ParentObjectiveId { get; set; } + private bool isFinished = false; public MessageBoxAction(ScriptedEvent parentEvent, ContentXElement element) : base(parentEvent, element) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/NPCChangeTeamAction.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/NPCChangeTeamAction.cs index 1db3cdd56..ee26b9283 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/NPCChangeTeamAction.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/NPCChangeTeamAction.cs @@ -67,7 +67,7 @@ namespace Barotrauma void ChangeItemTeam(Submarine sub, bool allowStealing) { - foreach (Item item in npc.Inventory.AllItems) + foreach (Item item in npc.Inventory.FindAllItems(recursive: true)) { item.AllowStealing = allowStealing; if (item.GetComponent() is { } wifiComponent) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/SpawnAction.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/SpawnAction.cs index 77661bdbc..ea2851339 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/SpawnAction.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/SpawnAction.cs @@ -1,9 +1,8 @@ -using System; -using Barotrauma.Extensions; +using Barotrauma.Extensions; using Microsoft.Xna.Framework; +using System; using System.Collections.Generic; using System.Linq; -using System.Xml.Linq; namespace Barotrauma { @@ -11,6 +10,7 @@ namespace Barotrauma { public enum SpawnLocationType { + Any, MainSub, Outpost, MainPath, @@ -40,7 +40,7 @@ namespace Barotrauma [Serialize("", IsPropertySaveable.Yes, description: "Tag of an entity with an inventory to spawn the item into.")] public Identifier TargetInventory { get; set; } - [Serialize(SpawnLocationType.MainSub, IsPropertySaveable.Yes)] + [Serialize(SpawnLocationType.Any, IsPropertySaveable.Yes)] public SpawnLocationType SpawnLocation { get; set; } [Serialize(SpawnType.Human, IsPropertySaveable.Yes)] @@ -177,7 +177,7 @@ namespace Barotrauma } else if (!ItemIdentifier.IsEmpty) { - if (!(MapEntityPrefab.FindByIdentifier(ItemIdentifier) is ItemPrefab itemPrefab)) + if (MapEntityPrefab.FindByIdentifier(ItemIdentifier) is not ItemPrefab itemPrefab) { DebugConsole.ThrowError("Error in SpawnAction (item prefab \"" + ItemIdentifier + "\" not found)"); } @@ -275,6 +275,7 @@ namespace Barotrauma { return spawnLocation switch { + SpawnLocationType.Any => true, SpawnLocationType.MainSub => submarine == Submarine.MainSub, SpawnLocationType.MainPath => submarine == null, SpawnLocationType.Outpost => submarine is { Info: { IsOutpost: true } }, diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/TagAction.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/TagAction.cs index 208a7fbfa..89eff4f39 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/TagAction.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/TagAction.cs @@ -32,11 +32,13 @@ namespace Barotrauma ("bot", v => TagBots(playerCrewOnly: false)), ("crew", v => TagCrew()), ("humanprefabidentifier", TagHumansByIdentifier), + ("jobidentifier", TagHumansByJobIdentifier), ("structureidentifier", TagStructuresByIdentifier), ("structurespecialtag", TagStructuresBySpecialTag), ("itemidentifier", TagItemsByIdentifier), ("itemtag", TagItemsByTag), - ("hullname", TagHullsByName) + ("hullname", TagHullsByName), + ("submarine", TagSubmarinesByType), }.Select(t => (t.k.ToIdentifier(), t.v)).ToImmutableDictionary(); } @@ -93,6 +95,18 @@ namespace Barotrauma } } } + + private void TagHumansByJobIdentifier(Identifier jobIdentifier) + { + foreach (Character c in Character.CharacterList) + { + if (c.HasJob(jobIdentifier)) + { + ParentEvent.AddTarget(Tag, c); + } + } + } + private void TagStructuresByIdentifier(Identifier identifier) { ParentEvent.AddTargetPredicate(Tag, e => e is Structure s && SubmarineTypeMatches(s.Submarine) && s.Prefab.Identifier == identifier); @@ -118,6 +132,11 @@ namespace Barotrauma ParentEvent.AddTargetPredicate(Tag, e => e is Hull h && SubmarineTypeMatches(h.Submarine) && h.RoomName.Contains(name.Value, StringComparison.OrdinalIgnoreCase)); } + private void TagSubmarinesByType(Identifier type) + { + ParentEvent.AddTargetPredicate(Tag, e => e is Submarine s && SubmarineTypeMatches(s) && (type.IsEmpty || type == s.Info?.Type.ToIdentifier())); + } + private bool SubmarineTypeMatches(Submarine sub) { if (SubmarineType == SubType.Any) { return true; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/TriggerAction.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/TriggerAction.cs index 385dc13ae..8f7a849ac 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/TriggerAction.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/TriggerAction.cs @@ -8,6 +8,12 @@ namespace Barotrauma { class TriggerAction : EventAction { + public enum TriggerType + { + Inside, + Outside + } + [Serialize("", IsPropertySaveable.Yes, description: "Tag of the first entity that will be used for trigger checks.")] public Identifier Target1Tag { get; set; } @@ -23,7 +29,10 @@ namespace Barotrauma [Serialize("", IsPropertySaveable.Yes, description: "Tag to apply to the second entity when the trigger check succeeds.")] public Identifier ApplyToTarget2 { get; set; } - [Serialize(0.0f, IsPropertySaveable.Yes, description: "Range both entities must be within to activate the trigger.")] + [Serialize(TriggerType.Inside, IsPropertySaveable.Yes, description: "Determines if the targets must be inside or outside of the radius.")] + public TriggerType Type { get; set; } + + [Serialize(0.0f, IsPropertySaveable.Yes, description: "Range to activate the trigger.")] public float Radius { get; set; } [Serialize(true, IsPropertySaveable.Yes, description: "If true, characters who are being targeted by some enemy cannot trigger the action.")] @@ -38,6 +47,9 @@ namespace Barotrauma [Serialize(false, IsPropertySaveable.Yes, description: "If true, the action can be triggered by interacting with any matching target (not just the 1st one).")] public bool AllowMultipleTargets { get; set; } + [Serialize(false, IsPropertySaveable.Yes, description: "If true and using multiple targets, all targets must be inside/outside the radius.")] + public bool CheckAllTargets { get; set; } + private float distance; public TriggerAction(ScriptedEvent parentEvent, ContentXElement element) : base(parentEvent, element) { } @@ -57,6 +69,8 @@ namespace Barotrauma public bool isRunning = false; private readonly List> npcsOrItems = new List>(); + + private readonly List<(Entity e1, Entity e2)> triggerers = new List<(Entity e1, Entity e2)>(); public override void Update(float deltaTime) { @@ -66,18 +80,44 @@ namespace Barotrauma var targets1 = ParentEvent.GetTargets(Target1Tag); if (!targets1.Any()) { return; } - + + triggerers.Clear(); foreach (Entity e1 in targets1) { - if (DisableInCombat && IsInCombat(e1)) { continue; } - if (DisableIfTargetIncapacitated && e1 is Character character1 && (character1.IsDead || character1.IsIncapacitated)) { continue; } + if (DisableInCombat && IsInCombat(e1)) + { + if (CheckAllTargets) + { + return; + } + continue; + } + if (DisableIfTargetIncapacitated && e1 is Character character1 && (character1.IsDead || character1.IsIncapacitated)) + { + if (CheckAllTargets) + { + return; + } + continue; + } if (!TargetModuleType.IsEmpty) { - if (IsCloseEnoughToHull(e1, out Hull hull)) + if (!CheckAllTargets && CheckDistanceToHull(e1, out Hull hull)) { Trigger(e1, hull); return; } + else if (CheckAllTargets) + { + if (CheckDistanceToHull(e1, out hull)) + { + triggerers.Add((e1, hull)); + } + else + { + return; + } + } continue; } @@ -85,9 +125,26 @@ namespace Barotrauma foreach (Entity e2 in targets2) { - if (e1 == e2) { continue; } - if (DisableInCombat && IsInCombat(e2)) { continue; } - if (DisableIfTargetIncapacitated && e2 is Character character2 && (character2.IsDead || character2.IsIncapacitated)) { continue; } + if (e1 == e2) + { + continue; + } + if (DisableInCombat && IsInCombat(e2)) + { + if (CheckAllTargets) + { + return; + } + continue; + } + if (DisableIfTargetIncapacitated && e2 is Character character2 && (character2.IsDead || character2.IsIncapacitated)) + { + if (CheckAllTargets) + { + return; + } + continue; + } if (WaitForInteraction) { @@ -173,16 +230,35 @@ namespace Barotrauma Vector2 pos1 = e1.WorldPosition; Vector2 pos2 = e2.WorldPosition; distance = Vector2.Distance(pos1, pos2); - if (((e1 is MapEntity m1) && Submarine.RectContains(m1.WorldRect, pos2)) || - ((e2 is MapEntity m2) && Submarine.RectContains(m2.WorldRect, pos1)) || - Vector2.DistanceSquared(pos1, pos2) < Radius * Radius) + if ((Type == TriggerType.Inside) == IsWithinRadius()) + { + if (!CheckAllTargets) + { + Trigger(e1, e2); + return; + } + else + { + triggerers.Add((e1, e2)); + } + } + else if (CheckAllTargets) { - Trigger(e1, e2); return; } + + bool IsWithinRadius() => + ((e1 is MapEntity m1) && Submarine.RectContains(m1.WorldRect, pos2)) || + ((e2 is MapEntity m2) && Submarine.RectContains(m2.WorldRect, pos1)) || + Vector2.DistanceSquared(pos1, pos2) < Radius * Radius; } } - } + } + + foreach (var (e1, e2) in triggerers) + { + Trigger(e1, e2); + } } private void ResetTargetIcons() @@ -205,7 +281,7 @@ namespace Barotrauma } } - private bool IsCloseEnoughToHull(Entity e, out Hull hull) + private bool CheckDistanceToHull(Entity e, out Hull hull) { hull = null; if (Radius <= 0) @@ -213,36 +289,35 @@ namespace Barotrauma if (e is Character character && character.CurrentHull != null && character.CurrentHull.OutpostModuleTags.Contains(TargetModuleType)) { hull = character.CurrentHull; - return true; + return Type == TriggerType.Inside; } else if (e is Item item && item.CurrentHull != null && item.CurrentHull.OutpostModuleTags.Contains(TargetModuleType)) { hull = item.CurrentHull; - return true; + return Type == TriggerType.Inside; } - return false; + return Type == TriggerType.Outside; } else { foreach (Hull potentialHull in Hull.HullList) { if (!potentialHull.OutpostModuleTags.Contains(TargetModuleType)) { continue; } - Rectangle hullRect = potentialHull.WorldRect; hullRect.Inflate(Radius, Radius); if (Submarine.RectContains(hullRect, e.WorldPosition)) { hull = potentialHull; - return true; + return Type == TriggerType.Inside; } } - return false; + return Type == TriggerType.Outside; } } - private bool IsInCombat(Entity entity) + private static bool IsInCombat(Entity entity) { - if (!(entity is Character character)) { return false; } + if (entity is not Character character) { return false; } foreach (Character c in Character.CharacterList) { if (c.IsDead || c.Removed || c.IsIncapacitated || !c.Enabled) { continue; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/TutorialSegmentAction.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/TutorialSegmentAction.cs index 587fb20a7..f2128f82e 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/TutorialSegmentAction.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/EventActions/TutorialSegmentAction.cs @@ -13,6 +13,12 @@ namespace Barotrauma [Serialize("", IsPropertySaveable.Yes)] public Identifier ObjectiveTag { get; set; } + [Serialize(true, IsPropertySaveable.Yes)] + public bool CanBeCompleted { get; set; } + + [Serialize("", IsPropertySaveable.Yes)] + public Identifier ParentObjectiveId { get; set; } + [Serialize(false, IsPropertySaveable.Yes)] public bool AutoPlayVideo { get; set; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/EventManager.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/EventManager.cs index 8ecedce89..481a4a40a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/EventManager.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/EventManager.cs @@ -73,6 +73,7 @@ namespace Barotrauma private readonly HashSet finishedEvents = new HashSet(); private readonly HashSet nonRepeatableEvents = new HashSet(); + private readonly HashSet usedUniqueSets = new HashSet(); #if DEBUG && SERVER @@ -155,12 +156,19 @@ namespace Barotrauma } rand = new MTRandom(seed); - EventSet initialEventSet = SelectRandomEvents(EventSet.Prefabs.ToList(), requireCampaignSet: GameMain.GameSession?.GameMode is CampaignMode, rand); + bool playingCampaign = GameMain.GameSession?.GameMode is CampaignMode; + EventSet initialEventSet = SelectRandomEvents( + EventSet.Prefabs.ToList(), + requireCampaignSet: playingCampaign, + random: rand); EventSet additiveSet = null; if (initialEventSet != null && initialEventSet.Additive) { additiveSet = initialEventSet; - initialEventSet = SelectRandomEvents(EventSet.Prefabs.Where(e => !e.Additive).ToList(), requireCampaignSet: GameMain.GameSession?.GameMode is CampaignMode, rand); + initialEventSet = SelectRandomEvents( + EventSet.Prefabs.Where(e => !e.Additive).ToList(), + requireCampaignSet: playingCampaign, + random: rand); } if (initialEventSet != null) { @@ -201,6 +209,7 @@ namespace Barotrauma } AddChildEvents(initialEventSet); + void AddChildEvents(EventSet eventSet) { if (eventSet == null) { return; } @@ -351,6 +360,7 @@ namespace Barotrauma QueuedEvents.Clear(); finishedEvents.Clear(); nonRepeatableEvents.Clear(); + usedUniqueSets.Clear(); preloadedSprites.ForEach(s => s.Remove()); preloadedSprites.Clear(); @@ -364,15 +374,25 @@ namespace Barotrauma /// public void RegisterEventHistory() { - level.LevelData.EventsExhausted = true; - if (level?.LevelData != null && level.LevelData.Type == LevelData.LevelType.Outpost) + if (level?.LevelData != null) { - level.LevelData.EventHistory.AddRange(selectedEvents.Values.SelectMany(v => v).Select(e => e.Prefab).Where(e => !level.LevelData.EventHistory.Contains(e))); - if (level.LevelData.EventHistory.Count > MaxEventHistory) + level.LevelData.EventsExhausted = true; + if (level.LevelData.Type == LevelData.LevelType.Outpost) { - level.LevelData.EventHistory.RemoveRange(0, level.LevelData.EventHistory.Count - MaxEventHistory); + level.LevelData.EventHistory.AddRange(selectedEvents.Values.SelectMany(v => v).Select(e => e.Prefab).Where(e => !level.LevelData.EventHistory.Contains(e))); + if (level.LevelData.EventHistory.Count > MaxEventHistory) + { + level.LevelData.EventHistory.RemoveRange(0, level.LevelData.EventHistory.Count - MaxEventHistory); + } + level.LevelData.NonRepeatableEvents.AddRange(nonRepeatableEvents.Where(e => !level.LevelData.NonRepeatableEvents.Contains(e))); + } + foreach (var usedUniqueSet in usedUniqueSets) + { + if (!level.LevelData.UsedUniqueSets.Contains(usedUniqueSet.Identifier)) + { + level.LevelData.UsedUniqueSets.Add(usedUniqueSet.Identifier); + } } - level.LevelData.NonRepeatableEvents.AddRange(nonRepeatableEvents.Where(e => !level.LevelData.NonRepeatableEvents.Contains(e))); } } @@ -398,6 +418,11 @@ namespace Barotrauma DebugConsole.NewMessage($"Loading event set {eventSet.Identifier}", Color.LightBlue, debugOnly: true); + if (eventSet.Unique && !usedUniqueSets.Contains(eventSet)) + { + usedUniqueSets.Add(eventSet); + } + int applyCount = 1; List> spawnPosFilter = new List>(); if (eventSet.PerRuin) @@ -496,12 +521,12 @@ namespace Barotrauma selectedEvents[eventSet].Add(newEvent); } - Location location = (GameMain.GameSession?.GameMode as CampaignMode)?.Map?.CurrentLocation ?? level?.StartLocation; + var location = GetEventLocation(); foreach (EventSet childEventSet in eventSet.ChildSets) { if (!IsValidForLevel(childEventSet, level)) { continue; } - if (location != null && !IsValidForLocation(childEventSet, location)) { continue; } - CreateEvents(childEventSet); + if (!IsValidForLocation(childEventSet, location)) { continue; } + CreateEvents(childEventSet); } } } @@ -536,10 +561,32 @@ namespace Barotrauma } } - Location location = (GameMain.GameSession?.GameMode as CampaignMode)?.Map?.CurrentLocation ?? level?.StartLocation; - if (location != null) + var location = GetEventLocation(); + allowedEventSets = allowedEventSets.Where(set => IsValidForLocation(set, location)); + + allowedEventSets = allowedEventSets.Where(set => !set.CampaignTutorialOnly || + (GameMain.IsSingleplayer && GameMain.GameSession?.Campaign?.Settings is { TutorialEnabled: true })); + + int? discoveryIndex = GameMain.GameSession?.Map?.GetDiscoveryIndex(location); + int? visitIndex = GameMain.GameSession?.Map?.GetVisitIndex(location); + if (discoveryIndex is not null && discoveryIndex >= 0 && allowedEventSets.Any(set => set.ForceAtDiscoveredNr == discoveryIndex)) { - allowedEventSets = allowedEventSets.Where(set => IsValidForLocation(set, location)); + allowedEventSets = allowedEventSets.Where(set => set.ForceAtDiscoveredNr == discoveryIndex); + } + else if (visitIndex is not null && visitIndex >= 0 && allowedEventSets.Any(set => set.ForceAtVisitedNr == visitIndex)) + { + allowedEventSets = allowedEventSets.Where(set => set.ForceAtVisitedNr == visitIndex); + } + else + { + // When there are no forced sets, only allow sets that aren't forced at any specific location + allowedEventSets = allowedEventSets.Where(set => set.ForceAtDiscoveredNr < 0 && set.ForceAtVisitedNr < 0); + } + + if (allowedEventSets.Count() == 1) + { + // When there's only a single set available, just select it directly + return allowedEventSets.First(); } float totalCommonness = allowedEventSets.Sum(e => e.GetCommonness(level)); @@ -558,18 +605,27 @@ namespace Barotrauma return null; } - private bool IsValidForLevel(EventSet eventSet, Level level) + private static bool IsValidForLevel(EventSet eventSet, Level level) { return level.Difficulty >= eventSet.MinLevelDifficulty && level.Difficulty <= eventSet.MaxLevelDifficulty && level.LevelData.Type == eventSet.LevelType && - (eventSet.BiomeIdentifier.IsEmpty || eventSet.BiomeIdentifier == level.LevelData.Biome.Identifier); + (eventSet.BiomeIdentifier.IsEmpty || eventSet.BiomeIdentifier == level.LevelData.Biome.Identifier) && + (!eventSet.Unique || !level.LevelData.UsedUniqueSets.Contains(eventSet.Identifier)); } private bool IsValidForLocation(EventSet eventSet, Location location) { - return eventSet.LocationTypeIdentifiers == null || - eventSet.LocationTypeIdentifiers.Any(identifier => identifier == location.GetLocationType().Identifier); + if (location is null) { return true; } + var locationType = location.GetLocationType(); + bool includeGenericEvents = level.Type == LevelData.LevelType.LocationConnection || !locationType.IgnoreGenericEvents; + if (includeGenericEvents && eventSet.LocationTypeIdentifiers == null) { return true; } + return eventSet.LocationTypeIdentifiers != null && eventSet.LocationTypeIdentifiers.Any(identifier => identifier == locationType.Identifier); + } + + private Location GetEventLocation() + { + return GameMain.GameSession?.Campaign?.Map?.CurrentLocation ?? level?.StartLocation; } private bool CanStartEventSet(EventSet eventSet) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/EventSet.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/EventSet.cs index cd6a3cae6..bb8bbd1aa 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/EventSet.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/EventSet.cs @@ -113,8 +113,17 @@ namespace Barotrauma public readonly bool PerRuin, PerCave, PerWreck; public readonly bool DisableInHuntingGrounds; + /// + /// If true, events from this set shouldn't be selected again as long as they remain in which has a limited size. + /// Use to prevent selecting the whole set again altogether. + /// public readonly bool OncePerOutpost; + /// + /// If true, the whole set can only be selected once for a level. + /// + public readonly bool Unique; + public readonly bool DelayWhenCrewAway; public readonly bool TriggerEventCooldown; @@ -126,6 +135,18 @@ namespace Barotrauma public readonly float ResetTime; + /// + /// Used to force an event set based on how many other locations have been discovered before this. (Used for campaign tutorial event sets.) + /// + public readonly int ForceAtDiscoveredNr; + + /// + /// Used to force an event set based on how many other outposts have been visited before this. (Used for campaign tutorial event sets.) + /// + public readonly int ForceAtVisitedNr; + + public readonly bool CampaignTutorialOnly; + public readonly struct SubEventPrefab { public SubEventPrefab(Either prefabOrIdentifiers, float? commonness, float? probability) @@ -269,9 +290,18 @@ namespace Barotrauma IgnoreCoolDown = element.GetAttributeBool("ignorecooldown", parentSet?.IgnoreCoolDown ?? (PerRuin || PerCave || PerWreck)); DelayWhenCrewAway = element.GetAttributeBool("delaywhencrewaway", !PerRuin && !PerCave && !PerWreck); OncePerOutpost = element.GetAttributeBool("onceperoutpost", false); + Unique = element.GetAttributeBool("unique", false); TriggerEventCooldown = element.GetAttributeBool("triggereventcooldown", true); IsCampaignSet = element.GetAttributeBool("campaign", LevelType == LevelData.LevelType.Outpost || (parentSet?.IsCampaignSet ?? false)); ResetTime = element.GetAttributeFloat("resettime", 0); + CampaignTutorialOnly = element.GetAttributeBool(nameof(CampaignTutorialOnly), false); + + ForceAtDiscoveredNr = element.GetAttributeInt(nameof(ForceAtDiscoveredNr), -1); + ForceAtVisitedNr = element.GetAttributeInt(nameof(ForceAtVisitedNr), -1); + if (ForceAtDiscoveredNr >= 0 && ForceAtVisitedNr >= 0) + { + DebugConsole.ThrowError($"Error with event set \"{Identifier}\" - both ForceAtDiscoveredNr and ForceAtVisitedNr are defined, this could lead to unexpected behavior"); + } DefaultCommonness = element.GetAttributeFloat("commonness", 1.0f); foreach (var subElement in element.Elements()) @@ -489,6 +519,11 @@ namespace Barotrauma } } + public override string ToString() + { + return $"{base.ToString()} ({Identifier.Value})"; + } + public override void Dispose() { } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/Mission.cs b/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/Mission.cs index f203441b6..e826d0897 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/Mission.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Events/Missions/Mission.cs @@ -378,7 +378,7 @@ namespace Barotrauma IEnumerable crewCharacters = GameSession.GetSessionCrewCharacters(CharacterType.Both); // use multipliers here so that we can easily add them together without introducing multiplicative XP stacking - var experienceGainMultiplier = new AbilityExperienceGainMultiplier(1f); + var experienceGainMultiplier = new AbilityMissionExperienceGainMultiplier(this, 1f); crewCharacters.ForEach(c => c.CheckTalents(AbilityEffectType.OnAllyGainMissionExperience, experienceGainMultiplier)); crewCharacters.ForEach(c => experienceGainMultiplier.Value += c.GetStatValue(StatTypes.MissionExperienceGainMultiplier)); @@ -386,13 +386,20 @@ namespace Barotrauma #if CLIENT foreach (Character character in crewCharacters) { + var experienceGainMultiplierIndividual = new AbilityMissionExperienceGainMultiplier(this, 1f); + character.CheckTalents(AbilityEffectType.OnGainMissionExperience, experienceGainMultiplierIndividual); character.Info?.GiveExperience(experienceGain, isMissionExperience: true); } #else foreach (Barotrauma.Networking.Client c in GameMain.Server.ConnectedClients) { //give the experience to the stored characterinfo if the client isn't currently controlling a character - (c.Character?.Info ?? c.CharacterInfo)?.GiveExperience(experienceGain, isMissionExperience: true); + CharacterInfo info = c.Character?.Info ?? c.CharacterInfo; + + var experienceGainMultiplierIndividual = new AbilityMissionExperienceGainMultiplier(this, 1f); + info?.Character?.CheckTalents(AbilityEffectType.OnGainMissionExperience, experienceGainMultiplierIndividual); + + info?.GiveExperience((int)(experienceGain * experienceGainMultiplier.Value), isMissionExperience: true); } #endif @@ -619,4 +626,16 @@ namespace Barotrauma public Mission Mission { get; set; } } + class AbilityMissionExperienceGainMultiplier : AbilityObject, IAbilityValue, IAbilityMission + { + public AbilityMissionExperienceGainMultiplier(Mission mission, float missionExperienceGainMultiplier) + { + Value = missionExperienceGainMultiplier; + Mission = mission; + } + + public float Value { get; set; } + public Mission Mission { get; set; } + } + } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Extensions/IEnumerableExtensions.cs b/Barotrauma/BarotraumaShared/SharedSource/Extensions/IEnumerableExtensions.cs index 9ea8ff2a0..4efce93a4 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Extensions/IEnumerableExtensions.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Extensions/IEnumerableExtensions.cs @@ -218,6 +218,8 @@ namespace Barotrauma.Extensions return new Dictionary(immutableDictionary); } + public static NetCollection ToNetCollection(this IEnumerable enumerable) => new NetCollection(enumerable.ToImmutableArray()); + /// /// Returns whether a given collection has at least a certain amount /// of elements for which the predicate returns true. diff --git a/Barotrauma/BarotraumaShared/SharedSource/GameSession/Data/Factions.cs b/Barotrauma/BarotraumaShared/SharedSource/GameSession/Data/Factions.cs index 76ba0fc8b..32dc12d72 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/GameSession/Data/Factions.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/GameSession/Data/Factions.cs @@ -1,10 +1,15 @@ #nullable enable using Microsoft.Xna.Framework; using System; -using System.Linq; namespace Barotrauma { + public enum FactionAffiliation + { + Affiliated, + Neutral + } + class Faction { public Reputation Reputation { get; } @@ -16,11 +21,25 @@ namespace Barotrauma Reputation = new Reputation(metadata, this, prefab.MinReputation, prefab.MaxReputation, prefab.InitialReputation); } - public bool IsAffiliated() + /// + /// Get what kind of affiliation this faction has towards the player depending on who they chose to side with via talents + /// + /// + public FactionAffiliation GetPlayerAffiliationStatus() { - if (GameMain.GameSession?.Campaign?.Factions.MaxBy(static f => f.Reputation.Value) is not { } highestFaction) { return false; } + float affiliation = 1f; + foreach (Character character in GameSession.GetSessionCrewCharacters(CharacterType.Both)) + { + if (character.Info is not { } info) { continue; } - return highestFaction.Reputation.Value < 0 || Prefab.Identifier == highestFaction.Prefab.Identifier; + affiliation *= 1f + info.GetSavedStatValue(StatTypes.Affiliation, Prefab.Identifier); + } + + return affiliation switch + { + >= 1f => FactionAffiliation.Affiliated, + _ => FactionAffiliation.Neutral + }; } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/CampaignMode.cs b/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/CampaignMode.cs index 4409e74f7..dfe0205af 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/CampaignMode.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/CampaignMode.cs @@ -749,6 +749,7 @@ namespace Barotrauma location.LevelData = new LevelData(location, location.Biome.AdjustedMaxDifficulty); location.Reset(); } + Map.ClearLocationHistory(); Map.SetLocation(Map.Locations.IndexOf(Map.StartLocation)); Map.SelectLocation(-1); if (Map.Radiation != null) diff --git a/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/CampaignSettings.cs b/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/CampaignSettings.cs index 15c864bd7..791d852b4 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/CampaignSettings.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/CampaignSettings.cs @@ -18,6 +18,9 @@ namespace Barotrauma [Serialize("", IsPropertySaveable.Yes)] public string PresetName { get; set; } = string.Empty; + [Serialize(true, IsPropertySaveable.Yes)] + public bool TutorialEnabled { get; set; } + [Serialize(false, IsPropertySaveable.Yes), NetworkSerialize] public bool RadiationEnabled { get; set; } @@ -104,7 +107,9 @@ namespace Barotrauma private static int GetAddedMissionCount() { - return GameSession.GetSessionCrewCharacters(CharacterType.Both).Max(static character => (int)character.GetStatValue(StatTypes.ExtraMissionCount)); + var characters = GameSession.GetSessionCrewCharacters(CharacterType.Both); + if (!characters.Any()) { return 0; } + return characters.Max(static character => (int)character.GetStatValue(StatTypes.ExtraMissionCount)); } } } \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/MultiPlayerCampaign.cs b/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/MultiPlayerCampaign.cs index 9e1e19aa6..a84b1a7c5 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/MultiPlayerCampaign.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/MultiPlayerCampaign.cs @@ -133,13 +133,13 @@ namespace Barotrauma } partial void InitProjSpecific(); - + public static string GetCharacterDataSavePath(string savePath) { - return Path.Combine(SaveUtil.MultiplayerSaveFolder, Path.GetFileNameWithoutExtension(savePath) + "_CharacterData.xml"); + return Path.Combine(Path.GetDirectoryName(savePath), Path.GetFileNameWithoutExtension(savePath) + "_CharacterData.xml"); } - public string GetCharacterDataSavePath() + public static string GetCharacterDataSavePath() { return GetCharacterDataSavePath(GameMain.GameSession.SavePath); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/Tutorials/TutorialPrefab.cs b/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/Tutorials/TutorialPrefab.cs index a9942470b..bb9438b28 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/Tutorials/TutorialPrefab.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameModes/Tutorials/TutorialPrefab.cs @@ -29,6 +29,14 @@ namespace Barotrauma public readonly Sprite Banner; + public readonly EndMessageInfo EndMessage; + + public enum EndType { None, Continue, Restart } + + public readonly record struct EndMessageInfo( + EndType EndType, + Identifier NextTutorialIdentifier); + public TutorialPrefab(ContentFile file, ContentXElement element) : base(file, element.GetAttributeIdentifier("identifier", "")) { Order = element.GetAttributeInt("order", int.MaxValue); @@ -59,6 +67,13 @@ namespace Barotrauma } EventIdentifier = element.GetChildElement("scriptedevent")?.GetAttributeIdentifier("identifier", "") ?? Identifier.Empty; + + if (element.GetChildElement("endmessage") is ContentXElement endMessageElement) + { + EndMessage = new EndMessageInfo( + EndType: endMessageElement.GetAttributeEnum("type", EndType.None), + NextTutorialIdentifier: endMessageElement.GetAttributeIdentifier("nexttutorial", Identifier.Empty)); + } } public CharacterInfo GetTutorialCharacterInfo() diff --git a/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameSession.cs b/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameSession.cs index 26bb6fc58..75e39a27f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameSession.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/GameSession/GameSession.cs @@ -582,6 +582,9 @@ namespace Barotrauma } } +#if CLIENT + ObjectiveManager.ResetObjectives(); +#endif EventManager?.StartRound(Level.Loaded); SteamAchievementManager.OnStartRound(); @@ -847,6 +850,7 @@ namespace Barotrauma if (GameMain.NetLobbyScreen != null) { GameMain.NetLobbyScreen.OnRoundEnded(); } TabMenu.OnRoundEnded(); GUIMessageBox.MessageBoxes.RemoveAll(mb => mb.UserData as string == "ConversationAction" || ReadyCheck.IsReadyCheck(mb)); + ObjectiveManager.ResetUI(); #endif SteamAchievementManager.OnRoundEnded(this); diff --git a/Barotrauma/BarotraumaShared/SharedSource/GameSession/MedicalClinic.cs b/Barotrauma/BarotraumaShared/SharedSource/GameSession/MedicalClinic.cs index 91b63855f..2d25da2dc 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/GameSession/MedicalClinic.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/GameSession/MedicalClinic.cs @@ -9,7 +9,7 @@ using Barotrauma.Networking; namespace Barotrauma { - internal partial class MedicalClinic + internal sealed partial class MedicalClinic { public enum NetworkHeader { @@ -18,7 +18,8 @@ namespace Barotrauma ADD_PENDING, REMOVE_PENDING, CLEAR_PENDING, - HEAL_PENDING + HEAL_PENDING, + ADD_EVERYTHING_TO_PENDING } public enum AfflictionSeverity @@ -43,23 +44,10 @@ namespace Barotrauma } [NetworkSerialize] - public struct NetHealRequest : INetSerializableStruct - { - public HealRequestResult Result; - } + public readonly record struct NetHealRequest(HealRequestResult Result) : INetSerializableStruct; [NetworkSerialize] - public struct NetRemovedAffliction : INetSerializableStruct - { - public NetCrewMember CrewMember; - public NetAffliction Affliction; - } - - public struct NetPendingCrew : INetSerializableStruct - { - [NetworkSerialize(ArrayMaxSize = CrewManager.MaxCrewSize)] - public NetCrewMember[] CrewMembers; - } + public readonly record struct NetRemovedAffliction(NetCrewMember CrewMember, NetAffliction Affliction) : INetSerializableStruct; public struct NetAffliction : INetSerializableStruct { @@ -87,7 +75,7 @@ namespace Barotrauma } // between 0.1 and 0.5 - if (normalizedStrength > 0.1f && normalizedStrength < 0.5f) + if (normalizedStrength is > 0.1f and < 0.5f) { return AfflictionSeverity.Medium; } @@ -146,17 +134,23 @@ namespace Barotrauma } } - public struct NetCrewMember : INetSerializableStruct + public record struct NetCrewMember : INetSerializableStruct { [NetworkSerialize] public int CharacterInfoID; [NetworkSerialize] - public NetAffliction[] Afflictions; + public ImmutableArray Afflictions; - public CharacterInfo CharacterInfo + public NetCrewMember(CharacterInfo info) { - set => CharacterInfoID = value.GetIdentifierUsingOriginalName(); + CharacterInfoID = info.GetIdentifierUsingOriginalName(); + Afflictions = ImmutableArray.Empty; + } + + public NetCrewMember(CharacterInfo info, ImmutableArray afflictions): this(info) + { + Afflictions = afflictions; } public readonly CharacterInfo? FindCharacterInfo(ImmutableArray crew) @@ -194,11 +188,11 @@ namespace Barotrauma private static bool IsOutpostInCombat() { - if (!(Level.Loaded is { Type: LevelData.LevelType.Outpost })) { return false; } + if (Level.Loaded is not { Type: LevelData.LevelType.Outpost }) { return false; } - IEnumerable crew = GetCrewCharacters().Where(c => c.Character != null).Select(c => c.Character).ToImmutableHashSet(); + IEnumerable crew = GetCrewCharacters().Where(static c => c.Character != null).Select(static c => c.Character).ToImmutableHashSet(); - foreach (Character npc in Character.CharacterList.Where(c => c.TeamID == CharacterTeamType.FriendlyNPC)) + foreach (Character npc in Character.CharacterList.Where(static c => c.TeamID == CharacterTeamType.FriendlyNPC)) { bool isInCombatWithCrew = !npc.IsInstigator && npc.AIController is HumanAIController { ObjectiveManager: { CurrentObjective: AIObjectiveCombat combatObjective } } && crew.Contains(combatObjective.Enemy); if (isInCombatWithCrew) { return true; } @@ -238,6 +232,20 @@ namespace Barotrauma PendingHeals.Clear(); } + private void AddEverythingToPending() + { + foreach (CharacterInfo info in GetCrewCharacters()) + { + if (info.Character?.CharacterHealth is not { } health) { continue; } + + var afflictions = GetAllAfflictions(health); + + if (afflictions.Length is 0) { continue; } + + InsertPendingCrewMember(new NetCrewMember(info, afflictions)); + } + } + private void RemovePendingAffliction(NetCrewMember crewMember, NetAffliction affliction) { foreach (NetCrewMember listMember in PendingHeals.ToList()) @@ -255,7 +263,7 @@ namespace Barotrauma newAfflictions.Add(pendingAffliction); } - pendingMember.Afflictions = newAfflictions.ToArray(); + pendingMember.Afflictions = newAfflictions.ToImmutableArray(); } if (!pendingMember.Afflictions.Any()) { continue; } @@ -280,9 +288,9 @@ namespace Barotrauma static float GetShowTreshold(Affliction affliction) => Math.Max(0, Math.Min(affliction.Prefab.ShowIconToOthersThreshold, affliction.Prefab.ShowInHealthScannerThreshold)); } - private NetAffliction[] GetAllAfflictions(CharacterHealth health) + private ImmutableArray GetAllAfflictions(CharacterHealth health) { - IEnumerable rawAfflictions = health.GetAllAfflictions().Where(a => IsHealable(a)); + IEnumerable rawAfflictions = health.GetAllAfflictions().Where(IsHealable); List afflictions = new List(); @@ -305,12 +313,12 @@ namespace Barotrauma afflictions.Add(newAffliction); } - return afflictions.ToArray(); + return afflictions.ToImmutableArray(); static int GetHealPrice(Affliction affliction) => (int)(affliction.Prefab.BaseHealCost + (affliction.Prefab.HealCostMultiplier * affliction.Strength)); } - public int GetTotalCost() => PendingHeals.SelectMany(h => h.Afflictions).Aggregate(0, (current, affliction) => current + affliction.Price); + public int GetTotalCost() => PendingHeals.SelectMany(static h => h.Afflictions).Aggregate(0, static (current, affliction) => current + affliction.Price); private int GetAdjustedPrice(int price) => campaign?.Map?.CurrentLocation is { Type: { HasOutpost: true } } currentLocation ? currentLocation.GetAdjustedHealCost(price) : int.MaxValue; @@ -325,7 +333,7 @@ namespace Barotrauma } #endif - return Character.CharacterList.Where(c => c.Info != null && c.TeamID == CharacterTeamType.Team1).Select(c => c.Info).ToImmutableArray(); + return Character.CharacterList.Where(static c => c.Info != null && c.TeamID == CharacterTeamType.Team1).Select(static c => c.Info).ToImmutableArray(); } #if DEBUG && CLIENT diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/CharacterInventory.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/CharacterInventory.cs index a660bbbf3..6872f409c 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/CharacterInventory.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/CharacterInventory.cs @@ -493,6 +493,10 @@ namespace Barotrauma base.PutItem(item, i, user, removeItem, createNetworkEvent); #if CLIENT CreateSlots(); + if (character == Character.Controlled) + { + HintManager.OnObtainedItem(character, item); + } #endif if (item.CampaignInteractionType == CampaignMode.InteractionType.Cargo) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Holdable.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Holdable.cs index aa5dc7d28..9572b9953 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Holdable.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Holdable.cs @@ -843,10 +843,18 @@ namespace Barotrauma.Items.Components public override void Update(float deltaTime, Camera cam) { if (item.body == null || !item.body.Enabled) { return; } + + Character owner = picker ?? item.GetRootInventoryOwner() as Character; + + if (owner != null) + { + ApplyStatusEffects(ActionType.OnActive, deltaTime, owner); + } + if (picker == null || !picker.HasEquippedItem(item)) { if (Pusher != null) { Pusher.Enabled = false; } - if (attachTargetCell == null) { IsActive = false; } + if (attachTargetCell == null && owner == null) { IsActive = false; } return; } @@ -855,23 +863,7 @@ namespace Barotrauma.Items.Components Drawable = true; } - Vector2 swing = Vector2.Zero; - if (swingAmount != Vector2.Zero && !picker.IsUnconscious && picker.Stun <= 0.0f) - { - swingState += deltaTime; - swingState %= 1.0f; - if (SwingWhenHolding || - (SwingWhenAiming && picker.IsKeyDown(InputType.Aim)) || - (SwingWhenUsing && picker.IsKeyDown(InputType.Aim) && picker.IsKeyDown(InputType.Shoot))) - { - swing = swingAmount * new Vector2( - PerlinNoise.GetPerlin(swingState * SwingSpeed * 0.1f, swingState * SwingSpeed * 0.1f) - 0.5f, - PerlinNoise.GetPerlin(swingState * SwingSpeed * 0.1f + 0.5f, swingState * SwingSpeed * 0.1f + 0.5f) - 0.5f); - } - } - - ApplyStatusEffects(ActionType.OnActive, deltaTime, picker); - + UpdateSwingPos(deltaTime, out Vector2 swingPos); if (item.body.Dir != picker.AnimController.Dir) { item.FlipX(relativeToSub: false); @@ -884,7 +876,7 @@ namespace Barotrauma.Items.Components scaledHandlePos[0] = handlePos[0] * item.Scale; scaledHandlePos[1] = handlePos[1] * item.Scale; bool aim = picker.IsKeyDown(InputType.Aim) && aimPos != Vector2.Zero && picker.CanAim; - picker.AnimController.HoldItem(deltaTime, item, scaledHandlePos, holdPos + swing, aimPos + swing, aim, holdAngle); + picker.AnimController.HoldItem(deltaTime, item, scaledHandlePos, holdPos + swingPos, aimPos + swingPos, aim, holdAngle); if (!aim) { var rope = GetRope(); @@ -921,6 +913,24 @@ namespace Barotrauma.Items.Components } } + public void UpdateSwingPos(float deltaTime, out Vector2 swingPos) + { + swingPos = Vector2.Zero; + if (swingAmount != Vector2.Zero && !picker.IsUnconscious && picker.Stun <= 0.0f) + { + swingState += deltaTime; + swingState %= 1.0f; + if (SwingWhenHolding || + (SwingWhenAiming && picker.IsKeyDown(InputType.Aim)) || + (SwingWhenUsing && picker.IsKeyDown(InputType.Aim) && picker.IsKeyDown(InputType.Shoot))) + { + swingPos = swingAmount * new Vector2( + PerlinNoise.GetPerlin(swingState * SwingSpeed * 0.1f, swingState * SwingSpeed * 0.1f) - 0.5f, + PerlinNoise.GetPerlin(swingState * SwingSpeed * 0.1f + 0.5f, swingState * SwingSpeed * 0.1f + 0.5f) - 0.5f); + } + } + } + public override void ReceiveSignal(Signal signal, Connection connection) { //do nothing diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/MeleeWeapon.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/MeleeWeapon.cs index f0b500c43..b1254de84 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/MeleeWeapon.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/MeleeWeapon.cs @@ -214,8 +214,9 @@ namespace Barotrauma.Items.Components bool aim = item.RequireAimToUse && picker.AllowInput && picker.IsKeyDown(InputType.Aim) && reloadTimer <= 0 && picker.CanAim; if (aim) { + UpdateSwingPos(deltaTime, out Vector2 swingPos); hitPos = MathUtils.WrapAnglePi(Math.Min(hitPos + deltaTime * 3f, MathHelper.PiOver4)); - ac.HoldItem(deltaTime, item, handlePos, aimPos, Vector2.Zero, aim: false, hitPos, holdAngle + hitPos, aimMelee: true); + ac.HoldItem(deltaTime, item, handlePos, aimPos + swingPos, Vector2.Zero, aim: false, hitPos, holdAngle + hitPos, aimMelee: true); if (ac.InWater) { ac.LockFlippingUntil = (float)Timing.TotalTime + Reload; @@ -392,34 +393,35 @@ namespace Barotrauma.Items.Components float damageMultiplier = 1 + User.GetStatValue(StatTypes.MeleeAttackMultiplier); damageMultiplier *= 1.0f + item.GetQualityModifier(Quality.StatType.StrikingPowerMultiplier); + Character user = User; Limb targetLimb = target.UserData as Limb; Character targetCharacter = targetLimb?.character ?? target.UserData as Character; if (Attack != null) { - Attack.SetUser(User); + Attack.SetUser(user); Attack.DamageMultiplier = damageMultiplier; if (targetLimb != null) { if (targetLimb.character.Removed) { return; } targetLimb.character.LastDamageSource = item; - Attack.DoDamageToLimb(User, targetLimb, item.WorldPosition, 1.0f); + Attack.DoDamageToLimb(user, targetLimb, item.WorldPosition, 1.0f); } else if (targetCharacter != null) { if (targetCharacter.Removed) { return; } targetCharacter.LastDamageSource = item; - Attack.DoDamage(User, targetCharacter, item.WorldPosition, 1.0f); + Attack.DoDamage(user, targetCharacter, item.WorldPosition, 1.0f); } else if ((target.UserData as Structure ?? targetFixture.UserData as Structure) is Structure targetStructure) { if (targetStructure.Removed) { return; } - Attack.DoDamage(User, targetStructure, item.WorldPosition, 1.0f); + Attack.DoDamage(user, targetStructure, item.WorldPosition, 1.0f); } else if (target.UserData is Item targetItem && targetItem.Prefab.DamagedByMeleeWeapons && targetItem.Condition > 0) { if (targetItem.Removed) { return; } - var attackResult = Attack.DoDamage(User, targetItem, item.WorldPosition, 1.0f); + var attackResult = Attack.DoDamage(user, targetItem, item.WorldPosition, 1.0f); #if CLIENT if (attackResult.Damage > 0.0f && targetItem.Prefab.ShowHealthBar) { @@ -435,7 +437,7 @@ namespace Barotrauma.Items.Components else if (target.UserData is Holdable holdable && holdable.CanPush) { if (holdable.Item.Removed) { return; } - Attack.DoDamage(User, holdable.Item, item.WorldPosition, 1.0f); + Attack.DoDamage(user, holdable.Item, item.WorldPosition, 1.0f); RestoreCollision(); hitting = false; User = null; @@ -448,29 +450,32 @@ namespace Barotrauma.Items.Components if (GameMain.NetworkMember != null && GameMain.NetworkMember.IsClient) { return; } - bool success = Rand.Range(0.0f, 0.5f) < DegreeOfSuccess(User); - -#if SERVER - if (GameMain.Server != null && targetCharacter != null) //TODO: Log structure hits + ActionType conditionalActionType = ActionType.OnSuccess; + if (user != null && Rand.Range(0.0f, 0.5f) > DegreeOfSuccess(user)) { - GameMain.Server.CreateEntityEvent(item, new Item.ApplyStatusEffectEventData( - success ? ActionType.OnUse : ActionType.OnFailure, - targetItemComponent: null, - targetCharacter, targetLimb)); - - string logStr = picker?.LogName + " used " + item.Name; - if (item.ContainedItems != null && item.ContainedItems.Any()) - { - logStr += " (" + string.Join(", ", item.ContainedItems.Select(i => i?.Name)) + ")"; - } - logStr += " on " + targetCharacter.LogName + "."; - Networking.GameServer.Log(logStr, Networking.ServerLog.MessageType.Attack); + conditionalActionType = ActionType.OnFailure; + } + if (GameMain.NetworkMember is { IsServer: true } server && targetCharacter != null) + { + server.CreateEntityEvent(item, new Item.ApplyStatusEffectEventData(conditionalActionType, targetItemComponent: null, targetCharacter, targetLimb)); + server.CreateEntityEvent(item, new Item.ApplyStatusEffectEventData(ActionType.OnUse, targetItemComponent: null, targetCharacter, targetLimb)); + #if SERVER + if (GameMain.Server != null) //TODO: Log structure hits + { + string logStr = picker?.LogName + " used " + item.Name; + if (item.ContainedItems != null && item.ContainedItems.Any()) + { + logStr += " (" + string.Join(", ", item.ContainedItems.Select(i => i?.Name)) + ")"; + } + logStr += " on " + targetCharacter.LogName + "."; + Networking.GameServer.Log(logStr, Networking.ServerLog.MessageType.Attack); + } + #endif } -#endif - if (targetCharacter != null) //TODO: Allow OnUse to happen on structures too maybe?? { - ApplyStatusEffects(success ? ActionType.OnUse : ActionType.OnFailure, 1.0f, targetCharacter, targetLimb, user: User, afflictionMultiplier: damageMultiplier); + ApplyStatusEffects(conditionalActionType, 1.0f, targetCharacter, targetLimb, user: user, afflictionMultiplier: damageMultiplier); + ApplyStatusEffects(ActionType.OnUse, 1.0f, targetCharacter, targetLimb, user: user, afflictionMultiplier: damageMultiplier); } if (DeleteOnUse) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Propulsion.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Propulsion.cs index cadea84be..fa2cf6dbd 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Propulsion.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Propulsion.cs @@ -23,6 +23,8 @@ namespace Barotrauma.Items.Components [Serialize(0.0f, IsPropertySaveable.No, description: "The force to apply to the user's body."), Editable(MinValueFloat = -1000.0f, MaxValueFloat = 1000.0f)] public float Force { get; set; } + [Serialize(true, IsPropertySaveable.No, description: "If the item is held in RightHand or LeftHand, apply extra force there")] + public bool ApplyToHands { get; set; } #if CLIENT private string particles; [Serialize("", IsPropertySaveable.No, description: "The name of the particle prefab the item emits when used.")] @@ -70,13 +72,16 @@ namespace Barotrauma.Items.Components character.AnimController.Collider.ApplyForce(propulsion); - if (character.Inventory.IsInLimbSlot(item, InvSlotType.RightHand)) - { - character.AnimController.GetLimb(LimbType.RightHand)?.body.ApplyForce(propulsion); - } - if (character.Inventory.IsInLimbSlot(item, InvSlotType.LeftHand)) - { - character.AnimController.GetLimb(LimbType.LeftHand)?.body.ApplyForce(propulsion); + if (ApplyToHands) + { + if (character.Inventory.IsInLimbSlot(item, InvSlotType.RightHand)) + { + character.AnimController.GetLimb(LimbType.RightHand)?.body.ApplyForce(propulsion); + } + if (character.Inventory.IsInLimbSlot(item, InvSlotType.LeftHand)) + { + character.AnimController.GetLimb(LimbType.LeftHand)?.body.ApplyForce(propulsion); + } } #if CLIENT diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/RangedWeapon.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/RangedWeapon.cs index 998d7d7c1..054856773 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/RangedWeapon.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/RangedWeapon.cs @@ -32,6 +32,20 @@ namespace Barotrauma.Items.Components set { reload = Math.Max(value, 0.0f); } } + [Serialize(0f, IsPropertySaveable.No, description: "Weapons skill requirement to reload at normal speed.")] + public float ReloadSkillRequirement + { + get; + set; + } + + [Serialize(1.0f, IsPropertySaveable.No, description: "Reload time at 0 skill level. Reload time scales with skill level up to the Weapons skill requirement.")] + public float ReloadNoSkill + { + get; + set; + } + [Serialize(false, IsPropertySaveable.No, description: "Tells the AI to hold the trigger down when it uses this weapon")] public bool HoldTrigger { @@ -39,7 +53,7 @@ namespace Barotrauma.Items.Components set; } - [Serialize(1, IsPropertySaveable.No, description: "How projectiles the weapon launches when fired once.")] + [Serialize(1, IsPropertySaveable.No, description: "How many projectiles the weapon launches when fired once.")] public int ProjectileCount { get; @@ -60,6 +74,23 @@ namespace Barotrauma.Items.Components set; } + [Serialize(0.0f, IsPropertySaveable.No, description: "The impulse applied to the physics body of the projectile (the higher the impulse, the faster the projectiles are launched). Sum of weapon + projectile.")] + public float LaunchImpulse + { + get; + set; + } + + [Serialize(0.0f, IsPropertySaveable.Yes, description: "Percentage of damage mitigation ignored when hitting armored body parts (deflecting limbs). Sum of weapon + projectile."), Editable(MinValueFloat = 0.0f, MaxValueFloat = 1f)] + public float Penetration { get; private set; } + + [Serialize(1f, IsPropertySaveable.Yes, description: "Weapon's damage modifier")] + public float WeaponDamageModifier + { + get; + private set; + } + [Serialize(0f, IsPropertySaveable.Yes, description: "The time required for a charge-type turret to charge up before able to fire.")] public float MaxChargeTime { @@ -99,6 +130,12 @@ namespace Barotrauma.Items.Components // TODO: should define this in xml if we have ranged weapons that don't require aim to use item.RequireAimToUse = true; characterUsable = true; + + if (ReloadSkillRequirement > 0 && ReloadNoSkill <= reload) + { + DebugConsole.AddWarning($"Invalid XML at {item.Name}: ReloadNoSkill is lower or equal than it's reload skill, despite having ReloadSkillRequirement."); + } + InitProjSpecific(element); } @@ -167,7 +204,15 @@ namespace Barotrauma.Items.Components if (currentChargeTime < MaxChargeTime) { return false; } IsActive = true; - ReloadTimer = reload / (1 + character?.GetStatValue(StatTypes.RangedAttackSpeed) ?? 0f); + float baseReloadTime = reload; + float weaponSkill = character.GetSkillLevel("weapons"); + if (ReloadSkillRequirement > 0 && ReloadNoSkill > reload && weaponSkill < ReloadSkillRequirement) + { + //Examples, assuming 40 weapon skill required: 1 - 40/40 = 0 ... 1 - 0/40 = 1 ... 1 - 20 / 40 = 0.5 + float reloadFailure = MathHelper.Clamp(1 - (weaponSkill / ReloadSkillRequirement), 0, 1); + baseReloadTime = MathHelper.Lerp(reload, ReloadNoSkill, reloadFailure); + } + ReloadTimer = baseReloadTime / (1 + character?.GetStatValue(StatTypes.RangedAttackSpeed) ?? 0f); currentChargeTime = 0f; if (character != null) @@ -218,9 +263,9 @@ namespace Barotrauma.Items.Components { lastProjectile?.Item.GetComponent()?.Snap(); } - float damageMultiplier = 1f + item.GetQualityModifier(Quality.StatType.FirepowerMultiplier); + float damageMultiplier = (1f + item.GetQualityModifier(Quality.StatType.FirepowerMultiplier)) * WeaponDamageModifier; projectile.Launcher = item; - projectile.Shoot(character, character.AnimController.AimSourceSimPos, barrelPos, rotation + spread, ignoredBodies: ignoredBodies.ToList(), createNetworkEvent: false, damageMultiplier); + projectile.Shoot(character, character.AnimController.AimSourceSimPos, barrelPos, rotation + spread, ignoredBodies: ignoredBodies.ToList(), createNetworkEvent: false, damageMultiplier, LaunchImpulse); projectile.Item.GetComponent()?.Attach(Item, projectile.Item); if (i == 0) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Throwable.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Throwable.cs index df595ca57..edf91b18e 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Throwable.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Holdable/Throwable.cs @@ -1,17 +1,26 @@ using Barotrauma.Networking; using Microsoft.Xna.Framework; using System.Linq; -using System.Xml.Linq; namespace Barotrauma.Items.Components { class Throwable : Holdable { - private float throwPos; - private bool throwing, throwDone; + enum ThrowState + { + None, + Initiated, + Throwing + } + + private const float ThrowAngleStart = -MathHelper.PiOver2, ThrowAngleEnd = MathHelper.PiOver2; + private float throwAngle = ThrowAngleStart; private bool midAir; + private ThrowState throwState; + + //continuous collision detection is used while the item is moving faster than this const float ContinuousCollisionThreshold = 5.0f; @@ -27,7 +36,6 @@ namespace Barotrauma.Items.Components public Throwable(Item item, ContentXElement element) : base(item, element) { - //throwForce = ToolBox.GetAttributeFloat(element, "throwforce", 1.0f); if (aimPos == Vector2.Zero) { aimPos = new Vector2(0.6f, 0.1f); @@ -36,22 +44,21 @@ namespace Barotrauma.Items.Components public override bool Use(float deltaTime, Character character = null) { - return characterUsable || character == null; //We do the actual throwing in Aim because Use might be used by chems + //actual throwing logic is handled in Update + return characterUsable || character == null; } public override bool SecondaryUse(float deltaTime, Character character = null) { - if (!throwDone) return false; //This should only be triggered in update - throwDone = false; - return true; + //actual throwing logic is handled in Update - SecondaryUse only triggers when the item is thrown + return false; } public override void Drop(Character dropper) { base.Drop(dropper); - - throwing = false; - throwPos = 0.0f; + throwState = ThrowState.None; + throwAngle = ThrowAngleStart; } public override void UpdateBroken(float deltaTime, Camera cam) @@ -100,13 +107,22 @@ namespace Barotrauma.Items.Components return; } - if (picker.IsKeyDown(InputType.Aim) && picker.IsKeyHit(InputType.Shoot)) { throwing = true; } - if (!picker.IsKeyDown(InputType.Aim) && !throwing) { throwPos = 0.0f; } - bool aim = picker.IsKeyDown(InputType.Aim) && picker.CanAim; + if (throwState != ThrowState.Throwing) + { + if (picker.IsKeyDown(InputType.Aim)) + { + if (picker.IsKeyDown(InputType.Shoot)) { throwState = ThrowState.Initiated; } + } + else if (throwState != ThrowState.Initiated) + { + throwAngle = ThrowAngleStart; + } + } + bool aim = picker.IsKeyDown(InputType.Aim) && picker.CanAim; if (picker.IsDead || !picker.AllowInput) { - throwing = false; + throwState = ThrowState.None; aim = false; } @@ -124,25 +140,29 @@ namespace Barotrauma.Items.Components item.Submarine = picker.Submarine; - if (!throwing) + if (throwState != ThrowState.Throwing) { - if (aim) + if (aim || throwState == ThrowState.Initiated) { - throwPos = MathUtils.WrapAnglePi(System.Math.Min(throwPos + deltaTime * 5.0f, MathHelper.PiOver2)); - ac.HoldItem(deltaTime, item, handlePos, aimPos, Vector2.Zero, aim: false, throwPos); + throwAngle = System.Math.Min(throwAngle + deltaTime * 8.0f, ThrowAngleEnd); + ac.HoldItem(deltaTime, item, handlePos, aimPos, Vector2.Zero, aim: false, throwAngle); + if (throwAngle >= ThrowAngleEnd && throwState == ThrowState.Initiated) + { + throwState = ThrowState.Throwing; + } } else { - throwPos = 0; + throwAngle = ThrowAngleStart; ac.HoldItem(deltaTime, item, handlePos, holdPos, Vector2.Zero, aim: false, holdAngle); } } else { - throwPos = MathUtils.WrapAnglePi(throwPos - deltaTime * 15.0f); - ac.HoldItem(deltaTime, item, handlePos, aimPos, Vector2.Zero, aim: false, throwPos); + throwAngle = MathUtils.WrapAnglePi(throwAngle - deltaTime * 15.0f); + ac.HoldItem(deltaTime, item, handlePos, aimPos, Vector2.Zero, aim: false, throwAngle); - if (throwPos < 0) + if (throwAngle < 0) { Vector2 throwVector = Vector2.Normalize(picker.CursorWorldPosition - picker.WorldPosition); //throw upwards if cursor is at the position of the character @@ -180,8 +200,7 @@ namespace Barotrauma.Items.Components Limb rightHand = ac.GetLimb(LimbType.RightHand); item.body.AngularVelocity = rightHand.body.AngularVelocity; - throwPos = 0; - throwDone = true; + throwAngle = ThrowAngleStart; IsActive = true; if (GameMain.NetworkMember is { IsServer: true }) @@ -193,7 +212,7 @@ namespace Barotrauma.Items.Components //Stun grenades, flares, etc. all have their throw-related things handled in "onSecondaryUse" ApplyStatusEffects(ActionType.OnSecondaryUse, deltaTime, CurrentThrower, user: CurrentThrower); } - throwing = false; + throwState = ThrowState.None; } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ItemContainer.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ItemContainer.cs index a1d69ce93..fac2fc0f0 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ItemContainer.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/ItemContainer.cs @@ -65,8 +65,16 @@ namespace Barotrauma.Items.Components public int Capacity { get { return capacity; } - set { capacity = Math.Max(value, 0); } + private set + { + capacity = Math.Max(value, 0); + MainContainerCapacity = value; + } } + /// + /// The capacity of the main container without taking the sub containers into account. Only differs when there's a sub container defined for the component. + /// + public int MainContainerCapacity { get; private set; } //how many items can be contained private int maxStackSize; @@ -229,6 +237,9 @@ namespace Barotrauma.Items.Components public ImmutableHashSet ContainableItemIdentifiers => containableItemIdentifiers; public List ContainableItems { get; } + public List AllSubContainableItems { get; } + + public readonly bool HasSubContainers; public ItemContainer(Item item, ContentXElement element) : base(item, element) @@ -251,6 +262,7 @@ namespace Barotrauma.Items.Components break; case "subcontainer": totalCapacity += subElement.GetAttributeInt("capacity", 1); + HasSubContainers = true; break; } } @@ -270,7 +282,7 @@ namespace Barotrauma.Items.Components int subCapacity = subElement.GetAttributeInt("capacity", 1); int subMaxStackSize = subElement.GetAttributeInt("maxstacksize", maxStackSize); - List subContainableItems = null; + var subContainableItems = new List(); foreach (var subSubElement in subElement.Elements()) { if (subSubElement.Name.ToString().ToLowerInvariant() != "containable") { continue; } @@ -281,8 +293,9 @@ namespace Barotrauma.Items.Components DebugConsole.ThrowError("Error in item config \"" + item.ConfigFilePath + "\" - containable with no identifiers."); continue; } - subContainableItems ??= new List(); subContainableItems.Add(containable); + AllSubContainableItems ??= new List(); + AllSubContainableItems.Add(containable); } for (int i = subContainerIndex; i < subContainerIndex + subCapacity; i++) @@ -357,6 +370,14 @@ namespace Barotrauma.Items.Components //no need to Update() if this item has no statuseffects and no physics body IsActive = activeContainedItems.Count > 0 || Inventory.AllItems.Any(it => it.body != null); + + if (IsActive && item.GetRootInventoryOwner() is Character owner && + owner.HasEquippedItem(item, predicate: slot => slot.HasFlag(InvSlotType.LeftHand) || slot.HasFlag(InvSlotType.RightHand))) + { + // Set the contained items active if there's an item inserted inside the container. Enables e.g. the rifle flashlight when it's attached to the rifle (put inside of it). + SetContainedActive(true); + } + OnContainedItemsChanged.Invoke(this); } @@ -409,6 +430,20 @@ namespace Barotrauma.Items.Components return false; } + public override void FlipX(bool relativeToSub) + { + base.FlipX(relativeToSub); + if (HideItems) { return; } + if (item.body == null) { return; } + foreach (Item containedItem in Inventory.AllItems) + { + if (containedItem.body != null && containedItem.body.Enabled && containedItem.body.Dir != item.body.Dir) + { + containedItem.FlipX(relativeToSub); + } + } + } + public override void Update(float deltaTime, Camera cam) { if (!string.IsNullOrEmpty(SpawnWithId) && !alwaysContainedItemsSpawned) @@ -477,7 +512,7 @@ namespace Barotrauma.Items.Components effect.HasTargetType(StatusEffect.TargetType.NearbyCharacters)) { targets.Clear(); - targets.AddRange(effect.GetNearbyTargets(item.WorldPosition, targets)); + effect.AddNearbyTargets(item.WorldPosition, targets); effect.Apply(ActionType.OnActive, deltaTime, item, targets); } } @@ -582,11 +617,53 @@ namespace Barotrauma.Items.Components public override void Drop(Character dropper) { IsActive = true; + SetContainedActive(false); } public override void Equip(Character character) { IsActive = true; + if (character != null && character.HasEquippedItem(item, predicate: slot => slot.HasFlag(InvSlotType.LeftHand) || slot.HasFlag(InvSlotType.RightHand))) + { + SetContainedActive(true); + } + } + + private void SetContainedActive(bool active) + { + foreach (Item containedItem in Inventory.AllItems) + { + RelatedItem containableItem = FindContainableItem(containedItem); + if (containableItem != null && containableItem.SetActive) + { + foreach (var ic in containedItem.Components) + { + ic.IsActive = active; + } + if (containedItem.body != null) + { + containedItem.body.Enabled = active; + if (active) + { + containedItem.body.PhysEnabled = false; + } + } + } + } + if (active) + { + FlipX(false); + } + } + + private RelatedItem FindContainableItem(Item item) + { + var relatedItem = ContainableItems?.FirstOrDefault(ci => ci.MatchesItem(item)); + if (relatedItem == null && AllSubContainableItems != null) + { + relatedItem = AllSubContainableItems.FirstOrDefault(ci => ci.MatchesItem(item)); + } + return relatedItem; } public override void ReceiveSignal(Signal signal, Connection connection) @@ -604,6 +681,7 @@ namespace Barotrauma.Items.Components } } +#warning There's some code duplication here and in DrawContainedItems() method, but it's not straightforward to get rid of it, because of slightly different logic and the usage of draw positions vs. positions etc. Should probably be splitted into smaller methods. public void SetContainedItemPositions() { Vector2 transformedItemPos = ItemPos * item.Scale; @@ -657,29 +735,70 @@ namespace Barotrauma.Items.Components transformedItemIntervalHorizontal = Vector2.Transform(transformedItemIntervalHorizontal, transform); transformedItemPos += item.Position; } - } - - float currentRotation = itemRotation; - if (item.body != null) - { - currentRotation *= item.body.Dir; - currentRotation += item.body.Rotation; - } - else - { - currentRotation += -item.RotationRad; } int i = 0; Vector2 currentItemPos = transformedItemPos; foreach (Item contained in Inventory.AllItems) { + Vector2 itemPos = currentItemPos; + var relatedItem = FindContainableItem(contained); + if (relatedItem != null) + { + if (relatedItem.Hide.HasValue && relatedItem.Hide.Value) { continue; } + if (relatedItem.ItemPos.HasValue) + { + Vector2 pos = relatedItem.ItemPos.Value; + if (item.body != null) + { + Matrix transform = Matrix.CreateRotationZ(item.body.Rotation); + pos.X *= item.body.Dir; + itemPos = Vector2.Transform(pos, transform) + item.body.Position; + } + else + { + itemPos = pos; + // This code is aped based on above. Not tested. + if (item.FlippedX) + { + itemPos.X = -itemPos.X; + itemPos.X += item.Rect.Width; + } + if (item.FlippedY) + { + itemPos.Y = -itemPos.Y; + itemPos.Y -= item.Rect.Height; + } + itemPos += new Vector2(item.Rect.X, item.Rect.Y); + if (Math.Abs(item.RotationRad) > 0.01f) + { + Matrix transform = Matrix.CreateRotationZ(item.RotationRad); + itemPos = Vector2.Transform(itemPos - item.Position, transform) + item.Position; + } + } + } + } + if (contained.body != null) { try { - Vector2 simPos = ConvertUnits.ToSimUnits(currentItemPos); - contained.body.FarseerBody.SetTransformIgnoreContacts(ref simPos, currentRotation); + Vector2 simPos = ConvertUnits.ToSimUnits(itemPos); + float rotation = itemRotation; + if (relatedItem != null && relatedItem.Rotation != 0) + { + rotation = MathHelper.ToRadians(relatedItem.Rotation); + } + if (item.body != null) + { + rotation *= item.body.Dir; + rotation += item.body.Rotation; + } + else + { + rotation += -item.RotationRad; + } + contained.body.FarseerBody.SetTransformIgnoreContacts(ref simPos, rotation); contained.body.SetPrevTransform(contained.body.SimPosition, contained.body.Rotation); contained.body.UpdateDrawPosition(); } @@ -695,8 +814,8 @@ namespace Barotrauma.Items.Components contained.Rect = new Rectangle( - (int)(currentItemPos.X - contained.Rect.Width / 2.0f), - (int)(currentItemPos.Y + contained.Rect.Height / 2.0f), + (int)(itemPos.X - contained.Rect.Width / 2.0f), + (int)(itemPos.Y + contained.Rect.Height / 2.0f), contained.Rect.Width, contained.Rect.Height); contained.Submarine = item.Submarine; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Deconstructor.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Deconstructor.cs index 21179fc74..f8df97352 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Deconstructor.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Deconstructor.cs @@ -459,6 +459,12 @@ namespace Barotrauma.Items.Components progressTimer = 0.0f; progressState = 0.0f; } +#if CLIENT + else + { + HintManager.OnStartDeconstructing(user, this); + } +#endif inputContainer.Inventory.Locked = IsActive; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Fabricator.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Fabricator.cs index 537366213..e2c8cd0b0 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Fabricator.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Fabricator.cs @@ -419,7 +419,7 @@ namespace Barotrauma.Items.Components } var fabricationIngredients = new AbilityFabricationItemIngredients(foundAvailableItems); - user.CheckTalents(AbilityEffectType.OnItemFabricatedIngredients, fabricationIngredients); + user?.CheckTalents(AbilityEffectType.OnItemFabricatedIngredients, fabricationIngredients); foreach (Item availableItem in fabricationIngredients.Items) { @@ -559,7 +559,7 @@ namespace Barotrauma.Items.Components if (fabricatedItem.TargetItem.ConfigElement.GetChildElement("Quality") == null) { return 0; } int quality = 0; float floatQuality = 0.0f; - floatQuality += user.GetStatValue(StatTypes.IncreaseFabricationQuality); + floatQuality += user.GetStatValue(StatTypes.IncreaseFabricationQuality, includeSaved: false); foreach (var tag in fabricatedItem.TargetItem.Tags) { floatQuality += user.Info.GetSavedStatValue(StatTypes.IncreaseFabricationQuality, tag); @@ -740,10 +740,27 @@ namespace Barotrauma.Items.Components //order by condition (prefer using worst-condition items) int index = 0; while (index < availableIngredients[itemIdentifier].Count && - availableIngredients[itemIdentifier][index].Condition < item.Condition) + compare(item, availableIngredients[itemIdentifier][index], inputContainer.Inventory) < 0) { index++; } + + static int compare(Item item1, Item item2, Inventory inputInventory) + { + bool item1InInputInventory = item1.ParentInventory == inputInventory; + bool item2InInputInventory = item2.ParentInventory == inputInventory; + //prefer items in the input inventory + if (item1InInputInventory != item2InInputInventory) + { + return item1InInputInventory ? 1 : -1; + } + else + { + //prefer items in worse condition + return Math.Sign(item2.Condition - item1.Condition); + } + } + availableIngredients[itemIdentifier].Insert(index, item); } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/MiniMap.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/MiniMap.cs index a3588ac5c..8a3cd4d15 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/MiniMap.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/MiniMap.cs @@ -15,6 +15,8 @@ namespace Barotrauma.Items.Components public float? ReceivedOxygenAmount, ReceivedWaterAmount; + public double LastOxygenDataTime, LastWaterDataTime; + public readonly HashSet Cards = new HashSet(); public bool Distort; @@ -83,7 +85,7 @@ namespace Barotrauma.Items.Components public override void Update(float deltaTime, Camera cam) { - //periodically reset all hull data + //reset data if we haven't received anything in a while //(so that outdated hull info won't be shown if detectors stop sending signals) if (DateTime.Now > resetDataTime) { @@ -91,8 +93,8 @@ namespace Barotrauma.Items.Components { if (!hullData.Distort) { - hullData.ReceivedOxygenAmount = null; - hullData.ReceivedWaterAmount = null; + if (Timing.TotalTime > hullData.LastOxygenDataTime + 1.0) { hullData.ReceivedOxygenAmount = null; } + if (Timing.TotalTime > hullData.LastWaterDataTime + 1.0) { hullData.ReceivedWaterAmount = null; } } } resetDataTime = DateTime.Now + new TimeSpan(0, 0, 1); @@ -159,6 +161,7 @@ namespace Barotrauma.Items.Components //cheating a bit because water detectors don't actually send the water level bool fromWaterDetector = source.GetComponent() != null; hullData.ReceivedWaterAmount = null; + hullData.LastWaterDataTime = Timing.TotalTime; if (fromWaterDetector) { hullData.ReceivedWaterAmount = WaterDetector.GetWaterPercentage(sourceHull); @@ -184,9 +187,10 @@ namespace Barotrauma.Items.Components oxy = Rand.Range(0.0f, 100.0f); } hullData.ReceivedOxygenAmount = oxy; + hullData.LastOxygenDataTime = Timing.TotalTime; foreach (var linked in sourceHull.linkedTo) { - if (!(linked is Hull linkedHull)) { continue; } + if (linked is not Hull linkedHull) { continue; } if (!hullDatas.TryGetValue(linkedHull, out HullData linkedHullData)) { linkedHullData = new HullData(); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Sonar.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Sonar.cs index 6e727c30d..250c5b37a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Sonar.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Sonar.cs @@ -197,11 +197,6 @@ namespace Barotrauma.Items.Components if (currentPingIndex != -1) { var activePing = activePings[currentPingIndex]; - if (item.AiTarget != null) - { - float range = MathUtils.InverseLerp(item.AiTarget.MinSoundRange, item.AiTarget.MaxSoundRange, Range * activePing.State / zoom); - item.AiTarget.SoundRange = MathHelper.Lerp(item.AiTarget.MinSoundRange, item.AiTarget.MaxSoundRange, range); - } if (activePing.State > 1.0f) { aiPingCheckPending = true; @@ -235,6 +230,11 @@ namespace Barotrauma.Items.Components for (var pingIndex = 0; pingIndex < activePingsCount;) { + if (item.AiTarget != null) + { + float range = MathUtils.InverseLerp(item.AiTarget.MinSoundRange, item.AiTarget.MaxSoundRange, Range * activePings[pingIndex].State / zoom); + item.AiTarget.SoundRange = Math.Max(item.AiTarget.SoundRange, MathHelper.Lerp(item.AiTarget.MinSoundRange, item.AiTarget.MaxSoundRange, range)); + } if (activePings[pingIndex].State > 1.0f) { var lastIndex = --activePingsCount; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Steering.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Steering.cs index 75776f814..90922ec50 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Steering.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Machines/Steering.cs @@ -144,6 +144,11 @@ namespace Barotrauma.Items.Components } } + public float TargetVelocityLengthSquared + { + get => TargetVelocity.LengthSquared(); + } + public Vector2 SteeringInput { get { return steeringInput; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Projectile.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Projectile.cs index a56e5afde..741afba2e 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Projectile.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Projectile.cs @@ -392,6 +392,7 @@ namespace Barotrauma.Items.Components } } User = character; + ApplyStatusEffects(ActionType.OnUse, 1.0f, User, user: User); return true; } @@ -916,23 +917,22 @@ namespace Barotrauma.Items.Components if (character != null) { character.LastDamageSource = item; } - ActionType actionType = ActionType.OnUse; - if (_user != null && Rand.Range(0.0f, 0.5f) > DegreeOfSuccess(_user)) + ActionType conditionalActionType = ActionType.OnSuccess; + if (User != null && Rand.Range(0.0f, 0.5f) > DegreeOfSuccess(User)) { - actionType = ActionType.OnFailure; + conditionalActionType = ActionType.OnFailure; } - #if CLIENT - PlaySound(actionType, user: _user); - PlaySound(ActionType.OnImpact, user: _user); + PlaySound(conditionalActionType, user: User); + PlaySound(ActionType.OnImpact, user: User); #endif if (GameMain.NetworkMember == null || GameMain.NetworkMember.IsServer) { if (target.Body.UserData is Limb targetLimb) { - ApplyStatusEffects(actionType, 1.0f, character, targetLimb, user: _user); - ApplyStatusEffects(ActionType.OnImpact, 1.0f, character, targetLimb, user: _user); + ApplyStatusEffects(conditionalActionType, 1.0f, character, targetLimb, user: User); + ApplyStatusEffects(ActionType.OnImpact, 1.0f, character, targetLimb, user: User); var attack = targetLimb.attack; if (attack != null) { @@ -941,8 +941,6 @@ namespace Barotrauma.Items.Components { if (effect.type == ActionType.OnImpact) { - //effect.Apply(effect.type, 1.0f, targetLimb.character, targetLimb.character, targetLimb.WorldPosition); - if (effect.HasTargetType(StatusEffect.TargetType.This)) { effect.Apply(effect.type, 1.0f, targetLimb.character, targetLimb.character, targetLimb.WorldPosition); @@ -951,32 +949,27 @@ namespace Barotrauma.Items.Components effect.HasTargetType(StatusEffect.TargetType.NearbyCharacters)) { targets.Clear(); - targets.AddRange(effect.GetNearbyTargets(targetLimb.WorldPosition, targets)); + effect.AddNearbyTargets(targetLimb.WorldPosition, targets); effect.Apply(ActionType.OnActive, 1.0f, targetLimb.character, targets); } - } } } -#if SERVER - if (GameMain.NetworkMember.IsServer) + if (GameMain.NetworkMember is { IsServer: true } server) { - GameMain.Server?.CreateEntityEvent(item, new Item.ApplyStatusEffectEventData(actionType, this, targetLimb.character, targetLimb, null, item.WorldPosition)); - GameMain.Server?.CreateEntityEvent(item, new Item.ApplyStatusEffectEventData(ActionType.OnImpact, this, targetLimb.character, targetLimb, null, item.WorldPosition)); + server.CreateEntityEvent(item, new Item.ApplyStatusEffectEventData(conditionalActionType, this, targetLimb.character, targetLimb, null, item.WorldPosition)); + server.CreateEntityEvent(item, new Item.ApplyStatusEffectEventData(ActionType.OnImpact, this, targetLimb.character, targetLimb, null, item.WorldPosition)); } -#endif } else { - ApplyStatusEffects(actionType, 1.0f, useTarget: target.Body.UserData as Entity, user: _user); - ApplyStatusEffects(ActionType.OnImpact, 1.0f, useTarget: target.Body.UserData as Entity, user: _user); -#if SERVER - if (GameMain.NetworkMember.IsServer) + ApplyStatusEffects(conditionalActionType, 1.0f, useTarget: target.Body.UserData as Entity, user: User); + ApplyStatusEffects(ActionType.OnImpact, 1.0f, useTarget: target.Body.UserData as Entity, user: User); + if (GameMain.NetworkMember is { IsServer: true } server) { - GameMain.Server?.CreateEntityEvent(item, new Item.ApplyStatusEffectEventData(actionType, this, null, null, target.Body.UserData as Entity, item.WorldPosition)); - GameMain.Server?.CreateEntityEvent(item, new Item.ApplyStatusEffectEventData(ActionType.OnImpact, this, null, null, target.Body.UserData as Entity, item.WorldPosition)); + server.CreateEntityEvent(item, new Item.ApplyStatusEffectEventData(conditionalActionType, this, null, null, target.Body.UserData as Entity, item.WorldPosition)); + server.CreateEntityEvent(item, new Item.ApplyStatusEffectEventData(ActionType.OnImpact, this, null, null, target.Body.UserData as Entity, item.WorldPosition)); } -#endif } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/LightComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/LightComponent.cs index 32f151379..1ccd035f9 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/LightComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/LightComponent.cs @@ -289,7 +289,7 @@ namespace Barotrauma.Items.Components #if CLIENT Light.ParentSub = item.Submarine; #endif - if (item.Container != null) + if (item.Container != null && !(item.GetRootInventoryOwner() is Character)) { SetLightSourceState(false, 0.0f); return; @@ -301,7 +301,7 @@ namespace Barotrauma.Items.Components if (body != null && !body.Enabled) { SetLightSourceState(false, 0.0f); - return; + return; } //currPowerConsumption = powerConsumption; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Item.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Item.cs index 8902fd99e..a5020cff3 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Item.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Item.cs @@ -138,7 +138,7 @@ namespace Barotrauma private ConcurrentQueue impactQueue; //a dictionary containing lists of the status effects in all the components of the item - private readonly bool[] hasStatusEffectsOfType; + private readonly bool[] hasStatusEffectsOfType = new bool[Enum.GetValues(typeof(ActionType)).Length]; private readonly Dictionary> statusEffectLists; public Dictionary SerializableProperties { get; protected set; } @@ -630,7 +630,7 @@ namespace Barotrauma { if (!spawnedInCurrentOutpost && value) { - OriginalOutpost = GameMain.GameSession?.StartLocation?.BaseName ?? ""; + OriginalOutpost = GameMain.GameSession?.LevelData?.Seed; } spawnedInCurrentOutpost = value; } @@ -651,7 +651,9 @@ namespace Barotrauma set { originalOutpost = value; - if (!string.IsNullOrEmpty(value) && GameMain.GameSession?.LevelData?.Type == LevelData.LevelType.Outpost && GameMain.GameSession?.StartLocation?.BaseName == value) + if (!string.IsNullOrEmpty(value) && + GameMain.GameSession?.LevelData?.Type == LevelData.LevelType.Outpost && + GameMain.GameSession?.LevelData?.Seed == value) { spawnedInCurrentOutpost = true; } @@ -1005,7 +1007,6 @@ namespace Barotrauma } } - hasStatusEffectsOfType = new bool[Enum.GetValues(typeof(ActionType)).Length]; foreach (ItemComponent ic in components) { if (ic is Pickable pickable) @@ -1654,7 +1655,7 @@ namespace Barotrauma if (effect.HasTargetType(StatusEffect.TargetType.NearbyCharacters) || effect.HasTargetType(StatusEffect.TargetType.NearbyItems)) { - targets.AddRange(effect.GetNearbyTargets(WorldPosition, targets)); + effect.AddNearbyTargets(WorldPosition, targets); if (targets.Count > 0) { hasTargets = true; @@ -2764,18 +2765,20 @@ namespace Barotrauma if (!ic.HasRequiredContainedItems(user, addMessage: user == Character.Controlled)) { continue; } bool success = Rand.Range(0.0f, 0.5f) < ic.DegreeOfSuccess(user); - ActionType actionType = success ? ActionType.OnUse : ActionType.OnFailure; + ActionType conditionalActionType = success ? ActionType.OnSuccess : ActionType.OnFailure; #if CLIENT - ic.PlaySound(actionType, user); + ic.PlaySound(conditionalActionType, user); + ic.PlaySound(ActionType.OnUse, user); #endif ic.WasUsed = true; - ic.ApplyStatusEffects(actionType, 1.0f, character, targetLimb, user: user); + + ic.ApplyStatusEffects(conditionalActionType, 1.0f, character, targetLimb, user: user); + ic.ApplyStatusEffects(ActionType.OnUse, 1.0f, character, targetLimb, user: user); if (GameMain.NetworkMember is { IsServer: true }) { - GameMain.NetworkMember.CreateEntityEvent(this, new ApplyStatusEffectEventData( - actionType, ic, character, targetLimb)); + GameMain.NetworkMember.CreateEntityEvent(this, new ApplyStatusEffectEventData(conditionalActionType, ic, character, targetLimb)); } if (ic.DeleteOnUse) { remove = true; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/ItemPrefab.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/ItemPrefab.cs index 478b231fa..4dafd2d11 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/ItemPrefab.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/ItemPrefab.cs @@ -814,8 +814,6 @@ namespace Barotrauma ? category : MapEntityCategory.Misc; - var parentType = ConfigElement.Parent?.GetAttributeIdentifier("itemtype", ""); - //nameidentifier can be used to make multiple items use the same names and descriptions Identifier nameIdentifier = ConfigElement.GetAttributeIdentifier("nameidentifier", ""); @@ -831,7 +829,7 @@ namespace Barotrauma name = name.Fallback(OriginalName); } - if (parentType == "wrecked") + if (category == MapEntityCategory.Wrecked) { name = TextManager.GetWithVariable("wreckeditemformat", "[name]", name); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/RelatedItem.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/RelatedItem.cs index 26b7d6e00..5de6d463e 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/RelatedItem.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/RelatedItem.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; using System.Xml.Linq; +using Microsoft.Xna.Framework; using Barotrauma.Extensions; namespace Barotrauma @@ -57,6 +58,20 @@ namespace Barotrauma /// public int TargetSlot = -1; + /// + /// Overrides the position defined in ItemContainer. + /// + public Vector2? ItemPos; + + /// + /// Only affects when ItemContainer.hideItems is false. Doesn't override the value. + /// + public bool? Hide; + + public float Rotation; + + public bool SetActive; + public string JoinedIdentifiers { get { return string.Join(",", Identifiers); } @@ -202,7 +217,18 @@ namespace Barotrauma new XAttribute("requireempty", RequireEmpty), new XAttribute("excludefullcondition", ExcludeFullCondition), new XAttribute("targetslot", TargetSlot), - new XAttribute("allowvariants", AllowVariants)); + new XAttribute("allowvariants", AllowVariants), + new XAttribute("rotation", Rotation), + new XAttribute("setactive", SetActive)); + + if (Hide.HasValue) + { + element.Add(new XAttribute(nameof(Hide), Hide.Value)); + } + if (ItemPos.HasValue) + { + element.Add(new XAttribute(nameof(ItemPos), ItemPos.Value)); + } if (excludedIdentifiers.Count > 0) { @@ -267,8 +293,18 @@ namespace Barotrauma ExcludeBroken = element.GetAttributeBool("excludebroken", true), RequireEmpty = element.GetAttributeBool("requireempty", false), ExcludeFullCondition = element.GetAttributeBool("excludefullcondition", false), - AllowVariants = element.GetAttributeBool("allowvariants", true) + AllowVariants = element.GetAttributeBool("allowvariants", true), + Rotation = element.GetAttributeFloat("rotation", 0f), + SetActive = element.GetAttributeBool("setactive", false) }; + if (element.GetAttribute(nameof(Hide)) != null) + { + ri.Hide = element.GetAttributeBool(nameof(Hide), false); + } + if (element.GetAttribute(nameof(ItemPos)) != null) + { + ri.ItemPos = element.GetAttributeVector2(nameof(ItemPos), Vector2.Zero); + } string typeStr = element.GetAttributeString("type", ""); if (string.IsNullOrEmpty(typeStr)) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Biome.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Biome.cs index ee915e10e..1144fc52b 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Biome.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Biome.cs @@ -1,3 +1,5 @@ +using Barotrauma.Extensions; +using System.Collections.Generic; using System.Collections.Immutable; namespace Barotrauma @@ -18,6 +20,14 @@ namespace Barotrauma public readonly ImmutableHashSet AllowedZones; + private readonly SubmarineAvailability? submarineAvailability; + private readonly ImmutableHashSet submarineAvailabilityOverrides; + + public readonly record struct SubmarineAvailability( + Identifier LocationType, + SubmarineClass Class = SubmarineClass.Undefined, + int MaxTier = 0); + public Biome(ContentXElement element, LevelGenerationParametersFile file) : base(file, ParseIdentifier(element)) { OldIdentifier = element.GetAttributeIdentifier("oldidentifier", Identifier.Empty); @@ -34,6 +44,26 @@ namespace Barotrauma AllowedZones = element.GetAttributeIntArray("AllowedZones", new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }).ToImmutableHashSet(); MinDifficulty = element.GetAttributeFloat("MinDifficulty", 0); maxDifficulty = element.GetAttributeFloat("MaxDifficulty", 100); + + var submarineAvailabilityOverrides = new HashSet(); + if (element.GetChildElement("submarines") is ContentXElement availabilityElement) + { + submarineAvailability = GetAvailability(availabilityElement); + foreach (var overrideElement in availabilityElement.GetChildElements("override")) + { + var availabilityOverride = GetAvailability(overrideElement); + submarineAvailabilityOverrides.Add(availabilityOverride); + } + } + this.submarineAvailabilityOverrides = submarineAvailabilityOverrides.ToImmutableHashSet(); + + static SubmarineAvailability GetAvailability(ContentXElement element) + { + return new SubmarineAvailability( + LocationType: element.GetAttributeIdentifier("locationtype", Identifier.Empty), + Class: element.GetAttributeEnum("class", SubmarineClass.Undefined), + MaxTier: element.GetAttributeInt("maxtier", 0)); + } } public static Identifier ParseIdentifier(ContentXElement element) @@ -47,6 +77,31 @@ namespace Barotrauma return identifier; } + public int HighestSubmarineTierAvailable(SubmarineClass subClass, Identifier locationType) + { + if (!submarineAvailability.HasValue) + { + // If the availability is not explicitly defined, make all subs available + return SubmarineInfo.HighestTier; + } + int maxTier = submarineAvailability.Value.MaxTier; + if (submarineAvailabilityOverrides.FirstOrNull(a => a.LocationType == locationType && a.Class == subClass) is SubmarineAvailability locationAndClassOverride) + { + maxTier = locationAndClassOverride.MaxTier; + } + else if (submarineAvailabilityOverrides.FirstOrNull(a => a.LocationType == locationType && a.Class == SubmarineClass.Undefined) is SubmarineAvailability locationOverride) + { + maxTier = locationOverride.MaxTier; + } + else if (submarineAvailabilityOverrides.FirstOrNull(a => a.LocationType == Identifier.Empty && a.Class == subClass) is SubmarineAvailability classOverride) + { + maxTier = classOverride.MaxTier; + } + return maxTier; + } + + public bool IsSubmarineAvailable(SubmarineInfo info, Identifier locationType) => info.Tier <= HighestSubmarineTierAvailable(info.SubmarineClass, locationType); + public override void Dispose() { } } } \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Level.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Level.cs index 433b711a2..46adf35e2 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Level.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/Level.cs @@ -447,7 +447,7 @@ namespace Barotrauma private Level(LevelData levelData) : base(null, 0) { - this.LevelData = levelData; + LevelData = levelData; borders = new Rectangle(Point.Zero, levelData.Size); } @@ -3939,7 +3939,7 @@ namespace Barotrauma } SubmarineInfo outpostInfo; - Submarine outpost; + Submarine outpost = null; if (i == 0 && preSelectedStartOutpost == null || i == 1 && preSelectedEndOutpost == null) { if (OutpostGenerationParams.OutpostParams.Any() || LevelData.ForceOutpostGenerationParams != null) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/LevelData.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/LevelData.cs index 4120c334a..8e9ca73d1 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/LevelData.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/LevelData.cs @@ -59,6 +59,7 @@ namespace Barotrauma public readonly List EventHistory = new List(); public readonly List NonRepeatableEvents = new List(); + public readonly HashSet UsedUniqueSets = new HashSet(); public bool EventsExhausted { get; set; } @@ -143,10 +144,11 @@ namespace Barotrauma string[] nonRepeatablePrefabNames = element.GetAttributeStringArray("nonrepeatableevents", new string[] { }); NonRepeatableEvents.AddRange(EventPrefab.Prefabs.Where(p => nonRepeatablePrefabNames.Any(n => p.Identifier == n))); + UsedUniqueSets = element.GetAttributeIdentifierArray(nameof(UsedUniqueSets), Array.Empty()).ToHashSet(); + EventsExhausted = element.GetAttributeBool(nameof(EventsExhausted).ToLower(), false); } - /// /// Instantiates level data using the properties of the connection (seed, size, difficulty) /// @@ -284,6 +286,12 @@ namespace Barotrauma newElement.Add(new XAttribute("nonrepeatableevents", string.Join(',', NonRepeatableEvents.Select(p => p.Identifier)))); } } + + if (UsedUniqueSets.Any()) + { + newElement.Add(new XAttribute(nameof(UsedUniqueSets), string.Join(',', UsedUniqueSets))); + } + parentElement.Add(newElement); } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/LevelObjects/LevelObjectPrefab.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/LevelObjects/LevelObjectPrefab.cs index a2ad86140..213fad7bf 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/LevelObjects/LevelObjectPrefab.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/LevelObjects/LevelObjectPrefab.cs @@ -287,6 +287,13 @@ namespace Barotrauma private set; } + [Serialize("1.0,1.0,1.0,1.0", IsPropertySaveable.Yes), Editable] + public Color SpriteColor + { + get; + private set; + } + public string Name => Identifier.Value; public List ChildObjects diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/LevelObjects/LevelTrigger.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/LevelObjects/LevelTrigger.cs index 480163ffa..a5c1b3f85 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/LevelObjects/LevelTrigger.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Levels/LevelObjects/LevelTrigger.cs @@ -661,7 +661,7 @@ namespace Barotrauma if (effect.HasTargetType(StatusEffect.TargetType.NearbyItems) || effect.HasTargetType(StatusEffect.TargetType.NearbyCharacters)) { targets.Clear(); - targets.AddRange(effect.GetNearbyTargets(worldPosition, targets)); + effect.AddNearbyTargets(worldPosition, targets); effect.Apply(effect.type, deltaTime, triggerer, targets); } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Map/Location.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Map/Location.cs index 80b11198b..a8426ed70 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Map/Location.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Map/Location.cs @@ -61,7 +61,7 @@ namespace Barotrauma private LocationType addInitialMissionsForType; - public bool Discovered { get; private set; } + public bool Discovered => GameMain.GameSession?.Map?.IsDiscovered(this) ?? false; public readonly Dictionary ProximityTimer = new Dictionary(); public (LocationTypeChange typeChange, int delay, MissionPrefab parentMission)? PendingLocationTypeChange; @@ -287,12 +287,12 @@ namespace Barotrauma var characters = GameSession.GetSessionCrewCharacters(CharacterType.Both); if (characters.Any()) { - if (Location.Reputation?.Faction is { } faction && faction.IsAffiliated()) + if (Location.Reputation?.Faction is { } faction && faction.GetPlayerAffiliationStatus() is FactionAffiliation.Affiliated) { price *= 1f - characters.Max(static c => c.GetStatValue(StatTypes.StoreBuyMultiplierAffiliated)); } - price *= 1f - characters.Max(static c => c.GetStatValue(StatTypes.StoreBuyMultiplier)); - price *= 1f + characters.Max(c => item.Tags.Sum(tag => c.Info.GetSavedStatValue(StatTypes.StoreBuyMultiplier, tag))); + price *= 1f - characters.Max(static c => c.GetStatValue(StatTypes.StoreBuyMultiplier, includeSaved: false)); + price *= 1f - characters.Max(c => item.Tags.Sum(tag => c.Info.GetSavedStatValue(StatTypes.StoreBuyMultiplier, tag))); } // Price should never go below 1 mk return Math.Max((int)price, 1); @@ -497,7 +497,6 @@ namespace Barotrauma baseName = element.GetAttributeString("basename", ""); Name = element.GetAttributeString("name", ""); MapPosition = element.GetAttributeVector2("position", Vector2.Zero); - Discovered = element.GetAttributeBool("discovered", false); PriceMultiplier = element.GetAttributeFloat("pricemultiplier", 1.0f); IsGateBetweenBiomes = element.GetAttributeBool("isgatebetweenbiomes", false); MechanicalPriceMultiplier = element.GetAttributeFloat("mechanicalpricemultipler", 1.0f); @@ -1292,14 +1291,17 @@ namespace Barotrauma return characters.Sum(c => (int)c.GetStatValue(StatTypes.ExtraSpecialSalesCount)); } - public void Discover(bool checkTalents = true) + public int HighestSubmarineTierAvailable(SubmarineClass submarineClass) { - if (Discovered) { return; } - Discovered = true; - if (checkTalents) - { - GameSession.GetSessionCrewCharacters(CharacterType.Both).ForEach(c => c.CheckTalents(AbilityEffectType.OnLocationDiscovered, new AbilityLocation(this))); - } + if (!HasOutpost()) { return 0; } + return Biome?.HighestSubmarineTierAvailable(submarineClass, Type.Identifier) ?? SubmarineInfo.HighestTier; + } + + public int HighestSubmarineTierAvailable() => HighestSubmarineTierAvailable(SubmarineClass.Undefined); + + public bool IsSubmarineAvailable(SubmarineInfo info) + { + return Biome?.IsSubmarineAvailable(info, Type.Identifier) ?? true; } public void Reset() @@ -1313,7 +1315,6 @@ namespace Barotrauma ClearMissions(); LevelData?.EventHistory?.Clear(); UnlockInitialMissions(); - Discovered = false; } public XElement Save(Map map, XElement parentElement) @@ -1324,7 +1325,6 @@ namespace Barotrauma new XAttribute("basename", BaseName), new XAttribute("name", Name), new XAttribute("biome", Biome?.Identifier.Value ?? string.Empty), - new XAttribute("discovered", Discovered), new XAttribute("position", XMLExtensions.Vector2ToString(MapPosition)), new XAttribute("pricemultiplier", PriceMultiplier), new XAttribute("isgatebetweenbiomes", IsGateBetweenBiomes), @@ -1453,7 +1453,7 @@ namespace Barotrauma HireManager?.Remove(); } - class AbilityLocation : AbilityObject, IAbilityLocation + public class AbilityLocation : AbilityObject, IAbilityLocation { public AbilityLocation(Location location) { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Map/LocationType.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Map/LocationType.cs index 97651462a..fdb6aad08 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Map/LocationType.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Map/LocationType.cs @@ -24,6 +24,7 @@ namespace Barotrauma public readonly Dictionary MinCountPerZone = new Dictionary(); public readonly LocalizedString Name; + public readonly LocalizedString Description; public readonly float BeaconStationChance; @@ -70,6 +71,13 @@ namespace Barotrauma public Sprite Sprite { get; private set; } public Sprite RadiationSprite { get; } + private readonly Identifier forceOutpostGenerationParamsIdentifier; + + /// + /// If set to true, only event sets that explicitly define this location type in can be selected at this location. Defaults to false. + /// + public bool IgnoreGenericEvents { get; } + public Color SpriteColor { get; @@ -96,6 +104,7 @@ namespace Barotrauma public LocationType(ContentXElement element, LocationTypesFile file) : base(file, element.GetAttributeIdentifier("identifier", element.Name.LocalName)) { Name = TextManager.Get("LocationName." + Identifier, "unknown"); + Description = TextManager.Get("LocationDescription." + Identifier, ""); BeaconStationChance = element.GetAttributeFloat("beaconstationchance", 0.0f); @@ -110,6 +119,10 @@ namespace Barotrauma ReplaceInRadiation = element.GetAttributeIdentifier(nameof(ReplaceInRadiation), Identifier.Empty); + forceOutpostGenerationParamsIdentifier = element.GetAttributeIdentifier("forceoutpostgenerationparams", Identifier.Empty); + + IgnoreGenericEvents = element.GetAttributeBool(nameof(IgnoreGenericEvents), false); + string teamStr = element.GetAttributeString("outpostteam", "FriendlyNPC"); Enum.TryParse(teamStr, out OutpostTeam); @@ -261,6 +274,15 @@ namespace Barotrauma } } + public OutpostGenerationParams GetForcedOutpostGenerationParams() + { + if (OutpostGenerationParams.OutpostParams.TryGet(forceOutpostGenerationParamsIdentifier, out var parameters)) + { + return parameters; + } + return null; + } + public override void Dispose() { } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Map/Map.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Map/Map.cs index 3da878131..cdcfaedab 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Map/Map.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Map/Map.cs @@ -68,10 +68,15 @@ namespace Barotrauma public List Locations { get; private set; } + private readonly List locationsDiscovered = new List(); + private readonly List outpostsVisited = new List(); + public List Connections { get; private set; } public Radiation Radiation; + private bool wasLocationDiscoveryOrderTracked = true; + public Map(CampaignSettings settings) { generationParams = MapGenerationParams.Instance; @@ -282,7 +287,12 @@ namespace Barotrauma } } - CurrentLocation.Discover(true); + if (campaign.IsSinglePlayer && campaign.Settings.TutorialEnabled && LocationType.Prefabs.TryGet("tutorialoutpost", out var tutorialOutpost)) + { + CurrentLocation.ChangeType(tutorialOutpost); + } + Discover(CurrentLocation); + Visit(CurrentLocation); CurrentLocation.CreateStores(); foreach (var location in Locations) @@ -820,7 +830,8 @@ namespace Barotrauma SelectedConnection.Passed = true; CurrentLocation = SelectedLocation; - CurrentLocation.Discover(); + Discover(CurrentLocation); + Visit(CurrentLocation); SelectedLocation = null; CurrentLocation.CreateStores(); @@ -851,7 +862,7 @@ namespace Barotrauma Location prevLocation = CurrentLocation; CurrentLocation = Locations[index]; - CurrentLocation.Discover(); + Discover(CurrentLocation); CurrentLocation.CreateStores(); if (prevLocation != CurrentLocation) @@ -1184,6 +1195,51 @@ namespace Barotrauma partial void ClearAnimQueue(); + public void Discover(Location location, bool checkTalents = true) + { + if (location is null) { return; } + if (locationsDiscovered.Contains(location)) { return; } + locationsDiscovered.Add(location); + if (checkTalents) + { + GameSession.GetSessionCrewCharacters(CharacterType.Both).ForEach(c => c.CheckTalents(AbilityEffectType.OnLocationDiscovered, new Location.AbilityLocation(location))); + } + } + + public void Visit(Location location) + { + if (location is null) { return; } + if (!location.HasOutpost()) { return; } + if (outpostsVisited.Contains(location)) { return; } + outpostsVisited.Add(location); + } + + public void ClearLocationHistory() + { + locationsDiscovered.Clear(); + outpostsVisited.Clear(); + } + + public int? GetDiscoveryIndex(Location location) + { + if (!wasLocationDiscoveryOrderTracked) { return null; } + if (location is null) { return -1; } + return locationsDiscovered.IndexOf(location); + } + + public int? GetVisitIndex(Location location) + { + if (!wasLocationDiscoveryOrderTracked) { return null; } + if (location is null) { return -1; } + return outpostsVisited.IndexOf(location); + } + + public bool IsDiscovered(Location location) + { + if (location is null) { return false; } + return locationsDiscovered.Contains(location); + } + /// /// Load a previously saved map from an xml element /// @@ -1211,6 +1267,7 @@ namespace Barotrauma return; } + ClearLocationHistory(); foreach (var subElement in element.Elements()) { switch (subElement.Name.ToString().ToLowerInvariant()) @@ -1226,19 +1283,12 @@ namespace Barotrauma } } location.LoadLocationTypeChange(subElement); + + // Backwards compatibility if (subElement.GetAttributeBool("discovered", false)) { - location.Discover(checkTalents: false); - } - if (location.Discovered) - { -#if CLIENT - RemoveFogOfWar(location); -#endif - if (furthestDiscoveredLocation == null || location.MapPosition.X > furthestDiscoveredLocation.MapPosition.X) - { - furthestDiscoveredLocation = location; - } + Discover(location); + wasLocationDiscoveryOrderTracked = false; } Identifier locationType = subElement.GetAttributeIdentifier("type", Identifier.Empty); @@ -1268,6 +1318,36 @@ namespace Barotrauma case "radiation": Radiation = new Radiation(this, generationParams.RadiationParams, subElement); break; + case "discovered": + foreach (var childElement in subElement.GetChildElements("location")) + { + int index = childElement.GetAttributeInt("i", -1); + if (index < 0) { continue; } + if (Locations[index] is not Location l) { continue; } + Discover(l); + } + break; + case "visited": + foreach (var childElement in subElement.GetChildElements("location")) + { + int index = childElement.GetAttributeInt("i", -1); + if (index < 0) { continue; } + if (Locations[index] is not Location l) { continue; } + Visit(l); + } + break; + } + } + + void Discover(Location location) + { + this.Discover(location, checkTalents: false); +#if CLIENT + RemoveFogOfWar(location); +#endif + if (furthestDiscoveredLocation == null || location.MapPosition.X > furthestDiscoveredLocation.MapPosition.X) + { + furthestDiscoveredLocation = location; } } @@ -1343,6 +1423,30 @@ namespace Barotrauma mapElement.Add(Radiation.Save()); } + if (locationsDiscovered.Any()) + { + var discoveryElement = new XElement("discovered"); + foreach (Location location in locationsDiscovered) + { + int index = Locations.IndexOf(location); + var locationElement = new XElement("location", new XAttribute("i", index)); + discoveryElement.Add(locationElement); + } + mapElement.Add(discoveryElement); + } + + if (outpostsVisited.Any()) + { + var visitElement = new XElement("visited"); + foreach (Location location in outpostsVisited) + { + int index = Locations.IndexOf(location); + var locationElement = new XElement("location", new XAttribute("i", index)); + visitElement.Add(locationElement); + } + mapElement.Add(visitElement); + } + element.Add(mapElement); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Outposts/OutpostGenerationParams.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Outposts/OutpostGenerationParams.cs index 6e9b95be9..aa8082144 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Outposts/OutpostGenerationParams.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Outposts/OutpostGenerationParams.cs @@ -96,6 +96,8 @@ namespace Barotrauma [Serialize("", IsPropertySaveable.Yes), Editable] public string ReplaceInRadiation { get; set; } + public ContentPath OutpostFilePath { get; set; } + public class ModuleCount { public Identifier Identifier; @@ -182,6 +184,7 @@ namespace Barotrauma Name = element.GetAttributeString("name", Identifier.Value); allowedLocationTypes = element.GetAttributeIdentifierArray("allowedlocationtypes", Array.Empty()).ToHashSet(); SerializableProperties = SerializableProperty.DeserializeProperties(this, element); + OutpostFilePath = element.GetAttributeContentPath(nameof(OutpostFilePath)); var humanPrefabCollections = new List>(); foreach (var subElement in element.Elements()) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Outposts/OutpostGenerator.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Outposts/OutpostGenerator.cs index 30217e2a5..9c76e0bb2 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Outposts/OutpostGenerator.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Outposts/OutpostGenerator.cs @@ -143,7 +143,7 @@ namespace Barotrauma //select which module types the outpost should consist of List pendingModuleFlags = onlyEntrance ? - generationParams.ModuleCounts.First().Identifier.ToEnumerable().ToList() : + (generationParams.ModuleCounts.FirstOrDefault()?.Identifier.ToEnumerable() ?? Enumerable.Empty()).ToList() : SelectModules(outpostModules, generationParams); foreach (Identifier flag in pendingModuleFlags) @@ -246,6 +246,7 @@ namespace Barotrauma var outpostFiles = ContentPackageManager.EnabledPackages.All .SelectMany(p => p.GetFiles()) + .Where(f => !TutorialPrefab.Prefabs.Any(tp => tp.OutpostPath == f.Path)) .OrderBy(f => f.UintIdentifier).ToArray(); if (!outpostFiles.Any()) { @@ -696,6 +697,14 @@ namespace Barotrauma rect.Location += (module.Offset + module.MoveOffset).ToPoint(); rect.Y += module.Bounds.Height; + Vector2? selfGapPos1 = null; + Vector2? selfGapPos2 = null; + if (module.PreviousModule != null) + { + selfGapPos1 = module.Offset + module.ThisGap.Position + module.MoveOffset; + selfGapPos2 = module.PreviousModule.Offset + module.PreviousGap.Position + module.PreviousModule.MoveOffset; + } + foreach (PlacedModule otherModule in modules) { if (otherModule == module || otherModule.PreviousModule == null || otherModule.PreviousModule == module) { continue; } @@ -710,7 +719,17 @@ namespace Barotrauma Vector2 gapPos1 = otherModule.Offset + otherModule.ThisGap.Position + gapEdgeOffset + otherModule.MoveOffset; Vector2 gapPos2 = otherModule.PreviousModule.Offset + otherModule.PreviousGap.Position + gapEdgeOffset + otherModule.PreviousModule.MoveOffset; - if (Submarine.RectContains(rect, gapPos1) || Submarine.RectContains(rect, gapPos2) || MathUtils.GetLineRectangleIntersection(gapPos1, gapPos2, rect, out _)) + if (Submarine.RectContains(rect, gapPos1) || + Submarine.RectContains(rect, gapPos2) || + MathUtils.GetLineRectangleIntersection(gapPos1, gapPos2, rect, out _)) + { + return true; + } + + //check if the connection overlaps with this module's connection + if (selfGapPos1.HasValue && selfGapPos2.HasValue && + !gapPos1.NearlyEquals(gapPos2) && !selfGapPos1.Value.NearlyEquals(selfGapPos2.Value) && + MathUtils.LinesIntersect(gapPos1, gapPos2, selfGapPos1.Value, selfGapPos2.Value)) { return true; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/PriceInfo.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/PriceInfo.cs index 38cf694b1..532ce3957 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/PriceInfo.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/PriceInfo.cs @@ -55,7 +55,7 @@ namespace Barotrauma public PriceInfo(int price, bool canBeBought, int minAmount = 0, int maxAmount = 0, bool canBeSpecial = true, int minLevelDifficulty = 0, float buyingPriceMultiplier = 1f, - bool displayNonEmpty = false, string storeIdentifier = null) + bool displayNonEmpty = false, bool requiresUnlock = false, string storeIdentifier = null) { Price = price; CanBeBought = canBeBought; @@ -67,6 +67,7 @@ namespace Barotrauma CanBeSpecial = canBeSpecial; DisplayNonEmpty = displayNonEmpty; StoreIdentifier = new Identifier(storeIdentifier); + RequiresUnlock = requiresUnlock; } public static List CreatePriceInfos(XElement element, out PriceInfo defaultPrice) @@ -81,6 +82,7 @@ namespace Barotrauma float buyingPriceMultiplier = element.GetAttributeFloat("buyingpricemultiplier", 1f); bool displayNonEmpty = element.GetAttributeBool("displaynonempty", false); bool soldByDefault = element.GetAttributeBool("sold", element.GetAttributeBool("soldbydefault", true)); + bool requiresUnlock = element.GetAttributeBool("requiresunlock", false); foreach (XElement childElement in element.GetChildElements("price")) { float priceMultiplier = childElement.GetAttributeFloat("multiplier", 1.0f); @@ -94,26 +96,28 @@ namespace Barotrauma } string storeIdentifier = childElement.GetAttributeString("storeidentifier", backwardsCompatibleIdentifier); // TODO: Add some error messages if we have defined the min or max amount while the item is not sold - var priceInfo = new PriceInfo((int)(priceMultiplier * basePrice), - sold, - sold ? GetMinAmount(childElement, minAmount) : 0, - sold ? GetMaxAmount(childElement, maxAmount) : 0, - canBeSpecial, - storeMinLevelDifficulty, - storeBuyingMultiplier, - displayNonEmpty, - storeIdentifier); + var priceInfo = new PriceInfo(price: (int)(priceMultiplier * basePrice), + canBeBought: sold, + minAmount: sold ? GetMinAmount(childElement, minAmount) : 0, + maxAmount: sold ? GetMaxAmount(childElement, maxAmount) : 0, + canBeSpecial: canBeSpecial, + minLevelDifficulty: storeMinLevelDifficulty, + buyingPriceMultiplier: storeBuyingMultiplier, + displayNonEmpty: displayNonEmpty, + requiresUnlock: requiresUnlock, + storeIdentifier: storeIdentifier); priceInfos.Add(priceInfo); } bool soldElsewhere = soldByDefault && element.GetAttributeBool("soldelsewhere", element.GetAttributeBool("soldeverywhere", false)); - defaultPrice = new PriceInfo(basePrice, - soldElsewhere, - soldElsewhere ? minAmount : 0, - soldElsewhere ? maxAmount : 0, - canBeSpecial, - minLevelDifficulty, - buyingPriceMultiplier, - displayNonEmpty); + defaultPrice = new PriceInfo(price: basePrice, + canBeBought: soldElsewhere, + minAmount: soldElsewhere ? minAmount : 0, + maxAmount: soldElsewhere ? maxAmount : 0, + canBeSpecial: canBeSpecial, + minLevelDifficulty: minLevelDifficulty, + buyingPriceMultiplier: buyingPriceMultiplier, + displayNonEmpty: displayNonEmpty, + requiresUnlock: requiresUnlock); return priceInfos; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/Submarine.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/Submarine.cs index 5ae404712..e2958efdf 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/Submarine.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/Submarine.cs @@ -1114,7 +1114,8 @@ namespace Barotrauma { if (item.Submarine != this) { continue; } var pump = item.GetComponent(); - if (pump == null || !item.HasTag("ballast") || item.CurrentHull == null) { continue; } + if (pump == null || item.CurrentHull == null) { continue; } + if (!item.HasTag("ballast") && !item.CurrentHull.RoomName.Contains("ballast", StringComparison.OrdinalIgnoreCase)) { continue; } pump.FlowPercentage = 0.0f; ballastHulls.Add(item.CurrentHull); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Map/SubmarineInfo.cs b/Barotrauma/BarotraumaShared/SharedSource/Map/SubmarineInfo.cs index 426941fe8..c40ed58c8 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Map/SubmarineInfo.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Map/SubmarineInfo.cs @@ -314,6 +314,7 @@ namespace Barotrauma Tier = original.Tier; IsManuallyOutfitted = original.IsManuallyOutfitted; Tags = original.Tags; + OutpostGenerationParams = original.OutpostGenerationParams; if (original.OutpostModuleInfo != null) { OutpostModuleInfo = new OutpostModuleInfo(original.OutpostModuleInfo); @@ -747,6 +748,8 @@ namespace Barotrauma return doc; } - public static int GetDefaultTier(int price) => price > 20000 ? 3 : price > 10000 ? 2 : 1; + public static int GetDefaultTier(int price) => price > 20000 ? HighestTier : price > 10000 ? 2 : 1; + + public const int HighestTier = 3; } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/ClientPermissions.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/ClientPermissions.cs index 6e5300c4c..8bde51456 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/ClientPermissions.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/ClientPermissions.cs @@ -27,7 +27,8 @@ namespace Barotrauma.Networking SellSubItems = 0x4000, ManageMap = 0x8000, ManageHires = 0x10000, - All = 0x1FFFF + ManageBotTalents = 0x20000, + All = 0x3FFFF } class PermissionPreset diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/ServerSettings.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/ServerSettings.cs index cbf0474b8..e4cbc1bb7 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/ServerSettings.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/ServerSettings.cs @@ -382,12 +382,17 @@ namespace Barotrauma.Networking private bool autoRestart; - public bool IsPublic; - private int maxPlayers; public List ClientPermissions { get; private set; } = new List(); + [Serialize(true, IsPropertySaveable.Yes)] + public bool IsPublic + { + get; + set; + } + private int tickRate = 20; [Serialize(20, IsPropertySaveable.Yes)] public int TickRate @@ -518,13 +523,20 @@ namespace Barotrauma.Networking } } - [Serialize(Barotrauma.LosMode.Opaque, IsPropertySaveable.Yes)] + [Serialize(LosMode.Opaque, IsPropertySaveable.Yes)] public LosMode LosMode { get; set; } + [Serialize(EnemyHealthBarMode.ShowAll, IsPropertySaveable.Yes)] + public EnemyHealthBarMode ShowEnemyHealthBars + { + get; + set; + } + [Serialize(800, IsPropertySaveable.Yes)] public int LinesPerLogFile { diff --git a/Barotrauma/BarotraumaShared/SharedSource/Settings/GameSettings.cs b/Barotrauma/BarotraumaShared/SharedSource/Settings/GameSettings.cs index e1ec4e598..b327c3903 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Settings/GameSettings.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Settings/GameSettings.cs @@ -35,10 +35,19 @@ namespace Barotrauma Activity } + public enum EnemyHealthBarMode + { + ShowAll, + BossHealthBarsOnly, + HideAll + } + public static class GameSettings { public struct Config { + public const float DefaultAimAssist = 0.05f; + public static Config GetDefault() { Config config = new Config @@ -50,7 +59,8 @@ namespace Barotrauma SubEditorBackground = new Color(13, 37, 69, 255), EnableSplashScreen = true, PauseOnFocusLost = true, - AimAssistAmount = 0.5f, + AimAssistAmount = DefaultAimAssist, + ShowEnemyHealthBars = EnemyHealthBarMode.ShowAll, EnableMouseLook = true, ChatOpen = true, CrewMenuOpen = true, @@ -110,6 +120,7 @@ namespace Barotrauma public LanguageIdentifier Language; public bool VerboseLogging; public bool SaveDebugConsoleLogs; + public string SavePath; public int SubEditorUndoBuffer; public int MaxAutoSaves; public int AutoSaveIntervalSeconds; @@ -118,6 +129,7 @@ namespace Barotrauma public bool PauseOnFocusLost; public float AimAssistAmount; public bool EnableMouseLook; + public EnemyHealthBarMode ShowEnemyHealthBars; public bool ChatOpen; public bool CrewMenuOpen; public bool EditorDisclaimerShown; diff --git a/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/PropertyConditional.cs b/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/PropertyConditional.cs index f86226e55..b831c7670 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/PropertyConditional.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/PropertyConditional.cs @@ -24,7 +24,8 @@ namespace Barotrauma HasSpecifierTag, Affliction, EntityType, - LimbType + LimbType, + SkillRequirement } public enum Comparison @@ -73,6 +74,7 @@ namespace Barotrauma case "targetcontainer": case "targetgrandparent": case "targetcontaineditem": + case "skillrequirement": return false; default: return true; @@ -110,6 +112,11 @@ namespace Barotrauma { Type = ConditionType.Uncertain; } + + if (attribute.Parent.GetAttributeBool("skillrequirement", false)) + { + Type = ConditionType.SkillRequirement; + } AttributeValue = valueString; SplitAttributeValue = valueString.Split(','); @@ -305,25 +312,20 @@ namespace Barotrauma if (health == null) { return false; } var affliction = health.GetAffliction(AttributeName.ToIdentifier()); float afflictionStrength = affliction == null ? 0.0f : affliction.Strength; - if (FloatValue.HasValue) - { - float value = FloatValue.Value; - switch (Operator) - { - case OperatorType.Equals: - return afflictionStrength == value; - case OperatorType.GreaterThan: - return afflictionStrength > value; - case OperatorType.GreaterThanEquals: - return afflictionStrength >= value; - case OperatorType.LessThan: - return afflictionStrength < value; - case OperatorType.LessThanEquals: - return afflictionStrength <= value; - case OperatorType.NotEquals: - return afflictionStrength != value; - } - } + + return ValueMatchesRequirement(afflictionStrength); + } + } + return false; + case ConditionType.SkillRequirement: + { + if (target == null) { return Operator == OperatorType.NotEquals; } + + if (target is Character targetChar) + { + float skillLevel = targetChar.GetSkillLevel(AttributeName.ToIdentifier()); + + return ValueMatchesRequirement(skillLevel); } } return false; @@ -332,6 +334,30 @@ namespace Barotrauma } } + private bool ValueMatchesRequirement(float testedValue) + { + if (FloatValue.HasValue) + { + float value = FloatValue.Value; + switch (Operator) + { + case OperatorType.Equals: + return testedValue == value; + case OperatorType.GreaterThan: + return testedValue > value; + case OperatorType.GreaterThanEquals: + return testedValue >= value; + case OperatorType.LessThan: + return testedValue < value; + case OperatorType.LessThanEquals: + return testedValue <= value; + case OperatorType.NotEquals: + return testedValue != value; + } + } + return false; + } + private bool MatchesTagCondition(ISerializableEntity target) { if (!(target is Item item)) { return Operator == OperatorType.NotEquals; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/StatusEffect.cs b/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/StatusEffect.cs index 3173558d7..581a5ccc5 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/StatusEffect.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/StatusEffects/StatusEffect.cs @@ -877,10 +877,9 @@ namespace Barotrauma return true; } - public IReadOnlyList GetNearbyTargets(Vector2 worldPosition, List targets = null) + public void AddNearbyTargets(Vector2 worldPosition, List targets) { - targets ??= new List(); - if (Range <= 0.0f) { return targets; } + if (Range <= 0.0f) { return; } if (HasTargetType(TargetType.NearbyCharacters)) { foreach (Character c in Character.CharacterList) @@ -917,7 +916,6 @@ namespace Barotrauma } } } - return targets; bool CheckDistance(ISpatialEntity e) { @@ -1362,7 +1360,7 @@ namespace Barotrauma { if (breakLimb) { - targetLimb.character.TrySeverLimbJoints(targetLimb, severLimbsProbability: 1, damage: -1, allowBeheading: true, attacker: user); + targetLimb.character.TrySeverLimbJoints(targetLimb, severLimbsProbability: 1, damage: -1, allowBeheading: true, ignoreSeveranceProbabilityModifier: true, attacker: user); } if (hideLimb) { @@ -2163,7 +2161,7 @@ namespace Barotrauma if (result.Afflictions != null && result.Afflictions.Any(a => a.Prefab == limbAffliction.Prefab) && (!affliction.Prefab.LimbSpecific || limb.character.CharacterHealth.GetAfflictionLimb(affliction) == limb)) { - if (type == ActionType.OnUse) + if (type == ActionType.OnUse || type == ActionType.OnSuccess) { limbAffliction.AppliedAsSuccessfulTreatmentTime = Timing.TotalTime; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Steam/Workshop.cs b/Barotrauma/BarotraumaShared/SharedSource/Steam/Workshop.cs index b4aa8a883..d83ebf7af 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Steam/Workshop.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Steam/Workshop.cs @@ -310,7 +310,7 @@ namespace Barotrauma.Steam + "unexpected deletion of your hard work.\n" + "Instead, modify a copy of your mod in LocalMods.\n"; - string workshopModDirReadmeLocation = Path.Combine(SaveUtil.SaveFolder, "WorkshopMods", "README.txt"); + string workshopModDirReadmeLocation = Path.Combine(SaveUtil.DefaultSaveFolder, "WorkshopMods", "README.txt"); if (!File.Exists(workshopModDirReadmeLocation)) { Directory.CreateDirectory(Path.GetDirectoryName(workshopModDirReadmeLocation)!); diff --git a/Barotrauma/BarotraumaShared/SharedSource/Upgrades/UpgradePrefab.cs b/Barotrauma/BarotraumaShared/SharedSource/Upgrades/UpgradePrefab.cs index 1aa43ae28..84b97b6b0 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Upgrades/UpgradePrefab.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Upgrades/UpgradePrefab.cs @@ -108,6 +108,8 @@ namespace Barotrauma public readonly bool IsWallUpgrade; public readonly LocalizedString Name; + private readonly object mutex = new object(); + public readonly IEnumerable ItemTags; public UpgradeCategory(ContentXElement element, UpgradeModulesFile file) : base(element, file) @@ -119,7 +121,6 @@ namespace Barotrauma ItemTags = selfItemTags.CollectionConcat(prefabsThatAllowUpgrades); Identifier nameIdentifier = element.GetAttributeIdentifier("nameidentifier", Identifier.Empty); - if (!nameIdentifier.IsEmpty) { Name = TextManager.Get($"{nameIdentifier}"); @@ -132,10 +133,13 @@ namespace Barotrauma public void DeterminePrefabsThatAllowUpgrades() { - prefabsThatAllowUpgrades.Clear(); - prefabsThatAllowUpgrades.UnionWith(ItemPrefab.Prefabs - .Where(it => it.GetAllowedUpgrades().Contains(Identifier)) - .Select(it => it.Identifier)); + lock (mutex) + { + prefabsThatAllowUpgrades.Clear(); + prefabsThatAllowUpgrades.UnionWith(ItemPrefab.Prefabs + .Where(it => it.GetAllowedUpgrades().Contains(Identifier)) + .Select(it => it.Identifier)); + } } public bool CanBeApplied(MapEntity item, UpgradePrefab? upgradePrefab) @@ -153,26 +157,11 @@ namespace Barotrauma if (upgradePrefab != null && upgradePrefab.IsDisallowed(item)) { return false; } - return item.Prefab.GetAllowedUpgrades().Contains(Identifier) || - ItemTags.Any(tag => item.Prefab.Tags.Contains(tag) || item.Prefab.Identifier == tag); - } - - public bool CanBeApplied(XElement element, UpgradePrefab prefab) - { - if ("Structure" == element.NameAsIdentifier()) { return IsWallUpgrade; } - - Identifier identifier = element.GetAttributeIdentifier("identifier", Identifier.Empty); - if (identifier.IsEmpty) { return false; } - - ItemPrefab? item = ItemPrefab.Find(null, identifier); - if (item == null) { return false; } - - Identifier[] disallowedUpgrades = element.GetAttributeIdentifierArray("disallowedupgrades", Array.Empty()); - - if (disallowedUpgrades.Any(s => s == Identifier || s == prefab.Identifier)) { return false; } - - return item.GetAllowedUpgrades().Contains(Identifier) || - ItemTags.Any(tag => item.Tags.Contains(tag) || item.Identifier == tag); + lock (mutex) + { + return item.Prefab.GetAllowedUpgrades().Contains(Identifier) || + ItemTags.Any(tag => item.Prefab.Tags.Contains(tag) || item.Prefab.Identifier == tag); + } } public static UpgradeCategory? Find(Identifier identifier) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Utils/MathUtils.cs b/Barotrauma/BarotraumaShared/SharedSource/Utils/MathUtils.cs index 688c284c5..0d6974172 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Utils/MathUtils.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Utils/MathUtils.cs @@ -104,6 +104,8 @@ namespace Barotrauma (float)Math.Floor(value / div) * div; } + public static int RoundToInt(float v) => (int)MathF.Round(v); + public static float RoundTowardsClosest(float value, float div) { return (float)Math.Round(value / div) * div; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Utils/NetCollection.cs b/Barotrauma/BarotraumaShared/SharedSource/Utils/NetCollection.cs new file mode 100644 index 000000000..7467600c5 --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/Utils/NetCollection.cs @@ -0,0 +1,17 @@ +using System.Collections; +using System.Collections.Generic; +using System.Collections.Immutable; + +namespace Barotrauma +{ + [NetworkSerialize] + public readonly record struct NetCollection(ImmutableArray Array) : INetSerializableStruct, IEnumerable + { + public static readonly NetCollection Empty = new(ImmutableArray.Empty); + + public NetCollection(params T[] elements) : this(elements.ToImmutableArray()) { } + + IEnumerator IEnumerable.GetEnumerator() => ((IEnumerable)Array).GetEnumerator(); + IEnumerator IEnumerable.GetEnumerator() => ((IEnumerable)Array).GetEnumerator(); + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/SharedSource/Utils/SaveUtil.cs b/Barotrauma/BarotraumaShared/SharedSource/Utils/SaveUtil.cs index 8df000e58..55120383d 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Utils/SaveUtil.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Utils/SaveUtil.cs @@ -18,7 +18,7 @@ namespace Barotrauma #if OSX //"/*user*/Library/Application Support/Daedalic Entertainment GmbH/" on Mac - public static readonly string SaveFolder = Path.Combine( + public static readonly string DefaultSaveFolder = Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.Personal), "Library", "Application Support", @@ -27,13 +27,13 @@ namespace Barotrauma #else //"C:/Users/*user*/AppData/Local/Daedalic Entertainment GmbH/" on Windows //"/home/*user*/.local/share/Daedalic Entertainment GmbH/" on Linux - public static readonly string SaveFolder = Path.Combine( + public static readonly string DefaultSaveFolder = Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Daedalic Entertainment GmbH", "Barotrauma"); #endif - public static string MultiplayerSaveFolder = Path.Combine(SaveFolder, "Multiplayer"); + public static string DefaultMultiplayerSaveFolder = Path.Combine(DefaultSaveFolder, "Multiplayer"); public static readonly string SubmarineDownloadFolder = Path.Combine("Submarines", "Downloaded"); public static readonly string CampaignDownloadFolder = Path.Combine("Data", "Saves", "Multiplayer_Downloaded"); @@ -43,9 +43,9 @@ namespace Barotrauma public static string TempPath { #if SERVER - get { return Path.Combine(SaveFolder, "temp_server"); } + get { return Path.Combine(GetSaveFolder(SaveType.Singleplayer), "temp_server"); } #else - get { return Path.Combine(SaveFolder, "temp"); } + get { return Path.Combine(GetSaveFolder(SaveType.Singleplayer), "temp"); } #endif } @@ -198,7 +198,10 @@ namespace Barotrauma } //deleting a multiplayer save file -> also delete character data - if (Path.GetFullPath(Path.GetDirectoryName(filePath)).Equals(Path.GetFullPath(MultiplayerSaveFolder))) + var fullPath = Path.GetFullPath(Path.GetDirectoryName(filePath)); + + if (fullPath.Equals(Path.GetFullPath(DefaultMultiplayerSaveFolder)) || + fullPath == Path.GetFullPath(GetSaveFolder(SaveType.Multiplayer))) { string characterDataSavePath = MultiPlayerCampaign.GetCharacterDataSavePath(filePath); if (File.Exists(characterDataSavePath)) @@ -215,35 +218,70 @@ namespace Barotrauma } } - public static string GetSavePath(SaveType saveType, string saveName) + public static string GetSaveFolder(SaveType saveType) { - string folder = saveType == SaveType.Singleplayer ? SaveFolder : MultiplayerSaveFolder; - return Path.Combine(folder, saveName); + string folder = string.Empty; + + if (!string.IsNullOrEmpty(GameSettings.CurrentConfig.SavePath)) + { + folder = GameSettings.CurrentConfig.SavePath; + if (saveType == SaveType.Multiplayer) + { + folder = Path.Combine(folder, "Multiplayer"); + } + if (!Directory.Exists(folder)) + { + DebugConsole.AddWarning($"Could not find the custom save folder \"{folder}\", creating the folder..."); + try + { + Directory.CreateDirectory(folder); + } + catch (Exception e) + { + DebugConsole.ThrowError($"Could not find the custom save folder \"{folder}\". Using the default save path instead.", e); + folder = string.Empty; + } + } + } + if (string.IsNullOrEmpty(folder)) + { + folder = saveType == SaveType.Singleplayer ? DefaultSaveFolder : DefaultMultiplayerSaveFolder; + } + return folder; } public static IReadOnlyList GetSaveFiles(SaveType saveType, bool includeInCompatible = true) { - string folder = saveType == SaveType.Singleplayer ? SaveFolder : MultiplayerSaveFolder; - if (!Directory.Exists(folder)) + string defaultFolder = saveType == SaveType.Singleplayer ? DefaultSaveFolder : DefaultMultiplayerSaveFolder; + if (!Directory.Exists(defaultFolder)) { - DebugConsole.Log("Save folder \"" + folder + " not found! Attempting to create a new folder..."); + DebugConsole.Log("Save folder \"" + defaultFolder + " not found! Attempting to create a new folder..."); try { - Directory.CreateDirectory(folder); + Directory.CreateDirectory(defaultFolder); } catch (Exception e) { - DebugConsole.ThrowError("Failed to create the folder \"" + folder + "\"!", e); + DebugConsole.ThrowError("Failed to create the folder \"" + defaultFolder + "\"!", e); } } - List files = Directory.GetFiles(folder, "*.save", System.IO.SearchOption.TopDirectoryOnly).ToList(); + List files = Directory.GetFiles(defaultFolder, "*.save", System.IO.SearchOption.TopDirectoryOnly).ToList(); + + var folder = GetSaveFolder(saveType); + if (!string.IsNullOrEmpty(folder) && Directory.Exists(folder)) + { + files.AddRange(Directory.GetFiles(folder, "*.save", System.IO.SearchOption.TopDirectoryOnly)); + } + string legacyFolder = saveType == SaveType.Singleplayer ? LegacySaveFolder : LegacyMultiplayerSaveFolder; if (Directory.Exists(legacyFolder)) { files.AddRange(Directory.GetFiles(legacyFolder, "*.save", System.IO.SearchOption.TopDirectoryOnly)); } + files = files.Distinct().ToList(); + List saveInfos = new List(); foreach (string file in files) { @@ -305,7 +343,7 @@ namespace Barotrauma { fileName = ToolBox.RemoveInvalidFileNameChars(fileName); - string folder = saveType == SaveType.Singleplayer ? SaveFolder : MultiplayerSaveFolder; + string folder = GetSaveFolder(saveType); if (fileName == "Save_Default") { fileName = TextManager.Get("SaveFile.DefaultName").Value; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Utils/ToolBox.cs b/Barotrauma/BarotraumaShared/SharedSource/Utils/ToolBox.cs index 1f5b69a16..dba2f7ea7 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Utils/ToolBox.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Utils/ToolBox.cs @@ -3,6 +3,7 @@ using Barotrauma.Networking; using Microsoft.Xna.Framework; using System; using System.Collections.Generic; +using System.Collections.Immutable; using System.Diagnostics.CodeAnalysis; using Barotrauma.IO; using System.Linq; @@ -101,7 +102,7 @@ namespace Barotrauma string startPath = directory ?? ""; - string saveFolder = SaveUtil.SaveFolder.Replace('\\', '/'); + string saveFolder = SaveUtil.DefaultSaveFolder.Replace('\\', '/'); if (originalFilename.Replace('\\', '/').StartsWith(saveFolder)) { //paths that lead to the save folder might have incorrect case, @@ -721,5 +722,119 @@ namespace Barotrauma { return TextManager.GetWithVariable("percentageformat", "[value]", ((int)MathF.Round(v * 100)).ToString()).Value; } + + private static readonly ImmutableHashSet affectedCharacters = ImmutableHashSet.Create('%', '+', '%'); + + /// + /// Extends % and + characters to color tags in talent name tooltips to make them look nicer. + /// This obviously does not work in languages like French where a non breaking space is used + /// so it's just a a bit extra for the languages it works with. + /// + /// + /// + public static string ExtendColorToPercentageSigns(string original) + { + const string colorEnd = "‖color:end‖", + colorStart = "‖color:"; + + const char definitionIndicator = '‖'; + + char[] chars = original.ToCharArray(); + + for (int i = 0; i < chars.Length; i++) + { + if (!TryGetAt(i, chars, out char currentChar) || !affectedCharacters.Contains(currentChar)) { continue; } + + // look behind + if (TryGetAt(i - 1, chars, out char c) && c is definitionIndicator) + { + int offset = colorEnd.Length; + + if (MatchesSequence(i - offset, colorEnd, chars)) + { + // push the color end tag forwards until the character is within the tag + char prev = currentChar; + for (int k = i - offset; k <= i; k++) + { + if (!TryGetAt(k, chars, out c)) { continue; } + + chars[k] = prev; + prev = c; + } + continue; + } + } + + // look ahead + if (TryGetAt(i + 1, chars, out c) && c is definitionIndicator) + { + if (!MatchesSequence(i + 1, colorStart, chars)) { continue; } + + int offset = FindNextDefinitionOffset(i, colorStart.Length, chars); + + // we probably reached the end of the string + if (offset > chars.Length) { continue; } + + // push the color start tag back until the character is within the tag + char prev = currentChar; + for (int k = i + offset; k >= i; k--) + { + if (!TryGetAt(k, chars, out c)) { continue; } + + chars[k] = prev; + prev = c; + } + + // skip needlessly checking this section again since we already know what's ahead + i += offset; + } + } + + static int FindNextDefinitionOffset(int index, int initialOffset, char[] chars) + { + int offset = initialOffset; + while (TryGetAt(index + offset, chars, out char c) && c is not definitionIndicator) { offset++; } + return offset; + } + + static bool MatchesSequence(int index, string sequence, char[] chars) + { + for (int i = 0; i < sequence.Length; i++) + { + if (!TryGetAt(index + i, chars, out char c) || c != sequence[i]) { return false; } + } + + return true; + } + + static bool TryGetAt(int i, char[] chars, out char c) + { + if (i >= 0 && i < chars.Length) + { + c = chars[i]; + return true; + } + + c = default; + return false; + } + + return new string(chars); + } + + public static bool StatIdentifierMatches(Identifier original, Identifier match) + { + if (original == match) { return true; } + + for (int i = 0; i < match.Value.Length; i++) + { + if (i >= original.Value.Length) { return match[i] is '~'; } + if (!CharEquals(original[i], match[i])) { return false; } + } + + return false; + + static bool CharEquals(char a, char b) => char.ToLowerInvariant(a) == char.ToLowerInvariant(b); + } } } diff --git a/Barotrauma/BarotraumaShared/changelog.txt b/Barotrauma/BarotraumaShared/changelog.txt index d8999df6b..9bc167c06 100644 --- a/Barotrauma/BarotraumaShared/changelog.txt +++ b/Barotrauma/BarotraumaShared/changelog.txt @@ -1,3 +1,128 @@ +--------------------------------------------------------------------------------------------------------- +v0.20.4.0 +--------------------------------------------------------------------------------------------------------- + +Changes and additions: +- Added an objective to give the order to "Operate Turret" alongside other orders in the campaign tutorial. +- Added popups when completing tutorial chapters that allow you to restart or continue and to return back to the menu. +- Rebalanced clothing and apparel resistances. Overall basic clothes will give less resistance. +- Rebalanced damage dealt by tools. Damage should be a bit higher overall. +- SMG can now be crafted. +- Items' damage modifiers are shown in store tooltips. +- Added an option to hide enemy health bars. +- Server visibility can be adjusted in the server lobby (instead of having to restart the server). +- When throwing an item (such as a grenade), the whole throw animation is played before the item is actually launched. Prevents being able to throw items at a ridiculous rate by spamming the hotkeys and LMB. +- Players can select talents for bots in multiplayer. +- Some changes to wrecked item sprites (replacing the old low-res pictures with modified versions of the normal items' sprites). + +Balance: +- Made some weapons available later in game, to increase feeling of progression. + +Unstable only: +- Fixed campaign tutorial progress resetting. +- Fixed tutorial mudraptors spawning in the wrong places. +- Fixed a Role tutorial cabinet staying highlighted after completing the required action. +- Fixed fabricator taking items from linked containers even if there's suitable ones in the input slots. +- Fixed typos in europabrew and sulphuric acid syringes that made them craftable by anyone. +- Fixed several talents that were not working as described. +- Various balance changes to talents. +- Fixed an exploit that allowed making sonar pings undetectable by turning the sonar off after the ping. +- Fixed swapping magazines no longer working due to the addition of the flashlight slots. +- Fixed bots being unable to swap Exosuit's oxygen tanks or use it as divining gear. +- Fixed rifle bullets appearing at the tip of the rifle. +- Fixed limbs sometimes getting severed off mudraptors or other monsters when the target is alive, leading to floating mudraptors. + +Fixed: +- Fixed candidate box not being visible when using the Chinese input method. +- Fixed switching characters interrupting outpost events (even if there's currently no dialog active). +- Fixed certain events preventing other events from triggering when half-finished (e.g. preventing you from unlocking missions when an event is still running and for example waiting for you to talk to some other NPC). +- Fixed other players not seeing the spray particles when someone uses a sprayer in multiplayer. +- Fixed ability to "fire" (just dropping the projectile) hardpoints that are connected to a periscope and loader. + +--------------------------------------------------------------------------------------------------------- +v0.20.3.0 +--------------------------------------------------------------------------------------------------------- + +Changes and additions: +- New weapons: Rifle, Heavy Machine Gun, Machine Pistol, Harpoon Coil-Rifle. +- Limit which submarines are available in each outpost: high-tier subs become available as you get further in the campaign, and the submarine class selection depends on the type of the outpost. +- Added in-game hints for the genetic system. +- Added a button for treating all characters in one go to the medical clinic. +- Affliction descriptions change depending on the strength of the affliction, and whether you're treating someone else or yourself. + +Unstable only: +- Various balance changes to talents. +- Fixed clear button not doing anythign in new talent menu. +- Fixed various XP-giving talents causing console errors at the end of the round. +- Rum can be drunk (not just applied in the health interface). +- Fixed defense bot not aiming properly client-side. +- Fixed some talent items being craftable without the talent. +- Fixed some talent items being sold in outpost stores. +- Replaced some placeholder talent item sprites. +- Fixed "Mailman" talent multiplying mission rewards by 151. +- Fixed container indicator showing how full the 1st slot is when it should show how full the container is. +- Fixed crashing if a fabricator finishes fabricating with no user. +- Fixed skedaddle talent only giving 1 second of the buff instead of 5. +- Fixed clown crate not fit in crate shelf. + +Balance: +- Slightly adjusted values of handheld weapons. + - Power levels match cost better. + - Damage to structures has been revised (f.e. knives shouldn't be so efficient at cutting through walls). + - Some tools are now slightly more damaging and viable as a last resort weapon (don't atually try to fight mudraptors with a wrench though). + - Improved ammo availability for basic weapons. +- Slightly adjusted values of apparel (armor, clothing, diving suits) to better highlight strengths and weaknesses. + - Combat Diving Suit is now actually better for combat than the regular diving suit, due to higher damage resistances. + - PUCS no longer gives a bonus to speed when using Underwater Scooter, as it has plenty of other strengths. + - Mechanic's apparel now has higher laceration protection than Engineer's apparel, as that's typically the damage they'd get from failing to repair. + - All starter clothing gives less protection now, while some shop/npc clothing now gives some benefit. +- Usage of a minimum difficulty level to have some weapons appear in stores only later in the game. Even some previously talent-only items can appear in stores now in very late biomes. +- Plasma cutter is now much better at cutting. + +Bugfixes: +- Fixed a rounding error that caused Health Scanner HUD to display every level of bleeding below 100% as "minor". + +Modding: +- Allow 'launchimpulse' on RangedWeapon to affect projectile's speed (sum of launch impulses). +- Allow 'penetration' on RangedWeapon to affect projectile's penetration (sum of penetration). +- Added 'DontApplyToHands' property to Propulsion, preventing extra force applying to hands when the item is held in hands (instead applying only to the character's whole body). +- Added a skill requirement conditional for StatusEffect, example: to make a status effect occur only if the target has less than 35 weapon skill. +- Added ReloadSkillRequirement and ReloadNoSkill to RangedWeapon. F.e. a weapon with reload=2s, ReloadSkillRequirement=40, ReloadNoSkill=5s will have a character with 20 weapons skill reload at 3.5 s. + +--------------------------------------------------------------------------------------------------------- +v0.20.2.0 +--------------------------------------------------------------------------------------------------------- + +Unstable only: +- Balance improvements to the new talents. +- Fixed mistakes and inconsistencies in talent descriptions. +- Fixed several talents reducing item stats instead of increasing them. +- Fixed console errors caused by the Bounty Hunter talent. +- Fixed Bloody Business not working if you have the Gene Harvester talent unlocked. +- Added a proper sprite for the exosuit. +- Fixed exosuit working after you take out the battery. +- Fixed exosuit working regardless of which slot you put the battery and oxygen tank in. +- Fixed arc emitter sprite when worn on back. +- Fixed console error when hitting a shield with a melee weapon. +- Reduced makeshift shelves to 2 slots to match sprite. +- Reduced amount of talents available through Endocrine Booster usage. +- Add missing recipe unlocks: Ceremonial Sword, Handcannon. +- Moved "Steady Tune" to tier 2, added a new "Trickle Down" talent to the 3rd tier. + +--------------------------------------------------------------------------------------------------------- +v0.20.1.0 +--------------------------------------------------------------------------------------------------------- + +Tutorial improvements: +- A new campaign-integrated tutorial that teaches the basics of the campaign mode in the first outpost. 1st version: feedback and issue reports are much appreciated! +- Various fixes and improvements to the Basic and Role tutorials. + +Unstable only: +- Made saline a bit more effective (the nerf in the previous unstable version was a bit too much). +- Fixed ranged creature attacks causing a crash when the creature is targeting a hull. +- Fixed monsters with no inventory (e.g. watcher, hammerhead spawns) causing a crash. +- Most of the talent fixes and improvements we've been doing didn't make it into this build, but they're coming soon! + --------------------------------------------------------------------------------------------------------- v0.20.0.0 --------------------------------------------------------------------------------------------------------- @@ -132,6 +257,30 @@ Fixes to new issues in the previous build: - Fixed clients sometimes failing to reconnect to the server if the connection is momentarily lost. - Fixed item conditions resetting to 100% between rounds. - Fixed mineral missions always causing a crash. +feature/combat-n-handhelds-balance branch changes +--------------------------------------------------------------------------------------------------------- + +Balance: +- Slightly adjusted values of handheld weapons +-- Power levels match cost better +-- Damage to structures has been revised (f.e. knives shouldn't be so efficient at cutting through walls) +-- Some tools are now slightly more damaging and viable as a last resort weapon (don't atually try to fight mudraptors with a wrench though) +-- Improved ammo availability for basic weapons +- Slightly adjusted values of apparel (armor, clothing, diving suits) to better highlight strengths and weaknesses +-- Combat Diving Suit is now actually better for combat than the regular diving suit, due to higher damage resistances +-- PUCS no longer gives a bonus to speed when using Underwater Scooter, as it has plenty of other strengths +-- Mechanic's apparel now has higher laceration protection than Engineer's apparel, as that's typically the damage they'd get from failing to repair +-- All starter clothing gives less protection now, while some shop/npc clothing now gives some benefit +- Usage of a minimum difficulty level to have some weapons appear in stores only later in the game. Even some previously talent-only items can appear in stores now in very late biomes. +- Plasma cutter is now much better at cutting + +Modding: +- Allow 'launchimpulse' on RangedWeapon to affect projectile's speed (sum of launch impulses) +- Allow 'penetration' on RangedWeapon to affect projectile's penetration (sum of penetration) +- Added 'ApplyToHands' property to Propulsion (default=true), preventing extra force applying to hands when the item is held in hands when set to false (instead applying only to the character's whole body) +- Added a skill requirement conditional for StatusEffect, example: to make a status effect occur only if the target has less than 35 weapon skill +- Added ReloadSkillRequirement and ReloadNoSkill to RangedWeapon. F.e. a weapon with reload=2s, ReloadSkillRequirement=40, ReloadNoSkill=5s will have a character with 20 weapons skill reload at 3.5s + --------------------------------------------------------------------------------------------------------- v0.19.8.0 @@ -461,7 +610,8 @@ Changes: - Handheld sonars can't detect minerals from inside the sub. - Changed the plus and minus button in the campaign settings into arrows. The button on the right increases difficulty, which in the case of the starting balance and supplies means reducing them, making the plus and minus buttons misleading. - Reduced costs of handheld weapon ammunition significantly. -- Slightly reduced effectiveness of harpoons and revolver round to compensate for the cheaper ammo. +- Up revolver & harpoon shop availability (especially at military outposts / armory merchants) +- Slightly reduced effectiveness of harpoons and revolver round to compensate for the cheaper / more available ammo. - Changed recipes for Handcannon, Assault Rifle and Auto-Shotgun. Weapon crafting is more expensive, to compensate for cheaper ammo. - Adjusted numerous other recipes and price costs of materials. Previously little used materials (like tin) are now used more. - Partially reintroduced the "toggle inventory" keybind, now called "toggle entity list". Even though toggling the in-game inventory is no longer possible, the keybind can be used to change the hotkey for toggling the sub editor's entity list. diff --git a/Barotrauma/BarotraumaShared/hintmanager.xml b/Barotrauma/BarotraumaShared/hintmanager.xml index ed6c346cc..3f843afaa 100644 --- a/Barotrauma/BarotraumaShared/hintmanager.xml +++ b/Barotrauma/BarotraumaShared/hintmanager.xml @@ -58,6 +58,11 @@ + + + + + diff --git a/Barotrauma/BarotraumaTest/GenericToolBoxTests.cs b/Barotrauma/BarotraumaTest/GenericToolBoxTests.cs new file mode 100644 index 000000000..305187f05 --- /dev/null +++ b/Barotrauma/BarotraumaTest/GenericToolBoxTests.cs @@ -0,0 +1,55 @@ +#nullable enable + +using System; +using Xunit; +using Barotrauma; +using FluentAssertions; +using FsCheck; + +namespace TestProject; + +public sealed class GenericToolBoxTests +{ + public class CustomGenerators + { + public static Arbitrary IdentifierPairGenerator() + { + return Arb.From(from Identifier first in Arb.Generate() + from Identifier second in Arb.Generate().Where(second => second != first) + select new DifferentIdentifierPair(first, second)); + } + } + + public readonly struct DifferentIdentifierPair + { + public readonly Identifier First, + Second; + + public DifferentIdentifierPair(Identifier first, Identifier second) + { + if (first == second) { throw new InvalidOperationException("Identifiers must be different"); } + + First = first; + Second = second; + } + } + + public GenericToolBoxTests() + { + Arb.Register(); + Arb.Register(); + } + + [Fact] + public void MatchesStatIdentifier() + { + Prop.ForAll(static pair => + { + ToolBox.StatIdentifierMatches(pair.First, $"{pair.First}~{pair.Second}".ToIdentifier()).Should().BeTrue(); + ToolBox.StatIdentifierMatches(pair.First, pair.First).Should().BeTrue(); + + ToolBox.StatIdentifierMatches(pair.First, $"{pair.Second}~{pair.First}".ToIdentifier()).Should().BeFalse(); + ToolBox.StatIdentifierMatches(pair.First, pair.Second).Should().BeFalse(); + }).VerboseCheckThrowOnFailure(); + } +} diff --git a/Barotrauma/BarotraumaTest/TestProject.cs b/Barotrauma/BarotraumaTest/TestProject.cs index 614b0b23b..6b36c44e1 100644 --- a/Barotrauma/BarotraumaTest/TestProject.cs +++ b/Barotrauma/BarotraumaTest/TestProject.cs @@ -15,6 +15,12 @@ namespace TestProject select new Vector2(x, y)); } + public static Arbitrary IdentifierGenerator() + { + return Arb.From(from string value in Arb.Generate().Where(static s => s != null) + select new Identifier(value)); + } + public static Arbitrary ColorGenerator() { return Arb.From(from int r in Gen.Choose(0, 255) diff --git a/Libraries/ImeSharp/IMEString.cs b/Libraries/ImeSharp/IMEString.cs new file mode 100644 index 000000000..6635c85ae --- /dev/null +++ b/Libraries/ImeSharp/IMEString.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections; +using System.Collections.Generic; + +namespace ImeSharp +{ + public unsafe struct IMEString : IEnumerable + { + internal const int IMECharBufferSize = 64; + + public static readonly IMEString Empty = new IMEString((List)null); + + internal struct Enumerator : IEnumerator + { + private IMEString _imeString; + private char _currentCharacter; + private int _currentIndex; + + public Enumerator(IMEString imeString) + { + _imeString = imeString; + _currentCharacter = '\0'; + _currentIndex = -1; + } + + public bool MoveNext() + { + int size = _imeString.Count; + + _currentIndex++; + + if (_currentIndex == size) + return false; + + fixed (char* ptr = _imeString.buffer) + { + _currentCharacter = *(ptr + _currentIndex); + } + + return true; + } + + public void Reset() + { + _currentIndex = -1; + } + + public void Dispose() + { + } + + public char Current { get { return _currentCharacter; } } + object IEnumerator.Current { get { return Current; } } + } + + public int Count { get { return _size; } } + + public char this[int index] + { + get + { + if (index >= Count || index < 0) + throw new ArgumentOutOfRangeException("index"); + + fixed (char* ptr = buffer) + { + return *(ptr + index); + } + } + } + + private int _size; + + fixed char buffer[IMECharBufferSize]; + + public IMEString(string characters) + { + if (string.IsNullOrEmpty(characters)) + { + _size = 0; + return; + } + + _size = characters.Length; + if (_size > IMECharBufferSize) + _size = IMECharBufferSize - 1; + + fixed (char* _ptr = buffer) + { + char* ptr = _ptr; + for (var i = 0; i < _size; i++) + { + *ptr = characters[i]; + ptr++; + } + } + } + + public IMEString(List characters) + { + if (characters == null || characters.Count == 0) + { + _size = 0; + return; + } + + _size = characters.Count; + if (_size > IMECharBufferSize) + _size = IMECharBufferSize - 1; + + fixed (char* _ptr = buffer) + { + char* ptr = _ptr; + for (var i = 0; i < _size; i++) + { + *ptr = characters[i]; + ptr++; + } + } + } + + public IMEString(char[] characters, int count) + { + if (characters == null || count <= 0) + { + _size = 0; + return; + } + + _size = count; + if (_size > IMECharBufferSize) + _size = IMECharBufferSize - 1; + + if (_size > characters.Length) + _size = characters.Length; + + fixed (char* _ptr = buffer) + { + char* ptr = _ptr; + for (var i = 0; i < _size; i++) + { + *ptr = characters[i]; + ptr++; + } + } + } + + public IMEString(IntPtr bStrPtr) + { + if (bStrPtr == IntPtr.Zero) + { + _size = 0; + return; + } + + var ptrSrc = (char*)bStrPtr; + + int i = 0; + + fixed (char* _ptr = buffer) + { + char* ptr = _ptr; + + while (ptrSrc[i] != '\0') + { + *ptr = ptrSrc[i]; + i++; + ptr++; + } + } + + _size = i; + } + + public override string ToString() + { + fixed (char* ptr = buffer) + { + return new string(ptr, 0, _size); + } + } + + public IntPtr ToIntPtr() + { + fixed (char* ptr = buffer) + { + return (IntPtr)ptr; + } + } + + public IEnumerator GetEnumerator() + { + return new Enumerator(this); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + } +} diff --git a/Libraries/ImeSharp/IMETextCompositionEventArgs.cs b/Libraries/ImeSharp/IMETextCompositionEventArgs.cs new file mode 100644 index 000000000..93548b0be --- /dev/null +++ b/Libraries/ImeSharp/IMETextCompositionEventArgs.cs @@ -0,0 +1,61 @@ +using System; + +namespace ImeSharp +{ + /// + /// Arguments for the event. + /// + public struct IMETextCompositionEventArgs + { + /// + // Construct a TextCompositionEventArgs with composition infos. + /// + public IMETextCompositionEventArgs(IMEString compositionText, + int cursorPosition, + IMEString[] candidateList = null, + int candidatePageStart = 0, + int candidatePageSize = 0, + int candidateSelection = 0) + { + CompositionText = compositionText; + CursorPosition = cursorPosition; + + CandidateList = candidateList; + CandidatePageStart = candidatePageStart; + CandidatePageSize = candidatePageSize; + CandidateSelection = candidateSelection; + } + + /// + /// The full string as it's composed by the IMM. + /// + public readonly IMEString CompositionText; + + /// + /// The position of the cursor inside the composed string. + /// + public readonly int CursorPosition; + + /// + /// The candidate text list for the composition. + /// This property is only supported on WindowsDX and WindowsUniversal. + /// If the composition string does not generate candidates this array is empty. + /// + public readonly IMEString[] CandidateList; + + /// + /// First candidate index of current page. + /// + public readonly int CandidatePageStart; + + /// + /// How many candidates should display per page. + /// + public readonly int CandidatePageSize; + + /// + /// The selected candidate index. + /// + public readonly int CandidateSelection; + } +} diff --git a/Libraries/ImeSharp/IMETextInputEventArgs.cs b/Libraries/ImeSharp/IMETextInputEventArgs.cs new file mode 100644 index 000000000..2d415a21e --- /dev/null +++ b/Libraries/ImeSharp/IMETextInputEventArgs.cs @@ -0,0 +1,12 @@ +namespace ImeSharp +{ + public struct IMETextInputEventArgs + { + public IMETextInputEventArgs(char character) + { + Character = character; + } + + public readonly char Character; + } +} \ No newline at end of file diff --git a/Libraries/ImeSharp/ImeSharp.csproj b/Libraries/ImeSharp/ImeSharp.csproj new file mode 100644 index 000000000..8cd198465 --- /dev/null +++ b/Libraries/ImeSharp/ImeSharp.csproj @@ -0,0 +1,30 @@ + + + + net6.0 + true + + + + C# wrapper for Windows IME APIs. Its goal is to support both IMM32 and TSF. + IME;netcoreapp3.1;net5.0;net6.0;winforms;windows;tsf;imm32 + ImeSharp + https://github.com/ryancheung/ImeSharp + https://github.com/ryancheung/ImeSharp + ryancheung + MIT + + + + ..\Artifacts + ImeSharp + ImeSharp + 5 + + + + + + + + diff --git a/Libraries/ImeSharp/Imm32Manager.cs b/Libraries/ImeSharp/Imm32Manager.cs new file mode 100644 index 000000000..9cf0c2768 --- /dev/null +++ b/Libraries/ImeSharp/Imm32Manager.cs @@ -0,0 +1,349 @@ +using System; +using System.Buffers; +using System.Runtime.InteropServices; +using System.Globalization; +using System.Diagnostics; +using ImeSharp.Native; + +namespace ImeSharp +{ + internal class Imm32Manager + { + + // If the system is IMM enabled, this is true. + private static bool _immEnabled = SafeSystemMetrics.IsImmEnabled; + + public static bool ImmEnabled { get { return _immEnabled; } } + + public const int LANG_CHINESE = 0x04; + public const int LANG_KOREAN = 0x12; + public const int LANG_JAPANESE = 0x11; + + public static int PRIMARYLANGID(int lgid) + { + return ((ushort)(lgid) & 0x3ff); + } + + static Imm32Manager() + { + SetCurrentCulture(); + } + + /// + /// return true if the current keyboard layout is a real IMM32-IME. + /// + public static bool IsImm32ImeCurrent() + { + if (!_immEnabled) + return false; + + IntPtr hkl = NativeMethods.GetKeyboardLayout(0); + + return IsImm32Ime(hkl); + } + + /// + /// return true if the keyboard layout is a real IMM32-IME. + /// + public static bool IsImm32Ime(IntPtr hkl) + { + if (hkl == IntPtr.Zero) + return false; + + return ((NativeMethods.IntPtrToInt32(hkl) & 0xf0000000) == 0xe0000000); + } + + private static int _inputLanguageId; + + internal static void SetCurrentCulture() + { + var hkl = NativeMethods.GetKeyboardLayout(0); + _inputLanguageId = NativeMethods.IntPtrToInt32(hkl) & 0xFFFF; + } + + private IntPtr _windowHandle; + + private IntPtr _defaultImc; + private IntPtr DefaultImc + { + get + { + if (_defaultImc == IntPtr.Zero) + { + IntPtr himc = NativeMethods.ImmCreateContext(); + + // Store the default imc to _defaultImc. + _defaultImc = himc; + } + return _defaultImc; + } + } + + private static ImmCompositionStringHandler _compositionStringHandler; + private static ImmCompositionIntHandler _compositionCursorHandler; + + private bool _lastImmOpenStatus; + + public Imm32Manager(IntPtr windowHandle) + { + _windowHandle = windowHandle; + + _compositionStringHandler = new ImmCompositionStringHandler(DefaultImc, NativeMethods.GCS_COMPSTR); + _compositionCursorHandler = new ImmCompositionIntHandler(DefaultImc, NativeMethods.GCS_CURSORPOS); + } + + public static Imm32Manager Current + { + get + { + var defaultImm32Manager = InputMethod.DefaultImm32Manager; + + if (defaultImm32Manager == null) + { + defaultImm32Manager = new Imm32Manager(InputMethod.WindowHandle); + InputMethod.DefaultImm32Manager = defaultImm32Manager; + } + + return defaultImm32Manager; + } + } + + public void Enable() + { + if (DefaultImc != IntPtr.Zero) + { + // Create a temporary system caret + NativeMethods.CreateCaret(_windowHandle, IntPtr.Zero, 2, 10); + NativeMethods.ImmAssociateContext(_windowHandle, _defaultImc); + } + } + + public void Disable() + { + NativeMethods.ImmAssociateContext(_windowHandle, IntPtr.Zero); + NativeMethods.DestroyCaret(); + } + + const int kCaretMargin = 1; + + // Set candidate window position. + // Borrowed from https://github.com/chromium/chromium/blob/master/ui/base/ime/win/imm32_manager.cc + public void SetCandidateWindow(TsfSharp.Rect caretRect) + { + int x = caretRect.Left; + int y = caretRect.Top; + + if (PRIMARYLANGID(_inputLanguageId) == LANG_CHINESE) + { + // Chinese IMEs ignore function calls to ::ImmSetCandidateWindow() + // when a user disables TSF (Text Service Framework) and CUAS (Cicero + // Unaware Application Support). + // On the other hand, when a user enables TSF and CUAS, Chinese IMEs + // ignore the position of the current system caret and uses the + // parameters given to ::ImmSetCandidateWindow() with its 'dwStyle' + // parameter CFS_CANDIDATEPOS. + // Therefore, we do not only call ::ImmSetCandidateWindow() but also + // set the positions of the temporary system caret. + var candidateForm = new NativeMethods.CANDIDATEFORM(); + candidateForm.dwStyle = NativeMethods.CFS_CANDIDATEPOS; + candidateForm.ptCurrentPos.X = x; + candidateForm.ptCurrentPos.Y = y; + NativeMethods.ImmSetCandidateWindow(_defaultImc, ref candidateForm); + } + + if (PRIMARYLANGID(_inputLanguageId) == LANG_JAPANESE) + NativeMethods.SetCaretPos(x, caretRect.Bottom); + else + NativeMethods.SetCaretPos(x, y); + + // Set composition window position also to ensure move the candidate window position. + var compositionForm = new NativeMethods.COMPOSITIONFORM(); + compositionForm.dwStyle = NativeMethods.CFS_POINT; + compositionForm.ptCurrentPos.X = x; + compositionForm.ptCurrentPos.Y = y; + NativeMethods.ImmSetCompositionWindow(_defaultImc, ref compositionForm); + + if (PRIMARYLANGID(_inputLanguageId) == LANG_KOREAN) + { + // Chinese IMEs and Japanese IMEs require the upper-left corner of + // the caret to move the position of their candidate windows. + // On the other hand, Korean IMEs require the lower-left corner of the + // caret to move their candidate windows. + y += kCaretMargin; + } + + // Need to return here since some Chinese IMEs would stuck if set + // candidate window position with CFS_EXCLUDE style. + if (PRIMARYLANGID(_inputLanguageId) == LANG_CHINESE) return; + + // Japanese IMEs and Korean IMEs also use the rectangle given to + // ::ImmSetCandidateWindow() with its 'dwStyle' parameter CFS_EXCLUDE + // to move their candidate windows when a user disables TSF and CUAS. + // Therefore, we also set this parameter here. + var excludeRectangle = new NativeMethods.CANDIDATEFORM(); + compositionForm.dwStyle = NativeMethods.CFS_EXCLUDE; + compositionForm.ptCurrentPos.X = x; + compositionForm.ptCurrentPos.Y = y; + compositionForm.rcArea.Left = x; + compositionForm.rcArea.Top = y; + compositionForm.rcArea.Right = caretRect.Right; + compositionForm.rcArea.Bottom = caretRect.Bottom; + NativeMethods.ImmSetCandidateWindow(_defaultImc, ref excludeRectangle); + } + + internal bool ProcessMessage(IntPtr hWnd, uint msg, ref IntPtr wParam, ref IntPtr lParam) + { + switch (msg) + { + case NativeMethods.WM_INPUTLANGCHANGE: + SetCurrentCulture(); + break; + case NativeMethods.WM_IME_SETCONTEXT: + if (wParam.ToInt32() == 1 && InputMethod.Enabled) + { + // Must re-associate ime context or things won't work. + NativeMethods.ImmAssociateContext(_windowHandle, DefaultImc); + + if (_lastImmOpenStatus) + NativeMethods.ImmSetOpenStatus(DefaultImc, true); + + var lParam64 = lParam.ToInt64(); + if (!InputMethod.ShowOSImeWindow) + lParam64 &= ~NativeMethods.ISC_SHOWUICANDIDATEWINDOW; + else + lParam64 &= ~NativeMethods.ISC_SHOWUICOMPOSITIONWINDOW; + lParam = (IntPtr)(int)lParam64; + } + break; + case NativeMethods.WM_KILLFOCUS: + _lastImmOpenStatus = NativeMethods.ImmGetOpenStatus(DefaultImc); + break; + case NativeMethods.WM_IME_NOTIFY: + IMENotify(wParam.ToInt32()); + if (!InputMethod.ShowOSImeWindow) + return true; + break; + case NativeMethods.WM_IME_STARTCOMPOSITION: + //Debug.WriteLine("NativeMethods.WM_IME_STARTCOMPOSITION"); + IMEStartComposion(lParam.ToInt32()); + // Force to not show composition window, `lParam64 &= ~ISC_SHOWUICOMPOSITIONWINDOW` don't work sometime. + return true; + case NativeMethods.WM_IME_COMPOSITION: + //Debug.WriteLine("NativeMethods.WM_IME_COMPOSITION"); + IMEComposition(lParam.ToInt32()); + break; + case NativeMethods.WM_IME_ENDCOMPOSITION: + //Debug.WriteLine("NativeMethods.WM_IME_ENDCOMPOSITION"); + IMEEndComposition(lParam.ToInt32()); + if (!InputMethod.ShowOSImeWindow) + return true; + break; + } + + return false; + } + + private void IMENotify(int WParam) + { + switch (WParam) + { + case NativeMethods.IMN_OPENCANDIDATE: + case NativeMethods.IMN_CHANGECANDIDATE: + IMEChangeCandidate(); + break; + case NativeMethods.IMN_CLOSECANDIDATE: + InputMethod.ClearCandidates(); + break; + default: + break; + } + } + + private void IMEChangeCandidate() + { + if (TextServicesLoader.ServicesInstalled) // TSF is enabled + { + if (!TextStore.Current.SupportUIElement) // But active IME not support UIElement + UpdateCandidates(); // We have to fetch candidate list here. + + return; + } + + // Normal candidate list fetch in IMM32 + UpdateCandidates(); + // Send event on candidate updates + InputMethod.OnTextComposition(this, new IMEString(_compositionStringHandler.Values, _compositionStringHandler.Count), _compositionCursorHandler.Value); + + if (InputMethod.CandidateList != null) + ArrayPool.Shared.Return(InputMethod.CandidateList); + } + + private unsafe void UpdateCandidates() + { + uint length = NativeMethods.ImmGetCandidateList(DefaultImc, 0, IntPtr.Zero, 0); + if (length > 0) + { + IntPtr pointer = Marshal.AllocHGlobal((int)length); + length = NativeMethods.ImmGetCandidateList(DefaultImc, 0, pointer, length); + NativeMethods.CANDIDATELIST* cList = (NativeMethods.CANDIDATELIST*)pointer; + + var selection = (int)cList->dwSelection; + var pageStart = (int)cList->dwPageStart; + var pageSize = (int)cList->dwPageSize; + + selection -= pageStart; + + IMEString[] candidates = ArrayPool.Shared.Rent(pageSize); + + int i, j; + for (i = pageStart, j = 0; i < cList->dwCount && j < pageSize; i++, j++) + { + int sOffset = Marshal.ReadInt32(pointer, 24 + 4 * i); + candidates[j] = new IMEString(pointer + sOffset); + } + + //Debug.WriteLine("IMM========IMM"); + //Debug.WriteLine("pageStart: {0}, pageSize: {1}, selection: {2}, candidates:", pageStart, pageSize, selection); + //for (int k = 0; k < candidates.Length; k++) + // Debug.WriteLine(" {2}{0}.{1}", k + 1, candidates[k], k == selection ? "*" : ""); + //Debug.WriteLine("IMM++++++++IMM"); + + InputMethod.CandidatePageStart = pageStart; + InputMethod.CandidatePageSize = pageSize; + InputMethod.CandidateSelection = selection; + InputMethod.CandidateList = candidates; + + Marshal.FreeHGlobal(pointer); + } + } + + private void ClearComposition() + { + _compositionStringHandler.Clear(); + } + + private void IMEStartComposion(int lParam) + { + InputMethod.OnTextCompositionStarted(this); + ClearComposition(); + } + + private void IMEComposition(int lParam) + { + if (_compositionStringHandler.Update(lParam)) + { + _compositionCursorHandler.Update(); + + InputMethod.OnTextComposition(this, new IMEString(_compositionStringHandler.Values, _compositionStringHandler.Count), _compositionCursorHandler.Value); + } + } + + private void IMEEndComposition(int lParam) + { + InputMethod.ClearCandidates(); + ClearComposition(); + + InputMethod.OnTextCompositionEnded(this); + } + } +} diff --git a/Libraries/ImeSharp/ImmCompositionResultHandler.cs b/Libraries/ImeSharp/ImmCompositionResultHandler.cs new file mode 100644 index 000000000..69d3d651b --- /dev/null +++ b/Libraries/ImeSharp/ImmCompositionResultHandler.cs @@ -0,0 +1,119 @@ +using System; +using System.Text; +using System.Runtime.InteropServices; +using ImeSharp.Native; + +namespace ImeSharp +{ + internal abstract class ImmCompositionResultHandler + { + protected IntPtr _imeContext; + + public int Flag { get; private set; } + + internal ImmCompositionResultHandler(IntPtr imeContext, int flag) + { + this.Flag = flag; + _imeContext = imeContext; + } + + internal virtual void Update() { } + + internal bool Update(int lParam) + { + if ((lParam & Flag) == Flag) + { + Update(); + return true; + } + return false; + } + } + + internal class ImmCompositionStringHandler : ImmCompositionResultHandler + { + internal const int BufferSize = 1024; + private byte[] _byteBuffer = new byte[BufferSize]; + private int _byteCount; + + private char[] _charBuffer = new char[BufferSize / 2]; + private int _charCount; + + public char[] Values { get { return _charBuffer; } } + public int Count { get { return _charCount; } } + + public char this[int index] + { + get + { + if (index >= _charCount || index < 0) + throw new ArgumentOutOfRangeException("index"); + + return _charBuffer[index]; + } + } + + internal ImmCompositionStringHandler(IntPtr imeContext, int flag) : base(imeContext, flag) + { + } + + public override string ToString() + { + if (_charCount <= 0) + return string.Empty; + + return new string(_charBuffer, 0, _charCount); + } + + internal void Clear() + { + Array.Clear(_byteBuffer, 0, _byteCount); + _byteCount = 0; + + Array.Clear(_charBuffer, 0, _charCount); + _charCount = 0; + } + + internal override void Update() + { + _byteCount = NativeMethods.ImmGetCompositionString(_imeContext, Flag, IntPtr.Zero, 0); + IntPtr pointer = Marshal.AllocHGlobal(_byteCount); + + try + { + Array.Clear(_byteBuffer, 0, _byteCount); + + if (_byteCount > 0) + { + NativeMethods.ImmGetCompositionString(_imeContext, Flag, pointer, _byteCount); + + Marshal.Copy(pointer, _byteBuffer, 0, _byteCount); + + Array.Clear(_charBuffer, 0, _charCount); + _charCount = Encoding.Unicode.GetChars(_byteBuffer, 0, _byteCount, _charBuffer, 0); + } + } + finally + { + Marshal.FreeHGlobal(pointer); + } + } + } + + internal class ImmCompositionIntHandler : ImmCompositionResultHandler + { + public int Value { get; private set; } + + internal ImmCompositionIntHandler(IntPtr imeContext, int flag) : base(imeContext, flag) { } + + public override string ToString() + { + return Value.ToString(); + } + + internal override void Update() + { + Value = NativeMethods.ImmGetCompositionString(_imeContext, Flag, IntPtr.Zero, 0); + } + } +} diff --git a/Libraries/ImeSharp/InputMethod.cs b/Libraries/ImeSharp/InputMethod.cs new file mode 100644 index 000000000..fa178cbd7 --- /dev/null +++ b/Libraries/ImeSharp/InputMethod.cs @@ -0,0 +1,246 @@ +using System; +using System.Globalization; +using System.Collections.Generic; +using System.Diagnostics; +using System.Runtime.InteropServices; +using ImeSharp.Native; + +namespace ImeSharp +{ + public static class InputMethod + { + private static IntPtr _windowHandle; + public static IntPtr WindowHandle { get { return _windowHandle; } } + + private static IntPtr _prevWndProc; + private static NativeMethods.WndProcDelegate _wndProcDelegate; + + private static TextServicesContext _textServicesContext; + internal static TextServicesContext TextServicesContext + { + get { return _textServicesContext; } + set { _textServicesContext = value; } + } + + private static TextStore _defaultTextStore; + internal static TextStore DefaultTextStore + { + get { return _defaultTextStore; } + set { _defaultTextStore = value; } + } + + private static Imm32Manager _defaultImm32Manager; + internal static Imm32Manager DefaultImm32Manager + { + get { return _defaultImm32Manager; } + set { _defaultImm32Manager = value; } + } + + private static bool _enabled; + public static bool Enabled + { + get { return _enabled; } + set + { + if (_enabled == value) return; + + _enabled = value; + + EnableOrDisableInputMethod(_enabled); + } + } + + internal static TsfSharp.Rect TextInputRect; + + /// + /// Set the position of the candidate window rendered by the OS. + /// Let the OS render the candidate window by set param "showOSImeWindow" to true on . + /// + public static void SetTextInputRect(int x, int y, int width, int height) + { + if (!_showOSImeWindow) return; + + TextInputRect.Left = x; + TextInputRect.Top = y; + TextInputRect.Right = x + width; + TextInputRect.Bottom = y + height; + + if (Imm32Manager.ImmEnabled) + Imm32Manager.Current.SetCandidateWindow(TextInputRect); + } + + private static bool _showOSImeWindow = false; + + /// + /// Return if let OS render IME Candidate window or not. + /// + public static bool ShowOSImeWindow { get { return _showOSImeWindow; } } + + internal static int CandidatePageStart; + internal static int CandidatePageSize; + internal static int CandidateSelection; + internal static IMEString[] CandidateList; + + internal static void ClearCandidates() + { + CandidateList = null; + CandidatePageStart = 0; + CandidatePageSize = 0; + CandidateSelection = 0; + } + + public static event EventHandler TextComposition; + public static event EventHandler TextInput; + public static event EventHandler CommitTextComposition; + + public static TextInputCallback TextInputCallback { get; set; } + public static TextCompositionCallback TextCompositionCallback { get; set; } + public static CommitTextCompositionCallback CommitTextCompositionCallback { get; set; } + + /// + /// Initialize InputMethod with a Window Handle. + /// Let the OS render the candidate window by set to true. + /// + public static void Initialize(IntPtr windowHandle, bool showOSImeWindow = true) + { + if (_windowHandle != IntPtr.Zero) + throw new InvalidOperationException("InputMethod can only be initialized once!"); + + _windowHandle = windowHandle; + _showOSImeWindow = showOSImeWindow; + + _wndProcDelegate = new NativeMethods.WndProcDelegate(WndProc); + _prevWndProc = (IntPtr)NativeMethods.SetWindowLongPtr(_windowHandle, NativeMethods.GWL_WNDPROC, + Marshal.GetFunctionPointerForDelegate(_wndProcDelegate)); + } + + internal static void OnTextInput(object sender, char character) + { + if (TextInput != null) + TextInput.Invoke(sender, new IMETextInputEventArgs(character)); + + if (TextInputCallback != null) + TextInputCallback(character); + } + + // Some Chinese IME only send composition start event but no composition update event. + // We need this to ensure candidate window position can be set in time. + internal static void OnTextCompositionStarted(object sender) + { + if (TextComposition != null) + TextComposition.Invoke(sender, new IMETextCompositionEventArgs(IMEString.Empty, 0)); + + if (TextCompositionCallback != null) + TextCompositionCallback(IMEString.Empty, 0, null, 0, 0, 0); + } + + // On text composition update. + internal static void OnTextComposition(object sender, IMEString compositionText, int cursorPos) + { + if (compositionText.Count == 0) // Crash guard + cursorPos = 0; + + if (cursorPos > compositionText.Count) // Another crash guard + cursorPos = compositionText.Count; + + if (TextComposition != null) + { + TextComposition.Invoke(sender, + new IMETextCompositionEventArgs(compositionText, cursorPos, CandidateList, CandidatePageStart, CandidatePageSize, CandidateSelection)); + } + + if (TextCompositionCallback != null) + TextCompositionCallback(compositionText, cursorPos, CandidateList, CandidatePageStart, CandidatePageSize, CandidateSelection); + } + + internal static void OnTextCompositionResult(object sender, string compositionResult) + { + if (CommitTextComposition != null) + CommitTextComposition.Invoke(sender, compositionResult); + + if (CommitTextCompositionCallback != null) + CommitTextCompositionCallback(compositionResult); + } + + internal static void OnTextCompositionEnded(object sender) + { + if (TextComposition != null) + TextComposition.Invoke(sender, new IMETextCompositionEventArgs(IMEString.Empty, 0)); + + if (TextCompositionCallback != null) + TextCompositionCallback(IMEString.Empty, 0, null, 0, 0, 0); + } + + private static void EnableOrDisableInputMethod(bool bEnabled) + { + // InputMethod enable/disabled status was changed on the current focus Element. + if (TextServicesLoader.ServicesInstalled) + { + if (bEnabled) + TextServicesContext.Current.SetFocusOnDefaultTextStore(); + else + TextServicesContext.Current.SetFocusOnEmptyDim(); + } + + // Under IMM32 enabled system, we associate default hIMC or null hIMC. + if (Imm32Manager.ImmEnabled) + { + if (bEnabled) + Imm32Manager.Current.Enable(); + else + Imm32Manager.Current.Disable(); + } + } + + private static IntPtr WndProc(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam) + { + if (Imm32Manager.ImmEnabled) + { + if (Imm32Manager.Current.ProcessMessage(hWnd, msg, ref wParam, ref lParam)) + return IntPtr.Zero; + } + + switch (msg) + { + case NativeMethods.WM_DESTROY: + TextServicesContext.Current.Uninitialize(true); + break; + case NativeMethods.WM_CHAR: + { + if (InputMethod.Enabled) + InputMethod.OnTextInput(null, (char)wParam.ToInt32()); + + break; + } + } + + return NativeMethods.CallWindowProc(_prevWndProc, hWnd, msg, wParam, lParam); + } + + /// + /// Custom windows message pumping to fix frame stuck issue. + /// Normally, you need call this method in handler. + /// + public static void PumpMessage() + { + if (!Enabled) return; + if (!TextServicesLoader.ServicesInstalled) return; + + bool result; + var msg = new NativeMethods.NativeMessage(); + + do + { + result = NativeMethods.PeekMessage(out msg, _windowHandle, 0, 0, NativeMethods.PM_REMOVE); + + if (result) + { + NativeMethods.TranslateMessage(ref msg); + NativeMethods.DispatchMessage(ref msg); + } + } while (result); + + NativeMethods.PostMessage(_windowHandle, NativeMethods.WM_NULL, IntPtr.Zero, IntPtr.Zero); + } + } +} diff --git a/Libraries/ImeSharp/Native/NativeMethods.cs b/Libraries/ImeSharp/Native/NativeMethods.cs new file mode 100644 index 000000000..1e3d6f901 --- /dev/null +++ b/Libraries/ImeSharp/Native/NativeMethods.cs @@ -0,0 +1,149 @@ +using System; +using System.Text; +using System.Runtime.InteropServices; + +namespace ImeSharp.Native +{ + public partial class NativeMethods + { + #region Constants + + public const int S_OK = 0x00000000; + public const int S_FALSE = 0x00000001; + public const int E_FAIL = unchecked((int)0x80004005); + public const int E_INVALIDARG = unchecked((int)0x80070057); + public const int E_NOTIMPL = unchecked((int)0x80004001); + + public const int WM_KEYFIRST = 0x0100; + public const int WM_KEYDOWN = 0x0100; + public const int WM_KEYUP = 0x0101; + public const int WM_CHAR = 0x0102; + public const int WM_DEADCHAR = 0x0103; + public const int WM_SYSKEYDOWN = 0x0104; + public const int WM_SYSKEYUP = 0x0105; + public const int WM_SYSCHAR = 0x0106; + public const int WM_SYSDEADCHAR = 0x0107; + public const int WM_UNICHAR = 0x0109; + public const int WM_KEYLAST = 0x0109; + public const int UNICODE_NOCHAR = 0xFFFF; + + public const int WM_NOTIFY = 0x004E; + public const int WM_INPUTLANGCHANGEREQUEST = 0x0050; + public const int WM_INPUTLANGCHANGE = 0x0051; + public const int WM_TCARD = 0x0052; + public const int WM_HELP = 0x0053; + public const int WM_USERCHANGED = 0x0054; + public const int WM_NOTIFYFORMAT = 0x0055; + + public const int GWL_WNDPROC = -4; + + public const int WM_ACTIVATE = 0x0006; + // WM_ACTIVATE state values + public const int WA_INACTIVE = 0; + public const int WA_ACTIVE = 1; + public const int WA_CLICKACTIVE = 2; + + public const int WM_SETFOCUS = 0x0007; + public const int WM_KILLFOCUS = 0x0008; + + public const int WM_DESTROY = 0x0002; + public const int WM_NULL = 0x0000; + public const int WM_QUIT = 0x0012; + + public const int CLSCTX_INPROC_SERVER = 0x1; + + public const int PM_NOREMOVE = 0x0000; + public const int PM_REMOVE = 0x0001; + public const int PM_NOYIELD = 0x0002; + + #endregion Constants + + #region Structs + + [StructLayout(LayoutKind.Sequential)] + public struct NativeMessage + { + public IntPtr handle; + public uint msg; + public IntPtr wParam; + public IntPtr lParam; + public uint time; + public int ptX; + public int ptY; + } + + #endregion + + [DllImport("user32.dll")] + public static extern int GetSystemMetrics(SM nIndex); + + // We have this wrapper because casting IntPtr to int may + // generate OverflowException when one of high 32 bits is set. + public static int IntPtrToInt32(IntPtr intPtr) + { + return unchecked((int)intPtr.ToInt64()); + } + + [DllImport("user32.dll", ExactSpelling = true, CharSet = CharSet.Unicode)] + public static extern IntPtr GetKeyboardLayout(int dwLayout); + + public delegate IntPtr WndProcDelegate(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam); + + [DllImport("user32.dll")] + public static extern IntPtr CallWindowProc(IntPtr lpPrevWndFunc, IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); + + // This static method is required because legacy OSes do not support + public static IntPtr SetWindowLongPtr(IntPtr hWnd, int nIndex, IntPtr dwNewLong) + { + if (IntPtr.Size == 8) + return SetWindowLongPtr64(hWnd, nIndex, dwNewLong); + else + return new IntPtr(SetWindowLong32(hWnd, nIndex, dwNewLong.ToInt32())); + } + + [DllImport("user32.dll", EntryPoint = "SetWindowLong", CharSet = CharSet.Unicode)] + private static extern int SetWindowLong32(IntPtr hWnd, int nIndex, int dwNewLong); + + [DllImport("user32.dll", EntryPoint = "SetWindowLongPtr", CharSet = CharSet.Unicode)] + private static extern IntPtr SetWindowLongPtr64(IntPtr hWnd, int nIndex, IntPtr dwNewLong); + + [DllImport("user32.dll", SetLastError = true)] + public static extern bool GetWindowRect(IntPtr hwnd, out TsfSharp.Rect lpRect); + + [DllImport("user32", ExactSpelling = true, SetLastError = true)] + public static extern int MapWindowPoints(IntPtr hWndFrom, IntPtr hWndTo, ref TsfSharp.Rect rect, [MarshalAs(UnmanagedType.U4)] int cPoints); + + + [DllImport("user32.dll", CharSet = CharSet.Unicode)] + public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, StringBuilder lParam); + + [DllImport("user32.dll", CharSet = CharSet.Unicode)] + public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam); + + [DllImport("user32.dll", CharSet = CharSet.Unicode)] + public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam); + + [DllImport("user32.dll", CharSet = CharSet.Unicode)] + public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, ref IntPtr lParam); + + [DllImport("user32.dll", CharSet = CharSet.Unicode)] + public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, IntPtr lParam); + + [DllImport("user32.dll", CharSet = CharSet.Unicode)] + public static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); + + [DllImport("user32.dll")] + public static extern bool TranslateMessage(ref NativeMessage lpMsg); + + [DllImport("user32.dll")] + public static extern IntPtr DispatchMessage(ref NativeMessage lpmsg); + + [DllImport("User32.dll", CharSet = CharSet.Unicode)] + public static extern bool PeekMessage(out NativeMessage msg, IntPtr hWnd, uint messageFilterMin, uint messageFilterMax, uint flags); + + + [DllImport("ole32.dll", ExactSpelling = true, EntryPoint = "CoCreateInstance", PreserveSig = true)] + public static extern int CoCreateInstance([In, MarshalAs(UnmanagedType.LPStruct)] Guid rclsid, IntPtr pUnkOuter, int dwClsContext, [In, MarshalAs(UnmanagedType.LPStruct)] Guid riid, out IntPtr ppv); + + } +} diff --git a/Libraries/ImeSharp/Native/NativeMethodsIMM32.cs b/Libraries/ImeSharp/Native/NativeMethodsIMM32.cs new file mode 100644 index 000000000..701d6aff2 --- /dev/null +++ b/Libraries/ImeSharp/Native/NativeMethodsIMM32.cs @@ -0,0 +1,156 @@ +using System; +using System.Runtime.InteropServices; + +namespace ImeSharp.Native +{ + public partial class NativeMethods + { + #region Constants + + public const int WM_IME_SETCONTEXT = 0x0281; + public const int WM_IME_NOTIFY = 0x0282; + public const int WM_IME_CONTROL = 0x0283; + public const int WM_IME_COMPOSITIONFULL = 0x0284; + public const int WM_IME_SELECT = 0x0285; + public const int WM_IME_CHAR = 0x0286; + public const int WM_IME_REQUEST = 0x0288; + public const int WM_IME_KEYDOWN = 0x0290; + public const int WM_IME_KEYUP = 0x0291; + public const int WM_IME_STARTCOMPOSITION = 0x010D; + public const int WM_IME_ENDCOMPOSITION = 0x010E; + public const int WM_IME_COMPOSITION = 0x010F; + public const int WM_IME_KEYLAST = 0x010F; + + // wParam of report message WM_IME_NOTIFY + public const int IMN_CLOSESTATUSWINDOW = 0x0001; + public const int IMN_OPENSTATUSWINDOW = 0x0002; + public const int IMN_CHANGECANDIDATE = 0x0003; + public const int IMN_CLOSECANDIDATE = 0x0004; + public const int IMN_OPENCANDIDATE = 0x0005; + public const int IMN_SETCONVERSIONMODE = 0x0006; + public const int IMN_SETSENTENCEMODE = 0x0007; + public const int IMN_SETOPENSTATUS = 0x0008; + public const int IMN_SETCANDIDATEPOS = 0x0009; + public const int IMN_SETCOMPOSITIONFONT = 0x000A; + public const int IMN_SETCOMPOSITIONWINDOW = 0x000B; + public const int IMN_SETSTATUSWINDOWPOS = 0x000C; + public const int IMN_GUIDELINE = 0x000D; + public const int IMN_PRIVATE = 0x000E; + + // wParam of report message WM_IME_REQUEST + public const int IMR_COMPOSITIONWINDOW = 0x0001; + public const int IMR_CANDIDATEWINDOW = 0x0002; + public const int IMR_COMPOSITIONFONT = 0x0003; + public const int IMR_RECONVERTSTRING = 0x0004; + public const int IMR_CONFIRMRECONVERTSTRING = 0x0005; + public const int IMR_QUERYCHARPOSITION = 0x0006; + public const int IMR_DOCUMENTFEED = 0x0007; + + // parameter of ImmGetCompositionString + public const int GCS_COMPREADSTR = 0x0001; + public const int GCS_COMPREADATTR = 0x0002; + public const int GCS_COMPREADCLAUSE = 0x0004; + public const int GCS_COMPSTR = 0x0008; + public const int GCS_COMPATTR = 0x0010; + public const int GCS_COMPCLAUSE = 0x0020; + public const int GCS_CURSORPOS = 0x0080; + public const int GCS_DELTASTART = 0x0100; + public const int GCS_RESULTREADSTR = 0x0200; + public const int GCS_RESULTREADCLAUSE = 0x0400; + public const int GCS_RESULTSTR = 0x0800; + public const int GCS_RESULTCLAUSE = 0x1000; + + public const int GCS_COMP = (GCS_COMPSTR | GCS_COMPATTR | GCS_COMPCLAUSE); + public const int GCS_COMPREAD = (GCS_COMPREADSTR | GCS_COMPREADATTR | GCS_COMPREADCLAUSE); + public const int GCS_RESULT = (GCS_RESULTSTR | GCS_RESULTCLAUSE); + public const int GCS_RESULTREAD = (GCS_RESULTREADSTR | GCS_RESULTREADCLAUSE); + + public const int CFS_CANDIDATEPOS = 0x0040; + public const int CFS_POINT = 0x0002; + public const int CFS_EXCLUDE = 0x0080; + + // lParam for WM_IME_SETCONTEXT + public const long ISC_SHOWUICANDIDATEWINDOW = 0x00000001; + public const long ISC_SHOWUICOMPOSITIONWINDOW = 0x80000000; + public const long ISC_SHOWUIGUIDELINE = 0x40000000; + public const long ISC_SHOWUIALLCANDIDATEWINDOW = 0x0000000F; + public const long ISC_SHOWUIALL = 0xC000000F; + + #endregion Constants + + [StructLayout(LayoutKind.Sequential)] + public unsafe struct CANDIDATELIST + { + public uint dwSize; + public uint dwStyle; + public uint dwCount; + public uint dwSelection; + public uint dwPageStart; + public uint dwPageSize; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1, ArraySubType = UnmanagedType.U4)] + public fixed uint dwOffset[1]; + } + + // CANDIDATEFORM structures + [StructLayout(LayoutKind.Sequential)] + public struct CANDIDATEFORM + { + public int dwIndex; + public int dwStyle; + public TsfSharp.Point ptCurrentPos; + public TsfSharp.Rect rcArea; + } + + // COMPOSITIONFORM structures + [StructLayout(LayoutKind.Sequential)] + public struct COMPOSITIONFORM + { + public int dwStyle; + public TsfSharp.Point ptCurrentPos; + public TsfSharp.Rect rcArea; + } + + [DllImport("imm32.dll", SetLastError = true)] + public static extern IntPtr ImmCreateContext(); + + [DllImport("imm32.dll", SetLastError = true)] + public static extern bool ImmDestroyContext(IntPtr hIMC); + + [DllImport("imm32.dll", SetLastError = true)] + public static extern IntPtr ImmAssociateContext(IntPtr hWnd, IntPtr hIMC); + + [DllImport("imm32.dll", SetLastError = true)] + public static extern IntPtr ImmReleaseContext(IntPtr hWnd, IntPtr hIMC); + + [DllImport("imm32.dll", CharSet = CharSet.Unicode)] + public static extern uint ImmGetCandidateList(IntPtr hIMC, uint deIndex, IntPtr candidateList, uint dwBufLen); + + [DllImport("imm32.dll", CharSet = CharSet.Unicode, SetLastError = true)] + public static extern int ImmGetCompositionString(IntPtr hIMC, int CompositionStringFlag, IntPtr buffer, int bufferLength); + + [DllImport("imm32.dll", SetLastError = true)] + public static extern IntPtr ImmGetContext(IntPtr hWnd); + + [DllImport("Imm32.dll", SetLastError = true)] + public static extern bool ImmGetOpenStatus(IntPtr hIMC); + + [DllImport("Imm32.dll", SetLastError = true)] + public static extern bool ImmSetOpenStatus(IntPtr hIMC, bool open); + + [DllImport("imm32.dll", SetLastError = true)] + public static extern bool ImmSetCandidateWindow(IntPtr hIMC, ref CANDIDATEFORM candidateForm); + + [DllImport("imm32.dll", SetLastError = true)] + public static extern int ImmSetCompositionWindow(IntPtr hIMC, ref COMPOSITIONFORM compForm); + + + [DllImport("user32.dll", SetLastError = true)] + public static extern bool CreateCaret(IntPtr hWnd, IntPtr hBitmap, int nWidth, int nHeight); + + [DllImport("user32.dll", SetLastError = true)] + public static extern bool DestroyCaret(); + + [DllImport("user32.dll", SetLastError = true)] + public static extern bool SetCaretPos(int x, int y); + } +} diff --git a/Libraries/ImeSharp/Native/NativeValues.cs b/Libraries/ImeSharp/Native/NativeValues.cs new file mode 100644 index 000000000..1c0dd9a36 --- /dev/null +++ b/Libraries/ImeSharp/Native/NativeValues.cs @@ -0,0 +1,95 @@ +using System; + +namespace ImeSharp.Native +{ + /// + /// SystemMetrics. SM_* + /// + public enum SM + { + CXSCREEN = 0, + CYSCREEN = 1, + CXVSCROLL = 2, + CYHSCROLL = 3, + CYCAPTION = 4, + CXBORDER = 5, + CYBORDER = 6, + CXFIXEDFRAME = 7, + CYFIXEDFRAME = 8, + CYVTHUMB = 9, + CXHTHUMB = 10, + CXICON = 11, + CYICON = 12, + CXCURSOR = 13, + CYCURSOR = 14, + CYMENU = 15, + CXFULLSCREEN = 16, + CYFULLSCREEN = 17, + CYKANJIWINDOW = 18, + MOUSEPRESENT = 19, + CYVSCROLL = 20, + CXHSCROLL = 21, + DEBUG = 22, + SWAPBUTTON = 23, + CXMIN = 28, + CYMIN = 29, + CXSIZE = 30, + CYSIZE = 31, + CXFRAME = 32, + CXSIZEFRAME = CXFRAME, + CYFRAME = 33, + CYSIZEFRAME = CYFRAME, + CXMINTRACK = 34, + CYMINTRACK = 35, + CXDOUBLECLK = 36, + CYDOUBLECLK = 37, + CXICONSPACING = 38, + CYICONSPACING = 39, + MENUDROPALIGNMENT = 40, + PENWINDOWS = 41, + DBCSENABLED = 42, + CMOUSEBUTTONS = 43, + SECURE = 44, + CXEDGE = 45, + CYEDGE = 46, + CXMINSPACING = 47, + CYMINSPACING = 48, + CXSMICON = 49, + CYSMICON = 50, + CYSMCAPTION = 51, + CXSMSIZE = 52, + CYSMSIZE = 53, + CXMENUSIZE = 54, + CYMENUSIZE = 55, + ARRANGE = 56, + CXMINIMIZED = 57, + CYMINIMIZED = 58, + CXMAXTRACK = 59, + CYMAXTRACK = 60, + CXMAXIMIZED = 61, + CYMAXIMIZED = 62, + NETWORK = 63, + CLEANBOOT = 67, + CXDRAG = 68, + CYDRAG = 69, + SHOWSOUNDS = 70, + CXMENUCHECK = 71, + CYMENUCHECK = 72, + SLOWMACHINE = 73, + MIDEASTENABLED = 74, + MOUSEWHEELPRESENT = 75, + XVIRTUALSCREEN = 76, + YVIRTUALSCREEN = 77, + CXVIRTUALSCREEN = 78, + CYVIRTUALSCREEN = 79, + CMONITORS = 80, + SAMEDISPLAYFORMAT = 81, + IMMENABLED = 82, + CXFOCUSBORDER = 83, + CYFOCUSBORDER = 84, + TABLETPC = 86, + MEDIACENTER = 87, + REMOTESESSION = 0x1000, + REMOTECONTROL = 0x2001, + } +} diff --git a/Libraries/ImeSharp/SafeSystemMetrics.cs b/Libraries/ImeSharp/SafeSystemMetrics.cs new file mode 100644 index 000000000..a2e76f5b2 --- /dev/null +++ b/Libraries/ImeSharp/SafeSystemMetrics.cs @@ -0,0 +1,58 @@ +using System; +using ImeSharp.Native; + +namespace ImeSharp +{ + /// + /// Contains properties that are queries into the system's various settings. + /// + internal sealed class SafeSystemMetrics + { + + private SafeSystemMetrics() + { + } + + /// + /// Maps to SM_CXDOUBLECLK + /// + public static int DoubleClickDeltaX + { + get { return NativeMethods.GetSystemMetrics(SM.CXDOUBLECLK); } + } + + /// + /// Maps to SM_CYDOUBLECLK + /// + public static int DoubleClickDeltaY + { + get { return NativeMethods.GetSystemMetrics(SM.CYDOUBLECLK); } + } + + + /// + /// Maps to SM_CXDRAG + /// + public static int DragDeltaX + { + get { return NativeMethods.GetSystemMetrics(SM.CXDRAG); } + } + + /// + /// Maps to SM_CYDRAG + /// + public static int DragDeltaY + { + get { return NativeMethods.GetSystemMetrics(SM.CYDRAG); } + } + + /// + /// Is an IMM enabled ? Maps to SM_IMMENABLED + /// + public static bool IsImmEnabled + { + get { return (NativeMethods.GetSystemMetrics(SM.IMMENABLED) != 0); } + } + + } +} diff --git a/Libraries/ImeSharp/TextInputCallbacks.cs b/Libraries/ImeSharp/TextInputCallbacks.cs new file mode 100644 index 000000000..c37837927 --- /dev/null +++ b/Libraries/ImeSharp/TextInputCallbacks.cs @@ -0,0 +1,6 @@ +namespace ImeSharp +{ + public delegate void TextInputCallback(char character); + public delegate void TextCompositionCallback(IMEString compositionText, int cursorPosition, IMEString[] candidateList, int candidatePageStart, int candidatePageSize, int candidateSelection); + public delegate void CommitTextCompositionCallback(string text); +} diff --git a/Libraries/ImeSharp/TextServicesContext.cs b/Libraries/ImeSharp/TextServicesContext.cs new file mode 100644 index 000000000..6ce846528 --- /dev/null +++ b/Libraries/ImeSharp/TextServicesContext.cs @@ -0,0 +1,374 @@ +using System; +using System.Runtime.InteropServices; +using System.Threading; +using System.Diagnostics; +using ImeSharp.Native; +using TsfSharp; + +namespace ImeSharp +{ + //------------------------------------------------------ + // + // TextServicesContext class + // + //------------------------------------------------------ + + /// + /// This class manages the ITfThreadMgr, EmptyDim and the reference to + /// the default TextStore. + /// + /// + /// + internal class TextServicesContext + { + public const int TF_POPF_ALL = 0x0001; + public const int TF_INVALID_COOKIE = -1; + public static readonly Guid IID_ITfUIElementSink = new Guid(0xea1ea136, 0x19df, 0x11d7, 0xa6, 0xd2, 0x00, 0x06, 0x5b, 0x84, 0x43, 0x5c); + public static readonly Guid IID_ITfTextEditSink = new Guid(0x8127d409, 0xccd3, 0x4683, 0x96, 0x7a, 0xb4, 0x3d, 0x5b, 0x48, 0x2b, 0xf7); + + + public static TextServicesContext Current + { + get + { + if (InputMethod.TextServicesContext == null) + InputMethod.TextServicesContext = new TextServicesContext(); + + return InputMethod.TextServicesContext; + } + } + + //------------------------------------------------------ + // + // Constructors + // + //------------------------------------------------------ + + #region Constructors + + /// + /// Instantiates a TextServicesContext. + /// + private TextServicesContext() + { + if (Thread.CurrentThread.GetApartmentState() != ApartmentState.STA) + Debug.WriteLine("CRASH: ImeSharp won't work on MTA thread!!!"); + } + + #endregion Constructors + + //------------------------------------------------------ + // + // public Methods + // + //------------------------------------------------------ + + #region public Methods + + /// + /// Releases all unmanaged resources allocated by the + /// TextServicesContext. + /// + /// + /// if appDomainShutdown == false, this method must be called on the + /// Dispatcher thread. Otherwise, the caller is an AppDomain.Shutdown + /// listener, and is calling from a worker thread. + /// + public void Uninitialize(bool appDomainShutdown) + { + // Unregister DefaultTextStore. + if (_defaultTextStore != null) + { + UnadviseSinks(); + if (_defaultTextStore.DocumentManager != null) + { + _defaultTextStore.DocumentManager.Pop(TF_POPF_ALL); + _defaultTextStore.DocumentManager.Dispose(); + _defaultTextStore.DocumentManager = null; + } + + _defaultTextStore = null; + } + + // Free up any remaining textstores. + if (_istimactivated == true) + { + // Shut down the thread manager when the last TextStore goes away. + // On XP, if we're called on a worker thread (during AppDomain shutdown) + // we can't call call any methods on _threadManager. The problem is + // that there's no proxy registered for ITfThreadMgr on OS versions + // previous to Vista. Not calling Deactivate will leak the IMEs, but + // in practice (1) they're singletons, so it's not unbounded; and (2) + // most applications will share the thread with other AppDomains that + // have a UI, in which case the IME won't be released until the process + // shuts down in any case. In theory we could also work around this + // problem by creating our own XP proxy/stub implementation, which would + // be added to WPF setup.... + if (!appDomainShutdown || System.Environment.OSVersion.Version.Major >= 6) + { + _threadManager.Deactivate(); + } + _istimactivated = false; + } + + // Release the empty dim. + if (_dimEmpty != null) + { + if (_dimEmpty != null) + { + _dimEmpty.Dispose(); + } + _dimEmpty = null; + } + + // Release the ThreadManager. + // We don't do this in UnregisterTextStore because someone may have + // called get_ThreadManager after the last TextStore was unregistered. + if (_threadManager != null) + { + if (_threadManager != null) + { + _threadManager.Dispose(); + } + _threadManager = null; + } + } + + // Called by framework's TextStore class. This method registers a + // document with TSF. The TextServicesContext must maintain this list + // to ensure all native resources are released after gc or uninitialization. + public void RegisterTextStore(TextStore defaultTextStore) + { + _defaultTextStore = defaultTextStore; + + ITfThreadMgrEx threadManager = ThreadManager; + + if (threadManager != null) + { + ITfDocumentMgr doc; + int editCookie = TF_INVALID_COOKIE; + + // Activate TSF on this thread if this is the first TextStore. + if (_istimactivated == false) + { + //temp variable created to retrieve the value + // which is then stored in the critical data. + if (InputMethod.ShowOSImeWindow) + _clientId = threadManager.Activate(); + else + _clientId = threadManager.ActivateEx(TfTmaeFlags.Uielementenabledonly); + + _istimactivated = true; + } + + // Create a TSF document. + doc = threadManager.CreateDocumentMgr(); + _defaultTextStore.DocumentManager = doc; + + doc.CreateContext(_clientId, 0 /* flags */, _defaultTextStore, out _editContext, out editCookie); + _defaultTextStore.EditCookie = editCookie; + _contextOwnerServices = _editContext.QueryInterface(); + + doc.Push(_editContext); + + AdviseSinks(); + } + } + + + public void SetFocusOnDefaultTextStore() + { + SetFocusOnDim(TextStore.Current.DocumentManager); + } + + public void SetFocusOnEmptyDim() + { + SetFocusOnDim(EmptyDocumentManager); + } + + + #endregion public Methods + + //------------------------------------------------------ + // + // public Properties + // + //------------------------------------------------------ + + /// + /// The default ITfThreadMgrEx object. + /// + public ITfThreadMgrEx ThreadManager + { + // The ITfThreadMgr for this thread. + get + { + if (_threadManager == null) + { + ITfThreadMgr threadMgr = null; + try + { + // This might fail in CoreRT + threadMgr = Tsf.GetThreadMgr(); + } + catch (SharpGen.Runtime.SharpGenException) + { + threadMgr = null; + } + + // Dispose previous ITfThreadMgr in case something weird happens + if (threadMgr != null) + { + if (threadMgr.IsThreadFocus) + threadMgr.Deactivate(); + threadMgr.Dispose(); + } + + _threadManager = TextServicesLoader.Load(); + + _uiElementMgr = _threadManager.QueryInterface(); + } + + return _threadManager; + } + } + + /// + /// Return the created ITfContext object. + /// + public ITfContext EditContext + { + get { return _editContext; } + } + + /// + /// Return the created ITfUIElementMgr object. + /// + public ITfUIElementMgr UIElementMgr + { + get { return _uiElementMgr; } + } + + /// + /// Return the created ITfContextOwnerServices object. + /// + public ITfContextOwnerServices ContextOwnerServices + { + get { return _contextOwnerServices; } + } + + //------------------------------------------------------ + // + // public Events + // + //------------------------------------------------------ + + //------------------------------------------------------ + // + // Private Methods + // + //------------------------------------------------------ + + private void SetFocusOnDim(ITfDocumentMgr dim) + { + ITfThreadMgrEx threadmgr = ThreadManager; + + if (threadmgr != null) + { + ITfDocumentMgr prevDocMgr = threadmgr.AssociateFocus(InputMethod.WindowHandle, dim); + } + } + + private void AdviseSinks() + { + var source = _uiElementMgr.QueryInterface(); + var guid = IID_ITfUIElementSink; + int sinkCookie = source.AdviseSink(guid, _defaultTextStore); + _defaultTextStore.UIElementSinkCookie = sinkCookie; + source.Dispose(); + + source = _editContext.QueryInterface(); + guid = IID_ITfTextEditSink; + sinkCookie = source.AdviseSink(guid, _defaultTextStore); + _defaultTextStore.TextEditSinkCookie = sinkCookie; + source.Dispose(); + } + + private void UnadviseSinks() + { + var source = _uiElementMgr.QueryInterface(); + + if (_defaultTextStore.UIElementSinkCookie != TF_INVALID_COOKIE) + { + source.UnadviseSink(_defaultTextStore.UIElementSinkCookie); + _defaultTextStore.UIElementSinkCookie = TF_INVALID_COOKIE; + } + source.Dispose(); + + source = _editContext.QueryInterface(); + if (_defaultTextStore.TextEditSinkCookie != TF_INVALID_COOKIE) + { + source.UnadviseSink(_defaultTextStore.TextEditSinkCookie); + _defaultTextStore.TextEditSinkCookie = TF_INVALID_COOKIE; + } + source.Dispose(); + } + + //------------------------------------------------------ + // + // Private Properties + // + //------------------------------------------------------ + + // Create an empty dim on demand. + private ITfDocumentMgr EmptyDocumentManager + { + get + { + if (_dimEmpty == null) + { + ITfThreadMgrEx threadManager = ThreadManager; + if (threadManager == null) + { + return null; + } + + ITfDocumentMgr dimEmptyTemp; + // Create a TSF document. + dimEmptyTemp = threadManager.CreateDocumentMgr(); + _dimEmpty = dimEmptyTemp; + } + return _dimEmpty; + } + } + + + //------------------------------------------------------ + // + // Private Fields + // + //------------------------------------------------------ + + #region Private Fields + + private TextStore _defaultTextStore; + + private ITfContext _editContext; + private ITfUIElementMgr _uiElementMgr; + private ITfContextOwnerServices _contextOwnerServices; + + // This is true if thread manager is activated. + private bool _istimactivated; + + // The root TSF object, created on demand. + private ITfThreadMgrEx _threadManager; + + // TSF ClientId from Activate call. + private int _clientId; + + // The empty dim for this thread. Created on demand. + private ITfDocumentMgr _dimEmpty; + + #endregion Private Fields + } +} diff --git a/Libraries/ImeSharp/TextServicesLoader.cs b/Libraries/ImeSharp/TextServicesLoader.cs new file mode 100644 index 000000000..ff2037b57 --- /dev/null +++ b/Libraries/ImeSharp/TextServicesLoader.cs @@ -0,0 +1,338 @@ +using System; +using System.Runtime.InteropServices; +using System.Diagnostics; +using System.Threading; +using Microsoft.Win32; +using ImeSharp.Native; +using TsfSharp; + +namespace ImeSharp +{ + // Creates ITfThreadMgr instances, the root object of the Text Services + // Framework. + internal class TextServicesLoader + { + public static readonly Guid CLSID_TF_ThreadMgr = new Guid("529a9e6b-6587-4f23-ab9e-9c7d683e3c50"); + public static readonly Guid IID_ITfThreadMgr = new Guid("aa80e801-2021-11d2-93e0-0060b067b86e"); + public static readonly Guid IID_ITfThreadMgrEx = new Guid("3e90ade3-7594-4cb0-bb58-69628f5f458c"); + public static readonly Guid IID_ITfThreadMgr2 = new Guid("0AB198EF-6477-4EE8-8812-6780EDB82D5E"); + + //------------------------------------------------------ + // + // Constructors + // + //------------------------------------------------------ + + #region Constructors + + // Private ctor to prevent anyone from instantiating this static class. + private TextServicesLoader() { } + + #endregion Constructors + + //------------------------------------------------------ + // + // public Properties + // + //------------------------------------------------------ + + #region public Properties + + /// + /// Loads an instance of the Text Services Framework. + /// + /// + /// May return null if no text services are available. + /// + public static ITfThreadMgrEx Load() + { + if (Thread.CurrentThread.GetApartmentState() != ApartmentState.STA) + Debug.WriteLine("CRASH: ImeSharp won't work on MTA thread!!!"); + + if (ServicesInstalled) + { + // NB: a COMException here means something went wrong initialzing Cicero. + // Cicero will throw an exception if it doesn't think it should have been + // loaded (no TIPs to run), you can check that in msctf.dll's NoTipsInstalled + // which lives in nt\windows\advcore\ctf\lib\immxutil.cpp. If that's the + // problem, ServicesInstalled is out of sync with Cicero's thinking. + IntPtr ret; + var hr = NativeMethods.CoCreateInstance(CLSID_TF_ThreadMgr, + IntPtr.Zero, + NativeMethods.CLSCTX_INPROC_SERVER, + IID_ITfThreadMgrEx, out ret); + + if (hr == NativeMethods.S_OK) + return new ITfThreadMgrEx(ret); + } + + return null; + } + + /// + /// return true if current OS version is Windows 7 or below. + /// + public static bool IsWindows7OrBelow() + { + if (Environment.OSVersion.Version.Major <= 5) + return true; + + if (Environment.OSVersion.Version.Major == 6 && Environment.OSVersion.Version.Minor <= 1) + return true; + + return false; + } + + /// + /// Informs the caller if text services are installed for the current user. + /// + /// + /// true if one or more text services are installed for the current user, otherwise false. + /// + /// + /// If this method returns false, TextServicesLoader.Load is guarenteed to return null. + /// Callers can use this information to avoid overhead that would otherwise be + /// required to support text services. + /// + public static bool ServicesInstalled + { + get + { + lock (s_servicesInstalledLock) + { + if (s_servicesInstalled == InstallState.Unknown) + { + s_servicesInstalled = TIPsWantToRun() ? InstallState.Installed : InstallState.NotInstalled; + } + } + + return (s_servicesInstalled == InstallState.Installed); + } + } + + #endregion public Properties + + //------------------------------------------------------ + // + // public Events + // + //------------------------------------------------------ + + //------------------------------------------------------ + // + // Private Methods + // + //------------------------------------------------------ + + #region Private Methods + + // + // This method tries to stop Avalon from loading Cicero when there are no TIPs to run. + // The perf tradeoff is a typically small number of registry checks versus loading and + // initializing cicero. + // + // The Algorithm: + // + // Do a quick check vs. the global disable flag, return false if it is set. + // For each key under HKLM\SOFTWARE\Microsoft\CTF\TIP (a TIP or category clsid) + // If the the key has a LanguageProfile subkey (it's a TIP clsid) + // Iterate under the matching TIP entry in HKCU. + // For each key under the LanguageProfile (a particular LANGID) + // For each key under the LANGID (an assembly GUID) + // Try to read the Enable value. + // If the value is set non-zero, then stop all processing and return true. + // If the value is set zero, continue. + // If the value does not exist, continue (default is disabled). + // If any Enable values were found under HKCU for the TIP, then stop all processing and return false. + // Else, no Enable values have been found thus far and we keep going to investigate HKLM. + // Iterate under the TIP entry in HKLM. + // For each key under the LanguageProfile (a particular LANGID) + // For each key under the LANGID (an assembly GUID) + // Try to read the Enable value. + // If the value is set non-zero, then stop all processing and return true. + // If the value does not exist, then stop all processing and return true (default is enabled). + // If the value is set zero, continue. + // If we finish iterating all entries under HKLM without returning true, return false. + // + + private static bool TIPsWantToRun() + { + object obj; + RegistryKey key; + bool tipsWantToRun = false; + + key = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\CTF", false); + + // Is cicero disabled completely for the current user? + if (key != null) + { + obj = key.GetValue("Disable Thread Input Manager"); + + if (obj is int && (int)obj != 0) + return false; + } + + // Loop through all the TIP entries for machine and current user. + tipsWantToRun = IterateSubKeys(Registry.LocalMachine, "SOFTWARE\\Microsoft\\CTF\\TIP", new IterateHandler(SingleTIPWantsToRun), true) == EnableState.Enabled; + + return tipsWantToRun; + } + + // Returns EnableState.Enabled if one or more TIPs are installed and + // enabled for the current user. + private static EnableState SingleTIPWantsToRun(RegistryKey keyLocalMachine, string subKeyName, bool localMachine) + { + EnableState result; + + if (subKeyName.Length != CLSIDLength) + return EnableState.Disabled; + + // We want subkey\LanguageProfile key. + // Loop through all the langid entries for TIP. + + // First, check current user. + result = IterateSubKeys(Registry.CurrentUser, "SOFTWARE\\Microsoft\\CTF\\TIP\\" + subKeyName + "\\LanguageProfile", new IterateHandler(IsLangidEnabled), false); + + // Any explicit value short circuits the process. + // Otherwise check local machine. + if (result == EnableState.None || result == EnableState.Error) + { + result = IterateSubKeys(keyLocalMachine, subKeyName + "\\LanguageProfile", new IterateHandler(IsLangidEnabled), true); + + if (result == EnableState.None) + { + result = EnableState.Enabled; + } + } + + return result; + } + + // Returns EnableState.Enabled if the supplied subkey is a valid LANGID key with enabled + // cicero assembly. + private static EnableState IsLangidEnabled(RegistryKey key, string subKeyName, bool localMachine) + { + if (subKeyName.Length != LANGIDLength) + return EnableState.Error; + + // Loop through all the assembly entries for the langid + return IterateSubKeys(key, subKeyName, new IterateHandler(IsAssemblyEnabled), localMachine); + } + + // Returns EnableState.Enabled if the supplied assembly key is enabled. + private static EnableState IsAssemblyEnabled(RegistryKey key, string subKeyName, bool localMachine) + { + RegistryKey subKey; + object obj; + + if (subKeyName.Length != CLSIDLength) + return EnableState.Error; + + // Open the local machine assembly key. + subKey = key.OpenSubKey(subKeyName); + + if (subKey == null) + return EnableState.Error; + + // Try to read the "Enable" value. + obj = subKey.GetValue("Enable"); + + if (obj is int) + { + return ((int)obj == 0) ? EnableState.Disabled : EnableState.Enabled; + } + + return EnableState.None; + } + + // Calls the supplied delegate on each of the children of keyBase. + private static EnableState IterateSubKeys(RegistryKey keyBase, string subKey, IterateHandler handler, bool localMachine) + { + RegistryKey key; + string[] subKeyNames; + EnableState state; + + key = keyBase.OpenSubKey(subKey, false); + + if (key == null) + return EnableState.Error; + + subKeyNames = key.GetSubKeyNames(); + state = EnableState.Error; + + foreach (string name in subKeyNames) + { + switch (handler(key, name, localMachine)) + { + case EnableState.Error: + break; + case EnableState.None: + if (localMachine) // For lm, want to return here right away. + return EnableState.None; + + // For current user, remember that we found no Enable value. + if (state == EnableState.Error) + { + state = EnableState.None; + } + break; + case EnableState.Disabled: + state = EnableState.Disabled; + break; + case EnableState.Enabled: + return EnableState.Enabled; + } + } + + return state; + } + + #endregion Private Methods + + //------------------------------------------------------ + // + // Private Properties + // + //------------------------------------------------------ + + //------------------------------------------------------ + // + // Private Fields + // + //------------------------------------------------------ + + #region Private Fields + + // String consts used to validate registry entires. + private const int CLSIDLength = 38; // {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} + private const int LANGIDLength = 10; // 0x12345678 + + // Status of a TIP assembly. + private enum EnableState + { + Error, // Invalid entry. + None, // No explicit Enable entry on the assembly. + Enabled, // Assembly is enabled. + Disabled // Assembly is disabled. + }; + + // Callback delegate for the IterateSubKeys method. + private delegate EnableState IterateHandler(RegistryKey key, string subKeyName, bool localMachine); + + // Install state. + private enum InstallState + { + Unknown, // Haven't checked to see if any TIPs are installed yet. + Installed, // Checked and installed. + NotInstalled // Checked and not installed. + } + + // Cached install state value. + // Writes are not thread safe, but we don't mind the neglible perf hit + // of potentially writing it twice. + private static InstallState s_servicesInstalled = InstallState.Unknown; + private static object s_servicesInstalledLock = new object(); + + #endregion Private Fields + } +} diff --git a/Libraries/ImeSharp/TextStore.cs b/Libraries/ImeSharp/TextStore.cs new file mode 100644 index 000000000..b7bf9cf87 --- /dev/null +++ b/Libraries/ImeSharp/TextStore.cs @@ -0,0 +1,963 @@ +using System; +using System.Buffers; +using System.Collections.Generic; +using System.Diagnostics; +using System.Runtime.InteropServices; +using ImeSharp.Native; +using SharpGen.Runtime; +using SharpGen.Runtime.Win32; +using TsfSharp; + +namespace ImeSharp +{ + internal class TextStore : CallbackBase, + ITextStoreACP, + ITfContextOwnerCompositionSink, + ITfTextEditSink, + ITfUIElementSink + { + public static readonly Guid IID_ITextStoreACPSink = new Guid(0x22d44c94, 0xa419, 0x4542, 0xa2, 0x72, 0xae, 0x26, 0x09, 0x3e, 0xce, 0xcf); + public static readonly Guid GUID_PROP_COMPOSING = new Guid("e12ac060-af15-11d2-afc5-00105a2799b5"); + + //------------------------------------------------------ + // + // Constructors + // + //------------------------------------------------------ + + #region Constructors + + // Creates a TextStore instance. + public TextStore(IntPtr windowHandle) + { + _windowHandle = windowHandle; + + + _viewCookie = Environment.TickCount; + + _editCookie = Tsf.TF_INVALID_COOKIE; + _uiElementSinkCookie = Tsf.TF_INVALID_COOKIE; + _textEditSinkCookie = Tsf.TF_INVALID_COOKIE; + + _IMEStringPool = ArrayPool.Shared; + } + + #endregion Constructors + + //------------------------------------------------------ + // + // Methods - ITextStoreACP + // + //------------------------------------------------------ + + #region ITextStoreACP + + public void AdviseSink(Guid riid, IUnknown obj, int flags) + { + ITextStoreACPSink sink; + + if (riid != IID_ITextStoreACPSink) + throw new COMException("TextStore_CONNECT_E_CANNOTCONNECT"); + + sink = (obj as ComObject).QueryInterface(); + + if (sink == null) + throw new COMException("TextStore_E_NOINTERFACE"); + + // It's legal to replace existing sink. + if (_sink != null) + _sink.Dispose(); + + (obj as ComObject).Dispose(); + + _sink = sink; + } + + public void UnadviseSink(IUnknown obj) + { + var sink = (obj as ComObject).QueryInterface(); + if (sink.NativePointer != _sink.NativePointer) + throw new COMException("TextStore_CONNECT_E_NOCONNECTION"); + + _sink.Release(); + _sink = null; + } + + private bool _LockDocument(TsfSharp.TsLfFlags dwLockFlags) + { + if (_locked) + return false; + + _locked = true; + _lockFlags = dwLockFlags; + + return true; + } + + private void ResetIfRequired() + { + if (!_commited) + return; + + _commited = false; + + TsTextchange textChange; + textChange.AcpStart = 0; + textChange.AcpOldEnd = _inputBuffer.Count; + textChange.AcpNewEnd = 0; + _inputBuffer.Clear(); + + _sink.OnTextChange(0, textChange); + + _acpStart = _acpEnd = 0; + _sink.OnSelectionChange(); + _commitStart = _commitLength = 0; + + //Debug.WriteLine("TextStore reset!!!"); + } + + private void _UnlockDocument() + { + Result hr; + _locked = false; + _lockFlags = 0; + + ResetIfRequired(); + + //if there is a queued lock, grant it + if (_lockRequestQueue.Count > 0) + { + hr = RequestLock(_lockRequestQueue.Dequeue()); + } + + //if any layout changes occurred during the lock, notify the manager + if (_layoutChanged) + { + _layoutChanged = false; + _sink.OnLayoutChange(TsLayoutCode.TsLcChange, _viewCookie); + } + } + + private bool _IsLocked(TsfSharp.TsLfFlags dwLockType) + { + return _locked && (_lockFlags & dwLockType) != 0; + } + + public Result RequestLock(TsfSharp.TsLfFlags dwLockFlags) + { + Result hrSession; + + if (_sink == null) + throw new COMException("TextStore_NoSink"); + + if (dwLockFlags == 0) + throw new COMException("TextStore_BadLockFlags"); + + hrSession = Result.Fail; + + if (_locked) + { + //the document is locked + + if ((dwLockFlags & TsfSharp.TsLfFlags.Sync) == TsfSharp.TsLfFlags.Sync) + { + /* + The caller wants an immediate lock, but this cannot be granted because + the document is already locked. + */ + hrSession = (int)TsErrors.TsESynchronous; + } + else + { + //the request is asynchronous + + //Queue the lock request + _lockRequestQueue.Enqueue(dwLockFlags); + hrSession = (int)TsErrors.TsSAsync; + } + + return hrSession; + } + + //lock the document + _LockDocument(dwLockFlags); + + //call OnLockGranted + hrSession = _sink.OnLockGranted(dwLockFlags); + + //unlock the document + _UnlockDocument(); + + return hrSession; + } + + public TsStatus GetStatus() + { + TsStatus status = new TsStatus(); + status.DynamicFlags = 0; + status.StaticFlags = 0; + + return status; + } + + public void QueryInsert(int acpTestStart, int acpTestEnd, uint cch, out int acpResultStart, out int acpResultEnd) + { + acpResultStart = acpResultEnd = 0; + + // Fix possible crash + if (_inputBuffer.Count == 0) + return; + + //Queryins + if (acpTestStart > _inputBuffer.Count || acpTestEnd > _inputBuffer.Count) + throw new COMException("", Result.InvalidArg.Code); + + //Microsoft Pinyin seems does not init the result value, so we set the test value here, in case crash + acpResultStart = acpTestStart; + acpResultEnd = acpTestEnd; + } + + public uint GetSelection(uint index, ref TsSelectionAcp selection) + { + //does the caller have a lock + if (!_IsLocked(TsLfFlags.Read)) + { + //the caller doesn't have a lock + //return NativeMethods.TS_E_NOLOCK; + throw new COMException("", (int)TsErrors.TsENolock); + } + + //check the requested index + if (-1 == (int)index) + { + index = 0; + } + else if (index > 1) + { + /* + The index is too high. This app only supports one selection. + */ + throw new COMException("", Result.InvalidArg.Code); + } + + selection.AcpStart = _acpStart; + selection.AcpEnd = _acpEnd; + selection.Style.InterimCharFlag = _interimChar; + + if (_interimChar) + { + /* + fInterimChar will be set when an intermediate character has been + set. One example of when this will happen is when an IME is being + used to enter characters and a character has been set, but the IME + is still active. + */ + selection.Style.Ase = TsActiveSelEnd.TsAeNone; + } + else + { + selection.Style.Ase = _activeSelectionEnd; + } + + return 1; + } + + public void SetSelection(uint count, ref TsSelectionAcp selections) + { + //this implementaiton only supports a single selection + if (count != 1) + throw new COMException("", Result.InvalidArg.Code); + + //does the caller have a lock + if (!_IsLocked(TsLfFlags.Readwrite)) + { + //the caller doesn't have a lock + //return NativeMethods.TS_E_NOLOCK; + throw new COMException("", (int)TsErrors.TsENolock); + } + + _acpStart = selections.AcpStart; + _acpEnd = selections.AcpEnd; + _interimChar = selections.Style.InterimCharFlag; + + if (_interimChar) + { + /* + fInterimChar will be set when an intermediate character has been + set. One example of when this will happen is when an IME is being + used to enter characters and a character has been set, but the IME + is still active. + */ + _activeSelectionEnd = TsActiveSelEnd.TsAeNone; + } + else + { + _activeSelectionEnd = selections.Style.Ase; + } + + //if the selection end is at the start of the selection, reverse the parameters + int lStart = _acpStart; + int lEnd = _acpEnd; + + if (TsActiveSelEnd.TsAeStart == _activeSelectionEnd) + { + lStart = _acpEnd; + lEnd = _acpStart; + } + } + + + public void GetText(int acpStart, int acpEnd, System.IntPtr pchPlain, uint cchPlainReq, out uint cchPlainRet, + ref TsfSharp.TsRuninfo rgRunInfo, uint cRunInfoReq, out uint cRunInfoRet, out int acpNext) + { + cchPlainRet = 0; + cRunInfoRet = 0; + acpNext = 0; + + //does the caller have a lock + if (!_IsLocked(TsLfFlags.Read)) + { + //the caller doesn't have a lock + throw new COMException("", (int)TsErrors.TsENolock); + } + + bool fDoText = cchPlainReq > 0; + bool fDoRunInfo = cRunInfoReq > 0; + int cchTotal; + + cchPlainRet = 0; + acpNext = acpStart; + + cchTotal = _inputBuffer.Count; + + //validate the start pos + if ((acpStart < 0) || (acpStart > cchTotal)) + { + throw new COMException("", Result.InvalidArg.Code); + } + else + { + //are we at the end of the document + if (acpStart == cchTotal) + { + return; + } + else + { + int cchReq; + + /* + acpEnd will be -1 if all of the text up to the end is being requested. + */ + + if (acpEnd >= acpStart) + { + cchReq = acpEnd - acpStart; + } + else + { + cchReq = cchTotal - acpStart; + } + + if (fDoText) + { + if (cchReq > cchPlainReq) + { + cchReq = (int)cchPlainReq; + } + + //extract the specified text range + if (pchPlain != IntPtr.Zero && cchPlainReq > 0) + { + //_inputBuffer.CopyTo(acpStart, pchPlain, 0, cchReq); + + unsafe + { + var ptr = (char*)pchPlain; + + for (int i = acpStart; i < cchReq; i++) + { + *ptr = _inputBuffer[i]; + ptr++; + } + } + } + } + + //it is possible that only the length of the text is being requested + cchPlainRet = (uint)cchReq; + + if (fDoRunInfo) + { + /* + Runs are used to separate text characters from formatting characters. + + In this example, sequences inside and including the <> are treated as + control sequences and are not displayed. + + Plain text = "Text formatting." + Actual text = "Text formatting." + + If all of this text were requested, the run sequence would look like this: + + prgRunInfo[0].type = TS_RT_PLAIN; //"Text " + prgRunInfo[0].uCount = 5; + + prgRunInfo[1].type = TS_RT_HIDDEN; // + prgRunInfo[1].uCount = 6; + + prgRunInfo[2].type = TS_RT_PLAIN; //"formatting" + prgRunInfo[2].uCount = 10; + + prgRunInfo[3].type = TS_RT_HIDDEN; // + prgRunInfo[3].uCount = 8; + + prgRunInfo[4].type = TS_RT_PLAIN; //"." + prgRunInfo[4].uCount = 1; + + TS_RT_OPAQUE is used to indicate characters or character sequences + that are in the document, but are used privately by the application + and do not map to text. Runs of text tagged with TS_RT_OPAQUE should + NOT be included in the pchPlain or cchPlainOut [out] parameters. + */ + + /* + This implementation is plain text, so the text only consists of one run. + If there were multiple runs, it would be an error to have consecuative runs + of the same type. + */ + rgRunInfo.Type = TsRunType.TsRtPlain; + rgRunInfo.Count = (uint)cchReq; + } + + acpNext = acpStart + cchReq; + } + } + } + + public TsTextchange SetText(int dwFlags, int acpStart, int acpEnd, string pchText, uint cch) + { + /* + dwFlags can be: + TS_ST_CORRECTION + */ + TsTextchange change = new TsTextchange(); + + //set the selection to the specified range + TsSelectionAcp tsa = new TsSelectionAcp(); + tsa.AcpStart = acpStart; + tsa.AcpEnd = acpEnd; + tsa.Style.Ase = TsActiveSelEnd.TsAeStart; + tsa.Style.InterimCharFlag = false; + + SetSelection(1, ref tsa); + + int start, end; + InsertTextAtSelection(TsIasFlags.Noquery, pchText, cch, out start, out end, out change); + + return change; + } + + public IDataObject GetFormattedText(int startIndex, int endIndex) + { + throw new COMException("", Result.NotImplemented.Code); + } + + public IUnknown GetEmbedded(int index, Guid guidService, Guid riid) + { + throw new COMException("", Result.NotImplemented.Code); + } + + public RawBool QueryInsertEmbedded(Guid guidService, ref Formatetc formatEtc) + { + throw new COMException("", Result.NotImplemented.Code); + } + + public TsTextchange InsertEmbedded(int flags, int startIndex, int endIndex, TsfSharp.IDataObject dataObjectRef) + { + throw new COMException("", Result.NotImplemented.Code); + } + + public void InsertTextAtSelection(TsfSharp.TsIasFlags dwFlags, string pchText, uint cch, out int pacpStart, out int pacpEnd, out TsfSharp.TsTextchange pChange) + { + pacpStart = pacpEnd = 0; + pChange = new TsTextchange(); + + //does the caller have a lock + if (!_IsLocked(TsLfFlags.Readwrite)) + { + //the caller doesn't have a lock + throw new COMException("", (int)TsErrors.TsENolock); + } + + int acpStart; + int acpOldEnd; + int acpNewEnd; + + acpOldEnd = _acpEnd; + + //set the start point after the insertion + acpStart = _acpStart; + + //set the end point after the insertion + acpNewEnd = _acpStart + (int)cch; + + if ((dwFlags & TsIasFlags.Queryonly) == TsIasFlags.Queryonly) + { + pacpStart = acpStart; + pacpEnd = acpOldEnd; + return; + } + + //insert the text + _inputBuffer.RemoveRange(acpStart, acpOldEnd - acpStart); + _inputBuffer.InsertRange(acpStart, pchText); + + //set the selection + _acpStart = acpStart; + _acpEnd = acpNewEnd; + + if ((dwFlags & TsIasFlags.Noquery) != TsIasFlags.Noquery) + { + pacpStart = acpStart; + pacpEnd = acpNewEnd; + } + + //set the TS_TEXTCHANGE members + pChange.AcpStart = acpStart; + pChange.AcpOldEnd = acpOldEnd; + pChange.AcpNewEnd = acpNewEnd; + + //defer the layout change notification until the document is unlocked + _layoutChanged = true; + } + + public void InsertEmbeddedAtSelection(int flags, IDataObject obj, out int startIndex, out int endIndex, out TsTextchange change) + { + startIndex = endIndex = 0; + change = new TsTextchange(); + throw new COMException("", Result.NotImplemented.Code); + } + + public void RequestSupportedAttrs(int flags, uint cFilterAttrs, ref Guid filterAttributes) + { + } + + public void RequestAttrsAtPosition(int index, uint cFilterAttrs, ref Guid filterAttributes, int flags) + { + throw new COMException("", Result.NotImplemented.Code); + } + + + public void RequestAttrsTransitioningAtPosition(int position, uint cFilterAttrs, ref Guid filterAttributes, int flags) + { + throw new COMException("", Result.NotImplemented.Code); + } + + public void FindNextAttrTransition(int startIndex, int haltIndex, uint cFilterAttrs, ref Guid filterAttributes, int flags, out int acpNext, out RawBool found, out int foundOffset) + { + acpNext = 0; + found = false; + foundOffset = 0; + } + + public uint RetrieveRequestedAttrs(uint ulCount, ref TsfSharp.TsAttrval aAttrValsRef) + { + return 0; + } + + public int GetEndACP() + { + int acp = 0; + //does the caller have a lock + if (!_IsLocked(TsLfFlags.Read)) + { + //the caller doesn't have a lock + throw new COMException("", (int)TsErrors.TsENolock); + } + + acp = _inputBuffer.Count; + + return acp; + } + + public int GetActiveView() + { + return _viewCookie; + } + + public int GetACPFromPoint(int viewCookie, TsfSharp.Point tsfPoint, int dwFlags) + { + throw new COMException("", Result.NotImplemented.Code); + } + + public void GetTextExt(int viewCookie, int acpStart, int acpEnd, out Rect rect, out RawBool clipped) + { + clipped = false; + rect = InputMethod.TextInputRect; + + if (_viewCookie != viewCookie) + throw new COMException("", Result.InvalidArg.Code); + + //does the caller have a lock + if (!_IsLocked(TsLfFlags.Read)) + { + //the caller doesn't have a lock + throw new COMException("", (int)TsErrors.TsENolock); + } + + //According to Microsoft's doc, an ime should not make empty request, + //but some ime draw comp text themseleves, when empty req will be make + //Check empty request + //if (acpStart == acpEnd) { + // return E_INVALIDARG; + //} + + NativeMethods.MapWindowPoints(_windowHandle, IntPtr.Zero, ref rect, 2); + } + + public Rect GetScreenExt(int viewCookie) + { + Rect rect = new Rect(); + + if (_viewCookie != viewCookie) + throw new COMException("", Result.InvalidArg.Code); + + NativeMethods.GetWindowRect(_windowHandle, out rect); + + return rect; + } + + public IntPtr GetWnd(int viewCookie) + { + if (viewCookie != _viewCookie) + { + throw new COMException("", Result.False.Code); + } + + return _windowHandle; + } + + #endregion ITextStoreACP2 + + + //------------------------------------------------------ + // + // Public Methods - ITfContextOwnerCompositionSink + // + //------------------------------------------------------ + + #region ITfContextOwnerCompositionSink + + public RawBool OnStartComposition(ITfCompositionView view) + { + // Return true in ok to start the composition. + RawBool ok = true; + _compositionStart = _compositionLength = 0; + _currentComposition.Clear(); + + InputMethod.OnTextCompositionStarted(this); + _compViews.Add(view); + + return ok; + } + + public void OnUpdateComposition(ITfCompositionView view, ITfRange rangeNew) + { + var range = view.Range; + var rangeacp = range.QueryInterface(); + + rangeacp.GetExtent(out _compositionStart, out _compositionLength); + rangeacp.Dispose(); + range.Dispose(); + _compViews.Add(view); + } + + public void OnEndComposition(ITfCompositionView view) + { + var range = view.Range; + var rangeacp = range.QueryInterface(); + + rangeacp.GetExtent(out _commitStart, out _commitLength); + rangeacp.Dispose(); + range.Dispose(); + + // Ensure composition string reset + _compositionStart = _compositionLength = 0; + _currentComposition.Clear(); + + InputMethod.ClearCandidates(); + InputMethod.OnTextCompositionEnded(this); + view.Dispose(); + foreach(var item in _compViews) + item.Dispose(); + _compViews.Clear(); + } + + #endregion ITfContextOwnerCompositionSink + + #region ITfTextEditSink + + public void OnEndEdit(ITfContext context, int ecReadOnly, ITfEditRecord editRecord) + { + ITfProperty property = context.GetProperty(GUID_PROP_COMPOSING); + + ITfRangeACP rangeACP = TextServicesContext.Current.ContextOwnerServices.CreateRange(_compositionStart, _compositionStart + _compositionLength); + Variant val = property.GetValue(ecReadOnly, rangeACP); + property.Dispose(); + rangeACP.Dispose(); + if (val.Value == null || (int)val.Value == 0) + { + if (_commitLength == 0 || _inputBuffer.Count == 0) + return; + + //Debug.WriteLine("Composition result: {0}", new object[] { new string(_inputBuffer.GetRange(_commitStart, _commitLength).ToArray()) }); + + _commited = true; + for (int i = 0; i < _commitLength; i++) + InputMethod.OnTextCompositionResult(this, new string(_inputBuffer.GetRange(_commitStart, _commitLength).ToArray())); + } + + if (_commited) + return; + + if (_inputBuffer.Count == 0 && _compositionLength > 0) // Composition just ended + return; + + _currentComposition.Clear(); + for (int i = 0; i < _compositionLength; i++) + _currentComposition.Add(_inputBuffer[_compositionStart + i]); + + InputMethod.OnTextComposition(this, new IMEString(_currentComposition), _acpEnd); + + //var compStr = new string(_currentComposition.ToArray()); + //compStr = compStr.Insert(_acpEnd, "|"); + //Debug.WriteLine("Composition string: {0}, cursor pos: {1}", compStr, _acpEnd); + } + + #endregion ITfTextEditSink + + //------------------------------------------------------ + // + // Public Methods - ITfUIElementSink + // + //------------------------------------------------------ + + #region ITfUIElementSink + + public RawBool BeginUIElement(int dwUIElementId) + { + // Hide OS rendered Candidate list Window + RawBool pbShow = InputMethod.ShowOSImeWindow; + + OnUIElement(dwUIElementId, true); + + return pbShow; + } + + public void UpdateUIElement(int dwUIElementId) + { + OnUIElement(dwUIElementId, false); + } + + public void EndUIElement(int dwUIElementId) + { + } + + private void OnUIElement(int uiElementId, bool onStart) + { + if (InputMethod.ShowOSImeWindow || !_supportUIElement) return; + + ITfUIElement uiElement = TextServicesContext.Current.UIElementMgr.GetUIElement(uiElementId); + + ITfCandidateListUIElementBehavior candList; + + try + { + candList = uiElement.QueryInterface(); + } + catch (SharpGenException) + { + _supportUIElement = false; + return; + } + finally + { + uiElement.Dispose(); + } + + uint selection = 0; + uint currentPage = 0; + uint count = 0; + uint pageCount = 0; + uint pageStart = 0; + uint pageSize = 0; + uint i, j; + + selection = candList.GetSelection(); + currentPage = candList.GetCurrentPage(); + + count = candList.GetCount(); + + pageCount = candList.GetPageIndex(null, 0); + + if (pageCount > 0) + { + uint[] pageStartIndexes = ArrayPool.Shared.Rent((int)pageCount); + pageCount = candList.GetPageIndex(pageStartIndexes, pageCount); + pageStart = pageStartIndexes[currentPage]; + + if (pageStart >= count - 1) + { + candList.Abort(); + ArrayPool.Shared.Return(pageStartIndexes); + return; + } + + if (currentPage < pageCount - 1) + pageSize = Math.Min(count, pageStartIndexes[currentPage + 1]) - pageStart; + else + pageSize = count - pageStart; + + ArrayPool.Shared.Return(pageStartIndexes); + } + + selection -= pageStart; + + IMEString[] candidates = _IMEStringPool.Rent((int)pageSize); + + IntPtr bStrPtr; + for (i = pageStart, j = 0; i < count && j < pageSize; i++, j++) + { + bStrPtr = candList.GetString(i); + candidates[j] = new IMEString(bStrPtr); + } + + //Debug.WriteLine("TSF========TSF"); + //Debug.WriteLine("pageStart: {0}, pageSize: {1}, selection: {2}, currentPage: {3} candidates:", pageStart, pageSize, selection, currentPage); + //for (int k = 0; k < candidates.Length; k++) + // Debug.WriteLine(" {2}{0}.{1}", k + 1, candidates[k], k == selection ? "*" : ""); + //Debug.WriteLine("TSF++++++++TSF"); + + InputMethod.CandidatePageStart = (int)pageStart; + InputMethod.CandidatePageSize = (int)pageSize; + InputMethod.CandidateSelection = (int)selection; + InputMethod.CandidateList = candidates; + + if (_currentComposition != null) + { + InputMethod.OnTextComposition(this, new IMEString(_currentComposition), _acpEnd); + _IMEStringPool.Return(candidates); + } + + candList.Dispose(); + } + + #endregion ITfUIElementSink + + //------------------------------------------------------ + // + // Public Properties + // + //------------------------------------------------------ + + public static TextStore Current + { + get + { + TextStore defaultTextStore = InputMethod.DefaultTextStore; + if (defaultTextStore == null) + { + defaultTextStore = InputMethod.DefaultTextStore = new TextStore(InputMethod.WindowHandle); + + defaultTextStore.Register(); + } + + return defaultTextStore; + } + } + + public ITfDocumentMgr DocumentManager + { + get { return _documentMgr; } + set { _documentMgr = value; } + } + + // EditCookie for ITfContext. + public int EditCookie + { + // get { return _editCookie; } + set { _editCookie = value; } + } + + public int UIElementSinkCookie + { + get { return _uiElementSinkCookie; } + set { _uiElementSinkCookie = value; } + } + + public int TextEditSinkCookie + { + get { return _textEditSinkCookie; } + set { _textEditSinkCookie = value; } + } + + public bool SupportUIElement { get { return _supportUIElement; } } + + + //------------------------------------------------------ + // + // Private Methods + // + //------------------------------------------------------ + + // This function calls TextServicesContext to create TSF document and start transitory extension. + private void Register() + { + // Create TSF document and advise the sink to it. + TextServicesContext.Current.RegisterTextStore(this); + } + + //------------------------------------------------------ + // + // Private Fields + // + //------------------------------------------------------ + + // The TSF document object. This is a native resource. + private ITfDocumentMgr _documentMgr; + + private int _viewCookie; + + // The edit cookie TSF returns from CreateContext. + private int _editCookie; + private int _uiElementSinkCookie; + private int _textEditSinkCookie; + + private ITextStoreACPSink _sink; + private IntPtr _windowHandle; + private int _acpStart; + private int _acpEnd; + private bool _interimChar; + private TsActiveSelEnd _activeSelectionEnd; + private List _inputBuffer = new List(); + + private bool _locked; + private TsLfFlags _lockFlags; + private Queue _lockRequestQueue = new Queue(); + private bool _layoutChanged; + + private List _currentComposition = new List(); + private int _compositionStart; + private int _compositionLength; + private int _commitStart; + private int _commitLength; + private bool _commited; + + private bool _supportUIElement = true; + private List _compViews = new List(); + + private ArrayPool _IMEStringPool; + + } +} diff --git a/Libraries/MonoGame.Framework/Src/MonoGame.Framework/GameWindow.cs b/Libraries/MonoGame.Framework/Src/MonoGame.Framework/GameWindow.cs index ec4d56407..8b166be16 100644 --- a/Libraries/MonoGame.Framework/Src/MonoGame.Framework/GameWindow.cs +++ b/Libraries/MonoGame.Framework/Src/MonoGame.Framework/GameWindow.cs @@ -106,6 +106,11 @@ namespace Microsoft.Xna.Framework { /// This event is only supported on the Windows DirectX, Windows OpenGL and Linux platforms. /// public event EventHandler TextInput; + + /// + /// Used for displaying uncommitted IME text. + /// + public event EventHandler TextEditing; #endif #endregion Events @@ -152,6 +157,11 @@ namespace Microsoft.Xna.Framework { { EventHelpers.Raise(this, TextInput, e); } + + protected void OnTextEditing(object sender, TextEditingEventArgs e) + { + EventHelpers.Raise(this, TextEditing, e); + } #endif protected internal abstract void SetSupportedOrientations (DisplayOrientation orientations); diff --git a/Libraries/MonoGame.Framework/Src/MonoGame.Framework/MonoGame.Framework.Linux.NetStandard.csproj b/Libraries/MonoGame.Framework/Src/MonoGame.Framework/MonoGame.Framework.Linux.NetStandard.csproj index 5f9dbc68a..41c2f71d8 100644 --- a/Libraries/MonoGame.Framework/Src/MonoGame.Framework/MonoGame.Framework.Linux.NetStandard.csproj +++ b/Libraries/MonoGame.Framework/Src/MonoGame.Framework/MonoGame.Framework.Linux.NetStandard.csproj @@ -71,6 +71,8 @@ + + Angle,Linux,MacOS,Windows,WindowsGL,WindowsUniversal diff --git a/Libraries/MonoGame.Framework/Src/MonoGame.Framework/MonoGame.Framework.MacOS.NetStandard.csproj b/Libraries/MonoGame.Framework/Src/MonoGame.Framework/MonoGame.Framework.MacOS.NetStandard.csproj index dd5a32d33..a8b412890 100644 --- a/Libraries/MonoGame.Framework/Src/MonoGame.Framework/MonoGame.Framework.MacOS.NetStandard.csproj +++ b/Libraries/MonoGame.Framework/Src/MonoGame.Framework/MonoGame.Framework.MacOS.NetStandard.csproj @@ -71,6 +71,8 @@ + + Angle,Linux,MacOS,Windows,WindowsGL,WindowsUniversal diff --git a/Libraries/MonoGame.Framework/Src/MonoGame.Framework/MonoGame.Framework.Windows.NetStandard.csproj b/Libraries/MonoGame.Framework/Src/MonoGame.Framework/MonoGame.Framework.Windows.NetStandard.csproj index 3ff6019b1..e6bc855bf 100644 --- a/Libraries/MonoGame.Framework/Src/MonoGame.Framework/MonoGame.Framework.Windows.NetStandard.csproj +++ b/Libraries/MonoGame.Framework/Src/MonoGame.Framework/MonoGame.Framework.Windows.NetStandard.csproj @@ -84,6 +84,8 @@ + + Angle,Linux,MacOS,Windows,WindowsGL,WindowsUniversal diff --git a/Libraries/MonoGame.Framework/Src/MonoGame.Framework/SDL/SDL2.cs b/Libraries/MonoGame.Framework/Src/MonoGame.Framework/SDL/SDL2.cs index 5ee24f7f0..8b4672ef6 100644 --- a/Libraries/MonoGame.Framework/Src/MonoGame.Framework/SDL/SDL2.cs +++ b/Libraries/MonoGame.Framework/Src/MonoGame.Framework/SDL/SDL2.cs @@ -240,6 +240,22 @@ internal static class Sdl return pointer; } + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate bool d_sdl_istextinputactive(); + public static d_sdl_istextinputactive SDL_IsTextInputActive = FuncLoader.LoadFunction(NativeLibrary, "SDL_IsTextInputActive"); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void d_sdl_starttextinput(); + public static d_sdl_starttextinput SDL_StartTextInput = FuncLoader.LoadFunction(NativeLibrary, "SDL_StartTextInput"); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void d_sdl_stoptextinput(); + public static d_sdl_stoptextinput SDL_StopTextInput = FuncLoader.LoadFunction(NativeLibrary, "SDL_StopTextInput"); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void d_sdl_settextinputrect(ref Rectangle rect); + public static d_sdl_settextinputrect SDL_SetTextInputRect = FuncLoader.LoadFunction(NativeLibrary, "SDL_SetTextInputRect"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void d_sdl_clearerror(); public static d_sdl_clearerror ClearError = FuncLoader.LoadFunction(NativeLibrary, "SDL_ClearError"); diff --git a/Libraries/MonoGame.Framework/Src/MonoGame.Framework/SDL/SDLGamePlatform.cs b/Libraries/MonoGame.Framework/Src/MonoGame.Framework/SDL/SDLGamePlatform.cs index e18d8a4d4..fb2f05833 100644 --- a/Libraries/MonoGame.Framework/Src/MonoGame.Framework/SDL/SDLGamePlatform.cs +++ b/Libraries/MonoGame.Framework/Src/MonoGame.Framework/SDL/SDLGamePlatform.cs @@ -7,6 +7,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Threading; using System.Runtime.InteropServices; +using System.Text; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; @@ -136,8 +137,7 @@ namespace Microsoft.Xna.Framework { var key = KeyboardUtil.ToXna(ev.Key.Keysym.Sym); - if (!_keys.Contains(key)) - _keys.Add(key); + if (!_keys.Contains(key)) _keys.Add(key); //TODO: rethink all of this char character = (char)KeyboardUtil.ApplyModifiers(ev.Key.Keysym.Sym, ev.Key.Keysym.Mod); @@ -161,24 +161,23 @@ namespace Microsoft.Xna.Framework var key = KeyboardUtil.ToXna(ev.Key.Keysym.Sym); _keys.Remove(key); } + else if (ev.Type == Sdl.EventType.TextEditing) + { + string text; + unsafe { text = ReadString(ev.Text.Text); } + + _view.CallTextEditing(text, ev.Edit.Start, ev.Edit.Length); + } else if (ev.Type == Sdl.EventType.TextInput) { - int len = 0; - string text = String.Empty; - unsafe + string text; + unsafe { text = ReadString(ev.Text.Text); } + + if (text.Length is 0) { continue; } + + foreach (char c in text) { - while (Marshal.ReadByte ((IntPtr)ev.Text.Text, len) != 0) { - len++; - } - var buffer = new byte [len]; - Marshal.Copy ((IntPtr)ev.Text.Text, buffer, 0, len); - text = System.Text.Encoding.UTF8.GetString (buffer); - } - if (text.Length == 0) - continue; - foreach (var c in text) - { - var key = KeyboardUtil.ToXna((int)c); + var key = KeyboardUtil.ToXna(c); _view.CallTextInput(c, key); } } @@ -194,11 +193,22 @@ namespace Microsoft.Xna.Framework IsActive = false; else if (ev.Window.EventID == Sdl.Window.EventId.Moved) _view.Moved(); - else if (ev.Window.EventID == Sdl.Window.EventId.Close) - _isExiting++; + else if (ev.Window.EventID == Sdl.Window.EventId.Close) _isExiting++; } } } + + static unsafe string ReadString(byte* ptr) + { + int len = 0; + while (Marshal.ReadByte((IntPtr)ptr, len) != 0) + { + len++; + } + var buffer = new byte [len]; + Marshal.Copy((IntPtr)ptr, buffer, 0, len); + return Encoding.UTF8.GetString(buffer); + } } public override void StartRunLoop() diff --git a/Libraries/MonoGame.Framework/Src/MonoGame.Framework/SDL/SDLGameWindow.cs b/Libraries/MonoGame.Framework/Src/MonoGame.Framework/SDL/SDLGameWindow.cs index 7d5a071ca..91eab7e6a 100644 --- a/Libraries/MonoGame.Framework/Src/MonoGame.Framework/SDL/SDLGameWindow.cs +++ b/Libraries/MonoGame.Framework/Src/MonoGame.Framework/SDL/SDLGameWindow.cs @@ -113,6 +113,12 @@ namespace Microsoft.Xna.Framework Sdl.SetHint("SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS", "0"); Sdl.SetHint("SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS", "1"); + /* + * By default SDL2 will hide IME popups since it probably assumes the game will implement their own suggestions box. + * We don't want that, so this hint will allow the system native IME popups to show up when typing in the game. + */ + Sdl.SetHint("SDL_HINT_IME_SHOW_UI", "1"); + // when running NUnit tests entry assembly can be null if (Assembly.GetEntryAssembly() != null) { @@ -333,6 +339,11 @@ namespace Microsoft.Xna.Framework OnTextInput(this, new TextInputEventArgs(c, key)); } + public void CallTextEditing(string text, int start, int length) + { + OnTextEditing(this, new TextEditingEventArgs(text, start, length)); + } + public void DropFile(string filePath) { OnFileDropped(new FileDropEventArgs(filePath)); diff --git a/Libraries/MonoGame.Framework/Src/MonoGame.Framework/TextEditingEventArgs.cs b/Libraries/MonoGame.Framework/Src/MonoGame.Framework/TextEditingEventArgs.cs new file mode 100644 index 000000000..cce9ccc66 --- /dev/null +++ b/Libraries/MonoGame.Framework/Src/MonoGame.Framework/TextEditingEventArgs.cs @@ -0,0 +1,17 @@ +using System; +namespace Microsoft.Xna.Framework +{ + public sealed class TextEditingEventArgs : EventArgs + { + public readonly string Text; + public readonly int Start; + public readonly int Length; + + public TextEditingEventArgs(string text, int start, int length) + { + Text = text; + Start = start; + Length = length; + } + } +} diff --git a/Libraries/MonoGame.Framework/Src/MonoGame.Framework/TextInput.cs b/Libraries/MonoGame.Framework/Src/MonoGame.Framework/TextInput.cs new file mode 100644 index 000000000..df18c7bba --- /dev/null +++ b/Libraries/MonoGame.Framework/Src/MonoGame.Framework/TextInput.cs @@ -0,0 +1,29 @@ +#nullable enable + +namespace Microsoft.Xna.Framework +{ + public static class TextInput + { + public static void StartTextInput() + { + Sdl.SDL_StartTextInput(); + } + + public static void StopTextInput() + { + Sdl.SDL_StopTextInput(); + } + + public static void SetTextInputRect(Rectangle rectangle) + { + Sdl.Rectangle r = new Sdl.Rectangle + { + X = rectangle.X, + Y = rectangle.Y, + Width = rectangle.Width, + Height = rectangle.Height + }; + Sdl.SDL_SetTextInputRect(ref r); + } + } +} diff --git a/Libraries/MonoGame.Framework/Src/ThirdParty/Dependencies/SDL/Linux/x64/libSDL2-2.0.so.0 b/Libraries/MonoGame.Framework/Src/ThirdParty/Dependencies/SDL/Linux/x64/libSDL2-2.0.so.0 old mode 100644 new mode 100755 index bdd69273a21d3235a368895c6b7bc47c9949546b..846fdc9a0c862806812614851e2ca9316b078cb3 GIT binary patch literal 1737448 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

l_G|BQqsl4$qV~jhy8M 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%0AtlFDoyV?J_OS33w@1y7LpPOwEsneT1yQPK|Ri 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�!@$!`SX<)0&3M$6KM|$e1$M zB>;fS#!S}3TL6%a@}PA2x{(TS`GKW;kS>2hC&-V>DIQKpAb`e#OF(NQKu^Oc>&K~i z^OcAvat(GJB=hw|Fi0SwOXO1yjzRT6KYD@St z)}589vnhkTAr2Q!O`)V;#l=->w^InXsnWyeF z=}(@jGwP`$p|;arRLTk}%RMbA@mB<3NO6R{Xn_7wcalySWiN8;l*SWvifqE7he$J5 zoJvX^|DF;&KZ8;U{3CU!&5zgql`PX3) zmddZmQqeoh$zPMDvUiqKz9x$t`v6F$q3?Z77BM!;%TjxImVo^$Ar7BCdW0Mr4{>1r zzRuU>d$>k;x$c_Z{^KO7lRh=_UGIWNkV2uA|4E8umz`7k7hCxo&;fVsRu41pICI7e z@ri<ch^W@7L?FLsbS>)*+$VW-~BZ*0A~Dtj{qQKYg%unn_Fa= zJeelhB~-~d>@hrN8fvMLee`%(CM4jd8hUOlF3|5oAWUTRD?GBLtB@Cd%bZ^Ux}e*a z-QU^GH6ZOmqy*3KC(i&7Z+b(f6_V=Bn$U;{>n_Cqoan$yG3co>7K`0nE*s4K`$4;H z9aRhbvGw7lsvo3U+n!WgvnBEoQ41YGw3A0bLc=Egp6wYCj6d!fL5)bJ-Hp!rd}~2E zG%SAmmY2jCxnw@#g*KX3b?V72Rr&})=1+<9l{2z&B@_Wgp=@KeH~z4dEu zIfwX!p|f}!AV?Lbbe=2ZOFzCCvEy_KNAQSP(EpH>*qbZba`3OgCuIOG4Kgg!5 zF3MEP!KAwxlej>=v&sC+WvlJf8Sn0-$pNWPg%2$8>e=coQWKmXnaz=X?ggjF7Ho)g z1pm?KYM~W}qD^ab1vbWg6}+%k`)oGy1i;XHVsZlt#E$5(*sbV{PBARiD0EKA?&{7BX$wYKlkj+xGMol=!}*L}p4 z;q6}*7q|-MeHRDXS(rQ!xQE@$Ce{%~Z-w8rEE{`r#DCxUj~Fv!flWBrkkgmc0>g{>uPlK zxge-t$)ZG^A?fmGB{Ez#Q)#bEby7`by8PGqc_c@s9@-5J4q9F5^1jFmNS^ZJGP_ip zl8t z8{0dCzr|R4GrJg0cxbUlev&KZ9Dqj_hQ~NvWHuIC%~iH+(iMc!r3EYD7P6bV36(?lx^($zP@iKzKFQi75#wGArQm&#BJ7@?_i7j86)xw$AmLQI2MS&@uEjUv z3Tu55IrPH?VFGe({b6W_Oo!^81oJ_7B$#~}`vPA_|IojzP86NN!b9Dwa^r>br`11b z1^e$agQb>@HnHMIrs5fyUE&&8vrDI3?65nWxQb*$t-;i|8mEdc~$jB zY)SW*&TSIY+SqgSfHgUG2fu8@UHcOI`-ED=_dDa}tnvL#e$J^g)P!U%UJpz7GH4m5 za_I~91;B3Co6fxZz0A9}yw=;S&KFq0lMCuM&-o$=@yC%TAkTX2X!BZnm5c zJpzw0{LCk&01I6xJ{mD;ZezgOYbLf9%c55qjL+_));;EdKIlmP=mlAULTAb0m_4_` z`cTdxhNJPQGM2Xv=Gi0Bfh)yNct%NgUpWi8%VcXu{M*M^2kkks(W#iL>>KcFrcOzZ*OE+G7fIO4sUw`Qr$ zu5SNuxc{iiH~eNPHk4za$-}=d()FK1{oTL)O8a3{4-IGWE!EedXXwIOCVhe?QXe3# zIQA)7vN{4ia$+lUP{=B2tx3Eu)a8Ht@ZSIZ;XLX}{f3&-<$FD_%-q})z9sSq{zxo2 z4WeVv(H>I&h1jFzUi)GsklT*2#|7E56XI-sqf(2dBp8vDS6gkL!r{W-s(tyf_o{vQ z#H(b`^!y|y%|toJdO!y5OQj)BmwykT#938-v^!EVnpanFMt30bej#ecbor4a=*@TN zJiebO-&JtyfZzttZ++|m-C)2q#3QNhboq!%JhoMQ3IfpxzT*vheklMYSIuPIcrU;T zpx0Ybc&ud&VF8sN7fxs0Yp_pz4{~_vH>xY+f2B%xP%>NR*Wgcl1;sxJ&hm^5w`^zs zr5=#0#GaEFFFt#$%<)-1+f*)(m$9zgHV6Ml`~9pKt%t+Ow{QSb$FjK^~fTc+T1*2Tru8*mMz&uz4b(Lm>IC($U4 zb>4RDXU6q|jKK!_AD-OC;O~%4(=!J7oyOq4*>^g>a3iX)c*6wHmWp2~qo~JszD_?! zp))mCeUZ5{bn^vt2!anNN7Y7FRn3@F0fr>*mfA^uFxXoJGniT5bFzvK!<_oR>0>HT&3m~8q-zgGDA^lp`Z80m-M%R9;Yw2-w@{-MH_ z1x$ylYh-h>by3O6hX;uuaZ=>Vp$i6~IsR-(_Xp0nV@+YL>{HPFn)7b^hl|S1KRnjC zV1{Xz+(J>&CS4_ai6gqpdDeb6EX|l*)JSr7SIJbe$$z3_{95(m*=h%{@KiN_D?_fqhjuYWXkY5CFm$Fp^U{J4Z$f`9amXZ-*NRrHR~Z_6pL$g0KE?rmq)@R0#)@S7p8ShVx!6@xNHBNi(Q)6mL|38f_XsFIc-iHKvsOiGz?&jp3cjff*C9X{>0^xy<%2+0+#fUR5OAY0u&OApIlY%l1-Y zkXw`dWb1U94JudC$z^uQewbOdK&11oMZ1MABtbSp)d%Bo(Xk{_MW2~}$&`qnbga=JIs+We&a zCI`OGzD;ihE;sG+7Z=Mu=JqK-rP$v>Kodyvq}TDez&F!$UHimqs;5t z#xjm2bgr((3hAV?mu0Rs(n`tY(imiau3561UI*%nJ)x6@zb}z~!nl)Lro-abYkt+f zN@ptbgx>-r`P_D~tDyVOlo&_MN=aBI`R~iaK%V~nF#wQ_ojxm2aiA0h$@W$8F>&&h z-8q4u3QY^y(tb+y*e+QSA5@TDGF^~j-z8~Xqbp?GoHu(;DJyMXdjgKCVZ`Xw?!5Sl z=xsbo;N8DO7GhA__ylDSTq5s(&%IBV_uu8-eYD!m z-MX3lr^tIG_g>6>r^^=}cbLGX_><|V4x#1N$rCx;;WQ%F(>jUc5v`4T z1jL}3;uK2M2%%x=B}!u!K^sH3H=2WnyOFjou~tn>9ZO3&na-M03A$kxDli1_s6q|* zkXzDHPfrupDR4G4-wm7(^PV>Wdf7Jztd}QS|8^z;d(o8wO#%M>YTO!51rX$_pHc&h z#%(!$hMVsN;$120chLTe6bsn5ihcwRjBc-X6PCQ`$y4ZK=!~_I5ZX8aXvDpx1znLA zdE-Aw3)u6v0WKP12e~C##{r_#T36$UugjbBcbEL7`Mt-2-=A)g0Rs)(2n zl+VZ%IgcVN)~eJXS`Wt0s-snulWY)^AN@hA(4rAaXNDwx)?18q&_e&@D4kG6B@>d> zzDsGUtkI2`Pm$I}#`p>l12GE0{gtxGyL)AxlFK}W%;R&J7fa@=dS#xT%RHUT=j1Y9 zCz;Rbm3dY!^DHu->|~a%4eph(C6}>iMP}!U{FfBz{#|~@@9kAY-Y62x6^Tia6}^f)*sF-VQDk_o$mLQb z)~m?UUPa`MA_H_Y-V_GrO~d{m6tC~BZvVVNwUM{$J-=L>g9=jD8%o#eIABDJWbuHv{x%Y)V`ta?Dz za@-PFwI07nuY-}NCQ+_f`<=ypOH+}j~GXR~f0lF~{phxI9A>r3;6SEe9tF|*}y_9@rGO7%&03fHc zw9v8AOg*~>sg9i}^~9vOMRB@l#4e{gT@ST@zA*JTBS(jykR5FoJ(X2EIhAjz4>9nQ zezPp4%U>#E$%0C$7ri~L>6I|nDXU|=WKkRp8@{Ac``kR(!SYW4MlEs{)w0MPf(@o5lCN}5FBj?DPdD5NC-|4^2@gmVH%9I#wX2)Gi z9kHKLb84`v9yy+xuhw$ak<#q%u(nk2GiZOf!y&{eZU;p_9H_?Y4nAZEaRn7Ia2vMt z9``j9)wtJ@GdJ$;Og(!CsCtf-depf8oZ@QSuNL66Q)^U>FS~$gLOe`Qdb1^Y$J?Tf zHlpRqEcC2LK$#?$zbhhIMz(0q^|@K3q1Z3Uol0SQjK5YxfW;Ryp9qMlzh~@`NxxjD z_m}kl$V!dp*>AN~G_zc(9oZ$*nChc{Mo__3l-R~lqMZ8K?tFft`kV6? zjeOK;Xga2pTeaPtPgcBGl?GBG7SfU;n)7wW0`=IeUKP9Ouy@XC8@sOf2tqdYJ? zaztA7C25%|LdSVI?R9ZklQ*)OtDH7rMpSu#43_WiO8c%^(hdiUb7`k(#(Sf?e7~<0 zYZn12I*3FEV_l7PVyNW2$!O}~bv7i}`&0(4PffdpvuSPzYi4PA8ku@c?-utyQeue|3ej4%h4)fIf6ZKC|6L)vCye1hlE9!` zTJR^TP#8ZZrZA2H`+(#XuVLiFgAB>*WB>$(d9ipGyC{Wnat`OY<{*gjK8g>Kt{AC*q3*3DEz9tt5 zXxSB!xk7yfPN)wbfJi4ENa;54)l2ESFU2`=h2*qtA%tw>#`rGOSRO2|E|S)TAoTpt zQG=M;q&`+BT+|=#A88$4Y}`2xxKtmf;iV!&JnU7~zt|akNX_JruE+Z{1H$>g%KMrU zMzuV`F^s8t2&Ynrjz3(;ySHSdKuqm_TJr8kqJm8lEJwZx7H+=^H+i4;u6?xSMq zhybm;Y=j;h6-@lBT{5WghKFDe)~e)hJ_4!@suOyA_~Zf_t&bcZgi}gngPeRI^j9v9 z9S}Jx$n=snT1zb^4{xc3l2^+s@rFlkXIutI6=F{A@G;fj50v=4#iuld{hdw+06&OL z)&PwfH7cn>64T}BQiADg{h8uN*dOhYySBA@6Lp~d9$tqvtf&DC^2KKEbYG7A?s76HS;c`%z=`y!Z^QI!!WXEYRqmg{shd}I@3d;tV z>n7DfX|yv`F{%dJEGXy3zKFl)7Y{r=d;wN2m&KsO_SHLE9W*eEh-aGa#mgp;mMb5)GF4Bfe? zThs5IQpr!qoGyR5kC2c)FUFEuNQZrzgiD8W4-k7G_gBaW?n<2Apa)Y1p9g)@ANA}U z&uB5)1d`vyk;WKC40H`1KNn3wahSA8H0;Rs>I368rCsJtQy>F$9PJuF=fo3 zT8ysC72q?MY)oPxy~?%J724BreigwIgnh$LRQiXche`KPe!$u>CsV%S+sapeL-~^_ zU%Gb8DU=`bZRJn8hZRLl3L-|v?#ta8(jEbn&WtwP9%CI;mRH5lr zYX9!->GJZDUJ7T&KI&rciqTChDHl0GTH8Omm)cBglm{~ks>@FQsHa0UgC&m7bAdYM z=qZ({GOiSs!L1tZ#1+s)nlFd6=qMQ0@g$Pdr-@s>97Tul z>uD_RdEI{uJKI6CY~ie0B^kMbb?)ox0DaFO&*D_*Y=H5Ad#gqfb{%}vr7)WIYbx2P#R z;xouJzjO1)$mM8rm}1?fsyb| z>W&!1`y!u>mDiW}?)$m$(%PSRcW7eUP`~vh{ctC~9O_MM9qO~gc-93yBii4syzc6Y zy@~B8Q>1ck4<42HVkqUkQtn-H?;F~_4cOD5;3QRi|4`dsLE$=Y`&JncFaGM>Z7|es zDrFM_xL)w~tSt(a69pr& ze`w-Eq9}|wIIk~DLPqX^oS{QhMa{WcX8!l_c1@yUUYHoTF&uGC1C z)W{Gf;l_(^5dG5o;#$bU!gcgX53Kor7>~m2c!-_l|JQiD3ThM!4V5cv7?|mTBe>sP z^u;LIVa~%ngh5eC&Rxll^AO3u$BXD&fmfgeS^!N=RcziTvkeU9O(fwLdbSIB@sj=M z0J`fbP8SvJ$s~}unI%d+dnqDC8BguwNsdg>%*5r}s7#xOe{=AyKIh>kGZm$3?n4T1 zIlSTg40+!&$*L+ToM{)Rzw#|57YXY1P-uNRBRm@sondYIAuBFgsGC@QAFa==zAvL! zbXMQ>qGG&NX}7^^ru=YSejw#jeiFl&&a*yI{nv@K8SR$lB!bY(>n6+mjko%uXhrAwaF@M z?nLWL-ES+osHAFJP{Fk$diK_RNb^N5u-*<^hShiE4X&guI;ngL+ z^IggFQPdG}>`(2!tOR4l`dY09Ql z$923cU7c^eoDe1KL*$WWCJ6Z#oBcaNhp>E9I+n`CqhS zrt~a(E06e6?iR?qqUx7N2uf}Xj4E#wW$p2I)-QSuhjgFvtzMzzgh(`K} zbv{boi!K`A9XYwoxKjc&pz>Y(B0v({NwkZLSMl6_bE()S8h4&WhW48WsFw#;ak;3Z zK9DGV-iRH`rv{zN;1Srwmr4Hf>TO0dJ10^fRA~Znv8PA2AM<5L#f#UzZGhjtwZc9M zrESn|u0)kNfIj2yxl`$Np*aJ3jAA@M)tQiyB3R##9&sNjq@@lM&e%WHk)Wj_l)^I>xB z`h*)5jb(_>G|W~nI*;8;>TA~d zu9N!S&8(Z8YvT*q8erY?b2!^Ik@kK@P-+9BCpb zHJb4uF1sW$Vh}cOXr>2(HNSO8Vn>XKm;IIU^x_WBYJR=duLgPi7mq%P0(ZBklgD5@ z>RG3f4nb4V-;9KA*cPcN1j2AWbrYC zk_F;92uVX38;W!#vc;OkB+x| z%)aEk&?U0_nnFhp^6ztQIb1>*+S>{U^?IAy$IbK^)2T=Py|R{Lellvk1D$Pt6IlP7P*RP?m13uBLnehQd zT3+*6r~qE~aZkDRIdeXdMD_3vcUL%MjC-5kwO@c6;!dRdB@XrTyS|jy0fXglSwZB3 z1(6*K1l~6U`eK*2`aty_d0$VI@>gD$r;Yr1_6y`bxPhmuUy%N;;&so9;B$|3d=+JSa%GG?Ye~KS6HxIgsL=SJI)xK{ z6<+4%XF>Nc#_W5IOCHj zrZ2RqhG#Y1*)!8PxSLKeA+F}%9-!`0;@kdw^HyN{g98Mht z=DlPL1+2G)wY0)5gm-3`9bAAE;rYVZR>&7-EJ>aEu?AM;uu`az3$W6#Lb(`KhF;d4 zMn=eQRRm|(`_o-S+Mqlmq**#ET(fn*>JrI8ADtIm zlO!t^Np(C5zQsWJZ>pYc2p{8J{NWZd&>4VYQCePFlqqX0d)`>Kn@RCH0n2J7bD?A| z)amh2DygXbgSG|qXxa0l<0FpYyFnetx9@NgRcY57?c3x%k?QO12psTPiTwA2)))H2 zA?p+U0R8UAEMc1L0*ijH)*`yxB6iH!u)=Wf_q5RiAr3TUAtHyl-j&tAQhH8Yv&{TN zv@=OU#M|RtDJ8s#l-rv)*w2TKtxE1CCeYLZpY^!H(RuOVM@U4i3V$`%dEY9C3Ap4) z9f>krNUyv_cxW5Tr+nY#I&$9pax&AF8G`Twy zA4^IX(0oi1w>>QT*tLbfF9A6pUh%o!@pjzeIp}pIfm~I3Yq(`etb`KBAiUVkuvor9q0iQu!43zotN? zhkycQCM(@Zu;>cUET-)6kwhahVk41UWjzs|k{XY41Zu0H=LDZk5MpH6W+A`E#J+x! ztqYJ=gYi*E3GoUGP;wzZ}Bwdrg^GN6i1558_@!4N75JWjbM7` zC!eWLqI8VD&oe^5=!`|DwLFMUYa?k~mzeq!zrag)u{Tn)VV|N}EKSa6-HQ&Lr$n+O zvejjkOsF1IklHLAV5bwGbUH%wm)`2l%(%s^(vsB`pNvLEbeA(^&%^Q1k%i)$|4sXz z&<}gi0o{gs$a#XW<-Ip zIQ1zg7eF*j64l)VAae%M3_bV2MA2t(?&563pypT9J}l(@CU}Y!JcwdmyUcA}h!F8b zcn7lEP%kj~M*i3{BK%0|I$8yt-5fY$Zjx=aoNRk=2Ut?yjZq_OB6neRQvI=38rg*&?O4~{=SaDL4MD3@o>mkKB15e zVi4KpB^3xc5Ffy;!5P@@OTG4qtmW&vKftf!gMs-z*`goeVx-i|J7puL&)dC9f0as* zr2KP4-|`*KWSi~AS&8HTs3E8S`P%z^d*v_vU**RUv?tVG8bLMH($Pn3@G`GAbQE$D z&Al%8yj{%q33ECI>m%srvhW=#Iq)ZUa?I^G+R2gUY?SGr^ruyFPjEVQ@@{A%vac}| zSnwTU4TVmN?5hknb@gFe!IG-N7dyTCMjtMZFTd)`Sh;y*C$@y)h(7P#WV#P)Rs?t+509lK&ZUc&MLsl_byV7CyL@2q)gBWx%>Wb>y*JeYnrjzXi>W9rIhTu4?YM_y+YeeooMCY(8P* z37>fF)>+meYk%ZLg!)5mU!)EHt2E@bnrBHCZ++{m5bD;hWEW;Ny<5xfA9C$A2(dPH zw9M_*kI1^h$o7LAl_8LRwHw!crD9zlrdT55{a!Fltzz#vYnJt4+jaxkxF3B!JJa%1 z2-QFj&Y6#C=S)Q}D0tRS)8`*2_rTLuJ9t4&+gyLWpl*Lkbw+9QWjx0<)8~je%iaB! z_+w_@D@DPd_ukn3RPMdqoYe+!-AgIk{X1t2{*<8~f&D2yPqtpkdJAGQk~!Wju6NH{ zAOP9pX30HM;nQM0;j^t(Z95KG7cJxA(#&X?relvCsF z*x>|4^e|`4CbY2xqLCQ1q7_yCl}%iZ96f>*QCY|g6eaf$jy7U{=h@r-g?^FkLj2OS zNZBIqa5+%ZjCCw}&$hR!pCJo3qBb5p7+qE+7Ukm(Rgt6?}a$v9AszDj!nAPLdH2{GZPE?ss@N zLmtpPopp{p{ELS<3;Nvo0IKt)mQ&L@W^giP!L#rrj_e7!>0Wza^ZC1&X&?Z{gB(tfxPh6>J<4GC8wqMhH2mOd)v56(^rY4L+MOVAV?vF?IoZUAGyDUb2kn9F7YIhz zhi>uO?G8ex)_2`HSrBTi)3_Y4C}6isFM{#1bphLpn9@mvOKT%;N%SRXy_(*z_w{4+ zpgH6Jrzz5|3}foqN@dE=eAjR;o~7XYBgq=hF5s-zaQ-5j_}F3erf9@2+1R9MC}=<8 zfO{h2f4r=?c8A7v8N*-pEBshr*1(F*_3_5b`^>OVo( zKj>@fZ#=yI8>RmDzAHWIRe!BhfADMIPc$j`|3)csz~fETs^kMVvPM`^@T@?3(;xEs z(@)w9>5@(4>t21>{0N93*6`SQiaCYC;?0AF@S@#J+W@EZ*g`jWRr{$ks6~&D*KTaY zShq3OVpy~_6_jO349CwTpGTe$9*GwY$F7D0-uNv3cj}Y z764z{zuOLjPcnQJz7sTjKa)0k;g9w66;sa*B$r-u1KMf0@_f~=2~uu}u%;4wT$QDE zkUR~?G()ZT4T+}+Fg09q<*HZwWip3F5(|SU?RmBUEH+HpIF{7Zi4wV3dIf>*h6nMp z0Wu46$rGX!Z|l5WvJWh9{z7@O1(d%~W`zPi9hxP+V;4A-Y1aD-!d@t;Loz|KC(EKk zXf$VqG|>^2<}9zhObhq4=aBar0uz`IR~*YK{g%jo4OgBg{ZCFHMf1|tB)*JkH;E0| z#AVpWyf!ei|B8+KW_*^b`cj1y&Em5ri_Z~ReBMA4ske{$Dn1#nlfR|@e+1Nc{il@7 zj8|Q@{!!Wb2TT38d|my-&9@s?jn(w(mm$y0ceB2an(r6tHqMpOY992AZ7dF9*1c$j zgYG^;fQ|X{N=;*tA&RKb38QM=(XGKrDl=|6TGMn zVuw^&c$5&dR&c4;cS!Gz%VaT?kEv(Blfeh+&y17ylYb^n(Wzqeq*p7rlD{C`k(Y7v z=rs{5ps3A0O|h2<2k>TB$1vOaaY!0Fl>Mpch?8=}Q<{{RIx>y&92jb7l>1Rd{%<&4 z!*gr~p6<;g-v0!Xt8X@`lemE|qcH0|K6*X%IuL!`dcAS1>g%&d_i!($yJY8s&VmQO zagV!2_1uvY=)W|1x07=-hJ#>eSDKd&3B$9_>r>qXZW0uuE8B_M6Af=}e5UGl zSE-`i`O3In<6rLjw)U5dQNZ8&ziD4-m~-vF@pn~p^f$L}m&6(esc?rf#F_pt(f$8U z=p^aCZvWtsVne(u>4%j}LsxQ7CkhM2KSr)lSlF&~zaK@5VrP4)V7orhzFJxf)}Iu;$<{)*mpj@@tE$vK)`g@^1nm>Kh*R#Rp=kH%#4g2u7Tc~Vd{d90ZawP z6~a$%mHxb;)>1|BI|t|S^N+o%oi|DAMfX#6`>ROT{M_*Zi+ohqi>pK9B?r$HfY3ob zER7?BX;SRaLt!u<+4Qp*3@cU+qekp)$ro?9fwqB&aLd|OH8qLWWIgvX%>g(&KM*g`4&Fp`jvcTBZIh&yzh&&dUWhdmK_*X9$rW zyQ!==X2j%DJ^=u2hK9hAXY=X{=GE7Hct1q>CgmMdTNVR7zQz-WMy}WZX&86B0g%dP z5x+*RJT|Iv6iLqJPzIC?8RnmY8Oeu3U8^?kFPg+P57sNv-P9=%s^Eco>Qy}p!g+OI zL@_|u#927uv;}<*wn9q;Q(TnF;ce=>s(K%=_ZpY5 z$(UUJ2=dxh(PsqUbV1M$TKz4Q2IVap_e%4MdC(k?e9g5;)YB!jMHdr z3yVGA9(vrX1PNizr*dkC0%1q;{Fbi>6+;=wD(5@|)2?EV;t520ZR~!9J@UqM`OX*U zlj5H;A2FI?=`HE$TNuXul>3Qla_2;BLMj{|7f$7qO`QA64Va~ri5P{M+%#AL7h)W; z^@ZGGW+F8sgpR8-?TNDQLeEpgPrZ%jFzuF#gGSG8nZaxq|S7O64%*wa*cI(}@hK zTnksl!Qkg&NW)dd>y^osa0sghL3@aNuMw9qxs932ewVNDJ|hPL+zvaj?TfH$^M`Hzpx?fkW31vj ztW{io*Bk!&6OG0HfQ|z8=u&K;A2gO@*m0o?>lfS_ZY<*XpoenUb-!XP0}eS-9}+N@ z?cv`m{9D7ngJxnUX9^#xa|JW8>(sU{z*{TiYAiaDzinSIFahCl8e*sE|9`;8bQISK zz;}*U46_j$0(IiqRU;N0bxqdT>B^`%M-MMx$?qJi;*HQ?npMIlQ=hru zx38RK+DDuAk4n8gtKCLa;;Gmd&1&0mXJr48++T*(bo>4zg}R~#d5-KS&(l0mt+)L> zi9&-bcYDLzeTZ$FPA}m8bX9Zt&3#2;*c3Y7ZdlDXrukG-04^$Asi3|h?D36kEDj%U zo29-Jwt4IS6+Vhc=GKcR9IF4sh&IzhS)X7iRrvN)P*wN^#UPk+b^$kcGwm)0Rt)N+ zL&$7x&^}B?^gI9vbonc!84PKXga0jS4-4O{3-LDFTqaR{kiqk$P1%41S6|a29uCT?@SNUMM6r z0%O=E+_(U%6eRv%=d?`eRFxVApYWEOs{%9D2VIHA&Rs=~Si&`SjHsvO>c-BU^4`-? z#x$RJTIYvc8M>*XcyQ_?Ak2=pP(MUekou+epJX_~XKVSlFWz2%Q>nBAUmU}|8v9r$ zel4_r(X96E={xC0R3d-0?^khnViIHqI>un?AQ)-8c`zqtZ8yq- z_y~Q#EO4-zaBs8Z;;chbrnA@b4CFW6Dz+MBC^B&&sReqO4Yph>UMiC~bsZq&=*7o! z4~~zUETQ#YS~ZYaTI|6$uSmNKLUE?mWklQPG?+S(WKL0=|Dldo+($@!2I8a$JJP+t z=wFt;g})~y_1Ar%xNRRdq@6;ie4tjxr5E=rw>NTQrOSWJd)~-fS^6Pn3oFm@KPx zujc!NqMmf1YwUEG0oR+rBZO3w_m3Ad#$wOX;!xknz@Hc38>!Nxne??jXyRQ=$ImrNi97W>`hxpQpt~bK!W6oJH8~6{e!$zB~pcvt)-l=^jmjQv1jDy zAx11Ltm0<=m@8Dk50=QlNnSVMKNveiZN%>l-1sc`|EEsc{X<6L(49i7>yUBwsG3CS8ap%)~OD!Q0zUP#U&gV5FAB1@p>bREQ)TPeL zbbf*P0N!N6y;2Rld+i&_>@j8aYmI23CcWQWb1*$}E(n_E(Iz>E$QxCh zKov%83x=wZn}-ZFVz2OIj}gnN4}N$s-LMt6M(%=!X2itM*aTAng{k9t(`XPw|UUa%q^GGgy)=&wc&kTt@H{f<(sf>g3+ zC293u9!vH=;{6jlBs5~}C1#1TaN8x>2HRdvaFO6P%G=qP&ce_-M1N;bb60;>|AI084Y90U zz|}}bhs3=i@K2ey`bBU3A)hgRuU9PYz1BW&^#%ly+Xi^8TMK;E&-q+yt^KYytM^-5 zyu&c(uYN7I$qUz}$QJ9h>aJM&wj;dOFcdH2Kg&Lq)StxJyCMrG`9>F0aklb6G#*N9hcal zFx@1PMMdufMWEzF71#rLr^|n`;&A<9RzJ_D)3hqryT zuIwW!+eT%|RO{oA+>0sonOS(2h)f{W$q!>C)gdmL8Z<8YF{^iK$N)^i1x+CEIAoA_ z-{;B#eAmuf|x<01qVhZz0ZFEyk~)K4|H60I$fN)yQF=1b}s3XnGTK8}PQ%@tOznUQtr)E}rNj~zPaMZ^ce zLR+6Qzjd-hkAD_isS^?+_sf_=b@9xZ6=H*Yj;z=xkZ{k4ddpI%X}!P&+N3pMfl_bU z@iubdN{=3cxVA`QH=@f`WU0~IE<|Nke_>X?*q#s+=^)PzaXzC<7c+x*nARdillUd7 zGVwbVM%%kegv=%~1<`1@ zdi>tPa5=gdM!-2x$??O6`#fOKzDI!Ov<9jZ9ObfVI}jbAIr%Zd2$SD>nQ>7{lkUGb z>%1P^f1i;zxLbSF;J$x~qK!?wsUj&cR%OsH{1t=#bT;)eQuX-iv$#UQ(w+%7$Z6a~ zd8cvb$%(`1m{Jb%8iPBQ3bO6(aZIU_PJ{CCq3O;Q^ zpBxT6-2}mJ_`AA3&q+O6QkThmQRjui@`lkIWGG8=PhU1qf>$};#N#3PohOCSPOCG! z{B_c}3}uyrCwpXa-#__GyafA_(scRef2vq6^5Y_3_#N9nMNTUGQ#h&k^AcRwi0Tc> z7q6!x^`R!buV)o2qB3!i@b>KKPp<7rUU;iI_~|DLLh^2DgOACPKj*<&Dj{fW`e2T? zRxT|Kg`^;UOAGeN0|8@94T}7r=)SU9$oUw8<0QvX8NccBQ*;jbaj|3(-%=;YkG^mY zXA3^SGLv)45&Ie#R3)cp&%eO`^2kL_j%a49#IuSQdk`=%M6LIBRrzNQg)-AsI0MA#nwy?cPG-l%wi zu}I>oJUbmcs-0)Ld>l(%Cg|-^e1j{WPZB%ey~*GGLk=!{EHJXzUCCEJ8hj31xaHl; zx?B-p`D~;vm2OIU(00pq;!lzWA0fO1QB@(wae*1P;68|Bso4%70?Dm_p4{!*tD2}p zC8S!pN@xlhsSI5`W;w_SkpTcOV^g~PqlX6;s8A0M=yyE9f+CPTMH%3}i+5L7BZqH* zO%>?Di4cGWMj(<1uU^2N!fydVincnMPUzKoEwO7z1kJQk>-ScjolRW?MRITcAi2gC zlGPDBr&3F#t}uM2=+V~}KxY2ZwT&+4x6t`5W==|aiSyeBek#i~_mVBWNfBy)NoY=f zxE!&?U#3VKY#EFDQNN#)05?c9Vo$(nRM=!ae^_HP`ewniw|(E#$y2{)-2EI+lc!!Z zm8)<2$up0W)ibWX621xSznSVrz;X72Le@1%>B2GM4L>nx5cH&p-V`aSHj-lkZ-gAV03u^Qs}m zpE$a-Ud4Y?O&K3kXOh?Y*JSIUgkNFN^odA|pjeX}&-{ZvPtwB6HpFkAwNqSRI~@W^ z-3p3Sf5F2E`xTPX zlYD8EYJZFb|0gb?+%5e{vOi4<6CWBWN$#>*!+5GF&S-KJBmKNC09u_l#)bnhjQqF_~v+G!77DxI@YIA9PylaKb z-R|$U-E#ZEbXa~4rNc*y?Nz6Xm>ouR23bixkPf|#WBQeDzwNK&xONDaLR5I!0WkPJ z`{pvAJ=dMQc%*D5I)!~;D^+0MdI$2b1ij%_FPmL?h9}CoHd2r}EE}P?3OZfhHib?x z?VDgsh?^~?+*n?iEL5V1xa0dHGi_c@^Y_`Q`x6E1#bAp@9;iRE;Zezzk zS`~L`xdEz^Z0*|%rWX`+#IGlrufoXIHr@a;8PmMBagOslSN-CHr;HmOd5n>=$6$}( ze-Pv#z4({%j_(RbTh{KAMMSmyZTPUzPr8C1c%|jtMLl0W<>HOHuvrXH}NPU72%n~+l^r*3DZDUb^ufyMw zd~%CGHL;mge@B$ggBm zzgCMz>(oc-qiR_c0h`(P*tfQc$nzk;nfCdms`rAr%lM{-Th{WQ^0mv~Cfzk>)QtR| zvG_(r(=NXlZ^`k}jci0O9OARRmG*@dC?b6pJ=>Ukp)N~{L#U33!|G^NnXAGa51?Kl z$_fC|EVPE;H&oq1RI1v>-sMLjE%pRN^7_pqiX@sP46_VW^5LkghvS+NPK zl4vRZ70Hq&)sIqpTE`JnDnq5rVpj5SA41d?hN@&Liekh{$O?2GD-iFI^D--ta^Ada z8Lj&75H~_L`H`)K-hOLCC*+mt;skYLo{6O;%lYSdUk@oS>el1kbvY;dEC#S4lGHV6V%E1(<2)=Od%$>X{jE3Mkv ziq=}KR;^mRYq$nbG29fzYQ)>KMC7Ji6xiSUGxKbAgV_52_4j-If4p97p1GenGjq$OHvd4j@Vz;N%VxS7Lxzrb(=v7JK)1K? zAuF#JD3OyLZy3DL9fs0w7n$}A96u#HmQ83j1Vs02t>B_yUMyTBJfVxmEz7KFJ$3O= z7F(#jbBb9iT0D%HE-IFoH*p#~pyi8t_52OYy$|A^NoSLjAB=JSM7eiJlPJKVi9ol# zlDS&DOzjAy`rl1=yzwwEyqS+_wpG?9W}3yFBV!ntLR_md%qzcKKWCxO;r)%jNY8KL z#SBJ?<3kBkD^_&lnK_m|Bt$4m@h6qCpV;Lz-n)(b@$v~jlD-fD(%bqOqTw7e8vEAm z8zhG){sYDTP4S)f@jgSa(=r6G+Q~GaITr*#7>2~b2coFD6AuvUQ`E#Wuw`RR@ds-6 zZl+?BUw;3YcJYDlonVxa$M-QZ&;*+f8N^jRy?N+H)t__p2oT~Jy^k+v9*>SXk!RXT zt!KEPaUM&hhu&o>UDaD2_&@dv)ScBrR(#-zaSTkkvp|yV>*h~Me1$|aV#67>qLB0K zX_qUQ2Wd6?nyqhz;uq-5rD2;tUp03Mm=H%+#Rm_GxNXj}T!~y%x^zP0#+uwCHcdc= zsBg)}!)(nbs-cg}O%4yVE!`Hrdw9Ipkf820zi1|4;xAO`H_qclv0r_=>9b7J*OM>R z>@oPysf)OBo@VJstiat~x|GIqj@V?{&WV(*s!5o(8<)k0baSfa%-+TeA^0<^ldqkt zp6RGfO&l|8U+5<1Vfn>4Ly;F>&Byg1*m##Q^E&8qqIpjD9d@qn3pB~Xbq~m$amd;$ zhGW;{#d;_H0UzmT0jze?4!RXHbb8ZNC!1yN89l6SBBnMd(DiOG!{Zca5z;F;Tm|B#JF+y7U%Id zLjZ3meomC8#hiisnzZ5LJnc0bl0+NluQwB^L%E;uH|TD1S5~>NSGsQ^_+FE?ce;bz zhG9(OBjhgh_oay$Ko3XlM}7h2t}dYbh${n!NcEcHh>ad7k(2J&e7Up1er0z?`Ow z$rX-2R@@F&OIw~tEe&m4&qMWW#}GPZ7}ubxu7y^pC*nR>Y$WJgjg#Ex;cHpsmP@HG z`SksZk{6I3Gk$Z4DxnePGc#~TaS3Te4dRb-aR3!{IFw0k-;LZIf3UcMB6#u<_{`ML zykmh}@IFN$(>u!g@XGMAA{>9FxI$^}+v;1MjxnZ?N5FBmW#E(*=QI=M?NaNSOvfry zjA&xLp#fPfg#?*KVJ3e=3{SK9JEM38e+k~rA96lPHg${7Rm7-};Jwa!W4X}$lIbhX zKDOZn@iwmCF|S@bJn(t4 z@D+T=R^dtvcYRlV0x9nJLyBIZ4aN<#A*QuJB`iCQ>-liKF2+;Smy?IZ6Fp8$%U5gu z^h0Pil4b^f+5_-28F?uFVI_tcyw(%KZ@bdv)N6CQ79`K42~UY_MgoJL?V-LAw!T$x ztd7U`kX~Zb_bcb7*KK=9FRS4+_NXL} zoyCW&TX${nY!2Rvq|%D$*v`8cUU>dRxX?8#P`*X5rk>|C;EWUj5f2OQyTjd$Jg;&# z3y@b!-bxki7=OAVebv;O3ECbOf3oNH_qF(+C(B{{DD?OhRV?OZruVy?ljJI#D1?)sV zW8mxY$`(5fK}M?X>+{boMS(Y`ZfDi`BhN)=mp7-0WsL#2Qg@!A)Q0)~_lc#rz%$>z zvafEZ)&I@eyNyqje$hNVA@l@e6|76zOn5U&+FUr=uIZtWw1bWPI2N;ouySNl)$KI- z8)^~P{dyY?=9`_W_Y4jWVY)u*}emln5VYvqoyn-V-(l7FnOc- zwy0_Gdp~1NURzDR4_M=-JJq@?g1k9K>l-q!Xup|`_h({6d$3jyirQ$V1 zYE`^cVq<6Ty->9qbuiy4+}_H}7QP$wm#Hy>zr)MEbQ<=eZ(4{r6=qf&l!l7OyI-L7 z2^CM`x51GA5%R;@%zTnxYYE9B8~waHFY2yCvLeHS#ILgHo>(d98Wle?AgY1$Q`~8- zKrkY5ba3|PU~WZl>5kM`JPZ>~jm5ou!^y-gF`sC6=Zl9S{C=M2zN3dYf$4I?Cf_#j zO)>DTBDaCBnh(Jz)@0$^JjTK&&?d5Z0JLgW?)c#BkFzb`WZJgVSlC@G-_RA5=-He4_)Uc8@L3h|;$WdL`9s||M!^xVwwjd|eG-^jguM<&X5`OOjO(VE9dXD(K-?!Mk zren^mYz_f(nuhLB6}40mA*F>bJG1&#krHgWY{yV%*5!p+Lz)JhX}$tOnl3++n-j-| z1Dl364M30CFC5rF@_AM4ttDldW>i@i5-I#e_^V1Q@gR5mX|N{SVIb-k32YpWe{a77 zk#4%^5ZJ1W4Yxvu#2%(Za8qQe!yTp>4j;ydE}ezB#g-Qde1e}=b(hSbaCo3S68J1a z5|SSX;`N~HNMMz!Col8HuP}uU1T|B!4`-;1b1CQcW>$ozLW&@4U|H6%^p9pU(CpeK?sB1ZB`jmQjtM7l=; zOVCo}G!0=;ZuL8kLt*g8`1Xth7TF;lu|xN+z_p);KG{C_dCOXzTcrpUp!Ht1g+Elr zzJ9rkV>9QCGi(2*f~FDKGU}P)%tAeF=Y5m;66*a(0nt>D_>D27RlIqZ?hKZZPrssv z`?M>1ARnSzQSlW+RvS+wpP?{+ky8JEo5GY{up5P$2{=GLI>MVYQ*6DvI47%yfFZyX zRR!jSyIB%tDNdMYr#P1E6J|P0fqLt%1bb(w$cP?(0)wBMyMQKVHuzukp2ISXe$^aDtt~?Q)Q{Z2k?$laxmZ zi@_EV2zD{p5_rM(=?D3pB|>B0g}|FyvCz8{&ig6U1j9OM6nI72ef! z8j55?J^TW~mNN@2?1G#o=zygudH}=kut<;m&WD-`B7uefnetq@JLL(A@|=$mtbx&| zCjt|C(twEI>o*KXnv)Z*pPy63ZH+4PcXpr&TcaQ|$r4Lv){tGq*m+gCBiIz=)TeTn z{-!3?ImJ-V&RLaZW>wo#4+pX7S;cf4ZWy0N)Spmh>d{4v?=({WvQ6Y`G$4~qa~^nT z5nTM8&0n5*(mZSuIi>_3yA0Dx!5a3N7LB2=pP$oIxg*WbEL$Wg#fJH;Og05~GzE95 zKviIKu&H8)GE@aNHJu8y1}ckX8hYZgUvJiVB@6=V|E| zMcj=+>}pueOu%o990dICKJ=62bb<16Qp9h&&Br5l>l)=nm2?#jtQA+SU)+TOzv?IZzIX`jS;<9&@S!3u;** zSx$o<1QMyLc%Bbb;PY`4--><7wtKd2kBr+Eay|3m#fJv?2#@nv1^SAQ&f>-FA=&2g z&%X4xt6cqfv*hY8r2PCe@%ehgZt&9=Kh3BRu8NEs?eA_4nwC>oe1I#;MpZZ-!NGk` zsOZOwPeMfr2lf!#LA>RJ(U?TxKnM0fw1R0$B(Oe+o4l(&QKt*&E0=kxLcQ)Mgvf{f zAW7R2>(}RGWnFVkN~k@->~X{%YmR~9+bk=IBw!`~>utd9M~)((ZP2L)r8ZmTeA&&; zqX&J*W~<>&7F)9L(RdHezl%|azwC1xUJ3)4&Sq~)w^Z|cE%z?^xtf>J?P#0J63Nnl z1>JXsyBpXTeAiZY$U3&h>%Bkp`L2zcj*QtQKGg?3#bPw2L*s)FvHVVRq5rnTLEDih zxZ$OFt&LRUG3=4;-XO{j%nB3xQBsq_Odw{4yMS3%5x+v)F-?@gaLP)3h2jIU>@*6r zXqBwQVmLC6joG^JIL_~Q-f(MbTQ>Q&jBVN9$@eXE0QbAV?KHf=N+tjj!ueY0DfqZ>?D_8lE>i z@H$)N2tMqCEa#fL6Ndt*@M?O0Av2PI#cPzY_#VAqbkMhZzYu@T|8?(cF8;SYFQK;? zJs;88^PTh@=5+?WKbN~HyY}4kdlN?iB)+m)eBIr(H{8jiFOzd}>eup$&14Q}Ch=NL z_2Ny=l$JaBS#;-SeetvCPTtR1h;3&+T)m~B{_Acx&L19_H$1@OWJ?p;g<;zM2s@e1 zs-4?@%vAi&>dRDpnX1>%qOyNi{YF+S<6{*Ue}%mhu!QXZCW=Wxi_v%tDSKEE!-)3D zj^>b&4=5ut8J*Z!(_ct3H9=n+|Ha;74>j%34*&a5t=FMi5%&Y{nSXwRftm5qyc;ES z8lRxD46wdez0a&g&inS7AD^yDgtg=8J>;qQzOc7{vd1>EzHj;JFLaWSDB{eMKWCfW z;kP>f6h!%Z_4uasdxYl7?^}KdNX{{5JSQ=k+skHTyQ&+M5R9|hfwi)tpz3e%p!W}T8Eo!^kcPf7m z;_sFGJ(#~&@%Ip3EN~iRzvJAV%Wu%U5UckK@cXfjCk%qljQN#;bya$Z6Cn>XAtOfi zvzH!a&%_Jov5~!W!c+n}vx3h_S#E3~5Sj+Te+KK-%bEjl#bA;!Jk^!vkP~WQ4&|3F z@&@aGD2}lum;{l!1LDs0e)l}xo)r2dpF zrGbwY&>Jd)xyzO~7~}CuF0+;{62#uE%UB%Tg=9x9uy_f;oQohgdP}hZ&IB4SB!YDx z1M526vl&M$;Js-SpbqZ}YV9|jkX~;Lj&i+?x3Jd`sO!C(sY4g)CF+4BS_fYnJMpgJ z8RU(9j{e9xb)I*1o4SUG?OkrZy3XSNp<9}BU60!AxdS6#UJITz_QBbobW7}lf}>xo zeLdUUrNV~neBknLo*Cl}bG`(_?-_I#@`Oa+ppKIow7%r_T@RgJNFDa_r2K~Lz69=5 za|VlvKX;ygc$-}WE8WPlaH+2nOV}-R54#=yL~x{HFAK%5^uG*Gg|Z zs_uq-JxF@v!FAW#n4Wdl+L%1Oi84Z5EndDZOGk={P4hTcvi1tPpTkX@Sou#j$x0p5 z!G!?rJ49dSGzlX-e;&V!zrI1i31K#LT^*xG;se?+qvxH@Q~SwIpqHUX#yNUT%KCV& zwlW`2z5G2jFgG#Vc6I7_)lrMzmD10&|A*lTRJPxk^PQt0( zPpA=-2d6=%NV;V)D#Ni|M7u5Q8OPWDBrE#!NbIj|WRiizQOw7x*x+In=%Jfmg`d`% z$Bi%6Yt#i~scC0^vsz@7*J=NJJ$f~3i!%|px@4%(0q(j(%mMB`U#7BE?4FJJq!!Sn zn752|eTL3Hf@v{G*q_`TO{RZb#dssdoW7#wd-u=F!vENMcoaV1urunX?y_jPRp_l{ z5}NbVe<)H0OHe?k;m?FZu`&Iyff}F-(6?R8sx?aHGCmB_G?`_Wahtgp5wA>|VGOx* zFi{F4s1J{ylhaFp(t--3AX2up<{i$? z%jR6ixhk+_@V!ZvVsO{eKb!}t4FCwhyXE|epA)>i+*6ao9)2dioNetspg zpUnMp9wswo-J;in@T)K3Y&Ty1(@m+Ntf6`1+m6H=ab{2Ak)4U7l(@HppAKUgm9w3-^+EE^CxI~WBnkehzi#WL?01-N7RcY5 zdc5T=RH8GuWMS3~qBR!3yV>u^^IUy-_b+;A{;-?py_5@HU~~uG{W&XuU9DUZ#CrUo zju0k@!w9{aRl!}FXAtLf)FmfG*f(8*b31Ub|1RhcFMue-{m4lC_}8~dr;)pHCx2qO zKg3ON#9d3os$8%e&wWSn{-sHj_gtDpAH=Om%$TU>K3=}(+4JX*px?4CiI@NUFs$)L zt^5il#ac4Fq6~PPR_u_@*yom+*k3AkKxgbG8~Y*_d)|Sav6nw&@?NC8S)H*D9k)&O zn%35?NVQf`Y+|dGcLlLwwoZ9jt+~zgQU6+Vm+{4fh1HKon$cX&s~tpW3L$B~;<@h) z6h7cR{OB~e+i0ND7(|)aN|5Q znR(o`!9F|sqv5d=Kw7f!s9#Y{+5DRKv1N(4*me@Pm8y|MUgHi%^1K4fySvJdw#5f% zv36R3W6deB+Zlw6-S>t5Jf<%N?As%5`8yr75X)J`V@ko+>0gpjUFLHNb3y;A+`Xz= zr%%hVA#c$Tp`!2siWzpf!I_;qhT+!<$xY4VBC#NwanTVHv)dLn&^<0V-ISpqJ@65^?T;engi$} zKtZJqKTst8Z`ab2_~(5lJiS_NDgAcBa!~9vH1dW0@CE+(wdVdJVaJ^5_%l9VRkxFc zy-dY5;nv(A`0248?bn-C)c68ofUzz8EZIHFJND(Tw36Ie#2TgtH|Uo(@$mgPa%(SM z{-)Q1s(Vs(ViLJE4~U(gPp8j$R-IdcA(IE$RL2h;2zrUPi7m z9JQZ8NCq;RHP>HF;J_#8Z48G{RM_Eyix11Jc*WK6EdGqEP9c;;^nVe+2Tb) z9nBEEp7bIMou!ITpm^d&zEbv@Ux8^e@b}UWd+k&Qfa-O|OBfuA&r?UP>JaH>)0P-R z?S?;MuL&x@443V){(QMlc0T4G8|shOAC@fF;BpGUrxCJG+7@#=Y60I!NlwGde1v09NK!&|t@i?cRJyvOM+W`C2sL)SnGQW6 zH|T}^74>IR5@(m#BtU!K#%w{Cy@RjH%rseeGCT>nL|x3o$SXvU+h<$J><$H+_FY(EAhMgUi3+WQbqUKrliu6UGsbV*aflDR1Zj!no7Se1pHuR4 zR_=^&XIF4_kGQ|g>-aN!ssafBA+?z57-RQGmM&wbKb#LiQg5{p`V%lW3u$4)`9^R% zpXw9mGVA3HLC|;1O5>{w{|%e>!Zt%W7UxM!`+)llO{TlNxF~gJ*Y_W$u~_nDZY(+^ zUrM?+7PIrTuZ$XaA1c{{(JXNq^9gfd`{4~#$KNMKqxt)sZf!gLFE1`qVvz~3`BM&= zkK%Ws!o;E45;d8ktRtNM(c)@dwlwqqf0(#8(+r-uordd0q2mL?xXcFuhno@bMnQn9 z*k8fWfl=E=tsAg--gO3x`V&xw0%bsNJOF}F;?_XPZ|IAOcbE+W&c_Gy*krTR^m3@j z4QKZ)3F)|D8xT9apP9mUkq{~S5eAujm>W#qby)JJuMuC%83dQGnPfb-<||>2FSjO3 zbIMa@OpD7?w^!TnrVU%_$Y*ji2soHWi|$SIb)Fd7FFviCVPN&2?Fb?)^>Lo~^?*#{ z#cFYIjma7f6By6n{ZxZTwmZjqnfd%KtcSeS-@+{=jaPUAx1 zwQim!Lk9I@{ku!8zrN^!T+neEB<#mzvY(TXKV7yF(pi< zZuK92?KE7$d{3NbGS&)jOp4$IW>W0)nbw^*be6w&>zo;hy(q)184bbqW<1H9K|&Jx zvOynA8(M$>SuuJquHl#9@NN2Fk*YXHVI93Y$4AF|+;r*2y+T@LcdGNOz1~1jW8M{U z3oTiA&{g8`QK%Od=C@J@u+3wsvfjLx(FUr`MtM0e#nb_%(FfjLlQfB1NQmCYqPk~? zzo_n{u+-SKT2(x^q_v`OlUZGSG;4V&=58%5vw{?wskJ4?(nU^xR8vm>bBZgR{-d?B z#ury_2^II_HjX^qa4k+9^14si&YcE&)p#s8^7;Itq#-X~KLdGrJ*AHTe`TXg{2Ilt zV+2e;C)$3#N1A%HQb$DUr*No#8jaNx6I1=MyMo&Mlb0rgV> z5e%P{Kq(YZf0Z&qfecdOQ<3Y6t3}WHyi!DU{+0T&X*8v^0ANru>kx!xGl+O-z`$AE zL=(~9ec=57C9lak+{InvRP-RJ`RH|AzCD?^jTlSMJIM-&+3}H?d5fL~F@Hc_qRy{+ zXaj<@Jr9#nj;b`>9x=kwz!Bs&NspwHWaw>fGE(9<>F8^SMzLk)qM35*y%~!;ryNXh z0(n*SREEPILhtNW!;609FYh#C^+SQAYe48v2IiF8{hx*Q5GDPwn2cFkW74b8dW!oO6v%Xy8iT^&;g@CdFXdTSl_MS>hpz)6PF^o?qG0Pm^qQET{^7 z(J?+SZu6XL^W07zV-oGv&~jq1U9XEqnm$~q=KGtdfx*G13x`w8yFl?hiI+c_V(Ly7 z-Z)ts&{~F`DP`_!Z`D1n>pYDUNDx)@TXc*PO$m?O6v9upl-M(-b{d#|oB z1G%GeaAe7=Un`;b@(I3mH*VqXC35=QRz4!~0T@p*p+>QmYQ}dBd%B(l{ z@?G!KrksCsG2lpPf;g(YO1gxC7bLbIQtxO|hiW%*&Rw^oiy@6TIezfn}$+D0A4>zUI zt?5QjT;ZYlK$N4NUqR6IFdKuG%WViUfw?EahgfV#6mPvZja3pV+i*ig75e|v<2hH; z#Rah`Iq2$gPq`}RI&@YQ9N1IeEHD{5WoVuge~d2yBb6q35CQlwGOqMm!B}rW_fvhk zz3?q}s=#S<40JhS=sDY#j(Q-=Ji*v~*IdnNAw<^|Cq<@7o5K<3Ea z^5~JHyFbhv6Ub|)KEzQBJu>f@n0~R1;!rw}=*w7`{W`O{BY4U+IoEwsdCIAI*L@Hx z2%geAT2i()y26>Yg^erApW?!())bK9YNz0G1Dfz*&Yx1KHV9k{i zafaJG+GJULa!rIiNywrU*Pd7-G~FgGr#sq0vd|KOp6 z0c?PA1!U>hk-I5UT>{3nDkP4S~xe(6^5e)(hIJ)WMQ8V|*vLwrKU zdX~pb;wxEr&84`yOXs!i9rksE_ix_mk#)A*PF)l1d`&Ow$)&;%-E4)$T8^|c1la|q^{S7QoLyhjJz8z2)=#gtSY^f0JWiiguAiE-aZ=fjmM*}GliHpBeUU5pfUt;e z4K3izr{@78D>}nTZBac-R!~)nuHZ$DvU!PVU_?TOkM@Ka^%wTExB4!2if_cYZja;)^wli$DfhXD<^*685 zpp*M$lN-5%DqeouNRxjf$`YxA?bPYdA%!=iGd73VWZ_HW)91BD6Uh6=Jj5r#b-X0j z46UHv#~o|yK7(3(M&Iz<{`~fQE4A=B4J|6)6~=yD@#Qo=XWMw>Epy2LiUzWp zX)BDsBzO6iQ!4_}V{VCd_g@i3N7lX7a3k*>?18kCn)Xxkh?4uMSe|z_j$ouO>>kT0 zma|a`9L`YYxZOH>i%v+m;}vebv$G$;b1`H)pZ(hKv!PJn}&&>nbA3H zT;_X5(%0?@Aw|p0fH@7?rKc94tGP)dRr39G)7V^fHUSQRRNjvS7pL=}`-2&XLsEG0XJNpsw}QDb$kX^gOk? z<8~|0X&p^t_q&I6bmp=y>qzzP!o~{5_%O6HPt@WS^j~Hv&VRH!NA1Ep=LIXwynpJ! zl<=P@u@k?fk_q;Qbo4<6w{yns?w?jBQiv`~mkOQ9=x7adkFb5bP0z^k?k8twrj;>? z)2WYkd9y30=2(sh9u`FOJr|`ml8w7wXRwA#j7c00l>U6@?K(T|@$!4j(|=0FPwCb$Z{HXFtpl^#LLfGPjAZqq$zApG)9_ppy(M5Ez#4ETE{Lo z=RaeNZU`5ox!LMY{d3J!Ks_O8V0i2AhXG$o#c7$6p?KbKc%{Fo^s27uvD||M z88a|qmwi=PPBHKL#moP`RO>?J?ozp)DkuAvf0}sjCPnTrI}+%Tx?6HLr$(Qd7)^nV z=KVpHKTlbgk|6(1s`}Hpk(kxS^7Oa6HrJuVlmEKqBze}f!zWaL`WY6+3OZFst za$wmjh3CzxG_@8{AbvzR76Ve6s&D2GmQ@Ffm%}hRd3l1F1o0|C4hAtt)E9jdj=iYN z-gSS2jK|79c>|oan)1YE@kAu;X+Nw`r!gH7tOlA`R?~-vBgrDsWN#{Oovs3W0L65p z9;BUdyv;pGanbW-vR4#l>w|#vegyr0o=#h*1$~$W)$rDO^+NgU^K$%z#EH--BX4m2 z^QNI|@7^a4nGo?3y-Nd4qI*DKd%UP(n6hw?v2HTF4IRkiCgdU$LZT8k4=}P!%u%A5|L4I z)4j6)({&2|FXI2Y5L(bp&aq4R{+RzQazsz~%?Xt@Vl@Ge|7$i?I>%m;H6i5mdv{aN zIkqxKpG!A|oQwWNc+`qb&Zvb7q2r_9V}+RmW5aS(&m#S_ka+B3{j?~5LO<;&+?sxe zL`ch9RO{9W&Iw;!-E)&O`U`^Rckr=tg46E{F%0?pN#(=W*9o7Re4i@c8uGnPzE4SK zt=hU+UaB%$9HP)-q$d{U$oh)oTzlUn%O>5!@v?x|PuCMq#4u-AY*J@B6aZqym)M*UNAk zXWY^8Fsac}<4%FpL1rgOA2MFw(c;UQn757MyAIhH3F^Mtbx^h}ZZ+SxVDF9PHm)Ua zHl8)uosi+SxnyP;J-JfL$ouC#l1f9Oa5IdPiB7WQG#W=pcEzTbTjxIP+v`-S9e;&G zo{#&~XhVA~7ST$VPYg9Jf|${-X+CnXX7q<(^R+}wazdwn7^Tf&#*EhJAoFycp*QPA zl#Umni%j#2KKj;#Czi#-V*bdvS)LvfJJ^Doev)$jYfAo5$*(2OH3=1}=lnUEb}fpZ zo0#Co!z(@nqs>7O&x!SQ#l4_$d1ajR_F?Y=T;D}?a7*D+9lnGJW(`QMhMVmC>h6pp>1EjX3{+M(xHgySbS zaecj;x8x>_bR^UC(U`{ym&}7Xj(b66a2Z_X?s9K2*E`3z!K# zr;c*t)H~`Gc8Je5!xyI=Rpoy60++vGSi8K}?vgc5(mTL!uj4jHedO)nV6Xh91)BX`i8hRpg>1M=jtJ0nOFSD@U`>m`smDIU^JpYF#WezDF zi_CmLKj7|+jJqVC*|1rbS|HK6?S3JoY-{vaK}16CGY&%*-G&bBET#a)M0P%!w>(e7 zGj7>cc{M{~Cvl9UOVG=LvlDs2*=zGE-PbBhmsd8dt|_1WMZxT~Cb@KJu>M2GX}p~l zVk7d)&d!fw#92#-24_c)Ly_AjTsF7n0qaMbfs)IDWq2o86zad2{nuw?t9eJ`7b?3X zFM0u!q#Fli<2jJL>~aLIcuuR+lhHgIRmF&cSY^IFu0$Tdn3H#I!s9rUUUX)UtP7uG z;>yWiik|7^Mie%iI_|Of3L^g&Y1W@yVP^b$H)@($clj4Fg!Pqq2)LC6iE9Y}r|`*~ znm^l@5~V*$Y4DvUo!6CZb>fe!r{nMdu7gh2V5cVXu5f%nTX6^iCzE3Kr4Xl=`?fTTbL}&h7Dnwr9bR~G2bG!zC+H-3uu+M zk)W)3CoGQPT~j0=2jTlt`|_r1IY6W*=6h9HM5=(y@@s zRiKnp$TUBS72d`MfXgjBf{Q9b#iXGWd^oi+fqJksFJ#*j!~*>dYCwzInm6B zp^Zty3rP0f8F0*F0ex%^q0;H$*6C_Y{}S)RHq`x>_-hL#DycK$gv#zGnBSkgV&->r z)NXoIc8=vWvqkI@7vCXyoMAyUnK4^O8@=k+1O_dQ=4d^;bB^YuCs~KpB}m-jRL*fv ztw{V2EqBtXf0Qz>`l^;RxQ3t6{w03V*X zsu(i5t@RAzrJK`rH!W{qpuSylMEn;U9CB z^V^vK-D;*OA57Wk-l|r`n`6TV#76dm*D)#W-L}8|uDhseIJ%lg?vl}!A@>qoP6!I! zjVoO==9T@)3@~+MG~z3Wm0uB=p^*RgaDt@sp1lz+O+K%1D z?CvtWH_A*u#T#?ls<^Y)cqN$<(>vFJcNv8ZxpmwRCE;7g&cG5nX=ueG(xEzyQe7s- zv-)C%Pa@>T20p~Ey6{DCYtqm-r24K01P|WXJuC4V<>U^0z4y=e4T!ET5Lq!U(c7-( z=`Ur7c30erXos$hhE6pNm79jvdyQ&HruD4XcLs1``U<6!-cOW&3DN9-tE7WU$q$Xs z10bV1&73WCJ*z@RSKiaKIwr9*=I`4$k;k-pb`A{ZAXOHd{-nl@ zI=h}UF!7-cDx`m75|92yXAYu+rNEiEmj?Dge?NK7!Z#@e9|usWx6W98@$xAz3N2$2 zqYZ!+S-@9OgZHZE7OI(OKcJhOR$!aOc;3qQ7NdMGrq3_M6;$L+KV6kX`c9wR=Ya z9qZAt$Cc8_8986e(-iRBp%qrw_JP?)#LKULL0$HK0cE!d+;1xX{8)(nd7V*D1LY&n z8e2G|m9rzUnGZ7n?q*rE4K#DY9tRA(W6#F{hZ3JU4iLRguGliSw&qt`=2p~PvSn_d zX2h1(K+P#z=ZdS=9992OUUa{d5NGk}-=OafIc~UI*SgKE-YYjxH$N|&*KBB%(Q=CSF zF3&!G$_y&d-QV1=|7r63CsSj|Zyd3_Nc|MN{2*KK913ooPoW|mh33w;g|=xS@>FH2 zP`d#Nw)QX|WG@nRdISJ7kF-i7;!4)^TW`RNHkoY-`ktT7Zd{EXDbHPCVw^Kpap2XP z0y^*-p+-{&UI*Iqu1fc_2^br4>=mrT;Y0Fpd-{drCx!>QvmP6ppnGnfvA(HvuP8z+ zOY#=zgyNukb-$o{(EysukMis(wj?*wNlb#ht*fbG=~|{15R) zv47lGbhqs9F2U~BR$vEj>m3y=JyjN&?Sib9N$@;@Mzng9)gccqBJ=snc zj8MW6_t{i*4_)@rg}A2uHHBisDju%jCGz%H1wc54%^S3B->}Oe-d69gi?I;kJ(#WL zJws&{m)V*@eg0ycgRmkplo(}H3>Tdg*^P_V0*&Z(^IMRb(Y0`t9xPCwuY=3*aZH$? zi@Sk!_J44mZ zmp7*5SIkP)oV`?dGM~CssFyvEW%K_jS$5J-g~b-vtNr)`nXOiOiF^ZLh{;{}ZY7c~ z65m-2-K#}(#hcW}+@*DQL4uJc5}N@q)jnv_iDJz=nt?qodP-7q*ZEhM+EK>tNY6hL z$^D74_Kf*gRW{GgzpqpCufTf@Gh^3FOJE?TkJIp5z`{l_ucmt$?mwdC#O6uxGjo=s zPaT?J*@$B-X?#bJJBwwb``2M_u{>}v_&O*nmIF#1HlhX@HlEeRdCIv(e4CY)7-Fze ztK#6f=TdF9L4eo0fk9nIBKs-Ms@+wIU2t}RMtyxd9=H7Z*DF%_KdUGI%O*ed++mbY z-ZDkn8`9vN__1xN{LdhX`;RACaUh~Pb6 z-2DY!r@h0+&;_0?#Sf%;TNwUP_i+-FEbl_IG8>yUMs%jwoDILMpjUk>XlXS`8p8CB z3n}NBCnV%QDT2uBGtd(eH&u|IQbPQO9K`qYnumoDNFGuW2X@N1KS2Zs$Ca~kTD$FTNNJSDe-!|_Y@$~qco3d;54 zG{neZQ%(f!N-0uG5yyNs)&( zkLy(A!`8-`l+`~&nd?4O->@E9oac_La7Tu?Wq?8iGVl>uRJZ;LHQ4SsO=^g`CQ}!5 z7o|fBLT3H-1zBnIoo&;qm4-p{NNn?$r9|EOms_Y!57oqSk0W17$VoQOq>pxc?On{k zrcWqR`oLh_>w+|~x1m85xHw|7QU4)$m)By8cZ+qi|8g4j;36|m=qiw(iMXA zR^ob7k-FGW%CzjkMaL|+vLaDTz^>yULz8|$FmW&xJ*@!oUL?P{xJ5nQ8941WFNbJD zgfz0tA(6Y&xei(qw$v={3;9`Sw*0QHwt?Ce;R(vSH1hFJNVk72dU-rH&Timv)*P`7UY z$KkT!S!Q1_>WS`t=Mq6$X_hbCfdwpRAiM1$N-+m+(v);e(vY z1@4lvh0Yl!crwAV#Y)|z)WL4$Ir2la1gHLIn3xI$M~>PuJ5W<@oP1m|z^&}(j>I(K zyeXO)+^k`4#VY%uX6}x@x*dNAi9SBw>ps*zqi(x?qc62qLV7vjM`|`xLOPun)LiFzm-NSGPZcY# zdsOriWJ_CBM)pq7e(ROxXe_vcVVti9am0 zb0twns|xQ;f3?+{s&Hzb1fG7#JSO>IAIP&v7JnI7Y~!>2_#Z2NkNyAKf9(I?{r+F~ zo&7JXDY^0VvXLj>ILxgXc@u`1&mZU!i`Jb)RwL3HEbm1`GE{_ln$L}&#$DdWI(X~73MJIHv z(?_I=xzk6fMC(+ByvJjJKxm6=cGepC5uTMoNIq#Zx+ zex}C1`Y9)7z_NcwvC%K2;px>0&lJCOcCxK>i|u4Ddd0W8spb^ULLfi_Z1@UFBot z5167`qKB$3mDjx1yy#LsbF@?abIXTug_|D0OawoEgmw%6fN=e`ZqdNp(w4eiLcVjK zF7nT{=O-E;gQLTI@Xw_AS}ib|KR$Ms9M`}j_q7A-pKq79L$}dy-EvKa4L>XMM<{LL z<*zSfQ#hHVj*n9LH=4KkybBb$B(;C@@%cvNsNrhG^d=vg zy)Ueo?kiiL9H7#siz)f>hCy$ZhJ|%+E@f!mNV*syikTU<399H0~h5UHOli6wxKCZK@agGrNa0h`VG%X|ikitUf|@uaojzFMebZr4$pltMsrpY=xFa1F zK~1bqhX*Ju&A1PbXm8@hbht?2N7Lax3jZM;E><{}4);~~*XeLCg)d8o3lzRE9nM$y z^mI5+;ZxFK5$42kgc*p_UN-~rcC=GIaGw&jPwbn@4-GMhe+Dj};7x0KRm(tV6iXMF z!oR0*dOd6YR$&GaD_?WJox|GD%#dvUWYhrq9&mATRGF zF6D*~@4hD6B|j|cW!gDWd9gR)PDwCU(N7mamYL51Znh>vgTPALhm50nX^npv!~*L{ zW)L;+KRote@l3w$iMc=D|1n?nOKbAxRhjGaOw+FSf+BZcpSgbLSf93Te|;)o*5@j} zGkaK{+Yd1PxtMy>{7E>Y+bsD*5pN!vDcrS0$EKC@KiG2W(1Pe7_5VV!+n^iY z9iT@LUd)v``H;qce*^c40_17J{cS&vRQS)x%YRyA;9X{0+*i@JcEU^g)+3Cwfv0SG z$5b>Pm$JOc60-Bf&es#~`#1A-_WfqQK2Bj<4yoVS@a}D0Uo&rKX%^2@% z4E6QaD1Hg$FYRgaEmQav!+$#AIn0OWAR5l|*>4ZQR%Bb(d?`Q1*7qCAXSP33@g)D) zf_Igw|G@B9i|;vq{5SYMbEd)fPbk!h?*boy-RZ+41%f}Zzw&-Be4FzyB#PsIYCzz~ zTFwAse>7};b*xl%dg1s# zqfpUg;gSKyO5ttLa9AtPC6;g~U%u#GIv%^ra`0u*`DjA(*=qCaSK`y9r4IO`T64GV zWsb#Bga$1 zX7u}}G8*g7dv)~hWBT_D@yWt3jx+sRt{gzL9*7LIH)Dv98aD&4QtyAk!21gsDa6Y+ z?`LM+XhQZh@Se`~*lCSl|9MfD^Dj`L$#;r>r!dyzhCk3jZX9w)e1~!I!?d z2~pM56EB~r^hhfGI8~%qW43mN~y| zG0ohfx;pn8pyu>nf|_2ueGG@?WelBlMkOJ2_~>B~*}!%AH8{u zMJoMilYSD4#>6C>-f=nU&!p1tH0c*|WSa=v^w*R=Bb9!YNxwkp{cQT9N{^<}&o=2; z=w~JJYi z+1&dkn|hgqSzc;_ImXpC{S`a`M-P#;Oz?b%9ALxVEr1fypXEYcpgQ4!B-A6{SBD@o-5q+V)FTP^>pR$ zmC7%l^}&};)c8HjIfy-H?Um{#f2BfEx5;7tqTZ$Z=WzB$b4|~PkkZ8hbKlY{_oM&l zN9Vr^I9c8g{OFtg=)6}Ml`PNkqouwF2L-%G*^B@A{LgbMnZ=1W$dOv_cm4vnNBa)Q zj9b#+D}|ab$;a6-%a_=TQb7?qbC3U8Trpr{(DpTccY&Vlbtpfy^1dQMPsaQ z=OcaA{qWBD*_H0rL^b8$BZ=vzjDcHx#R~~;Go_-%i2Ya)XmYrkLd+#Qi`o(&*{VZX zSyuahMQ3=oc649-7QuEnIpA}}oQbpc0X}Tj+zsgJbP>s^-u<| zbRBwbjPe>=c;EBKX5nPv`Sp~`i*uZ~9L#~xZjcSuDMoK$r1ip2XddzC9ix6tP3`&pWUBFw>skl(9|1qI^*f{`ZUFgR_???;B&|*3NgS)hbgJEd24#1?f!~(J65Fl zjn!}E&cDMhkSQtqxD0<7(hr>L_}U!S^~VH+f5Bt>Pi@i{nEq=_z0$@1W&df10sR#%eY^k7 zrvFaEXdu^VJHCH~icsufgZqCjGHqKwEgUsQuL+&f@0u%v@sUZPA8J*Q2OgpmnTFR= zmmrTCQGc$cwiZ&QmO#qra3pqAhnR@+O^|I)c~}L1C#$(&igU--Wb@qu#hnk?IuY|H zbJjT*`Aq1($CJ|=>_KX7=XkdxL!Kt|l9|V`+>N(?=ejxHuA39CG3#cb$>^_}D_Au+ z)$c`8XRFBDvF5wAuDCsLfrdO@-tC__r_*U-a7^Nui#2%uJR8_nVb;eo3^PIZzNB^h zK4blqyV;EQmt*aCBj?Yw`5&2^ zyU*D98ze#V_e{cL5+@M?FLr-k-eB6pUi9-kugq_-FAe_EHu$99ps{1u!k{4$9*t+F z#yq8eDnHrOHzc(hkMKU0H3<{!a4PMiO6@{xp<+{C>Kw0h3n%A#7q8PpvOO zY4`j~;+po*(cN`|edy-NnEl=`<^niF8SZy1EKQN2q$mk39WB2<%dEG3 zDBtl)YJ3>)Pj?tS#8bBVj-Qi!U*`OH{w};wu26K7kB?a4^#E#knUqxf#6pniia zEce(y?mygWY*yu7Bs$f%tkvsKoeQvc4fCOPX11LO{n@l)2Hv=?!ujojB&M24PQKhn zTj*qIOT_*2LOzUu(5!>>J^-kb@DgAoIPi9Zry~j3owFQ;J}B4lPG{7dRR4W_PPofH zdJt422E>B)uq|2HQS>{!;M2Lit&yYhFk8_I#{Dx~8U{eS*YodN8RcZ*hldzpr~w$Q z{*3YccKyet>(BX*^=GU8e>`UEulrv0zZUC+zu-UCpQHNE^y@$3d)0qgy8fd7Sii&# zZ{wpD{@Dlbh99|Gs`%Cb%(=yO;1s-`w3~UcI(kAgqK|QK13Ag^emWlSN`Ay%iufNz z#QtDUBv;ogV;txD)i92EdxX>X<7dXPo8YYS;XDX9jXrMA@cqKC_?KIacP5>N`9R{o z-sd!|umSrPV5^^^CmmoR#HNf*p#MGn0me?> zKR7UYm~->VHpDYzPD2ixJW`5=9q2R`m$AibD4qsH)~!Rx-Qunv;YW=~K4X$n!BFg0 zo0SNWJdd}VjVi{{q`G&oM85xv7LO~)Z1E1m>fzVI;(;2+|E~5w9-CSFNv8H%P(=OzNAMLd%dCGne7SQx zEWUR9Q22TX&0Y#$w-EDR;Om>8WVSfgw3vaf0n}c<^Kj>8-3JJ{n|VXkX*g+UXOp4$ znD)xjWxO;qyCau(qvWDsH5c;jCAQo{XG!pyi+k^0%~i8M>Q3_2N$1%iyg7PB3xBaP z9*bsmipTccM08h#ULnBEX*zZv8#|ylGm^L4_fO?6z?Hxin`|myo_X?s#>Q^Z50B7J zK7I}YD1j+k%-pw+%b}syM4D68JRS?bhNEtg&#nhT=*5JtIE&;50v; zybrgrFTe-?oC;n!uOKj_ou9Kd@CX($UhM?u%8h;a+1!Wdu^WJF@_2RU$_%1Wo2<5W}8l`Hy?x^q6&5j7dFo+OwCC%s183e~xkI(NRo*UD8?K8O4(L&Zgc ziFPNq@iA#GKV#eZsa{Ur`Lu8;?eAQvykuIL!?3Ib`73+zv2!`_T_o=klW`d_b#oqH zWBIyNq2=3;Vwa~(DwJqsWICwM=vY?#n;L=R4M;A6WEEfo2hHM zleTj^Kl*g0erm$2sBt2V;2f83PW?=CZSp+&w2O=&m?AjfShcQoQc$WNg5SGnW5gff^Rm-*Z93)J^TAI44tGI1e6 z!DzZ8kg5g6oBGhtq%{U6I;dVwLisjUy;P0PrA&>l+%B1Pc)bm_iN{gmrR=T z#0*o0x9HeHQ-M~Z9%q2YX)#6uJf6NScCX>D#sbV;f3_byyOSTM7_j#`f&$V>k?YmB zw{wT)aGo7F4C-aeyX)hcebUcDf(Fzj}|g+ABMZlFrx`Q?UO-I_Y=W@o_e*Spag~$ zX-VM@)lyh!R+^q(yk~k^#d7@5^z;JJ)3aEsyVKJlEyVrbrl;HdRch(!HZ8XAOHa@L zkM#6YEy_-M`l*)f|0X?!jI5$Kw5AI^h5lFyD#~g|iAbm+sLn)@kjd|L($BH)iL}D{ zELENODLvmv7DHFZZiH$qQb=@l&-7G0@Ba)v6-C@5Jryl9^i+U#($k%yzbT^XlTgb9 zp{j-kLs~^tp`Gx{$q;T4Q&CqDR%j_5U*J<$XsIZx#sYUOkXO zT64~SA^raH2bt3EIMaxc=Q}r%+D`fpNaeLTjSD!BOKm9|o+seT=fvre`Y89Q&8J?a z*BPbYJs0{v`Y7$^9`9|S_V=1RqGfo3_H^60*&_a+z25S3I-K{!TG(3{`8$uy zR{rK)v?qym8m3|Uz%60F`$0G1K4#t@3)a7LICo;Xz?Upt?F-^F{syIXuHF(tN9{gS z+)f3Nc;Duri@+s&gpj)(J{aoujA6d++NBBS37=`ZTak&oJ!Y6*B=DK2xEQhPrRX~k z{<6jQh2~1#{CSN137+ZC&cUtGAx!ow<|rgF3PLNfJ{83xwBmkI*LYvx@7xBY@@J>= zSEP0VEF4?Ih>RLakppdPfr)kcYwKX_#fCbQ^NB?euQnFJ-++2btC@FqCbAMkzX zF!McCm8?XpG^JPa9+aws2N7{E8+jYSZza!I5Vb<> z79U7~wW&c{6t@( z=c1aVe6CMOK23bAB<%yHeqxfow2{uvj}#|@Dj}LW){xPN-3n93SIQ_n5-ri2HsLKF zn-262ndjz|zxTIOm7S9j=;dTlcAWn7N894(r#qp zasf&Z80V?=(FfxFo&!Wy19&{AxI*bh5TC3*O>7q^ng`l9Xm?;nY^l@#!Qxt#VL)1l z4>2H+ZE=Rw7J#L!p2O*PxKjhQUjdHYI!R zqmMQEd6(=vwS&?&Kz*do>}Kc?U3t%RrFTJ9{hT5tY*3^}38CMP48P!nU&=EGMq0q= zLEryU{j>(SpnE-;vLqGV|^hcakxRWg<2-7xm zidrI{a92$pvz3|rjKwoag!!cxwEURGB!GwyPF$+E1(aOEhc>d>sWN3@q^3=y(~!Bv^F}E;mj9ku~fgWkOVn+{Aq29`Gic9*6D{RWJ|#7P^Jxh zUHTsN{z_kCKUbWl)1_JrV?m_pl_WsafJ}DhbRI zyP#jyPS1;L&DRvZX7Yt`G@T~!B<)VBoFx>qtfS_7n2wl`zX5aS2D!bP+PW?6aNpIp zwtVhfpFO4aPs0Oi%*JYjyGonCTJn6)E!HyczIUuh5Tec&S~r`z_=t90x)064drm`n zL53_69@m!I+jVZ|d_g6A_xIn}_4iw~g2+$Tis!?tt-kMMG|4Gmty2oatMAF=)mg+k z4Sy^#yc#C$$@OIabJVfrm1+OTBy6hzP0k66A4l5|kcr1dHuGVC2K6to2v zD=uTGzN6|Obr2qSr>P2VIiHmW^)r(G&K@`2FMci_i?9yyMyY5hykXUsn8ck&k1>BU znS~g_p~GynC;_yrlVM0(Dm5Ei18S;Gg`t{8=`;B)8Zs-M4^(2(IFU&XRpGBb@7}B; zhUZQe8Q=N7!Z2b(g!nO9HbdZrDAHg8;+SLwj4mu;Cy}7c(oa>eLqDQe6F)JS?@gGE zp205Yv2)4~= z(o;zK%6Zb`PEqrhAILzPjoix3B#egR(j6FyvvR!Q$`cm}G;LbPLLM*un0|^O%-7H} zsy?W8kIXpR0UWD6GUF`4i_)U*V~qw9G~8QU3yD$mI{kb_g@%Z0Om>RIQ$IgO(`I<< z&K7}WG?Ii#+M=-Oo6mMvZXQNYdaEafi%z7iiPER4_Q?{ELOy1<^0i%@V!Ik&DUmb9 zDJ?SwLF$A>v$%-i&8D%PQl0Mn7mYA8QiDu;bOKC(Vuo}cS&%G*>}v8DsY1xCW_nK) z$CWTJiP5ke58vLC`9F0GDc7P8Q~7~Zn+9hV&+WUoU1&`x&iNJ zlzz}`tCUT0*wnX(hwp2~Qb&RgzO6j%rh`aOv<{*Xa-FFwg|MkByQyLkmao)Fa6&mr zfE^GK({b=lzNJ(w98-Y-3V~ASRZ&t`D0QiU5t=h~qk+*Ntm9*ftUh$Zy-+ABW#x2O z21#^>q|IlFYYlL#2fj|8VNTD!Bgn%-ntZP>{H{LqDN=^u{d@$|lLBVAs0_-}@jmgR zM--XtGi^nO)~hk6Lu)L=kUFb#r`ifek0>F2K1FiQBGEpHt@JZ(i8d42ZmY>1Yzv)p z7Oi%)Q)v8IY6puyKf@um)IyRXXO&3AHB!ra2qoVkwHStb({dEBNG;;Al3K(|ord21 z6`D~jPMsDWmifYi9AR`SGE%}rpv8zQ2oP!I@b{M;-k6)I#OSuBQ(qvxfX*XdKR7Kv z%%sake(07dKWKemW^MQSUE~K1(VpaohktM7hZfTR@5&F4{(s)*Gt8O$|9#+V=D3eR z&y0s^*m&lWJqDbcimAxRncC;44hA7atjqL1----YwY>Jb_W95Z!_FoThRT{fy4~n& z>kfSc;`DAG@>Qb6tG!N_jXyk)_04Vq7Wg`ga61&h)MXU_m57A49{A1YW<_h)Z?pk0 zGy1f%#}Ot^di&qggxNvTp6V5)*;)9_-PC0H(f?xaT;QXsuKk}0NeCD{!6r&u)U=H) z@uC+LEmUbUFwuz(8U++vZG#|SOAFSdr7cP@NzJ+AC~f_>w%6PG@3pP>)?RGuAFV~n z@JIkr2^v7-BRs?zA`f{6B$@yBxA&RJB!Ggo-rHOA`DD&H`|PtHYp=atd#|<4nj3+c zNR}qE83^%jS=n0hc*|~ZqSbufDK*1Wy$pXs0U=K#UueP2ax>kT1tIY*Y5_LzI=(X& z0HluuKiQlm)?CgjmGScE}kmfFbRX zQ6@=`lgy*^wg$c2r`EouJIQjEhjh_Dsq#k3V3^ehh7HnfO)ZQakGm*Q1HrEVF|EbG z0C9o@+x6G8JR5)+iD_cu6v+?615<&?(NX{_12h;4bY&kmO;u%9t4H3{lCcr4Y`I7> zRFBMtj8efH16w2Mn6+GM7D1k)9TFl8L-1;@xbS;FF{rN=Pe1n?df?R}3uREoKmt%s zm-=79P$04aW?6M^mLM}p@(NH#$Cm;-UkA9-hM6)}O%gyxk_}VUpQJ<-my+FU1o(zhxobKeDgf@e@h*lB;5ex#AvDcUwXjP{J+=0(`c#r zS5y6$teW3`Y&G9-m^(IEHD63c46}i&QSNRk92eHH8j(3?sXia zkhIb_km}T4N)lH3ZqBVyKY9F*wTNr&^g3ZDX{c}i5w4F98)4G3)$gL1gbjf8)gE^G zzf%97&F;Sc$#!}XxZ$S}OS6K-;EEJ$K+;aHQ)CM4JOZq947Zka`ZgYAUFbafwjXM8cAi{iuHxXH)wl&Y*_tUEc%L~z z@A(q(xbuvl$=m`5@N`u}8l>;GNS~ghg;OcC(pqV*QQ9ev-5i$C!*(HaGUZz)A!cJa z1U#Sb5jAd>x&!xz`Y?%ZpZ!@T@+bO@10$n-s1V#&(jfnB@5gPZ%bT znr>|5Q)EOid>d&}h8RngQFAS8MhGxN1HGktQo$HN;41yPMeRO_NQkt=lQ9Hq0mSe| zE#e?H(Nt|V>NLg#Mo%Vs0f278nym2Ac~~FyX63edmX#X|!W&6WE&#Kb;tdEFt)Nt> z0K*nQSZg4llC7#qHXze>1MZeW31(^pOCJ0iNsta3;T$qI@dMitihCr+0tq1wenD#K+(NMEMU|vS(cq@~twUHcVX--nyG;w0v zXymq52{P+U{me2`m$n_y$~B2>W*fpZ)CT(JwNR4wG@*$0TG4k0Lk&GxMV_bzLNm*} zo2KfmokMk~*GNS68`E_y33~mP$`G^f=;9$h#QLbpO{bh`&+=Yd#*BnXH=S15NLr13 ziLP59w1P*7uH;g>+Sm%{)GtcWQigWG*==?PQmyow6&|N`jjhX+!q@5`=+J7$N+ZJ< z86Z+9xI9e;hgPQV%udy%X4_F?^joDz%-m?ngs8+U(g3_N02^a%OwPM$5`xV4nw_l) zLfR^M?0&=DZMCM&&NO3S^9*m69vkRCZ^SLTy3|C0tVQ zppKfk&P?V}Jy2fzl|{Y|K9z0K7%v5BVYk|A#)9h2T3vE-wrbKE5YcPe<-KrPMc7-# zcWm333+g15GOW@B`AVgm5o(1?cvWoWB|Vxc{e!oLmNB=e_mJ7$+jyyb)6vwr2 z$it0mSO`QIA8m#4Gl{f&4C_?`xa!=IPq0?3S8Y5<7?%iWgz*M$K3HMA{jtQF+g-*A znvlk|&%>^{tt1q~5h8gwqxi3}n^k$WT5gsgfln+8`_jRk7`4EpXKj={U2^W1KZhx^G^1&goSLEC=Rp8OqO@q z88hMs5~8hPY>2rxma-N^KTS0W!^KQkaeuorhMS%{WA@jX5@3Cu`P$UFs6^0#z14uAsFoJ1{rZX8SG|CfHLMg+2|%Q;f-m`FjiwnVaJJ)_#lCX zIUopeE90Dz(Iv=oYe=NAnqdv0?xYdTE(^V%Ml{Fsa7+rFw$}oRx>OeYxQUrXp9UF9kxQcv7eci$pqAGKQnsDK1vro zxArrbg=arA>viJu$FiR>QoQVCKQrRM@!HR%v6)>l(t(opGcW|OOIwf%z-+3ZO#q0> zB$H$Q5<{7#XEPX938J$Y(aK4M?bAsCOFWFdAqJIaMwvh77Sw1KOwSysD|jfNOj2`i zR#kw(Y>Of5O!j6Bm{m>Q{5S8wI%Z60a5)JQ(?Ow%%odWVt>T%aRaey^joS@nW>3t$ zh1HNz)d3?m#wJMMjqQ-h9OWC(b0Y4=#QUoGCwk%fQ zC?cqVnY4zVo7?n_b{(KV%y6f zE#W`0gbl66AMH~4qg``C{%E6_wD0ae(c2$QO#euKG($F$?r0E|w<%kGZE{C*Iy>LV z8%^wA3k@w8TFm;GXWfHUn^hHjCz$7AcAoEqEMJDS_H;mFx1QPGVD|n@LXk~zKQoqi z!!43D20OY(a=IPR8mYuOph3*BmdW@A_Y;|76KoF-3gtFzA6|zM%$m7m6_8t>CG%3H z4I`C-N)B_-do7iCt4syFmgAMwn@JE|Y*f%eX;TtHI+u8ED^?mYerq>Ujx1Pa53;sC z!W=1cFYvRPiL@8khhd;1&F}1qhG~OcNAwH@->wlN>R9Vx=WcZlW5F~UW?2_r47OiZ zj9_o2^@fmzai$b>o6YWIl+|cjBdwK6$i7Br5;h?i3LRWQsw}iOYsGXXJ`&~Q2k zI@bzQi69h@RIc$vlcU(?<=$nQVdxywr**w z-^DF$&IjX`R`suzwi#M&-O}#hxT>TY_5Qh~o#fSI3H7{)s3_|i34N&n8f|Fm?^5+8 z8BCnoY3NnQ>t8VZdt%QYlz+jB6V{uUVX6BI`h#a?-@(wH>FJ5|;v@DQl&9oO>^m^N z0hIgS;a{+Owjge`sIBJSYEhe+o1PX`u1O|yp61|@{soWN5{wr0pze|Dk;(oi`WJY{ zbI}_l=}mGIkP*g^32%`=mP%uQLdedAWKA<07_n2b<4j8%g{KP|W+7vmzUBb~tX96A^J15u>L!cP zeA$0sp+S$0ON3e4*A5#%E=x4bmmX^~kK7O7Mp)&I4+6Rq6(bjju~4qmC@KRY@;WdK z7qer^?gLQ6)N3^@Isg-qsZP9&+QoFt_7`@Idaee5ie*2sAu^y{z<#ugIN@eM{=^ED z20@z<%sN@p?LaC;s@DPEYs4#7C$}m}nVF9ITfx6E&TFrdnU(axtR14tz|5@DgMQMW zR(9~NktS8VVmuDiEOeAMy?Qvgy0r@?XZ#Ej?g(_DosV!k025@iFgtm1J1`Ci-M$C7 z9nePYE@3YuWy_!p+vf2D@jZC<*h-dRL3b=a()YlreU7OSTGYb>fMbNLG4c`)5l(W^ z#2&uCQrEd}L8>D1`6r01#U_5^jLud5=~lgobz;^%#;boteL2Rfq3~qNQHMWR({96m z*?z?q5XXcTXyfDu+k*f4xz~be>pZ!{#Phq>e@&^|rLcMgG}||hNI(+>BAa`?utg3W}@hwN64Yi_)W+mr}jMLgv4ol8HG-*&T1go)}O|h z2wV?*WM4d#`HM0#*NnQFOPZ@pC4AJB`6oT|M|iY{ZsjbNc=U&r2jZbKHk00z`69nm zomTUPWPDP8Ch0oo0#mQ;yrzPW)l`5{tytvLjsT?|{dd{dcU%)+774?U& zjL$pRMH%0DnXtJkOIf4$56epP@>dZDnt;wk87mE4GjtE6DJ$p%qPn>vSHIU3l!h)P z?$~(D9c)=DkX>h}Q-m8Efx(>Gk5Ol^W=`P*AC3zol$%rQ zn&&(3Q*Ppk-4+bvP7!ps#n*7Yw<4Q;UBL{-0+|bt9 zc?4_b_$D`VInNxcRj2Swp-T#*Hvl@Jy~ZgSp3JGkxSkfAw@jnj^UUmEXbuNR((Q^; z#S^7@KcS?jXdB~3YGa`A#?z*{m4y`?HAKhp zJG`%0xQPxi`JLMFyw*2aPHic-(FZ^Cc081;c!k3(jw~e1BEGy&nOK6~9zfW@easSu z`g4ESACDD~4Au>zd@9%(&%flE9AstcRVc7{{{ML{hggh_ez(aaK1QO3gb<)<^l(ZU zFdjtQ)KxiY?YTxCkLREIEG3M{s5)DLNb%DpZ0&Ql(8^5!eUP*8g_^dx{gyD8lm-@` zezS>}_fqb@xXXLWt%&CbC{npKL_29PNA<-n;TjBQ{;*h4y$IYD+pUO$;mm3;VQ8#{ z1V5h@N1~??B#%rPu}x?~%!|*JG7p^EZ>!FlQ8|~JrwKeYWzOdnu+tQ&o5lIxI>8f| z7H2#6~9=>{nf?aSo$k8E`6 z3YdlJ$U}3TI)ykFG&%0Ens4gP*Sk4|*T?fGtTf#%ZYoLBKvB=#C-E{!&|X$8e8EUt zMp^iK*=6Aw=>wloTT4S?VH0Fov%r#?w*Igz-IBw`v}IOf|~X^o~Wbo8T7C(5d805zRj1&OX%;tRTwpsZIq z#gjoj2MB;N8VMS(m;TxYfP1yy;R|PBx=xs#!R;meo!Ti}pJEFc-|+F1YA^WSN3}9u z>hNfC^z87Abk2GDR<>g8f82D$eCtb8#YeS$^-;}|+_I6|s-BO<849~^8oc@_=l(@& zPXXg!gFRcc+TH}5LEL!$X6^{N1yyFMUi`biAmaZGD-C$ zsZCFa;_Fc2{C+EFQB6lim6-x2owmjE-%?9ScWO7<#uV5}|AS({7yW78#Fp|lp8sP_ zoDuQ-rC=0QuDeNb(Hj;2RkdDA76r9hR9Mevf5weJZBOub%%LXb3!nREF0^W*Ms+&L ze=(o4jgkA43h&?&hglTp*_8@EN6EaS!nLL_dBW z7k&lZ`wQ>WmGihcrUozm|KO>5B;P%t-W7VBemLk8)@D|JKCP-bcwd)!W#|c)PgTe3>uckIryQ?DYB#WP4Z5xw`mb znaG|@oM>#{Az>Ud{EcNfRD3h|CQSL6nF*sl_Eps?OesGJOgR@Uwz>aIZs0KWVuQRF z=w)v5<^8-Q8zk&UrqDdE(10zpeR87ExBK(m28+ONkV-vKB`r5t`wH3BmXqygTauqG zQ=b1z9z*qF=PC~U!o4)-$6qmJJgE2cOc~88!!VD&rp4aeUUG7}nev7-n^~pVLY#9= z5T;e-NA0n%dpxn`MI-5gm zCK(%^lZ+Y&)v4XWgMU9wO6R<-Q09b-h)j3!1Bzzu)Lsm=E=8y^vm9nHm@}G7QHb;${mZEY zdTz2WdFJqUi~71p?8~8`qo31E9A|TQ;kFAA47<;1&NS&pICv=Csk@hUi7wtcq~r8ZQaUW!jxn;zWxx+LBulf|3=Xx`tUZ|HSA|9iG%U3?6D zw!+0voge-9_n{gWpS=a~+NnF&ii~%D?SRshP>&9P-GVx;BSWf)kQ$TT!*v@>3 z6Xo^Sl-c3kMVI~tv2z>r!}dRV!H;2?I&9f{uDQn(;bJ$~#9C8AFqHq%;S8vIhXm8u zXz{WA8np}lo$nW_yza&@56yfEWxjrav;$B}Ba;%_J(r1Cb&;8fH)b&r=f^%y5qAD= z{7qI`tW2rhC7St;8aFQbDI~<`SH8~CooU5%b;>7+g&Z1no2e&WSrq!|oY$m- z1WHGas9Mhr!th*ESnyxSCv6` z$;fBs{3IB9+{_pNKO4?^*|6=yT2uNLy5yfVCi(IFgRl&$)kWo=uX63T3bXCu^X-Sa@L~SSVd}sg%3$)k>*GIa zL+JkU4Pfp=ywo3)!N4^bdcx}s1Ow!2e=r3*68Kg#s#2d-_K!Vduqn`e9;WcICZ0L> zJ2mk=PWbbT2$XvbJZxTk_TVYYoLYi2aQ|K1-zCEkuXEwZ^Wu5u-^A-D%Lc^w8@W1l|IcQ5m{*)f7S8OtL2Vuwxp7(L&Ux{Va-H)nk`GbDym;=LByX4(e{#^2 zWf0eJ=BHHhy!e{cH>z8mJdyZ2^-kTIU(>|VD4DlYWKDd)cYaBhKdQ@L62QBWv78sb^6nd#Rege2&E%%m_Gf-BSlnj6ZTzxVE3LnL zlA7~h*O)>FB?{H~bD8&&EfwAa)bSMfPX?r^&%N_M+3Wj_6ME+VORx70y`G=$^&IK- zy}FTFf8SouZM~ki^?L5;^}OgyJ2~v$2Ow7`8TH3Ul9vLDam-5oAd#7}5wq z=fg7!GZKOdf^z(MzuQpLalomS^e-LjU%0|kGno1dkkOu!4>a@piujsRbGS?8I27B5 zdE>*5OtGi{7cOEjRnw!CAg+ zEC36-^Rh0^*lE;wOivk){im7nK+hcY3?1w~)6W0Z*rQ#0VbjGb>k7rGJJl4*O+S-z z{;;aw(64OHS}Jp~#<2OUT))?w-|6K6)Vm?b_b76Ov&+I(ca83>&Xg5mMsPAZL%@A2 z7_#28^sG2g#DS=lXp%L{3QBO@yL%JB^1I9Y;mc?{p@>V}SIfeInhXjUTr#ZHCE#)H zxwmnyEYf2&WZ_1pO<6dPMJ=sYmtfPodoD#__{_aAL%(0*0Gr*qxjLuBS;&g6@`cia z;VXR72KZko@m>05h8u~*a-D@M_c-T7oQ12gRdUDEb<6mt=80_V-l?}lSH6yjz7r$- zFW=(~X$bgM)MrV%ttcJ2rs@Gg;VGVVsjsWlXF6CB7}@I7-5_iW(JM0MVB7TtLWLMT zUz391?ke$ZiA2xx?W)=8YwiFjL)?r)cZHHxGSVyo@i})t2Pbyd_-o?6(#d-T+YwSxa>FIC%-sBQI0v@W zB@W>DwDiZtvo$P3g9O-ju3W-tFm>CNd!UBFgM9QlLB4Q}*)rfJ5^4w-|6yx&Q(0K33rn!NOexIM<@&;8yjOoH@PPx@DV?HocwvGMU@J)ktScd?Q<& zdv+kI1NZ_nw3=htnku!686}?(SpQpCQB4otN3pqO7T7biP`tC%AIhrkh1Pu8VF4(9KyL(PHiiQW>M}94sZ~b3aKY>zO09>pEDv(#v1T1 z;N%t$;`QtTerD0|-0Acww}Rf}P6P!-A2Oa7#u?ZOkGde2vXrk*(M@6c*^|`ohBY{suoy z{Se7L5J|kTl0b}bpyUbC2o`7;xP|?_qpx|G8;m< z4MLef=_M|R&_EdpLaFa9p)^^Ngi=Kr9x6I%UWu$85}n*;>11hmv`>?PQ}zOd6aT77 zkS^mI(#L4*I7lNN*3_qu+~?f0-jdCM23P?`5sYuJXTo?Gk2{>jctN+!GNT!VdGD2E zmWHqPiEL^yW#Un3C$l6$JDDp9+NtS~LOYo%yg3@}OjrNB9$!w6*#!izs86@(=zA&X z!>?nkZ%>);K$+UmO;ba?XzI{_3~NUvtOXEO$#G&awMgEUto{_6c!I2U{Tx|+rAGud zUL{!>A|SG=2{2o9bQXQeot_{Hxf9u}W9jPCq47^2gRTX)kt?MB}$E2-m z1dWNQ1Xj2pv8WMA&dl*mWi0vJCtN#T z%6eD12UIAlU@G3!O<9FS6NNv9vI6OD$|~G3l=VwLGn7@dlxIUvo6YQ4Qe8j5ppe0w z*srvBhv4Y0DB6Yn^6nq;9K26sPPHfJQHo%gi|UVvno$UAVchF7;2MwX$4ZC$kCYBq zT`B2sNUC%=xZ6IJkPrW_NB$<{LIrZi<_&AmwZzcAn~eB=L$>DT1j+6<8L9p@LlLVC zLHtIc=kFKFSsEI@G>KQ+OPs+k@vi_pJGc1V74AA`VJAe%ABpBhcI5iqgU-S(5idz} z;8#g_&`^J~WS4W6az9e{CC)kRf$*RKx<_o=pae0tCT_0Vr=%U+O?;Jlb}4BuU!x3= z{<=w5-TS#a=PkX^cI=5SG7=Hx*hBh|R^@0_jtwXa)k=T4q<+vHDPM!fZz+AZNwY=x zogq)#FM0b~z_-y~Uv>whHH3ZAI~!onjryXsCQ?mfm+57?8n86^jgd}YGHIqg&X6?$ z-zIP(tp6Tq|>aBTwj!44QE)6o>gsl9Y1* zB+!}IqR+n}ZU*@WA|Vb@Yw%K*#EJ0 zru}Txcn6*7D6`_xvZLut#VFyH%698ZNpZl_myRwDB=oHl(3hS`=u59#eJLi}#k|CW z-`&^!P~tvg!~p3_uX~d15&Dw8w_XNzQ0FHXhzdMVKr%S@ULa&VNR@tn!(5uYEtY4PK{ul`vQBZ zfn@PihBP7-$n1ps*@3R`@H!}V+Q_$@yAF}D=q=fuWMzApr{Ls>$L90TrTi2&kDcco z`Fw$J#uNWGU3L^c&-t?!!F~#Y1>Hf$*z=7HYx}v$aP%8Ijt;xOVG!IccS3=F#}?|h z#7xQCj8&)#r3w8FUu+BhmGE2n8tvS!pDh@PWEYYZ=Vkc0djJcb-))WT%th(Kk_ShB z8ZyMThSy*~5sxAPNwjbH1BDuUo^Mxk6t;Oz8!wEZ4~<_}S!^t0E%9wEsn7XQAe=MO zAI|x>zd6<%Q|aR8=fwDI1uaJ|fJ-%q0q^8)BKD@iZz+ARlC~;oxk*>s_v_0&dW3;_ zRuXdUWt0=`dJc9+(a-qn13&Wh{7_#bN2n6}^^i!w*QSg{OE7#g@FO_7wIMwLM-PSu z6>8|j`3jK#vxV75^7OG89#6+h?D%-Pbbj%4V+;BQEZOjM`&8h)TSZf^y9qgVNQArG zv4g~xVaKrY>sD~>(t8FzQHof3H)BUmI6@~%$g}?Xt2?b&VC_l4KG>g9nEFgH^(S^R zH}Z3S&A!2-Ops@tdtM|1z{x3k3mSQMh^LeZl5_Wao*1^evX7XNrZD_j%&z7}`4UF~uf zH2XL!XlHZWEO`y)csvYbd46ZXTYmKUvEf0dmbj~B8}morJgW?I*uWCs>fq#c{^rA_ z;X%1%JRF?-9IE0;r7V%uE}?dm5P+Yjy}X$6{Jutia~Ep$-FNX$Yb*nUledqZynpQE zEo`PYb_Fd~u+GDF*==KeugCNA{+-=tGL#cO2M6i>fsr&|?u*RtT;##LGVL1jj30Gt zt)Uqc>9Cch&Vt5LU(&L59$aX@JuXz4g z>eY5euNj}$qi?hAC(ScmEh16cOYYnyX8&$Kie{x#7hmj45Iu8lGc9Gk&-W26vUZ;+ z99y=@uJ_sT)&a}dvi;#pef|k<#6La~I}6u}7GH#vab@QCj^=~@$Tr4g2~?D&z`^bk zKtHg=T^|UsUzJx3b)LUD?!!U7tT3nfkegHJuE7|UTeJd0!XSUxPms%HLI%HY8A#wS zS{?nj^Y+Izt_({at6-XXIW=ts3{|ePpo=ByP)?!2C}+X?;N&LOwtdTklN&Kq`Q7H= z$XA@&&mw4)PHqnRww2Uvcj`XIqmkQw3d)3U*;V2m^8Xo|aT>sOca=?^Q8*|P%?N}i z`o_Ail}6sk@Yi&mIo7%2Ag9k}`u|)&PA}!f0~1ysDfEUhx)$ua#vi`iSL&_<1y`Vff`!quCiqscUOUe3F0ENDmIXn@f$oan909-W|?zES7~HR##2IJFJbF}4a4>uygYQKb48hoFx`U_ek^j)tJsG|AX64xM@X{N#Azca(Q265Y(erMWalcV(C6+F)%2pToCO zNg0>ojoF;-cLuPK&8-}gr$smtK&{Iyiqsr*=03{YAL|pXBhW=m_SP~tT58evKR~Y% zXTci=e>KuM8g{lP@X6#YI3$%iC5Pkrum0a8?w$+o?%>gfPXOCj;`!U|hkSxWIU3yT z0F{BdrEX(vWH;)rI=L6>hF{s6x_xo#e9=z`q92yI-ha(l7#G}fxp*ZU)3+S*Ibodp zHdxr)8QFQ3ugMZYuy`OS31&h=!CQ7cfRV`M?s6ty2E>s9)R~f^H+{gOxe7 zHKVyxtql}ymn2VjodxTB+e@3@1Y1QbVL`#>?ZL^b$|g6K`3{ct?UJ-Feb67C(7{1W zWs_eKHC!`n|5)FavA)(ww2!+yz}EW5g=Gg`iM-yY=Iv9QD|VE!J>S>DJ!lA_G5ajs z9VK;ZtI9bziA_7AfHvKEEYCkRvV@otF8g~u4BHm;H3WT;QeOk7yN>m3sM+bOdJ3vA zFqIXtdKb{Pm2E7Iy?x5>(;WB(R+dvDEID;SNco zSl+hL)lwG9fV?liJUr+NWxjoewfyV|;2OB9J-62xI18?QYPMl8?`9pl zommZk;AiC@_UMkEm49G5uHZzCOb^n1<~EAN=fFtHe6PeV60E)QJp6yp@c#Ly|9jzm z0WeO1_ZNG>yR$yn^*4d{48ePb;H{sPGfo8F{%hGIRkH)(+_=Dw)2ibdtqE?xAEvNP z{JVjhhoCKQIg$fxJWDBc+){Jca?=lEk0A0znpKgFL05j0L2Dgi|Zp? zv$;OXwLjO#wa)J>#CYH=%qwK32qhn;zDF$f2xxo8oX}3b^ESFEM=ADc-xtLGSgvjmi{x1OBuy?{t20oT;o$b~J43 z6WQ2@Riml%Hn#Qccc>qMS>2B~3%}^2YN|cXdTbjK#V1Op*nWp-LMc<baU;?RFNl_``SQ3PRypbD_XUN0x2j*&Z-+9P(%Mjcm+rh^o11 z9a!Z0MZ&eG8PIlQnT$0IcY0|}1j@EF-F%>}OQm*`yD!q#XX@ENHNv1iNMB34E(V94 zJNmp%G+gd?L`Sp9Ch_mn`zPEyIm$P_oe`n!&&VmkS@ulfS+nfb!+@=0R_r1FesxhKY6E5WnH@i@I*F&K@C&qZKAKc`VlV5?Zf-@ zqNuZgO72ZF1wPu>6nH2r(v=mi_36PDId7{6a)Xz{KO5PUUEHt(m~Tq!kcqS3ZU!eY zER2W;RKhs817eQ>N?`XUFl^8fj7x*Q026ydGhJj->#11tW<=08zHozn+B8o)v=?g^ zOZ~raeI&vdzjhG5Cw`j7G}XNgql^(f=EX2vd`E=8i(wb#BbS(Gz@o}Wn z-QyFP>cV&|!p9h;G9b1=o7^5Q17dAbu^$mpE(VAXmOl%RPEZF8O%&uvyrXMdj3tk11-0c%2eY?Z8A2r=tRHTa;7aAIgXN4^uTd2KZXyBnN z(@uUa`9iX{bhHh$+sTAASQiJU`*m29UIP$Q<{%q&M-G)8bkx-YttE9AO)S@%Lr3hF z^q_~kN3myrIuZWXmI;4jKMefsxqt4#-!6RZbX8df0*7--#oUsNF3H~jEbQ(2LV_8r zbt57wpx{Fo7n-*_3uY9KDD}Nm>U&W+Hi++u*NL;SC*82LaN$1%`KUP9hf&hLnIQ?@ z#+ET}rc6wyHh9{^EUxghiP>D?X%qW%eVn;t_FaPwu(T@Vtw@&TYjZ4LYpiAtG>RB4 z5G!O7JnlQdc${DKD#N*_B)n*-hSAUXvFl2Mb{T{9`9S@54+X-DK5It$(PS3riI>Y# z5|fwGhF`=7Zx`3!a+rs2`QEkc&J!)Wi?ZXCJ?!0z{@ihtY#MBuUR?jJ^g#Xhe5Bk$ zt6B8W!3g3qOt1xeG~sY{V!|y?FA3KgFnB=mdpK_s{qx!cItxJFP=}#C|if*hvt$c!qe>rQ%JOybEvonc+=+C_QCfB;ho=(~72>AHB1khY((qyPk2KOPoW*}%;shS7*F7dv(160Aky6JkYnPyQ0A z2IMdopaExDYZ*)P=y2`F4DNMvW#&p>o#QO4*=paeaIIyeJu+P8^EfvM*^P?zm!+r7 z7P!csB5{!mb51>ii);`VNz5l}&z9LwCT;2e`!K|~FR)M%bXQFXxLd~s+^13ZX9aQa zl~GO%VkpNZsq1(zrMOL1D53-Kkn8tEa^lqp>q^`NbwdKi3v(^j6)qGgEHl3o%jFC+ z9Uqp$S<%>GV~eUDKIfSx~pVa*(PWHSUvr z)1qfSy;t!s>i>&Ro+Mw|d^p`DQn8Svc7vKDv;j0IlrEQslUkz-mSSvCkqW6E(*lCAiYL`8yq4LvaUuDv1-KpC|-86lA z%5X>zn|Js+{Df3Np=l`?5XV`aOcMZ6k%1!hN9F;WM1EbG^I@f)rPTF#=dXeqaZ^nh+ z!wkRsqF*MOWGnKw`IjDdIrnHS9IU0B ztzu&6Q)=4}X!px>$@zhTFD1@9OFxko>ii0?^m&k-_Liq z)0_h_oOY_sItQYH`{OS2g3l()+{Rw$1btEa665CG-?__<6Qk$UilR7o-fdC@@v6@s zca8p0$r@)rwL3HhMJUP!Y z%@1e}t&iugcg=*=#mB_Sjin{qaonT!@xjUZmav0bbZx?Q=R3V=-Wu>SN%NNS5bLYD z<|pu}5;|b-zjM8=!XF1-}-XSK!y<2wCyiBRpETGxnCnoen`Z53snp zGiX69lN2)5(y|j6-Esb8doE9D&vCCX8y1q`8IOM58j zMn6XyYvGHg%Y?MZPnRjKz>iVGxg8NSyxDs(+dQNeA^D659x6W=D$ZrQ_L+x{cpuKJ z%0{N@QT|74`2|!p9R^QT>}$yUJ?-FjD7RN98W7I>txd&Tl{v@e4RSk)C{{tYuW3@# zoz=8JtxT;PzO44B(~0r0?all~_Q|-3Hy~eBo@(skG#)1#7E;*_uqWU)U~E*0=KItl zz3iZ-5&whoEFldj{KQ*{-Q}KB9l>&|muiowH zU0(0^-T07g@S!R5YyG^)fxXbr_P_V{&cZ8C!Hc^3Ai)~7Q>gl2cGX-GbEeiDEO2Un z#xOf~ZsrBg1XX&GXYPnl^ivp%79>Jk<<*{dH4f!JF>rMro1Ni2HVgAzLyq%U@UZh( zISWIN6{qu)J=L9kc&a;#Ll@m(2S3G!rn)4SrZKjQY_(%5wQ=7?O==I72Kg`V(qjI44ausY-6?d;rOXx2c=8yXA+!MpN~GH|aflpS5>F0U<3{MmLNeSRnCr=2g}`~hUKe;delif(Rf>A6vWO{84s zvCDFU?%OxB43U=hvjcOpiJtK_K4Hn(DV_X+iHMc{ZAEG`5j$wV>eo7BsoU9IOj+nL z5%7S!*&n(+J35#WN<^Ig7yQ0e5=c4Hm!I?Hp5SY%jU*E&}_QL3EaQ|5v){t;*4N1*J_;?zFV_6)D~E=#BOO^-$CY60_v#bW8D0Z67W=nL=L+ zEqyH~S24Irz&5no9229YinD{44F-9PC$yGEouZ7w_Lqn=I$JT?EWMc!4E@wFEVnas zCDGP!3;b4YcNYhSCgc$wv?}8U;6?9li2ZiXJ_LknwO{aKf%ffSXtCvaeFdhIZ6AZ7 zzbLUR#HfTaOJTqYTU9{lsrVWc$uE$=Rx6W7TXOK;%Pb_#y!@nIe%a7Vy*nMCpn_(S z%9pxe_gt2}G?i8+`a?1Q=1cI0uUI@Y@Y-ScQCZ!7_(S=4ws{N-5$3}+gx@_qR9@g- zJ2+H6)V+3MsJz&{b_9HYscVFU1bsjr`tv}^+p!y;V5`i0o+s{-d=$IdJPRJAoxR(n zeO_tZ=$aVc@Tg4t{>)>&e;qzanO%QA#`nwZ`&WXQ%8NDSXI|%GYIcuMTTUn z(9G+rvP<2)#GkDCjP@GVZlLq@y$ZX54QIt<@Nh8lHn!PxK{K&5BRuP&n zoc{&dN~j=rqe&;v6(mIe%u7Tcu*sT$m@dU>&SPW1*^nwuP?PUxyZ+S1)ZHpEEPUZd z1q>SVhi4LvG3^c3+(r*;|3V3&@8=n*ENRR6^c(}A%4~o$l6yR!OQ_CvA_NBmS@`TUmHG)|Sn=fi*Q^N7cfxOCoc?|bO{#e_IBdV66FsQa zh+z$-VK{nt)U@rHY0=MB?u#p+YuyiN6Q6#YPx%a4AdPH9;~Mq$n`HZl%~o}$OtB+U zqWb*Gb|uKLsNJFb0j~>qYb!JNr~3$!iivV4Sqy~>x^IZUnW&ZutvCP#!s|;FO=7h@|?OaX;6=&Ok3QO8N_}544=gF|K-+%e&HW)+?3!* zij@S_`sud}jN|#Y&lCyV0;OYY2peT$Cfa_n;>LdH@TjcO+L9N|SO~`U$YjS?@TcI{ z{fQXyr7{4Iqn^}|SS2flHN^8rB!`wbhM|%bDL`Fp=EzNKsA>DMWl{dG-XK0>vO| z8i`fyET<|MMbQfaE`nxRUI!x{C?rO1pwKC;Y2!qqwo>P^W&Xyrua<_(eKj4~PR-MN z{!oTfw}>LK`*4;!P9uDf;Gq68((<6q_=)u}tAs#{+em2~eH7fo2>&_D#FBJUr?z zCcgI)ptqJqdoEbRg9J0qFy?3 zS($TLo7q))FZGRS417i{=rS!>%iyv#qqIEvvk@Rt!_XK|(`y?Ou$?rFL{p3AN*2A&>q_b(=d93neWaG;I zT`}U&gK-0)3x?l7E&9gKzK*8NKPo@e{>VQGbS4n%xM1j)R@K2PK?E-J#R38?e$tEc zIA$;lBKsg{&f>i3T3d|Xw;(fZY)(@8ZMt;3`?#rT8;9@mRJF0#d#Jnxe z6~3@(00ez)^uPh)fr;9=O|ic$>Pls~f{*5ke*$L{+(&l7;DuppB`z`mh%SUxUaIM% zb&~Ap!zv1?v65ntBVKt;v;m{L@z7xLBF7%55FA;OR{3?N>-0^cuF(m9+{+T&e*fdL z?hfPpx<`9qfubo&@aG_c27 zgn>gKR5dsdx@}1N&pdf1JnELKv(ln3|6y;uz0PR4?aMv+BEjGH0HI&!;-ZO{#k@Dg z7E%WJDB|e}12r1?( z@wZ@IYj=>;K9#ppMEOPomr*ni=M(pJxNneBOWd|$4Ns{@Ott9D#}0{sZg9jvcSdJ5 z?ziEZ85F|1MTfG%qyIto4MOOjGdwCkRGIlldDxSai8xoGyN;ALwcfh4ap7^Re^95{P?LTW*bpk0NPEDEj~ecE`db*nyMd#8!8W?RftQem=^a7Sf9{+ zF84q7?u)tqj=8Tb9L#4t4#eE5SinOKQO`W+J&v%CtFVykZLxj)9X`@})V31a)`UFp z;-sg(0Vfy(lUfnY~yvC2!Ij%9eg!A z4b@CMK9@vx>1MF$M0>ONsnC}r#8}It!%tUG<=G=p4@~@2Fo<~j=Y3S(z(JxFdpMD2 z)trIe7=KwjteVDJxuv~@_=sPJEqBu^Ll4Fy?=%E4qsr9#NF0%;p0er^#P5 zV@xLC*~%S9w(HCarFkTWysBCwU&|77@g*2nG&D6^;r*fcf{o4Oz8YWK>-@Ow|{WWjqqH&}UBv6AL@||pD zX@Q{ZcWOTYqOdjmluNRmJF9@nB^k~SehCLj zBBxbvIlzfZ$&C6q%sc9@SG&9yW#K7>8Bd*5o>7g!5JDJ+p4?<}Eg+Zk*!Odym)^>m zB}=BN<-eun%!Z8MHEeJ#ccHNJWK2r4zn$O09WLVT^HNnH9zS%04 zzAQIEaQ$D2{WHYJo1ez@U^2wExORVKmYey)I{N-3D3So!%4M0)5Dl;r7 zE2jvQvrh_)B+040O`Qpky0pI-R`ty^Fg)suJTPCDK&#uoWVFV&X|Pw%3{y`5^|WIM zEoMq11hsa*FEj6jEHSBf^YvNZfSWm-bjrTzBvbZO%GN#tb=#64r*6Gafc_?Ux8+Nh zq&q*j5`qjI(_@!%&KiD8k2oQ_WQi-=QF69 z5|C2V@EmtZ_12wWGg~k&=gm~93HL6EZ0cJ-&Ot#wg&nTWW8-oo9euoL`ew)TF89{F znl7L7g95%WN~$6A>>cSKnA!7fBX@mkkDF6Ca#!UA8duw`yC0%kpQ2kNooTu~L^P3e zTU|%*x71=D9@OcK-lnJetN#SWHS_(sNw(iE{l-lVx6S7m`2=Xj<+-vU8zX@= z3rt2BPHgiyX$BP{NXRsBCigN8K#CKl0S>i^S6-hq4O~b~*okJT`0%K?eKk_w6+(qa z)$qVH_{(o;a=CpUHt(t<-6F&=(xdg}QW3I3HRa`IXgbrIbX z2U}|FvlE^=xjeU8$DkR3C-h5^?i9{ZTR0HxMJ|BeUL4QAszT7O%4dFJT_6%`-P*Yq zCEJ5MsoY6=RrNV!2bF7N2c0-Ws9E;ETpVY)@OQ?0qPVmb3p32|Gjp7U*Ph}$Hj^zm71{nsXCL;NZ8P4{ zTjN-9(K5c^4`qP^BTDT@Moifj6l8|%6d0GfjS#_qa%yD{3%J@^ADrA8ysy-^ELikP z6^ePnnC1V9|Eo|UNdG>kR&tA1Bn(o;wd^1~b5mWzckhnpN4Q5!|6^8PdkUV;Z3<=n zD?KEuu_t_$TS`XTO%OREEB}0I>UiSwRXX{~Y>FpZptYO@58!mr6y21TnHDPtnG7D8 z$rycBX}P2&@x{nz7JfgIZq;T# zW=Lyguq-@tJSyINf2c$Zy4Hx*3ADxU{3X-<#_e>UL*DjPUI{#JWdjwy5S-yLd2P_w z5-eI;)iA69j2NUHX~?TY&-B2@IEh}f?GFpdvccWpNXVaFK6FA;(F7{;no?Iqe}hFd z)ZNhjtDeJgDcNYPdns8Yk)6jgLvmSWk0Hs1PI^P~>l<=B6P-#;=zk~VKjk2*vcIdG z{pB-#A{pKOQ*&dm@Nmvt#CEOgaWDU=IY;rIG8@cspjwh}TVaQJ4+knj;j+&hSUzMn zsUo#N{+B6UiyWvvRmSG?;-mxBXPI^4VJoQkK~=0hu^_=vhWFST%@K-)ncarg%>cd3W!r*9TIA=RFnKlpWca+izRHRn@EFe)m+~ zcs^54zb}RN+eY#1`_A?%xLR9i`x!r}_osr?))Tp6;Z@c*>iO_p)&b}^T%!i!GjW7V z6h+AiB)4CrdS$${rXd^K)?w{K)&_QYimaEIb$f6yVZ+q^iv2)`kmC6;=wPbr&r zhv0%^{JlIk5?=LkhcYPPxkCYs$fn$W(SB=kzzA((x7*E^hVL~FHsMFjhIL9fx(ifF z#hxpah2^G!k*(QyK>^bx2HA3B%>ayU|IOW=u0oPx20p0mph>qU`9Pt%_HcWG4$)Z8 z@5x!{Shpt}A8U?ud%`)*b9-uJr+sg?r$OCrPl;E(+@3aT8XB1AID$FTa6`Wpg1HZl z@h+}TW(ZPUol>Cgxjb2@Zyd-J$KR=qSr}o>tSP-;L|B_}b^^Qc=sWCrIB7xMcsMaC zcrzIXCwYiLI@y#iP+@Ci8@gX&8Nh54vBTZLF_3i@qV|5aCL#|pXTghsqF0>-Q8>+R zaU1@h3Ez8WS^@rwi_X(U7+)+jif8#&cusW2O(tAxT_QXxb;%cmu$u;&J?IhR`&HIKOtB&M1KF6!sBT=os3Bku*k#KhH{X4lT>tIMn=(**P5r} zUfX){KdbhYkw;2Yc<>Vd=sMy-sdhs93Y##qP5i{H04gYzMX0{{v zPem&KIZAXP?K$tsf2Q={KSUWjg8wL7*zxh7<;UPZgl2kY{C&^-hmZ|_1@<1vfR>r? zLLLJ;+>-$Tn-m5lxE;ZO4C86@Vm_EyLNK66Hv>YZUGl*)ppG{T0~)aA2nMvMHv_W! z(ae5Eohr_97^Vb;v7(z%MaRQ$sI2g?w$Ho?8i|#$hO!#zjQx9a?mVF`xSt=AQD9a;kN&Afju;vZM0De?ehGR$oDsYXsO8K83$)(^}3h zqw3gmC8%EcH+X9|EaEM$P^6&8C4F&S#5J3116M@~S~jfJ+Km;kM1o{LM)Gk)sznK_ zF(V^8=xSq93GgAIyp|DiwD#n*f*vC5aD+`0O(Y>q9iheBU|A9xa!xr`uq?kTCCiV_ zp<0)P@5)p)o@Q@_j$;JN^2ClKgJqe8kA@6GyFqLMXDN8rk__sR)a3<;BbHgPD=_kH z=MJsMR}M$EI?VZJFK`{fbq!aYhqjt)2jSsXICWnkUk?Ip=rc`;BGxEaiNVRYQ zQ$L6erafoz`Z+$sU9V`PEdGz4WCkZC_DiTQfUzuka1C-@ z&9#Go^?uSNzmVHLw_reMt{wsokxEg zd(mG8EvK9QTH8=>`sSFi5v1e5#4uOwzI^SLZGPK%XVh^ zHDRr>6VH-eR_)v?4;xCGA-p}G*?HLDYJ%DVW{=`}l(w=b-p)_ps}{`@bXIuSgV2JL zk#0(RsYhTHpe=E0qqC7<;<6K1~9gE+xK0Cgf52!Z=;qMPRyPduFV&}J(fAqLt`N^lsAFLh61OH0*`oi3jD2} z6xfrq5_DJ$%%j5}F_hB7VhQg}YO;v5#Ggda!MxK(hw=JS zXD~2s%J%G1(ir-!LMq8{7CalSwdSktRXl4v^{m$J>9HX_NwAGKa9sME!g%zQca8ke z9ytPkAAj+GBmQ~>_?Y&=_l&>cM-wQT6bFyrnD!0`>=Oci_T3TqmYxV~_wgSae;cJB zSRwbQ_?yv=k8-8!``JMIM z_HV`KKWnkEe}5RCUqt2z678+Pei)zsZyujt8&K1e<`;j;0+Qw?Bm0 z){v?hpSW}1JNrYt4;38KAL4K9f0xd}r}4kj;UXXU-`Ne&#!!-C6Zz2pj%^R#DT2LM z@*@AO{&z`b=6{|4-Ik?BY3cmk5$xuD^uL=+B`NyKsC!h~QTC&<$0*?sp)=bO2a5G_ zi1<75_f8mp4A?>-oQ^P&G;@o^k;`Jw+^k9Er9@xSZlH~-uG z?<$`({3iVC_nqIQ_}@8HlHfP;zdK8{9fjZgL-;=!9+cRidc@+7|9_nS9k~DZ?0;uD zPq&uyq5s{7{&(G*J^mj2@6tX0JF|N8zsUdY;6h_rJN1{A_52O}@9v?dRQ~hJU;G2} zpLh25`K$TQdoTVN{&(-rf8KkQAB6v1ZwB?)f4^`3cOC;; zmdb$sH~8Ppe#9`KAKrHa19~_AyP*3#QArhOov@;_xVVc73w3$4a0r)R=;6ZIdaULA z5tFB0sqS5c3Kbp*Jy=-HwT#yTxpEoIr6zus^Mev%g4gWuQBDC#PVMuG5stT>-;I|H z+g~zlJ8pZC1zBk&;jgw$Epc{|O5oN@=KCYP%{w>dab0Sod!dhJ8|lQaGj=UJd$U3f^ym zsQb3zi``yq5-=8VE}`ZaUQ9%p9GWm5xsnM*>& z8%kY1)#*HY`F~}l=|xVV(&=z#<{y>hw7ks!l)?gjqx|FU#k&oZ86o5J=e*oATevy+ zw0@TI)3TDTDyapy%-qfY+a$cL3IN^B+euijhZb%QlhDdrUAK_f*{q)iKE7pB7DG34 zgK{oOCT`B60Zn?bLO*--cBy{UrxIt{Zhg5iOZg)Kr>L^9VybgXTb5G!bvjq;tG7rq zdDLM(+NA;-08hrH+)azX|i@QK-Zh0+GU5zDOyxm%_2Hq+W|13o*Cmi8cR`> zw~q1{a0-2c$4PoLy*#*?9MAA%dfKv4VB5qvJ;ONdH-iX-HMi&h#cbqsm_Lax`G zqDKoKFrzU|aGkkdr5pgk9yX_X1MV4M8jWjC*XvjLsW_nLw=yYdof7FU-QUOE^qsnk z^7UQDS6NTbP#|CMvy;LeF03|{-LhYwKd;ZHH<4}nD?IMWb0_89 zZ@=?9?fXe;f03VxZ7N>9b#8e<1>Mrphm_Vce(|4KX=;C)t!b}nT9Yhk3f&1f?dr(% zZM5i73mT{O!l`_xA~|mF!NLafaeJ-p2YJ^|b=raC!-c!_#!NkD=KThC&Vb5!B3(11 zYQlr`!4=Saa7nF_Rb8cBLD70^(LSlV0f*jp3 zZzwg0m^kfFfY!`O`p9Y5Osp-eHb7|2EF;kwFysziPzNvCycZXk7vt~95oo6h1y#CglauzR>m7jvq@I(Jvm0pI?h@1@ZFh7kuR?{Dr1`t}7wmR|?& z3%HhJyZ0B0k&{nsJ?L64AM%*KFT#5X13@x~v3oU^g){ne*BU$Z7J`H-8o9~oRpCY{ zMN+^u_H2gn<>Zh=QBFq!T;<+h5M4Kmcse!93Id^=!Wd_w#9^}u<{5BT!DjK?S)XLE z^y%`jj_v74uvA_z3;Lq%KkVtxYUP=z;8trui9DmQ0LURaSX%Oo8i%Cvu+1Y#N}hRy zN69lod6qn*^QE|K;9}&N_5Bj^%o>uM+8H{lxR*Th)^DslgD9i9bM~;`W|8N_Wtv@J zT|%buCXX}ABsN0dkx+(9&@l;~SW_vcVpEpbES2I@Hl-nvQfyMha?88rk$01C1g9SI zjUW~D8G^IO%KikP151nYl&@PRmyQ)k9zkBWUU1Ut*47hKARPuOVYN(_b`Sl8^a& z5HfmjxpFJ_n|4S!*TG)KTb{WGC~tO(<`_X#?X|gwZ8Ai*fZ37V@|r)Wb9Diu_eRHBI_aH2s`KyePmLJ%v13F3eTbEBNz-iobSTl==W zt(~p4)mJSJ1W*Ew0mUf}IOiHID9EI6zu$lDb8Zrbj_)@Nj*TT@>(SWQ>sU{Lkw5f56Ytx_IZrNB?oAT;nPN>VRdO-ZyNSUs(>Jj@m#mzjfcsQYT)`bsB6 zMpl$O*CgYHh-BnA6(V+u=;6~HpMui7LV5| zy;?|^t{E|WwQ6jxl}y?cdO>>E88GBiNNZvWh6~fcFwBx-@D9mf6)>S^`irJtx>aYh z0Ahd_1HjPYN$AuBw6>_s6M%PhS0gi` z84dGg63u);7y`;6hezq?bc?EA5Fo1E6u37!R(=Fc85F^?CSX|Gk>T6=gx7Z_q+|p) zMP}>t7rnlfB3IgASlDE(FME9_u2)+&O=f7eY5`8s+Mn{8z--wVMH~6NuI|8bghrlB z)3kvb;}^;y&uC_0D6ZEKDmJc-Ga91UYU`8yam{EIZgCJG+14H8M@6D<;6fs!pY-lI z^-g0GpD>zbiSy(TT;a9KAZ3(ZtN4mrtQsPXE!Uq{g(|a8G`d!GJw%GEE3?X&zi99> z3VL3Nky7UPN>V!j%L=|;g&mF!UGG3?VR+${2n$Cy`B04DEswRa( zo13@P;uaVbr%+~uZ}x1nKOE@eFYzIABm zIQ*|0veG0CLucCV7OmOMhBa%5^lL@4m(U)1X+cvP`4&H~wgtOCc z_^94*XscIRP97>vuQOSY@{MdiB>oerZJ`cW&Cs^z&a|X8EXg%!pyq;FvzC`~bsTS? zIipN5maM6HPIZX|ZAHEr&)O=dD*&btOM!z4Ew#^XGUl8! zs1wl%lXykONDlY14>WkhD8pFJt2`wPMk8VjI3B`bF&c4o4at0Euxa@Rx8sm=9mKAX zLOxx-Oy?|ACqnZ;A~5ojG1OI>hF&ILOap0xWr3RQxm)klRG2~rQr(<*+k3x5vJ~za zbnv#KdS;lpz;C(6G_7jkIYuMu|WZ z<4hgHlSIb&3FnR}n~pL%@m&(8BcAd0g0>Z|NT{Z3Cb2yDvr>OV4^GA1E?s20q`R|6 zzy|py0-YmI=z)fq4cSwq@$~ct%8WY$6q+gnHpgHm=BxeHnhoptOFV6rK;aKcwxp%~ z*)CaOR*EUdZds9^cK|7Uco48)CI-3*5CCZl7Qv?5~ zmi(N)!uh_b7&VVVj9dP2a6ws!ZmJQwO~Zw<&`b%ODiWUF?Dd`1#KT0>3srRuvhaLi zx!TlWAq)R!-_zv(t$slreMO>iJx>#*8BGnfW^bxl$fk;{bDnhTtUQXLf>uo}Am27fI|1_53Maz@IS- zy}mOL-E*3}zBNehF>A>{azE`g9`VKQCHJCjlHBh>?7K+reRq}Ip}b!5K{w|ZlgRAs z7!xCQjxh;s+XuB0~I139oqA+2qr%pP7SsRxtPRY*%9n50GqvlC%*dLKz= zCro)-Yl2u@^f~Q-)WalzToOujWcbiqnI2^$PlU$MZ2m~D11iH@l6@-13v&PO3318k2nD!YOk$&}Pzn4OvE5lbJHaeT+Ep-{3?tD5 zHG$B(2BnPFhPUXQVZw(MC0n!#zl9 zGN&rjgmNgh5zU&5=Fak2UN>a34R;35)vre4*_r12lgN0DLp2X(sMeb^wE2e(odL_{i`#8%wva?w!7=j3m0@>NbODIBMu($_na(iyygvkhE z0tn#A(TfZ-#pwX?yp}u5)LGj^@xa*49@Q2X!4gP0d70OkMWR3u+pT(!D%d(xILkzS zEmFtAb`-#&jh@hKhpS^Ky0{x{f0?}mE{V8+&zh7pgGVf1Qo}_(IkA9sWlRjcJ|j0V zjm(OGD~j=9VABKSAqMUluxspd4l{;1OI=FdV#DKPbres7jyKYQH3%xTNeS0hs7~-#U zn_th%8#9CYdtYhkYuIvG!%iIihJUWv%70ncpqtmJs~J^B`oGI)FFX@EG}MZ_$}vq; z5M^adyOAQDCd$ESL#B3{IGfDSDPq1^u*aqr1r;T-U7Kjmu$E;gWH8uFAdNXhoV<3C zIL@jy!&evT2Q;blV-f!rEvB@J} zW5Su~MRt8_0ok_AxXlbuYGL6Nq<*R$&;;OZ+T}Y^A==CI+ z-Aof^R6j}G=bQMJ<9+HX`aV%xV^Zp-F6Tii0on$=c_p%^tJe!ahIV!CAhqDt4C-&c zY<1HOnetN&Mw-Gz2z)9l8CFt?C%fLBu%|D(&z`DzYO*H{v!))QEIZm?$O{s>vFv|OX zhUhM+T}mASKLDGg7S zsdJC;t1Mp_-Kt=Iaf8G5;XBY`dSO*Qe{0&y#{2N_8CZ78}yx=BLQP+uicUU{V8 zAzycu^*)SWk}oxta{5}eYT8*%ZZ0`&>Mm4MW!2 z!&J0`>Cb34n5=4>`}dLdCR|g3en#?J^J&V4B1@*?>#0H|q=K~+maAWJWKir3)nPt? zXR+B^)PdgLu@2M>`nKx`o`Almt_5!5O4V+_(n2f>dv`)yvRXoWjvlHP@*kn?HzBVj zwEeXip}i-&`T-N#A0U}_5!wa23hl`Y{*nJ%g7AM?UjO)(e_vi-MA?kI{>uNFysikI zcb|+H9Xv7K51t*XK+%Se=lGb++Di?tE4nnOExNp%08!f!2>9?6c`L{(XRp3VFy%!x z77Mx~$L&oMjPAw1lMDVV5Of<~)~Ohx{jur&_n)iK&)m1JgIsw(#Jvw+pi?d3&a^w$ zq9ZLj%~IiA(Ne)V5eO40f<&(HW~_$PQ4T{%%fgae?GU|?`%a=aBaC6aPCPf2B~M*j zF=X|Uw%iE1u%RhC%wE^zFImg>Dmyp&UgQLQU&H6Zx(Ve$Q+cquJb2a5e#KAL#NLX6r=P!` zKW9sUpS51FGe0L-W=e`gw!73Cf2iAYtyrB@5>`B`#flJW;!RV$kyz+7@K)0XlN0+l z`9usMd{(B*n$Oi6l>0Td!M_GSVzu7PxHNaHELJ?R7$X{>4x5DgvxN0+|CC<&Ordz_ z%ui_)CMn4h#`Rc$m_=Jn+{!Sg8u4Hg*U-dPPQJi#BzCr$418pA4ZbgiV|s$K zjbYSM6BIN``gSlPy#(i_#%Myrq!PGXE_}}*Lt=m)@1R$(swr;+ii`*)s_pUG?&r)+ z^czoulQ8_X*rti9`8kF+1EkAdG&zYB(LfOSZqig1lGf`~3&S0b6n7O&vG`9=Q6uh* zjf57Zvl0AZte=r)-g0}YPLt6pF|u7Y)^^2cZkH%`)+p~hIdvx2U>v;xpp6Gp&g8-;=F_X$p$BSEIFm?~Y0)Instyy-c><+) zn7M{OH9`olrJL6zMbf2>tmByfmoz)2sJDNaLmF!se{z7*i+fiZK<+Ew0 z7wwwb_RUn>zEn>rBkfxWlw;$dZ&{1i7fIIl>h*r{7QUzUB_Z|MTPm_Ys>t3@eo_^j zs__V=1#RWQHlJH0##HdR2#lLm{62SDvMM)gboN@dNUO3}zyWG1f~^+7&zBy?l#NH! z=(f+cQ$lMBh)aV^yi@@UdrqfdDetgy!l80b7`WNzW5Q#oN&?0)QCMYnzA#YZXD=U} z%*pXd7XJnAa$lWbgVlI$5c1(JHK!I!I;iuh35W)3$HgP-}J?s$FXv|>{hQ+|c${fc#PdvBmZJFZwl;zVhi6PZyMKCFL}0B3xX1*2}t zlHQaL9Bj(OflDbQ1@=Ay_TCz@cgNYAvK&`84Sag;A7;}%#^y)gY2Z_4<-yYOU{yKa zEY5xn{@y#}?{C}Z;{5EF9e?k`>K@{lxv}@jEhL{X)o|_UJIEoQNW_;&th4* zx{brDBKd+`W$=4+HMI6=Fz8T(yk^~^j%o5_TGZqAG?iJbA+4e3NdnjwnZ@?jNLeMK zlbW;{!!ba(qjqq%+hNET;Ek{^(w<^+08xxPvw*h>u4UdKSpG!4tudPrrs^WsEqX>v z7WTp)i7uQ*{87XPOrI7^u~+a5#s;r4ZzMC2m-#%x)M0q)1$&w>2uwY*2)s42%m^!4 zgRltAGkBaK#wq#4ZF|TT&jq{4*{Q&N*Qi-%Zl{j`4>uXxH-LB?To9w8yQjV=Bz{ZG zSuv|KH{_{f%hiXC%$Kl=vTN@Oc(zSW=kn7|B}WZFl%6<@0gm41X^r_FKhRLXpc|Ni zlFSKd63j7e{q?ppn@+Y6C5TbT+&vNb`hu$`(kl|(|ZRV$5XXVba7 zDNKa8fz7Rk^9GL0g<)SEdNlqiXoAqPn-0w>?%nG9G~Q057FB@daIQE}5q86Zrl$%6fmpcDK%9k*szPZAF48OuVX z7E}eR5uy^RT`NzWtu7!uOGDu)i5`8w^nX=;HfHQ2}nrLfVR~msW4#7K5|kI=SM#8p>;&*Ys_ZirT|h+Xkr|BGGWXv zLX@y*%r066@L5g#F_|d|JaaS4nr$&}x{ggagUAGDM?Kb#!{`_H6kyd#jbAEUKKGf{K3WvgL9E3DDf`tM>|~-1f;<# zERI+bQQ`zfLldF%OX9_DKF}o*h#&lgQ{ETIN;)n!C!2!fZ8i!C!SmPi3=ebRxLcqr z{+qOxRHRYy(e0}ksLW8?LSl#38GRs=@MkyraNicTYTH$EBr-My|VVV_PH7u39|Ku+E%!kl&2$l|^Rl{^{83Ej_c=Hw@BGw%=SaK)l*d%pDeHKjyOaqwHZ} zwjXBy%w_9G*}i2rw$>iu7q{2-Z9l!EKYsBWwMY3_0*MPI_>HY~>-=C{I(D%uub*tt zmUqEL%cA|i#P|t*FlItKu?w>EmidVa5^_I2yH^%R>FxV!exl?JUe%XEjZS{0w(g*T zj3-^VPi^8y?0uyp^T^Lu4=`UGrPf0$pI592#@TjQp>yy9553B9sv z^D_N3tmZy;F8xTv9@kIMji(3fX$%<8U82XvrrN#zWXbJ3r(2qHr}9exFl9>4=5YvT zK%dA<_dkQ@Fb;(F8n$(>-K$|+y0-T+zMpG-Y4DGxc6+2uf{q_V5q%GSTxIa(c$?$K zO|>zfn`45_>DaU5)gdtbC=a6>->W@94OImnUQ~8ry8q8fjPOk|X$;HBAB|TelkX>f zE+k#*Cvy6WIwYp@hBW!XJN~2*5Yx5&{N$AgubiTEZ1cEYS&dC~1(tJCPSNav%1_5$ zCf!erDD;C7e3@cgQQoEgQ3Y08U2po6e}Tp~VsQJr>DcAXJ?T>g-t#Y_b!|la{8^5^hO9QHksrL3 zj@_@3HC_FdkOPqL(*~HMU&<#I+Zt~;C98Ij_t1#^sZDL&v$B4?`P#hX@T|7FNjXee zL&OGRF-Xc!Jfioi#3-%aN1pD<<1?kMQ-+ zP7FE23%;sW8Ges+Yzy-Y8R6;Acc$I<{=3;Z{G{9rYl;N{VTyIrleIqkql0b(yD2Jops`Y8u-)eM&#cm|2yH zgNwxdiaOy}Q*l9lIyP;E;Z;A`QUpGz#LCPUH0-bxf(qeAI5_<{ID}R@Hpr#w2a31; zhihR!m!qF-nYzn55l_e;!Gsg&T9$Kc5uM;S%o&!YSvcwpVI<@Pa}ZkHc1}o*?hFCh z&&Y3U+#+ow;unQN7sL&MXk{n$oc`qKx2eoTdl(!BW3})_OWOaEagW4i1NBPzvUKoRtp^ zHGHpVizi|#ex|OSPdo7J4}8%_J~R#zQ;zLLMODemi@YJ5DjVKMt}U&S4zd1`o?Ke< zfjz&@w2Pg}Q9XV|Rq!`Is92G~-!S+x0F6!Fe8qi*=~c;ZKQUw_u+0@ubR)S69Rd|5 zRv&^kb$|-&9o4G*31R-ij{GQVXqY9rhK9HT6{}_v;Yvf^n;eXQ+SWYY({!&B{bXH> zb^MDnHH*0)FJ>%>(Je5*zB7mpNK`!GCq}PuawRcL=$y%Lsq>W%A$Fvn{5BgKYcD9f zuO;o%!~YkEyA@O2o5kQv z-Gdd``%!R$rb@GoRid>Amr=tH$gBUNhZip zSfn+ade<7rn%wY3Ufq$4z(`iAg(Ts5LG8rZ$LQf!ukl6F7K!Pk{-WFkz~_67k1Lg_ z$V&Z`C#@%e&#UXZsE-nFw#0fKZJHK%jY$>I)TgFdUe=@1Hx}v%Rnum`Qe_- zo*Vf%{scJXtuJ40g*WJ~Cx&9?J8t)+;{qHpHv&dKf66A*I zHvhINj}9{*>&Ue9USWEzs}dU`SX%$Vy2%aOScLbII2l{SyKU)`clIiqKd#85*{Y&^ z@4+UA;U!zTvzP4ssbxr08OBM0I9y}t_6{BujDf+q^Ux2A82w4tqFkg|3tO;5Vfvcq zJox2DJfql+$jeYjVh$!-x^}8RX-qz?)fRc_*!Bl9I2p1j9UEDR5!sY_9>-C*ZWeJt zTUP2#T=|av;QQsa%1*y5T4fWz*pN>B)QXg5RW>_bN-3?ynMdVn@t-V^s{zTZ|8(qp zS5NEIsGb7_G%l>iPyUZ+%|u!o>sk|WG6PODD!B~1u21S(@DlN_bZj42U(ZaxR&Jxd zoT$Es3#&#}6rNpG=pR=x-(NJcs&M4lg(FA!$BnP|_im|U9nW2G_Stn`ub=yath&Q9 zNK5wq7RyR2DfMdS{`;=Jv3sb`Yy5+tsdMbvUgOVsR=r;1?L4*r0zNH%HDQEda$W`l z2dKwqgX?r`xXZgellR3|@=hR6B@cDEKhNa8q1=99ZkEe^HIutox!YK7%*e7DW5@R> z=|hrK-SekfN9r>LzOP)xwJ)ltGpVydbUOBD)=y^sB=2Q=AAr(%vL8I%*1mZwXzGqG zXL>?c_0;)0y1+m3_uLvPq5+QNvQJW@RH39XIm9v4NMvOVK}+;Zu@-1uMH0J;=%N`J^|KUjh? zSRQO{D|{HI1q%G$R_Yh`OG})KDpAMUs-S_2{L0`vq4z?XljI4?Q$6j_#i-n6lrt;8 zl5V0p>nC&yW(sxaQ=@|~Q)h$qh`yb@gJQSACO7smKjX&+8`^t1e4lhte(eRI!B3#} zt}%PCk_Azf?0>4(MdFyM;t%T%Y#$WWhvKK+R29EpdmzP5x+K5uD_m$n~e)P3me zjL@DQkKu^TuAeb^iQGwa06!I)IGXcpR7r-UpX~OyNQQ)qe-C4j;emQ}+VfMcLki+fs$}qU>ChhsOy?Sqxm-1u>e< zJ*SgmN@OCMX_By5Ien_tPC9l3_=CjZO_?aBEmh{oVhvmTwka>B)ojFy+CrQ}iB;E3-o>}F^?cVoq zpp1rc6~BD`JsV@zi*K`ze2D+?J`pw%<`}GnS_jG8d#8(LFE7HQ`u-V-qPF(CBmCR6 z|A-Ror4E*+-Ax^oR&gVV+8?cEi?3f^WzbZ~G$44q#`S86eZOIT;_{*iW=8&xI8QL> zL4HOfn<_zuo8PKn`{=|C`H8t`7m6zq+hHsGj+2Ql$#kEC6rzH>moUvzlw=X?nT+smJexcX+ zhU!TUec)5g`jZg9V?ADcu`*~LY2C!)q&N7VmK$!rac@tXz#oPn)l~4wc$i#bIGSEP zm52q1bUqd_CWo$3rdWKhKQk-Ip`Xvv`#SWm!DYdd;El-=MGT_C3W)f&CiQ)U^by#l zFnd2uYE;AI9xcpjF@@$TxV5`UtH;38Bo)|Dz#GnK)}{EEi+Ox5wqsaCa3p!>{4Ywf@e zeo+~`SrzP%3#Kx0ayoX1jjQ(7D)tF*!o01X^rPZ(AL90_M6_iMpJ$gBUS2c;F4nXD zx}w4??h&R*9!D^|!N@!#0$qqzC32g*!U_%$O zhY7#JPHHo7j(;#YBeKgLwbXJ^M{?*fE#chfL*9)|jK0WF2=I%do5Z;c(2ZreCM zhfR-PpKQY9j1GvlqfX1oO5QntzpSiw?IW}u#5-#-c%^(`Q)AQh1&c2Q0d2QesrVEt zUfbHXKPpQicY=F;bV$<$8F^v)3VT^JIgch09gDt+=vWP&CNiVx*e~_E63@H%D%p4O zo{ly0*Va$19ug%N2?|Boew*Zz5A~g>{! zr8Ks*>->8CP&wYfp|0ZBNYTIM+_mA8H37cWpU@}WP_jeq*Pdsq@aEjD>SJQiN7mI( zYEOhO=LsiQ|5l9uv4zy9R`B0ng31F|){kS;XSf9Yu%DXy%V=DQLmsf&T5C^=^rqkq zE#^)pgzO=j8-+xx!;N^cB367%52U(I!a~Q*op1rKn?d>8%i!6 z#z@E4UPM*1c+{{?`0>W|*HN1w-!#SViJH9SuA z?U9X++&kX3$5NvV(-tFoM)90}W{<4Lv3QXPXcu?=j^0b;-1uuA#PH8DAI#A6&oYsO z7O(&sZ2RhosxtRz24aG&yPy&!w*HbskEG7FEC*5=!jwuW96NUZ~TR!Ne(;~dD7 z4rIAN&T=5Xh(Lxo5PMG!{j)&6;Xp=34fSy#H@I5v5=c)6Ql;*xp>`=WiINK)$gKit z8)}38UDVJD2U6@nZWhRs4rE6J@+$|jzXQ2eAir=Rzl=a`bRZiF_GA9DL z#DTOpkQ#wp=s-qCAj2KVAH!NM0HoM~>>Gg`=s>>fK&A;~e+TlRk~HW|=4~mN5;i1| z4aeJ{AB{j>a3JLlmqa8?JfjsO$W=0@)I*`2`$XC?R?GEJR z2&B$|e4ure9QuA0AhR6Eei6vo4rG}Fc~Kx|I*_(#H6G(Y7CMln0y)}&3_UiS0Q;aq zqGYZEdGLHd_I4nPqFPeoX^E2a9Y~;BJ~-C!a$?jM410l`=s;=(vdn>0MYa6WffP89 z$pTsEK!!vh^$z4ytcfpV*7u!+_i)AnC1N4pM zSDNSTi4QlRjsSa12%8#DZBE{WaspK$zl#x!;@~%wlpRmyUi^LyK3Vbs9g}68gO1c> zyGZHSd>~McY{BHPc+;`#m6FU&<6_AO9TPQg=(|+`5i-f#8(TF;1j;0H^)(0{C11YW zWT}!beX)&6m3;ZY6)W{kz(6(1m}4(p<7~XfRazyAwXwa?1<0R1r+1b=2mLaXKiw9F z^5<%mNDj@{$O7WE28}rm`SVMYgt_1)8amH`e9M7U3*=r0a&82oeIojDiUS!Xkc0#IUIe23BR~#z zAjb)$#(|s_fymwmWa|(cbbo-v`yI$$0!e?v z2E8Q$x!Hj%a3Gs10eRhl-0nbXYv{*Jm;HgVA9LCFhS`;5pY5_=QufbW_L*V!kz^m| zvY$})4K90(%k~;yH!H55UTC~~Te7Xw=R|bPxf=$%b&6}f!VJbzC@x&5ht9BddhmPU zI&BVNQwITwANapJ;>DtPhvX&WsuI7^j%E9#NZ+cIU73!}{f74Ha_Xw}j!WPod+$~^ zX2@!#LW{0svyuo_n$V7Kb6VvjH^msT9ns55jzJk&^8hg)E}t?n}H!^E`_(gwN?k9ROH9BuR| z=B*Gx4j8ecpN>7CWNUg6Pxw;7-CeSh`(>O_7ArPD_$<@dCT{Dyn=;}t{`Y(Ng+_PR-QRqj1FyAOx%Cg)crYWgKcj?+T?3mFx0Tz%K`z`oTJ zmBjn98{g2TZD5^NfU0p@DZmQ%Vsp;u;?1?=PfuJoH%t52*Fa<}=-T)F#1GYmpO}?j zmA%6cIBumr9=amGB94_K-sC;>Wbj4hlJ~*Z zrd_br$LhyP3cmhUJMQ$v@Y>+bbnJ9dF6bhD=tmvs+9Y&gg|>9URy{2UUx>e^9FWzm ziW|=f|NJypw!vz9mmn za#O}%D|$+df==pkA<0rgvZGieJf(B;+8#YLhZUCYh|kk{pR!QQBkVu>NgdrxeGm9f z2D;g|79BJ`SkpDmDX*U=G8&{q5k9MvohF0@_)koWfT2#BGdk?8K%EfbUsD`CU8srFD)k$B4sMwB`}b7R?KP<6WfaL3nRejbXUPAE<`H zK)@+^3g0{2{1GqQA)h~viAAoYexi^&LSykfSgzE{3f+;woUV)Lv1fh!49?$)p+d-Q?t`DEu;HayX-Q6=tvsz+9(S5C|~TM)#@ zBTAqa;(yT3*&=Hto+@kf5Esam1IPIBed!s+Ii2%R8 z#lN#MS-#g7^M*~VyL4*ZlKMG0)1lN!)GLlzSRNdI6W!64ltdLZ*Ztb)Ov;gVa&qYR ze3|Oa6A>7jjGAdsvFJxezv#q>cy{i zih~+g#Fl4xJi%-HnQWJNPlygX3C+pGZnI25XDk86fZ&>QBb?cAH0 zVQ=k%615-pDW{KMGie82+~h$7`~Pk|4e^bAK6vK zmloyK-BFdGT@k}zKX}b3YCa`dBaPo;?v<7tdc9er+%51)I`%Dc4eTrft35U~8o1Gk z<6ngM*k!E>v?ACi4r}?$ntPJw*yQoze-O5!xLf*^7~YnS?I;pgf*u*x!KY0sxVLd- z-5*CMhEwJ8_CMIZ3>JKe;lJA}#9~y~Rt$LZn+>T{N(JRMl{t3O#A|#(X>KZ+z0G@R z>O1B%wdm!}`X3MjT>ZZwJ@vksCDgA~VQleq>mu7?5-~74FTTVKlEhucX!Vn=tkmyG zo{W4kL?lb@!a!o)s#NPOR%^XF`&SDjNnt3_@-Yr(fMBKpLsGd*iYaLVNe@esrOx0f z9UFEVVQG=BYSF>-KAvE6rTlhc&T$Jb6@Mnwi7XZ!>si+GWi zlCl=+m!3EoH=-Y4agqk}A2ugGV={iPL}?C4&*4UmdXggj3)JQ`Z1KGKaXG{QY$2BL zSL8NqKgPSc_+UyV+!g1^(Ro1|!&cEmPPc}wq2T!3Kb#D=8D_sLI;$WP9IQ;p~s zTxl9ezUZ_eizI`u+ZYbPI(g6j&{CVvH+D4sh9~o?5`)9;j8?dS@+-UtPY%lv(9Bm! z%j(moKxbrCB?tW;zf6b5*3dR`_;KFNG0?{5bmgS-#;mIBwv*FqL;cYj{moZ24A*3G zd|r@(Fbp%j@*1{*nX;k~Gc93Ph?YTm*7%F_>11F2S0xD>@Y%_)UZfjE`dFaaf zDxf4ECcwD@7|>M|Ph6Rw{Zc0^@9+3yHq70j`E%o!4c8WA*X|=#)NI=YwtppR`#^y6lj9uHB`Mx?bTEq3?$AZ*`C3%dRQ8L`( z&EAazNn?z8!OO&$1W)?UrXR?`YVIw;9va zqN8Xwlo8UYaAg6z=&43>jo*haZ5mO~&1?MPP)0tEOKrFvhi&ovyu{c%zj)PEz5VXp zYZ(Jsgo)ca0>sbsn~ZTkK@WXaCKuI4}MI`kn`LKjW61! ze!a$P>)~9;G-%s(z7rC6@qz5EYapE&!T-P{XmgK@;CAwNW(34=bojqI^Mh3TPW?F` zw)^#2l?WGTs&J;VjNF#--;q2FC7Y1LFa zDq3^|C*s%=qRWHjJQh}Iai&|UwCea@h}z8L4Jaot1SUnWjTfInm5j1H34%2NXnCr0 zKj@|N_{xDfHFnom%UNG#4QscQ4P4>HTbT=%Q(3s4ZhFLc zrOmV#p99s0o%G_quhjIN=KU7%xsx!+ z$_N8$RKD0Hng_c4dEaHIWAQwZKoDl|BnrFlEo%E}dGfTp@{>;2)O$Cz7j&9-x@(v| zIl}Z%Sw)8G^58jDZ8Oe~6iKEWY)6y*3o5e7=B%tu_USg+A>Zvf->2tSBn$Q~KWQv< z_nJCjhkhX>eI<|ySC5(S!BIE9?r`{$$c?;m8V7~yLq9M6V=5>Mo+|G?7F3JM_@!`x z@%N79{du`f+hy4&O{3NKMD0fC;gE}>whmHTINF#j6E0r-VMoTv8thuw@iePG=J-d0 zjNOQTkQ4FWWZhokUY`z3)m~T(-)$JznNGfKs)rTx;uClgm1YPUTK3{aA$4RsG#;=k zeL8!~sV1p%!eva4kbJrXnY%lFg_t(MyvTH{#rli%VAUh1we)KcT^Z3VxxE|FJR+Pf zdi?K*<{VK;SJCXnuOdn+8Xt4$(D`|)nq=d@(>V~byYWQBLAA^B7wfM*X*l6%c2PLA zfv}rVm4xK*Z;oomzPpU77PYP%dEGG{C$I0~L!Y7&Q#aTmfUgW}fii<75l8tkeH3X% zixDwr7^xkg#gUh{N*Y= z5Vx+$)5#X4Dv4;0li7+H!t;I|i|%_T?Y zCyqZhG$GA?JW;80`z3nq6Fh3*4QXIcA+_PjLO*+3D7n2qtuWne$p)@Q z{k_*Cpi$BClV|1mdv9}E+R>U^u!aD3I#PZ{RU5ON%-CC@aIjHg?g|8bT_QX49dfjgI;tK~5jdM$?j@ZN!?X zXrXp?2-?|!KuJ3@(+3re^U#g|p?-GKXI=HPKR`@|D+$$QCcHwq`yelWPd}UKN_OaH zYd_sdKYN~pkPjK1j8Ys1D`ElD*V%5)=;f19Zq20-8O{kAjLC}Z^5m&`rkkOtxry${ zipi+sktjGmLhn(geG9*6>WX>z@FTO>cB6Xdch$p20_{B0oaQwuyYC0cTV2(au`g{t@4XKtnm-MK9y#kZ8JUxfR9{ zH0Fr3w4L>`EiiD#_;2cEUc3o;VY=C3PLXD4DvV>HL;QQ37Iw>ROr4A(zB3v z{dF+=+nv|Ipop~1&Js4*k>4&h&3dj{e20oM&%X=ubTMdM8oaAJBa4n!j(D zpUQ@dE!Z{xv$?K(Y9`*P-Q=&1^5>y8Es*$|&!pj|_LJONgy&eV@>MsE;}C`N?<64; z#p5-eE^a#S3GGC5-e@8Gq1@cC=VT{Oy=!Hbw!NcyDQ+c9L4%P2J`Vr?U zBj+=lT+DX4dd{t2z4B87%v3JTs_MR9+462#sV~EKKXDxQXIBLUJyPFgnPupQa^=CB zeo!#DDi}97FSVbEs#5BUc33(lDK(r43gz=|^S`(L@8|y%N%!~4U&kK)-^+J{sb>!9 zpCcTp#L|sA(Ne0}#t;{n+a^!lgHgng4NrS6w;9ZK9#jc)Le0Cl* z!G6H3JnaX3>NTWEc#QwfMIma<_`*6#&CsV9I>V&Nhk6*>*m1T$?m`Git;{)64p$K^ zB;VKJC%Z%Ma{h=%5HcBmM5MB8`XIum?VG3W1#_;vd*7QG=!)+y`1!AYKqq(q13KAg z&a8UykilPV5(G`;vsywDDF z9qoxxzat9UhWa!45JvoW{HDIgpN{>kIF~tH3dJdsgRt6rZG{@$?}k5|*Wr(D9#J6O zG&RtYkSi=*Od!A@~LC3gq8Ly4&F|-$rs}&v*j;n=7w;np+4~^iT3E>Y$O%37u z@)*JYOL(|#&;7kR?C-x+-+wb9dl>&snyXIZ{}H;Fjej*_*yfc6qj^=^#()1s{GapA z9@{^OEVchHjYl}%!+5fV^9BCn;ws|D&{B!^*J|6qi{E4`EUObAPF-n9j$g=~vh&vLj9PIF zb~bG9Bit=&oCOn2jppE>!@Kmpr-$ol6idK>w(hl-Yy_0Lyy3=4G+6%~;6 z&sWq3`LKtIHo(25m0DN`{)H>quy$%E=O4^BP3 zz4!wlJ(4G#{Wqz*$S{Sy%fy$>a^%u^;-6&lqKQB7Eh5KIQfr2MQoPD*c#_?K;H4p- zq>|d1fZ%KR=)g@U5HVz_JJ9;e9+pnhX+?D354Tg9ab~-%BSGXk+LKX4x6=~k*;^`u z@_e{BcW127R;fR*h3&A09k6o6F7eFOva1@FvU!-pZe@;F{28qLIkGG)u0sb3T7pj{ zSyVDfCn^*99mK~S1>*)ogyVWhVAxTRrev@E)!5rx8n#m8bMec!)!0j}G2}+hiN#OR z*lT2IVlpCiZ}5^4sb9XyB(fGmnQGoHmUtdZxbZdeQV;W|;RD26H|9rIwwv;{G~>|(KYcw)^=*hPKis?AKu zwmN z|9$3N@y*2HU&R@Se%^!EA4*paE{&(_dX_a@okQ5#D5#6OpfdW6CD(mYk?332ux+o| z?~P8Lmp3|DR(N{y;QgwKm(4n}EK%04GFi!ykS3q^Q$l-dUU7G%9`RyOUZRYp%H5yv zFTQ!~C(F17d)cg5f^CLu?zCQZ~5y0SVn`#1&b7qW3l1aA50z zN&@^ya;HEY6YgGK=Oy@JG#3mduI^X%uoQoE*x)mcoG2vF3dr=c*xs*Gl~Z(=_{}83 z#<&%xxxU_>0fKQ72RU%-yd|n=Nvit>{|~x>kPERcSNKKjjjbJ2cUZ`zYWEk_RU+^w z5K&$ge3ovh+FDo7F1U%W4Y$V=YNsY)K*v#Pj#R-g87Qa=Y4 z@_D5 zRbmVgf~#u}(FX>u>BpHm#Y8Vzo9lP47{-a*O^N)n^y-FX*(Y68I_n7?>LG?VLQUBv zsmI~Sj?N=Iac;}>uhGTZXMgwf0%cnOwn7b?;8%_IQ@4(=Yw;mufQ#Qk2 zfM4z4)3HJa{9nN#_X6C0yVhfP9>aaVbhPf0s|=oDk#N=reHz(3^tTk3fRlln9j+RPrUePsxUdUjGF9}#Qv9BN8-=9^y8!S z9g|!Kzd|}5!-M(Jy+sFQd5vFHKtIbVj}Y3v!23(y&+)V0;Kuz~{ZbzR=kP81B+YAh znIxl8j_7?j*|7YspWq&U^=A>8I#>!Z@jVmJw(Exs=mSCW8)b5E>3%Rz7oBIdd0#NbN*_Tmfh5_dR#r?}R zi^zK3$SMW;_{zlW>az4X!!n>x(us8Jst{Dvsg@(qwjCF2#74W`r`o!DH8-TGc*- zuTMbpce8~9RnO(ePableemHmE_QSJu<`%pfv?x@`M(_8j-ILBO^llD#5{a<5C3N8Ou1>`t&m2%#!F21sHY5c%#HnT(c-dSFrDK>!y$c# z>3>lACZ;(`$INTHLy2Dp7k%CR3mE4b%$^HT0jvs0;nXEn1N1FctcY2+fV179Ax&uiexgy^q|Eq6cFTPZJ;^fAKO|m_;#_57P-c!cZw4#Ft7u77 zTxcv{Qbitajb3;}{HaZ!9ymKUShZy9Vg8aWM-E(pwmWZIdUkf!qCyoqvjr8kZTwvu zxG@nUM_jUgm^6yo>uCIEG~PCh%t$eL6sJDw0+JRpZ#uUDJ<2PRh9vThY!UY2Y!{`sh#8wr(8u;xjU} z{;`L(y*70oC^vcpLDGIesN=uhLlwOym*@)rr}9X;`Es1GlS_1iKSx8k!T)%B=K_Cw zC#SxyfI4(^O*d&~jIU zZ(m8M3ZAM8p4R)EvWL|*J1@-KQ{3m3dF6PF9z2fKi5f1;x-7eG!U{~>@7Z|D&MP|~ z=Tc(~njuLT)9agZEq~9jsn;pIDq4L8|7$jt7u9kANBhm3jI;wd6~r0q07H3zwSV2< zyx^tsfvbEDAl*C~Pq)6?SzQ?{@#3fGO@-_uJzVg~^ElmDIS1XoRxRBH@-&{okBj6? zF-^zrgFRtg*c^S2IYI?}fTV2Ad7@X5AJ{Q+%?OvFG^{<$`_s~3!~ov&i&xC;GdUQY z?>)4{`_qU4K}CV?ea)_N#9zhISRgDVV`FlAWF5Hj@p|4s^pK{8w|h4%8PRtA-CNVL zcyRhGOQ{pxtrG+2gl2l__Y z1@>}$5pD)pSeiY4Gz0-30x%y4qZ8bB0#J0_>{m&rp;t^!4E{Fau6if0gITpv}&)A|g0=^J!W7MX-nLaaUZi z)O9qByDsI09{g8`H>=FnOXF(NdzE^(u}%8OhfX{mL^f@*Z%P7}=`sb4lcTgvq%~Z7 zboaUg+P~)HkAc1%CfD{A&%c%%4=z&5mUP`(%l{K^=09LS+$>S*GQIdusaHz7+Bk^y zBl(ISQ4G6NyvnU=eclt|>-xq^hwyd#$67WD1+itrT4dS8?+~MBtq)_UQ0B_=;-yz| zvq!wBo_7T|4uG_3Ymq7kbo!U}Wz{1LO32+$S*OTi)=|pSY=PEmx zb5vfVhhIL`Dz?b?IM|Mjp97=diPN;NW9@}}GZ%o=GrS8A@ZJSp{AA!}AIvjf_V`N& zq@+OV7rawnN#Q&;u)z;Jc!AgWy$&cH?M=Cmk8?UQh<&rhlL-_ z0}9i(so|2c38@pTnQ~)al)2Tl!cB4V-nN|rR4NCM4tqiVtKc={O19dfrh^2tiU5gF zA4?AXuXHYWjN*opgX;A@GKw35D#gm_Rms|(cI5okJ2&7le zNmwOw-(FykK93*#${uUF+@Cl@wnRn(g#K47#rXEz=)PVYcsgL_REPHO49VdIL%RXM&LtXac zF58PwWRd_G=|GAEvabVqIs!S_fqd10^b^RsH?5Hs5y(LfB+G&9Es$p%2)x3nPFt|l zXy}c%tgAb|1mt%Pykaq+!$$?xNf!yLiY8}WL zfs{Isl#-;GUG6~6av;kEa)<+&9D!6ikZ(AUhXt~Y4+wzxD@oZfm91*fCJg8B=u#S11WYOV+4}xKrW6zhB%P@9muHydFOS* z%Rv!H9|yAG4IA_jfh=|)`4LDvdIE!PaUg{P`KbeWLrLn(3J3B>2hvv{S38h>qgsCD zK)&lh_7ccB4&=kAmKz<&6bJGJcObMK=Rh8aKrV409H)66shQf8E7U&1rnaxq~|a>V9M8rDK<=BSG%d$`nR_KvRB# z{Z;Lb{>olX8%z+A7r)b9=JX3M<4?0cnR|Cs>?Shhtndcrwzc8{8kqa3``N}%SRa1r z#HsA4aEx9KCHu%s&%Md!a~nXF=_9kTQ>ihm=qZsd!^Wyr7Zx!mTDm%({ z%k{;YEAp(e-vH?<`@C}*Arb9P+wxv~gIKifvJY9U9rj-uWXW)T(y^Q9jew4lkVuv+ z#=Jun%3rWSA4Useq$YAt3t>j`M&=6`jeIB623vBde(;WRqyMBcd2G(jBSrt3bNhr( zsooS^U_mB-qm6qHG8uHwEjUh^b6`K1kyfYZ2k($ z#OS*IrDIbZ=!yvRT!EfS|0XZ6c!5-JJzKeS?3)hwT`WDT_ecT900{HH;_|8ne@=jq}$UT863$~lFaMZm!Uln#h@7G1Gx+x5CcC8YVCFgve zE7SSgym9AJTkjxp*VN|XCaRkN$Y?;?HqP&waY{PYmoliAZ*PH*4R6YtFp5Y!-xY_@U@@EC~<}Qc7|b@jhP2H=9s7hhwi2W4>ATi(35#iUDLJP=9j~cf1rn*I)1$?*Ing|#*8jT2j6C_ ztjx}%tm8xRUANGd89r{=rP{iq=t}D*425+@X*;!A*Ng05DqG)tOvmo6v`?U6=h%L- z^s~@gx`N)7C#GDuSpKn2gc&aqmgKwm<`~8#YCIeZ0Jjs~rjaDsH%)!#YVw;)OM&Jy zruHRM?maE!|6uQ-xxLyB8jA~eQtaV}sAW>`Kk6qr{0BZ;^~u;KM&kypc8ggWIma#9%7tzof=gk@&?n-KH=wIS;MERShD2V z^)RC;ahSH;E4hP|sz|(El&U`&h}c9Rz{6+O0T@vZ;VFvg;TT1TlZC)?-bP%Cjnp04 z2dSnlfaCyX{7Ykt9)(2=P-7(i$@+MULIXx4a9ws-S2XazZ^l;U&vKCoP<`X|?k7Evcx z*5MsRXrvd!8SR&+UVve%d@>f?BDBA|x-;6n#zqF5`YwN5e_SXHd>61(9tAS{JIoYE z=-L|QnrObqnQnE|o*D+2NW77OyLEwOl$BC|D3!+5XIld2E1#Zbxi7k|+&N#@b-D6+ z0HuCMe#4G^xVMG3hOIp4G6*hO&hZxk3AF;-{Zujkk=Ka6#^L%-fu3L4^sZ*y;ojSEM zUc=F8C3N4X7(Dg&uTbl^|HD?EXG5)D<5z8B2(?}$!N*i7o{->p2^Kvl!Mms;-aYCo zYlPLpuiEcbQxw>Y?_#?UMsTkxNcUHWgr#ZxSaX@1ke2Pk)Dbre{k49mmS(3N--VzU zOWGII!PV*2$MSh~oH8v*r`6n8ENX8b^K?}zqAs7zuB#FHMm#Kggudx%70ksi_vl~_ z!5i;UvH1iqyiWyX2wyo*1;-KeKcDcHk9r^B6OEnZ{T=Fe5+aD}BMwU*2Euud=cGOq zS{$N-mx?K2e1D@J-!D0c9g%HUUHqF6$U~dd$fAQ3M|v;&J)X{_QSxsOAfNFXBrgWC z8#~T$s-*_mCLjYe$R83VRNm1b-+Z8`tQU~;HOT51i2WYVY7O$HfV9vcyCq7fOw?2s zXprXwWX}hR-G^f!!!*cb4Ki0i>NUuHv5f5Zc&^YO_X)_88l-oOiv1qXB^qRcfZU@& z+QmTZ_juHIxcdzPQlUW#V<7f>JU_m#3O!Olx@(Y~F%bJbo)0ugUjaE;gS-|4vESo) zNrPN0AP3%8gy1F_%Z`RzSb=%oTutU>Z(AohDapK6dRB%_WRq)iOO zevfB~2Dx9T9D7d{`rR0a{T|Ol8sshk*``4j#6ax#c*bjx8wBKa4f44}iRkS2cm`;Y zAp-J%26-_CV!y|8z6QBWKyK9_vtuATvDdVK78;~jKrYuH@5Mmu_jvZatK?E3Ah{ak zpD_?U4lb(KAm<8*OM{Gvf!OcyJgGs>5Rfn5RdN{`1F_%ZxkrO!2*^qek{biD-{Yy! zAisVO$m1I1cZm|Y*zfUl*B}Q3c#&B!8fj zTWAUa?glBkStrksV(d^d&*FW83Ea{iS&eZ1Y$!EE1!p)rE;9}VkT$uL-kmi&uHgNv> zvWyfz;JwHecoe*E8un*!Y{Qd*lPi}IP!7D^SRh*h*3@1sMhTS0ak7zrFu+bl(F}cTq3t!J%)LKSLbNqUd@khr7%Dp1f}_A7;^N`N6Mlt^Dgc zT+0_)UNpY+%Q$_$S>P^y3+8!@Sx!KBQi4EEN={ z&M9zgKXJiUy=O)?j;kj$!rdPeM7_PSPC8T`2bQ7udksu9u*fHI>`AdQ2a%05tPha{ zJC&FYC^Nf12^8;w7s`AZOpFp*(iKxZ?0+LsMGw@`EZ|4o0V37ig6f@>1OCeJZbfhv z`;uGu)54Z~nYU+o%eh`#pNAUijeb&b1^bNyXQ^FMaQ7$Su5b=OtiCB; zN^oqQhB-ySIPw1_9F(J}zvbcJV{3zv(yt$Dm#+vW^JoX}j zYNYHvM1?ORK-U_E7(J zR{xfldq>D+3+%;xWv!A-KI^!rmhld7z7Z@@9fNwB=kJmlE=qfuX`+AMEiaF+k>=GS z-n_W-S)gmy_!G`KsF%g1y_v1=fC%xWDv z2OMkjM`I)zJ9JO92&6jti$YT6Fafqp);D5JzYF6NA#6>$S ztl~}g;1xGv_$Lt__j|vDa>KWy5Rv!pIvN{~G=ME+x?}*R`2a1&I!y?weSX%H3__aH zo-ef7^8K8)H{^`}Jjvc%UK`a@03YMb#%9*$Vjh?R_<|_5(#c*0woS-jIO_g{7AEv_ zz3b9pl}+JnJ3YEu1`Z&pag$aICDxsLbu(_C%^g%7WZy8FNvFILD;Dywncs}dh1RrrkaABLxbtu=o%3!GZ>M_QnO zQG1{R`rR9rbdt`;fseOHt3ZLbP!0(0^9$B7~4Q?>C5cl<|SK;5^G%%RWFB_#n=({)FvV zm!1;P@74It%X0mN19Pi>Wa^(ApZoEMgWT5x^VOiK{zu^5{|9(AJC*Q0aP^d&R)OZx zbMo;78eA9huasN~NY5v7hD*&T{yenId~Q2we%^Cu_G34}GBejJ8jIPhmAm#>D4F#r zzhQ3_bH$;9Kr?p2a1#tSR%h}+a-eqWl<__@%^T)%gAG%z_nDWcbE36v?cph-N|>E# z!2#FM`qT|2wHpW@^oD*+J#0?S^@fg>^475-Stww-bg zO><75Y#YZAhLnZ2mU{<#%cJgd#j&bclcP^P9WrX^Y}ssmK-PVprWer;kvuIElP4_g zN@P9G_ucS4!QuPn1inZA|G>9sHjLerlED2dxLk0bFWi?F?lfv|gZoGk|2PerdEWPj zma$o|<~uC3nQ8lAY)&fJV76{UpThC^zxd6mjM;h9K`jFC9wL;DrSu-567_pJGXYYG zaT{OdBjX;Nf)XqatZ-J!oT~Z}PkC94P!8`k389s^O2*1zo^C>okBd?_htevp*!ObO z?Y_8?`Qd!LIlCI|pmwKt{o&~gBwSGEl*h~{{Bi2(X?}k0J;n5=7jBuFndZ+d+%h>^ z*;j8(T`Gqyb4z$g>Oajdw`IggvQaw7{Lq-k)j{d1MJoA%Vm#W(SM(n>7>XhRcih&b|g<7(aOe;&19Ky*8LQNH{p1! zOz(YQE8jB=X!hmJ8ED@7)sX=l@!isfxI726|`%E$g4uve30irYN19QstY z%Hny>=S-=w!k3=&;Su)HXI@f$G_~rXMX6N{;Xcu#KY*P0PQhWd50_S#YW?d0x?xSO z>Q!kX{&*8HYF`8#VOJzbdJgn>FM%ey??t6gMeIZ>HfpaYCYFOSeI#GXQB@gPelm&l zB@R1@3&&Cw(~QsD!8GHA61mjXo3WAKd`aplw5oc~uIdkR*p-~w%qUq!=RG#$`jY~f zjB4CVi+>XziA5i|k6fAhKH*++)L$B1piAi306G$1-o||=iJTc}6>j5J_fL>UxBQyr zZ-}&pR#|LV^M1I8nO$G%CQklWtu6~~?NOfH zJ!8bFXdZP}iOQO;bu0Oy^|eqH#TH1eCs&6hIE*cR#cKA)T`WOJ6l}fn>PW}85rSjQ z^m&}&Z^{6cb~4^?&O5HLjia%d_e-x@DsK%n_|2Q(Y&?fh)v<;9vPH{;d_%hDOrgUO z=4=@Y6VC@$n~(eqKIrf2;a7~v*AhTo8JAy>uKI+k=I}ZGYR;@q>!KD5wY$NwORX61_6rH{i@Lpsp07!J&`I@Nh8dE|u82 zzyK8?E6|e6_TW4n-yQa{a0t58$kknsOJTs&q@(WNQ~^YzhhU-|iAtfeokHD3p>m}C z#q74(`pb8u&(lp#W|w8`5iYufA37R!hWi-Cy@+osTHnl$6oXe(tU$XDm!Hrv>kCpN zoumcQPRJJT#h6{ecSPEE)Lq#5q!iVksJ?(Yds4YZZ2e^(r)IY*P_EzXTP_;p7XQ9{ z3~P7@@O+-AQ&SDBr0h7S`@2 zP-f;>vTiOt{}`qnQsp6`H6+L%w#jc+G3dWncny`nJ;U8?qN3(x#wspY6Buz3WIZoO zDX6k_QFp$yrr0_tD2I&O^kfSGf0mKQ_Gm)o%)M~^AEAnTBkw8?Zrm?R)Gq5DIDOp| z2lP$Wke=y`5t~c?w?Qnl&K#O+ELmT_zk>`$&Mq1?eAGoecvdug)QC~C1-|8vMTCaq z2(+v>mTbV7gf>IWSX^II$0>^6ym&8Bcjr2?x~DTWcCy*MKObI`w^Gq`8a8WQizn+F z^8A&IIP9_A(R>-()hkJS4kwK5Ty)TM%ynv&tu)la?AuvOE}H`>Ipt_UIb|8fei_wZ zOUgx!6#>~g*-)G1!bNW~-$i4+_7>Tc zx@zCsN-tQSek)49;II5ec3-*A=lRK!9-#(2?y?5gU#K=RmXb%>Q}+q&EnMVotMa4n%Pv4SOZ-q3MJe_(QD+3z1J2>1`?*A< z!L^2#Du29Nw_MbQgC~2LEPa7!&Y!@N97Wk1bsu?K^u6c-72gw3pXr{-M+vT1t(-2B z9sik8KaFoX`ZcA0%$u#e-9;J+tAl+Ak>tRZ+Drs^Ly>qQco=(1=WSSoc zf1J%?cKxW~l^HuNEV(Qz}j?56`uDd9YduI5EU4U&^g zeKJLR3s2Ax(o>^qIyCD3+qu%DnQ|&)gAtci(;a2ot-X&FL$&t6Wi;jtqwPu3y0eV7 zL$joDvxVf!90FtVjkcBO%gL&mv(O1tYt>ih}qSGixg3rk{ z7}Wb;;f2$XblbfVCL80b&MFOUSI1#^!pO(#^BB*~yx{~yN2NY>RTTn}PH__;K=ewq z@}lC1?r#x4N#{xuZ7>1Dy@@1xvD50*;7qkQMhtQ{OVoV|TqSq}-jQ@Z4OV)}n^KoD zy~z2@*j&f7@BA6G7TpIovd}$pZb_)`yF8vQcn&$WiB;*f7<{_*~K zRgHA!`Bdl4&!Q^oFqFFS$~9Dd2R*qWjgYICOxTBAMH0)kRC()MDJ0ZeX&BvQ1!Qm$ z|BEO>t_K8W*~NT!<9{M%sEF=-{8>j#RS}o)(L+Z}P!WZEC>=cnnpkMo?~h-n40K}br&%LoTj%@& z--+Wvp*NKEnX_0ZS@a_{Xm%{c>NL38FVohhoWwKB3+i|UcVJE#D>!Bw)xed9zpm3s zDHVjSh`Mh+N188JD>->7zo{S7%*HH>B72AP#wYTWs}V0{tLNw zuy*UDTrr9V{l@vL@EQnjknsA0#x?a(_XX6|L8J5LeGf8m#`d?GFZB+(E&Kf~KM}Zf z2aSrlee0UYNBQ5e`zQSRjvv3@yk<;7^JntiZ%&sg=W2iYwOnrgku?F)S6Q3Nk&ZC< zG-dKvrZF$oO-y5{UMJv!9@F1}k)Kg}8UW@!`EuRF{o)BQN>>vOgE73UKq$-qu87_o z>SyXfrJbYF^l{-QNE=%-DIahBL4u~gT;}?w3kHMzoPr%{-r26d#Ph7X=~wir&cI-t zBa2Utq*70UkS~?Pg-dkx2jp@g{OHW>)>^tWDzL4#3XIP_V#f{Ew=IXV*gpydx>osN zGH7+Gw-7gR>P+P<+{`u`rca{oI|zt@VOq={0vWY=Qtn0z0I_icZ*lZu8js89q+PDO zv$*h+do%g%Q}}@qmb*#N9*a56X_OXm1MbLU-b*- zo%!NT{*4~Q9NG=r{U`HI=GAysKnymQ+2G&*fMN?P^F_2Z_vAComdh^aD~D&}oa8!e zC;^JQOmn!~VIp`gR7i8LQFh+BSA)y-ehKA7H-8=;I@tKiaU^A2x}Q!oj!MUPoP!O?d_vF}mL zJ`^ZT=5}MLH=PI%zis&C9P?nN@5UmU(~PBewHr&X#4gK&H>S$cPr+7W@h`s|2Cg%F zr@}F6M5r{2pa{|Q=9CJRSQ)Ly-i;{^p5$1vrzG;D6bHR&XUz5^Tzjo0{32^D>rlQ} z{{_!I6ttFN53=bcQml{+xloMYm>h!FQQ@{&l`O5ZRlY{;NiivYi&-Ua`ALoZtg^sA zGgkI3c4QV)DJ74UefvmBqV5Ht#N_x-5aDT|P_b)P>aCmbG)Z{kRwRPsg(qq`asy>k z{(5Cvf>nq_IDDn1kZMYz&v)oZw#^fO$@A z&0R(}`W@#J=VP7dXN1ZHwCAO0I8LJD`_2!AqQ=#|}2Q zPK}4=IA(gX6THa@j*RE}xl{cco#0X@xX=kc-~^NCU4v_slitq>UhD*OoZ$PmU2Sl^ z?O51FPViwTc%Kuz%?V!R1WWB;gKMdyJ`0`TnGR?hCwPwo@PlKMEW_-!5{7f`#8aEj$K;g1YdQ6 zPuju8`!u5NE862QG{~fi4DPt(k$oC6>XNHA9se;l9%2Rc@voTRW%`Oq{73%E%1v45 z>!GFL$MqF9>||5^beTDsGmz1M$KFAX*RtUhahKR&^-7jZ1F?gA;`uUj{WtPmtMc90 z;M$BFWe~`ApF)VU68Xgz7sK8x!g_6oIKIqT#pQX}8Xe=O z6h+`NRFOvmRUm !s871vyXCDTYoX{7y;mrzha=m#Im`jcYj?07su+!@jm$SV5mN zb;_fpIQ89#{>mq9c_r|7UIKmB2u*c5R3W%wQxpECCgPXUz$o8d+dN76gumxNLUUe! zLh)B5{LT2U;_qpl@-5nV0{%KBp+CI|{aZAZ$DtzSzgo%NDUIZ@m?<%)C92#a54$|=o8(uZY5jyIlHcDXzh$4Q@|>wtwvuv!@(fC(Z|g(M zE-QVQrKz@uDr|rLK@)i!N$@9v64$3G3l&$}u2T3fHO1fbctZK?{A2#F%Ky(Af1bv_ zt115MB>2CeBJuq9Kcn&=sqssj;txuKzcdm5IgQ_5<7YR;Hj_@^Z3$1kABAIdOBqs;;>zCWgseho^@-`20C zHolU-%nd`Ry(TocY5qo%{3qJ@TH!l`0)bDsCdxWB=03}v_k#8zU$hViK)DcS7xQ~>44{uZ{cRY1M z`9|mI@+G#%8*KWzJ*ZdxMgBBDcWQqAEc{ISP!&_65Wq8!9M4auB>YUb>8bWLQ2P&iM<{-JH05X4 zBT4E%5x=>{e_rFaZi@d@68sj4_@6wi>tEyV-q1uIqm$q_pmOpj{7d~W1&QJZw13bM zO4hioN-&Fc$`Ddc(7vJ%A78#3n$W*PQ%TqK-x&`53{8KmPWkfj6ViVw3H=sL=y%an z=0XKUyISZk+M@XHq*LxVG5y|2=s%CTC(6fKujJ#=^nV`)eLwWI@IE6EMf_UB?4~xY z3sj=(J;KNNH=8&L5Vx1MJ-8$xKi87SR4L|>3uK>yY$N@iorrJupTCe%BEJ(fFMA$R zlm-aD^EWGb+@@15Baai*XV)b3=Oxg0?bo&V%TUE%m!|w3cqpNKHh&`%@t@Q9OEvzl z4Nc0oI0=6H1borgk3d3ShiOWGgOasulPcd@opSA?CoJEfB=na;C{ccMG?njkeYY0+ z6`KAGQsy+OkLZKPm-mJQdae(2|Jg7^$!jPC8sV=@f`48j{{0$%y2j6Gia#|8{$3c5 zmB)3d#_zB3zh@!6QU1Mcd}Y7w`g-2Rr!i$|w0h8z`%}>el9WF&|0lIRHw;$gpVl=0 zl}Yf=OTd@<9sv^dU8X5bhLW}ZeO2G3I_3Nm>+|R&^cw(=$w%n7)l@R)tM<}S=#PWG zZr`aS(hyr|nBDV8yj&%^-XnZm`#vz|czKLW$j>za-9)fU%auIVu5D5ui<98DPsATc zuHaA9_zyM3zby&=HnNPB*VSC(U!w7EY>MAC3I4o9{1uO={C^pw`2TZL`~$O-ls^%F zg2rE}@l%`PFHVBrJ^^3q>+?0*9&1W}gOauE-B^8XB9Z#qpot9pU$O%}cLYN^3V-7^D*pahtt9;*DJS4B z8ctIFCiFLIDn3pBodHsQO}}2JoONRQPbHz>B7weZ=R=C?8=y-0t0CC9{7LW|Xab4l zuh3k~)Ra03f8#c2`$9@%dvDnE67A(gn;y+_cbQ`20`QXC%S|(nm)9jt_&KynN&Tk> zRmsATw6=4fxwc1Nkw`(CX`Zub1J>K|#LqP5f55b!Rk5xo3F~>;Msn$&gpb7#i^;`x zjn3WB1$qX;$@SknzC1T1(rKgVG+eF(a}#tL@v$-y-}Z;jOTZWX?5j()`~fA8$xyP^ zH>mpQrBfay4w`$gn_2KN} z%h3=@kc;hibhY!*gg$5Y6YS3t@}I7ak>8|ZyKm#iT1{-z@#Aet=x(F9@~7!Oqv`%x z=uU$Ijp)MDIFH?;Ah#3gUc@P_f-5(K;gupA9pTl;5UHspmrt#x4TA zvHh8yh-bH#Uua@Z`3%j^2;t|SYhrS1rTIBS_%T(i>pe90IRB-qO<(DkT`%)&`Z4|b zVx_iEVKtNgeSb3Q0ZG{2rc<_(;>fen`oyN`w!KK0-@hbI9}@Q~szuLhO4WSH5qILr z28p~#ytQ$)6w5V~MCw0*{$cC3B=oxiCx3DlMC{3Zns%njsY@5(e-ad-UQNoJM)W!* zp|@*hj2=v^-~;yd_EYQ)5z>k454-L^zPwMx@ijjeXnwlUo}lyulq_qN;wML^oJ>km zc^y+%+Qg-2YW$l}|FaYEn```e8vo{|__J;N#Py*;Ha>+L zqtQx0i`(-?`438xzmb^#&c7=uwbz6)o91sM!QTW*y!@Bq<-y1{pDO>}cbb+zn56uP z_#<@w^ECdlruegy;J1(CBk?v0zvwYR47rYkU_-T^eu`lChl#iTUZ*P9OwxY3CZWF+ zBD#E9Wvg}_HR4aL$4zwThr4`(vSEX2HKiUT>H2xDk79Td@z%F1ln`D6 zw5ffYorHd)_A^1z?=n)8>n7Pa?T_*|##ig1vGx&9N>H3Ynt?Wfh z4RZu-vwD))n9u#zUQY2gZRdOAdWv+HC_U}6*ek{E@;+3P)c1btDVt7Wd%x4BgYu2n z=<`5N-rh$i!N1tXM?YSzN4xk2#oZT33A+TwP;*ERnMaV zjI|SJ6%`28aF;dGPC~Bkq*_^!)N;IlMDkl)tP-swPcgP&tYp~_3`rVA8!{r%QQ`{gYXmX(w&^GYRN0y{pedNqhn~}*e3m761oQ* zeO6t_MveVC(a`<8H*|9~-FI}#gF@FikC3R3E2nC{6YF=jOn^~ob}G?zJz=$vC87TITT7=LUw?yult0>KxXaEOmG2)MZi3); zzLa>n+)57A;7`O`|9MO4$V((PZjXnpkxA%J2Ts$6;;o8)mrk18638Wy&tc0*LZ^2k zoj++h+lmxhlZD;H`rb78_;N$~`$Q9I-20+Q0 z|E5x$Gj+MUKpITT@t7_ross+?y)*t%FUQ7z(g(&6AH zpskMa*zLqxZTLj>*azN7E=%t{z8!Q0UH&x9_l0J-%M>!SHgNruj$J35gu8zrq+cVp zX}yn5LU&s*k?y}V-E)QR?Ls%){Xaw{l@IlA(@Sh0(`|ZcJp4zss=sYLm0a!;;*IM6 zo<`+VcC&vYey-B|JOTmhi>0x0N-Ug(B#|>;WMZvplt}C$RL}Z1v4n2`B6hAQG5OaUnTA;ejP>gh z#qwOjP5PO`)>C&kYA;G&?GyPOp>w%`T#(Ols5g@L=p^{t;_U@NEzzyyJdHoMDSjs# z-);{o|9Lh(+W14E$~FL6GJAU1+I3eW{*^r)8P8wK>vAoUcEU->)sY{|dP6E+I?+DD zQMk)=G9vNFG|8`vpGa#BFhqS!RMYmf-?|}5zKemBKk;*f^cg~$aSqYsa1J?GV)YrG@4<)Rf=o#75;+`f*+&{*(7A={8)V%KO)*_$wRZEB)AuO2_jbq4B3{ z{GLtmrzXK~LFL5p+i3hu5N&%K()9ULN)bex>#Yf)dAHcMm77UGu3m z4yX09jJ`*s4JuU~C}cNl!sEr9EEBsf_i6HU^e>#q-`triT>>8~yKK7efEIU3ZLIk= zHRQgYkE)d%_sO&#eUH~Q2pmVPT5^i*kM+jxNc%|L0L9_En(r#)OmMcmtXa&pTXLII z!kwJzP9HgU#Tlbwq2v#xd*t9A?@7v0JVHGrl%@M4@5r*s)m&r7?Sdox@^tSvax_iu z@8DDs|L5Ptxwjjts7`pTfY*HPT0$s1Y(n-T(RZTm-lXq)!)}l2H97M3hnj)n32~bl zzxkm)net2C^6IcJ;ewqi1G0&i>qOn_tX7Q=#3slic8kfh@8rgmgt7;D0aM!fwBBQH zyybe{i{guBo&CBrnq6F=6LnA6+e)2$SC4jA_v~r}Ul*XzF5WNsrWL!1w{w$%9Cni{ ziToUuF4)1r__~6qTqzQ+OnpZVgzxK2e`_phQ+@OtBlsQ>-WdbrKAW=2RqE2Jb*Z5( zg`155>%D~=r`#|w+&K*?Z3+*H%6)U68!Os)LmPbI+c$e_zS!lhiFm!$M_m(Id8_|u zX-t1s$i2zBeN=x>mhaRJp-A4*`Y)P!Km4Mk<-0XeF1?p?+A9?|rjmPU>UJ-;+g9I` z+7(7Q`uP%=eoi-wOcG8;UM=OFwnjwP^j61eFu06jhq?ntooc6?zHsSNFxb50v<>jP z8-6cQckXyY>%4h?_zHh8X8sqn0hRj)g?n|rESz~kX{z`m93yV&4{ee=RRU|yDS!zMlmv<0hMYvcR(4b_CeXmT7lu>TGy^ftWHT^GLjoO~Tu#LRAR95X! zg-|WFi89`YKu zoh$#`n)Q~b2^^nHCZ|f&gdF*IO8!{h5|-PA$v{JHCY#qwQSJIKoET znVw1NccEv7`hD3mU;V!BS)_iKdzPu+$35%$m9hm53R!CQ_lpf`Roasa--4fTV7kMxcgR_j_odlp}1m(HGnxh?z+TY=u2g!4lT4i9w-%?jSg}bj^%-Ro!s^wPC ztS^)z)P4$j349dn;K26OQz9FLoI1Wdy0bCsZN4Z$ewo>MyIg|%btxC^$f4k3MSR~x zv9(;(OO8?Z0KU}YtyS`*PX(E&GtVo&Qo7scExBTVgtAydc()`}J)ofGzz^54w4QKZ z!Qs;Il-6&xQZ)bhWvdi#;TofM91TX+<>dLF6KvVn9-NC%@7mTB;V&dNSm;8R>sQ7KC-88y7qU%?%!X-@K>h) zJ@z(sHKkE{-CU`9mU>w_v0V(zQTje+EYDU-yD-`Y<87f|zNFncUjAJolthbj0g{Ln z(gq|jqF9u=haLUo0y}yj%_A~-hq0`t&7U$c+GyE8moEDkv7J3=@+?bB30Lc{XTiA zIVE2jC|9S-t825a&DKpp8f&<0bH={bxo-q6Xk?8X&p-Xg z31;vjlFdGxchBm$mB)r^j-&?KbL)iM)xiHd4jTHphJ(fx+s!^4Ab*+PO zejT?uYzAzjzj9&^;M|x03kAwu?XR5L&6?Lsl&PAch@pL<+%~lG__s2&vHDk5bzqh{ znv|$eW6PD&pir;d3N<&bP$QJGO~AO$jO)=rrDQ84Ls74o9%-%e+gdeij-4zzBlI6x zpduD3<&lWzULm59!F}0QsMl?UT5c=UOk1IN6GtiF!kD40DsQAsJSZ;ulBiYx7nSNX zp3C=+Z^%1U_4l@0GV0~Dp(@q~QM(N0G29u?@w+G-pwzaWjtF`Jt8k{T7m_B4?043v|my(d>3q{IN zyQgg9b zBX|<#wTyc%xEACSxssv>-tAjCLR#+AICv+6HZJJEOLwgpAY7j+oo&m*DH%rXMRYjC zPq|e(DKM2-I}%xQteGO|3+)eWGUl$LWYNuvj97~!^p+~`+SiXtpEH4Bz%Fb4bKJ4_ z3=yKV7s@{qvecDJiEU_#Y9}LbR%WW25isqnjK!+H9B)smSxDloW5iF9rYT-YtPM?2 zmOI|GVvWgeJO7ijqT7{ZCDkjmXV|potKX(=NINT$<(N-y%&{sjz&yPzI)$b!IUwJls{3N#ZRU=Ww}=HiVoe(@I9d{MsQ$4L0nb`7*E3Ul>o)d zr+pcUnIQ5#pQkB*B9ZMM4kxhv6(5T2|Ek!PitVUTYht1rvAvT!R;=q^;ys7WRcR@q zzV}8Jf#EY<&kmO>?r0_Zq?MTc%46c0Arxz-45P_TCg?ZQ4i^`5E6=q;+AQ*dN2@l1 zV@Om|ml+Ie$l2Ts)!^zxs{A#$itJF5;$J16sV;UwG@;Zx-{!GDly}`d;tTXEwiPGj z`g)icgnqt|YZoCvjNlpM<1<^!w_HCI%%l`avikAlcvcA+Jv-xf5y8_6xh~MgEP9Nf z6w3TLX;XO-GG23FaS2SwoprEa7a)P^psrjtjGmSDoSrXjG?<3x%ZIcnBUnNE;G;r) zT!rl_?b&~fQF}TWBJKPfqt+k@eh;92K!ir{RV*e@2tOj>r%Gh7`QioIZvh0E+p^Q7J)X61lE4 zLwfUa;`t8@?Vo}nQSvGB!E(r(B}?g3?K??_5sVz*T1S7)+j7}gO4Uh7imOZ2?e_M4 zsH*?%Ij5RrBlxY7{k-vzGlCmXmeQW{vgD(7k&p?~sj6%AY37VX65h7ZuUh!a1*Dhy zcTD+B+}Zo-wP+p_Q8by_>lG)+iK5@@$qk(CM}R%jtIqJ7Ekb>7@tgfKLVd^clNIV4 z;3qrOcT&_n8w!#0K}D5^h0A}Fw@vRqoo`;PF$S#in{#7hj@b2t7mE>!s~Y`2w*VI$ z<~~}vQ{Fo|a`kIz(k_P89BFO@_uxDj)0unJZ>7G~Tmmkm_9rS;x@mDoyZwo&$=uCC zQ?&hQP!7o@N7?+#&D;FT6(gPm|tb@(YY zs8arn8d-G|?iU>t*)`_A^@+JZsC4>-L&DEVwz*&V_Wz3e`HjI&$bApZJ>va6^>9Y8Zyh}r2+@z*)jOp)upR}|5jM`R% znn)M=K6>BW)QK(CD8z$t5r^sZ7X{JP-K$$XqmV4##}I0b2W;thoYvC6GGH4bi8ZPi zG(BJPj4P!jXd_522}W?ulhO;c;8r{;#x~aOOP&z*T^|{EENLlDg&0g9=Z8ekIrl0x zeqwNB)Se56+_pMhCcT(58CKPn&Q_+qFn&FZ;N65|U4((8o*#3b5g1L9l9HP2l3`Yc z^;>>=O0^!9tI--h!(%ij=6b9x7owoE_@HMq2Cedj)|xlp%S2;GYvj#%^P#$MNh@Do z9lAMtG+k3e-+M&~vA1ydzN-0x!`94~arEC}Y!>UVE`D5OusL!WaShdzU`hTWd-fp` z@e&w=zxt?)^@H!D?$K9@%d${u?VH(v`9r)bz-tG1E#fWM9!n>cq8$>VnOqIpZc9JE zgv(L-(w^5KoMI6U9Z3(Klvp!GM*58-Xwc#z&uPzPm$wthBt5a`$G>M0gOD0{q;w(YraSgx%%Q}G4sd-HJ+Ia50z&oZrSa7 zkgIu}rB)}AMWSHliz~xN18u8 zCqBZnc5RWtNzcd|l4f>1G75KVt9~-9EOeE;4b}Pzi9*I(C#!i5wSpIQ9|lr6Pt0j_ zf;Cnl?e{x$FRY#rlM6tH%95T)uvj@#@^8>HhEmcgGmIb1n`-7&9=|vGVa&5y#-fK0 zeWb6)y;4_ZUWtX}o__L-JW47Yt5Ju{>06(jDqXdXXdw~r5)m;mE{Wc{^@a>iDCrJ5 zuEYf5tbdRe`AsRYo;6{b#Sba+97yHRqjr?piei6Q&!$Ov!|qcaq3rJNe`UcIa51=p zBf?wKmNe-ABPIRphxL}sb>BdQJr%N5+?!lxp~S=K@n(+7_-Z^wHH#71kAX6BSMg5S z7d$N}C@&?dxhdFoHD}lA5+hJ|JZTQ>7`G$4wzT7^8^lr9`G-eBr>4hF279MdkHy zUd9E|lj!H1c_pNczw#g}UjER`pCn$KETT55sNj1l$`Q6@&5tX6E53Cpj`onahV%Baunlr?7yG6h9p;{fz7MkuzZDiHcat9o{9o?;G2$U|4ADfoq62~o6Ba4fXEmX2jhGvR2 zxJmLY2rFhvdApVlBl3pgyjnF}>CtBa;y0^zgDyi(y$n=vb$nEGDZ$8%05ut?Q3pNr zV2zr{jt$FD+{7^(mQF^3^ajQJoM^BHlvpKJ32WXKiKg(-GZrCcCY^DcNHXe9ha>Xg zetlu>(r={Z9#@mNSm@Y1p*EhnLpkX|u|0Gxmxp}cW^mC;YN=Sz&#;-rVnuIqiJ=+d zU6w=M>MC_b{uU+|lpTe-*z4HHk#W)J$P^J{xM zG_Ux4E|y&tO74Zy7qJHJmizE~C>x0NJ&TesSdY5jUnjc-WLyHv<1}@F2c*5@Bid4ptRu+A?4EeF<5Aj$4=4(ovT-B>|4pH~_Lsc7j zPG~?tPrmL$kDDz$`~(n=)X+!0C)hqV9zaih%|ABi8zzQtPXPz#JGFC00#Fw&Y7JOAKypMd7WPGc(hJ78qB_3EX+CZx{ML@X{yT`M(<|M6Vqj{_n(hQYpiDCkxu`!poiTR{Qyg$Lab!zJr8&Sxy@%9s8THieH$J}L+Z<(2|+;ue= zn~De-{mPSNzo3B&!s2qRA`;8Ot}&tySSNihC2-BW7-@@U*Fcl`n!ptOQl6?pm2do# z_Qxbw#$f#L{;1P(*ict2n;ztyiuFvY;kWVxhA(tXje*4TUxts6GL}$g)O}BVtCY~{ z+PbM-0*^)A!&gaj`>cj3!0^6W#-FfMFSb-zx&yYOo7MKEITR=C-Zm4SRjH!xLu{h~ zsJ06*5x+pXiy;=Hl)@I-q;~i`?9%L%@Oa6x-VCJR_&r-ITzUl>q-`~ zJQqBdzyR}gwP-p(Hn7P4F_ebAF?E3e4tHnXW4xtc$G$dtKgu`yr;+)P^|^%PSs=lw{;_X5UF=>^ZL zi(c@$tZdSk!qO#PK<*4%xelKFG+wEJsCzN8H@n{m9*biGLs#cUE(S-H%lh@ow3NKn zwL6U2264y(hg|+5DMEIRE59lwC2u<#Hakk=-}i6U;cs69YD~6vG-z>!bJgo zSdoN9=Zf zD)?U@cJmw75EeoCgH6_K@R#${lDX95B{;3JPLLXCr7QM1B4jHqn`&?Ibij=`3|0q3 zMSVQHfSTliDTW+GW(z5ebfc_P@vgFby(L|o{W4D>@%~Wle9&a-Ts@ShOjp!>DoLh$ z43?bnQ0*8-D>8{O2G3BIX_b!s3W%)n{y;vZp`9^(q(fl3ZE{L!%{rz7ZWW+PSmcFZ z8m2eY@5q3{{Z;>!2d=VLR)b0(g5unNH*RVJ2l5$1u9RUpZ|iysk4K4GNJ}s+E_xK8rPJVnq<&Tn$SGIxboT?rv!79y|3MXE+u};0K zwEmlPp8VN)SF4oE!pmzXA;q%PAIONp=KJfvY!-FDxS|zyX0P?)BjWzJif>}D%)O>e zb6fLRb&({)l)fkEIRf1T10b6vF#w|SiJqD2UuZ$EnsO+k%cL3NH~+MZT^5yBc{=b^ zMD}FQzHqGk;i5Ygz=r}L#*1`g=FLbnHq>Ve$gc%keW5?BU)~pssYV4KsU3kUhVY14 z=tnA7P2Dl~7W!{N-37xu9is04Krl`Mi3b+0T zo1%G0qaGm)WQvcK1l}B9Pc45v-Ib!~%WjY>AsZPAdwM@BvmMOwQNSI{?(=4Bh=(D^ zh~Wzt{S~xQwQuol8O+ql{>W44kNhZs_4sc`7!Haytd?t+PvJe5GKmk`@gVZ@mJ$33 z;*4<1q+5oSY-qCYmYs&;n@Eg7j8No#^EZh-Dc!?*h#-Ys+wK>8*L@ljF+$sB^dcDb zvs*vvUPe3do5Qojm*aNd(3YtC9ikK*o3s6)lANeJ4RG~X%-;o?BJjrIuBiJu+yY+V zke^g}mN)niV+sX#nNE?P)W~FFmHj4vSjilTTp6&!5&QTvem@vB+Y#S-XJ-Z;T$<(d z4<=Rxgta74lGc=@wyw-5Sr@rT8k^gN1QNV4{XVF7;|J9O5Ms|4XJT_wtic!sVPI=tO{CskOCap*)|%`~-{6@tXcoq)&aY z;k7PszSKju_5QIV)V+=~g1a)r@O00Bd0Xi3fD?7MV9BDP1QW}OMc*9W2g;QNQ9T>F zLX7Wq{4YxMxF-V^Wj;gMF!m8If>GT61&ZI7J#+Ytx>w4I0`W z-YTkvASYJ-ctn(hJuJ1jvVt*Q=t#*r0A6PH%~#5H9;<0gQp^A4ya}^pd^1s$(y%{` z=fg{D>I`Ga5A|PWkW%ljX-KdCCadKqE!TyXz9(j-u-*thNp{APRAb3tj9+~kEw?nf zZ=?8|GF>fwip(&Mq4$-}B-Y2k;1e*2^&bNS+V-X5^+w?p$4;Ta^Ekybs@7Mjz_(nf zBt}W1Bl$!rJzIh3$)w0PP(2g)?6HF^H-K{r!&ZGxC#YmwW{zjT?c+JC>Pu62M+oCh z{({W&$V$veXV&2?*s(e1F>%cAx6MpxO@lnNlj|!yGIg#m^tCzHQw=Af2%h9HWEA9s1xeV_>xQ@4cM{R#I~l&bKcQT7RnC1I#tCs7-XvMoeOSad`BTyN@rU$`Pl z76RxC59@-#-RTP*^pjVX5B3DwSiIR-{B!Cj-f+8%3Xk!8e7M&OzQP7xm_K4?;SFu} z=KTOy0&bqctb0cFUdHT9_&{(~{kNTbsjIde3;mJzfiLe9Z|Dbaz17K^`h$1N5pU{x zp0}OAE1j2zGapm=^3eT-c~)8Y@%Oevj{Q8LhWZ1YQXBkX+#F)IM183ZsR!^|OF}>T zF7RiD%Cmf&3JDdrtB-W@g~n(5Qu!+Hu;plIQhMr^P)2A=>cPApe@T-v8zo!ladS%x zS69{fO}j0cFRNyz_P5JEt~1!!BJTNXW$Klu8712f(nk)>@Xwc#9OJte#c%S5+ZFr6 z=}Zr~?>+~8t>2yIPrFZ;X7FwnkMUP3w`vifgR0L`VLyoyM&ok{HW|D7!?Y4n-2C!! zG8pC^)Kvaw-gl;FF5prl+BjTRs++ph8_$r*x`S%*d)VQkZu8$jrfSXO+G%1P(9IUC z0;-s6bPRKJ>{l$dBd^nuVm`(orKo#*ETz&((X*o~Vkx7Yl<^8@Au0GyYJyWW^q|`I zr>8w(;wIb`+BC4NoV@NShI!6MfmA`_6{Y5I92YjPtgAoLX~2zjBZdzjzU64zOl3ycI_od3w{pCBb^c1NQNFaG=OgfZ zXi-@s^(t3OSQI?$^9(DO^_q&P`>hhVDDzx}>sukaabg8i!Y!c;ysrwQycB_Y1;+Us zQZ9x#{Woijl;d081J2;9jNeQ+7XArl5frWowzFengo(=G|7-`s!zUhH1)L}w+Ep$9 zh*i8O?mAL@X2-?wQG$!o+aC_dTX^&%BtAf_m^0iX8P14GpjV7v)SkGm+VAjOj6SAiq=c3q7&+@xP#OA083Y==Fj;B!RN^l1IRy__)YE+Q^YZk zxiQRM{0x&d*lI{*8o^6&O=X%7e{GKvLe(le@l5<)3L=sh4#ORPx{u~knO@^h-F_+W zT+Z=@*46LFCa>G_N8UkYZVyIAGcz0;FVV$Tv7Tu84jtrmsD?b19y50jI z-q-Q-Pt0^NO>#-ZgLfWr+eH+wM1POlRE@~I4Ea)H?a5!sbBYX_iTBrkmG0+srSv`fs$%00Svlu? zkm`{mWqF5K&1Q`<^k3`Sd+3zss-6|wDqV7{e+)v*9G()oI^A3NF`e|c0}6kc(Arx) zHQKtWdAM&hRFYm+`L5i>G$Oo@R(Bwxi2?~@P< zixMk;%vVYZG1AiHPjFT3lLfCyzl>HgZjm3}{bQ`jkj4mJD)Ysmowl={B}ylaW~v63 zpVY|dz&Q6etmqEyx8yC{Wj*+ZG0NQxcO&ny!ywj#l|RZyF6k*|(aDsz3@<`h6|X`V zgeQYCDIu{H`xl%c3a(8I`!4jM+6P2X99byXfZvQrZxI4=lvp6jrQ;XLb1o98(@XBZ zf@rAxMEj1qhk*=4wPdzoYR||&;6?Odh(<51S(EA=T*3puU`ztY8(NRjAt%Hr8wh=c z3l;K|O7Sd2*KmD(X7}I31k1~_bS5HR@(}bAWAPfZJiW~HXGk|Ajwdq`RSyXNPL4xh zpLeEV&0FCe70Y7k6XdW!a$sQgieMJ(VPa4Ur5@nL#PbC694^g)!be>={9gE)#A)#<=q zV^?jQfQpSmSiYqCAmIKxAqlha;Nq7I>R6LjIoYelcpl`&H5j`istBKGg``i#B+s`iol2 zSMB>GE6m@Zal0Ja zua5uU2Cc|qlw|B2dj(QfjB&4|k{6Nr3C1;~`YDAP0kN6NANKt($2enqVTGvcF(MCV zj8nUxrC~gj@d23xh`9pR{BP~afaapd?OE=1>^aaUD`@Kupd#y8_E+{>+B}z;lVpvO zgvBbM7>|ZdJ@PPGrRM?H`8?y0d%%;gmq3wvzAzQ*xsdFbsC&QgYez-hoB4{oOmkzL zDm_CFRSNo@m6C8s9`}c6r!wht}nPm`h%#&8qp$*bxcFhjKgTHJ+Jw_p5KT(s5V8omY<5v(~|(SIq}@Z+rQdx z&e*QP8v=vP`9iRE$CUo2w_BO%9TO9L-VrsxPhDktdu%!8O)Jl4CSVxjgUa=cSo}9` zkP(Z&K9ZAH?@jY}z~Yug9+4WX3@RreMkiscBF}LbcgQ;ip)E2N;&^ESE#?t~yrQV6 z`L#Z*yi-jI&9Riv8gZe*AxZPJ5Gwte8zlg zq|xMJg(Soldy7`y!NgY3vrN^TVCV%L_BavyiXBVvbvtNPe#txnqV2>4x8BF&W*^U3 z2Ae$$jodCo=yDrd8n+BCg{U++HkJudI~%M5$QLRU&Jdl>tO*v5 z$W&wYgLH;Qa0>sT>X*Z?wet&@(67W_qnQ{96FgVky_sU-8qGu>;QQ)U(`)a+C_2s^ zB-+|1EEDw1LCqv-+8PmBY^~5cnuP)+WeX%+wEuR7AWAMNQWpN;z1Rt^*O3w{-njf( z-5o|fn$eEE@{Qnr(qMKt`&pvyR~M+APr*-#^qJ=jDU{A}j}esl4;gkzZX!6zN(2{L z7j<_8NQP$5Dww%yWlSV08LQ#qPi*!PfM6`*kctRQ6xVJBkus^?lX2dkY4O~yKUMUq zK|a`^0wGZdhB1sgyQ?^E5Rl21;Q}GU(Z>mx9d}+rE<38u8c@3@(D7zn?(6WYL=+DnGTl1)CIbWtn0`?#2^`|@^;pV*%VUZ zq>utbA&d8&gq~2YV!o+B&QkLm%Y+MiLg^kceX~ZS6O9=a=`$XkjO2{kAdxv?PfZVhp zqZQE{&eCq?hwsTLR`dU`q#kOZl$rHb2jygZ1@+R(k5$Ht3H!t8LrTNxL1X3k3}a<+ zs}LK9DJ7H9!#p|83+BwbJuhs??lL3z8i=rQn5b0Ml$eakkp$Vz$?9b17*%hBtVY31 zMrmkZ4<;c>Lbv(=C}#Wz|H81WS<5y*{@=s@TLH`Sp!tG$B1Q+nIN!$LMfC)X+&D(sG|2;+et~HH zE8EUN+dxFIWa9c(N7NlMD%KlazqoUtQe#h%5A&78Y9 zW=y~Sj1-PZ3>LWW4;fcb&hM6TAQ zqwb5@up|3EbNu|1OKpl>uN@#+;!0(zBb{COiq)X8vK*IuL^it7+-pwAhf)V7x|Ma3 z8niUjC(~G}!DWo*7v%$>LuqIT!U=kY5djdA(fJV0joGvKNz7fcby%2S7A}Bm zsGFPgqhh*D_7qT3hD^JBbjB4#m9gS5j$c_k(?65=DL4$qRRjcVyu=4R0e%F!TK(#g zg!K$psmL-kcYsK-XTOFwEasPEGwd6EBTuX~Q*)%5GnBuBFT9=QL29>HZ8{(vGs2Pm zasQC%slumrgC$nTXO!#{gHSsG;%pMOo~%-)C{)GwzG>obu*TNFVnO7e_-pd*4{a_9 zT__$<@=`iMr3Es8U1JIzUE>q`S!OXkPE{8* z0e?+r(Uv%Z1|CeLUIj3MpHr)&xfI->?=KLVdS&}G0jZgkk-}AE1jp7)%4ZOtMzG9uEeEj79D^aC zFI7$T;Jj8TZ%rkeGV;h4>nvu33rqZTxlF_S;y3!QV*UM&Hlcd9nAb*?wIxU0Ekigyx`P z+>@0%z`TL!6&c!-QI3}rv}!#^O|rCxO>k0a;Qh^OQ&3E6zWuk;}3UH!LQm`#6J)udtD*)I@*cX(E&}F--%!AOO@e zL}jlQdF3lTCCeYk(i^%&44tTKX{dh&LG2;*m)S7k$*A2-0XQ;UR6J2GDwWQ*?JaEH z$z5yYzEAjGk5A2jNKZS+0|BL9^iMOmWIL^I9dM10oaTqFwEn_ z3)lkvs|Z12WUfxV=3U}fYgb{E?Hz2na~O$r0>J;`9muiHdp(l~ar;nH4`DIaGKh!3 z(T3|hlWZU13yzfQ__&Wi#i^WgSZc|-9+x@Xy){3KUp88$@SBhC`LB27nnA-}P>j{moE!I&}Q zLntaCqBBS`OEm35%b0#9{p}%RFj3dAXC7zKb>>t~QZ8YU1dKzRvE3cq8fYmazS@yW z0^9(hZh27quSshyIbsmBM={p8&0gH2dZZ!9^?=LmSw>I=PM0pI90zH+;&zB*G@f7U z+T!1t|6(6uYDr;LjxoEH>IkuAdFM&l8+9AC8<^xN4SnyU<>3nA-aVEjLeV`RyLH9G zkZWUV7s?5#aM8SL)eOc5+n9=ao@K-M`kC5#we(!>31wHdPdP@pg#k~oQTwW#=jf>{ z>vIGn*D~5;evbMphFz&7f20a?t>=A=8Lfzo37VQ9h)V->4fp{{}?j zqdq|P>myk*cNCwm62p=sxc<&4zsJN%QhfJb$RuR?;QFZqGea+NLfNq?feRZ<;GhGx_sYgY4RC-015o^)eL z-;A17#WlOrkg^y5$7L+Jyk-4SSIhPG*F7z3>WWo3bkxiIXA4$RG;Y{iTs#BoD~ZjG zrF~m@DN}~oH&cEyp`0a`YIMf0>BVTJHNTR;(39dBON!gN*4a_*mdV_NDwsg93AXS5 z$KJcgM_pY1{|U)TKyagGHCn7uLj?s(R4j<8Sx8_bi>BN}@Pfrsim0fGQZEqPM0opl z6)#n^wzah?wXN8y6j3n&BzUU`URy=5UUm)MP`S(gp0Anr?)#mf{rrBP@8j`%{Qmgm zq3nBZXU@!=IdkUBnKK9I16{M(g&jiYN~^Eut`u!F;gi0~d$#T6Y#E z-s|d?+!B?z8(uQ0#QE3!v&&~C-U~PG429=?z%=5U+!M&{<-?VP>C7<^T76Ix#>5ez z)*?1e5JpXy);&qNn0wftH{uINBBCk5iW0hu80tT`ac8E!RHQ>>&vG;_c3GOx$`-WM z=4LT4O&(J^_dU~yoit)B;=qzIrHS{dT6gZFV7(2NweAclI7{+Uoq7m#%z{BDlrAbl zN+IGz$erqmD6T(15rY(w?OKEj+LhQ?2wt2kW2|Pnt_!PWefg}Z;XasNRhM6*@`;UI zu)ShlG?K+eU~0@6AVF-H>BvJEtM9e$+NX76mu@SuYW}zLj)P85`DrT-_7?Dwtl3Ik zEUCw=;RLJqC2)~g_~MpKsL=4*1D?; zJ(2iNf!`TEKm3mVi1_$)`9Hu%+tJSWd>>3YjSTC;ci@q{DAzAnE%@K}%e|fOIFx=l zd~XW*ZahLh9$Rky-{T>w4)%xeC~MtS`2To(8fN7B<){A#_&oA0_#E-Sp_dOX%;B@{ zrvFXq5Ks0zn0>l%Q|%VF7QRL$Zz+RI*u^n9^QgG%CnSjB-L~glFC^k1UR`f{hC~A13Hqknn%M-zL z{uF1B!=(yoSrV;XY6rujPX>xCp~FiCJFh1)`SqLRGV^Vidh(QSwu6-1mNZoW4*ysU z_jxeawf{xSOtF?3xUO9b(>oAI%vzXU$Cr$G2JW25tpp0^rK&b;AJ{fm)u|(x;I{XOez_mY71Mm$0@a-YY<4 z8;#g>$yDvNO2}Q@#pcEhPVvwp`#nJ4#rAuU$|l|`W;nDoR@oqO3>NF`AZ@S^u|~m| z4R+xSl2F`+SkuOq*QI+18FPz>QL}B4`cumjf*A|mW95(Vt#z<TvScoQ+_uX)MD3~msiODwLF59mxtDdF8W8p{EQeP<-oMsN1RgWm+Kon~f-G45?~Y?c*Fw9hlhOP@f6#n&1u8{{ z3ji_QDiX~QrN3@FKhBaL${sI9d&-f z9)S4?V{Jm0@RC6t3g~nn+=!o*-=Tnxp-I?>gaW1&X@Y;YA6sbQ&^9ILWY)_b;_6dt z2ElNE5@b=8O@Im$AB8EW1f5rs(2WYZLSkM8GyT{iBu6i{-o|!!?wDo2_I2)%{S)PT z)hLKS9dyh$i_-#oHr656@#O*e7<7L@g;oZ z!=lzb1ZHlr=Cb{P#-!Z2n9;5sZUSJBjz9=Wg1pPtF#yz@$8Q&H=V0_P@!?kkD+x+FFgzOu7* zN0-EweCH;E{vAR;Jru_1?5qthekIoW@sW&UdKTN-sI$}A8D*ls@^N+ky7bS8f*oBl*S68EPy?%W-2zK>0zlzh&H_TE}ttYLZ6x@fq1E%#>f=Z|MY zjt_ncg`2L>4sr>bh3*aOSMP(%ITe)3?!In$5(u>(ELX zZaN@PNBi9>yT~hhwxBT3}BIaJ$)`6PZyfw<@5_FwQ+3u0Hk&9u%N9$9e`<2 zCNlJT)L^J@2B0;N!yjpK$h0;+0|uBag2t827{Vxt+-J)cQD(7vTVzf842onTr4XZm zK24QnA{(0(2Drj&(7(1woCkG5Z*w|u~SyReuEH%BHp@q0#bcPn; z+?3NVE@vZ>)Wke%5NCZXSzlggoIB2lpbWAW7QJIrYN{oygrBLNSLhT3gZntcuz5Z; zY}H~#Ijf3>ZfMa;b?cJ*hTE^}o;Qw56}r^?oN#0(9oqLx4Z}hmo#3_?i_4wkE4HGF zlX1a6Oy!?pqL5fc_irTFmcYGO?>w-he|81AD(O zQMu#Lee?1UVQ9?#Yw%g4=F!Jx8n;CVwxv_euyIVCY>L8c}NyyS4+@K=~co1;^ctM<- zu0f(YIp*Ffq5rDh4M$}nzu6nRp@!B<e~{-ZDhtxzsS_nXf_mzSWYs=(};F$kH9n=b%jF$OAYf-D}1f zd$;jX=XJT{fasks#aI4kx(8l%7@&7c=a3k7PE;cechldg9GYLoM4w|x9%_dukddob zaP>AmcYJvE@Muv{AuOOZYeuB6C> ziJf}#huNN7*(u>516HYkR99zu-$1i6k$%^RfbDwIIJ>N%exFS5HO$kF)6ep!ik8HW z53CPae*I+0txr*cVd~TXbgU>;IRdS>2AZ%4kG#27XO~I4-oireq%K(P+1Ljhy;M^|2Y&Mn zlw(VbgTaO$WBn<(NEU`}W3KV{EZ;kUmG>C$GTt35c7_mt2IPvC_QkxfKuZELiKTCQ z$$#$V$uuhF{Zsq~y+pj}z{iQ!2V(#$Cyv|eK4dGWda{G6|M}-YxLbpGD7A8C^58NXNW-%J2d@05X)R$cc=gc-LH3r;3*BxZAi<#Cgd-^^z?= z1HZmggx@*o^fD0az|RnJKQVJwl)6g@!~4ngVz+KW#oat7bctb2-9R*VR!^p%_?a?w z)9~zEMTGo+Y}DEmI*ky$&<`eh06l_CEpPUWdZVcX{~(;@`U&ZsPi(O&zV=s`?`AyI zz{E34O(QJHdLm_F=_87)$9?&8^@k=-&cEVJT63ye;~*7;s?ArlsI80GlNl-16qMH~ zxJd=SPxgIs1;6hVY=73n)4aJv7rlMH(E*MF$*izo=W(*~(Qzi}WRui>rya)}{{EUc z)>{&%CQin$M7M_WwxNYWFXo)aIO@La&|)7|uYQ~{nmozMhb#u`m*y}K-vYJS)Sr6F zM7OW%Krg%zm=#~vLoMt@|Dkywcc)H{yVHwn-Q!Y!+#g@23z(8o=lVv{qVR$NSW7fX zl~p?h`!1Nc*`ru%Cu3Olb1ekP$|^9*8VbLy?3Bem06%?D*a_sxn&d1d(KA=lr6t_< zvk9<-xO*REvsS)q4U8HbRu3%=H_4BgcFFV$;0n7*xIL43#xgUVCg6z3?Ds4n?30F; zVQZ0z{2G8}8*OJ{xcP2DozkP+9aboCrDg`8A!6H=)bbHt94)(R+b>I5v`TPRNU)q> zFM@clc-FS`pI9GcB1J6mGFmNi;aSdSx|mhsjwxg+Tnx7|oz=OgYQV;ua#snITRDuZ z_?aPK+MqT`%ZU|&ZAp!LT8|oZ`P1|3Ors3Wb|)bOTH?J{M#i z8sDkeHn%Jz6%#wqwuBJ|)Io{e`So%B?Na{(EoNqeMzx;`Uv<^fd%EXMf+^bvIgqcS zERS6p*2m@+35JElM_zl2o&Prd(Y?}BC+x?BOQC*38@9?x$Q@n#jZ+s)qILVwx^pU8 zY#r&3AM3n6MaRPSHIXL-q!S3oTLiSQBW0C=1vh{L;+8ak_;G@UTNod7GX%qRvv z^b=Wg71OxdDc0hS6ebt~o`kdF=+Z&~W3trZPeHRK=3ZJ{Cu=Aw!qSNYc=IntRU%>Y ze#%|nNZ+vv${GO8os_*|jlryzQyy5ENe0QoF<&q^pWG94OFkzT$SSVjiWSONEVU6^ zp?7t!5B4Pf!7rxUIBamMO8I6>{V!(hDXEgkZd%!}z%2gz7qri_)wkcAiM%os3918s zwAzfa4!wy|$-Ig2Ytz_E;LM>G9=$|Nvm(>Njqu~RdnEU!8;)#0Eep?33=+|cB2@R+ zrmI-_aF1l%8M|E9gqxQO6DGW!rry3M=Jx+W zn-tkbon<7>&>^6ykr`WluoX^nmcwOJF`MjR#1`yS4rZ{eo+c}tQ?)f7&KY51`+AH} zF^&f6PtaCYi?MFxuZH^?BB^!O;MYv8Fs=q+gXft&5cajEY5nU6rk`T6aZl!w4$`Zq zUm44-$#DXl$n1ONX&5LcLyt}789EWH+i$6NA0^$8vjiH9CD0cHvEKyYql0wdOF^0kv{FmDYk13w>F-rZxmzT_W9&_KK==j{mZ`>17(8Q(P zg24Z_gLebzuZgS+U_poJ2RBX{oWPqHncj2qbNhWk%mSE2bUT+?vih7TLSE&8XN9sJ z&OC02v1CUb<}`HFRb@QtnYgw%q|IoV)b6F>=HJ3>V^gj@(R3gd{3UX!VY}{{%hh$V zqSr!kF&XK+>xs;dyVsW1aMaFm6)u)ZF!)4YA*L-qx^-oK{g-jKp{&N)62(9++^l0L z)&~w*b@Z`yg-O4tPmPm~CO#m2w3oiaydtr+m2?RbRD07O={L&$hVY z-^pniW+llMZolk@+BEEx|YU$f~v)b8FozL^_tBdcdO|*20Zu@5aMtlQ0ZM^iD z|Jq$99A3h;{cdeA+M4_qZB(~5XM4;U{yD-%)t;$1dgP;Vk8pH`?=;`6RjY^Z=}LHa zYzX?>hTGzZ5q)$>Q;IYMw)N#@xR^B7fA_GKn2$ea}EaKpswMt;~Jm&Sd(OGt|I( z#nlaP(Ns#TniY^N8RDUD8x|b?iw3n(2&f<5>h2l0WVyL%@E~_saiRr#z}05DMmhGa zcD9BWUtUs8m+=(GR%Y(!naJ}jE!I#J<89Vvy62xn<(pEbm%U=S5(`PrvdK4WiF;JS zV~OFLrW5I2UJOB)!@in|b&wk&uDa=F>A%^AXNkr6g0C{g^V`e&HC=1@R<%2_6sI6B zjhgaYykKM*3gDY=B^NrKqYWRa&Zk(E3s?D^`Q_KMsVO?;6zYcS<~v^uUOjtC)Ge7i zm*d>bAy<6tw1$`LK__jR#c?smO0Az3WAi#RdCLAyYgKs3*2Jc+(e)n|B6s@RfhEuqF9s$$M>)Npa5>VmQ5Re zj;b~mj@E4qz?Z~4cL`H^M0$kV(?B9td?wB7|4PH_-UkLb3oa60alU{>m^75KFk z>xi_#C+6U6RgSacR6PgkM?T!^%0ymznfH>WexaAvGLNb?eyu3(fd*wY%M4jZl z7cL(N794`jEOdJcybQN8NL|t$k>q41d+*9i1_SuANn~h8y1LrEcP(>=%LcPA;nbDp$l)=U z8nFW3mP+majk(%CGKSYbdVYXp)j^~1LQUV(Wg4PbK~B%09fjRj*geK6+~b6tz;`=U zBM>9!*NK{I27lP_J2x>OB%%&ix3oh~+(^jDcM}Wvl{$6}je$v(Sas}l6p?CPfIVgB z>jmY#gjbcZd^ZEB`k;$`T9xfNv4$hsy1A&Jy1a@xQyopb-_tkE1zCj>82!F1% z&hF)9RLwn-DRcpQic(2a)lSM&uKDND(Z*BC^XfMR)+edsGm%$+NPl#nxMMAwzdF#|MVq6}YvHDcy~qh@G5^4~d})`( zlkg>TdXb$gac767W%7dZlGKoxd^c}mF6$KV1$q|7(wn9 zsZ8Ag=tyR-_)$Q8`ZlZ?0vTES=CBN~-&b(qy_dVU{AD8`+2|bo^FzZSVRG%!U z|I!uBU&B=NPR#3{U?nor5bb@?MPNiFPesQ*A!P?1g=GK{UUEfn=iF3YWJa^rdEXg$ zx?zgAaP0q;{3A4+Wk_xEd19OIp?COnJ)#~SXLuF{3)B46!wa{=t<7bR<6`c>t`s+C zOyr3~(Qa>pLu+O_nuS0T z`AONF-!By{G~De*%Lgao2V#ucHYI-6tnd6&xHx)GDlV7U075A1~9%T!-;oxU$QdTLlKw)#*~o}ZmzkUho6EtL%q3*bUc%i@3*ChJHEt{8 z9q>6n;8>(ic^i5$y^K!8yM36ctD*(zuOW@83%Ka<6`7<)a!seZw~eKgtUk-gpg*$g z=EtbWh!!)`AD^G|b4!`|+|K8%e1`klyQKOR@xl2ICa31p4|rN=sW#3SkV+ls-X{FW z@O`F6Y|7_s=GvMb6U^HI6r1v#bNh`7MctVtEDXoRrmS7QkQ8#aHQlb1J8eGqwzCbO zaLwz$$d!tfa`rJG@#JI@fxp%-H~zZ3yhGMe1KBa`oV#K)5xH`8y}+p)M??4sH#iwA z9<2~g>s)sl;G7#x{jr6$iCHmvqDk23FWj^*Et6xr0sLz8Ea!$P@(y8^f9F<$)U`ul z5O&a@vO2@Bzvq=KaUb6Z$T&||h)P)P^++#2 znYx(A=<#>+4(EQxOygBPJR*MXGf`>f^shyPJwDe;fceIgrfS|(U_E^|^)n3gG-sYR zRW=zHRyj@+ZZ>{+=B_eR(D^(dY=~dn6%(&whNUvUg>_%6B{Xn<&|3;T{+(-&8f`nk zEM=|gn&$l|3!wC1!La<_o->AQ8y;-_Z47>~H)o6y)}>S}jt)ps9N z*Ek=bB`Hdsv&HhFg4yClG55BO>fmILDmc;nnA@}e3mTha3^S6`>4Ld$GTG@GG#+A0 zyxwx?yVCL_@*F|4F;-|8S?hd|lZU+4e87TdPrZ2|oxCs6I)sn2yEJUzQN%o8)}!Ch z>Gm?dRRQk|P$r(70yWv28Xl;-6)k}SH-vgP@~RDVQe-y(gR#{n_CsQ|Fin7@bL7I) z)BfqWJPorr9X2swzmRk6{|)`hg7qcbeX^$2UeHh_VND&HEp1@x@E2N%lybICcK2?PQH|KC)XR({(En9{oM9O z>(!llW5b&Np*Q00QV9{?(J6P*9ArwSaw|Fu+Fq$Nq48=ym<_9BbM(ddo|uT{n=`)G4j z>u;{GQ*QTIUOw2Twc*c19zK&!HvGfPU+*=ltbWz`I$*34caJe+d6WSoJyB{JQsg;A z>HrISViJ6QCU_{~AY1Kc>``6n%1`Zh47rN&@a8y^o%1)Qwoj{7ZQkfGudMTUGsQWh z`0!&=605X%oJ5sBqDoJmvhu3gJ{1SV9`%=J-CvHP)!!mUI*iF;;gR!B(l>h13UkuV=z_QfjahL*rv z+V9Im-W%7s|Bdd^dlkftf-&@EQJb%KD`H-U)YDyNEr`2ispb>dvg_c@^n&b4QgUH~ zIL}d#?FSfMWEoX78$MMz>q$<)ak#C z`A$(~XS1m@9E?V$F5sw7-i6MDN?AJZU{iqj{*;I|)p{oj&%HT)V&i-Rx23)cxai7( zTfc}hXAd;X)NSNWUqU%c=Opy830INO5y@vXUX*>S%~CVV zK-S2rk69<2k7%{~sQ3n5lX`ymZmmb2qq`X-azrJ5V8&bYs%`#$*~#WUqJrr^*6cR= z@1SnRyzDY}^CHj)khb-ipwmmFly4BmmUjVw!6Y+ULh(E)7>p$KZw!4%s7?N^o_y$c zf5L4S{H_}BF!rKLIDrI~x2Q1O%nHO7uKvLAl5u&_`FEn^wH%T2nm7W#x2y(CKis->2D9k8I#bPY*MW`-sn6BbtFVCO+C;>zFwt z{uz&;5R4zVJ=S+utnY^Wm96as&Rck4O5cZG*5gmCiYt(O>N*C{YkC+jG2+iftyVB&2h)1<$s^qWC%uk>3@`d^eD{DwYZH6h(S@7h&ihK$I(qs3v^78s3icDQ#>?EZ9fa*$3 zDL&|UGiN$X0NqZd?3X{(1mKY*h@-oCT(iS;VC<8XDe|;c6$?u0d)&y=)~&#!jAUgG z5Ka|((YgjGf=O1Mr07q0eO9?EbI~Id{kj+ZfTp|2omBKQCc1toZH9eu;C65xe)_a>82AsU_<5a+%g2nD;c6BCapw%BeunFm;jqpb z%wvd5pZY2f=?YGP?4V}%Cum@0L;jGMgw)zr1_L8puPvTDuNK{ zvq@`hCbjSeE=BSnB!p*-?huO&)5c$n~>$o`ShAbE?IIiO&7V}z#plcVq zKUykFbjnxPIiEB>z`LkZz6t4f%$yX*??Ao1Z2ceh?@<4B^Jz}{HdCaD&%LQ$maEir zai?;U={i@@&7yQ>r>yF+^dY8->b(oCqGy5s0wWVx+(n;?iaFOcQatrKH}SQWJqbhb zs%3tO*3yd%j|lL$(E=6e5r=<_5Acud{AR8*d9#xonH0BF*nhrG_U;CH(5`1H0uzV* z`jNTuXLLq@!AR6H=!ZV+wVTCrUZV{y{Jsgzx1nWtF(++-4ehp}g*No?aVF;?8ye8Q zOF190AzbWAm|JQ?^{<$;7KQfaYX@nREEz(!6;6t;o9bO|UK?wAjiRxo^n_G2ki)RD^w}(E{(i_`x2lg3-X+v4?e4XB*3>@9PY;{) zubAB|lj%w?-B}U-M?8W-O#Hw-=@K6wzg&0Io~J06zTKxMKmAPu_a3Fkzb$=)Nxw$v zdI!R9Zy3O-Q;t$Yc`ws6lF_w|yb?nI=0I0vIfN{U?fFYh4h2pn`}%a8p5lG&5uNvk*xIX;^BTIRliabk@=LPv3j}xWOH8D^-@kT$ zt&;}b9P*fH%>A9jNyAf}qe1bGrW{W_$)1M%kkgQ3*$pg1D(Ai0YQt0E<~#uU;UsO3 zo?}OpKE2=Wto(z!(8=Fp=adW?Gsnc!2E~|T-f|`OzW1c&YxbsC!<#1LO|g$)52Sfh z?1_JxkT=EJ>wMlHJV<$zN7R=CnUfC~Iax zO4*VFSFX@eS!FX-OmbGFzv)8<`J-X=t!5~!er4WL1ARi7JEBi>OLA7%xLXje-F{c= z$A{&wZO!1oqif%_C{AIXziZ(vDZeee_}YFvU1+ZCI#*)=)l!cQMH~Ly;F$0_{p7n> zv$AH?FL~B%u7+59o?3qnd%bZc6Z%-EfU>&$a!nM~*tjxAc6ljO9&?+8nOw!#FLzwI zQ`cje(o%!2V4T_aOPtNxp@T=mW9>IAh_z|58!ZCeu!P-&a;2Z0CrcvM4@-|I4val1 z@5IBnX+k~J`Ai=QW+Hcw6skFgat{&2ETdofGm^(@vy4B=hY`@^(XE6RxTcU#GJ%}X zU17_xeV{!^RR*K%`Re^@SgIb@rZ#xyrwH+uJ`8^TnK(AwF`Z@w_U~AEX!DLkxR149 zqHNPf9-BC*WCRt;ph|1qiza4xkvj`3&2ZC6CTOg>2E^QRc?9Jge8~RB#GYN=hv#jp zA+or8l=B9T!b*~-?U!ilO53XQ=AT_&8LoYqSe(379YkD>;(m->5q|4VB|JQje@1W< z44=f!*sbTWQ38dVj?}U;rBx5)jgU>o@KMeOLaHUFmjLZy#uxMMw-D@lU@3)j8;qPd zbBbYlQM`U*w5YIT2#w|(OMTT)gt}~yK|H*894_-_@9*pgFW#jBQ!=sqow0&(WsN%u z!cCfX;dy@ty~Z8*57B!FjXP-RBYcGaakAxq94vt&b_Hzl3d>Wg-r9u>`AwI&tA~ak zAm^2M-^U1BkFr*@ATN*5bx7fzjuDj|f65eun@=J}U84zId_o)0{Oi{j5`Lt1hkTCSmAlC zFrK9}1CK*yyxno;_R}C@cx%Wpp_`9UXd~wg_$c6grTez?dJa)0Z~Y-|LkYIg%8GH{ zSHM!&yaQb0PDzD&l&3b|yFJ5&?k<#Zdz81ouoMv~lOE4M=E7(?&KG`jtAhG>dx&p3 zX0bhhX^3gd<2@?>6Vvu7FKi;nzZuqo*7_V!~6wPIe6HKrD+LnLPJQ`1eJ$)5} z9;WoRgc9_JWmoN+#K7^o=vZ~2YeHKa_7hiw;||;W6-1+ae_E`*&l=z}KI;W3G@b$m zlFfgh&2QH~XIH9#up6l$6RO`s+)#nOTI$0w_etS6DZMUQ!1>{%pmhWFMaRPSM;saA zcIMp8rEuN==WHr3B0|Qp5B%7oUZIT~;;`ZaniFFsJ9m|eYXL89#2Kl_pEHp|PoXSF zdU=KDGxd)wSz0-e`sfI4I6mVv?ZJ85Gs`mYK~JS0SzamRXOE68T>eAa%x-gap`HcV zBUrSmuby;FJu-*KvDqVf*w{T{!?6hF9wz9wDVmy3zV_F1dg*JZH&w4VJY|&7vcQ6G z&sU9UGbbw9E0R|F+9z}8o8p9tA$fXtu<|aJ!c1i3E1;woStc5SFblcpW26nT%QRGU zBN7>_y?(HKzkdy!Ue>;cnvL|)r)ne3j(V!ir5|YRX+vDLeB7q!$67%Su@U;ocSFzq z({$J&c*%D{O9?dWrx}_4Nd+>ks zF(=B&6PX0#;bp@I#goHJVI7s(#R|CRaC z!M_pMIe$-&VOATs!S!F))jAwo&H|yhyW~yK>Oj`hh==Uz*4tyU@1KV>y)bYvb~G&t z9^zsTQ>>%07%Nq+d;Lb>apzRa83(!?VK$lwd#)>ch|Y(*FTZTgF=rrijc~_Q)w)-Z z#f)xh^Jy~3Xfm#!12gK6f;e}TX+U-WWZ0kS{byjQ-;>r0m3O}BpKh)(xX362QOcfD zmJ!A0z5E=(|F!OL1W9`>%^ZU2bhCv7`5t(mby2sm?eoAfR%02Jc0S`g7Yg%^HrJor zVFKy=xYpTfkHlUx)?db2YCc^a{}yX0wUD8B_7yu6zd5JVP~7uS$DuHzP+eY>v#)yO zUNC1g7V?9V-5ZUlJG@FJwj3j3(B!NrpVRn!BjQ92_wO)n;*|W(Ly-c2<;G<9mN9V{Uo7%UM2gJqi7@dD1Cm$K`Q#!LCQTheY0qs_6j z(YATV(iR!8g%dDZ8_8V8|9q<45&Vx+b~A9F^PL;GwFInc4i9@N1@Ni2UBB6J3tm3E z|3wB))-3Sl!Qf{2ow4;y4`qeT-XE*r^&Z0?#2!+8NU@wb_0ICF7%s*j4)emh6!UjX znvc1ow(-cv+`sl5!!%3Wh$Ta{Tx5uIn;EZV>8DR+QSwWB^?UNXwYQtQ*|f&ePQ}&^ z6Itz*htK-*$ufw>!nAp#n(i|0?`9(By#VnbOyl%Eu4|1A*p^^fEE1?Q88$pm21R?f zY<@uZ#HJ(+3{Gc_-E_iqD(9q8UZCPm2PW**<@JcKGc|e>1iC5{*$kv}qr{e@zYLiJ59CNwjqRq#a_+J z=rRNCG7U71V|@gQ+w*!rPngK_jLr2R3=XGgFE9jowBcMH*XY+UAxfYu+&qrtC^6;X z=F|A(yhN8AkS77t78>GVD2AtA&CQ{Pa^{bQIUq*b_1ZY&mbbd{_QzNsPwK#Ivg=tV zdRYpf*tgQlB6W|U7lx(-shs#6y%V5>UTQbC>DA!hrG~D6EHCK1#ihVk5d0 zVxrMv2bsuq>TiglRAA^{9q!2&*9su(qIe%P>7ol<{P2INqWaa!7ZIUy{>Mv519!Av zz+^@z_mMxes$9IhpD3x1#>=GdBHhrLB`_Ne$r%dU&uay_Gm%Z?^k`u`pOD)b%S3K> zDImg1WmrwClhZB;yq9eW>I#UhEp#K?OMf1a{Z%f|MLP()p$o|buRK~U1krxggSUs9 zucs7Lz$y1Ne94@K{WJg6ACPjX6FSD;-H`E|o4mW}1wd;H9pY6f3ejNs6fzVF(HI0M zMDobD^w3+FwWJGZsY$1yeMCR~+V99jesJP{qaS0{GH7ojIv_}cz^$GA80k2-z_br? zH>zpQSEHIa-0jP5Fp$Tu21x}sUs0$lx;d6FAC!2N2oQdkzHShU7 ztInmST#Lia4z(d~v6;iV!Ebk__dLLRdQIa1>MGZ{1{uHB*`p~cyPKyk;Gg!$)CJER z&qwNkSKuq3uov$skTL{dP42C$f$48_<4& zmFqg;Y!t}g?4yg6i2O-CICnRFA@+-{4PIa1g{*hB_L$PNJ&;XMKYc5))OHc$SEhbK z`*2(@{^QKnw;Y%3nUpeax)d zh@eP#14g;WX;ay+cFOF2T>C9go{1*(b2!B7Mer@I+{;EM6dQbK{pB(9NXnXqk9B`? zvbVu}Z>8lM)98Q9Y}p;e2AMsCe)4MvpIcWyoeic)On=!9_wKRN6UH>j%0w>Z zqkTzEA3k=^_L$o}=3wZCOf6%Di~Hqg5ePS5O_S5t@Q=4|@^&N6hLm$+fq4z2QKgLh zjk~MeNZwzY&BRR-S9m95oO{P(`dT-8WY0{IAfF`3o z?_Nkd=Db$xyy*GMNDka}fHuHya1Lkf2%3JRB9MQX(3FXMt@Ba1FAA}~5Icr*^WV9f z8#6;Px5;&nkr>#ig`3up+Y0rcVG=9pat~aO7ouKs+RU70E;P%&TFM(SnCxk)o@Ajn zf|Hfma9b8F1AM)Q3gTW&vuINe!60V$z9q~KH21-y?zzUH6RNGuS|5X^*$`7|#zh#u zB`cGMsp+ec{3l&1zdPykNi_S*WaZBN*`HV2XbBO9f22;Z1>f(LEqJ8O(Z}S_>Nb}o z0CuH=dm1U6&&lu>B zaUy3CU`|4BrS_EcWk!Q}23_i|kA9_U)5vTfWqFE!JR7bnSbwapJlymU(dfRfA}W8m zh}p|CnuwUAn`GS2vU$cUPX%X{?9+&8Ys~pnZL6wde8`VkS2t7fFisLExfyax-TbF6 z>X;&qWZFU-nEv_`6saFFkp(T(l&t&_{lle@=SfF8zmN*7vxj8pWnA3qyO{Xf@Nuhe zUOWqZ)ZKndnji8f`(4KOV&n_u>BIMZkJ@kS073`%vDHd3OmOKEn^eVjFPz2*qXA$< zaMW}qHJRs`34S`w21{+~88Bj{mf2ugiA6O=&ceg(cOBoe=3|KhZ^k>Ho>ZE&d#)^q5krnT5$?^kV5Q=80Fz0|cfxb0<|YB*dnw8%qaqfJd4 z%QA1*mkcdC(susmHg(_Sw(NEr+|5JZs<+e*P4cfcSZ0I!?XbZuoA) zn0GRCi#Iw|HgznoVDmq0<~p1C0k2-MY?^;1?*$0d1RE^k z_))>hHh30yMHHN7gEw$+so*Rd{P(jq*l2@)dC~^8SqJiA&)eVv8~oH8vV}HyxHk%m zY%tFovPW!i|3$X!QX5?HpbfSVOnuFWS)-S5(_(tsym1_E`XiruNBSPq`2&02qr=)? z{6PF9+%(UQ$j(g`j)(uQT{1*yD$nBojSYJEzvN-);lJN&wycN$Gd*SQfFx}(ta{#- z_3&@?I?BWUx<_oP@TX_Sd}0T;(GF14r#3j>2FHD2g9~hMpOCG0kPUYAf>k!yXRFN| zv%$MQwwX7=X{hLiZk9gR+Iqj|1>dy6xHlpjZSbP)wrq-^Z{}MKAgN&Ac*++IJiTkl z4~@*EAIvZjq6%z;e)8Q=@(K0*>|&!gZ6weTNGl`2ewjLc$2x+tS3j7sRQ}Nv1Z3)B%BHJXu>jh{aC`ETe}2gc zc4G6im}|}@0;&#}nf9$S%BxbRrBK1(UxM?UayT~6>>8I-3%)AMV_S(Hv*JyXt1^*W z9t|YVCYk8ToI3}jmveLYpF<%Dtgr%EdP2UX$`@Fy$hfB2LTxHkh(` zi%>R4kD17vV9F;pMf^7t`B^aK1PiUjq>K!vRM-@8L5+2)x9**r=_<5gj!Vv(>sfDtib{UCi{FQ&*UedGUb z34M{QoXXmP-@$*FDv|@=FAAA_PN+8=je7)(b$0`2-Bch~WX_83^wkj^Cv9j|bi51# zs&u-Cvd(N3kc?)O$Hq-RLPB~~CUP1;5&j1t%3h|oQU`!L?|g@w(qhwY*lfR<&&nnx zUJh$<)+&^t&Ym1j(eYq67X4wV;Iqr9k`+dbwsK$Q;cPv~vw*hz)R@iD{>KHq^2blA znR)6AE`O%jcCsMO&y!_D&s!f;udwMq6W<z+Ew*%-swMKW@y zI81Wj@~*N>I{?sHR&TeNjG@7&>UnUGjzMb`*$M#v3u04LhTDljl`muFJo~4Wukd4( z52)?hLa!}@m6IQMO*WIPc1EzvPEDwGCy;Hbmt8>~*iEH-7{MkN?Ua=@R; z10d?P!wp5jfQ{_LnA?NXrBiF2l)cQ~)ih(IO+AGazX?#7X#zhqAqBJ!O_;}fv$MOm zg>Hin32SxgeeAI4j^;m$NRfY$!Hst$v+F?oA9IiTF7y=ZEum31blf8*G{S}k{N03V zZD{CkO=y@6U0_3%HuQiE{m6#4L*2lvu%VCHBoI255PbJ&4Y}PcZ30s^M86;kr*57V zP@?irWF$}jyZOaRhfLWux4zU3^)jokuJ_m@n$1UQkroN!%rUpoZBZvAR!z$)Nqm2t z5OcWc5*ZCdDs<|Xoto)M#@3QjxtUQvMGCso*pRLb_;D&Ax3qo1+5DN|`;{}7s%giY zO*58RaRddbZwC3UoIiAxfWdoL7^?i+n+597Dko%-j7BpuXO3)VRTYr<# zvNY-=6Zt8*+TZ^Ud1Nnt6OFG z<`+LRhZ^r6;ih*o|JB=jT3jn$V#s{omhRm={l0ZssSJzb2k6zpnjYqo1(;Uux&Bmgj;|gFmcC z3(OirH(o_IGQ=B<-9A(?-Gsx<4*}83uL?wRlxtWc=8fVR$~BJEx`SoDEUTI#py!s9 z%PFz^z}Q2?HbX-My;&4g7k#B6=%_AQpqp$r5^p%|9+WHGW}9!ugv)GA*AbJo_>D3+ zd(tzN$H>Vzz^Lp>yEBnRjCXU3VWZ(1p1LnA_tf{*>Z8h|x){CA@to49e_>_`@wA7_ zp5dmx!il?vmQ%z4#VpBA3z>ea z<9DaG!A?N>kI0;$@d4-T?T;8ebO-9#3^UM{rP5|wu51qedYQ2n8P|9SPd)pmZ!*RU zlkQJ$TP}f1=l-utF&=eZL{mC-N{HAC^aih?UZx+1@<+(glGDdt73zgQar3& zGr-I(OTZ z%o~#u5QQ}pwcnf3L`^?zYMPZrve5uDf8H~uZ9kNVLdF5^?d3O;&NJv`3gbX%M4zZT zqDog}KPDluaaYtCQKdA58|EV$F1M+?ktDuN86uX7L#9Tv5=Fa_nd1&zLVf7f&D^x7 z8?vce{a2d7bK0l`UI0dP>xd|JlIplxXR&q+g03D4oC+PJR?S_dOj$#mtjkB{MXj|^ z!`Kxs;gM(aL9uHHF3- z1y(nfflT=~PeT;M(Eslkj@cC)XhzJLQOdQungOP7`Dajm`fhK2MCYDSl_&m(z?^DZ z&H{G~Q&;D~of_0o>oo?dyV}(p@fYdzk0+swxB6PKz7Z^d?5p(yR-FLV|05F_&cqIw z6LdNshANG32W>;*?t^9>b54O@Z|gvjr6e;&j$dp|Qc8wcla$IG$YTK`p)T|3Hs8~O z+&rZAjP=z%6H#QK_QAm>rum2Bu;?JV{(CnRC?*rBFA>j+hJV!-b@!p^hwkCIXSZLu z1Q2aFj3hFFU!6G@rS2DC`n+2s*HoJihQ8ckRk|*G0b**@J-v98dvTH0o!)tQJ!CVo zNJaUJyP?1R8AOR{RG7c&Zrc@HXhX89l`QKS{7j)XBd(eS&iXZo8h@{Ns1G-xwr2xk zPO?9XYK^ppD$sTcaIzU-vVCSB%ONzNIF_^(*G;QE5=_TU&)2-Fn~vArksPiMLvOtU z`qK#rdl56=f4L8>8(9S`j?rO?pS7k76JO*fHsz;&d$;7EQqv%VK37l7y0LXwRawK4 zfWxv!);+v<)vvZ~A8ow|alAgf*HRqnUNz~ zSJk$4jq2MOfm@`zH9a`3WV3@2Ek5;?rC8Ttbthl^QxN) zBy(%=a~r-N0AfyEe|14Wqz_H6P*w}%W6LB zc}+bJ+K)i{r$PIN&y%+E>iv!QGT0#SOChWFesHhaYde(2<{EBV9ZOO>RV^jcx#y|- z(co8}Y06s1LyDUzV%!eCsac@mp>U){;d@ad7J$gnAacj`LS##^L4+5BER3k}bR{6# zGsTj(8<$4-y|Gx~@8&@b-znvW`Zt)pVd@+7k*rbke+tdU-TU68dPuQLy&03lQganD z-24%{Lk$wHAj~bB`ksQ5+Q@#2IgM)*lcakojLw1l*lIpa&E|@n6u2TyGdJ!g(e3%h z{hT5j(#;DES`_s9 zeeUyfT7F8;%zr=)^=347>5R~_yu2#n>Pw5!S1VbARz`Kex@eOT_ry2 zGjq=l0AF(33q^@MX5V}TLJ~AP2kDKNB4REuB2;C3M`2#-ku$c?dUJEs^1TsC%rZ#I zJrAVx@kILP`8qYNSSNK%Texpic_WRMKOy}pyukat*ZX~hU)B|9k`~E&XQmn5rtC2E^|ke#N8haKBe}n0&ayRz9BptAR(Zjyi4DtF{l1>lgB?-Ddq}mxJ+5vg?*fo9+yY zarKGgHG2SD&{2vr z@l%}<+xdSd|L?}7Zo_ZmE;z+qP>JzXr7ION$@G1MxklA9%fPQ0eCl(UPd{OeZDpwx=d>^BaFxU%QP{a?~%<=0_`OT)>OFhf5Z7U0t#jOnA#pxv+H zSsoN_8j0xb9ROAFsRJN6h-I?&xK5mCS`RxPxdM|(bC;DGnQQO_*A+t%E7AmxJ;^`D zLPi=q4lBpX1kv6TpxbAzZYq~-h#lFbMTQKCP&v8;QS$`&bb3F4d-4?Ueg33cRAH7s z?Qi%~)x(ClH5q{-wvrGDWE}~Pa z1fHM1)T9cumZbi3&5mnl9VusK%Mm}~Q}T};nH`_{a=S(x#_DhgV=}8zWAbWuJ0>4^ z@~k=pr4r5fG^O)mkW5cT7=as=slN2pW<)Eih0Huv`93TG|2mSVJl2wHx7K3%Ld*z1 znOZ=Bc7TzO77mKa9xiO0-yG*$!rz$k?78BwlNubSCSk)WvyaFo5i1 zE<8ym>v(n|@)h+RPn{&s)(m1MEfD2J$HXBr1Pe?#kZ*9k%D2p?&yv`D0@; zkCZ`XG4^=S*_R7xjzl>LI(mwyxVa@Rm-Y?iaXO<)>M3qLw57I;((MgEV(gHKJVvqh zYw&M7#;pCqoED5;b~I>!vc#$}(+|%?Zuh`LTFs55#i*f5mQ+`m4IJb5@obE=la>4Z zOF#HPeQ4PBjCq)zw0|1;3Yl^x6MX;EAps%4I|@LpbV-SgZ>beYM+BRA3*7iDuU7Jg~^d-HDUY2X0i?@TdX92XDN(bkvjr9B^qM zORF6jo}!VCNeBs`VD$k(jFTAy(4E~(^hf&|J; zAVQ&BN=q=%u2NQ`R;m&?2|s$Ks9;M4cNhQ>PhMTD+TTX|j2mPQ8UB^j?Eg%%y(9}s z5Ks*G0mV2Nf`hFM}Iw zJrg?SOzJbXDO=Q_eaXc@K@(fzN!<@L&pfL`oHewql#24#yt17mk+M4Sl{srnOvQ61 zPCGcxrG$D`K&ES+xsk4+U)bLW2f9ItJ5BeDG~M%2>cXYFGwJ@4+01j(@f7!a09E7IAw)ul1ozQQaB(JK1$A?mn(oc(;wXW~437WbSmxe9XU&6K4s= z^bg9{IzzLJpG1`mw8+@x+7<;kg~hYBZFn)cHCVODbBj_hF4--r6|XOLN0n8(dO`V$ zB4a>0|87kg^BLkZ=DdZaAwfp|*&8%+KZhOyv4_1(EDuQW9yJN>sH$3bJX0Sd!oZgP z1?ACRzgnD^`8)kC5tW5&$u|(xPP+MMo_w>_C z@)@n_yu9prhoL9${bA>8a{^}HA+`^PWFqSk#OLW+7~ghk$r1A=Xx7I@hV`;XM^phVi&jScDf}UDEnd7u}q0rjM>I zjhUB*MhP+$TSv8%1v2_XVcAIsp`I%?kB{I2z#Umuoh*D>gT|92QLdv5E3I=6NUb|c zd&L>$MQrCbPRtH;w%u7&m_LzOMlO19gqFYDHP?2QD0FN3u@?;gWh3-sEoYvy5&A(h zfx2~Lu9ASfmaKgIN(28o;J2@)zWZ(XGQxOyu$~8T!fNTyj0Z|%>E?L#ZL_8wXDPp7 zLEdXh=k66{Uv_1^ItJ6Gjb&y`NEIDxCc>PX`R>eP8m{!XS8jly0ZBxoKUR}uhV)U5hQ`bb_6Sc=k=Z0` zDT^&VuXfn5^Xf*Qp`}?dtno|v8D1N&Nn`bu<=e^1mm17C-wm+z6=pWJb?Go0wg1!j zYB6dHjfMy4kE_hb`k$r#XUPBD!VLHFzUzO!=zl)pe?H)U-sXQc`kxp1pA-Gh5&q|i z{^t??=YIa@E?AO>PRjp$&Hr5Ce=hbu+d}8~0B-fu=lGv9{Li!e&*A>(3I1o9|Jl?3 z+{rXCh`E)Io(?Uvg*Ikm+Cne+pUeEu2mMdU(q6OX`kxnPKRH_7pL^^D25ueTy_(Ka zO*ZidHgQ-sF`>6$eP)o=zq192C;QKMnFA3`^yFdtPynf;49Y<6oPt-B_v?=`Dmr67 z_h6NS2&~cq8y*05zViPn z0IY8SShW&o`M@fJz&;;on)$^YeoMZu{ILMAx0T0hX1)@S^?`j(!CW)%v%u~N0Nd~Z z`FGvmH}mEIuvR5*@Dgd}eL-O3EwB**V82!VhXcTd27t{~;w?U~@j+nSEU+!V@>}vV z!z@Ab@C-j>Du-?jF;^h~uE(!oEQsOqp_5rl|6b1E1wo3!q zK6{^RYrSlu)e8cN>y-GYmq=I5@?aS9I@Tgo7(nP@?twn2&WePE-4!164x*4uo{Rw)030Id)@?RPN7776Snp3INSRdFSL0~VAFwMLu0PGFrFAo4)syrT#Sf<3T zKCl-lm}}-73#>E%>>lNR<9eSoE(`#hqr_!iB7HU|2<&(ZY~?L};2%m?-X1#`_@Xn`FP0G8TB{?D6jGc_ff z0>EBS;(9L;9z41Uji_y0*QAj@n#>!SRY2WKsHC&rUhW^uJIc+Ly04O z7{xw}X9L;BDO-5}#?nCIASHJ7VZ4Z(u0Pr`H;}ELvTbbg`=dUP7*^s+FOmM3@587J zWZSioZ1)6U3?C>iUGnd`&Y#;i z2Y@Y7;s!4fV806j8*hQNC4FG7@;@8^HZ%b2VkO?<0~;L#*3AODEC8%d`Ogmk`+BHf z(+Ntf_JM_hz@Ab@Cv;c zy!;w~NdaI_De)m6*o8r0M_OQ)2Y~%n`LFWwi>meu0Gq4CbG$?-^ZOn!vb_=Y5t^ZF zCj}6CK9G2Z5)bha`WKbwT6c>wI-!5LKClYqPdEA$acuxti4tG*66vaB5LmSZ)*Jx# z#XID`$IGwQ4F~{xRf%)FL|Rwn0VCUvDj%U|lx;!)q0NEBKPYjCkI-%^&$aGRWpqND zZ}5T5Q~rGezTMFo`oJPVU@x9(n)!+2H*=lxmj{3?RUU6)d|ZiLePCHi>05(*K7x}=B3j+J# z$EKN|&i7j~K=~^Jz+O=vubBrbvCIdy2`p?g-N-w_$O+vIEY8WgyP-8ipen9*L$ejv zGW!^F{q0f$sF8a#d@nVeE2QX~d!WoWPp6nyldQg;7~e#1<$~0oYqw|GOkK)sbelP~ zp!81i;3bVOhhsBOKvQ%Qmyvx9fjO@Xstlwrs^AH}pgnr$baNCO&>wbAH;xr}-NES+ z!%8NElSC&!s|PjuMvE^|RzKCb{QukG=-9a1dkPEz-H7${8*?wzsZSMh~3Lyuq}u_ZjQ<;(E?^W@^e=ohCvhw068e(^Tr zDtE84^|`WVuc7?SQa=7q_;yZTs=GSQ&8sNN>jV6&S_ZEOpRu;01xwx7TIbFdV*Wof zzMb*^|HD25(0u%#`XiRTbFx&LbxxZ9!GLEE(wQ@f&6uJr6d@QVJr1c%AdE>-99~0! zhv)gfe?Dx_s24wn(P6|?vCbHHIjux$KE1|4HHYQ>-y%8gmYJ;2=CWdEo3~fihXYx~ zU;hi#L?G)Wxvbv`bwVI(HQ&;o%R2L;>0n@4!E%lrk=a1H+WlGago%0?dUUmWQ3*FY zX4k4A?l{gEDtl7gy$Cyu0oZNyz$6vB$9WcF)JcPGbez+=9OFfLW?OVDN228wEu(oX zJoAPQas?>n9@eHJJY6S_^r$Jmij#XRU;pK_P6Eg|6gYdi+7gwYZjMQ#nfEL|0!nFi zJ>b^Wg5X$Z`R`uiJ4cYDDb9^*{m%_5oS2*|I|jG+i9$p89L0z2c4Jl3N~HP)=4epw z5kP(W^`=a%^A-grIjx{=kS71x(aa{Zz6n>u&)iVO)nuo}9>Mp(z8(KNbqp*K`UXRV ziC>oG)rSoKAu_SdlI^cp*1mPU%bsgd*P&Xwirhyw(gV)%TE2?h#`hJ_3dT96=8L`m zWnG?g%p4Yy_^zE*Y~KaL{6pwqf;y`x)BE4e9nNIFZNAa}S-Y-5qBSn)VfeK*9NS`! zxcE9_i!&2qFxfauH&tnAQ0q|n+w-LXKgAmJ#$!9U&oS){z%NVe$-i=6fU(9~c_LYP z7Ai?Rz>HSO1)Ni*&Ie94p)7rbmvjj)ISq^df2ds-K6k+{TC@V>uOYTe{+h}SP~H_k zXd7DC6O`P2FvfO=7dk_G;9L}%9cqP=>^*+kM;#GUXKKSS@(Sa%p^?(L^Q!CxxBBrK zghLZ2=U>r}`$Q+U$zWM;Q~dfZeMO7fx`^(K+!KUjuOTHXcds+&hz)*4-n`&V6!eigJwfC73-W< z$#a?YqcD#G!Y2)p_8;ZOFB@6kpAzuBQw)UT_%~a;Vyl)V%k)_3%vsw0X7MVeT^#A_ z#~$f-wGsNsx4mdy0n|K$$a3@_9lN{?nzm%+WDO&hwc8%6;eZ;VSwRq}eelGLs5${# z=v(HhS>{c~$hCZP*pGn=)*%DCLMcX0J(p-pM|#)c#xo1NcOAwboxSHH{)BuA|HLoZ z2%*tIJoNZUsCg_MFy5MP80!INSKM7B_TZUl^Z-43l3sre*p>*}gquQNaRPA1YQ3ej`kCWVC*uhog5|gMgatD$|i6?oO6xfY-f#Ft%<0zG8> zwIF>~&NxRv;R~)hRK6nR|1I^&EPILU9K|k#dS3hq`OJIEJ?6*U>)vGXh$RcxfDcCD zWa1&z$#L^i>vf`LW7lQg$G(q5xxGsXSygl^5%_2QC0AbgvUEMl#m_n+XJtIRxE)?n z8?O19d$Av7i5+`vl9><%DX1&zUeTj@t1ciRR$9AiqM+xOlO?kK&x?i^Z{vN3Xre8@ z^+Sx6w$>J0f%VJF?+IROEdQ;VA+vj2^FkIcb9Vw8l}lzBo15mJQdc%D6FHyQ+Qg5! ztQ~ItTCKpW5I@dLwi;|$gtq(3LU%yaz0q9b$wU@sK}j<^u5Re8Iy2tZU4**`|D$;b$^X=28NK_Xh-&Z7ICIZ&aC`leI7*nvD|`&p zQIwKg`CLpcr`=o4Xt0vHR~1&Qb1^&Jd8HazznVFVZsYbNF{xQ*rSsmV|fIy#EfpKv;@L&L4k<^I# zC+Z)N2osrJhm8(V-Cr?LyN@918DqrWs1YS4GMd-;CQ&d;&)CaVPeNZ*e;I^)-$X;m z^;3mksy|Q1K$`Op>4LG?!ocmv!ZXO`-+nZmlvpa_%&Q+Mb1Zl1=X|?8&jX$t8K-|w z%0wQ&!l<71*Xm>Bn(Vp*UYD&E#!5*K2Wz`d5PyhioQXe9@&4w~<9B#DakgRJ?#Te2 zTkq1;%m$16)O;cDUR^jUd82uTKwb=a26K1erFV4s<$YRG z-J?37#aqFXGm-x9`!m`hKQp?5sCF=c3iZ=$ z+TM3ZtnWYPw&qc5%xP8z>okGF+!ZRK*VOh%14uZZsri+e$TR;jb5K9|cEs!!PyK=Y z-x*lm+b&|!kDimBb+~B12{gsAuCs;pqnqY``zJGSZH_u{3@Z!jfQlz5E@_^XC@bi6}9%3^%N z$IR1X`AMcxwGTr@j^;unARb5>@g7RIE{(y`bEmuo!C!5(< z2WLLPRP&~~ZkI{NUV0Ps0<>U`GR}}IC&EO^i*?uqj*|`72t7vg^MXvKn zAJ=p~bugdu%qR172rtfLnB*KuPUuctI@x#2^X`3r3g4iyt&&u&5M* z?sQC#uEY-@7~KX_9+w4f-bV8Z_<}qJSsnS$+^yUbz1Wn&mggnMMxQPsQPAF?Gt2qJ zQP}bAQPhzi1T8h1*FFncU2VR}4-WZ0uhkQYJUx-vL!|Doak167HFWR?In-OBUKKgG z-cWJ>3(s*g0MA!_*GgbGw-4~RA`U6=PCWnfTuA-JTyyI#vn1B7IV3>7pf0pHKzPE_xKWfPHQ;p0O7FTf-yeZTCe&KgC`<((8%s z;`pKOQl7DBInwN}asRDSb$D}TRq3VqbEjAHu$|R9!0xjm?mu`XIAQMJz89XAn_0Ju zRlFQb3t>neRchT;)X33VhCKDaM*tMP3k zj9WPk`$F%=AInEO`^zhoaa^<;hD9;pT@rAJK{Wb5yl=+V6XIQm*E_O0>*-gLo0(eV`8^Zf zM3f0%!H+BkXU3I(5ebmKy-SN^b9`E`2gb736k3Dd6b8abnRR(BE2O_Qk?B0ih#K|* zK7|iv%{xcozmSYHYp=$nemOX|oBzmm~%N8I1zwT_Pe@?pbSpu*nCaEg}vNl-cb^CaKR4-p_?;p6<; z*%PKYh&+M-t;>z}!rv&kL@OGuCX3g%@ttocByL~BQog~G+)YyE`cbsVk-BG)prTHr z$uLJUScT2yS#&~gx+~F$WH(~(t8zG+wo)!YN|+^(JqI`mmk5(kGJcchaX2E=7GP`KJ>e2md1%?q&ZcdbfHBHo^(fA}*ZD z*MsKkUM^ItaxP9~A#&K)C$^4x2Rc{tXvLE2#RcZ5L^K~q@l_k2|M8`QLuQbu)L#C)l zOte2tm}C}370sA9#(Zru(STFYHWR(5yUD!MM4vs;MBgycd!35*n&@z7u#_A%(Sc4; zUzzCXFPKIaGTYR<((wkom&tLs8I~Z+4?Zi3d)zpb^$VX>!}3rMN<&nT08OL62$3@U zkAa}LGJlooV?N+p%Ok|IO?($|)xW&|hHh5!qxzS>dUhPcf4Tlz!=K|IE4igWPtZ9d zzvDEh3QFl)B<|{X4vDt(ej8`*Ef=yX7D~ZZp4`OOdrk*%5GI#=YBKlwRu9QSVUoq~ z;dVJ^EYr9q$*p6svs3h{xxyXQbygD5&ookgGLc=Y!<#DurQ`DFj$bbXz*%k``09|K z8{O*2?$#)P-de@ILM|m_P<^uI1KdcK(&znCF4^WKDPx_F!7WVCLymXi{>?i(dOh$M zeH9w?kuU`>D%)zkB%}wv2%5r0n|;0bDcw}pUAvVHy%*gK7uqV|S-7w`YD#qBjBlC6 z*~J;$&t@`37oFt4lYEh#z4k%_`?h4#5x8I+M>lTXq`XUe203lvzUWkK$5f{sC)#0I zleFQG=CDkk{Nc5)eX?(yN!P%+^v!Dx*(Zk ztG$X{@92VdiVA3dRe5IU?0o@Wt=Wuxo!d*~uj<#w*ZJ&Ri7nBKIlj(A^CkAT0%^Ce z^95*7%(X+SqFm-i_bGeuD0}!YQP0{X(N9-%ipZ)d3&CzNtT(CY;(}oUL}*&U#R^6+R1i`?f=?GTXiH{mOT_;sMZ~U>eM<2` zo{}BXX4x>+>Q>M$mkYATsDCXN%MhA34-tuj`V)LC9tKs_++1D^&B%x@VJAxgJC>KG z3l8_KW<5y(;Fq47j*CUR$_@XccYvv8J#(>ir=B-*FTTcc3}ug)*tUuI{(%h>!J&`% zBoMFOL7O8ww!&r!PeR__hG>$7BflVzb0T)mXBe508-$%87-WoZT4};V80K4LYao3T zBYme#o(%R4Zx9G@*Rcl8++d*^9}C`!o~&GMrrSN=kf-nvK_nxcN{qm*kUvk4o!&-& zJd#^CrDF?f<~^M#n0pz3!f+Tyh=9DVs+@BYPopB(la<`fx|@f9r+B z`2GJepPR*<0)3XN_fA`Wb3XIvBL3o%?Ge2}we=GMCi)gUeyO1Runbpp+@zo4c11Z` zRR%KJ7idvs5bZ03yE)VzK13Y7{evVtuL!3ldIr0WnGgYLaCu}dI=7a?WIlMZB{NvM zHB^j;s?uXO*0ox5YD#y{JiMiw;j1OPwJCBnMKNAHW?TJYGPhJGi->e>fq|`ujqcA+egK>DrCKw%#l@=Z6wAObsZvEr(0+#wG zlEPUjd_{s!Ck>dO@3kO&bu9`Zp~wGQs6O9qv<8{^k@4zRxrkrYag z-7EaI|K+V6X#xHmrT&)p+7RsIX$14h4)UGq&uYv;F!NhuUipeHxX>AiFJvUD!*dYh zRA->{b<`OQhoP@Ek$yX??FkdnPY93vX>=OzcvahT3)jJ0WULRIe`+86=|ae5S??t& z7*V$Z(LUnfXLUuFfH;KASSuOv1lWh9XowOmBHxZCgHED7(nv^dIW2{xvChD3@kxHUGV})ZHi%!O_Zsw%8_q^RvrOH>@g54ujNcz zbw1H^QT4BuGpgkU0R}NZf$US`b5>SSbNyiqOU>xSXnAP z;Gt#f_I5ghJEYTgovLHxbzj(y+a?GyRKcj#6`~!@b(9{)reP)dW$^zjjHhOwCfRZG zXwDLS4Gny8JU8pHUx@GcgwrXLHKgzG;4cr1KOZgA9JHst2A>uemMK@qJR;pAvWLdh zM5^-R{(8!Q{#?pk`{t^A+0Ka73DYez=6#(<^s9Y)U^igqtM(XWZ%Y!CS+x*`{@}B( zBvXn%YJ2$oU&0&PqrcW_LU+*GNZ(@-6ni(BVhSmSx@nN@8N(a4=@{yZe*jEM*82U? z$rpPjFJ3Q*<*=K}Ula+@jK$-$9$xovByr3%C`+B=fyM!=9p^*iWja5FtL=$DhGc}< zsY*t2k`rqOG1K|Ec}-$|UP3`5Gni(6sv`q)Rkt}r)Q{{0&r(oe zbYP62UnWJNu88#Ax;ar)14VJ(^SNyD!UyT+LCMdTq^n8xi5lLQ^845t*=6KM^!1Ux z?UGIGY06!aD3`VV-RUYHZKCTfFRMOrBp^9}h%X`KlUT#^KcB)Bi_@Q651-Uv-e@u0 zoMIOq8iQ6AR%OwD{Eo3~9;j4G4GhqkHxJa!AhDt%{>N8yc*bTBWQsDXBehHqp6FYn z4Tp&{ozJvL?ZRDTjGjZ0UZveY*-ETISq$RBA6RXQ>bH~Afr}m|Z2+6%{%gj{!Zx1A z{UEWd$=+|XD(9UT8^pHe=$F(6pjPtA3E{YW-=dTF2mwLFo0nzxSeC4uo)A_nP>eD@K$QdMvBFlE?R~9W8l@^Ce-8!&@pV zOIv&miz#RwYlTH%tWy57Np*j3i?_I9J$@c+eI3AD3CkO312u?HBUM5%V9*09X7L24 zuXDA^Si=hX`8uChEV_%QK#1t-uf?7ai;CeBm%77y)zH#S+9(map?wAqieD zFl$9PGGOyXHj)oi>FYdyxf9b0t(8tp>%3)+6Vqz%*hWl?m>j;gONKRHI7(z@+LALl zJnMK=rs8>$wfu9F(6SnFwG{ojJqivPcJ}ES>m~fGkLI*YESBWgT!PFiI=IM+F{21`#IpFb!2Y50OVnzV?GtsY`CcvMvHe*pB8p;kaCMq2K*fX zBwWu?QW`wwH2Qss_B;9u$JUfbBmOD}fzk-ETfyVUx8Lw%9dD zng)(D4UE-6@fA)9qeBydP%~}wrPK^LIF~r`M0V4NLo%Wj(=vrsS-6ThqP&lI%P-o0 zl1W=iTD0BN%#8I-^j1q_2rR(F@voqgOstX{-sjjNl*ha`C(J1oeL_;^dU41}$^ZIa zRz`DqzEB-G7x}P>>=C1SSbyv=Xl#3{Sw0;7lrFAAeNUPy7FL|uyU9M&Oz*{K%hB(F zb($r|_ap>BkBgs^HKa`(rJ` z*Pw2&1>wc`jNUyk9H&5kkUdz(QT(n%$`(E<=pQ}6>AEnduj?*XPbVq0Z)a3xiG88_ z@8Nv$6(LjeU9s$c_|h0gk@6Q^4SehkzOuhdmAal>MO%$k2>q|ICc?lh+1xQn+jvR^ z9GA>F4C*a>$&|A-+~ieSxF0vZ!ven5!@IyvOq0Oz1f~b<;f3sgQ$&~`9zsKKalsUs ztyw`U;llLZf_iD$;3;CPqHA!I48RCfr3_~k6{o-lBn@D^CdnWX$Y#GuIX!Ho5rCM=9 zsdkx2lkZC98|3_Pa3&6XBJ40M*^o^53c{Jlb8Ked%wNL&aNXS?+yiG`Ek#bd%s0DB ziEnjf!TFQ>W_&eyfR%N5b$Cl=_57b@6nzc%gVmJ_Loyl6gib=`!f6HPnVI#)dHJkj1 zo%2(9X6-Qy|9n`^wC-d93RP-E9SyGOfs-N}?_SXq@?D5cMReZ*X3U%q=5szM&NVqB z^t0}|_7Zi?HQH=nqk2LOmmM*ewdQL)Ny_y9iAc~ojyG($vF2-N&*<9OpUqLJys?84 z&|V!jv3eOEGQ!<+;&v(&z9up!KWMdBKR0KuCcAuY>2`J`3q~SqAf~um*d|Y}F5QFq zF5hhNCzDk(={q@}Oy-IV+d}iYD1O(y68AsBhQpou~;+QnTOMMf&O zhz75a|EG)gbXLBv$Ag-M$dqDVkH-skl3zZT`+7WGu-8Op4UufZ%t^M1l1&;b*``Z2 z;S`CisV4`Ti^cp1Kt9Pr0*1(MBzpxkUvif_$xUPn|Fs}UG)syU%_w@YH61fzIZ$u2 z{w8fiif+eCDzH@W0(PHv0qZJB-gnS5Bc&oh^($eL*HYD*O3dX4ohwuHK;dCO`1H*?agR zf3Yc?R3&gacCsPOr;N|cxHLND5AE^y^UG{A!Lj${n}~R^&!K*Ce}E3N2{dRiD!&+^ zMb&`WXBSEzjq`uu2Lur+ja6XpFXZ-2P{#?8k;HDNQWSY{?^ zvN2p!%^0zCD@(tqdj^}MBek2mLWkPzcP-Bn9a*{4_Zb*Qvn1swvl^OTF2zb9 zC;?H56-z*rFpfHqasR#@Tm5FnF~;LeAB(#K z1k5)!GlTaSF#5^2hiB=cl`VDRV{Eu{K$SrRnyXa6s1c(Yz=nWlYuKYvM3**&1}v_& z`%#b5leN!i}= zcED9ei9BrNStH1bKFYD)XG_vool#9iO9vZ$)Vw!EA6043?z6sx3JkGvwTkWjC@t1g zo0>?Uox+Zn^9sYn?&Qs7vqsRl5!O&hWy54B7(2ou;+d6)VtN$h{Evk!e7mo4Cny*Q z*YGl#JybN%4YgzshMy6A5#;}W60@^!?T*Vi>8olfYmAG3)J+qs?RjXj*ka=TQy2`b z5ByY4MOb3p{ezLk2Z2TZWwJExqf$3ZN4}9oh!FP^oGj8V%@VX95nzm(d=0EU5;Z4= zMYyXcuIf-}MqrIN(Zi3O*xDg#z?{vGDkOt&7CA)~q#vyLLj7dEvMY(x#^p4La4?rhWTlA=$tQCA8WR~+Oyuv|h;URB zuo6cwqJbP5qwYxA^-p9`Y2CcwB#hhS2y=FM>89&Xj7*2e`YyQfllIYd?;nU;Q-iQv z<<9rO0aL#X4WRo0m6)@f}haeQ_CPbdj_f9w7CD6l z0dCCY*VnL=n%HzXbuDX(jrQ zpa8#5$n5j`j7)s2lMt2U`7fP`As|JUe9LGSx$P&t2c2Y`uahr+{Zc9YC=2~t(=Q@D zIdqY-vnfS}WB|p-;&7M=Ii@+9vt*xnFb?3Kq_RIrk(=0-&H1I=P`fmFp8cGxy@>y= z!};M{y^53b@{G_~5YlZuNrHBtq`>CejKKMLgwy5O(itdcVbQFxqp1iR(7%HebEu!^mTl$y1gW z6^iS_8j%9>Wmu-yM5g2f)!c7Xw7PUlXaetvwM@W}_y`9dY=$gizE$w(F>)?`cUP%g z{bAzBAi*riJ{l>@|Ci$1H(!6PwlE20v^h@~KgPwTIa_NY7g6{5s4T}&_p6~NsJm9` z?&`t!Wc{1voZi&`>BFY}*lgCbX(zhsYlyTt|4D4NIo3$LKJr!r7gT%=H!<*_jw)Jz z2bBrRqgq0@=kuXPZkHv8qglqMZ|riK)WwmX5M-S3Xby2-_)N7w9O<-&8+V;3QH%aj z42NL>d+(~U-VcnB8!t`j%oq;nl~GR#!5GtWmfG{X2VI4r=7Vashds{y!mgnW?9BHxuQLAd-;NpU;uIJx-5K-^+7v#R?{SX<*Nl}qHkMKS1=uB?;2t<8IjD@kel-r`cpWA^>G7c;z{b3)#7 ztBX=};Z4#xe`0!_^N_~(WdDxzitr(}OLs0lZ89pg`>s`~?_SDT!vbfANIohWJDqsi z#|Lw1MS^~Lhhxs8!o+ib=?*1P=gRSY^1)Jh<8TYu>8U|$jP0Z}fT|x)L8Y6xG2d+3NIVR;PlfoI9 ziNBtJdDg_&x)Av$<()(hL_?GEgPT%rQgRs>r=C$JASu=1XVi>A+BO8fNyQD6 zi11MF$l{MYSRfn`We9oul8dffJd_l$BmzIpuB=@N6ukb4WjRQglOi55}3KT zzfnJ_b+~-GT|SBRk~|6U!C>oSw@6kYo8%b@d0p9aWYJdw_UWAOV{bJm7tt9jX5WG+ zEs#fwP>$tPmOid6nz;i^Sj`Z?Y2~(j9ajogfO;FYIqpA_dXW|72UE^3}d zMFNWlQ#rS#Q5$^5ra@l$K}dD>W1|v#$$XL@{e&(cp)Gsde3BnN8C3Ed9Xx{w$I*e{ z9#;iC8%v_Uw0`@4we{zJ_BE!}U$m^%bzW_c(|M?u)=F!1CW6+U_)cn(RG|R<6xI5b z%WG0`e=d!XDaG8u%*gT5Dm5CDvu;G7d@11NAaC=O$TJgr5M0Zp^xW!=pJbgA$tsq2 zU9PXT89l1xnt>EIF~|`vnTq2(|LTQhZ}uWxG67Kx{=qh zONZpteQgIj0WsJfk|VB*g0}XTUYV5}6NcTPGm)}u8g*QMh{7!YOUYm*W66EO`!)Ro zNwki@)m$KU@N@=I@U%uAWtF#AOgZY2hwF== zNpVf-!MX-}i784nBrK>JYg=`s%gZgDwO!$+9K;=8!*KahT2lArU=W3s%{gZ-#j~>I zhc$|xMFuL!dlNKPUI&w@(Pi}&0iiUF$FPxcUq|x6(CK)5A{Zj0#kk36+2w^n8YHlS zDLeUvx=C=a1gVDaAsM@df{!!>4UK%3(U9LJenBINzAR{DEl~sB-n%L-qcrB@8+@cc zl5ejQjPDc#I+0XeA4>0@=bO^IKe7kXQ~65;O> z?$g!q>c^~x4IFupG;5hAZ6qm4F#f?#Dgm;%FI z=p?<3)iAQ2QAFQw{>fW*?0drw{5SbI zM+*9oRI6EXf4>*bFjDqEzC+2_C!!zm{aL<4{Cy1zrPGOxf&6Y;KUQ_}H~)aINXq-a z;=jR<>;s)er@TUJI;z1I)PN7_T&hC$I$7&d(MFa@(4LU9&zF1H-><}CPw(v`o)t=$OiG3(8_7$LK z_pZQzjQf1!H}3QG?(Y77v--v9{j-XW)|;1hVc-3xsADyF%zX>iKy#~8NE%S>m?%tzVKE3 z9ldcM1NoI)x4RFB$a%;g2ZI|w5Q~Pcxh=m>>|eP`m%?PJJac+Z-4`{ssKtE^SCJB) zoqwqB#vadpja4#otiKn!Aw_}Uq^ui)nLE$o0)v*bE{{56BUllM{jF~|`lpJPyfY4w zW_99C+s%5OXi5-4^t)2$Q_yN}KGEc_**EcIzyn&Eq_Iv`1=gyND2ZXO&-D~1Ql4d1 z92=XcVnBIDm3_$&rsfIkCKM6wm4KYA$VEm)1!UviyDmrJC(-yTIzjmDYB7L(HACK^U+|S}R<76ZTJ-gR&j9iuJjPHK5 zv02fcFC2*L*fI0fY^%kg%S0u@fnMht9H!Z2&zI1_NZHNEra{(^ye|eq*Bkt7Lr9rC?z5sZt?c!ka znv&sCF;wXR8zGt$_#)mf`x}=9OAs&L1k*6~!?J^;dL!LfdnPkB$LcDN`?h4Rigt)NPpS8tY&i=31sK`xf2Cet3^_$VmrV?$&;` zX|q;#YMb_cMBm)@o+1@T%C;d0vu`|NN{XGQsM$d63{*z05RX0u90-?guJ)a?xw?HF zC2WfOM^mtKr+3lufK+EzWyJgh;{Lm-#o%XRKdDx2!v3@M-g2bZzh_|NG;FZEM)ZOa zV688EbFt}j?>w?VSzXOp1=0}wtLU_FI~@b8>Tom0tv_akx>ei#RYzE%U+X^L6?a^Y zOgk>e)Gv>R4USxijkoF)>$xXetK0E6M;bbcjK{ zm?n5u$YPH#p822aT!cFn2t_JsgYbpS63^EDTy1@a8;$^cEjXLklDn9DEO$6~|Fujf zoAqzv{Wh>c@ZQ((Fu6qSl)p}@lnrq+onW%zDCSP8hB~kf%H@eA9HsQ^D*SU!wbhfS z)aIaN!srxs;Ga?kw(9?FK0rUoz<6=o>}y!7h4(u`E6^7NCop$fT*G60cI zh6#K15fRzHutsA4BA0ljq5{Scw?4)b<|y$WF-AOU$QxsMoa+JvTfk=Erw+w`qWR)( z1xoix^il`=KaS|aFYzAJn0Oz4)xBOM-X~0|PwO%CtcZ~}t zTO>*A%zBHIjUZi8kCN1T}ao zVDcbMT{n;u0*C){&IjbvEqXqH4}jBItQ^vQNEgwS(8Z8q=1$qGDEmyX`a{A9i&IgX z2(80{xhJY+%%fgml$k zIdWibdl|8A6AtPP%KAn31mw{k`UZ1xxpKg)uR zy+u8V_Q@C-Xzr_s6@!l6QbH|{$b80ka(|4mfitVSr)Ak<0D7H9A*s*%!zn#eRUM`xFIZ8BC1K-wBlE&Y$>Z zBk|P}o%vg3=1)#?c=wdS@XQwDsQluv-rLPtYQkIm(46QsGq9`>esOcOP>U4bL+??q zgMA+Vt$|@x)@Ex*rL}2zRmT@9EwQu^N)+h$EoK+U4x@4endi;&-~mR5B(g(3STKvg z@VNgBPSEY}5=Laq=*koJvT|2v|M@Vn!+3;22ybg|+skEKHx=}+f3B(Wg!db_+xFi` z@l|aiW^Jnf=%@M}?Im?Zo78>vI}i|T``$LGt@S%{5w(H+!@pMYMd0_;??4g#5s8zn z>~)LkHG$p_EJKV@TbNx-KX7YPPQ(8?~CA9S4p9!&UDlQ3_yU_pyd zwcr}eU@}hSe<|L|ULX)_P9xrj|4Epm34MwD*(8KC;dCM;CSj^3loBa62^UF%o&8eW zY+N8?Ed;NPUOhNL=03>1m)MFS&UJD@HeZtZ0Gkk?_ z$-@CVcsSri9u3&O&o_FZP*-2!M&GbazEk$jyxuKf@Fe){GO`NqEE8$rsmEvsce?D?{zM=Q(G{BMe~$5;3j`M)Or0rGG46>js5cs@3iHR+63 zV%&6mL^FCDO$>~zLL)E&hacRNvtDy~oC& zpTh*hASdObgD9^8MbWa9M1Lt#yRU%tMy2&V{^$^+qnFF-4 ^?g~+{k88zDM)-Wb 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

cwcteeK(H-1NE-cZy?YE6#3c@A=*kfkq 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�AN399ga?bL2M-pHN(U4Zx?$q?1E7U9@qeBW0OIHiN8ES)`wB zpgW81bGUY#1rQWYK3^h%=or0u^tc^(PQO0?{Shfs;&sf&F8LN&2HBE}OzLh3*>X|l zsJjXHs^U@ybMSR|r8*GZO>{S^)b;-``c>#ko}=h)sk{kK!gmyJfoI@(c-gpKX1zU$ z-QgYDNj}!GJ68FSw%&#N|9h{%EwM^%&F8c8&Rth9%Cm}`AMqJ}_NNj`y+-?)C-L)K z+mACg>wEt_=+;-EEB#~)-3D~s;?oSWP#M`Wvc@v9Eo5OAnbgw}vLkh+P;m-0&d&S`0a2uJhFZlnWVdhYyg>V(;fJj;^ONVJ`LApki3T8NW4XMUJR8q zIg zA#;l*2gn-B$m+Pc7%n4=AZv1wNlZ*2iy*5M6Q!O8&~0|{BlVs`7A?vg^Wh9UrnvZ8 zg2&;y|B7rAS)yp8`qLq@B(gi1lf-B9n^|9$NiT`4+a*1*>qV9>BO6B6<06xoHH9pL z?EAR3&iPrwINldoLOzVVQoWn_hwdo4*POl{v%a56+OYO5jMplBNo;6AcM;w5VuSeX zL2tQApJV8*RN-?Ty|pTQO5E5&cOBh3X=hn0Gz`*zu;VttIctUDb1UxeHAuVn;O788 zdK^k$&muc4${aCf9DZEnj(#it=8&Mn6YZ zsm>bEO`sbq`mx*6^nZA~3LjFQF?18?o>w06Igegf6+WeWTj-|Hy^m|>eSeW1A?rq_ z`=-bm-cG!7v6Fm8k@X-uFQ4Kgjb3jVAA`vHD)^AJrqCOxLT?4VYy~}Or#yPY=sk^V z`OXXZ%x2;KEcNfg8{y+Fyahh#!n@$pF1!~$t9XcXhv4&YxAvJtw%{U@@w9+!5n0)@ zoHFNodF+;5e1`B@`wrr-i%j}l6S7rga_v~Rn(s5XUi|7pL?Tb2yH=&{5W4GC=t^Ih zMRx<;^ZK2%=;=1zh3_aX<@P*AzbJA?yp^&vB0E4&PRaKodM!nJN4`b2fh<-=c7UwaMJD~K?w!OdWW|0}W}VIF3!QxS zgQSb-V|c!k}0^)7l*^!h94Nu8w8 z8${2vucLj$#~`w71s@6YrqCNkkJ}bitV7;d_L;vO{LDJibGEDVSu4qR{kvFaxa3=8 z&B*3mWKyOivIR#PZs*W4rUuYkLa)-85}#A(E?4j=ePso`RrFrSwe*#0?&*sEW9-%| z_?J94y_@x56?vBUlR|e3T^$Gd;D;`J7+&W+t3L^EQe4V94{wFvNm->Y?P8a}?grOV zN9TUtK$*{+k~)jNhw+S`O5-GrUUvmO=~Kh#^`NK6iO8mqWy;7Fk@X^Tn>#m<^_7tw zAnPw9s~e_&mXSq}4VIB5kY&rrGRTI?$cB&&yU3)^O(GjbR;=f8V^;dy3c6$H>bYbK zKJM`0HYTM_{qH5c3VM>KX7r}ft2A~+H;wL06}poCD7v#1(igos^yVw*Nx#`ZZxKD+ zrxM5xkS!tmYQ};1iTy9?9Y3Gpy5e}sct7A4oTW^|`04VUw6j|qNqx?u*NtAKx)+}t z=%y?9lzwxJUIsm9zmc>WMi@U;rWHrGzd~A)r#|!sE9gm{#?c#6c@jPgA9dl&@SNh3 z-X?qk{!Ff|y^s0MXX~t$&)b#Hjgh|M870mX?H%*9)I%e(X=LiW)_fm5U%h61=@fdB zUJ~6Ibc^G)Tssb+H-}!Oc5K1t6uR^1-bt*Nd~aa4SVbC5=z8AAc&H-Z5%gB7@G0qc zqq|y#uGIf9x@+j_u_}J1kgZqYM|4-w-Kavh5#2*{H_`oqmp^)fVc+la4Pbm>miN&5 z4(5iN#KQ~r+~U|LHp8dk&ha9BGXbB4oBrg`?}5*|@Im;Z3(vuqUHA-q)rBv?*IoDq zeA9*J;oC0U|0ApqTzDh=z=gNKk6d^c+;jKYdgz7M!cBkUJH>7=_N2{*;9>YJuB|a@ zzFSSc!Hlnfv%g!7Z+(m-o<(;Q-G3Ebv&Q4u73X(r@g0nON9f!5$~5dt&$Y-`&6yub zFOQFSZFOTWG)B9kdnaR0%9p~f3%m2;fb^3rdfn*hejh_Nfh>Jq+GU=FX~uRP+a7E? zxt4lzt{b@3`Z~vVU0U()M`;I_d`KP}kqwuT#gL7bk#!>*DH)H~V%{8Mwf6nkDK709hHt^2!?o0BxwxK0ZwI|f zaXo^YL3DSk(3Lr08r?j)chV1~4{c(1c%EIEJ|y+m@MDZ`Y<1t1yho88BQxJ8?yQgD z3*LWb&=$XmQFMFI-F`~G@Hws>b=MI*sPWD_bfbvJ&>g)eU-(m7*V%84!7p3i^l06R zZwrY3C2XRB%KpRX?xMSa?w{EHb9_nTc8&K_d?O`abJiA+Jk;gre|7o7AKN<4JY1Db z|I*n!#Ib3;_r%8TA4Yw_QAWvcKe`81>Q16N6Rghf3cBg9sZRF*-MaefbQ=lG%T?&s zQ??|!gHO#D?vc9VM_3PRK(PT>zha}XKE))_18Y@m5EfHx4A!F96fCOPJgix<6<9>EO<0p+d01F6&*Q{- z#TsBC#Uii<#adzYiltz6iuJ;370bf>isfJ)#in7$^g(C8T7VrXwhB8`Yzuav*a0lB zn17u3pjZgD1Cw|tKhmF@VcK6Dru}up#NWNf(z5M?i9csKhG5%@jl;GSn}KaAwg}r$ zYz?-q*fwlUu|wFZVznP&eXm#}Ovb-6&r#TtVhPxyVrkfdV*Rjr#fD*XicP>~6`O_4 zD7FNfR%{(MrPvN^Qn4f0gkp6cB>pQFhUFA%fsHAagpDfJ0~=Os05+u9C@ibkBy3Qz zIoN<=%dmdMHeh{w_;telwuiJmtupkq+(;Rgkn>$ zxMK6LR>f9eF~v4vEsEt~QN=tHjBCXjU=hV4uqMS?VPVBmutvptVIjq`um;6)uzJO& zVRecvz-kp+h4~fRf_W4>fE}||aE@vJPY_QP3&9Q*Yla;t7Kh~(>xS(r)(6{BYzVfk z*f?xUu^HH=VvDd1#nxc!ifzNz6gz~iDpva;;-6xTuw})fuqDM3utmkvum#2XVe^U& z!{!v5fXym43!71F2{x_RI&4a@9oVE|N3aRS>OM^TQ!EV2Db@lTQ!EJ^Rjda#tk?i- zNU>2^RAOiZ#F@ibY^einYSRiltzUiuJ-m zie+I9isfMSicQ1n6kCARDz*yqE4BsmD0TolW?ywG{{0m3Pq7f}P_bs%fnsr3Ua@Z2 zu3~+#9mR%V+lr0DwiKIzZ7Q}1+fZx`wyxMVY)!F4*s5Z+KTZ5otP!@XSQNITSOT`F zSQ@sVSU+rDv0>PpViT}g#b#l$A9l9e5^P$rb=Z_*JFrQ`j$jjt)lCuq6br+0inYMT z6idQJ73+ZwD>eWdQfw5KRcsPAsMs8AK(S?5zhWD(KE-xny^0;fGK$rIg!rde6D+M* z4A!k!7c8Y%2G*t6AS|ia7%ZXK6fCaTJgil*6oCn}BU9mWFL8)(=}(Y#6qt*aU1|4q91o3s5n>wXzF zrPAGiO)9nvn^5c+Hm+Fx$BFlfHNnOdi@`<}>w*m{mVpf^HVDfqHU=A1Yzj7@*gULX zu@zXKVwVxFHR-ou<@s{y9{MPS-rD@^-K+5Vhu)C)_ibhEH-#d5HeV$-lL z#TH;m#a3Yn#kOE^#SUPtiuq@lKNJhWS`=%BMHP#~nicDYMHK6UH7Pa(3oAAbYgB9o z7E){x)}YuLtX{EgSe;^ruv*1xKf(N=SR>4%SQK{5JrZa8CSXU3rD2DP^}`Mn8;0c- zn}F@Yobg~5wgYpXsV>2`6J{6D)hTuet5vM_7l?m~HNrfKMPbL> zM|Sq{1nfw$H0)5Ze%OIx!?3(!6R=&yW??&uEy1=GTZe5awgcN#>=hwZB3sMr$h zK(TdLUa=k6u3|^99mVSAiKmK%VOxr|z%~_2!ZsA^fvqbx09#XR6t=3^By2^oIoPsd z%djQIHeid2?ZOrmJBH0GR{yKSQ^lHKvx>!FGm3S=rWMP;rW6~5O)549n^0^DHm=w_ zET`BCY)r9Dm^@GB>{of%uwtHHBmODY0Lv;Cfek9w3L8)?1?yL=7uKg(7S^j+4wg}D z8rGxO0xYfADy&sD+FmQw5h)}@$#k@%-r2$oQ+85UP84r^7c8x~Wn z57wgC5G<+nIuUHgTr&t13t5_Q5 zSF9iAQEV6{&y$~ue=vFe+{tEP@;tkfEx`^HTZhT>@=m=Sm^^RqWJfT0Uf;>;evA00 zSQsYH|2y?sV4I31Vek(9wzUXILqN#BAzPN02@;*0vlDV6(;Y;IQ^wyLyGmnvWjJ4gNo%~1By+<`W0J% z^(nRr>s4$EmQm~g)}xsJcZjEog<#!^HN#Sh#bI5Fb;FX1^}!ObdPkoeg2fdZhqWr( z8CXoQMOcesYp|$d+puQE4q*|+YJZn_s#qf|tXLG*s8|9PQY;N?P^=$Tuh=lGPO%AC ztzxqsG88mQpMZ>r$*6mQ<_{ zmQZX67FTQ>)~eVHET-5ZtVOXkSX8lXShHe>un6p4kM$!lx%LU-pJI)$uwqeIqw<%4 zg%nG}8Wih?)hjj(t5a+OR;$=7%&*uI%%j*k?3j0xPsKl&yszwJN3cW1>Q;z=?GKSp8>+&x$p{M_(XT?IWLB*P31B%6A{fc$N`V{Mf^(r<5%P2Mu>rre5mR4*L z)~(nYETz~stV^*&SW>atRpPT^jj*_4QCO>D30O?AG^|CjeppnoVOXas9M`1^b zO~MWpn}Z!FwhYTFwgKB!Y!|kp*fDHdvHCwE{wdZ3+f*zD+fb|vwyszPwx-x1Y*n!_ z*otCPuw}*OVM~gwz!nwTge@qRhs`VI`G1IiiZ#Gy6^p=T6l;Y|J6M?JPQj*N{u=%; zpQppy`*(TwdC#7Y+-VEQnZzJEWAqD-;yj*Cc@6&)eEy0h8%HMV6>d}5vgwj+4%s>~ zH@j72vY)0&ZM)wr+3g^c^D{S}d|0J9k7h|^+wsW+c3v8h4Rc=aCW|4H`?+qiZe+V< zWCO^ic&0?#HIjS|nLPifWs)@+_jAbQdG7BJz>lzHm^^PjW{AZ$V3V*q2it{Bz@Fw{ z$FOOoSN~b^r&tqA{C%IpHU?W!dR?$(*h3Dz3{2kNd5wb&!sPv|fX$>&jKO+gNnw00 zM<1<_L_x|pgKQGn&xwp5VT&+%ztdU9HJH5LS!7bD+c0^*^Mzt)KCj{xc)l9wDt`Xc z=a?Um-w-+9gW!#u<~N^>(uiyr+5JV?#S>W!*-9B%H!^wOUHg=^;Q%uEJb)(K=S%H; zjKSse2|8^4PAe&sj~QfR$gbM5#~iX{WJ}1d*s`oGlRDZ$c7Uu{&%zF1dDsQf=SP_T z^YmBP-G*2!1lxf<)xnx!;?JoUhlxKY>sJ1x+T9#;?s6n2zkv zeBrZuZu>3-1Nn0?2M(I<2+5+ZteAn2>qoraE9Cr2;DINCwb$ft)&uC(|1skqJ!d=B!z1tw`184zA7QO9&o|hgd1JE_ ztkJHccqWx>d`U^Eqs(Ad(=`3S0u0r8c^Zo`pg6qbW+!yYa9 zdNdfi77SlAA1fr?H4#YCU*rS60+)lelKwI_jo)JTYneBKp;RzT|Kfv)IxUM}h!Mkg z^FR`iHk1Alc7xaz%Odqtx50RWnK=?)^7-JB*Cu!tZt}(75(i?i4VZ}?GH+Zqu8pi4 zS?F8yh3n|aobnz^WMl)#x{y6!%e+>Wj4X$299gF=8*4TM}Dy5<_lEY#lMN^_mq(Nz(e5s6?R0d>mW}&{r@>QkzVuxf zBVKDpl{G;ac>|rf5BZz8_7EFydaqO2?E!BxSj+a=_=usif{xUkmDh*Sxfqc6A!($M z@05{8iRW45{u}wi{@0^SZk_er5ghmWo?a82^j->16Z2=i4+Q7E4+{M@p+5voKoii6 z(EIrO!f>gg+XAmdso$ZL2ri<$Y?Qr!eGk&>NSS#Ur;|vgX{A|y=PBW$w;j!w1bol) z+DY~Ef14yT>$9~Vwu$$e4J40A%wH~QUy?lb;Pi+2|02ZuPh4~Y9^rrS#3CLx^x z>$;um>j7UY1)21|%=+UWyv5vI4VXSU_viGF-hAPrJs&#j%=<&7PKwVt>yLK%R7b1N z?_#_0Xuk0C(q8;D@Oum!c(px$(asXHTST_WdJF!zD4PCE-QJXWm;U^^QaYCcohN-e zfod0a+t_{iw4Isfyt$Iy)c}F1G@yD)*D~$%9T2S3CH>cYb$+CLTlk6g&J*|ktf5H9;T|$QG=Qrstw(h8vbCf#* zcI|VW2%x|MgUd7~8SMLCn=kO6J#P6vwVaRG;25`WWZY6qrD1v{KrNplZFr3^vy@cg zxLd;M0lt^H_B_x%9ba$VuS8QyVb<Ix7SD!n62W zek2BO!M0&CrmS)N8e;UNzyq|2%qhpn>)(_we0Sx%$=>5h*PL|*Og$yHi05z47d*Os z!ruQ?s+&aM)urpUz#EI>MAklI*soxJEO|BafmtJ)IrK7#b1ES%V@;)WHYwi{Hsf!x z*Xm|2eZIzPd;Ta5y%uTjm;1?!)I++zn$2$J8UFR^VrN` z^9sq6Nr!NAQ{oA2Yo{Zfq6P65x(DbMO1jkGi0FFxG)Y^zEx@|;#4v%a`z5nl# z52TXUEV7mNnUt)5&AOxRi}cfxeBod0ddYcD`Zjx*QrGtW zXX%el-OpwGbmM391z)!IjB~veOH3L-wltbAd=J;MzqO)>th}uGa~$~=^80Lg zaZNr8-+@osT$YWcEisF3nS0mJ$-M9Mez+CB17C#CiLJ8^!?LrX12A>A1*C**ZMbef znZnGNZ~8m-IXCl#Z>+%{b^CK+&ECVFPvc&e|ECrNR{~~zk-@g^M^5hBByceZtA#z? z&mYA4Gv`ER99{{|^L@qZVJ|^fx;)9123to!%DaT0gZJkPm${a@d>6Ht=5j;w`(ydS z&j?rZe`&8ofH*b%Q)sIM#8Yet*RleMI2QyGf1_U_j^X=Z@l9Pg){ZQ`2zXL|tR1Bv z^q@P9?$bq=&~?*$!>qexf0sqJfb6He{6Tuo?;|niehfJK-0x~|*z5bS`?^4mh)q4O z;?IBk^clt$tR5zHB|ozFJ%BYjSPbUhp}t@PqC`G#v#%+Bwm9`=&h17naI$*pqs7|; zQjR#bJ=mIkh3Ol7BbL1{HGMSNUE%e*T{I z*#}PAGsm{9csA#4D~)rrH<9{_qCbcJ*NQDa!V<7Wm>IJ+OT$(iO!`hgY#sJWuBB}D zXC<5c5$D}@eCZ4%5l^Dq@WFiHKT2bc&adhfn^Rr*a^S^^Bm;4L?ci(m$N8=f+n00S zXeKiINQ0R|LZ@}UaV7Ac;-%y#^8XUoeu8r@+lO-wYnQWF(_f3<74H3g*C~Tqm--sS z*Y1Z-VuJL+G1w05xiTJZl+FX#llk6G*AFG0WK6CFYr6uhMV?%fy@&~_V!MLv<|OB% zk~h<5R9(q>|B;&0m4&Kl|NoEi@KgE1u-NuVx@>Cgvst-oXV*qYahyfb@Bit1;VG!g zkF;w7)(86q@nPaC=hP$8XC3Vf ziTmU$^UNmcJn}tXw(ge)Gb4B3ypX%=mjAZzaj$8EBjmk5dvdQxVnp38^9Ss?TuVGH zeg||DJgd0WT`PPX{&mu3l*R5>X3g#!l2)@8fHJtdQ0Yg1_!IfU`)m2b#5~%m++Jw? zF5h=b%wsMf208C`m{=k0zJ$N!U&{PkYFTBA3Vag`&Ul(y-8Tz zKd^s=&G`AFY}=UcJ-r;9uJPV-ZJUHSUrpm{;nz?6OPc+#d03EZ`H^-ShRwlDOfY@N z+r`X&gM&tM9zKoy82R6c!GmVa{ENtwW>?Qh9pQXTs#E6qHFTF3IIEEQxW65D)Wn^ElK{ruAZxwf zgYEin+V?&w+lW_Abgu;1Ia5Gu>7Jm8wWc4kU+_Ich6zXwllA~hX_w(+ zt%;9FWAu0Og%8&A6@Kr#~S3IO)hw7r#xgBiPbi z{Be@^llCB=_F9cIoEqQH`CapF)({eB2JzRomM^qOotijf;-K+o=F$^?a_;gQuFXpn z%woPQ`TbnJ@b9I*!ujHD--)l2d0Bk14sxm0ivcfNA{PN|2S2;zwCbw$A30z8JojhG zhx|x?Nx`;Y-)M-%dSSbYWnqV~pLgixVB_odcLCb|reSlic8A`A_=7#?EB_7br* zV_(jyt_2=tph>-rA#eB-`}@@RTVmQ2Y#sI-uKBP@b3QM80lw?P*WjK%wZAj8*U}Gz zcHj~Cqg+djdz6$f*>_WA=P5e12lPvajDRk;Khz+uSXC3#r zmv7j-?c+@AmS3$C<*efkuHDXT;a$6(?_RH*X0LtrbDzHyjGtQ7Sbc4s^mBi9(!R3h z+JQ~N%sRp3iNI_>M{qVzzPsF)9c`Qgou78s{~@u>leDF+GO#*WGuP6Fa(_&C7T)B- z$KkCmd=}oVco;v+@P7CJ*V48!C0>&GhdHj8)($$0=zKtQymSovyx#DhoQX z%VBrmYRB!6(h=oZyA|wWf9aOq`F6+H4Sxl8E&sy!{tE2+v8(^9JJ06~cImIcZVS8V zufVS1kofWy*mYqS-MX{#$$U79T^75CWez);U)}daDWBhcd|K=7b$sRi`eY2&<8lW! z>0lAq5o`wbG?|0hrf_TQ-V0YB_ucm2x+`~KK(CG%jU3+v!>D!rChUGhqKF!Vm5(~U2OHa6y-8h;C`|2O!K{j3syOZzmzVt;SnyCXmL{WSLG zj(eCqB5>-2g+;JD?&A2WY~yPHUpagY;#bP%yf*`o4Hi1Nj9`?N1v`z+yW8DHOT zpB0@slQ8Qjd!3x|Zn-XHx&pqxa_>-Wfydm|KGwb^_V4uDU7ph_^&eV9?jdJ?JwW@qY0hQ_c4Chim8@ zpp!Y>A39F&o6NJ6S7eW|A?<#4=YT(0%@TYC#c z%xKnksHL#!$L8ahN-VR_Bv_B%^s_grl_((lk)n;P4M(xr#pa^eutuOQ*p*n%xyk-x z26^aT?6W`&o&8)rBYIuR)#Y9;vv-m)eu%%-!+aqv>G9LTZ|#55UjOR+UNm!`Mb5C& zbZ2X#Za4Smt!w)pY#h5K>^>}xOsw*92+3yZZNXY8TLyXSznzkEzmXlLEgu&9({gTp zvUou*`I;8{f9L*>?cW(Myey&Zifj*Li%_D}j$cEp!4mc(i}tm-N1q^_e*8rLql}-Imi%;9 z^0R=S$bWuyexweL@e}^9eBq;~>pv*)sy8n+|)U$8B8*yshk-LYsVY_)6%ewJLYf8LnVBs-_-HRmFk|*c+4s*19?&Te~ zX6e#FPe;JZ?&H)wBC9QX@t3XHFTHyqX=Gueu>Zf(SjFF<_au!JX>7rUVITDJhk4G+ z%+d50-xmmxb_HCL8-Jm;CzwgNJJ%5ykWC)@Re4-W9@aT|UaA>4(E|H@|9;^?sTaZr>hckiQV(~+q$q{ z_$IF9rjy0?gdVisHdwn4LGhj+<}n2xVkl39wCLbi=LX3FJ9H0@VJ`)|Kg=I!P*~<%Njr{hbKQPnlWS{jQ>tlfqzfApgeI%DDwoxk9kwQ9=Ch>+PuV(SdDvCzI_Pi5ktr1jQdvMreUVfi=C zp@-eEC`SW!TiB((VZZdOMZdj{K7?oC&$rUznR#n{UFWOuOe=jEA5HL8`0GTUHn}b9 zz+3W;PL8wYQarqVx;^djkL@wG?>yZf&H1cayP0$EpnLx|Ytk^u&*QJTalh~^sdp38 zrTu=4x@2teB#?}O4Rm7PykGcsKYy4$baLL+ReGoBs=PPTL1+As`*M*7j>7H|$xIyA zt@4uN)AtKKQZ}BaB3??EA$Gl=|G1m{>-^UqxXiztFn@&q+RPvPOO0FOXc!-j&)6@# zk-z0f#=rzD3yVtr&3cz-3U2$%I^LYu@hs8J3rQ>g!%y+`OEwu>>IMkwiBAQ`p3)v1 ze@ce`+k(SS@tFR2i2vlX?J>q|K%kjx*xcn+|VsC8j89@#H++i}!Amf82nrvqNz?2Mh=e(;V5z9#WC^Su4SXU_FyzZW)M zBVYXP5(usa8u7J*ugG`r7ru*YtIt?x&-558{$HRzkbhMA6#d0sW1F(td-4HaluACe zDZgxs-_A+MD@CEpk9oL=fcH3vl`-^8>TIV0whGP4LXWF**edSBC z-e%DIUQbp|4nQuOGn!Rw8eXvPxR1(x{OiH+t4vIgIq+(L*B6ZcLv+*VUX=Qvyg7NV z?4~^bEla`MFQlN&MNM?oAkP_5Qd_=dSJIE=sJHpZDiY@ld$=p@o38|X z-(Pe3fq1eW;ddQ>bBX=JG}m$-E}PNIfnNUY3edW&?_R~f?EzWK9itm=udFMs;`}y0 zh4GF4rv=b&Zu6>0aUP&g+s{eepcy}Kc6ukW$UHZIkH*XUg&!9muQK=ZU(3Y%gsdrY z$fl9qBQk!3O~a;O&oIPd3$R7l+iWKNY!%jYWxw!6VJ2qMF1O_w6#G5WPU&anEX@01 za>u;oe5Rs*x-3?HAr+d~le858=D;9k|oCa8IDd({pXV@WV!*NzB#{!584#PZZvGecyW5i?cb@ z%~~S~?^Rr4Zw5XGH){v-Zl3P29zQU4!^n@7o#bm0p184JxFq?qs>0~c!-wE;n-|~Z zU4_rU9}sTmOWI`{o`-h|=SO@W!Xhd5UIHFIX_vY>)=P?uk0y8)ZhZ5%uo!FwHp{jA z2}BS~ zfNboUFPKQLu_lu8rm(B)w#R`yqe6itF7?5C;U@o#Py4)yIfr$yy06ume~>tkyAh{lOYf z-@_*?fnEsK`_lbFhv>0gJ9*C4_Y~4BEws(MclKYrq=bY?llqXei!i1c{Pe$Uzwmvw zpAoOmhdo;j-*?n7b~5OUqBHjLee3x-6T8eF@MMilY_emQJj1|7#AS|bms2wrPNhn$ z-zANW%zohwKK?M}xpeP^i;w%RS~q+W-0^v>-0_h%5dF~Cu%758)=SKB)tBdPFyNkz z=qJ%%cy!--j>%pB8;w4TXVK51pLorF;crUy+j;MWWbytJ+3`&qb*V?upGE)hwX~(I ziH-lu_g+Yde*3MvF3TM&--o@DANBt3n59Cze zxf1YldT-CuSItT&8F)t#;D>{5Yy5K%pLpYb>GOC7Nu~=Hhc!!@%#Y4znopiXyCPxdO<<4l(lo0hJwv%*nNwFt_lR_VoNMQt+QpyS$c6^?3x6c_OrBigLdJK$ zUSF_W;n}uRv4XwmC@!K;C0@UI-+E5fl(Fo2g}gh#;EvsYW@kbn9|?}t+~BajoBu`e z4X&M+6PNcHh4Grpwjz0un7c?mW(M~QFJn(*)wNqb?0a9+HL_fqt>KaSn(O@ECQmQ+ zad89iApi6FX$_BmxwePT<1-rbH7~X`eZNh8#X8Ou>vF*NMoC5vRwS7OUKhw-FE4J;bCEFDg(E_(OZKiv2zJRzdw|FMTsZI8{<*U_l0{!c z(vzy_wlhsO=lE^>Iy&+wvFqGDSSjD$FJaDGz+~5|V)ralOAoo%-}OM&HPgJ_BCgwU zElnVK_WmswFSfHRt(PRfYvgx)Y`^fl()c^4PYig!L}F)m&Fp1mz6v$4-}zDIa`9!K zGlaeC);R;`OI&c9qsx4rQ3Bn~_wQTJ7ty{sFWtM=IFG%&bH-A`5p)WDcFcCj0p5H9!k|4n7Yz_kv8GigPkI;>3lScTVPKiRDe$?O+!f z-!HI4u*+gjCV0PtiKr{^PRXmp*t+{_JoO*gFMRWf-cO=&(L7GWOP=ic$)feHj>Onj z^gSQkFFZ%|-D68s-cmZX!e|c=6HaZU*)&3UQ?Rry;qX}6U<&{1_mTI$$vVlC+LZy3paVmW7HA*uJ``vaX;&C|0x z0&QHA9@kgQHEUSjGc|rp`SH{6v-Ht&ZSsCoeoA5W)kX9VXYBpIOPlx}JJFXq*+qZl z=k~47(vdo0J6^0We~A6$&+iw$fS#!@9{QApkj&{}WJ9y;y=45V`eGd+?^3VV`2J2$ zposuSOsD2gUfR4|6Wk;~ZZkRTGM^m~+mHAiW_dftvHv*7s_W7$lHW|#O?)ZCO#s3@wn!~cQk*_^KUv)V)zrk#c;Ott3 z6Vi`(amfiI*`MSTX`26M`JJaoi~PS#vcp~}Pv1AN-}$wD>odHhzp@FJKAEDxqsSJK z{gf=wsblxE9Q(Ni$`h6|;11^Xgu(OTg#;e3X2 zU87v>l#2<+l#2<7YwH6tUP-wIUA=Y$cw+}^`4o=?*33?P@WvSL)tvmDR)32(@01Ot zDlcM`q$-_BzFL$%W-Cd)uDax_7bS_Eo4l;(|NVXI*bsNHh}C6We?j=I)7R7W$WD`^-hk+bI6B3 zW1mZ!F)hK{~P%{^4~+(io@4~QEs_XI3_7VRDFkBFq_ClyLsne8=KZA*_Vh7 z$8YBIb`k*&ExAR>dT&hI!@heCZi#C$jsU|%(M47e9ZsRe&Ks15BwzgorZ0}^32h$ZNsoE?F~5x z=ZR&Pq0w&6)bscn{?q-!mL1C;mwmN;uTjMfY3Kizc0N1m+XAu{iLpp%*xWC?oogKz zUrV{Hfz%;YEM+9@cLrjp4q(@V-GptI^K!5DraZ6DXR8o*rJ~Gy@o?$76!Yh>UB>nk z_S|K!r8uV_@te0mY-5=u&Hf+#_+Q%hzevx_f3SYoT>1Gg%HrL8r6!vosC$E4a;baMHc68-ZL=-g zvM$@c+rqM~EUYY}D5;7`x1cC$f}q@9g1XAejoaESf}+T!2x^M1O`Cs3{XW0v>wP}o z&-e5Fd_U=G<@Cj-!` z`%SKGtByQ|!Mnka`TZ8}kD#4_eu^12hcuXt`zSQZe*d65M`dHn^dtCF=U#mFWdBU< zR`wM1S>pEctdH8Q3atJQ4|-Y>sK3MO>6NnmB3D>X!+tsI>BbUtj|gIU^g^%f*n`1Y z0=4A;SSi@cwcdb%!t+3uKmB>2E}4j*23FZv8i!WRNpx9A>7#lb1FHkuC>?{3u!0Ko zm#J(yto~p-!Fm+VNBT(>Skd%@-h=?^&zYGl-+qb~M8?9mrZY;Gbr63y@wY2}#9p@) zsF(1X8TOnMp6w4<%)Gjs5sABWpxk02qM0*EzHLeA_mF-Y=|2~w5Bv@=VE7RmbHojY zntj_8X-<>AZ1%z6u0p@9vwUlE#ou46OYDmkE3B2&HuV=378K7t=&|kUw@pX~{4J$% zW186LHGDS^|0wa(x$8>HJG&?BuPf7uU8(Mssh*}(Zv%FMt5`E#m+J0K^|U$Q5-cg< z-|XnpHHy%X>P7n~ybK`zq+$zeneNL{J=dhVm!;B9?<&0*emL`>yK9g&2j{|UEw`C+ zFCnb-FAsW?!91BgYm_aw&!26HD^eY6Qt8H2ccZds>qvFHMmt#gc}1%2rKyfv?PqhU z=W?uicf^VY6|sXFT$AcxpI>dqcQ@teEjaG=1m(!;e^!oc->ro5ka zX^nan!Q6WgBa>M4q!f}Z4Y@0UEgF%atKzM!9jbyFwttBa1idmkCk{@HSq z*LP&N0#c~61^vWrC+>BRbF{-v9ab!+Uf;K=^zeir|)ozD=_&xkWldzHaEw;jf2Q-4l;{Rerg`{z0~PN`Lk( zY+-RQ$ux#e9XYUSaU$gM@t$h|MNC&{WYu6vtGHpICLKws@w z_H^dI#m7VE6SLzyJExofh4iF5_eCv5bmAHlH`D zDC;Qn7grtkrqw^DcVaiFzdO0LsBvHc6Y^e}CXl?U*D>NwKI^#mF$v=A{F;^d*}jw? ze|0jpFWug8Ek>F47aaEr!#0u7`H|%9W{sB#%GR^p#IJeDad*a$`L2(1am9pn@ZC&U zEnzi*UTX4;^@_iDo0VtmeS#-)k-JV-YMz{c_Tpv7y?62)$Sk|- zZXE;1X{I>mtPFnGt$q%d%&UM|H@fZNxvb{J8hH z3tfI;9i}D9pY-?JQnCGQ_nN4GhoCo>KJNBUvwDK`Hu>UGB9;$~{7&MI5x4aE~9uquiXl4he(KP{1=@8;v)5B>2Qu3Kc@kuv(&!c^1h zRNGbNoR;W{?KI;LmL&!K(B6Ct?fj^mvS)RIFb|})I}szbO;JyEGoxOc>R!&gzcban z+J3;#iFc*CuQ5HMiGj8bU|lAZ*+21K`*EYCyD_#MaJu+PVXC_|)zf7Pg9u)o>RFcR z6+x*PJs}#2trlAEv=n7WnO0d^N|sy>r8TLZ##FDSma7TAGLu-P*EY;0faP%N)PFJSdUZ3i~Bq6vd)zj+Wn^JAp zr#fznpqE19mQ+V;D&1wHNy|!l0GS-#lj6>=TOMhNuTZ;Xa?*OgoHBPl8-9H4ad+ld zHaA9@cvU)JFJbM3y&#xZ;$&=~OEsrD?o6fItUffUQ~>-;T2mdjr_z_1X5*t=guOP^ z(UeM~?@)IiT}O4U4ONGs6I&hm<0Ajrz&riAnD3=ieA<3f^$sd!0ZV|ET=& zzQoD*AVjNI~fGMQ0c~r$2byyGG?fCqK)bG0CfA=w#}33_7KsJnsE5S2jmvjOjATw=ntT zv%4!#%|Ee!@W02sJDxy!tewq{f(0?ZUiYaykztdm*GA|R`~p2qgC$ERJMY>3?luOJ z-;JT8cGeuVU*(xS?%i6%51S*<0dn@zA8(Vf@|7H)CVugsk9!}i%;al2R5oAJ11#U0 zC_P5Qu!@Z#`vEmhgn1yYIjHTQ@!x*R3Gdx%8|y3Mo!CDAYEc}S?hp^UuizFenM9DCFP=9iiU-X_}}h{-2_Zp!s<(|cMoWu+~x^FQngb% zw3@zp!rLFAwZ}zgci}tk2@h>{Yn8GgMC;8NTC%eaL2GREgtySAg*{>$Opc$5{K@f; zKoi2*2;YCo!%|;m&^R0?-SGdM@HQ(Qpj8zK?!~o{DA1C!H-oMQqnKY zs)cIfKSQpRZ|(E3m+wE}?hW#>RvXn0E z4zOyl%zYy}2pa)g0`{}Om!f69{^r`wsO;k2uu@iQQQ5^t)?)=nYad7#tNir7SM`rZjo^K*sQ>+{hS zC9u6rH;9fvV6x44EI+E|IE|^Dl%w*{3GZYPKeF;MD|@V6eVr_w_{uz@$7oGMYkd5K z_p7tg^3N%x6JMQ=mga`K7a-q%cEWp|zb4ws)?MbFLfA?B!)>}RRkn=4w1Uu4oi>to z^yeqMDV}5NWb?3Jr#joU&ENIJ-)$+$4?t_fFHX33f!G{{&bn3mD*o9kgzfv(!}smhRk%^BjMG7yNIy;b8~pUXt|i8#9$at(Elqp|u@a+a>FaH?sPA-nzHVHc4WL*^=92 zR#`3fvtOOad5=^T*b%Vbs=P==|GqH1;+(8%B7FC+Pq=q}_*f^{B-k>g;Ujt21GePI ziQxS1?vPm$g}F6$A5{@5aS`Yi8f7| z)1*16G%bNXljRk&!zI3zJ3gI0Q~j^_kNk$YO=-DHh~u6%Pkz8AtySFo>f&_}uj_%c z$5UB05pU6NPXu>#hjlCCJH`Nf`-fb%!!ASGy`()z+K=)a+CxdWvN(Nlf;gQ=Pk6sk zoY?mHVNUy~oy%Ut{PepMp5{`0gjIo+MX;q{rC?9AST0^0*kZ8EoTao~K0TQ>^r`0C z>(l#{0JDvoEgikEk9!i@bZA`iA~XM58FrE8AhfSg8a|>us{DSRiyZ>%1`D5~I11Jk z!pcZ{1}qKsOc6uiXYSc3dolY9;96UR?`&EEJ{W`7gYS&sDqAP`DEJ3OhffFJ9G+LO@!N6U?Vk1}{72>nf)2-DbLz!pfGi{v}LuQG0jSo5JPjRTI`pn6(XIHOgShDv=T?RT#63h@+fU7u*WE$OsRzHj%)8apZJM}E zlgL)h+3pNG9&c2fQ`)H1>vVoyM~I8>w?M07)xXjHCr@~8v{ES!YaWgz{bFC=2`M@Kvx`7J9*Zu((Q&U8|nxu{&&X1)Cq4!^&?*1 zxHLJ8@lb1*sEYyfu<~z(#=+?m!F$()rNPF)GCVG91K5EG)(^Hng6#ksjbI~Sdn4F> zussoM9Bg+4I|eoq!3yfw--=*mU^~I2Tj--QSAiV?%g7dCOTi|=v}D&uSR2@x2)!<_ z(-Eu}Y&wDs`1Hd04uLJ1IpN-4>F2QQut~6u5v*t#<2Qnp zgKdalOTc;}SRL5<2-XhP9l^T6x+2&{uyh0)1nZ1o!(gg!xNdvE+9TK)SX%^}0Ben4 z(_l?t;l3Z86~3>Gb4HCVWOieC?=@=4}8*m*G47gx?+ z!o;s}VcQ7nC+yj3Pm@_)HaAP2jS#kjFgv?vVHv-dTQXAK+I^gOyXT=XP1u2lpke)A zUsy0fyfEKYgB^}w^IV zyKk*e6D!o=;;A9R7X1->N|3*QR}#M!K1%pT!c7)hT3S^GF<&p6AbdwA-0WZqcc&QC z#|4edCxmMqr;lisf$hnpiO^J<8p6j3*S3Z}!kWMifn|6_JkSYt5bV{81f6r^fmc{B z1WX~?e0M^t=uan{Pd~K6XRot1==?r?RZO2wL#q~Ab|%&8m+4bo1mILVyBU@U|kVxJy<$|Z363zVB5etLYVa8onY-?CNI#tB}G-9(U|my{Pc?m z*GKV=`su@UIRn-f%17}^o0u;mSS46f1gizBk6^7}brCELwlsom08{&i%hC^46T&pF z>;S6<`y$Wb_oSEUFhp~zP&wb zKg-&h*fvdkJ=WfWwL|&TG&3KZIpOZmv3!OtAC;?(u*HAL)=lH73#=ThhG#cF;$d5S zS&0U@Wcp^pYYD&35BJa7BH#Rbbuo}j4(=je5Ajgr{CUCn*3MGtG7*2ZZ2k&$L^(|S zP5x8ats8))RZdc7tVPNEPu0z(&BX=UH|c|6P07(2$3!oHiY>uqf^x;!YFyO+nnN zv}{?e1?Nh44_B{bsQUg0aXShpz4!aF`5yUP`#xM*zl}!S!GY62^14KvZv}KT4y#w8 zFDED6`(GG`THmT~n!tC1za>}xTi+yqjFsB&9PP!54|<7Tws10ZZz6k;b_WUb1?=IA zq1C?ED^mw+3DS*_ZX@X)=l7}4$7YYt`auMK1D~6Rk68rOw&a<^;T-i>Su6Z_!DMi5 zTgeyLpE4qh?$+Z7ZO9z z8@q7QyX4XQ$oj0s?LXLs03U?aYV$o+*vgqrrVii)bC8p@8Yng9vne?`6K%sYpc_VA5H{NJb-#k)Hk-y^+@a4Pco%UiJ~HX;^W%nXNVeCM z_h9Oj_^g7puc>SHt^%-)92W2cDX`5E)D&3dkbyQI0KDL z8RxO*eIyW&y)5G(X=Z20n%1}Y|{Hf5kHI>+(F{n z84k)kPkrx=)>k^y9@3V5X3|TGU$Z=B+uPzTZA>ZN1o2u&CcWDu@pQFaCZ5V&d>Q)T zXD7Xe@cibNJNd7Ppx{f1TSMFfpPzJRaH;}&k3zN=gnR@5(S+bAPWf?7_GwdSW#1|*MQGbl)r@J~YT{Za~Azk;ECcWGI zy5*-s<;iB}?!RfLJ?@+IM&`}yvb?wzvT57pfW~gQSCyC&UWau ze{0gaN=9Gf=lOZ@LyyU)qw{H^GXb6T4@`Q`Dt>4>pTqY&S{?~o(W$ze@*IcX&VkPT zF?4iiqUiKMXZq<3|aAB@%fKK)Zp|H#o;ygNy{ zW5p-ELZ!P|>ClD!_X?T}P2Po~vN`U>P}$w}{erGKr)EKBCCdN=%l z&L8;a;LN=;$GXB!0oQEWn_G-dFLaKiPI~VaPo7<`Ne)tzXuoKYBi8p4-m%NwK=CqlVK&>r?Nq^u8C%pr?vWdMY&V4?L?(*v>9#i~7#P5FM zN$+S}{O9DxuOog@2m9|&KIwf*ecGk+tyP~we*oPn=+iaH+~PI4-gI~4H9=!r#Yyj* zxis*%%AwH}q0y3|p>`U8Mn$F1o857|`OF;Ngr~MUo^rfBM*7L8KfLtf?L}9y-}20p z-oFNCu;!mbKm3Szo)n#S=11Ti4(L>`IqALiu@6mWqnt(~ zvQ%S4?Ro?{z3G$Q@*+oP9{yWFj*Eqw_$|97HKZaL|#59WWW;?EN}ME5O7+#jAMq@omb^KBzt z=UY#DFA3)DdB>35cg*^8yB+yU-i0<0v+(1(r2RphcO?DT1?}Xum%OS!f*cQg4d-pU zdfoH12?mYH0WmVeZAzCB#m#YL*I?iN1Z{K<(%wMPK;- zN$+{jb1@8?gBZCgo|l)`gJrx9IbQ}cNv#iCExdGOO-{; zmv@*l?ELdd?{*o#&n{1`pX*ELPA*}AuDggU`JwophifH2imqdRef%l+-WcfT>ry&u zpVf&pmXvNO=_bohc|AV=<)`~C)}3rR^-TroHju9B!c%UIXk*oEUx__7Qr&#Ioj8Yx zbEA0YnqW?5J?{H6vbM+0^^C$?k-aQ4pVpD=FfqF{1>)2WY>f(vU?`qUzj(2 z*qXE=jlJ=rQ{GYNsqN$Ej>MtdVz@eVlD7KdQywNue?8d}tS7Vfj^&nrWla8cBpZUp z(x;yCPWrmcJ-T~6Y`YDuNxzrKuY+hDfyU{lopQRe@lV`&9sfC; z^OW}>&uWLTo|*W0W(spQfOg`J6PM}5Z?o+Eo!n}ed2j5CB7Ij-NAy9`o_W^8?=#7r zL(u45a>_fxv&x#smvmQ_D_vg|-@yLMbIz}?TA@+*Pv_THgU~or{qXy$LiLA6dCe*B zTdIF(e2s?2*JZM+Oc<<3RoSjjN;3*u3)Lk1O@fl9yp` zZprqI*2Q&TJHQ@}tlLQ1(Nzz>Pn7>CG+I|by!q)2X$#hzU*FW-gg(9Y{Q71yG!9(y z@cTyd(*bB4X@BVXsgAhQ#NB!M`N_W8ZubALeE71@?7z^cyXurz;E&1hdsSGsWo#-1xWb?}EfNown8k3i33`1l4&Ea{)XqfMYy+b3U1GdJrvC4K7 z8vEC0%d0j$12ziww`kKQCf~B#&aX`epfU2wY#CMVA+TK`tPX59*iNwXY17lt*s$UJ z+H@(#fuTFHcheq!^A9`+A-yJ0G(s%uB`fhO#`?K#pzrIUDW6AbY=Y0OG zjyh~3%~8^<(s+A_b=7=!gK=m~zwi9|Zt*LbA9g(azN?`4X=oh#(Ame^X5wrg`rF9N zgU~wjk@J(8Wv{}1@v&3hqXT)DowKucBPTQG^2LnF-419BfBgJp<_>5~eB%6M<^(jx zKK1Zrrsm+v+p#BnI(MF{1uFylTgb@G(CQv}_~T4vJOGWN&u7ah>@ZkC2&)5|1UvJ& z^V1z_HZVVY;o*-9m8};V(|fYzmFyY-n*{q?wCOms>hC+hHeLK``0p#(GOFCwV249k z9aufsIN15TjwWp+M#jaJLe~JwnL-r`&r)8_}B$j3ih`cAE%+!b?D)bk7~-Z zv={mE!%@TEIs=0`>BFHIRcIDKb&0$ zD`s(5cI58I*Dd;I+5;dW@WpFBSu>@YMcPMx1Ttk}r@#MJr8!!Bqv%|3j2SWh4B zgvPc%p7IW}hw5xr^X@|@M`HZuGCm)Z&{?uz%DV_M`pCbf==GEjtl!sn~He zn9oBi>FY_qec_aQKQ(uP_~%Q^HfJ_2vs2jKLSlLTRy#)%GOlsoHQU-YmFI#fuS*5w zBOjWbV8dXa7l7Y}e@2M6Wa3c53*Gg$`b+%%E$J!a#IGry@?NI3D<91t$G`?lro2b# zy(x*Wne)dRNuO|jAot-1LRk(9VaJ&pUO1q%FEMV9U(#crxrf-^ckLVC&&N!8ZxeCz zxnYeE_H9V;Vv6j`UhO=C%GE=G%lS3|9QuDR*Ae$F_rQ0Nbxfe9HOm0;_)9 zl-qwvywb|m%E1`XI6zoY*;LM%=EGp6VE-lpd=zgIY$@2ShBzPbqBqiiV6PH}eZkId zy0b0KIM=xYf%JAI!PUe)M%?A%6}$fh|3_SWPG($ufEBNUcxC^PAMdn_XLp2eB;F?C zEq%h2*H^@kd2O+_*3#tz^5MtofOQ-z1T9X>b2Nxok30iEpO_F_kXOzV;LbA@Y{EYA zq$&5_RxU@?B`BKP%E5=h|Cwjm@pNy9c)c2YFZhMB@7dm}|E}PQ#4lZ2;cUdg9d07j zEe`gB6Q{v*nrC;CtI^&~y$N~)PoDC=tbCvc*S!ipw0ngrfQATPa^aMF#}?`-xNglqt6lOB>GPn>oYyvV z!67O4t_A7+`-#(3HRaW+Pe`Avff;li9`_>B7rbwb9|S3{N#b@sYs%Xu8KAtrPAHC} zk`IgC%zCGK%3Jx+ev3M5q#O8RDz(hs!`lI^Bg>}TeOThFt5U_)pr3jry-bP&7q9bqSgECB-ouv6XzcuE*7|BYLd^qhLkJo%>Sd zP4`1<%+gj6eM0%Im~!u?YmwZ%gbFv5+^l1QgliwFsE_t1PNT;3rSg}E_`30qZc>R0 zaNW!Bg*($zN7^0rw3+yTptIb~%Khdg$=0IS;b`(v<7-g#nvwJVTom?YWpJ(Z zSvz#LLFY7do+~==qkj%oJpN zJ~^XH{Ai4~ldkE?DUYG&&!?2d=M}xcmp8v^Ah{MmGSv~SpEScA$R(Z&P-J}l2C_F% zu(ecV1r=Faf_&C+rvMEIiSm|A4bvnWgGRwsQ{K8o{D_-N&Hu!|*U;T3m_L^`mUPCB zP@MN#AzS@c>}Oq5-UB=bx0FZ)zI#FRY@Z_U5toZQ?kY?uIbe1ZGzs8 zm!e0V%lwarHxR3we9o8?Puw&e!8?Zrr7oNPOQz)>VD0X zcX=+qh^313k~yDKcv*=KMmx62=<}nb9k^r4TTe0cQ6C)wI|?=-z}mocQ|5mE{U6Bl z#M>in(4gC|B;w&JH}>VOX)?6(ZLH^deO;G11Rdoybn(6}!s`e-M%d$X=S0R(Q*hQhVm0;y}O?ht(VYOh}z;x}fK1$mPHU!pZh{Mugi{Cz# zbJxQL(F40U6t5qw2JCquYzJ5x>}fux`D_GiBUrOA`gTCC14kiR%+E2xMhLqp2ou8) z$Zv%oBfMZ>%4^GpBYa)>60k*YXMQ03D?vC?Dl@ik2w2a?n&y+G#2+R8&lKOTN;6#; zA&JW6ODP=dnM|^RSnafdblqF0yauJ?BcAOC8y4n|fqDFFe+7?*&#-g31qdf80x@pet?pMETCQkR@l)HzI zIB0=%%9Z?Ww)YDU6TXM=doncET9DOql&~f5$PZIJ4-+;-*fOPC@9uY0e$(LN;A!FH z$3%v}W@aHjg_muGKi@fjcn#qlgxkF~q-Ujz^2s%OOp5B?cEa}%{vOfiBdi;&{$07) zMzDhsY!Iw-+mzRCDGLfJ_&*G`6KqnL$>kR2;d|Zmi^e7T2Z*!b-Pv@)4ug$Gut~5* z@4+r0T6`3*=x*9Sf|Y~q4`G$WTLM<`-YIWT38{B4HE#2}QoW^tCf;i&UO(}y{@6Ye z%&1y{sBL=)TeRKJ9~$TaEM!<_!(p0(1_|#Z{C{|M>p|%pOstynn{;7cX;bFC(|d_q z@V+UpTXBPabnEYN!rBSz_rnr(WYMJe!NGlgVO6JsdsxpB&v-tdkrU0zT}8aI_xm;i z;;|~E#H?(Y(p9e}!Z*wlUO{*_;fDx+1<$+}8U03F*IJ@csllQ+1H`HLz?8R%XE(O2 z)Ga=1nO$LoI2$u@D2Eoyjgda+B>A}VBVOkHB3WH`OOfdTT9s;16MhF4Gc2WwEG>kD zS3WHz70|C8WIp-el(&}W0-F;%VgG#{njITaZo~(j#F-$@YZXU)prseOhQ?+uVfFV; zd8-uGm8y6dX~c_z;2Xi8C7h4u*kQ2kV4D>IxfH*~GXH&BOLR&{%Gd0;TKqLyeQ`rb zM0-LKZG`lqcQ9T)J>|W|*PY^hg|hiPEnXLEp7)*f%tp1B*vea*xz`(P@U2C6X^pPP%`s-I?Izueb*Yxq z-E-fc{@o(I3C-+48b+syzkgp=cU0bsw!wd3Hm0pjtRCd;w+Z}rORf#g)t_|Zq#IM2 zIfEVMvv%F>+RWXq_1x`>UGVDMyIwgMcewD4Nh=7tzBxj7kws%+dYk()mGTTTS3 zIU*$?KfS;=K4fKbo)CLAWE?SF^%YC&)_HJj3x8F7*hunt$9tF$e>UZ9EaC@j;>-Q4 zFR88P{X1#6muWrOwB+$ZvkVn6INj5(HCO&(TIc&TMi#%9{C}CcANjUL+{9x_Y~POZJtF|#ozye z_KjSdyoBo+)e(8zNp_kq2FSnecT?V8p50vzwzfe2a9vq>%l)(u zhF!L(SUr^2`#;SL1aiwk012Nh$I5_Fnp4;_RQD3f^OdO$EauflfEq z^`!-MBp)K)(zz+`**=fQuZyM3?qg?_X&^kqvNjTpBhaY&B+$DdR^4`d^s~bX? zGIjB{RWAxa;clTZCA*FhcN1}cr?!NDvhy@{Hm<(+Wf$-MeJOqA|3Vm66TNB&_L+id z?<%FG4b`W05_oE^Wm2?KO{-FE4XKWXRJt=&r?PdDCY_je`wQ82XYZ&;Hed-e60a)R zM%;el7A2=Wdr{K7Q?MXZ^pM0qx`6g)XeZ;i0eNgX#gjUtd1DlKbZJ0R4kDT^a z=kkN;$l4JWCoyxdSHc3L93p0bb~gVB(k?EU_Rc`3;5N}`j>y=w-j~tASL*7Gf(oLP z-itkx_&th0PkCyHQ@d!|oyR0jmXEd+B^bXx=kQj54+lSF>`{C6kaqo}rk&oc{P=DL z8wXp@vp$*&wu9BArro`xcCSzTT(FTGR^IPs2HvcesSvLYaC;FG(Afc<+eFyvlc94B zDc!uWyyO;iRJ%jk=8v)uQ6AE)K9{|#bn;2@T7;98X=t5({qLOpGnMYUV9UaR1zU^m zPTrHS_53En_daGiwC{0^?lEmKa}+ns)$v1PX(#b&9y{%ARy}NgpbSDt=zN7`hz>e z{dX`W7t!81Vjk6S_i|cGUS@2=Xmfr$;Y)jn~HilhKxL`{MRzJ@Z9JN zW@itv3-On#{-htdFeW`#uj2Nzr`I?dBYn?ProE>te?Gz{zy`qn)ewhGgY5}nWrP)f zg#Apg$4JK9fSvZ&sbZzC06$hS?OhZ~UjtTr(R8rCAibsutP<=l#X~318>^Ux>?PNt z-%a>7!Z&8ZdEJcYZvsC9uIokg5w;Di{NgNqVLQQUz@D#2e1z=b6QdB0ddt_)R1`0*%^d zO?&V6<RJY`!OnlXpq5EUlqpPPq zwqE=`$8XG^hgoB@g^=A6mp!HMd)6joYtzKtl+vw@;RJMO|3^KBZmdOk@7SAwT6JX~W}!COz6O$86Pnvb zpu6~Arrmob%>V8Nigld~>MbfQ@4ZzqZA=^{Zko6&NGCsv>#1`?Nu%*rCD0kd2MNDK z;YQ2qol%>SUH2QE%1_{LPP|Vm9^ARX#sO@>^s6yjPk6@*vNEz3tOINV*mk9fuGNs| z!F-~56`D*U=650au#L3iq`gvUn^J9hE0qEjHbU6q7siK;5tg1O>?mQwF<}+ZEZT`Y zBJ4vvYmD{bJJP0Qsm38ISH-C!PFL-;^FIyZyvfC(a2t_-t;8w#S7dJ!32cpN`apIs z-1K7ezi8H8_`RudtgaKRB#!cbGI13kO;ek1Q&@!?V@%|p7%Z_o27E;fcFu{DUn%mF zFY^m}2?f0g>{1Hf>|<%L{moW^7KsilcdF49(lYqMe!i^0~H0vRHMGmNT(6rkHocU``($`xN8(4b$E)0-qGK zab)dn6+&Z)0$h zLb9oqunEHK?7PWY)+6TklsrsU{*Yf`{*k@J{rxL5>w*fq9N6Z6@Yc6ads+kOvxM(3 zSU=cfrDJ4uR^}e=PdwsNUM<<@^qoV*@7+3`;|qNhY%|zt(cn|d_Y7FiAZsJZXy|U0 z&zSGSZN7$h{%A_eu^%!y4J!REUZ1h##uyOOlxd7IP5#HUcg(Mke@6y$j=vshQ2#fn z|1YEGCSxdh z*k~P%&qR4_BaiK$LDnh{JO50-`0FaxL4F=~kJ4)L=#9?yeU?-CtCHNM!)*}w0BEDD?9FtmbJ-BwaJyxIuJ{X zF(g`p(CXZM{Y9W0(rKxkX!Xf7(?#*McrnZ zxQ+V{n*dkZ{feX9v3Q`co-oLb|IJ~QorUcH z^-yhK=qjs@80?l9?AjQtD+Xg0&(CCC43>_;UUrTcSDxl)l87tz`k07uRf#K2Z1v(I z>bA;gyW0A7__M5szk&RR=k(D$u?MUY%-;LuV`E@#U<%hq|0lp&!L+5LkFaU5CNMki z;$y|1WB(ZJ0!8AZc#FYCz`|?uYOt{gy?U?%V9P9}OWOff^v&rUzrXch1z_Q_Yyvw& z+82bZ7n4FqJQywh2t-`-wllDqbhp2CvNe#r@c4xta;pD-=gp307bMncfhC(yCt;=E@z+JHf#me8dT#)) z0)KLb&4n5V*L)|m5> ziyY=Td#Q3!uorXcNaBmUC=VHuYKg9 zAGyibAr~zy#kiapSh#h;-9`5#)ux9P{(~&8PelCO({DEM4vH z`mo}^n2!%lJ0D!$+p9j*JY5UE0X%abYS>rG=6v>lw=A?dzlD}Ti;S6VFhHnZHbblY zhtpm&;vu$Qw6mHRqZ7i;YKcyAzmaEuykIfJJ(ZsWgbfk)EeV$FIL`Vcv3}{JP3w{mz@$-| z6n5sHI2|Kwl){p|40LtWC?)}BYlG`)pcY;^R&3*U@gC$W;btSH4p)Gy z?P|bl!9N-%uT-JPZVSj?6&e1cYjNUF`> zI#_F_hW+HR{TI{0xtn6fq{PhihI2c7O0F*+SbF}2MRRrLa$ zu?PA)9{BswKM4I@$ELkkoWf|>KCGXkBl#EiH59Ln>@nDWTxtMZ(NPW^&&qoX&;MB7KQR^z2^ zFXQ`ynZMf_YY6&FQ!{^;HI~X>@D=pCvYEfzcuzxr$rJy6^hcq;v|{G(Hr^|~%KZQI znZL_;@1^-SL4V_t8Sfx-pys@@jQ18y#L3TI5G%b=(rzRG15aceHhjLjS4G&^JSDD*XP~+HSDjQGu}^q-7Zf@F&mk0o5los@dB(X z%h7vfvssSKrcEZ9SRQb=Z&An8y8}U(EBrB zTPwqAEIjdfqnXJWIG-^yd8hveeWV-tcP{lN?_EXboHvf9xY5m%cMbJEOx{B;pYeXq zvpb*1TF2e%F%+n&=A)o@@>J;1wCTNN`>>C^V#fIuwAcBRF z=~*9zwS)D7-6DXyGZ^~j3$PyiAoz2H^U>O36WB4ZCIKus{r5^>vqqlz>xtD_zb0GX z>?Td|Z8Of7!rzOl5Korc-n!}NuPfS*e?iZT zyKAKhEu7Q;I-OTZ(h9;BzjDT_<5|9({#kU^u{T@sv{SEjO%w5Ih-YhhX9wujx<+AL zgl#8mqfY~0&sQs~g5R46J44t`g_&OyZq6*CU#ZR9weD=&Fmd`{HRC;Aarjj6-2=7_ z?AfZHl`E*<#f6#b`EidZ|J!H0gyPy-oVc003#Kv)I9JxvuhX9!X54$;Ts`)vtjco< zVHK~Q@mM^E0|_2bT`KQqJiKwn`DI)C@qW0B4`JFd6Z_Yyij9eO;*S%56TkJ* z8owK?e$$NCCplo{|a|FiI1y{wfyWQtgL^=`zNiVI6Lh7-8nl94h9;av?*Hz zuUNn@=avR@NoMROZSmbR-mWA+vixjmF<~XX8F415A=**WY<|a#JFAsVgPg(7?~Wk9 zRV7r#S*M&2Ma2Q+6X}|vQE-*&a0BBLr+bE{>QP7d;&;vjclhVsHy~GngAtP&zRPOI zjij9*?G>VJeFz(3b7?UNU~X|{YZ@kA`MdnFPTAviME_ogHr;3wvsdNsFHJ)0478r$ z%YwXlI6Gcc^7~_HQU1jgdFeNh=i6qSZPa9!PD*om4Q-?Opp)=P!o_3yNQU%)odH`R z!1}@LZy2`vie8oJb%L7s?jUZ(yJx&>a?6_ar?9fx{pWIkpQ5b!CKBqce2+q_<~=jc z4>;QY4`ws&B5v6?;jj13cx}O)ZDTd=T?2Z1SF)dVc+6Pk_?_KW(UPZ>BiAJpHj>Ze z2WGs#Je?mV6KvlwtCwW^f@4|9lyl}W(b;27bh z`)0his6CC}5ME4liSP1nS;^J>mH4){FaH+uc)ve?Qa0bF&Rr?~`?n|?Huc{+&ZgYN zVZ1h#tjjgBYmM0jt&Xqz{fM7Y9{*+uAte|skIq4MvqK~K`Yi=;W45=NyS%CmvEP2WKl ztAHlYxWF%OF7(#|lZ%qi<}LM$mZvs7YK{E|`9PAE%^&L+*B+s`Hxjqak4qMk(?`j3 z!~e~ACH@*9?6XgWbT3S`RQViV4`y`rQ{{Ik@5GFEm)b8fPP4uqzK)Sj)~o&UeIDS4 zeX#*%8%;xcfP8v>#rn*bJK-{#Kg!C~WMOhSb8BaLfbf8 zuB3LDB#*tnMTd)gAoK1Ua^~G~(k}Tf=hKeQxP67DR8QiaNDQQp=;|a*ndZ=qa~HDPjxKg2kzl9?YNxPKyAKEC9h3< z50c;d$r==QG3|C2n|syYze5dm~sS z*l92wt=30rYr&?$GW*eKuvV~w>6zf%VV<8cZO@$XF%8|i<*BCSsW$o%ogwGw0;Y|P zvL@9nOEn?(mZv(Fr_#i8Z8bt3OJ`=>-V5~$)?>ylzMSC%pz+a7#z$7(qomtSI`b*@ z>u^Tpot+7M;8m~E?{nS}>?J(wQ_r^&tQPDG0wUu-Vw2bW^}aaKlqTtV=!`(8K=aMn z>ENGN$VsK`IF<}yf^a;E5>TjHSYuev?wzBF3J#J->mO&_{#v+wDs(r2-#*K^vP|cs zV1x?N6#anp6=~kfv(x9B#r$!;TfbsP)_Hy%>elyuGzUzlxdtx@Qqe!3I0oDd)J}$^q4nuRAMxF=oB;UP+ z_YiKf#PqpqQsrpJowkH&ws_LNju3Ar@gAeTvvZHM?SSrj*ivNgGN#S!;uCfy=^88il{}B60a@PBB(06fqtj*_kKgso)AoIniwq}fP zwn6W}1+(7es;KF6#y6LyDv~cM&hRinX}+VxJ@e>U?;oGd591rlJFBbX&*A%swW344 z`&qGBH|pg2_18ZZJ&B*^+Id<+AN=kbp>=?|J{d(&O~x2Oe0k* z?AD>}X_Gyp(CNH>*4fo;{NsxeuV3Pykw{LdHR9Mt^`l;;KS5u888TH$t&7B>^PmjCqvx_M{>XygA10T1}V z<@{eRf;B2&99JcupCrx|A!;w>cPqcI^3(E4#G}Ql0Q6tPZs&hJzpu+gSkD9de|%ke zI{3ea-zp!67m8oU|4aCN3IDA$cPDt7uX>uJ>V8^S@Pg$TKmLj0@bbKe@HFAO?ws|$ zaZ#o{=apy3p9RT(k%Y(}5xAAy`>52;1?y5H3z}1V_>S^DuwYH<-~tZ3@SRw2Dd|nu zJ4BwvAD9i!XI7E*QLsv|A)Z5X3JtBBFw32h04XdTs_ZcKa^l*&YC06x^l0y(3Pqf* zM|)*1Y7b^2&EHL=*-x5`E-m)y1e*X`!L#hJul4or4dCTFX1$bfK3ZG#gO!1q4c2UF zS71eR_S|8@Y6<%%MTX8x3D8<@FL)dHapCZ4c)e)r26+^Hi&-3vCYZ%puPN#0i}N&3Mz zfLHsnCH@X`X_|k?mjf$upY1_U>7P6KEgJG)rPPRun~OV?>*e+OGH)oPP%Un1HO#W&VI!pSDI@3)B#|`@^%| zF~zlZA`gE*NuCCYUE#)Qv@?R;q^bPKth05KteWpeupTg5ci5eP>r&;Nnq#Y$>l|q* zs|4%|GAi389_phJ(i|pD#_uw3tt>mve?;2C?mf(D9kanzK(Ane{jQJBy8HKKw_rm!*;dkPUr%*6qk z7})9lsuSPEzodUYG3%}L$E2Q>j{bu8gI`lkfv?}MZ>`S zv%8?vyK~mNJxs^nKa+_11nj~{bAyLn?N_IoIQ4l=s%crOPJA*<`aPeVb?@3Rexszu zZ?b&)xix3~PbE*sNmKTzS?|R>JASq;SCh5Vgw+!E&wf~6g4^(UZs%M2E94Vl&+^L} z*7ft&`gMsfrD91hWKs&$(&fk58CxC zbwxQYO#Ga@^QUGmzxhal70xPFIP3V2;z--2A=&wB&Le(y)=LL%8S%Ra*Lg5OFKkD3 z9^(GYoqR{w0R~(Vn<*0C$+A)M82B9X2EX;uI5-5h6U^Qfla-yw!r<=DYECcbOp6S8 zNl<3WU=+AD6!a>OF#bP3>#@}wUPEPVis5=pCK88Z8KJSHg5*8W+Od1q`D7R`w^HN8 z*RZv)uy^-3ZzE2}7iQhQDZSR0cs&wFN5xtHLt{7LrwPA%zJ7xXeO_9f+O#0q7r#I= zn~`+5qTe6`Yco3BrUhXgPI91<@bWLux_6dQX8*28>L1<R#}x~*-M&wA)w z800gU>|3~H!9da0HACFSu{kTj29ccujylvqd)gzJ=NfljS*@jk~AnAT;*B zFjJS@JetU3lJH&RvF@yW>HF;uCGFg1KF_bT`yrM-P*`w7kk?Q$+-{mvI|(1!JL~+* zX}7HytTOl0ySJnZxaljEfAD|&rKJ`p6HXghHa5m$Vp&knx3z$U=1 zSi}#rWyHx7Tbr#+O%x_y#Da+vdXpGnPBT4i!l2qu7YrtDB-C6%@)v>_3-8i!$?tQP zAa`nQmTv=*pir4xkJ8`YoDJ@usRK)c?FG9y=ohOqat6Nx?To<}Z~@}y9sJ;pLHt-F zCj@j6S^8A}VQB39)~t6K&*BZ{E0YJ@IBa^d$#TtEFn*J68gh?nkKLr%{=HeZ?_urHW!f4sZ9nA@ z;d=-#^2fNHSJ{HzGE(|RN0Ub81u7VJM3o;aN@}3H==aQ5-=B4NL0Ow*_1eT}5ShE6 zGU-_AkglF|wLh5kzQwcnIy}y8-;M!@QL2hckYa6t_HNTS8snKNO z*RgrEy8FNX!1^u7YcwY>jg4-?D}R(-^NI&If>nT-ecReQb4HA{wHpdHu7-(MOT5h8 zN9#$u2doS1;y|B@*cGyKpd64BZ^7`7Wsk#o`Va6We@EbIe@DRlr}Ia>6b;F%Dh}0G zj>B{3k{`RY{}->o*}7vB^m?IJ_7il_`RIkmmF={~2%gngUr#oR9Bw+v5kZwM44O zws8nr<3FGEuGAhk>q>tvG?|;cTie>1BG~$YAKVm5tu_b92>PTZW_U7h{AJ6r z5-FE_iTripFgs%|6<8NJ$X|Iap}mCZ_6KbMu=^DFGGD2bn>Cq04b3KOmt``MjN48* zhL6p?n>yDrzh27xdNu#KKsq74wYDX%igHXDA>WPUJ9%o>JED!{v$wTwMoGT1 zkb7a6&*9_K;$=$M&+T|R(lC)o>>%)Z0$2Khs{uEHT?5v{e@uk(yFJSApG>s-K(8M` zSMV%T9-odMx3-p5zf?~a7QE*<8JRkf2C2yY{N(O+i0_Xm8uI#}mr_lit@YrcFL zvm^@uzK)AB*B5B3=uX1qdEP=;*c;upfz`74%(JXyh%y|a3|0Sc)_X>hAJ(5|k&Vdp zW%JO&FmZrg!h^K&IBh+VY)KvEc`|vGW`k9JU^9Wu1YRldUcj}aX!29s!0%RmxAU70 zNUkH2`Cj!h(03Qic~8xif5vmI!5tsIE;p3W6@oFGghXLf#020J6~ECY;idWLH2HTW z=7Kw7y1^Em(thfkcUK?}(J!}B>zs8?;y&|ESncNBh-{=lx-~y6E?05Ki`JEa{509y zOJ3WObKdv-yu!M+*>36OL~2`8CSks$95QAudU@A?a-t1*HI?1qlaskm*5+vEu?VGR2XGZKZX4Ghq;{l06M_- zgJtZiinktYG!kzU*j})(Z^<^WJ&|}j!FGfFBXsl;y}dp?EeG@wcF?CM7b<;(9f_fL z+NT$ew`iL6NhIG2uw4p>LOUd4E{7=ODv^JTL#tI9>JD^ zwMDQtu+|9H1=bY7dcmUQ8vu)zZwO4~3)goySZxG509F&h4ue%kut~5b5v*tyc^SdV z!73xz60nL0RtL5?g0+K{N3d?NvIw>jtTciRf-Q<*!(hb`Y!6sb1RDb@h+q?7XCnME z4R$($70+Qmh+vDsCL>ri*s%~Mov9w|D45BztIw)4$v^6ssSeEGSDJ6u?Wqnf5o=9# zV^nTVwc&zX+q{oWHhh1%2C-r#zQ6Up?{BmG{_>~1dh zBWwfV=3icp$~zQGS8<1aQ+5egZ&y9om|1k1@kV;vXM>)`Q3cpxurUACfQ^Gan{a(3 zkDI`z!E7yK`r6A(9*ag7Vdejrr6D^`FIX8^JI^{>foae38wBqJSAFzR++nbOFtZJz zy67^63h=$)6X37sS#yBfmvGx9x^F>gCy2B3iE}ycF|Gzb4c-oZi_+S<8+F{-n~?NU zkXcQepO|}8nk9ck-zUvoK^lCXbZ10G0&{A7nlx#S{T2DB-rGo1^`trP|CA5@;^Db5 zvz|_TK6ksTL2N+u8oq}}e}MF_ReF=Lwyre&U-xBm+=SH#*IWix7T4E{{=|4(JQti- z(7LYzY%$ohXyH3`H~MAfPG+-7!jY_zuvO&D@eP_Ua}X2{@j?&u#-JCz=Vde4cnIqy z-gdAfV9(Y3-t~}U>e5ulmGYbIUY_c?Jk_Rifq&&VYH{PJhwRG!%>4G`Id3diH;cD- zw-n8#1t?zZV+M3+Q7|)FrWyQ(KJ_R&(*3_bAclBkUMh zHJI8!AK73E{(^h}Gk;fWKWe5uzKZUQ8PMcg74h1MXFd@u=eH!@fEc~s=++aqov@5< z)(+VYuwk$cwIy}Qvn`k{Ut8+SQ+4RlZ1`T6(W@C!c}52fo@YprtcVf*)0Uy z$395-z*FbER}$Ba{Y-rl4YaCjNyegRogwZ7ac@vulYu$`V1l7oby)oWXs^mS4{_qJ zqcFw$_YmSY>EAZ@poKupN+XZk<%I-m2Q<9T6dZd}rfxksbra9D6W;Os zIq!>$GIg7GuOA1~WOA}7wt;P}FFqKC-hqFg^Jp@EUNSyFC}j7u6Zb{<09$C9=o6&f zv24!!&U|*la9_8X?1*U`yQ4k^cl!+W$wa{ePt3GO?g>5dVi(~@8+@5;V?A*#lgB>k zdYcGqZS=#;X8{?KIh(#RqqFP1SIv1kyJ%x`Di|QW%}dyNIrE5aw|t+%4ik2euxIe> z_RX$0om_o%ny@2;Jvw)6<+dpbb8W5ga@Ow-FgE&X8e!bHKvlwZwJ5IK1&eQGJ;lUHQ*DfLGi*cq@d2eLKm zkDRst`e(Ia{@=$op_{9BK&z*NIX;)CID@;jD0@e-$!XTkcDgXXH~h24N1@eq)ttM# zAkQgJFUqPd?`*Y0c>heqW!bKdRH zD`2?z?|rg!=4hS%w!3@plkzMsWq~Y8+}C_do8_=14pa*zbrLbn*1+{n|1ZD{Uh=2Y2|kVI=jlsXFcCVk3iqJanAd& z06V8`{uO4EH{M0x2<}_1b6$!VYvK-Sx17~j19_EUBl#6{Wy{bHHVC%prE}hQ{knx^ zP@ex?I^}4WhE?+r6V$M++wdmFTIkNK!DVr z6H-SR4p4?|lwsH}L-rn>K91nnE6B54fVat8;EKTK66I8D!bK%C`Ym(bXLv4PimJHL z%`uhW+rgLlwC~aVpZ-|S$~1qDX-h7MpJP^))IqifT03rKzB+4LX^KR#t!5{P5x`hy zL^7=-m}{W18ydaq=e!c1MtGfW_90dHXV#J=b#2>8x?`kkd-Q~Kqmj->z@*?n~jr1|vqslZvn$Fwjyw!f0e3?Y6`hMiN zGhq|UQFE}|FlM3<%V)I#UGG}d^=I9q(BED?7u>57=KZXFjHM(un`)&HUdd`NPIKmF zXzYZ>lLP)b%Ups4Js#U`?tOCyp|$Zf{{D*DVNu!89p&L$M_!YJ?;_lMrR<&E*)~KY zOWYflmJKEAbALMfVofSh(0zwL9%zj4{IoJP1XGMuB)&n)&?L2qyw{U%Q!jGjp>?%Z zX30OMdRH-L-eM~l7AJDJmZL`ld&4W>3^`nP67O>7INo9L^p>d@oh-NuVv;f}dL1%1 zhDT%MEA@|&osDXj+O>I0KO70AH?==HQE)2tJ9oY%^3K0H!Z#4Ub0d16`rGU-oYC)N z&$v2t^)Oz9?{Z6g4AJ&xLu>;)l0;)+4>S(Fe$M-c*s)NjW71i9$E>%6G{;CY`i42@ zM}C?5jSku(KL>1XH)bZ;M%xfj{KZ^EUGYX=)@S{xZBABFHz_w;{5s;d5ZOT^FF3Ef$;_vvAd>|TZ^p89S>+8*h}2D{yFbnp4Hyrwo3HDJWf#AW{-Px zdi^x%_K@ykr9+<4T6Vazx`o#a0+sQinFECXMB%0j#@hVX=qPL5CDsj`ddLxNEu2Qk z0YrB_blcwckaVHAN+--}QOTopS4HVc#_xyjICQVlScvSGz<17XcbzfK4UTE>HLc=~ zoeJI+R?gbmUN@%wH5EBv91VnTcR{l9anQeO&U?x^$qeqPNp<65hQyNix;mAFGgiuuEt zsr^&Ij}>-ysj@6l&~&%YFVK`nVBKI(g^oU=*AKQi zLT?AyU?{D|#|YQ}n4N2ZHwW;;$=FM{l@4T$$w<*WOxz*jKAUHKcJiGB+Y9zJwK0R@ zEOMZc=};R??;`}!7M8yTWp9jnnraRPN4#phK( zh*PAyv$3@5rR_P$O1m?%_8-u<-!bRCko=u(NhcXyx!VcbLs*y(y1{mbur}gu1RDXn zPc+u$t~s;16I%=1-jXe3J>v$mYuzcw-1i3aRDc2#|)Ngl0G(qDKG_rFBT;;#JH`|wN zGUUt(4JE$r9k5^n7pSRyug!?eu)<97)W^HYt7%(y3`lk!0BZ;PEYGoX0HfHEyP^MaUpD))lhUC(eK=@b=6eQJx!ZQto`=fYMcS(O zU{_Sx_*C%i1=|2NpYMX^%N@iyNSw3pRr&iAZHb++qNll}%XXXDA=hrR$}&ndGppMb;;WAcm2(TJ&V}g>THc`)1L*ZPV&h zTU(|;>nz6V%+FQ`wd5(V&0MXYlPW#`&r4HvH`u9Wmjyqm8}xGU9|XSif7@p|&5%ZgF%yS_K)t=G8V zeZ}#%vBb&91cnj?ci6Jfos(&U&cOGvWBY4`u>4}C>C^imldEN63olx6*M4_|zmZ_# z?;+@IJT&Lc&Bx!_@ru5h{OSd5&PwA70h4ZRRm6;x1_o|bQMB3tN+A_RCjx-=apuGzbe(eD%Eq1JtzKRG;Xw5 zvL@sU*yUD_G0Hh|Cev=|oPBxq@iD>&ADHv*@!Kst7uwunyyV+w+wAa4Tvle|s=YYz z|Ji#NIJt)Oef&(%B$-@{&eb4j5i*EqWEljVWRgtojf6==bVwLP(ny%tph-lKNVCDP z*j|DlXk=|zY$M1Lw%1~_HdeD?!v>w3bequsr_TFS_c=8^8NQd_@ALcoGrRHh`_x-+ zy{D>9-Ae}t~ zi2VFR_IfRcy)8}p+5-8}Sv}HPjj*aO@tk6p>x%ht(yNXx9uG@B4>%s4;vOpA7^?%9 zdLk|VK^V8ek1G5&uUn1Tf(Y-l32Wdg+^#E_>^Ywc7V=o_1xDMBYJdl~cr2*S|HO+i zP{3rvSy86K)N%s@29OBsj~x$ zEH;m|o2?>+X}6aPkRq z_{fi(lNP&HjHxidc3mqvDV$S_?8pyvWn8fwwzk36sjQ=X<_D+v91Epa#MUD)?=)sV z|5o>82KLIVOl~rMV}C%({f;OHNrksVRdTGW^8;;loxTIL1gVL*ks_@nuo9)l`eQ>DyC)r2sBWYUPcsWg*cGk2z`juogxPlT;S z!_QYTak9G|DnjAvP^#MNVRRX;A+5i!f*AbxJlpw;GFAVVQ>S$9cpWd z-h6O%hF&AMaR#>nT+rYW;6@qT`{0y+&Tr~&1UJjj+X*fVZkWRt?_rovfm7wD{?v8! z2Di$HTMcd{xXV--;7{p|0_SU+$t|-P>9<4RUIcfo;?Q7vrlFeQ8}dqjuF`LpalLyL z1vdbkK7Uy0Edy5%&R#2lthiO+-Up}Zk@{2IT5wjmy9`p`c0#X@ttEQfz*R!eSuW*= zV?7YuSchIua6xcqIygVLd%-#PmDhl41m`UKI&e$DIp6D>4lWALnQjE!B5=-i^rf`t z)LTw_&U9a-y?q@1CBZ5Goat_$z5S?X-~Zs2L2s5SKhI9IZCBdsw?2s7`l3JVkjec` zjWz7Huk`Iw6kAQlp|*}6bTxEV?~%#jRdc(~agOgW7cD&!?XOxzMt6kW0Yf_apf(+G zB70_XYw%n3Q;V=EI#uF%0&OXD2HI;DQRwvbW@PRFHM{)5Z3O4cqgCLx8QfZMR%f?f z3S1|H+Xk-E;L4A{ekp_N3C?eDesBW}t_EDKgR6$$b>PN<%kWwkt368YZw)8P)rTis z&9j^nvlMYFyJT_+#$_9&&hPLn&bMeoJN8C+0=g@pdy3Mv*DSCAXTSduwi_+=v{2p4 z8=R zy3YLk4wHRzkCB{fvH|uouor?k>1VLMv;Z${qrWI@qp!tEFfRgXYFya!NVHFTW%A!6 zDDFoMIyUT?S7RrqH`pc!QWlpTE~>G`EZA-6naRC`-;RC{+a^jp59Z5P`nni&JMEXr zJz?sqz7CTmdOT3QZ^dP2dn`W*`s)!lg18~okRTtMjhT>-T3(QRDtfoD6CYyQbpz2#&?<`n?7==J(Dx&a}g#6}oZt z&0-(Y*og3@2w#ui=!g8CrFQklLsZ)hdH?AswD$*Ra^I@Pvyfl*9IM&dYrLfNi}n~b zH$M)^-V?3r@g&$wADPKrQ}M)Fif3o{776qPXfH zu0vSas7!7s+w8?S_QTcxjKVAlM_nz%1TI=~F1J&uFD>A7AaDr87D-pGAPs-oI#$ZgP+7W~mUwcKCl&g2x z%!YPg$Ek?61~!(B&E!_)+ahNlg{#48qqCR7`;`l^$1qwl&fa4f!}&CF%E%!52**T; z+OCb`Qe=)i27=sY{$HRU{n9aSNDkZ96R^XYo4QM8BTY*mowLLd~oQ)Y{d=zHgFTTJv$bZC{k&h!|1H5)>*X!O0uNvoUcP>Fa8;a-f<(8^zH3+XqxXL5x z&kFNJwTS|I3JO_|HNN{Q>PAc3F{bXu+Y{F zQ%9zveZo(By{6M~xIYmGk4Nq6a6bP>@2=LZLwJwgy=fWO^HfFs=@sGA-B&WQA{2ru zCZ&#BK%NiILOPigiA`#s}s)fjJU9zm)c zs=(Du%*cDC*c-73UwOb7s;FB!k~rtM1DX;w?fv95=$c(aL=} z0ySYcYQk951aTpf;FhyEtrp~Bdy_}GkV@#zxJ=S6*z_m)<}*1{>7{Qi6Ang+Jv zVV~;7_JT5gpQ{hCasDo>lE|2|8y;TOo{M>}Dl?3gE~uzJRqx2agJ0bFIHtB5*Ml1n z-!K|lQHL92Oodr&E#g{H^(mn5jvtHZb_WA zFhY-ImO`%qdJRes`wOOE=Sc-76)NB22wRV^zp60Q|0QZ(#dnemef&_>#-65n#3e<$ zP&sFICv1hMWpZaLTWXww`%Qmf2FY1HPsDmP!tM7&l?wj(!A-gV<4E@yqcBE9^OS#n zj`SOgrZ4+$=E7F`qKxeK!!t)$JMbPhsSM%P#52??pL)3+`+q8jgRFT+d)Qf5?fVCH zB%emmquwuVK5D_}L5&^4u=V1MOzu~$kBPA=*|zlS@}k!4^E0c}^}}AL2Cg}wU1A=( z){IyD{J2psQ%M zXG$HD=1Dal_uzHD{wOv72=}}bJ%zfqb+Fy-8mu#_GE?KR2dd zQ&TPVr|d1Fy&g6rTnyYOBaM~dYK=73&|W7;-1W5QOd}0W`RDYx>=d~^r(Pwv{)S#( zaDH&A9;?4f{0o4a4$kgt?Hwj~sEO`cg-t?Osz{i+)&_))ix}4rE(p%)TMXPNaLzng z39io2TSI%N!?yZUX{-kqgPz(tp#Bt>26rzw=e3pvFh4Z7N^nb!H2Q*zg0tT>ro8~T z_28WOJ`UVE!(KhO_YH0?xFk5|^+v(11$Urw7=Oy=W#Be~b6&?Pa2pJJYr&-qdziG@ z{vBXj6MNfe&zWxdK(U9Zoc*WL?FmlVQ{x}?r#L^jPS+LcfZ}Sv)f!wKxcT4)tBCkh zdegxrz#U{W!bQNX2j}!nncLTVM&~uh~ z2HXa4&U8Bs!u5hX!Qr0|+?MqlU2CuX!DXQ5%$Hhl>!GKbb@ivNcM>@7^#yxsJQxNy z0Ng;fr_R2l(0_AH1Pvc1Ek*hzoCU9TJC119VcFwkmG(NM)BA?PT5vVEP2l|CE>i7n zVNRvq&qXp^-$099=21ghdoq!?S2Y;>gKjL?Q)vtU7dE&cxVZ*572HCDYXG;@;1+?4 z8C(q93WHk-Zk55U0k_)V)`LqLTpHYZgDa~+{V=#naN7*7FF0$VI}ZZjIvLzJaFqsE z53aYt%?0NNcQW!){i!^Sf}3P;%fKxJH`LY=y;a~=8+vQOrNQa@AprdpxSlsO z(7pD>rF3-lSV+QZVSaH@O}q5sq8jt}9)jz+xiD7$udZ`WhaLYd|MhiFbv<#|=(*^> zXJZ>|lrL`8hWa2x(L7OpRAXUj+keA`>L2IAM(S4Qx!jcGE z(L&fJgr$pwsWp)DVd(Fp#h;I;wxbH+QxX0ae#;t%J&(nD7S`c$#yi*HYt+|z)S3d8 zx9zq=jTNRMZU%7&t2&4|3)dCwF(k&%e6PUsYb+NypCI567quJ8Ne!{j9a^dE-PXc0 z0aa-7C}z0%OhDaVX~dm=JD>AF_Tyg}CJ)QO>35Pjf3%;EjKa_nuaXtkZ*Wzr?5YuG z>8~=fw-{>-svIwOitBQEqP$xSwVJ*K+%$~b#f<5cbOb*B6 zbMA=oHuq*3^BBC?R$5h&uwmtrq5DE1;8r&T3v$@wu4&>5CuL%*c2m zhx=(0K8P_9AH*1n4`SeSB8;WHL$mISw{9H+J30jSririZ9v#^gyC}sY`d^#!uRG&y)euM1Kl9D zw5xFtRvc^8cTM;k>o=;6>^lnclZUY$g5MVE`~r_UsZXu$NdAmMcpBjYRXF}sod|*J z`$$I4qO{K;vDb!ibijo=*`fA6B6U6)mK4WgB@rteWFXDy~cZ~8I&r?|5$Rp=@ z1^7%-^|XormV8j9&#S1e!+v`E%h{NjpC*k%egzgQS7Y2Qs=fX_8uO{;ncT%lMqL-q zP{MtMyLebdc@R`@gfB<<<0`!HeklriL78U|zO9#kn`lT!wdYVj-Z;~-go6(z=HDk$ zX*R%S*`pabpGDG~qSI7$tr6i<5q_{r6Mw3HtpFDRS2$az(0&=EhpXaqj=jiIg z@PamyX+YfmD+4wOxk_yKLtCvfJq#bbr(%4BcsuZ0jn$lMvgl8wuf`IOs?zxsv2_HD zvu7UC5sT_BKb!01p9{}Nni-_|B=c&CdRFT^U&ijM?Kv@Sh!TAJz2!C05Zrzr_UfL; znoLV;tY{e*wB_S+P71sy+?v*Q=S_ zJu08v)(g}o)mJV(*v+-Ar2=X5)+n*q8+yjT_K*F~6Me2Ni4#Rcq?s zBJ0hD-(LGy`Tip8B)-h#j`}Irh5Ke5HZiI}f>F`YYGN%1|2mCFf0n@*RMj*48K+%0 z?KVrb8fZo^FhaG$4MSldzA9$F1>F}>Mj?J8o5?+f->M$)Yyz|tg*hVjBia5>h00v$ z2fokb=H=_*F2;a?(!GmULp%p)uR=yNyD-%lt2S)|(y8BxJ+MEeJ_Xed>LR&>T|jZ1 z9(aa&a9@Wvi9PSOn5OE3>drv>Yh`mo@Y|Z8`sIms_n`857Q*Tf<|%SN7s}uBvT;A# z^;yMViTG6|+1#7Tb|~NfNs(@27Q(cm_KTjk)?xG4i}B{=(iM|-|t*CI7cuzjtpL;GHqb*=mM z1?M%m0Jxq8Hx68t!PSH7@8BZvVJ^4;xF=OVh5mktI+)P;u2iAl!$-b6Qq7w`q(ny* zQ+Iar8(?(D(musQ>~Tr}$yyW8AMKINm8!bv?#C9%U5>#)t-X>WOM>?2VJh>h!)p9o z0~^&9+1z`yq23kodsfLL5L@JagI^=mJPEy_`k}@e>K>Vkc&R=q5i7=W*oRx;OxEO#ri{x z68OA$7$)PMtth$j}lsd zS82*ezG2T@HzKSz!tC`0>~9WMlw-$>+TkR7_sY-0`Ub+sLst8rvGNA9YIn4RS0Q}q zF5=fBd^N)BReZbcp9u>iJ6-?_%C~xiciX?XZ}SmWjj)z{TZZuZ7Q$6OxEkS&2=C7J zw8)q>=y^z5(|oxPQ~PPLFQ`xx?0Z7B4c#Uoy#tE-quSs82yaCA{rD~QYy{V{FfitZ zC47!L|9cotpX1!d&Wl-ypF#YiRD4G{b%Pj1SWjP8z9WKi7>oQb%H~Gnw|r|F*NbTPswNzm~_=NqL1(+fO<_h>tG zN$IU+i`xuY)V5|`JI~u4I<>RgT-A;&f_@tMW0k%=54Yz`cE5(zsJwUZTY5OCsrzj; z;*}qi&1D&n=TnX?vd{QbeEY41Jt?*JUJvhN+|RIeidti{+hk*n!QSh^eMzy-YHhf> z`H-sCzIP|VR{W5xtP$JSZ?6NZ#&MKf4%#r}r@DrP(A@^zp8564Lb`?Tq1khwvFgiu z4;M{$XvY9-y$@S!4$bE0p3Z%Ih4}(bA1L({8D7d9q4FHuuZL%Im*vMy_Smej&!^Ca zjZ|~8-kzck*=sCG_*4&jHAiB6QRMoJwHr02$06R!@lm{Z$rNrHso`f8hpWI#5qK>E zhXDtHr~{6GJi#FcA)gL;Ai~degb#x}4f2_eaMhF+DMf4-QQzfLUvN~G)GoXbP^D;> z*?zgsr8pWuIqg_rs$r!f2sX zH>chw9ET)UKqq=kHit);cDuuQR-sG^;|07+U0SO~#m(onHQ1wAH%1*gQHNoyy3fm| zV1D$AZ0=~)cBp3%3vnxRoyCW+700swQDK{MZE1QZTzWrdlR_G@!8zp)OFhBg?r4ozA{|B^RWuq=33pb=PPR7*7sbj zN1d3>!HgZ>d0!RA?f4!@+tO`CZmhhWS+G-kQZ{!D%dvRAz>cSMa1lFdh-$AbzX&^# zQ?j|++2%X@J^Opzs^NdfxEeI>0mRQB?uI}%cMpAV_ZNP((Y(+;4eCjo+ry8=B4CSmZp5 z!k$64@uAXcHH2>7#t*h_1*YQp|7g^ypJwaG;||IGsDx~u)Q7_2xH3Qf*DNg>XnGqSngArIvpi3eeEpzZrkg!#|JJdpLL zcs=xNLJh)-Bl==F5^pFDUvsT!tMaLxhVejMHowlhi!~sOpsy;LqiSB@gRP~oRXHJ> z8;;*<>_5+*7$8~Zh0<9Cof_zDQ#z_$nux$L9n}j{_5y<%7p{knZ(=rgBI`KcLBzG> z&tvy{mdVxS$Av@mfq!{MH7Rx-?0Y`uf0MGg6)MfbxW3T-+I=FQDF)OV7e$(1v;xYv z2H2VfTQBGD-4Xe=2-z#=s(IAzS{zp~d=ADY&&ntUD*qbyhoBIc^YZvuE zy?9gl5H7KZz5M(%278;%&*mm_+)(7Ymg5mg`atXsM%FlcTHA*5X#;GOUxf7%w@-y~ zEA*R~kF_uDqI#}T{MH$#Y}}Q z>q4YIBb%F+ALrTQPCIW3XJ^>$s(L@A^o!zogD2tNBc0~6SUuOTM>^Xs!&pGwi#R(> zy&t8Y$;?Ms<7})SD1Yz`?Q&1TzKg3N#t=5?ifrzpeEA#CL{P6wpI1fitl1+v`Ve zif9==eqDxxLCQP<{J8#}(n+;?v}tQdkhi zBg7)jg_;Z3kFn1|Rv)6m=NU0dEuuH1V*~PG;dHd$i_uTJ^TD_e^LRBrKJ|$SoB)dvJ=y^1E{AT}ZP{GqPbsr7-V7+bjiz2g zno`j)8ik-4 zTg`LTS7%h;rRs11VT%xUsS3looI0yZp0i^wXC)SW)H3yJZ`kwC>CjC<_b#Q&c@Cy3 zqw$bgttqG_k3m>t&~N&kii(PD0?NWb`?>83#1Gt$wz3!Ex7JsoSe~yaTEXmbOaLZ! z!k#aY&7U=UtGekHt8YjyDl4oLse?D~!3YK)A43)z z_N=LB!15KIrORh5&cfGfi~2aYBd)y2&7lsdD02T{JPlvg!k5%5C_9e#i=XYvZ*PS? z_o@$OL`rJq3xP$G!wo-7zs(5cum>OGQ14u7|IsZVT~!ZjFGKsZIxFA6w(B%#)f5Y~F)zr+M^DEyP zpug?yY!06yx9hTVUlJDF%GG*(!MPE3`YRA8@eam+@tIn5!Gx_5UXPTC zLEEn0gA1#NL*{6o>t)knBlbaIUb{fO8IBbz?3K3b&?1B<5#G){7b`Xfu=l~NF20zM zpQo&cz3BR^d^gPU^M4(z{^AHFCfmvrYWP5Jg&Z zS!-Mad%ZVcEeiH`T|R@Gmk)ZvYDDXF1@0Hvu=iUV_prU5i!=T_|1dn_7^)U=SAL$& zp-Hvd_62x_68(TW1GNh-Lfy1z$A@+-J+UCE4tOfm=OgaMe`j-(^ZjqJ{ZAbGMM_H7 zW4co$Z_!DBAKh#lgniGc>)V8MQvX32y7L^Zdj1T(=GTYV>fW!q63_R(&dPpob?@IR zH=pV=YY*k)y=)Z6YU@3Z{q_!vl;LBrg1;pi2| zIK%h!&2Y(G4Y|y_$`#($kb8aiU|XlX$WhhpoO1AJw;Z|7Emtpe%O#e#+!?>rklR=X zw|9o0ztAl&H01UrGb^0>`x|nVA(wjG`rS;qt2^9to?9-rmblWJ?RU$29OahVTYK#3 z^l!8wPd4Op4EZ8Mo?*y081e!`zR{4a&VH9aM;(*v?DWs_4(aNY+l1V5Y1@mtIm4~- zZu!{q{`($p8ztohi$UJ9w zdFjH1PI+J4Z@nD%-|9A_+BoIc4S8*QcX+I$TMk}d-Od?*{yeuFneUdbGh}Z?mrl<3 z-}Q9M-OX@A9*^>O#y{VX=Nt0PhJ3Ff#|-%!LoNv$mNFI-jF*Ovensb|FAh9`kd*Pl?<8fln=HRG&<#WXg{2C1=?e$?A_m8 zUhR$RHLt(i2ybi1rJddRc~FVFe7hR@KBGQ-(P>nhBOLX+tu@Em-yy$``hS2!_T>Ik z>XZ*b|KpTz^-Q+qgSJRNxWtfeqg=;+FGg7>@moWF)X?9%o!Hm$_j~mcSNi)K@&SfC z$dJp>|2h5NXZwR~opO(1)$N>er6C_;$W?}XtRYt$a=?%e`Mo>6Z(nxHp10j{sUcVI zaEE&@8{gjPzqQgWw?TjC4DU*LHp}M#%8Mu;OnDjQK9pagd=%yPDIY`mYs!NucVPV( zMtR*%sV^nCf0RE5FuW_}yg!t+KP9DxK4q=n&5%pV41LPF{*| zQbR5~+pYio_ink#karsL4~G1sA^!#ayASv8sPClx|JaaIl;`sP{ukxjDSu^z|6s^D z%DR2DI!bygbbDdQZ49{s@QECto4Ub?z~m({1WB!D1ShCD&Y$S5RI?`3=esQT~+j!<4_L{0Qal+vR$fQ`Yt#rL6sV zjI#FUamw1C6_oqY-V>CyKTlHD{yarl`xB?E{dty8`~l@A%0n?eRrR?u+rOb0k2>X#sDCKKKct*s z{{NlwM#|@5{HWsVzY7ex!H{1!WUIr`-F-STu+)&d8FF_+F7bWnQ}N4xl=|&4faGVD z&QHpp;67&bEm|nIRu-tZ!Uv$ny-j z#903*J*Zb-r~M4pSDdotb+1pf#rml;yo<5^;4$V?Pa6J~l)3Gdl)B{y-*U@SjP;J& zJnrzn8rS!+ua?`Pe0*8}u3~$tDcwJ7x%A*(eSKO0{ubBgloy;Y?_6k=&TVp? zo#ADeZ#(7NFyD5{j~a4E<9f@C`=yN`w>9MUhJ35%iG7{v#SGaR?+*WV{Nr|eZt<_Z z(SBTL^*GpRFI4)pOD^r@&aci!d7f^_zc*yda+gn;QC{VST(Z@zAM?1!)8}30maDPe z=Jfwitfx8Ul5KAJRinJu81kPDc`vjFPJ2BKxtAgP4f#F%Ipgnh&$)Xz<$Vp=s<7n&pZ?&w)uUdY_xF7WRPKWF9oR;-?PRn}yrRBSf`||}uUT4U^_2gXl z_XXuLf7A9(*)!S0rv=~=qyCg^m+_QVDX~_x>8%AI-o|vvZGG3Y>Ej4*2U+cH(|_$D zAEE`|EAaO)hkUyse+SvAzn*f4{c!~4{dal!C% zL9M4TeVpV^xLR-(vEg{PTz!IDP8zcRWOsOcpj-A2am&G4x4dwqTTYB|%hqXbIWXQW zhw9vN<5?o>>(rQ-B>5H~TErCdHA!4Ue2w@DF+tS!O!N&cw<$j{KnxLcDwO|G_1r0| zpu}Ar6j+6O02=atas^rGnfgw9V#BTP`}MBvJL4<+roJ;=cH9)Vug^cy&Z~Gz-x=R& zznH$=u4HgVBLWXl%J>U!REGgs7{%(pLi)D;TJ<7)QCdO45 z%zsUc{Z8zJ>UV8V*Grv>fBdfXy)V1Neb2jPZAasO*M9mBySA^>(de7_^YnE*6TQqo zlMhe$pRpf*R_vtXyS8`Ut1_-RlQ@y6{YveS@Cb>>c9DNYIk8#fZz+e;BHQm#fm`2I z_QUG^tC1_@zW%5Mo@Vk;U0yu?=Zt^fUJ|~McJmSWBTYTkpQyUx`-j{Yy56Kda^ENA z9Pd{W1BPAGA2Zxc|3GagD&us0{RgzboAJ%`bo?sDKl2|fANpzLOUm%ywBL{O2R#q6 zu9Wgw@QwJ}KOp(rKz<<8)qI5fF!JB;Df-&Zek>nd{+b_6{gpl3`sVd&eba9(KhN?t z)BW@u$rqDz!dhuh{xq{m6|7riu=XL4wT*&f# z`~=C5S68|H)Ahy7roAvs0@(-RP`J~g`ME;~dNqeLDmg-GQ_o;3VOx!~IKM(`V z&!1X9b}}E$`(UqAG z@l~G~V|x+x|0FR%{#nW&(T?U{A+PJX=5>A6?Sepq+Rgh}LK>c?nTxBqj)_HzyG)VAPfJ$YR|?-=Ro{?PRQFVy?c(AVYpl#$OLQSS>w|4YhS4SomZ zHhLUnl$Y7RR`EK1YCdf{R?4NlVgL29!gn!v-R>+kuIpaj&j;!8H2rMNk7GZR`mNg! zeV>%@zP^?IX?`#IW8M#Dz14Cr>YMgoV0$y0_N(VeJF$#>AI7UCe|QV&R+B%I7^43E z9FGnqA0a=I@_1q+`4Z~iM}7_YOX*L3{KI^mL_L$&*RAn<>Y3NC$5odzT<5Qjr|}Ag z>;Bct`gOg*SCU_1@IIqHn)k!edrLjj_SfF?+_^_%6Gpxr+cb@>e7ywK!LyIOva z@&9hv`Iz!6e9o%vx76Q$PJOfA*hD^K*w^XrB(KLcI-TAp$#t9Qm$Dr(%Xbg*X8OJs z_@A0jE#-ep`Jk`&r{@0=^zTGsi1nl;`?~$f&(o-{^HbL^Gka=B%;LW&WkZTf;9HUp>E5Hsb%5_* z=%0`AReI{5ZUYyU?vzREup zKg9SgrDyVWj`+$(lJV7V^%rl&-nowWw*TMm+F!9+`0sSaS7oQlKgRgF{6ekRyV8-q z?SER**YRVNb&C73KQ!;#^fBsWspfz44Eu3DKhgOUrQAHGFu!)hSNY@PdX)ArWyDYU z#g8;G`bcrVbb3!a>?@zV8|3=!vVffUm%BUy$BMl;F>u_j?R)8mkLV``h(ThAn3yj1 z0+$GemI@|`;i$-A>PLuCVvHCkCWwJMXos@C{?(4_S8HY|UcbJ71C+JCiK!#SZkp(O zSmekr~ii(YDmp!ayeB<)4wBFCN)^hE^Y3{MbEzqI@zuTQt{=`W-_^?r>2 zWvy?b|6WNiHA*l%n)3aW7YX`X@FU(R;nqEZzF!M^sqbqcp7tZLMDzo!7qMGKj@~91 zyi?F(I>CM-hlpXKwrAp3j`DYg>H9Oh&0YVUI_h^=`+vQp>t{Jd$VZ7Wt!Ef0e^=%= zU5QsTy5(m$|Iy*UH{?gSUZlsHp?NY7{sZ}aUXgL2=1=@uWIg`Wyx~?}OtxTWV+-k8 zoR6FS%<*A_{&%LGeKubBZf5^`V=Sz9$a1)QCJ-y!MqyEk2x&iq?)Ys!~Klx_kTJq-gS>&}JW_Z8|UtrXi zAj8KP`Jj2zp5}FWChGFi^N|Sco9jfHKa=U|`J3iVyIMB=(fU(qN3S3GZ;*1jko+ut zedM)06Se;h)YtaS`%Lp@{FeNC!dOpQ$9yr@leAs4zG!|f{aQ>+(T=%(X7M`p{8g`? zdCA|-`1$*ec7D?Wuh+x$eWLwYL4A|g>uq`-SH*N+Y(akm?+??CE)RX*>U7O~*K$kw z{|?jD^UYPf-jB#{ASTFvN!hH&Kag+9pO(_^c$}=SnEBm}yqQjK@@6_mw!oj*0zaO- znQn-@Ucb@#dI|ZfiJHHTa%=bLozzqPtr~MCvb*kYb-8JLz!6`~pAz3oeBFOXDQkTb zPv|Q7`~vNSK9zRBtVf!+cs`@9cX{44OxY}7{k-f?Ot1V6>5tRKb4+c{jIZ}Etz-Pp ziBaxT+GOynTG_v3+7D2Fr{Q0?1v{Oq-SsrV{OyzU=${%L)4JzMiny&>Zvz0R%q zmh#68zvc&tug4=vmhbV#b2-f)Nxu`XNx5h~pB}??xrKk`_##66(T1H^3wF%%(bqT8 zh@WgB{)L8KCF_}K*ZPU|FU54`79*X`?SDX(FrQm?$^b^e=Z z+7D3wVZ%Sow-#TISANgg`^ zJM}Nn^z+)!Hpfdo>-IOq_E*pUEu%e7y)E;cG|_(?UO;pFC2K{F4i{W?Si!zZBTE1D z`bDS}e|ynCokV}iI{x02^?Kpql=c3Xe=&d5^{D+6qDHq+JeRL0lk8!-AuuhBmSj*)VUAIoxO zIVUN5DJKR=c<^ZIF~L9wkwaYty-!Jf3HKM&erdd#{jc&*{R>;t|LW@tP}ce;-qycR zzf_!9EBa>qT1R|UCaIqpKV9WcKTxvk`JVql$%hcv10s&{Ro8EMB)+Pv>MzoYz3A(- zmlKS&mwbj1j^g7jaPpO13$l!d7@;)h$& zH|=zA#J9`;XU5;k@>gZA;-`LQ{Er>=N5%J*?z;R<|6euYhkj=KYaQ{`HN<{q{PP^~ z?J_I-dH#D3HR^v0@%=5-r(ZCA<-2ObV~lU#3y{Mt*h7%(FENhw*2T6g1TPSMAF*Xk z35ifI68vfD@=O z6FG1@!+#~{T`K6iL$LNv!TP%d8yW@c?iO5lk6`@Qg6r-TTyvjb-Ti_aiB?SH%HIlB zKR~?)1;fh(qYnvIJuDb_M6h^EePX1}ZbX!wH7JBA9qpF!h?C^}3+% z4Z-R+1%qn@>;EJec}p<*wqSg%VE7%uhIa)ce-?}-1y}t=u>L*4hQA7yzb_akCO!~3 z^`W4(j`(-M%8vy7{}2qU7Yu$Z82+bV^b^75DZw?L3aM&!n<;HvKh z*EI=db_#lb6s*b#2CN=-3s_wu81x8ch?Qj`SG5rgw547v~nI!`b$RdCHT!Q}aZ8!r$n zzfiF1B0>Mff`RFRNn+*_k;`Wa`oee9Z`b`)iTzXo{k|2ktjDbCU*ntG(x(=fQhVotQ>U#ZzVxWng@zlj*R%pHEh?K1vrWO(fF?r`gB zIY-e;^b!5U05M1m5u?}g97f6!%@cK2$C)1qVw!0EM)Dy@3~70p@L|f)heY;1Ea)f3 zwLaxAF-nZB5dDPKUla_!Bbxi74C-iAkb$6#XKGhzVkf=sQ~ULc|C$MobV> zMC%yQ_Ynic5HUiG5fj7|(dy6m!~iiwj1XhQ1TjUle!=*}05L?25EH}{(R-}K^AkhF z2r))X64ONAaS|^`j1c3*6wzBv`@|qILW~iU#5B=+JmV3A#4s^Rj1!Z@G|_tk;}b)~ zC^1e<60H-dPYe>n#3(UAOcT8W7>^hvhKW&PoR}o0iQbbKpBN;DiBV#lm?C;lmUsbT zm>44_iPkB!PYe+w#27I_OcAXB?Gr=9C^11y5xoPcPYe+w#27I_OcAX?63<5r5hKJH zF+ofbt-*{(3=l)a2r*7f5q&ihFGvg%qr^BdNlX*HLnNM`7$k;?QDU5!B&Lbpp^Q%q z62rtOF+ofbtznEu3=+e{I59=^)>5AsBF2abVw&h1F8V=Ym>4Cdh~5#jOAHdj#3(UN zOcK*X??}cc28m%}lo%%_iD{y5l*A7ZL&OL%MobV>MDJ+EBZi1^Vw&h3L;r|DVuY9= zrii|=q8}p0h-soP$aINeVvLw1TBlNv7$L@pNuu{O>JdZ42r*7f5q+nNevlX?CW+p0 zv_}jRW5guUJ6`mn#3V6I^qxUG#1Jt`Oc2vV-JdZ4C^11y6MYwoevlX;#)&DS_agd93=?C-B+F+z+JQ$+6!`bCTo6T~#pH&gV2#0W7?OcA|d+9M{2X`=s92@ezF z#5B==8N-P&VuF|=T9=ESj~FC|iBV#lm?B!U7>^hrhKNyOoR}o0iQd@~KR^r-Bg7an zK}->?E0``ZKnxKh#5gfYw62tReqx9iCB}&dM?Gi)8C^1e<64ONQT*e~?i4kIqm>{N!zN_gMF-(jSlSJ<|v`-8Y z!^9{tPD~QhMDMjshZrVCi3wtgXhoPFF-Qy(qr^BdMf6_Bc*GzvOpFra#1zqcJ^dqw ziBV#Lm?nDXQJ)whMu;(DifGLjeIGGE3=`wT6w!MFuY(vOMu~A^is)S+`axohm?Wl& z-WzF`7$k;?QDU5!B&Lbpg^W)O5+lSIF+ofbt(zpCj~F0^i7{fD=)IZg5QD@pF-A-h zty^fH7$8Q731W)qUnKe=Vw4ysCW&dHcd_UPh+$%km?T=a(r;pj7$qi%X`*k5=m&`r zVvLv|ritDt?Gr=9C^1e<5v|*(PYe+w#01g0UG#j!05L?25M#syF-5d~#rVVkF+_|K z}j1d#W6w%vA ze~DpYoR}n9cZ;5n7$Am;QDTCaCi?E7-^36xLW~oWMC;e|hZrJ8h%sV?`{^GsM2r&S#1zr`4gDeph!J9pm?HXOq8}ngi3wtg z=>4teMTl`?l9(p?9uU1CF+xlb(?s8c)FVcSabk+-TPAv8VvLw1ritE%M9)tQ62rtO zF-}Yp(?svX5oVvLw3CYFm{>UqI5W#6NWPYe@d#3a#rO!R!j z05L?2663@a(fhc>3lJm3I59=^uAm+m?Wl&zUP=eF+xlbt=~(ydWfPPsOrBD{wUA?J|P~f9;)K+Gs^!V_9Xue6Bfbv+)bA#G=%I9gG8^123JV*0=#s0OFmuSAf@OMyt zSo412S5W?g=J~qAE0o{UJU5iBqx^;DePU-59~qTE32Oa2;@XMQdre<$$>>fcTII(~QXAo9z|KS}hE zf12{2s9#F{dCe2cnC_n`|6B7c_pd3J&`ufaNju8>YM$kFAmyVq&vdIP4T_H2`EB(~>u-B0-`&9mHpNBIrS^SahjPHDck zl=~NyGn!}p{E@Pk@6)&UiGB~teKpVgJeqQ?=6S!2p_>b zPk-L0yixP?=NrnUuSvB&^-0ep*+5el;d9HFCl;Aw~{}Vl zj&1opp9B9o{7z2qMu9!CB#%5h?U^3PKK z1MwvCFH?Sv_zUt+`@KCa=E_u!{04#J7llC9Wr~;dT9)IDq+Z6!9zKbn1UY{E+(Vh#wI@rT%)# zcd}pjC*>&|UwlqG6NxE?e@Wa#{FbBLFIX~Y@CD~a=oi-~s`C+ytB6Ms>zU6h ziT9H~ns^-Xb&vRaBISX^$&5FY@>rt2UK1xW{Jd85%y|E&sEfx2_{j`!5h*C$1xYN&Jr3mhHoy#7g3U#KVZcAPyytCDswA z5HBKLPMk};kr*Z3O?-g(IB_NMW#XH}zYsqn{)?C9;M_FYL z{5zwE$J@QTXV0!OX#NQfcyE!DChn(w_4cD$qR88)-Jf8ps7l~gc|&#i|B`+Eo@vp< zLFVwk@sH&!t9R`sw>|e!&g$Ijn40nDU%Bw^$NsSP<8N|Sxwq1H=uyWH9C6yjb1%C5 zm-B8}dhfCoD_?s3oe%!`#W&yOtg`Y>-fopWeZ8yt`ukT82-MV$3XY#}_LONCUUKQ| zIagnI!%d5CyW{Tre*4g4Pd@Y93opO=##`^c_u)tX{OpUbzS;8K_c_Z`*0#JurwVVE zZapgZ>AAnJSMNir4(r>`e{}z2t4|nka$r!+(Ap8B#sp6rcShaBNs~k8PCdW=qUkfj zm(9AO;i|dUM6RE|VByV+ZjIi)^v=e6?!7?^Kpm~+)H=U#oywUO(tpEv)81vf6d>E>G&ExvV0^tRi7we*fV?`pjJ zo?qX4-~GRd{q}(emp%0GBg-Fs?C}*(Jo!}o>1Uo@`Mc+Szv}rH{_x^UFaI&|%B!!f ze*KL%*Zk?Nx7WV&?w^x?dGD|9fAHbo*8TmXf2{xbpP!^Y{p?>GKL6t18^8SOKbyY( z=G*kEsLLp7^Vq*M25Vo_72nxb?N4*53@C z`e}pLeg^*T*569~zYApOJ42o_2hj-MseG+Gg<7_ZocOPm|Yv?r_>ElzZ%ZH?RGSn>_6V ze{kz-KmC@RbY+h(FkUI8e!$?hpFxwSeyG%8$5HOdwr*bgnKF6WiMDs^Yd_0zZGq9(@Q$O5A^BAW&%H8VW=Cz+mlh=0kcI#_DgFOwN`hor2y!JD?zrj;KcA%3l zl)Lv}H?RG)4l#Ibr^?N1KO=`5yuPl!ZeIJDIKtqmpY%I;N4W?3yLs)W_ZJ3FJBj1m zy!JD7g27WieWIJ!euhsncLqRvM{S2Et?RZaj>uW#L;|-qr)){VI`{^}#>iZ@*^d03Mo#f`VpOLc- zo_72pH?RE+o@emX4^4IR+RxN9gQvdtLe0yZOt26;888>;_3C?uuYd`&$89eoU zm%DlGXLy#uQ$KR0lP{Ee`YJcC{j`2*@U#=V+RbY}BN2nAe)u{!ul-D1Z}8Ml-r(RJ z+lC`nYs;`uMazeMI^syZkS0y0U3n z(`8Mwn&vdkZo05(W>dK7tn}G-`A=!OylHCF`Aruz)i+(#baB)4rW4bB(jk=dr1Vuy z4Nd1YUD0%I(~PD|n);^urH=&PBP-?KY5N}AE4J^s-MhW>_AcAIZtu3e`}S^G&z8>F zF4?Zxy|NYAJ+t0yWwv9sQ+AJRhpd$U+;oradl}`wch<9`d$#5B-)D2D&3kO#cXQ9p z-p!r27Ab#ygZ%#$|F7Kts!S?2@2SdUbC=CsH}AjsfX(GwN?W=APfq(bA86dsa{pUf z^!?v)i@yImY*F|B?(%P?Vx#>3&)xsJ{kJxkZ1!v}-CVZ0&E~e7+ifo2+#coMTKhjB z-C=XbR?6RO|96-FuFJm$!J&bP(3Di4fv@zL^6BJ(uTGxw*);=SyJpJ2dJSCNYs!YP z17Dvx<#YeQ*ZosIA2{&!DfsV@H>OPcqVM20`=0mj(2zBuX&d_t`BR^1UrrwK*5qkl z^&0YauWA1Y4PP6&a8sY*@ASFw>&e64oqXXpy@vm}*M;96QIkAkYWkWnf4OGH=Fr&p zLNmAY8T;2hGq+A2`~Kva+pZb=!8J3t_Zs_QubJN+Idt;^@8v*@ z--C~A)+f@teM#x>#T$Bwt#19$KPb1Nr{igKr`EC**e>=1TLdHjqD-_jY7^RTEgPug zThvQ@M!UoSQAacNHLv66<<@>^zleeF+}G7w^wz=y8QL?_(fJ)Q%B@v*mp%g5L06MZ|Re04glUQa82HjCeq{?FyLgY-L}j<#dqCwsf+``;Pz9{ae%4>aUz zLmpws+8y7ea=x~2Ch-#D#k)RtTgTsxyK`W74(!f>-8ry32X^Pc|NA)*X!G;>{X~xA zFFk%~B?}VeVqcHvw7RdI@Ts;frEl;?din9F!CU%z$j1yhA5S~-GciPeecErPqpu@o zgll~r-dg%*xG8IQb$*)RIz6ptqJOY_Um>l(|9+gvrr!US9DU#WzhZjH@iIOR>>*DY z&qFGk^g}?P+PA9289~ugvicX~cPk>qWLEMcN;yUhPm%9UM7j!k`|$e{#5na5n&)>d zBKrFlJH&31dPutHpXp!xUlPyDc>bKoJ}v9-VN9Yw{0>O$V3AYbh`wK^tNkGcG%`HB zUG$4O2h#M0gNcMX4X593v()ZWB8(>b2zGjb{0> zyn>%fd@ub=d`7>Bp<40J*H18fxS+-KQ`GZO4iNpviC&Uuwc_6chJWdl_+in%c!qvb z_7OvaC7sw#36J*{Ir6p0e(J?2Cx|IxbgSqEsMk{dy=3?op?^_gkp9Ir?-f5%Ckci+ z2`0#=zmjwl)c19!URy!$f9U@f!4&mc^6vw~KmVD$E~58VkwaRhz0isDYaP=gADJR@ znEFBT!S%w&ct54}cWGMj?`y-q#2I2INsKQRIYl{549sVGGX=v9f)@R==%0^rfEXfr zuM~YB^;*imwx_z=zX-o)pCAUqVkb%2qJP0T!h7{~oFj51Bp4zeqnse7hyh+te75MT zws_d!!6*2thK(72sPCww`W@ZRZ(02=ufKfOWwWN7YxSEkbJnze7tEO5FMQd|@U+Wj z&2doY&c1N^)FUpOYS{|)Q!cN!`c0iPdp#PcUH$;e9eC!Tnae*g7Llim<7@um>NhA{yQM5u z$9VIL-5;g?Y75W7<;oQCRp&T=Apa6v&R_ht*GXMol61jOU#&+UFKe{A@*zA(*S^A`R}_(63a8^)jQ8c+L7isKECv6O!} xb>5-jF+ZS@WRXtwH#X*v-<$=RIp6**%)9(>R2*94xzD}uo#6c2*y#ST=^oN$lXd_A literal 1525760 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

)Kc$LyuhT?p1eKZH=^|aW)k#` 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


{W{lgGlD<( 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

|B71}R1KDm!xOWrKwF!)~fce&5qNV|PmzI)T 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 JfY7i~Y6)gNKtnqF+n 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 Y|8ac}_5V-*#5Rz}KWuw!zec0~2kuhT{Qv*} diff --git a/Libraries/MonoGame.Framework/Src/ThirdParty/Dependencies/SDL/Linux/x86/libSDL2-2.0.so.0 b/Libraries/MonoGame.Framework/Src/ThirdParty/Dependencies/SDL/Linux/x86/libSDL2-2.0.so.0 old mode 100644 new mode 100755 index 1f9bf7bb4095b69427facb03fdd1d55ab053abab..33ae8759650e547999509001e5a01d8f87886809 GIT binary patch literal 1818724 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

MU$eYezI5k` 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%0A->0C^H)7|FxL^h-N{1 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 #4iEE&9Zxq7CT{(=$ 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⪼_@FR1YQ1w5<59PvTQ%4{E33OK7Vo$Logfm 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ℜ{yb&y$5{`0)|YwbFfe^zuZsiHO{St>Y?DrMx$ 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⪼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

Ax><-49xCf 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≧b&I-kn{<=`;G`d=}?AZ-#jWZaLKTNm#m}#y3MvykvKa^RjX6p zy>rZ{p+vokcCsE{Np3Y1ky)c@oc#X-@DMWbvuf|xR4=~Od*JF^CUeWZ2c}7|BSYNm zP9I=q&Fz1y_c8Grla76v>S z=dya&Zsr+Fd9AxdolIMKc@jabUuSVkYt~z-+5z-%_Y35rm}XuRIw=t<_Hd; zDbK3?0wVf&26Od1*}0`i>=@wu{qCfpR}+OQ!q>1q*KZ&9K|WjG0n25eJ3+WQz++V zlMa=r(^cS9G*jlfVpGbru0$!e7|zv!-O!0lhP4|0=lM6kbb%X?kU*qtrO|CZ#jiB_ zB<5C^;NWmnDf(wPYDIpUHc{0jJWtwcv{ImCO;9I(o5!e;jL1r@S8FE6FzuubL*pwB zm9?(}6~@?ZE*0SKtMpp4@LCyGW;8(~yP-9QA%{j0giYd=HcTj=g045T*M8!dVhTAO z`d$}2Cl-)rvw%FYAhx^&a5iXuzS;Wk2Bt=Aq{;kFaI}+`wIPIe2MlS{DR2!`N3^SG z#%8#(H~?4}pdSzdK-N;j6p@J^;LQPB>p0mFpY>}BO;Ut{z-&n5o#j@FGvbW0BSqn= zmXWL83{Gj8gn*VgX0PA8uo|pY z>J(O#G2jk{B;6qNuff#hTf8^vQ?XTmMSWAH3}!8zz62nlKS!67)+uAqi%<~IRJ}Dd zzjUyp-VQZe>7Hq}hH9#*QjV#b9XzYgbgvc=%(tX8KnUFuwPIBWU=n#@%4q-rVzT^I zvRaWTGW0d`-}kKF%2sNs&(j>oV0}(&u@|9)lm+%8-1D-?UW5c*TJ1$0%BhH7kGUpEb{tHYxVk6;%cbb?DZME_2k8-KE0U=1j4%@ zl^b(Jd2`cy$;!=~ zi&4?;HTEhrpk$NuYtNW(`*J(X{t|8n&o%B$#)~*RI^&=3-`kLtZA~eV)vT#mSYX|( zDPJgTeDq{zO*xkg2GwRh>py2u1(uY8S;2`cDQ7`p0llGb<~|O6#pX?|z1=s*G2ET@ zhcJ$+Hn5~ZyUJNvZh+(}iaZtZBQJq)SyAyZrPUNu!yHA(4t5TMkv%wuTNoEx+nU!V z7oT9()%J{abxj`p0hOkWsA~{h`?RjE=^Z94pugEAdH|`q7p5;F-Mjyh@2D+jd;y&d zl2$8tc{|2vWw&N!ZS8GVW$b66H6*IpyY6< zeJW!-p?{smG%HFj0GL=))U*|~78$$Nd9+D+lHy1z^LljBC!Q}c-#m8Rq|VT8g7;-o zRbz$BFe_;gdZreGLK0oRi_mtF(BAo+*Uw2tI+I(jI;zQOhE;7^QPeD#+|IF4Sc^>D ziA*%p1o>tz2xpF{q_nHxL^p#N^KolNEhEIN5%c>CBGW~?5t$j=1c~X?F#6bmFokY9 z&Dx=H!djZLPJo`6(Ie{T!q9vIcY<|(Xrasx&ADGWRsO7@jB zhI%*Hu#Hj^!P9_s4YUhZp+BSw(M+0NY;_|Xf-Tf3fF~}Z(BzHR_fQli4YTi+t&Po+E zXv7^MFth=cn8Tj$Q+D%-u}@QkbGRs@hJTa{E3;V^hG?UZfSYfsjx1PQWR_v&#z^Zk zg3*XpHdkikL)%1Fpax&|Q$P;Z0iyvCgblkJH<5(q5g7nQA5*01LlT^#YQ&_lvyJl< z@-wuizk`|0TR_d%niZrh=NX@*!+oH#17y3@8d9NBjesK$O~q<3C?rj;Sk;3+TlZ6{ zTA&E2_EkfF#dcD%Orgz2O0sC=uS!>-MF@So;*?L!)h zwLM8t);4N3ehf;iCc&iM`!bxSIS7RiV2Aj(8a!9LK&~rZQdZeZ)KN0-;zzii8 zpopJTSBt9)EZ2|$>U8gh8>KIB?~K27bG7g!WXT=|Vf^_B+@$#vu9laxT9cBeNK}3^ zosnhav@goO$W<$PxjSUhiPATn;f(K!4}~SDxaKXfajPp3h~FCOH^(4t$S8DOU)wX3 z-6oFKUo2z1ldfE`Mwk&2J45jskmLGEgo>F!`SgWMWQ)mjE%Z@au4V!kVVFYsoB@4VzXLTV8^}Dyzhs`JY&y zfzgQ-DUT6$>t>RAaE>Um2A(1vCqGhZhStm-ED(8(qfan1NETXRVX5sh+S_b=&KYW7 z#BBWjmoOXih;WPr@jR*HU%{PswfW~1M>6AB!1)JWxX1VHh5L_xjTf#YzPA@n{!g$v zO&Izzez?Kpt`^F({cvOcmwq@$wP_P_S~ovji%2@2i@+ztKXAh>P#$xrWx3%N@iFa& z8;o{r4UJA!CUeo8Z{~)RKTcjaXJZDYBibhaB<$Wd_VUHe5c4`0++IGl|CI}_-hdA+ zNCe;l`%t|M=Gfa0hmcu|C=dK_>LDKxVEEq*Pc9I^wBs&{e?UL^oy6}YD|weB*e~G}Uv`2oGZdv>B{@;UmHfrVa3+^kX#Ts8EwP$}x5zt%HcTBG0N5B3 z{5jAaxe)wYu=}+nSF0YI-GBqzrGDNC_oB*{SgJsl(ST=5-3D%8w>|*>Zr1tajk8rZ zvlp!+wa)0VNEPR-LAg60;#MByunGJzNPRizoK<0t!w=+hb1lgkR?BP+z(3K~G6ybg zVhCZ(AtmAa+0h2sWkTW=-S0&bcFq}?X1Cl$=ws5{48##dtt zp?Kk~sD&p$QX+z3rPZ>qd21Dc<816zF0-Qmv%#{kXja}kKp~5d zUq=n{1{)>p#^iGdGK)**lpA@-BHI~P&8sXh8(im0A}b1H3Sh}QSNo1=R7T;HkBv?R zl-Y>PaD?DWL-3Yu=o0dTW{-L$RGRm8C#<#;N=B^;>EM#owMsRoqY)sQ&WL)Lh}w<6 z=!BUmuVzG=%T7cqcb0S0G6GYeea6Yroii7)8XTLk`eMyZSrS?YB965CEOeQf-%13c zAxEFryv?YHl|}h)F)A8pmDC7f{9Gd2xN0OZxp$SnG743PE5jG7 zQDTr3Mdpa?FJToSYT1pcC%sF6PCZEh-uhhG!i($4Vq;Chep>l-w=?zoT)Dt9OB|81 z%2L!ns=@De(PsN#*zR-DR(sjXaO0Izy%U){_NlISe!5EXPiVz&_jy0vHDBIO*Z=>K zpKjS(X7gZ-1qN3u$k@wI7rh8;k}iZn!Hrp&4bsX zZ+m(0N}z<>cW9+F%08pO4s$D@-OaJgYAF6V)gD>JdZ;tK(>7RqSZQT^ROw)yKYVSz zYmMw`IJwxCC*vPvTz6OG!3xmxwEx52`2bj1)p>vJaKS-GpR0~G)ugk#w_XS;XsIBv zMjc?xNv`s@q8#=$Kwk>9nW7>cyfZqFm#e%=TJQQ6z1!~AYKv_ynpw;Ye+KX$peRTo zVA{P7DT?WUz}c0PmsrWZ>!2{X**mEa$)8{Td_cl-nQQ3B0h2Zl9^7LKgdTYCM9!3i zwzp8rOn&8P!EYll<%N;dEUgBa(@d-x@gPslOn$YK#%ULlHsVh&AivPeLV*yEi$^u^ z(Y8#AIZ9g1Lp}?vcUlkjBM2n2U{(zU&b|fRDG*@v%!C-S=nw|DThcUN%?47OZY39u z$u;@!X44&0X>2PhO{?0NO|*7nIXNbYss1eux%wvhZXP^o2Db2tC}2^+I*DTIdOObs ztUlX1D81B(tp7Gr_0ZfkPun;Xys7`8-sjW-(;DF60%q|5@lC56QrOhpIjF3*^2tOnqIN4Nl)yo^*VRI2x6sxR z=z#f42B{~7UU)gsj)&As60Twe%QhXpq6h6+1_DK`KMIQYNM0F2b(CFCKOohb@V1{Ve) zZO2sz%Fm~(njeKbl6VL0Lz;53G-A%UIS;;mTM!4xB_h#qubKqbkaMmT;M=n zW-rzemq%5J_QRbQmg;tGcaZFu05CK=3H@z5n&NgrmKnZcOBoL&$ocJ5o$W;%pRd@= z=k3z@_$-W2*6n*mAPzBH55f=3kK2TgemeUZavM3%RxecjkHbQ?^G`b1T+Ni#4-!~k zg5BHAHpuOdkOyN@3`x(kVY1raA*an(w8Joyil=aP#i=xKLK30pEoL4nz#mIHueIvSZAGGqyU9ioV7i;_q+{eK!ajB(_6XA@(|PDqxvaMtzWWGnFVy zATh$$-IQPuy52%^v-gmn?rZz*?A@A86(wzHV5WqQPOzs0ej#QUz)5fe9Sy-Tj`VEs zlC!~Z)!Eje%K|#E0c^*N2{r;Hc#?G*vLbylbFE&&)vc`YUCG;Jj0h%zg>g{zSjQl= z>}Ksc)Q7M{s19L7mIWH1)}Wh)CSo}B*~rp(_I5_$(CI0X1sHy}{~-`ThB#)==xb1T zJD?Li8l!R@&==!?24huY1ZaIW0NBPNmkXTQj%(docl0Bwe4ZkR2PdYD1_L58*g&b< zQ4UnjmXBPyqozAo>uh$ggw`!=hly}gr-mH+vjaNNnM)TF2;Ji$XHmZcfXWCq)|BT! zf;DTpjV?VsBAlw=ir5Oax?&4iS7(H^kan>kZg_#14*JNe>eeAi}cQUU?e!@;&d9tUIOBBWQP$8 z@R*<)zVF0brA|o+Hj}jThS9nJgLOV%>Ixf6#=mq78%vg{Bi9Vr7i=uiD;C9{Yh%gZ zt?Fg4avqEJox!@ku(9N4FWAC^j8+|Jsi+y+)qDF&q$Aw6(mS0E6{9HB&uNyP%n;YK z+g5S{x3C541GW#D^SiQHb&e&W<%!;F1?r?(sQ=V=t)N-ZY18hh09z$+s)v++8L%dWkVP@qmB2gKfc}sCusxfw zMlBeaUv($VX?T((us3avbdKW5#@66=$lduQ%EMaZIbKKJQ01{zd6=k-R%a%fYX1;r z&4dk2NVx}*`g;usCV*we795(4;Mn%>K0zlCnQm*#)4{?L{bjJubg{iMZhNn7h@sbo z{RZOo^6T2D@`IVp?#0l*kGBvgn!#o83^sV8rG(pG5&4i^(+VWex zBgIL|!omTVU`_x~)r?pqa$(bsEgPT`1aJdNh7r<`9jL&WLx}vq{+CO@VTWzmK;D`U zK#K$>%6AJ*WtEyKTiCrT-P^%!4tvah9GH5x4Sueza|t!Y0_-@jaFzs_`~ir0m}?3^ zXg(f-7!NU@hSyHJDJ&2OBW=I8({rq=m=87}t=!l~?ff!Xs3grs<2DtJIgS}4GaN>{ zYhZrnNI#k^7lke0KSK(XY+GFcumErwIcGvvGDpnnV$y3ILqzLFN7cYLx`{^*vLdP! zmJ)UW4LpDnYMFRTa1e@Cb%@q8{J?%kaWq+Bc7rq^b%V~$L}|Z_yi5zqS>B|8sp%xI z7DVSUdvZzWT*FcB;B8==Z8N!HLOdWodD&?%8Zj?> z?Zv?G#@lxjDsxR+uVsM-(zJbdKEDWby%ulZZMGug!es%y{u#Bb|GVXAw5$ol>7!F` z_tHSMYuxEse|N9xS;S%dzMk&-0EkzjczkbH6qj=k+fZF=A5$BR+Fwx=)8aMGA+Kgp zBGAPCOUJZ0igU=h*F1*||F%QBZ|)qj9qfH;hml>Z3?vR*poYJ24?Bgd-6IV!A(@(a z%l{Bws?e#UGp$m|wjlRiEDO_hq;g5;F-1YAVnSz@X=x@PYz0&-6+xOm$!r_{Uck0< zyEkamJPNQsDKi$+f@&LJg*v?|ZAfnGdA4M-pA_5M$?`a9`4;Q-s>l|$RhFVAN)?L3 z?cA`95Lmr3Qguw(76yJC7tev1Hg~zbCs`|6EN%aQ+xZ@7!!4N&Pt^_)Am^@@-98 zObY?a0#g7N3vi*>6lNZqJ+1@EVT=nqZH~$~li9uOkAP92qnKh`SbU3m3EJNAEa2xZ3^z>6kO(BUqbWQX~_FB9xr-gko4wgJk|j z-r0V4`JKFL!s%N6bPPg#Cf_gHiqvZ7o723t`b`XrX6GgNyv4Hk&vFj=lD~7(DX_6S ziDmJVGrg93xNklXM;xHgdbVu;d@zf^&>#B9n+#@={eMM*qWmr=C=dW@=!lcK)qU;! zCFCNyWiLBlqF?{@XXi^F2&4;h){mXPj12jcxv#q)u$O(WddX)lXSf@7wBLu;*IqM5Oe{wrf&{LJ=p=~?u=v6s0%lM}j2zvpCr^3Xp2j2~ZN<_=THbUIx6gwY4x@EaAhhR^mOGgt8V6CNScvuK z{X9Yj2}vP?%=f^^FKkMn8(X^NLr?HgK+K=tHQxZemWxIfsV3A;fTEyq+yg}5JT9NW zfti1lF}KmWAq_>l#dIQ9(qHFY!Gi|+K_6_c58+jpv%{Tum6(z(Z|nV10q`sYSm4Zf z+c9dEv$=7UoqF>N(MNF-SL3p!XEWrF@+2;Lg*v@4=(IysO{^B5gHBqnG@oweMg0rc zX5a|b%qC-=Z5F$&rL+XAR}S1}3ac#bFfr9|PhdxhBTwNnw++&D5b-+y!y*vN3wr1x5$rIm2gojXKv#2Q9+ zYhImsI}gY1zPm_`8FxEvxOiegh($aSK{PU%_1VASOvdYG_~kF(Aj9NeScWCQ=FjNB zIEdBCS&r=Y2nkC6b-?7$*!pjNC~i!UFS7|1$0xF zaG%sG+_df^$bGFUbwQ=S_TE8cBAD8{O9v_Mn6Hg)e1v;h8y`~a<*$wQU+}kHUUKg# zWXil8u`Io+DzrZ-^YXrZ#2fy>mlQF%a$9XY&cABTY53dIGW(4&+YW4d?#XArQMqmXwgWr%Z>x%Li^lDy^WSZAKUHx?_`9lj z?q(4K-ThrOzHNQ?BNRB|6J`1I&*pD&_gVN|Q~k##WhPoTU-{xmC5!evz_^0Q$Sv{v zcu6JajJI1PV!Y_0qA1b4M}{$yy_TB>lBYf%bvOA%yq256V}*IPYwQx4E8k^t)KkfW zL~Xjcm`X_#FX@_mmS*dGU^y34feW%l4PSshF;xNcKd$ zR-IEK2>q$ye%9og$f83fwA}ci=KJ3F)jD+Trtb8(+}Vf8_>EnDcI0OBIFT>Yz(rLq zbJHWKX^Q_{%}QJC-qdl-%c#_}7!3_cO^EU~IyJ3=x8bP?WxS0|O{?T>1dla}siUi2 z82TtKL29|0=gjH%9msXrU<&ZLh4<8wdOqvKcpGn6NmJAH@e#Ta5<^BK$~9iewpT&6 zlJO@p-}&v~92bgI^HF!23}s+^FH7Alh_tpZsBjm4`v#jaonGs6R&TlPD9t1U#nmy$ zQ1kcYVFNk!U*fesgQc-(wdU9FvB1gHI9$UxNYcHuP_ni*e&OjvUZ2GPC)2~pKDPv2 zl*oK~i3MR-UPXdWvWm{l0T1#RR-u@OD|=VLZDI7Liu>3LrEeyiN)G}Mg4Z+m9>}Fe zXoR{c$&hAWcTa955tNCgKl(HmfqyqV#bL$AhuX-prTLV2kWxYku96`{KNB=6d!-^1 zhp!{D)5Mj4Z>nYlpUXNjCna}Ac#37etPs1k@p@h=h=Fba)M<;JSLbft%81>}1_Kce5rTIXc?(KbZc@ zOSqxt=DmW3oBf^iF7B;(G`aKY!JW*A8Wst?%#|&P%ttC-vSBH+^=-OqheD%BV_sTy zQS``M_HKrgN{PmVlRu!E)XgGaq24!nbJRw=qPDsxUe0Czo)S#S=rZrdj|HvP#uJJB z;8l4iAA+&35fVJXyVv$oRGnljz;Ae>FrG1Myw(pv*&5PMuJ&4w=h^RC^oNpWVc|I5 z+#n|B2T|8GNHgw+a>Kh-wmv>K9j);}=U=P0>5IzJ(QEw2G)<{NkcqA$ppy?c5Ypti zndI8?G2EZn^dy8+nI0D*2idF1bx=KU_gb*@Pq+6bljTfWWUcyAmQL;-1elpW@(y=3 zYM8p^D?t@ie5t%V#|U-r2VEONV%#r>=`JHT0U+SX$P};Ta=v>jN?Ry=36Eos_gbc@ zlEmf53qHaCO;_Up8U{S0si%^bZuqF`g}-o91~<4e>MH*s|8bZOc}0+duI|)u5Ndfz z6SX#y?9zZMn;s|DLq+yE5)1go;KS=UUpU#3(YFp588MgueWv%uSePF7*z6jsxAL;qN z+tbNmJTfuUsc}X+`EkABs7)t7?Vc`8C(n0JbLgJ%i0QcGiQqXvG>-wuEfjeW<<>#kwU&{CN zw6gTCTJ=zVJ(ySq|BrURhb(3O!j}5fCzI`^{=&ue$J*F|*Idh@4C znzs6LTk8FF-MhMKTk2_2q{Zl~rgD`ML+*;k7m=8|d5^l2`nI}LzqH<6u9>`y*L!i+ zX~yQ{;_}-OFR!};SXZ~1N zou+MyqrP4RnjY@n?C!(PjD3>pH9D40;sRU=+sSe9ulFYx#7Y);+3WuVX}RS@3lzsVcP!Z70faoUipzQu)Zuyj5hj zuu+e3gqL+TMY%?FRp!aR;tq~rDDH>-O}ZZreR@(Rl9AH?(~H&1@~)bN>d4DABg?#& zhj~2fSCYqG%XWKybex|5!1K!!xU%XLr#7B-kFHVjT57&6UNPZQcISR$`cAh*);S_mw^JQB}?6xg5r=Q-JOINf9O*PBjNJlrGwP0-1aa}dyr}VYV zT?|W)Pop@L*M~Z74CR^UUP8T{Fvlu>jhv~wmr-N-Lz3Ox?L0n!cWQi@f1SRV7I3OH zGWmVwMGSzXskx#gSCN`}xv3*{-5r#rd#9xAzCC}*PgIwsx)h0VEcO!r8s((2X?+J# zVlZniFFe->0^^t5=p=ruPHdWD_mFJ}L1@FssT`|0_M*`wKi9Gs^| ze`9vAs&Y^W?^idfT|_RU2QIbFy!3k!!)-K?8M^)DT&7}+S$K0wYEb`Ye}Jp)3U}Nz zekir1fqv8cUv)L>N&lsmRJt@zuL!QxFQ>EjFTK9FH;U##>WWk6S$C?=g&U|z`TL-BK7W@Hwff((EU%J1s$9167lxN zvg|K}WnV8@6%O4&z~x`^l;pvuDUj?L=-nthNpc5A`gz(sd%=)PS9>jri*oiid0hC# zvnxLOWm06cpM4sS3x}nzZ~jA1?(E#hzP!5evk6fO5{pIS?TBUS9_Fduz@@AJ6-q)$r zlEQnL-kS^W-_iU0!uuN4*HC!>sooQX_erY1rttov-bWPPD>RVm!uyFTA1l0nQ12y$ z_X&F68?a6KKU42J3-4F!ePiMMf2qCp!uz-MerMtR$9i8@cz+4?ExV-f-l^}+h4;tx zKELq(CA~Kk-rMw^D7=49{i)IW_2c#FWA^y3g5n4D=m^N^E18>6a29nPI$sy0%2_Jc zRxGbsRgY{(N2(G9W973tGUf7;+#^tXvgZ}AWk1ROTG@HG@`T1$nYy(EWgJfNIdqFT zQKnxWuC>NQ8$Z7{d7V?z_e2v`QE<6x)3>c`eZ1U{@Kp8X&|&oe)h1UD_xC!1>+n3N z7{e;8x#=HZIqB=9s*ij*ktrQu+I;t2PF_CZ%*m;IN?$iBD|LKlsmpN_bc>(&=Pt*j z{P%Xg`=jEyTb=T<+?q(ILAJuI1hG8y<2&*Lw(*4z#Ca9{9_{=3`tM zSF8COjXe#sT`heUI)ZUxRXqaR%>*c%j}mTC=xcGiw<3=xa~1Dz;Bt}KRUAM zZ$Tjc*>p?1nIZ{(+k)RE!LN*4r7zR(MgD$_!nuA=X3C`l73EwF(SCw87U_2YV$RUD zfbCMAxQV>FHRs)++Zh9&%UnDk52i<5Ly;QbT#-I)hytWf#w>_7ckCPhjH>xIoP8X% z@wm-Dud>K*xJ50otr)vuxW6&7PIr25tBG!_Dce?4PNw*_MdfGdUahgEWUC0MkMkj= z=?fys&ZxiGhURy4WMkfn^-Oq-bpRe8@K&_zZR-Pir(K?Qbm)2O{X06gc5Gw2`#x_t z?~$Ii0Sr_S8uM7wKm2a1`yb6E2F$=?z9tf(W#8q9JT_)-yxwaa3qGb8H#;d47}fRU zUXYHymv%<=L7@gdk0pJyh8)>}!SAmVj;-6&<0j2(8HQo90B(1l4V;VUDV|)x;@0J+g7+W`J3_ zttQ3~A1e6aV|@Mc1%*jaF(x>82}|n3^BvD0uk2uq<&W%-tn*gXKN5|sV+gU1 zOerv^P)*y`Y`tIqSVDsLZruP@tftQu+cs>)pk)=QK3;7YQb7*A#gpyLZPAMY?5S|y zlvaBYs2IVeQ|{e(Du@vvkXXm$_zbWoW_KEa?-MryvdMBqbuuZb=wqphNBj=|@c<;d z3?%#g$GsJsJF+Lc;W7CYeg~tq;qS8HZxnV$_HW8`WC!cJW=Eejwt$T4Y>YKk46>%$ zMp+ZrARR#o7Qba!HsJdULy-hwO1IX<07G5Hj?S%hl{-2pl_wVs_?$@k9KkV0?omn5 zEkb{4HPFb~$SM+ti~-@j8&@DO4Nq{_Jw`$wD)!WXE)0N6?=Q?CN*CE@vm4<`yZP$ufP&}53KAx(7JnF9k z-3-wdJ!P=%c8Jw|a)4OOx4$Zc?NbKZb&+o1+C3QZF+6#T_%gL0e3@Fnmq`VDX$+{? z){@fEk9!w(0x0b60D5a-IFq&R_e0?hTm|OCK-UUferLzCaJ|iNiE`FK+=$Bc1{%nZ zFJ@Y!=UzZfw}h|-P0n>_a;`%Y17(0B<=ccJR2Jezva{JxqwUlHIm!)%%7q-~MMUo{ zfnW<3&tkDqfN|ZiU5f4WD0(#_orw4w#S%Ae>ftJnF&$p|V{k!M_It_32RX8cD3ma# z6tZy%vN8K4?#iK^hGdL(x_85?Vu-k$=s^ovLuLr9#QkFFfkLK;+`_d235Dtk+|b|a z@9<@hs;hMT3YmBv!4VBuvrxUo}5sj{L;8T_c3-E?*M# zMm=%@?{6>fN{(5&i#|WFJQ7J*(1;UfAUuB>v%q7vJ06yiEE%83y^j%TBeXK z@;tou`N2qR)7v!n%9S49FE&=>rL@CF_H_s+jrWAuSS?H&MD+&!4p)<&`(ooDurco4 z_|aYr*jOzK>J#(K_M=!R#%vc`hupl3Iq#y$PIRSfI%ky;M z3=02@JbP>i)I;&d_5itlDE^2jr{NhR*Q@48Cm0pk3pq^pR=fwii8Io+8O9}tfM%qO z%B%Q>Va7Q}OQnQKJI+}X;F^;X==&89dn;b{Ry-lL`*4(Q!MtK9t>7z|)$v@+-v`cl zD|R>`SedREvFTZud$sr+C{-PKBL7}7U~;@tX)Z-isDN>%1kEK-2uI~nO-dm30Fi3t z+$vrg(_BnWvsjJZv-Ke}EGmSGffDJ^bF`u7*k0&a6WQ2Sn~nrZL12PtII5M=fEZRk zNL-sPRcCmu45}_t!>pPC(4XU}>~{%yDr&@lxhw)QF?jxk$=Il?2TR|x$PX`>^Tl+&v7`LEMknoP(*#>4*Gi|TZI73^VSD2 z=45+e&}lf147c6i3&CThC$~*G)HWse8tii1VHjgwgmGytw{8G?V9+qJ!x~|Q*&A^t zfQ~YURur2<;JX<@lKs66q2bKtj3QN_&Tt)_I*;qq169Bw;F7#P5ZFT^4zr1RX#^uT zn+0139%B#nrw^Dl`;I+SB=p(mggfDFu!p9HVm^@X&`l`Y6MB}(W3zSi@*Ta@SW0@;H|41Z>BT$NC zCcKiG{7MuJYD*xhQLQk#v%YDU*qYAJ?$6eYWb<}r2vhyOhMxFF_Vd^Jv4_4EVUdNs zI4Fn5WDl{;PV0>~?h8b;4fJiXhu%;=JGmU<1>#^wXWOZ$dfDz5wR)LNxStiUCf+WV zy9iU~SMtT+HT?c7uR2R-@#*y41oj;8vmOMvp@Wj-4Lmv@3p_g0DOiFMJk})g5rTWJ z7+9WpHSjh(ve!Qho4eHXwYZENE@GzZD19rN**m_)mB%-kTT8h-;_(852WX z>kSDl{cx-^zH6j3N~#COcb#)A1S&#m#ukL*!~Rxp#dgVP-lG!O&>-U4f0B+30f~lm zJRkG-dn@*Dy`S7JZ>8`x(z7W;<~ZIjNkz-MDXZdvNDQT|MB)%8gTJM8TJ$Pia z%93lj2P<#pOH^w>0whe3%+eV)-kPW;Sv;@IMvN4e7sw3Lz^1{Xl@1MX zOHXLK@Sr4ib=!r9ozO-t3WtHvzCfeC!1=ynaKj5KHLCH4jVb#U`fJEi#$C0`xk2xhWLG58;rGbbw$FbK(yEMf zZOZW>vSZ9PujL;loI2$KmaQ&l3jq#e-$xmPDS^ud@SgBRERgxJUIf{B$s6#UhthT}`g?NcWf>UW<08(7Eb# z^ix2;b*f&;CJn!XQao#4W9-+sgG-W<{pw{$R(l6y>GLE0!ySK!qWxB!L3*V(ac;b_ zW7j~J!1J%GDdtVg(wW#uEig*#4S8joKbLK-bK}vDU9PZq;ln5n)l^y?>LXenf4+5n z)7M9?XBW><%0`8M-inHo+A1#Kr>t!Lmy7&ysIAtXq9xKDsni|!*g|Z4BDjsqQ90+WIxnK zi;7Q&Eo=R=<-1n}(I^Tv#Qo4#~Xl>wn4tGAUL0V<|py7plkXBTpHeu*UE>b>9@T`5nEji)E>T`9Dq!;nD7vr+kWAMAKqSQ$IRn|KJMbLgyh3RU_K zdlw#h7Ac#-Q4umk(*oB zH-5k`ckAWeit)~2TmEpXR`4s0 zozJDyeem}K#rO*gxCn6=;4d?(LnPVZ4u`9c#NiL_EZ}g+U;T%Xso*BO6|ss$HJ-W^ zl)z0VX363#A2#jxx6-dDY2e%{Z~1e^Q#ZY;6|14^0yaq(>X;Y%RQ#blbK}?kgv4va zZ`FuI?({PtBB3x~UsCa}1GxZ2)PHj1AJd=f@t^2;c7VU>m2Dln28d^zSe+1%^b{(e&`Jhpb<+4~22SHJcjK(eF~W zgbd~Bu><^!;JR9Enf#bk>a92-xhk4$k9sS zU|U^o%&ScsF@xltt%OpmP0>nM9oKYI5ivUUx&-*g2ce>E^EY}od>gtc(B)v}A(G6n zipRa+%!88~FM9LW|C~SVKi{V({ zU!nFTZ^L~2bpC&c`M4nBt@!J3K9~pQz*}*_;kLvf=ArIzFe!hQ`IxKun5+5FpZ2-O zIv>eQWZKls2Y)6N@cVy(3Ygr}kbE`*zDxOwgSXRRA_=c$7uyCw`RT!udHTekxNShA zg}0F88FuDUIstkWTeWz?9K2m@@eHLfVSC zJDr=Uj?^0dl~Zjamn3T2ROAsBR2GnJEagQuapO%GeIk|bJC}St9n?XR3JR2XE2l@v zGlbtk{0`^0jNcLb9`CKJDdl+-4b)L5R8@7BUln)z-N52XDjLp5X?#Px6{v8h;)C#( z_uz!{mUB7yWKI~rN+z@iR3C4JH>^A!c|_Z(qUoh4mQ=$B4h&kfJBO@im(c0yrDaM> zFFqmo)UiMKx@ed3bo_yXLKTSK@{?w;PCZ>m{=m?b>o$uzo5Zd_di>4ya{Xbj<|~T?8*TrI~iw@G1(JKrcScAlDKz$n780(Gzs}{SLV0CwVKPgF1GVwP)1*k{+B@gFDhKr&|7= zL6!|SQ3X6SI*5m|QvQ^evg?Q6%E+wu?>vr&s>oohRv7Fof1Rf7c;XF&npHG6O- zHGYyjqf0@F8a~KA8ZER9kP}lh;axYJd|u0^n9k(t24{xZ{z=0p?dSuKR!$j|p59Cf z`rsoZq`BgL<+!M~yo1&2mE%CC4xnAjF2-m5Xq=Se{Wadob4$JD-344NKY?cu=2ZXw zp&PvA8`CZCDjqCzIVjy?U;|h-e!!#A8+?G1K(sD}+PCy%D_B6)iqkuG1IFDT-A2i# zS-$o}GW(@Nw+hw4?&DM>y?9_yvd=_^Xxy>8tUarmG$HGmT3X|bf(Rq%lTF*s0fPVF zP9Rb}%a3Jmk#42^j+5aDwD<^{7A9}Xc*|Sj%_VSw+IS=X7Qk!76ujlDB5p$m3EId* zRC8*Y4%>0w$$$sM0v=Ei@PNu99#BPdwM=*!1v%bb^&a>Fhy1;k&qUbS6E#CrY69!S zG*0Filh1naXCZ8Dr&uryninksVLThKhXckc;8NalgIOgtmPfkMEspr}!>?kNj(5QH z0>A)Fo3DT?JY}=yxWZF#g^c40?T$>P2$eIBZqvXlAE7iZGECfzi7HDk9$&Hfd>}wN*LCnNPp|_`La}h`?@hZj zN_=I%2YrXyo9r3WXCyx}&;Pwl)X%?1Tl9YOoCCLsbWSdb4;WhjnWEdXM z$*9Qvel$*2*iBiUs?v9yWC(m{(4wau$B%v_eTO5ZFs<#}15EHo+RlA76^*AC8xE+R zV)5p+edeIIqAqfb6{BIR;=_fC`&23u6RaNmy7j_9D%!@C^zFCmcAp}zRsUyo3Y_}S zw~i;*3^G;&X_iZj#q_5tlD^Ael)lZtLQ-|4X9ejT6aMP(x)Y0IYPB{MS%&;}{YVfNay^Lk)8~n%g48ga?3ftg9jb zzh(mP6k5#Fli?>_WDvC?`1z83)sFPNmFK{!R^dKg=dC<{5ZHwHdx#WpqBhdutvnA5 z`$DM?f2DYxw|p;Uk)q{d)!;~pUmhR2j{Ko8DpF>=w&N)iO)oZ)!xmJ-p`Jm#87%NW zj{3Yd&e{Xaw$EsfF}%HG7_#>m>g`7>@l-bzQgyadLJbI+P{U3B*c%A7wUIXvYDSU> zH6uxcnvog$ z3O2&@q1#jVD709>uHt4#!`|{2g^MQLq^ea#9zrS}9u|tj02_sc0set|(+{L?bGW+L zL?2&8PnIFnM61rUIhp<{T_|s>gK9sU>sxDjX}&lT!W9p+Z56M0SKIVMK}$5zmdF+N z;jqc6iuhUbV_q{*9wX$G?||;Lei}3e9U6f}EZ9Qm5SB!fT6IEVq}C>3N+@p)7X3)A zceR~vNQJtGT&uzZ=_FgarP6TnfN8YW_drrrpa6qAQzLETOY?+us|kj@cuKF7L||6y zvX4nD<>isT1#|8TKa@GQ;Z!r{E(H%Nf*D8nG()m5=}P}02t@Lr3O6qSlJY0YCXZ}S zL*WR31X(4h>Vx09;I}sTtOENlx>$du<1gGdUMa z-J`Qk$=m?1Wt(_KF48zEnJaDl2u|~1_~-y`Rl0evodetYz`k5kj%Bay*A!n#{*pYt z!jJ&%SQTMk14EJUNB|W1*oJ717}yA&M@~hIw0uVj1}M8Xc}?JeFDDM#vkWtyn4`LZfiw>i z>VVDg%mW~fO^uMiYx^Vd49L>#vQ$n|!D&`-3XelFpXJynIfo}#S4@K&RQFz!(4^53 z<8{FVaft0uaEOf%T3wOs1@J-qe2lbmDkIh5W$(IwpgpC0;Pl4#e0_2Vg@Z1&dOUXr z-9^W=e)gySa-&M_beSn%u0=S&c zcz+KD9DP4;`Di%a359-E>i(r#VOwzj(tMtezRr)13G3X4>K@XYW+|Mv;Q6|}1_jNY z*YXpdz3XnU6hXY{Q%B$8ou3X{T%;DwZdMzD$D_vt-KiIZHGM)g+58Lp8}Ab=gikHU zRNtU+VSRsKmv&g6@L&e@eEl42j3G``Op+`gQcP_@1F*`@f=e|NO8M zEDiag&TeJ9)ezIPB*3W_#d>hh-^<+c8R=cDgg&BU;0e~}-TV61t3 zRCQnbjMeStav^z+zV7(cuBo?U-Tb>1{Ttn(3$Muq$#k8fJqO=RA;#^KwY%A)zb2SqEF{gGZBz9ao4 z33aePkc6!-^EI0jBU7A^qviR3gGS;w>UpZ&%>ej)wB>it49gFoeCF@A59B%(v+ofr z(XJYcb273$A8W!jAp1Xa=Q72&xa4>jPpPY>24pJfs;PB9WA&51e!-t!$Pv%z)faMp zUDQuh*=pn}l~?_#nub(O*(z%<-vj`&`V&@vZg5zCU9XCJ4qKJ!>npA9So->{2bEI6 z18w?smFer->{Au7E-a;*%!jNykr&Aj_hYU%E053Jz%sj_S+T70jpVzehN<%C+Bbdpow#--pYB=7JtKoz(pv{C8n{C%N`U1@*W( z`yapNhaR4ks#(YnL6ppCv&!&U?e~ROzR$t@z0vpl{72pVXU(Yx+U8H$6%VWv;zh z{(Rb)PuY_YI>;Wq3mR^DL-D-=e3?glIrwYKB14U-s!40QR(Vcl~x;ZY_4ix zhs{+(sB!vU{v_1Y93p5x)}U6(_*YX#OZR1;l`?vlsd}#VZ6p+d8+=bCDpPaZ=qpnT zUP{gHNlicKC-$ZiQGZU4zkuhL{1N{2sKIzsR{I;&KlL@mGm$B`=-pe9U_omEt2fLW zF3|b-u%_qQCdctf#8@Wgd!%i8M5~ntf~8}EAMm*?Hs-;mj_jw4>XqwQS{3EmrnB5R{ScM4P0x*axao;PToyOZ7sSks->0URrRKBeh+b9t^Y^CaAM~d) z#FzZ}FEPhJX-9UoGCL?adhAP2ed(p}j%gCje*awqL-Wv;pO%@lM84VIMCF^6PXp7X z(!2Y-a-`K|IMho@zW>U%qlwHVluWKJpX#kR?*xSztZ%t}JL+%^V%&F9sI*x+=6EKa_CS4wxn#d)}{3nKXMl90G=Bxh- z;dC)Yq1Kuc5>s>EwZ^t4i}&wYtYh_)!Z8=L4f>Xq)!pIn68ZDoqwtF-2biTl6QXD$IsLVgdjPM}J zOVb6()kFMsU+9e5c7!E(1j=beo&jxm(624H@@p>RE-0JSb1-A{Q|5lGNcT@NUq)KyNixD&C$}+}V&M3#67i&5pxw`BN0iWj4-};5@xa$Z^qH&1-629zX z-&1Us-<2wsUzAyhrN%d;6h8b!KzDKOV!cyas*b2(+C|5%r8D?)QEqb>kcff{6VR z2*p_U4CTwqsSDlwjOJ%pDly7GXQ5`Q%D<>8m5BQnjY=hk`xnKLNdh?A0RuRtlVvZk z%#Qc(3)%1eD!(IXNjf>`4;HnN^k&ipzsx^x27i7SIjIDX%OgQd$N#B9PM&9O(D$o* ze?PD2`&ae-lHT9{s_6TL`u^$O-v<D7a;Hl)UtXyjtm zsqt)Bb{;6_ZYqLJV_66ne_WY5UZV)2p9BKAud_}u^@NK7y||eh1TkFc?T_v^TOgf0 zo8~QQEcn$mzJYAy3$}ue2!@h<>K>bao2zeYyuIeqYcP^B;Y;OOkTWth(>T`xOm_b`7^vTwuW2wfv7^)!6{~G- zSlcT{)HWqE%vF^AF!?jTc_=R`gL(xooX2PQavrA-omis4!yrQ0<)zbdxAXu=e^u@l zhQOHERoLjkjU^c!htq!fXd->>uXeuzqGry#+h#n-QkW0_X-&nVn=}N{orxJUgC|2rFli5d6%k?j`|1o2V89fl`6BQ@^#dD#9f{YiiMr7-dse3KF9njUol z$NjbGno_!%?77;z?iX}9J^p?EF2D2r?$l3m_uerNG@i0(PYDt%xj251xF02B9%y=w zm17=%{7(@a3uvUdY#BT_pi=euGC~2yciFd-^<5a zzGPo6BtJf{ExAPd_18wI!JqPg8+vNW11K_M)_N26P9+_l)DEcD)_x*VGX3+@ihATL zWN@G0ui5Ep-pwe(N{#fdjQIREMh>!%zVWz&>2F0-O^*)UKlGsp@vutw{e9M>gdlKt zV+3Wr@wmg;Ly%zROAqviUztylJn$p0o@nMEP(D7lY!phE0s;$4-xpo(Cdf9b+~E=iqN?X4`IkE*to#j1^j7<;jGV9A)TRbBmbYEry)^HqNl z#05QX2n$Oiit=q}QNB3&&f}Jat3KfJagt@l#G zI}PdSugTA^-Y@xgK!_Y80AKTuj9;NYX1>VTJA`mGTrK;f|9d#U|8Y_#$zjq(tA<&j zYUJ5y3jRt3p}zm2Qbej5CmdB?Trgkw>M)U2S8dA@$FTmMDMI61)w^v z@vB9ky6#^LRE&^QG|=C}s&-B@C5S0MWLoAM=N|xKl?Ww$n3kFFNipB@%Oi=YnPC%L zK)qgZhni-(pn2hO4D7fG(e59~p6i`&Oggy-sm?OvowQaIY44?`br(sDlEsH9 zP*>)Z^>RoF-==1+PKrH0_X_M8luKXx=x$9!$v;~Go9OpQT3!2($g#wvk=t{($e-*$ zb|Q+bII{C6kZsOrv>9~nTND&Bi1pa`jlIchZ3U^Tc?O(=|Cgk%EgOut=)7q9+I6qs zS2~Xd?y-mJ^tC_HL$X5r_}X;?$(H<{6}e}Sp0(^TzRaH6a6kD;MW4-gC**hO zYn|_K*PS+;Y<+!20LM%l=hn!@pElO zQ<2B3$Y7hSN4D>~UDh|7?pf*^xtVX(`X=$K3i+*2Bm7pX9c^=Ak$5ccH9@{w{gPfs zdV=)HLHcz4W^(%vR0*>4SXS; zyyy5AbGB~UHQtD=ujC1C^~wDDeFIUS#9GR;Kj%5L-f^>v)A%HzJ!7sTY`}; zdbos^`!g!A8bC^*kBcFQU;G^f zv?M#5GD}+6f*0YTD=En8zL4yTh0)AfGPcya_W$7^W1OYg?-x8}lxtl@#_Ve4&fjB% zHVh_=r5d3|I$1)urzA4h-tJiIKP$8G-7aT`!Knam5KB)%B=UwCdVxEm_ZiBDB&7A3 zvIIKD-#dxwYiC01v#h!Hs_06qs2eWP{jWjMUf(U4cCv!W20QZ&?fR#EIqV4_e_Ao* zM=KkU@8mOhn|-zb1ja3DWM-*nxXtXKerDEd)3G~xARK5Le|&0uA%AJV`4v}Q`C*r$ z55KedndfJ54-7X6@kOZZE$!^s&3>H|yt^-CTUt9t@bMiz0}u%!UN$MSPj#a|HI_UO z@vi+eh3tY5x0OYB?PvX-^j9K}>>RW4%6$-2e9Xqivu*GTjRqe5sT=Jfi(xW7 zfXP1xxgI0eqV-(5$oy#c{*W}CPs};K-@)A|V8Cm%>&0vRTTLDoJzYiTBFg?%4Ymu# zE;-V!lOmQ@~(6?BfOy!;fWa!oJTb?)x`+(R{x66F0*5gt=}h|8m}^m7>dX)R*xzkW`Py$r@)A!?sr zmYW|HecS^CXad{4(Q|IT086PXDK&ftOG@V2q|N zZb+R1bByMem5Ei{^#LJ3@DtiInU6^c};8b`ZLpIWq96`3S9`c{5B&RU5rwD}$|L#V-x zbQ3mSJWX}0ufU+S{pv@%|0VPHzj5k^^*3_^Zv(IXQc0nPgYvaN3?aEj11~MH&WHvY%>74A@gY(@y`g=K{mg$aQ?`1 zc_j1k;LEVWmmq`ifnW-|zo7+(&+a+VHiHibU^NW1&Ra3X0M>DUlb7H3mf!!%eyB6X zxlcqWP?CYgMPrS%>Ca02sO4BB$8KzXYmv4B-B%d=q^UOc+^uunFa?y4qiFt($QV8o zd2HyarU%JLHmc!fCpKqK!J$qcs=eh}eh3#CAO}8H1@+Bw^^wgQYr2`Is-auetL{4; z{0pGZ-I@ox=g$BV2Krm`pueuiK!05x^tTH1W+V!#-=ajI&%5(y|MYbkHSg{=qo)7! zXG^e9a0N_fwO}%=b+jmpqYsPq<92SkBWLM~^HIvfBWLB`Rlf9TwtMnE&-Tx=OAH#F zp)+VUE+9ABe{#S=cFyCHqy9z)U33~PIOIeA8vd2@acurHS_L&#Q-MySL6Ba{JQ1&K zYBulF%}O;NoI-h{lW4Wn%);H+GjYt=ymNe;-e`qM`=`MkHijbQ2D1fsn9hGa5p1Jp z7q!l#JxS)mUiwGUOWmoG!U>AuZ+s5z>B^!5JRQ4YgP#R|V|FsDta(GupF;a=MbDo; zd#gTg z*%1fK*s;sWnAl*&6RK!luYDf4li5bip6N=RCsX*>N?z>rSyhCm>IefZcRTD)MwB&v zg2XpCVs;SOTwUHF-V;6WM2$a3fxw4o$QdXWj@=Tc>CQC22 z(@7lT(Ux%A5gl#`cSj>Tb`z;X=OAC>ELqIXk=fM7vdaM}L()#!fA5oIpJcv9{?YHX z+g|=5?J>u>NiSdbJeebNY(UPRddop0aiPenbW3<@EZ8?bws4*-JZaYZxI@PuY?he6 zlb9(HgkpUZj*u}keb11&!+yQbklDGi;xlBNAW@yY4qJf{90BAU*-m$g08)TB9HR!$ z7epYE;OJPHh^6@C*i%d$w86=-)4_KGlZ2a{mgH@Lo{sJ0m^(J6@gM7D;w~D-1DVcdE&_b%;C;Rtoz^`S+VJl*lVOlpI0cm6cTY zI(IF3XEgHK=dO=c-o4c(j$Yoq)s~J;-U06l$QXW+UTP<&ji)#wFFMH{%@caZPUFSv zI(8dPB)iJ|2?s-Y2az5j>uBIVkG$(8+?>4YB?8~7ymM^zjn7d3r;v9tEy9!2>;-T~ z;Eze(p_X9lK<`H8{mHwiw-C!70X&#Q#v~(6|VHrJ3}RdC~l_=^~j& zFED=6PT2KQM$#=#<`wBACi9$H5{O^apFlq;mU*3_%yXj8lxVil*-5%$nfGK~=ABZI zc~wO+&rX{OP8Ff-v%_a$r;j`>Z89%rGS7~lg-5F2_@MNgmwC$z4!K_T-G(`mcVm9{ zI`U38w8MpZ+js7Ijz0F?#s9tRJIOhwo!CtX#$NWF)AIVY??St*k0#ymG*+a;+9F9L zdAeu=hU$^_-P_fKtN!)uySLO5^i)S)E^BWX zi#Z01<~na3vY0{bqsmii#T z+amAYOcSBpd2N4YU*aw@R^NCqP}EzOcj?=o<86!Y|A19f0!haxoy_9Si|1YwH?eoqH{qB6;$Y9_YhOUGq@3Sg-^8V#rRQ{X3Br#TzGl)25c3%+I2Z;x~`jB~Er#*nYqrvEF$vku* z?ZfXY^InS*G!0?kkRvGJn1!D1PeSp;tr_b_=$VK^=slj7fXF*;tdP8OMxI1rtRJBl zM7!e1AG%nGNw|0ep@-Y}?G$?E)-3olr}>Yw#{Tn5wWR&IhqcB&nI*A=FQuaygwxL5 z_iM#Dqae+->Dw)CiB>GQ2@HWUiagqpSHt^UeidCvQAtLpleSpL%4s@!K5BH?OWt1#k~@qDx{Tmv=S2DYtbSk&m+LgdRk=Tke1{uh7KEtErt#& zAr?bNVXnfkRtj-05r)s)!dhtsr<^qT>#MOXpmKcDgTQM;>8;*!V)1FCh!zp6;y#g# z*sw(4RYX7{kZ;h)l?wR=ja&(BT&$39Lu`kFEy|2KiFdb8q0v^)v1|r`AGBHqk`UAM z1Tt$Oy9zoLd~UN4 zQWX|LYN7&D^{V)FLP%K!pu%efk+P1sC{m;1XEnkiuE`12KL(WN3dQ*q%8w0Dd;!1G zi0eW15nk*6G*nMGR7Y+$G99wdEznl_ie~0wxOmFS&jpBwF7Z%A%O0rO=N}KFA$zUQ zBK!)ES|N^#Px3o_=qA>GAp?FU0^x_!L5!_}K?wV33r#-B&_L}_a$Q8rsz(F_6%-Ps z*}v+I&mCV9K3}%Je}3=%`||tSLVgdO75Kdc0|u8Z7%;eO!GN_T!|{7uYoKVr@2gG~ zQbHn%K&%tP1%5vulSUfIkc>MS`;_>}2(=ye@=7YY7ZxyZ7u62xla0f&xE?=gt42*5! zK~ZfHXWuDw|9F7rZ@}4g=R=;eV<#J2;p=%t$9OrB0maKDwL$1;8Q4BzC=C4^5E}MQ zs6az~>bqIX~D6@$(#QmHNrF}VDGCX~l7z|D6=wuLO9;6jxEbSql^aoP8Q z^x+=9(7t#2PRADv|JVM<#(#Exy-EE4>tn}%!+wZhMKS&#v1SAAGr`b=*|_1N%`^Qi z+8hJ^hf6jV?9rJAueD^u1e3n}krF*3P~s&X@_uo%oQ;>G?KpQ@FKx%X!4e6kCiRVj8$hEogm(7y!hY3& z|4%XeZ|@)fPx%jm|8Lda{WrpY>AHQKI?wd$)Cqa@;1}iALH*ef&Padwk7P%#IK;Mq zyy@GFE}W8U{GL#-fuYM3hmIYT`GSA*7zp5ZB7n1wjsVU%k^n58e82c_F_K@?zAdsv z`{IA}*zq4@0&(Ifq%Sup;QzY{`0w_w9jMd##$~^Lo%M}(?h8RkymMa&E1myF7oz<8 z+!so%6S>>!p{zbN=>q?sM$#Jko!*^S83gdY!*5{cnB# z_LHL|?|%A|*O7PcoWHd_SMQv^wbL%%ilY75;hJ8bU8o)X9wt6IdB-xszt#EMK-ST~ ze;#=kZcGnW>HE3Q*diIc>39?GoWJcQ@7N8a&2j(5&fl8Md+qbLy>Bc2uYLaZGar(? z`{j>bN8Y`2{`NKOyJI_#6zpsIZ-4%_)V5gsd!4^^VV7`b1vePKbN=?7^S3zG|GS*O zmE`Ml{%ff_VXW*yj%Z&UPs=&bN=>ik#}$Aa4ah=#}aSi%{1|6KY#ls#Jf6eo^Q!`&VQ^M}IHzVv8?I~yP zF&C;>DCs*al(fGzevlpU{^Iyv{oEJdsr~Wy#T9zmzazd?Z+CD`-@g6ceH-Gw^|%6$ zx9K>ycO>IEN^D}EN}ka5+&-z8#*c; zCag-`W+QUxoXZVAbhwne;>|P|CU&Nl#?{I2o3088zqNBXUZV=XE#q45Vj7TrFlG>Sd{vWqKxpADPJ1;9O z3u@_6m85AF(!)pdq!}1+UtFM1mlKLTj5oc{o5wa~n&8kNe;3>JCL~rI$J=c|mm1d2 z@(ux;hR67Qe3rLmofQBWTUz4H41|X#NZQHo()cn7RFBfDc;^ z6ixKJCz-( zGj0eX+z6m444F+G26CanZ1B|qa2qdM)rIkN;SNqe8z2cQ?G3$+^XK-aKIi9}jC2fi z%H!=Co`tu!1<=xrAEI8HaW~81v;&1h^w&@}z-I=XM*!E|*}tVS&ATD5&?m%BhptTi z?2V)X!G;cR=wyTaQbSb%Uy$b09C+Kjhm;_&c9Iu>3OgFsiX!LhD{X8nB~>$eUoiG7 z_QJ)&25Gt7Frg)+1S*=hG^8FCo+rcwt>zqdK)T{j1FhNu_JldCE&D9=QJ3aCR)F~x zn+H(t6$-0^VH32aNf7EM+++kruXvp7Za5TE*?Ca^(s+Z*#W)3oE4J{V0T9jsP8X%d3W?RVkoHw+EgGx5>YXpgA_e>!%PB)0nf|^QfRgNW=6&Gp>76n#iJVXj(}0mGkn<276!gN!k6y*!kL__wC=@WUw2YXOMt=MNMVCY_aDgO zy5pT3zs9=KFw5J1sg-p_Mp$PkViR@prPstP8wl1b+fJ)cJ@Lpx(*PjhivBp5wQf~d zD|DtdjZryASk87=`e{Br>YZG%h{UDAENy4d-N+*nG*#Zo^^4Sla9Z?vJLKApXzT9q zPM)!d4%99hk!+8R2}E)0uX~7;bDzmx0+DT`mQsYRe$!Q-;Df|&y23lF#c3+ne3txP zOO#ZynUd3)+`aQBXEu3@R!ghOUqnG!DMkc1*~^dr$k2_OUiI%Y4JxQMvWfRml;K@U zN4jDfPm=xUMbem1MkMaZWw%?oUPhkatF$t{?sQ+Jhgq`eb54;f^d|esISjGInm`#c z-OUvZ`o=X7xw}mJ<408{_|?$(k$N`iVoGalcFjwsn`?-YtE;mIIjuwu(pvmgn=;<= z7T5PDIaWtIs%U^4e7a&l&~RiGRSBft@-D)SY1G}#;o)g_Bf}H}$Sd>U^`+@6;51TKfOVdmr$qsxyClLIxRe^bVS8tWnZBy3nE~l~z))Mw4Jv ztOFr{h#Iy?0@?;}f>=?3I}^CQTsJLBdf2A?yXmWiAnnJifQ9Ql0T;!QW;fJtK#)V~M?!$PJN(8|)!g~o< z;E0kzD^+_M=>ScSNK@XDM`*ktntD{h_g*gqo4n3Q+)dekc2xYDPJ&(@00u1U)nz|EM0~WjXtq zj(=1Qbu1NfQJ9rgfP@13DRxS`Tv*LY6$DBv$O<)sJ+C#R94QcRqng@ilVgLbF-5p&kg&Ne2 zyhTxXLj2AU`Anpu5`LpU*c^1ve%_gJz;;PX))*lI=o0W6oEyU}#HX;YOl*2|i$uL; zj<7~^)u%867}hf#xNvGW(O!wt1Bj~rEvY{s3D6bYQS}-Kb^@fy^kVLg5D3xzfH6va zIpOGh3?+~ht>88Lmsm`$p`i85fH@cSsZJ-WGPIit>_$ol{!xVJ z;?B)9ClFGjGAi3pJX=PDMKn+4)|_9sr6l~m2DU7qck=<`jnz#EU9#r3&dh(@U2_sEkW6kq7o6VvxWwJ(SK}l zys+JnpOP-Kkt)tY>Nn#GB9);;t(3muK$}JYmK!rfPGZT>(e*GhjR-i=7=cJj3PVFN ztOt~gJdPpgVP_W}ilkuhl|c09Qo3QX;HeC|1KJrtrN{+Gv|@$&4aHTu1)l2BTVw@) zG5N%hv4%`oi{~^TNKrVe|;n6s$EJwRp>Ycp`IIOz~Q9J-pr7^vnV06Hs&h zl-K43d0;eWAC8(Yqb|+|95rVK9cKb~_9TArjNIYbb1HG0O3cm@IBf&bBK+iafO(nQ zC1k>W6vRX_jWnKsI^G>m;=CaI<$t&66Tz0v-CAG|D*)}zoy&A=F zF58Q_tg}^3Vx$N}R{FNMF0=1Su8>8#+1*vAj;M%v0C&t31Fu!~P2Qv~lg@$D_Rc^<--@q4YhfFT zwWQb`6beYOnhipM4vJx(#8!%IOShvR>X6kdIupE75P6$W z+7w)t72!RR<`;Sa!@JsbeOu!5KRCYgGA^DIi?>(jnsxd zt{q^iw-df>=kn-UDXyPdD3$213GB$qOIZY92baxQ9VIax*VA#$n8tog@$S=*4IUI( zrZEeJMAe`k?iW~t>`s9&1+c$M5-_SeaBPt{mBR;tm>B_ZJky2`$7t9n`a!4w2G8&4Sr)#2~hYR4k%z_m)kxPz~^rmKMBI^QH5)7g804vQwB9IZG1b*09 z0wsb2{IFaBO3QGefYN-FWp61;=i`horx$#Z2IY`l1)JCeoFNai#In5telJB_XVDRm z7MrhP{$!^+VPgLDs~Rt@ID&X-^xXdocON*e2UksM$k`4ow z)*=}L<}hHXMe88ci+%RrjFZ$<3C4nUhPK~eB#dgs(@qR=0ZR&9U|0)M!Y?-*04cFW z*?>LaO%@fw)Y1?cG&DUe(?s|pK|yM7N;zog2E`>4W0(aMq6-Ok!YR;{wu*#^lEei` z^jFXZJtHv~eK9bPY(wFult$P;3E>K==+eHDdn>f7M71iYPNXFDt6d9S2y6P?Mg2jr zTyP191UJF27~J$e4vTLL@`>S^EinG8QT+86p(KruVqgg%uFtH0D>lSy9v&#^1^~1u zxB3LV$O9svepm^NnGmJIN?&;UJt_r|;q$?g0Z2ej2!s`*OCZD?cB;dT!ifFHgTN=kKwyz9XaW`ze1skY{waZ_ zLiZ8K>_Y+p69PE~C<$%>ppoT2z_;lVkd8>6Mlz$25S6-ECDKAD4QBvVm5$a1R5ffQ zZOvhD6EPF9QzI;dK&1|{p@xb?xjBcSoWTZcKslHuO!~h8pVYkdZ$?nZ{TC3_or0k9 zA;&`y)Q}u**_@rP6P;+RqV`Yx@8GD}iT^$vbqdNNj_PB;>AwL->F=j9-c-}~A@I{D z^~6tWD7keCMQ)64!5uIqA*!P`H33QzrGaD}6E`Y!xG}nociG(&1gm&P6o^DYeCwhc zd8b2tdP~4MiPM23foBqLx-E;J*oRi)4D9zsyonf*|NXu3rbWnyfz=8O)QbxfZyEyt zp%NHxTBwOQV~LmtI^Kj}9;!8oIS8dz^Av=Vl6Aa^4Pk{Gy=#$EL8x9zkyzO`s2^7G zriHX;^AXWdwuIju(h^f3UT_peuHsD;gv6VOxK+G~^9hMJ5g_~GO?zzDtNpFbvdZ0t-Y^8bz^DJ`_a*UxK2DIOLS z@2u_k#r3Qm3@Vl50rvDxl!>n_l@pQe$LgQV8VR3dLnoX&U9LozSQr?|ZiztbhE>A` zVgiQ(l@Fz>B1)0?lEi9e$6kU`G#`=AMA zPCGFOABE~DBT~`q>F7R@JNpx4Eg}$t@6TwB+5@hGP#OtPJfa!Y3at%(B>?vjbxetl zTvtNW>Rmlwh80AL&B6gq%bjRE$UWwa+u7{CXSrEHA5gSGN44ZrZl_= zZaKUmIE2GA{-UN32)&I51VU7BlsFwVW}y`_&H`|6#Ij)=OGwZcotZ#sjaqMlN~rfFx;dP8Q8Nx$ZBX68v1;L2O^n;K{*}aQVcZ^;3X4?oD@p* zXs%XYwT4WNN~BXbRce4_>cFxz1^B8CgO}TA3E>#|oP~~{6`KAo?nN@QUZl+ps1i7{ zg7K@v(*|@KC?L{Clu^erR34;AiIC(hJYlGcd1fI29@WWyqYhxWV2@3?e+~kSA;uav}m%*Ch#TKW=*Dh72=Cg&XucFxMhP zt6C7L0{stL5y9&4MXbc-B)fr~fST%%6A>$V5Js%{t0Go(C5Tut=7NZo_}wKp`0*AU zq={GoZ>_(J;OQLv$bQua)IEVoj-T{9i>0Bg3vnyDL!C$Sh6oiQiH=t>ZpFsp zhviD#YBerY-0J5js~_GX4ayRYVf+cRn=Bv0B+38OB@Yd^lh_~FU z{x8IUO#i=I-}B?GlEdOHiCbx`l?7j)0bR0P z&g=*K+whbz`4U&)V#9R&qx*&X$T~B8AzZ~UXfFk;`EZwVReBR&Ib4|mUa-@Ba7|)I zWv3a#Rd7o%bvegNtR>qGVWX5IqVG~M7*wXb9Nn?35DKQEmlNEjgK9L!UC=ntz^}tV zw#rR?uRtlE`#~E?+ar&O;r?rg3;Z7*an<2LN0xiIj_it`;+H;AE%*^pDJ~lY5lKjk zuq*q1#5ke?!ByBGrNEe=Mu4%bH!~nyzz)14Ay^J^p*DF(PIe-rUk;DB1X1k@VlTMURD{cyWn?vN6WP|we+FxP7H1iRr5w5_AX*8%i$MhNzqkghP~j>8 zf5cbRX6P^2lPVR|;v9k?=x*hT(N}1G4pLz>aVu24B%`y7an0F*dc%ps3giGq8X*A) zH2_`_O~`s2hdg@5?2DWZgfWZHFi51wpd5;4v&5$mgIa|1sXm4h%V@yZse755{Lw;r zQ3^N?XaHPsmuekA7k5EV#}J-{by32X>F=-@HD+XaZjERzp>UTBBs3*L2Y|4)>Jx-h z1CnsJL0RCo?oAZUB7u9TDy&K@1GwV*Nwe^r)ygU$T7`W$s&oz-0lZx3V=tq7$SyG# z?1|VN^hwjO|YAnhkjvDYkxc>JJ@zm&A;;AA^aHFU!|OP&T0KjtXXU(8qXHR%iZa9>ypIGDiC?`v5Et@(x+q^_ z@eu$~V{UDG8;9bLRxkPd0Pm!a#XISfutDm(*eErB00L86t@Y|T6d%f~U*-WvWRq#u z@Z3v2ZO{=8PL(dvmfUMSWXwD$F(tJ^@yMfjP;MSP<}G-w^gWXt0~y65PmO_*w|sb0 zjL~v0Uq`2v;HXpaR{OEM(oPk33SULLeN}`LWqO&b771)^fK_UKph(C=|(7YYI ze};d0_-7CPT+0_cCSH!*^PXi|2mUnfM_TxD+%fO9n_1rF+45M3AcV@x!JH~?Poa(> zse)P3weSM4+GsQNV*_B9FSQsCmW| z@WzEl#++n3j+pJaAB7-5B*~6k#zp!h05k=JFluvq_!t-T%-BiFXhMq=O4G>=*YCdp z0!~zWK-3AwKEgF7p7e_vlA+@LNRc2CVI(Gvs*FB3gFaaJok66k?Ka3Qi;J?J2n$L$ z0|TfUqM{;P!Ql>n6>-4qS9ULpLyv<*Ea1K+g&&A18o&!XvK~9!5!05=Wv6D* z8he(zl_ciKH=yf)h#G(i@a8mbfOy|WTumY*bDtkTNvqzfBLk=tz+^2-rAOs2^6f=F zbm{|g$Cy#Wo5Z79u@LPb@~GTI@O=WD!?#arlnRA3~2dY}c)g++P=Ck@{P?pYt0)82=! z1q5tM-m{Jhr-6vvNSLHjJ!g~io<*bS2H>>lpOB3$L?&@)crzG@@N&d7hGMtq;*MI5t7ezW^&Dqg2Q?Y=bYPqiae8PEpJ94kbd3p^PQx?K9o zxLoaB)dnh%h$B_~bBI4(E)whKPqXm}ipokXMSQ{=anYfhj=ABO=e%5YxJ}2#Rl=*O zqh26E$^(_}LZL7n@UEDh(GMyLt_tNGuRvAxpbZUuSv6GoNoFjl`|2?~varyIUbuY&-E4SOq;Tg4)wm0Dh0oVsn9#TKgRr56j zpQnBeWnJ8=o%GZmJfq82Ws0Nj0>K4cND{YCKRtt9;xm4_1ZnjB;+u6$w;q;=F2O8v|#SXbT#l)vdIMw zMx1vA8ZsT8hVEFs`*avju8h7I`V`pXlny4Au0iiiEr!!U%1*reiE?428CDS|4F}02 zveBXr*9w-HZfq89_Rw+OJCcLuDt1!EY;VHbFnzceQ zvb7e%fFrL%G4L@B^4jAZl!r1K5ZE`qYG)VHo&YJ1iICEFLhRXn#teXn8>a(@{KeD4 zyH4Muw}(?mdi4iFy@dUIQx9lS>f8??-RZdC@}YQj^}-Y1cHw($;>`h_WF`r3CBkDr z3rgIN6ds#`JG5@6EYAX$MHD~cvoQme7WdJG(XA^F&gnjPJ##AxU`jde;8r-tSK$DL zo;oo}7BTXDPI*-ia+i&~5+3N>iaY2-J-F|r%fg0iQCNA+?{y@oNi+)CiPp#~KlNRt zsUtD|fh8`*$*Y82|@_dphsPx~wCzzx||}gC}o+Ms_qc#wne85U9#ThVuFnTczKULk^qH1errURCm=LASk{_D!efKC{LsuK7nd? zVxyd3A9=5wRV!}U#>sg3|S~AjB~&QQYbH$w@&;6o^@f===2YxUG zWObjE_QiOLg%MBDN9mtK@YLBiN{9ennV1V-JU+fn7Xvf`|(D^!@TSnP3|gl~b(f zx5*YQ_$#Q2XPjvNtba7VN`18hyOrC$N`9OX=jpM+`=Z16vra;9h)|GYxbr9zmn)Qq z=$><*^be><;DLjaR!F9?nSwHSCZJ3S0oaTU0Z^pukzK^ApaHTIz(~wu)<6@p=t2_S z?PJVh*ze^OKP#fP3q_mhA&zPkl?k#WASI=Sg?bI{&yDPrgCgC z{!SZ<+y))t>hloMM4n&fgG6bTS%D-XAr-u+$d)9Sh%W+FR-l0ZMGUJfk`_rg`Y zZ~>3b(6!(zdX_%SVtEJ%9?wzo5T6J0%r-wDtnKW{t@S9m?Zm8^zHB=F@in4Zd%2{u zNKuO?ZhQ=~8h1XU8#B&F2TM2}xEq%Oin!C0-KnBSxKW`FnsEx2uL(<2;2(Jk8%f{a z4&GnGwLqZ#NZF4&70i&Jkl{cg8WfyJg;+IC@`hRTaa*hynH(9!kIg3u(+1*?JgYY=dk zeGKT(hL^Bw;Q^F@4v{4efFK^hM!+U;lj-1LIuu~mF6?q>#eG8LjV%xe7BF%@p$l6f zddhmOC8Y;po^f6jx&yOaPS_9vpmWPpV?J+d-e&l@E~Hq=j}SLNoB$??6mTbEyd-Ks z8$~b25|o#t#ewUgK~+%$T2Z*QF8t8T(fQ~f@pAMmDr#_Ylk#%fHtQFFj>U0XAW=~R zJ)gt*Uns>ZI(B%6wv%vJ;;C@R7oOz3h))j zXp&@S{P?mxO-FX0jkt8#EAc4eLRXAQb~f!n-IMy)jY=W?%`;ovNn@PYnC?HjW5+m4 z$!qrx(>U4Z!uUu{>hv89j{IrN(E;+Q; zf%uV95B-;G*CD}OF#~^{0s1! z;9zQsX5fxRXS)3Sq^7l_d)uBKjRsUk!)%1zn;#F`y_xtiX8-jCb#`^(02CZz!R`fh zF3SvN?qZpyk@EwSQzx*n_9ZB6lC!lYxg%Z(7M*7&WbW8Dl~okXKLLzLw&lnMda#Eq-A}mq zvo*E#sDXN2M90%oX9!1YzAYRL%dDr=GpkDQ*Ih-Kvw1t3j%BI(*$9>Dt{R66@8|sM z4laAiN<0FFAlEQ{0`BidVMJu5+&mI@-Nn@R_9n~yVGw#1cI4v5pj+lVUiMEG1ar!gEhT~?-qd5wFt^zXQ65%x(}Mn{6VdG3#~?lKv9@CBt*v#>0Z=ik6 zG`*IF9nGYEdn6P?sj6Bxo9whta-OeAJ@*tx_`*>~oAorBs1+lOPBwiBM^nrW%+8yf zS#gg^yzwRQ3#xG{fulj`e@!YW#hroTkk3U}(;ZvqLc`);$Fd`PW>#w|KM?rozFUHM zt+CYBi-UnFAjyZ(^M05a8*-;5yQJ8-c``NW@S%AAB z2PQcj9Sg??X*-+#7vCHc49nReOP`=Jo%JpDepp#}$cVNxmRV6L!hmsKhzsvw{&h>r zdgI4Rd^mLp%5!?$Z67SrDm?yG*F%A~zYxs3)gR#uSp<$yN zPKvto{Xkhy(~HWXu&u7$f|}ZGih%#M+q7H|R;Jyi)#4SHq+JD*?6G#qL0Xn)FGEs} zpj-%;mL(X|k6@G#FfB_!o0}_Pq!2Jo6WCkA{ftl6--}Goew;Gx97&lL!St257pf6O zEt{akiX^fc3u2(@!ugOzw0tN2MkvOFFfh77M){ztJ7;eUm~@z861bW{dL< zs&l^|nvj`zN><{iH2GfB8_pYveSlNUKrs;+K-6lK`wfvB`hPT3dbG`Ksde6*OdOJ`*v1xhe}gR=;nY5-K}6LX zrLCD2#jugiYj*2N&Zg4>J(LKa%2x8)vbL_ld+6Q?%^st1cEiChjULB zGF#Ql5co`IY}m6;`KUKjx)&q!9%dm2@w1WBtLln@?gJ_Mp2XwQxYrVbUH8 zo?;)>r0&|v9=fQMJ+#1W3T1o99a}j&(q6R|RR-Ft)~KJ={Bf#QW>#=8DH$ea;A>&Xi$53kT>n+A@!pGSJld7t2=gvb^9hxY;KkYPKbF`Yh#%gbk7hL zxV3B1D^BFUs4MY-A`nrNw|ktMm#cE1GJbuToM~E{SrN$f+9Ti?G_&(FP0QukL0A;c z)dW1_o}-lWhdmjmeJ0ueIa=n~+uq%mahjI7P0O9C7BdnSXNnhDiKCfm>0~r$=Hg5w zVkNfV(rP|aC4?4P$)j+YJ)U=F3pt!5RrhAAcJ2g?YmYb&yz~x^k8oEE`o1(iSgxf%VXs^JgYAR`Q2X0G1c>>~LydCg#~opo6j0*U}#nZgn?_zk-5# zb`2g_>%TkLscnfZyA-mblDf4ms^!TmpjFoTs^w#juo6j1s5j`j70Bb+wb$&=Se0$* zQB*wY7s`W@Urre2OJ*FvLXsfSWhB?;VGD6q^4tYjKxL5cg>Ly8GfIR?yc;DAhb zv*h`KnRX`B^bG-w>0L}(cRIDI1@y%&@#*u=;>C}xK--c24_sm1XlEi;@=>Ou zwm^Cf^MVhOFK!yL;TR?^WuhvO^|x5b+n50WFOa^L&*ld<9L1Zfcq4vo12jL7{%-c( zZCd87DD3?p0|7vBXF9ipoLE>o@*{L4Ui^?Te|poiciww|2QRHt6)EreG<9Syv-Hv!aXa{k^u>jITAV;2t@Lq||Lsm{G12pirAjx+N@DE_Dkpr#v|GIciQD`>%!;IyWet$J5SKtzI^EaQfF|8RO)T^2!7IQT5wz zDE`jsU!FY;HeoWV4`SpPt!^5E;o!Nw2R_I+)#3EXC|7J!<6&s6mJS z@a!VV_YOApuv5R$FQ3$$5`yiTU>6A07w>)cZ?d2T-#B>O)kQDM_91 zgZ&vyPDXH44*-nL24z${@H6ypfB$poYn`2wou_&J;Uo0!*AAz5ABJd60q}6)Y(T`U zMq7!WLZh6mMz7&C5>JVa!DakwGekgO1?_O!!5H1$a`klfU_7{+*J9K1w~AiYrea`= zO?V6~y9`X1Zg&pE(9*)xs(TT=!2Dii;6w@~Xd8$0kaH$16D~?HvmML1T8UGVMap7t zW$v~k-ajkK!Svk^XHh}_e9rsni_rzfx(oi9JSp|cgPc@fIt-I)e%0M=<`m77Ku!0N z)ceslh2j;?W=v0?#XPQgAs?^jU$+qRvg5i>)g`*eIlIdC#0#8fM=uC9eUKUlG^^5@ z-i2e^%xSurt4q`d)7O*0cg<%e+uc7E|5y=r4y2kN*pumgk@phs?D-@5a?_pvz;G~x z6XBHmo=DTh_ng;smbaw$J9{z+sT86^7^Ew3mrTJd0Nov7knRe1NgZylLI@JYwK$ud zt@i7d{Yjp+a=rS_!U7d&yg&vOcDVdC5Cb9%x2*$$N2y zXHlpEe5&(r1S?SjB*7Uh3ZSJ6lspfp*e+UNzpP0FgX@D%nhMQiBfbhnpA+)l~AA-s7-O%#AwtTc{}?U(~hrB zgmsBWgUb-7w32Tjr|$Fdy3aSW>9BU~EEKXv3%{(owKzt-P#wx{T&*&D$p@*ppq&V= zBAJmPUD8%v(%aI%AuqXsbdxf-Q*EYR?zFQjz2qd^01PN2 z{rb8Rlv^nXXdxHBs8%3sK9FxE{l1<97sqyQhH3Fe#tJoqHLzAaSHp9zveP zZ}l}ZvQTFZt#PGuA%7z1hstE@20pMVQ6!iefklN=#a~1D-T9%K%sHxg(vWxyM@4ck zg5n^xd-96W8eEQn6+CLuLf9-Tc`S;<<>-KwsD_`!Q>CgvWG}hl5KKf2mLhd39X+f& zO{Y=obd)H?_ydH;&SLf z3Z;^IG!ca$?7%6A5eVoh4N3w^L;-VkFp&NjG%OfhGMZfyk<^QsD*O@iBsp7(Db=P1 zh=@>Nl)@|o7t!>ufEf&bpA~~hK6N6#frPAS>Sqg?AWx`LIxIaNsZ2;uLJLwie;B0I z8rh#OEBOKhm;NzG>0c&6yieUnhdAadvLp~p?JN!k+~y6i1CVAlNtBw>d~`N8?24a7=J0%$L&w%_F)9IOIzt`*2(0J4Q2f` zsJ~!6;mXEh!j({J5~}B10F&z}yFP@>9;8dlteA+ur~rZd0OsgAF@{7Z7*%n6LEjHn z3UxL95`Y(CDM8h!@K;UhU;mS}eOK2u1x%KEIyS+TDiNb5cQ8~lL`76n+y^CbZ@da3#hhe*5J3=>>Nc-b z^??3!f|Q5DRqav-xpE(*gYeFfsOsK$8T(NNzdI=B4Nmq)SD_x0GZXtI!6-b@ZnGdM z(tbcSK*z6@Oqj<1AQPZs@e`u2HK{irWb3_CC~z#!j#2{szG|rM{*jdRgM5ViFjN0s zVql5<&$X#$?h2}AD!vn=dWA_hhy( z3|n688WCOR+4sB(d^T2D=p%6Zrw=m#(4HMa0Kyp?!Nn)MD8yXxSUxJiOt767QO|DZ z;>AehI*u1bNZHJbVo@C)mVs&TSku6XB+;R!|q8D#3(3$XPt zyDT<2^`Aq_A z7^>?u6#}1%vCzl48c#MCwlq}pMqe&M5f?_@2BgSy814ArAPs&+%gm?g_1&XpR+a3-yL`z}MpAQq|W4AnFr z)lG(qaS2j=+fXg^QPmnMhPg;pV5rvksLnD}4EvMnFT`$?#1p>RLN zM|Fvz;u->L9Bil#_-Z`OP;rTZRBvD;OIcwIThl|ClXM$j)-^t2s22Kae9=%bM8~pL z8>-WNWj$!9IyBWhLp91ro)%h=m9d{iHQSxbU5QBtilR5$vlo;FmRE0XFqL-i9M)vpZ|Cs^$)AlV4^6|co*cCx<^ll?^WZX^Mz7NKKEHO6Uot2nQgh{8SPd@yi0=M-mR6s{RKO7sNI`qCGI~Fg?IJY zo6%blG_GuuwdDHap+e)L#o!h^AIdPQWbnwxw54!(mT&v!NM8Ju&*y$R7LlAMH0#N# zjOG(F)sxP1UbT|n>&s;JRz(I_$zOh1nl%NTG%jzGy(u)hHh6=TUloWC-ecW@fX7Vh zd4{j1p>0M~5W_?xE2lQ%O&VnH?sd?iFAU#jB~Qj0xbvz}{p3JYW$>7HbjO7lD^`m1|H&r7pTRyZRN3rK>LTnlX4;YW`r9n0hZ=D7{#8-i%4bqE4&|~OD##usW?Q{!<*wqn%QDE zA9pkKT?3kj+w0hF=@(x+9u6}H`ekgGW9*F~(vGHpH!0{G;Z_bkXzxb9oN{pZ^B9H0 z_vwB)iG8x&9ceiu2itAIvbK49a{U2j&>ycTOEtKq-}r+a{shd61t}MP#DYkd41a}& zJ$Q;3vi0Cg8M0!f;U^xd;VVf|70&B1R?12&M%lUkPtU_G>~FqT6IA*s+DgHox2Uy{ zR6|?uQ2bm65s7FXp+!8b%BHb!{5N!Q@fWD9%;)>*tChHtT1Y>X>)(r+^tbdcd?9=L zGyVH}^rCLWA^p1%HV%#WAM9VofBuI4Jp!xiU);ZMVBPeP{=Exj`{eW!g?HG$=+tcI za^0Rn#$HS#9k`9_paRmvYjVOl#3*Hs7UBFgqjbs_^e{T|kp8`y`rf~Px&D~zU(ruL z|6DKr0{*9QyVPMdbRT8<*Ny7m$NwKSO!Ue9H%#*BXXwxQ+R>RN@ zFHX~T^hIdl;q`MQ2lfA`eqM>~aesq;J`Y#+#rnC96#eZ_9?JH~>BGHZe@4SXW0V#X zcwNTMLud@H7FbIbeQJrdoXuW!o`Hq~sE2@tjcifCED<}!1;|zZ@f7XNbmme%;4%bZXC2|b{a_g9E_l)R6p$2k`_Z#wO@lu%~2*~2Ktcj?K)wUlZ0=;-Wf9jWTs$D0b$I) z!SX0G@?8UC2rmI+{)Aa+0fEf!gYL*d&d5BwHCWaGNZAjy^qcPxKw62@*oeQ5TmHoP zsZ78=54SL$c8J~B{$W-?Gkx~sKadRh9H$T-U4*f(rLD;w)J{xNQCrZuz10Xti%mS; zjw5sO5y@s@-qNgmz7XaWd=}<`pMH}148H68;BS%>cXEBPoT8-YZ(r|1**^LF1h*Wo zA@?}<<}l{gw6X{lc$ehKnEW=xrR*rD*k>q1cRDnRv6SpIdlc-bnQDh5N584|(f#My zW6mCZGYsB2x@a|fzfcujj$*N8t>5e&^KICqwdiw>&(-+V<8y+4zJ0UIw_l|}xS6Kb z^3S)?Ht%X>XCDyVq1pb5s*>|QWn;D3zD;SD_y1sDM`J^a*w=YPU~0Ud!U3(u`*FBD zbi7v!Rx|eX!24NsW;@J$EWI1)K65gbZcY_HotLWkNx0-JKU)R5hZB1m?gElgCDJ9h z(k9%k3gAVg^1NO4r|=2S!zLv6T8T}-(AN5i(eh=H^!k2yxRyDEe7+N^y!JC%LQjyQRwiHv#A{oLU$Hj;K=VfFd9m|qdPS~>xGo;H*2nU^3;t!y zG1k(b(KKLZ8sk{OCD?co9)LchS)l>qbf1O?J{A+t?5t9zY%4e>#Poe$P-3ncUUn61t3@iD+BS-%JM=Z=ahI$%_W4KP!XFpYbL5GfJQI}Yr|?B1iT1oxfTy~iO=NRB55 zy{ox&f7{f*NFXE3(S8YrF&4I0h0_l1d%z1z;x~1Pj zaWXg4Bj8rdW%LM$<1(xLs$W&qj;q$RA~F1?PsSf9?-2>XP%ErN1sygu!%B?8B}`p* z96f_h)#FH&RsaH)7RGP-v7Ac!%d3Hf)#X*=@(at0f`H`};Wzy(Y=|Bbs=bp4yG5?* zettLF4|OmW;MZu5ZvW45dD!+Z!2{OtL;R-C#UE+Ezm$BoU)hmfwCJ#OM4pUAI`BLRnGsXRo@D%;>`xz4(q73uc^GFW zu!Jmqp|h|sm@Y_VO9ft$@rr}btRY2(X_=0T9v%)S%Umq)rF1B#7Kq==4C7bW&7np0 z&$#>?7sa6!521O<38WVjb1kkUP8Y(9DL%x(=)< z;DOLd-=|NF&Q2u^z@~iS+QTZ#fa++oGtLL{#{si`CJ;jxN zxF#GylfFtDg7&HiuumZUfxh=4jT^b9p}O$`09y&K771P!p;LsZ+xO}C}r#}&ufm4Qjv z1XskZ%-JO-3Ry`#`BNx%ddr(?ApZ^YzXmu;uhjHhL_lyK*(Sw4uYzUtN#A1zXntvD z*@xGk>hxeyLD0%Sh(5%#o^nUd=c=LnJlN|$>p9H)a3D%YCzL}PRE(8OrDHzjDle$a`y6Gx75CYBr= zzH4|}UJvvN>pd7P@1R6c_%TDAF~@0zPk%&X`d2gm3B7!n%nu>?uV*fWJ336}FC+P{ zXC6T({8_fYgyg@T`5c&)!(=W-G6VH6H<0np|Yq9BUFadm|^__5cu*m z^B&t&v+qM}xC_f`-EU{*qwas1y*K+YF^FK!ig;MY`B?RzdpuZzRY|lq9fR}|djY;3 zm$-!H7kff|3#jH{)7$PSJ2Pm07Z%J*Fxb3;QBE-GUCRZeVA(tK&U1EoS72&Xn3pQU zw&i(eL6d^O2a8ANW19;?o*bqXA-nYiyQ?>EGZ$7j%^RFw0k3mC&y^Qe?EEp&viGee z3(zLk!^+*7Ld?MO-YI**T2hx=N?bfDh;rk@+&Lj{(g|3c&g<}E5fY6CQGP5`_QLg@ z*|uQ+!GdtmN)E*{dqF7QYW@^N-IGDV%jv_&6*113s-0B=tR9vW;NAbcdaa z?8DZ4`zFNLk{7Wsyt9`q=fx*oR^l9Ht0;EPkEHLS6{f_j=HK9w<|!Cud%T9?G%MFV zRO>wEbl`=b_im*YP5Vf+sL1_!3;Nlu;T$p1M$t`>OR|W7{Os!Sv09!^1LI%JPy^rd z<=z>%=Az81<;d$T2s&-;NTwp%Zy#(g7aL#NI()y~R^65!u;*Uq+7LRa$i0o)is9+h z6u9S8V^31ingXu|@0rA-qb6kLLS@~W0ubRi9j1+pO~|ZDkjLgl`0HR*H^L&0a|+#j z2S#&Ckvc@tEW~G4G3E&^EbYvcc+Fe5FDiB3Z)N|EvkT;+bZY-|YORCavzsp46P8Uo zct0P4D~CcG3GC2pI%P~8}jaX58IHs zkJfSftsy-4HW;bRd<%~YGc7@exfrr(+Km@g(SF1!g0lx>gSC1t$2MYh12j+~sN|8@Zyi)ptk}-|tkS%dDcp}j z$_aXi^9WA|(U}3qWFK#{wGVs!`Vp>m9+4xDR%;0ff7pMV`r|?}ID!n?@A3_Uao}ho zc%248ai7){xETg$ioND2iyiN)-%4IX<;iz10ixwzpCB_?$@i%|2+-1Wjp=ZLQD-v_ znzK8Q?EP*GO6fiddwg(Mz5Pd}%(W1`uUWeh)un3Qsh)bx)w)3i1l%erC^i<``I>7E zeb#g>@Q}Qh0R=1K`rCQra#|E+;zg(CI%Ft)51fY3kE5@P2Cx4%+KFRYFasILjY~dl zz@a!M85KVQcqla@RbUO+}7Ee~#phG@E=}4Zj-mny=#z zdU2RorOIeD^(x%87F!t#H6vzOF5=1g4HhW@UbjJeAs6S9H0`oxALFx#Ru|p5x$IS| z`3OGx9R=AvMB4-OCmy^<8%>*V*#3N4J@uNGDNgSbPH8*IEjj(B;?&vXHGc%tMzigK zE2kg|vkZ;q+9_YC^2&$DaA3x&fQnn9Tlnup;F{?v(QI~0N375577xqr(F-JJSX%#obZLK_a81(`6dQAFp%B8tDU$!ik z8xcPCZ`h!Jfk@8jNS(8uG<*eaaoJ&*ERaMXvSFF)t25V^WNJo$Tr1l{C{pEEPBIy|$pey@%`q}HcLv@s ztk8=w$?Kt7sJ(PY*)umZyWk9#a6EKA5=&J#s575Vru`)f1OTfzD#ml6=3q!{W5IYU zi6^RIb7ztA+H89bBwFN7DB!FAyam4EF%@?5DSjy3l-bc0;x1t(NLKopA zuERDfeSWTVv|supKKYRTXu4J8GK^LC?~M3`hjv8bSrq7F=fK^nl^Z1)t!MYcoUoCx z)XVB=_nl&C`aNpX8EsP@^(&V8jZVgUzKEY_{G7UUKJ|U$JN@;&0kBY1{U)VjwOZB9 z3+XeE?BXn~uzN8#NJywV#rU92ChwjD0sA;bc&zT^vLd zZtON(2lHWI_4uG4ks%jOEtrbenw!Zzhl&yau7ZqnkmQnKGNZ5(w?flKS4XU+JYvwT zsZRa;dsJbJlK2gW^oW(*(O=*DkC5BtA;(m9gv3|+I^~*Qeu#ouH8qVOLS7W2rNc4>`JdAXD>6@4l z{st0HPsanz7xe}3CBM;ADLVwSxgr~mk@&|~4YB#O4b@&3$w%oZ=(1XTi6iD$PGI;3X) z3~zu{3IvBLT)${kApQetoBg&tzEC~p{DcO7H3|cXmG~!I2wAX~r4%bNzN(Ea-u#%*4L7*UF;T>}_!qyEc}?s#YI{j)dvT4QnIlu?>x`^Ixv zXC>?np6+~P(T0&{a=@5iDR>WFgI~e0L>QvQH_&9~f?iy;{zX@+8;yzr~ zd-E|fvCqMJsNK4MYym>$cwae`cVa6PE7LT??mF6Tt-vcOU!jUMEP?~JgTvsM2d;!7PCSJ??ur8Xd;x}q znQ!5!H{NbRP-$`u!o@2jIGse-@rcxc_i8cw%$6j><1u*>^z75rv0HOk8_qikqcDiD z&|C2kR20P~TRr=JT=JwL&%Vh==Gi~O9Y|nh3r$|nzCD{*luP{AY+@*vNC>X7XA^Nc z9=<+Mg%f-22UwM7ujdaK3xP4u-Yn%5g9?wf^?US{PxrAjr0>w_(iS(!j4QTv!9pSC z$g>5oi0|1Uz;~D=*rTivDLrRIbi!mbsECu0lFT!BV^zz39dw6^l!td|swb50m^~0= zV?b35FTQdUPgV*@Psm{SHPoHTf&Mv&_h`-OG|3Nh=_NuPv2Q8NZ#uF23}s)KVMOjh z{CHNWUW@KUIp|lrH`DaIE_xU!ubcuthRKW5ISMOrI@kqse5WP3oP&%wAR%V`8g+mz zpa*F1u?r50-b3PjhZ|3ck+4v(6y;FtK{k z`3N)tEJkrydIIDKB8`LGAZt<5rYO$4#0Uqf;jW2tV!(K`0HLK7@?H<@0q9UN&*NmE zrvYzCoA+eCgTox~j`ltjFoq314vRPGRj@b;2g@N_iC17NaD@}r-oOM++sT0-Np&!?gCGOw8J`IRiyYe43sT5{_d&WGto zSlPPM*%QzTF(liUBCyuL*yyBGU^}PJ#e4OqPpsq(pvRd735habw9K!^>f<`Oo1H&9 z7;6|P`L=D7eCcYC_b->RT-bm8{KV|@$qjk(IQcb#wDL5uOowMVKO(&6oTb;BuLdZW%j zKe!C(;>GyjmwW)+WEc6%DfX8W&6VTY!_-Zo)G$Kbh(1isMIWTRpn9hG3aJ~#S6JPU zFV~K!8&zI`x?y>)U8rt~$z>lmo~ZVwfIhPAeOKM6a(mQ`D)%FGqsr}7H>%u&>W1aI zc0g4UWhJXwiBcQLb(5D)Qa7rem(`7`r%Tbg zYtlW~(XOAL#QUz?{SmzHz`ZarN0|8cRfdVD`;99cQh>-vdsQ72G7wAsC`)z^$Z!@b zQfcN&JbR(&_pB_zQZ+z4d!r^&pvz#4^v(D1+zBaSp4*nC|4^F`^l^?rS{C> zY~o)!!w^Oh5Lt=)upBdziC5x~l*h8?K|Bh{0|~(k7h-b4Lm>)rnzfw#(2G+eaPmX@ z*iocGT*J5~)I&~J;ase73s4c9?PBe@E-h1*h(A)mnO|B`2=A6ULIu-bZzVp(0!%Rm@O5?xPxSsEC3{^)*BFs*mdHhKkUZR6#@a z7a!F?Lp4fMarceLKJP%T4`1!nl6XVcxWP~r_^5twsJMQ`8h>J_N_|u-4ApW?#gjOt z#%dqc_YKubO*Pg~UGAg0&`_0Ys$xTRosa4(hKjJ2d>xSeC>WuOeN>;kq}#}o$4T{^ zp<3ai+G(hWOG))RL-i{k)%}Kw=#f;*4At*_RF0vF>azaPQ0?$hea}!aB*U`C7^<|7 z>Rdy`xecj!(x^!F6Cc$HhKewrR6XJ@Ac>19u9O^WIRIL zU49*V5$=FO@Ym6QW0F#gQh}b-xkj`-IHX&MCgLy51`DrX>=-BA+)F(L;OCIUoP(9c zGCLi6OpcW2*#gU|M=Pj{j+}0 z2kwexxRdNwf}5-G0wQAQ!##VM6ajQd@)(PFCQGba@HFWe)WdnvwA8AtrZz|^^B^VX z$j58cEJ)|%b~kak&kdyC|IR;&y8UM#_tX}BXKg@M&`F?5ivjl_bgXhNxk4?HG3fVTP&{s zCv3p79CzB*6={1dbQ;8s6Qs8vxy@RS!#s}McCLju)COb=SeJIBPsr)PVHpS=0mu&q z{y{O&y@c^>w(k%|M{2r^D~zTm=gI{?A?N0RQ-VE8Kzs4KyU-qlhu_6dHfYRMECzWYkJ-`8DxSS2 z-DM?)V^ZgA&Mt6P)p=MZe6hX!AadaJ{UZLL&)>!?Z_$w2pc0i0Dh$V^9=-xg6svf) zy!!}Gk@vzs@s{5vN7^HFP`X{txo^f~QO(S!p|Tsk#<-}Jm?N|F;zdo@C%D)GnnyXQ z`~%`&f$lSPoIvLPGZp2Jo4!s;PCXSRu%wPBFj!$8axy4!dMUO zaN4Z<+Y$K)G8kEf(@vW%LT}0e;K^2}qCgG+_Y0b*&1A)lRRn}nny@BU%cH+#F~eGa z>0llmfS^ik5Yirr4`tzlN!-I#gxeCYAW4=)hbBgcsY5eHfH&?Hjq*3O5Iz>RWZ9D# zn+W$~&|%Pj2VtEcb`c;Bli*62ciXV%Kg`sOXT38x#x~(ZR?&v|kvQySVCt<^u=F^Z z75n|Qugqt|W7zOoIXSZ`&f(b1*gi+YtR&WwR?R`0Dng9X5neL`>62k%ipJvuUm?Uk zEA$TC1pC1~ilVdk=bgA?@$LXj=i*I)ufh&uTSX7rI02!&VH1#Z)pe%e8_!DroXo3z zU~ppmYS$)t8%vGF?5pGOj{C5UA0VE63ly7MrrD@ zrlb)pF5dDalKjy(_>-zSq%mBl$mM%e*kT59wL*`OKoeoF1`SS$i&7On?d z>#;);3>GiiUlPX|;+U`>cy(Wf(Q)p7!tO~y(zkEI+`k-i{}t0vA0q*y&eV~B)M#D+ zi;R+s2;%%(7!trak)xi}L4t!q9U!R)6okt5@pXowB7!AVk)c}cqZ(wWVw!3%#*>sa z#aH8N*y<&^I#E+~7^>g;%6iyPZP8S}F;tsmkXZ!gqTyJ3QbYNL@C2c@c?68<|K^eTNkWyjY zOA6$3Oy2o}0H`l&!;XZqj`>IM@am@32s!xyV+-z`6jRdks`u#qYN<7sf!Q`oF&n}T z;)q*O=hln?_Wp`uKxWmMIR)H+h-lM~sob*Iz2F#I4h2`UYv8RdA#CJNe+h+)+{}FN zTvoC5zRe20r3hya*hEwUYrKVK+Jj%&-UJ%8PYtcJ z5g-muEDt$?5&3vY=aRj$2dr#IJbjR?Vu#S=ePjp+@^+S zUvVn9cf7!1U~qu$ehBQhSI7)m)I-B3f^5xh2g{CyxXynIysR{icpSSHlS6VRMkmkAv8>Xduun$ys&lG>t zWfc6#FW#lL-3vZbAPQ%Np*tvkN z{{cQhiB~unzQXwu1~*ISyld()!BFp#jN;`caH1cz{ zvgt4COHFEQEv507M+N-zD+c^V4=nH$^cYsu@E22d!Tu-+m8)5M$x==Zv0}&1?=UE* z>BoEyeE{^HJs!q=cA$X^`UonI!Wv&JHK_oBE;$w7_I>>zr_ZU~7ek%fF9m~>@P0=z z))Pm<=8kfkqriY}p||uZDHSh^+)>EdD`Dc~8Td_A7X<|ya2|uN(l0Fl1>{4b+RPn{ zT;LLF6ZV!i99j%^oFF;gFBxTGeKb^y2{hk(LA=4W6DZpYE^6xv=G)70otYEj+eT4r zae;53DSc1g(X9oC5!R0{V{eTgGdnPeDPffY=QlgAAAtn|Niq~$U^o2+-&?v6kPrNq zV0~2V{(&2^)Bl{ms!4sXhFyHrBkW?@=7|U#W8}KOrUbJl0bxQHZ*AIIoCp2Qm(t6$x!MM#771T70NGN|pL-DIc z*G$pzbtk-Gf&yarQ_MfZ_@{(_M#T`uDVhugf)O5y?NC@*#=l{xC@7qkz)XG_dys}< z6;f~#_oN}D8!#fqNF5;`q#K{7KL529EgF&C2z5U*Z5gA#RNCT-0Lp^@A8~I3A60Sv z4`-7F7F@lnu6ET_7TvZ%)0+58Ya&qt#E@##g+K^Ok+z6P`Dt1K7&QUf zVx=v%v{I!NA}C4%k$^=D_{NI}BGr2dR#b!l>OSA^%-y@27YNVu|9?IYt=YNra^}pL zGiT16nK=_sB0m-2(9+*aZm58X33C0;F#-#meGUOJ;NcQA`Heqp%}8sFHi1wm2*Qc^ z5>JQp{o$8!BZ9<%?Kc=u?;kAJ8kh@5fj=;Np;^ob{=@^As3>R*oF=r94p{OIgKP&- z2m)Wx^|SGwn>DaS`4uQHF#rN-`tM}BcU6BLA2W`(_B_Uuw6zG4o}|FviS5`V)PYH; z!rmgE90bkqM0)bkLHjJ_uVH0KoTY?x5Y)$YG_3l?l!kuXLl<$<{QHjE&~Fq~?$+D&;@k$bG%m>ML%Uj{EV;lmuRnZ{?btq@=R zb9eBRZUc`M2i14bWiVtU9z+Jza0{NDfPv#p0R(TMU_M0r7Qry7@fNnEC(>W(A$``rC^EY(&-NPYFu%=d zz6SV-=k!`D%JturVzMCci?;(xP#=}y4HD0=y?HN4-B zd(RH-v_l+2GT&Qv+%`M3)edd8LoIfw$qucvLu>5NDm%2&4y~|5%k9uIJG8_O)!U&u zJ2c-8QNl=^Ywfs*9jdWIGwslHI~1}*Rd#5K9hzi^#@nH>c8CI2);rRU3)&${MVVS= z$CcWlVmnl1hYIabz8%W5LpgRR+YV*fA&v}LTfmO<+o4Q53_Ent4(+!?@7bZ9cIYiTw9O7}wL_cjP?H_vv@F}Z&W>AShgR94 zm3C-_9a?UOmf4}DcBtMC)!Cu>cBs}4MeI%2!9jdiM5j#|4 zhi2NL>2@e&hpOz*6gxD@4o$E_uld|A^rk#0iLKmvrXn7O z!-C`0`!P#z#B1T=J|Z+jS2#aCl#$!C5$h4RcD{B?UO{PI^{2QWdi4;zN8)(!ATqgI zi^Ku)ws$S{L&v*#HP|MZ)BMFhglnEu66s`7b)l{A;LRTkqBhedq^s@y1JkG>MRE9`^JLx#CMJ@qP~WQ)|ZJmjys9 zv|r@^W)AXyy3%$p0iBvJ9v5qimm#C10IhKJd?41AykKyMNq9m7>ygsjPjDV^@dRecu=$2UzYIi&JybE!R-y1zP>%QnG5A{|ztFJq@ zME5*&9#*$r^>g(L$1$ekt5}=nLojpTe+%TDsA8pTllIF@^|OJy1|f@5wjG+?h+z4s z@=?G$KVFp;ugZ>BQTZ-JL}9${C`4|!B?oTDT#j%nZ8)w1Ui^xdW5L07Cs$Imb!Eou zIQ38!6pIRru1G1v!-;R_e!}*ORyLwRDecs(c7{{i`A~;;{^I{eJ7G6EV@oMwyKO1Y zX_@D9ePx+I&`ovX?Yd#bRBk_gmTQIVd$jM<5{V{eipCa+4tVA*fW;dAChF8MevQH( z|ES?3Na`mzBPcI$5a0>-;=m6u3h0L{Y4f`|Y@HGk`o2}%MHn9b@d-fL@h3RdE9-F( zLs<{g4WJ?XBS3R(Q+u~PYur8CUgubCsDo~ zyJudg1)T*aXS*|k?t+t#h-ZK5!p)9wQ=s6D>UY+HBJsP_%``a4@lX!7_P`K8QF3X) z7d(`--hS@jsXY0g5VmUJzmP^s&<4Fj3sCMfW6*H zI2zIC=1mfI3zt5Z*L|7Iyy@Pg=|c7q`^WeoA0lc~5a40^;g!IAjK2lHMJHiP9QPP< z_nIfP%4s{8<%vBd1RqUjV0P zg~E8=Vh$S|1cAm0hb4FN4p^%HjLl$oT3~Jm8mlf%%!WaAqr=#8zcWq3s$PW-NSHyDsEa#(EmKk# zq;&)qZu^JLPdDI3ND=Oja9CU5m3epL%c?>cD~yS#Liho}__O>Wuv3G^>l1`+#r!@> zC@;jOkT@G^4(_XY!+#9pIbFG#HiC(&NC9$wZ87_bZb7&dL!bFI;ONn_i(ty~fe6C1 zg$bLtO*7S2IMn1_I1h%P?!3xzQg>g~){pdSauhU&zO6KR!t0)BLiY0N!#pGC7KC|o zKOp-ctlbV2c00Zfx4S?bKm<0x9IjTlc0^j%m0(#QfR2{vE76w#t>)mTNu<3fbVj_z z&I?U)7T&)97kCfrg15IDynUVV4%m2yE}l4N0STX0V~&C~r)H~1oK&1R=g*9d&o*zO zjpyeNL-tL>E!ubUAPriF{1v8P7<1Fh)i;gS>@VZ6s4s8ppHOu&YrxX6EFo4;e>}hdXer_F- zpkw5rSPq5>xvLQ2A{W9GH$1QfYw^NuVr|zGKCRF>)VrTKEFh zC;x}2x+SWaHmcYg#dcth79NiZwU>ldckR#8Ntj1uBqhi^;=F*mGLD4bLz5MFB^boh z*$b&Q3-$}$CgZV<%0#A7k(Oz^_lV1mvjz&Uo>V9?4&%?WQf8!{UCF?H(K5adhXU?I zlO{owN+E#wXY<&XpD58^V90`edhB1A0`!F+@b9yY_zNOIJQ^E*l8)NFdaPZfd;8fb z%SDRc90&-SHvr}AQOb`t&G_cQ&J!&A8{`{zEy?%#pV8C6%qtZ`xM3P(DH;7CU*_NXF~MyxzR92Hn;=G@A*?mcnAR2fE-=jhVP;~iROjwgO@jO zFcl0H&r}6nDvk{X-D){}n81G=q@I^v^sD85Er=WXHvHI6ufs0!B+UI0xUx(d(%T{b?C(v9GSB zBL}Exa}F0`5Nl6zeChuzy##s+Rwkf+w$)3KKsGX9FoyZSFS^0~#nZy2+_mT&>ht(c8iAVYpQO6Z-%E^YuvY{rRAVhYmI@JToF2q(6u6T z1fl;Cp`!@piBLO2KNO*_5c-h_r2)!yBIHCUUxZu;6(FQZ3MNFx&*rp{;(~)(fg+Dv znj_Is{NTouIn4S%t~B#{>*F$hP#0h}Hq+#pc+sza%KegO9;4?V!o-Q3xUqezC0|Js zxg%!&FX)<>Oa#3sKgx}duHyn@!5_K6ppxmaHqdTFcAQ|5vlC7$yY5QRnPKYVxZg3l zLVc&)_>%x}s{oPU8fuI~JbLgeY(Y%>N!Un-Le=h=b{T3&95+y+C(sNmKh$l47+MML zSvZx*R>Z!@=^mOz=-;AT_2%$Hh4OfG+7TX)cKFY4TV=II>#a?5Yt!A@B)FHMA3az2 z8-M7h7`xy2c(TO>ru4(9-V?O@B3a((4_%9Kjq6OaF3sK2b{^>{)*bGG*FvyZ_^LnC zs+<^PoZRdky4WR_{TG6oK_$ks#{rD-?N(1;Qg}I3`nKh_9cVf(d@`W#_n$Ah% ze^DL$xsCEQn=I^v?-Qp(Y1|z8?hRu`jk%VKEawfQ##D?^>YMu^{RRX_VYS$|S!vvY zzE_^xt~qg}!yVp`L2un2v}k@pfN3{phAz~+0Zm(mDD47TSyqsGP+wt}Ql3k;GI&?7Zt7(q{k5-sEW89i?XdnUUm}>bwmP7 z5U_WH2Sa|(X(1BU_yI0@c*;N?hJUP5tR2)1ZCer?HZ2WzGa#`iVO*!7RygoL0FTxS zJRcg-8ctZB&{mT-Cws z6lyIAuq;kLqh1^@!EHq}Qh?fdJ5EUpESLlNx02h!G>%o?2@;V$G+d9V6mDv$c~s(D z2a;u0?FqJk&B3kx3&;(E^~B}I_%vL@E@n+QAR!1(fbnU5LHvA4eA>OyMOkVIIso%> z=n;$fSlzg_5`Sw6{R^b2eatG1-#UmgULWHPE=--`=6%rk)@Y0JW|_Tj%mIrjjXDPLxFlS3RW;bia!xTws4D=L7vN?66M8~H8+4OjOV^beeiOC7Z#HdJ{8V} zX9jX;hx|3+{{+WK-~v~yL&F>M3$}%(6%4BW9LNl}yb02(&Tba(f8+YmBp=jA8rTsz z@%XF#(n2FOxJHFkQ3pG5RfHitFg+O8M&QK}FJ#}E1@~+>p>268{N2GZZ$8v`vARvw z>kyYX(9#IRpePGS0;a3&Z_0Dc6P5dMk>{{SJfP#-2WuH(nv!4dpV*rTO|nYR!-MeW zO13uuk8uK?Sg(yX{`g%Gr1jk2$@4>Hwr))8=y;sanV|ioSkB2>j&^eZtFC-v12LQh zXTq?(a)BM;MHM`FnR+r|YBs(3!4=&x-1A^^c@~Hq>4jlW*21gTSglt;O9SNqP5K&B z#8pNRJ3h52h(zvc*yktyhI%K4r~6=-c?vl5=T zOt@K-X)VZ%kIZ)_{D@W_3D1*$MA0H3q}@)NuwN_5gP9A%kj_y3Mk~2i^!53O^AU&< ze(G!JJJmc^OPeyGx{rjP6TpxchMR(M*|Terj0SKsh9^4w@kQLLL3-OyCH*mZWvNDj zp2qh9mFU)q^^y`LowTXhd^74&P!BD#&illt76V>pd=d9n1a3-nbCSL^QvoY18LSIY zhlQ=kS~8#lZE7C78epS* zZz-QKI)Wj2;=u^lY{1gH^ z{1m0MVWT8keZPK7A*?PBiOjQrM#0YyEe z$5sQ5v3$1#eMEqM)dFpe!>;fjIt%!RE%*vAl1P&Qy1{!u2e{`G?>AHN zCcf>2*S-t*9#Ui6iq&JTa}f0(D{8-J!o`f*VMVcctgRvw*ivz`O6P;O%PY8NaOp z-XmuPPdy8Gn+3c_&kA0_S-@)%@P2<*@XY$2+soA_HqXuq-fz0X>oR`0q{8SqD|kOX z3wUb;yp3lC@5B>b+S>)cRe;CwvKa#M6Rh^Hzocv zMO5UB_;0D}La#3Mad(j{(m>#g2^{na3E+QVRMd*95>fwP)UPZQriiFlEEKvKPd`43 z`X>n>uM5d=Qb|~LHKaK}Jq{nf#w04K2$5?^nIp-p(T14rw z%lR?MO6S2`?7T2)6r;djBSn!SM2S(>Eq@I>3w(kC&M3m^kv_W?q|&GR_VJXk9-DMl z@YJ(_S0?ZaofW)-uJF3>W2t}_J1cnf%MKm(jQU=bHrby=qLL>W^|TdL zD5CzxsK*(FF3cBEjYI{4vK#)s?=0%iv+949kn=6bIRf%K7Ua{;M}5x%ezpMh5kd9H zA8Y6LOs^~f@Az54yYDRE@tn9G%Q)|B@Vn$J-~}vtUJQta0e|G|DZfDaJFMhP^ZQz@ z=k{k>@c)PKYc2Rb0e^5$@W=EFA69gz?*d#I!Ql|0x>x1?5AQdMedF?=;gNu7J*b9p znD147TK#@;a@lfc!}c$W(YuSc^+5LG*{Ghev37>;b|cOv3&e zmzku3!1rk_1aYzCfh54A-vNTJx(fDI?@c1u89kRkZ$=7wb*cFIli*ep+!@;&a{?HL zbS=Oc|Je!_5F|(wbu^^ZA=ld}bX}v`boj~X>k(81{H25+C45YY?O6EgvA;6vS9X<0 zMdb6TRVLR@DfJd5>-`c2`!lysG=?X^^jK30%*|41=Y5=3QSW$0@s2?z@ zkx_PAdA>%E6(B*N!?q^-FBPxZ^K62L&IT{;wdk>1SYxq;#AXpShEcf!3A}s7ib)R+ zwSDT_QVyin+b3DCyT^J#=O$6fj0D`%()qcV-JX^!&VtUo{i4Sf5cv>%i*rD%6IK0* zQ9osrP1H3aVHI&;yGYa!?ZBz+x+Yow$g`<`m4La0l^unr@nmHyMZ(*um35I<;Met0 zyS+yToJD(A2(TZszDS4qmWzb;p6a_JSzmpR^`YOE39v3tPvhfw#BN7fk8sgRO9kAE z0M}U8%6`LxVElN_`naASe-s~TtX^a;V$`FIvU{{nB;1AsyGJ{X+q;u^wfK9YFWNg_ zK>Rr&o>3n3Ny44kBV4q%R=}OgCT!ir_NuXnhzc`mEu-vK)rf@0Q(M)APv^m@mNjv@ zd#oSrnkir|?Xg|gB;mH;R&~RcAn80a75wSP&%Rl9`|~XL-RNUN8$%5$Ygo}N z>HS-NJjD+T*Jn;wU21!%|0U~t>$21GV^aSM2oBnqfPPxN?VEjX6b* zI~nyiMzLM7G!Z$8#V9neAVq(ttY2zo+T{Bo(MYV%Y&25Wqp`2BuSfDd$VzUuD``hG zcrT@rF6%R2vYx${^i+?){HOrBBo$~v-lyQ-G{eTf;q2h@tSz=pQsAc2qbdn+)Y-v1 zEa0s@4LpAm-bFpaiy44L`fda?<3BIUPSj&>r2y|_PiVsay)}Kj>g$QFvHceOg9P}s z5w>c;3MKZQXhxg~iK`SzIY<6aRy2hbL2h=-uWD?kfW+-%@ITHH@&R4Xg=mmhR>uWV zY@5iGjc9dahk8DR8xgBP-qd;s&mL!7fATzIY^wlsBf)%atXd}sCg5)t2|w-%|IsA; zmT$>+2zlBWz8d4r6FoLcz{X%ASmDkoMgD^>Hznak&J3?f!25X*@IIYxx4-yI@GwWA z{p$qGUl8UYW7SKP3LtuHjff5*+IWhQmWW#=q9e>L>{6-n?ZITd?_GR4x(NBUQb1`) zv_q`UB;dn-f{u2u?KkblJGK9;qkD8&1a&$JW8p@ zntOnET@v1V7p2gzE4(EF-qs%AeT-LHtZ}g9%yq%@XNEstKt7l5!p<;1eq3$0f9rWE^yCqgj{Or6@ccc% zTa<)1|IF}e1iZW+;0;T{D?2m1nF8LeJ-|C2vfJxUg*UxRdqV==xE|pBB?)iqxsrZD zUU!98MR*Gtug4w|P>sniB!$Klk+6^n-RVU)CF==U^$2;|wVp`=(4Tw2`_rj59rDf$ zZ-Rigx(9eqCE*=)r|?l%{KgA-8+w3uM-twu)5GI1!MsgauO{^^xFz)@i$_@;`qnAh z{}bp4MP3yCSQMsUwe=H}-}Wn;JfqHBKI0-*-no2Tvix^a%LmbT{!1vaWr7%9!blF% zg#MK}Z`_mwc<`JQ`X&G-_2N8EhzZppo6XNFfS;1%@%@2Mob2^Kst z4!Yu3B;bwe0p1-+c!5;>3Q?N>lI_hG@P6I{yf}`?TkSpAFNJ=c;pxvZMvdhOs3Af< z1eM-tyz+cv*3S`1VI&!UWu(+uV%Z|Po+Y}`UuGxk51qDt>RUqJ$P%#rB5F5^?V1B3 zx{)&pa)j`Z^hpt}hv$%0+@W&Hy-{ocZ*Fx%eN5uO~6 zZG_cvJk}(OKh5Ha@t7!{9FKi3X5r4`sVG^#`po4o@3wqevi!}bE3ZFGZ1mXo3E`0O z`ajUOSkV{qlQibSF4ch0VP1afew#i=aZj#0`k*|UsmCf(A)dy5az_&0Dhr;lpQI8@ z+E4E99$Kos0rrzPj(1!9A37a8!F?{+cVq3NNQl`9$k50|>$};9_)8KluVtRG-3&RVa4QC0oYss*SLHoyUQ93F*-!jW1CqaE5jB_Dm}2C_;iX* zk9w;fF`p*r+hP9=HSw%IJVUUiRnMi?#0v>}>_|#YUH5xY-|S?4c|F!gZj14vfF4W# zmemCAam$Ipo~HmdD+%_K-f~=h&3VplMyg#wfaPTsJ$8Oqu*vxoaJT)!CePCrT(N)N zE!-IIx^O)`08ovFXN62e3+P!&k6oKum5?hbc7;jFdTu*A{I?09x1<7EX%&^i#r04DjS|Op&J;KkFyk1ZnBjBVTS7NKPZ*uZ_sxL6BIBh~hcz#A5x|NH*?e zqBVoiL4Y26nx(p|8*fV1KhmmS@GAk@^4wmp)13gEyvX{Us6t=JbKz=??gRAL4%Yn1 z3ag)BCZMM-J$6vmEXmnvysW>^ZvR1N$~fmCbGv@Aj^iy9Jr);rTf?!N`S5`xyk%#G zw^YEp*hgBP9$x<>ya}g=2ZI!#0gh!a`97c;2cJoH!D3O_Fjm&lUb23Y-G1+B;oJ15 zA2U66x4_wmNcdd9$Ld7FgI(d@orF&(G`1Y=N?-az(_@bb*r%t5l7x2<{bR#>tIPaf zOL))z4)9Xt%lWty06lo~y;iev89>b02jqTh7hLq?z}qf5SB& z1UkZ#Dxi5Naev18zA6r&lrz@%kk2}P&+YWRq0@Kz=NGb{EPT#vbeP8-T$MThl zZ%+Q^JbuX$Cca3{4ZcTmzUrWUi&rH{`JY&pCyn)32O?>}Wey8MzlWE*vO{8BT-y2U!e;6_B z&jkG4;#calD@b^5;GJ?2lQ z|F+Y2`reM|w{-e`vD5dZ?|01qaHsDLoxX3`*D?R&oxaoecTB&f({~-eZF=p%m+Y?u zKV0=e$MV1K^u43gx9>nIygTvL5#Dm9r_jswVQT(Td?CM$Pp$k;$-k5NQ@*c1*ztRA zr|;LSZ%T+O{sZVK^6O{zcalGLAug3aazE<${ZOaxwVl3Cbo&1B#}Yr*|3`$A^@E=~ zecxhqO#gMK@7FqfJI!m&)cj8KSDn89+3EZ9PT$ua>Quhd_dh#*r?*-8<$dM~<8>1k z$Tt;^!+pQpJ>kP;m{Ky~NiYXKW%76>AD3H`Z>l?8R?3etniW ztmBnAPG|VfKMHR4C#RL;miwwe1alqY^2C1&d0ZTGS0!91I5tL`5X=ueO2AbmE;`aAC3>D(cP!! z#CMd)K4is(M^|`*!|`tIIaGP!*G=7CuuZvbbHVG%f?3D_*E_H2x5x4F^;PDrMWOXL5*`;{8orcQ$^wex-)nKl zIc?x)%^#${`LTM+H8yZw_!~SuDc&VuwXZPUs(W^=bv_d{g3zu_X!Z=pHTn$P>|Bm) zS|mWS+4rX(z{i{xk~Q%*jhr6^CHO3LnmGU{)hUfce8yAishU&0FNudg-XH$-I`b|h z$@{*ZaCbT(3nT#1<6c+HG- zgfBp8@B=QaPre4dy$nsUUlcw@D2H8>;)ulP`5qibO#l&vO(Ar3ZrpsEpuvW9Xp4(& zKM#Ffd$~l|LbWgQsO_5~fy+oHD1-xd21k|acRS(>gNzW27peQ2D49697SBB87hF_02hl$C7y0f^>ep;v1XIg)fRZ^x=dQIJ>}KpBAmd`DVEP zQDQ@gIIi=il?w-V!qeJ$h|@BV5ne#9R3g{l%CpuGETTfHME-!pW9jMD1%j{ibpZp| zs_&yA2N1Y;qB=jYAAz;lNlk+3|c@J6$N)~LW{s=B)Jm)BpFFc4r@CqgJS1XvQ zL~lbrUPiu|`479|Q@s#Cfp`Ni8DTvceF0-Uj91s`MK2FSyH9~HP8v@H2$D^ zUcVUwskjpKh&S+TF#zX?p00*J7G6B2r1ZrboFKV~55fPKbMm=}&5wQ%I7 zC_-Gg{ahvXE5WzU$^9miroM2~xxsitmdsE9)=;7x7bu#$xk2EoR>jP-1^V7WP9VKt8g^eG?8A%xNLR39lUVKc~&eOJ$%GVxoeA^1w#yss15T^!i;d!Z_qv@Id^3SCZ`S89t^0*o8$fALB{FA(>^W! zwmy4z?%hegi3+iSrvDUlJC>GSJyksEo9G0)Z`KK+Vf9#tu3@1Y|3CK6s~eBf(wo{F zUt!UYDDx_G7O3U7oosrvYs2lAE0MRk1=!wSiM%WV-&Ue=I0!}K^{D;4Q3Ed`Y320R z$Y)$c-|j*#%%ailBDZUDd{P>$>&72r0);|{5`6(FXxe^sGn2qmdPKZ_9>jS?k;|+{ z7Hue9c@{GlevA04G`8z^6hk$Cv03d3s(QG>Li1I>|ibp}DR9D+u> zHAg*(7UndY=K@dZrUve`jJoGCD0hlcKSTqsd_fcj)pisuyPDpC_2^r07&JPlMd?lm z?oGhNAykNt)#r zwL~YK0vO3+<>zXNZX%g6;o^Mo(F3?+6EV8FAT zavQvHK|tp2fY=H`K7QX#w)U7`Vm*xP;r8B2qy^$inYWx9O7x5uBUgq zFNcqjeLn?*m6V#TEEoOiW|Tq8@CX}(T~4B=zacR^BMDzf94? z44@C$ds>6Q5M1XVhV|A&C!Y3GqVHaiI?5^%hkfzZ~*--DGc}sw%68RbHMbw~qOU3tM^s)S=YM?}BK=g?3VR=flhOlS& zFmq2Mq@kIEhRswWZXhPJ#*ZF}XMD_rP)9aFC-I>Ke#_ zMJ-o~J75F^^~x|V_)zNQpkA@F`de@URgo{eKo!#8ZAB6N-BwsK*jo6S3sF|`dj@b2 zn%TzBWY5hYSgHzgoK6v+a-5E5DUQ?8jN~}272_0c5dVrsS>seak{F}@$tlv|N?FDq zez_R(H%+_TnkOO+9ErhfG@+NVU`a+74e%AFbL{VyC6d~pc{j3KdXOGn49|h(L0v8r z=o1&y(|$1#h*@(DHURbLB$26Osx823V3cJ|S_4r`V906WGY%VpqhcKT9dKkW@y4LK z+t`H&vzTRPxWES!Fg(R{gg>R6D}($~8N}K^y5Zz3#}nXMIXtTRWv-!_LAq6rPtA-^ z^=We>ppY)zxCviN@YBZOFe2W-D@Z7%-Rk4`ynRY_uY!`Q(2vlWFG6IdaSl20DG-cu z>cg1ARN3oTnycEYMa7E;mXq-`>16y?Kcv*4+e3shT|DRVVlNBI^MHc#P&!NCNYAO3 zRKlH}S~6A}>Q+m}YePM1$pr9;S~7`zUowR{WJwi-pjr~5=qs5H7iwzBOn3@YV>JK@ zk&LYi1WX@{#i!RoKkSsD zix%qYMhi{VL7SuwY6`yTPKCan(zk;OoyC~bAb&B_Ead&2aOS7|1@b=0&wP+Ov zBt95dP~xl3+#4N_n0<#HzM$H(H#&)7^I^=h|HV!Y#-G-(4HNHLvesTW3<(2tw%1VHYt%?WiF5Ao-^nnXSJz0sJr|S zvBQT0!CT7scSLdSmJzu-j6a{0!uet(OFMvAzbf-yKLW^|mdrZ%NI0T3^Ej{0@H!sk zdjrsmd7p)28q&-7;!h|kqy)9;V`*3=)&Q8*%QOp^EkyBUKFC26$IrT{>I$+fpry#< zmwv}dqK^{QL3}8u|24-^G(sblI3%W^3kfcR`d{=aRK^)nX`ILPdcn}VYDJr8h+w7? zxgH{k;zG>!?loA&Ta6!p1kq5jQa1*i<4mhrCzcK9g&~sBJ;ou7QZo-<(7lyAHsFES z+e@QcXnzj%H=Y~~S&1Od@el4da2vYd(QH6%Ehz=|upj_u!9})$K0i(BTJHiNm2a~K zf!4WAK$ic^!cWP7Si(IAYYyh^3amyjXRrMh5-kM=JdRbh&|il7a!GM2FSw^jeMRUc z5UZBv0zn!P8j9>T_n@I5$ZTMUsZ72m1H%zt9i^DVNt`1_n--6YT*mS+h}s!7wM?EpI_$>monZb6$k9QIH(HJ*2>KyLU57MG>3>El8}}Wg z!5&CzV#Pid?It|~P)Xb6(8gH4oaDyRdNW>F59(58;=P81E(C55(sA_@hXs;dM^#@4 zjock_NWIYqW2YS>l{yVxfTvO#93j@(fpVdg7L1|^lqTI@y5`H*3*y!zQ7T!_KaZudtLrN@ztco^pIMf+e! zq0}?(thVha4&xYFHIe@fR#0sgABM&=23o0RGBxejC z4Z%ViE^HNkb2B#MT1#j)O*6KR$Vlt886mYKXzoF`Bqd@2M3ZTvHOR}cWGqe1TTXdd z!;w#PKA?22sl^v6)UfKo>=6Nrjk{X}6XN1U!5VHo`X5L;+^=l^j12@6eh&`^MRtVz zH79dImyH;qH=NveJdOu~8@#AlWKp7v1S+MdBh9P@Zs67Z2t!I9#E)3=ar~<9iq~i0 z@f1^pH9ZYL1_(y#8Pq$a1l1N1d*o=xk01YG1;+&=mU#$?RpA1Pm)srTfAO|*V#&8? zh0N^(2|?COvF1Z{dG@-`i_rW^fx0;cd!=9;cWxXNFGoor&L4p+Mew8;GSFyMyw+(+ z;EyNw8V;!b$#ALc$4UUAM?6djsVO(Q05BUtV!$rFl}v}mO9N}dIJ#>~u5BnaFM`Uv zch|0{dr*7ad=)IPcc=ByfR7#uGmE}1NoWv#KbnBChE=s7wGV_OeJxUxrjpcxkdIm` zYED;vBw;UxiafSY5aKeMPcg!MJ9*TaX#A!ho750nqQ}8jJeCAOFSkl0Pec|07MDxh z63K=TOTR?yiC|?UtO0f49{Bc&S}&>P=uy6}hO*3#EuGsfu-Pda8`V>^hT0yYM^J!Qmjo(6=nk&J7$g4+> zym=f0yF?Cba~yJFTwn{y{fl`K_EpBb`S{U_;F8!=J}E8D$8NWWjo-{h31gT-I0E$GV7vQFiL~|e(hp8 zL215l9I3COG!`#-SW3vi8i+%osZcIhO56Zs(Mp^c$Q%t&H1y~W>VXb!{RvY(j~iH8 z9wu-UOW33`hIo)5EKqRyo-xD=OBU@1kRytV1h@dC?fQ(gkF!mZm;| zDc^4#B{pyP%KMGmKf|*G9}VK8D1z@+1eT&C4wdkwGJ7Yw7ID_AL3lt)%i#o4frmWM zQF?eYOh90t$wFRJu6U3{Ly=Z5_T7+%aXJjjn+vYQzrwL6Elgtyr$wHZfHfub(0XaPAq<@OHj~@1kQYLu^`x{$Gy`W3kZj(L zKgI?uk1To`*KOjC{_n3BJNgzWBZ8Fb2BM(-HsG`mu%MMV{QvxB#L#6uS6pbhORE`= z5HN{O$FGiQQ*;wnHpj7>`7+7e=H~ktF7X6z3oS z1+-NneG?TdClc_8{!2KKN0&_2sc2BFah~wBOsFB0U*g+D&%=L-=T>w{2@kRt{ zdZSHA?6bm6`c&VnAnMVxSF@nzTnVH;*4D7+QSn|Qh#CjtMa9`W(Aj_sK?kgySuprv zbKdxD7)62yU}mqipyK>dDi0k1B*{ba2@32lYtcl1n^-e&)f(T%1*^FmpXhgEPbr$Y z36?nc4j+O+ASevcq`jQSH5iyV9=cVX>NW2~fr)j-Gsr)16FTzI>k!czX1DU6nI+PD zwK^1ybJZaY;p0s;eK4~|aPuhL@Uk7UR>QV8e zU4wkmPNcjoQvBvra$-IvON#*3dxh9lzy{_dHK=|WLlZJM=@&N~2hRzm`o#72M zBp675#{uMIRbt094^N_ijAD=eJtS+Zc_5r!gW)uTga5Fzd^G1(yfG-YRBc~@%1N{J~jK@?F@^NiEa2uwr zY|zlNrUswtCOG`}JaVbnpTV)C@F{0#y0&WXR_G{9nc1d$_aa{!-h<#-xXj!wD9_iW z{cZiiO>UfyDrgVkT@hDw$MjDJK~6qmVkr+ft1Y>DGlAqiLH)W32Av&_?FH@CZz0(~ zs4U=nqz+I5s1uCrL%r3tfX|m-vZGDYXQE?#>9ec348j{ukynWjDOmqX6R>ICpAHS- zbyk3tbQ3xYEl1ugXx!g@41*y$#|b+~bSz}2@#S=kiX+AkR7h`mhQb!qPlModT1ei+ z!!A6BBG`KARanKu8+fJz7?)xV4aOvWLAnAwd^wZHtg_m!#JCgrOQD@w`H_oHjv$jV z|6WjEX*{LH$hsijNh4Or=j=jzQ7Q;vI7ySuE(8%&XF%OK{A#&m&n7%YM5(D>_gX?|kd zF)^+xj0VKv8-fYzAf6B5Bo7|eqnEIa=>E*%@dloIymJg-X6n%^7!Ns_DWg&N931~t zB70D)9_>XWig`+k?E|1-0%tz!f-=Mwb>aC79M$wtaUqN0L|el;D@7gbxpNFB$V5ps z4~-J#>;}olnHuD4A%9Q2C4*ra86yr`;5n4eiRMj6NzxM|1&!om#zaz&^6luL(fbpz zFqYU;voL=OQOW@bV&-r*zl6Oa8pmdum*Ug#IGyr*>Dmb(f-(0M%185BPTF{JkH<{; zs*J7myoV1Qq+KWWl_3rBQYKEtU=q-S4z)pC^JuC**Ovg%+bt$IHs~LuoQvOn87BEAkHlm10w?=;9W29_H$$xfs6nE zF;~U(NFXB8u;f94bqY=F^u1R-$IXr%(?W^iE^Tymfel zC;lt$ucC(!uL~IDM0G8&)WX3T?R%XPwC#v!96tyId*J6 zsb}&~cP4atavx?LpW_G)O_gl`r5OX5Rro2`sg!L*6vJebOPPfE2b&Cf=1t0Tt<)wQ z->9GCVL-<=-J5~RS-fDkQuZeJ#;0e#G-!z^u9V4NFtn)B`l3Gh=D>|?yEqb?d8`Es z)@oQK)!og9`a5=S=h-Ru)gU+i^Qs%0+xj~;Za&wN;X-mIx7} z&2n;I=%ib4`)K2{%&#f)AzNyHhWlMGyXnp*F1MTaXFwR|YcDQiI~sgNX=xdANpY>H zSR>QTyrbp{3JMNA2GJow1Yu+!-n<{m6~qq26!dAxg;k>Stsll@q%3yVPz11x<$w{A zbt~{Ao*Pj)wTb8&%q6fkU_HzgIms60LVZ)m=!mcwij)sJr=$Tnk#e$g3hiMc#dB$g zN+M#N59&;I>e5x^3qGD8Kzp>?UFuGw z*KDlW*_c4bdN5z-BL*mRXd$*)JYu=YiILS-bgWX3mWxubeA;x01Ssr8W5#!^Bog3? zPlA-AiKZJ1+hxF(TmXtM5}d&X*Ms&XbPx?gi+DU41CR>Eixs0rjk;RS3Xl@3#Oc_p z8TA1&69f(JczAT{kcBv!SQZ>H9KcB~YnLX$ zAhL3vpa9h;K?qF{Dq_#z#6{uY(9+p)R(`ho19@aIT?ovp>Euj+BN%cnO z`4P}9WTjyCZo$qgMhv0i|KtTRHmq8zkP)L`5|RK(o5>g4#TKO2!08i;K_t+^$u|;M zOft$jY7P2}hdnPwDtlNfq9to9BG+(Q04A`*%9h}#5;>rUlTxij7fAgKlPr4sFiK!l z7hu18{;2gUbF-!aI*;G0d0Tk+0_Uhp|(0xt|^)7X1>N}C@?%a6WITPz@Kse}Id}-Y^ zxgTb5!KNp;4L}-I@6(;L!NOT$-x`%-RU=-DZ4gfWy}Prf({tT;EvD@9OA3Q7q`dg zAsFx6b{b?WP&G=k3gAk~W?_Id}5qnlPHM zm{kNcu19{3s2#I&%_y;*mR5mP`tab0(a6l6Bn142O{!I*ll)NT$P15*L2;5$ciyEt z=i*}~KJXei-mOLpSQN@ zDLB-RntbdEkUUd^noL#F9X^m=AcaBo`3R6w@&r6P2Ggov^5t8p1RaUTJ#Wp_ofm{# z+>Ykq891;AyW_xZ`0K&nuHCUMr8LUO(~Z0%HPw^IybRRQL>GfD2J%xVVOlPjFCh7pm%yBupE59e4Vn#0kuP8`wkE72=>qF>Ij$l*#QV3yg7U`{*Xu{RQxn7c8& zIO8QEXl>ZUxcLG@u$~*R(LfK@9u(8Y@(?V+vhyGoqrX9BQ=I*dK!q3moF%rlcw#02 zH3b=S5(=Ol%L13!)3U? zs6=oYI4v;yhI9E5J&3JFF$bcV91i-bKns4j+G$1-)_U%?^EjWusP-=NNLajsdXTJsfy)&Zv=%HJ5{7G_m8RLn#I9)30N={=rga`2X2jCK{JpxO(&{ zEIfk7bGz-CE&^Xjaoy4pFoexM*a9W}sMkCoa?g>u&9`~hLXLuouzSLepd!5@XpFZq ztV(96164+X8W8)H9D|@^B@C3IK#@%ix<0J5zvyTXgf?GJ*taCnfCj9|*z9VcXG3PV zKPusOPs9D824|N2&sfyAhp+VsC5|*#?oKH){Ft*Lo%2{i$usmWDT1g zI1b4Uw98ng4fF44o?L|j<`kA#C)fWwU|SIDQp}sTYyV^t_M3`vgH)?3#yi&oUsJaa zY{#lZZFOuH3zy@E)OM^)Zuc~|_eU2O58PmNK}LlaLX;2N`pn;=(}0n+q6HVo6)WH6 zuJR0gZQwWRcCpCeawh?H`-wzf0xF>l{G9MiY^s49(WRx>qYfI+?zB`@Gn1R)P{uea z%y~EiCyvXRzsC?XHsdI_)!}l##klToV*l@QVM^SDtri1qMKx1wW8zNIMHsNrLyIY} z@DDk1G@l;*CDwz8rasDllr1up7BqhGmOu$449GJ;-{u*hUy{$d9s&xD(W3Njh1_=l zN-dzEUNV~Xg<((4mkB&e#Tvx|RWcFB=M}K=L70i6IK1hir19aepwhEIG-&L6Gl9}i zB}#V^CER!I7A0t8ps(+0mc0Gl&uIU|kwL13TY;Os5cm^3iffpm=d`?s=;VG~G4?lb z!39+Mm!#5W;LLw$(GeM9aCtJg!U_hBYivZbC8FN}qDq7`=^j}nau9{J)pYpCdE*^? zfq0;lfe%*+Md(2G}EHGjQCn6PEH9q@;%`nZbvqGL=oW zj3fDN=RjVgjroWt)33u1gdm${nPVmHAWI&k;({g&4(=ZZH1>TIN5s>##Ss=730;AE zOJf6Wnv>&5!6EWrV){n^*J5jo>@>NQJ5Ay}`Hcc8B{B{viDjn%jI;B&CSn|`sprZeNjJ1CGI_9PeDFmFRPS; zitJc~QYn>+NjJu}K$4*q*xU@X;*<0LY~48r_nXRdc)zJUkEf1i6skk>aXg`3l4~Ye z06Cn9*oiV~xl8+&_G{A6(Y$A{dsoz-eIowemOX>L@AJyUU74xLo}EbGedW9S+P5;q z&6_<%KCKi^1Ux%Gu}I1`fI>LlAuq84D(1N-ei~5CP_RXcyC>v>%+V7AbqAbBMW^a{EFZl6m8rl3(xRS z#bU}KAOeobC#Ue9IO}?cao|M2$2;=kR=7H}7%>6O(>e?thTa&4vyHCSVZ!_n{`jkb z?Rse-x2f4o$LWvx;$$Ia#LQMFnFohs#pT`4(7sGPB8+_8?DN7vLRWJTu4|AB)#a$e zIDH?*mpY6~t#%Qjne8hP@+dD@=cnq0T0T)7=2J&=SxFUK9mZ`0w+Q(WqK*&xslx&Z zy&oijEew+e?+OUc{^FU?dBBNbNRop{K|{SX%wlJO>Lt+1Mo;G;Rp2G7LZ(dE`q@7G z`0$gv1J)UV?|g~uI*EzYT#OGcg?${yNLGmMbN3XijNq4JU%B~xz)cMQsDt%jo6D%G5&}St zL-|dd8{+ns7Y2HBCN(9hpbC#pr9gn3V$IrYN#8DQKwCJYenQx zAvsL02$K1|&4w?$UkUSuVmfSnNJI?~ubmASk3t6pWRfl7MA#gNdZ8D%w zP|zu?x(V3$MUjvf9Sb|?b?7pr8gfRoip#QALAsf>iz$&0*_lP2+&yU2f)GRyXE(v0 zv~T;hA}^<)w~>HPx1RShiL5!-VA+ugT4v#pDAF)5vk`P3g@znt6^Y4jE{j$$;UI@ImqEFY(W(^|)MQ9k@V+?DC*b_noYdzl757z(; z=E@6{#`9`r(sJB(dIA>YO%W$^!aBo|uTAx$p@qP-NSliNksV+v9`CoXr1Mxw?#M(; zgwSACv2FOrzC?M%w8#h?7noJ#)~0(QxtM99@{T20E1jTMsa8o}QDbQ{1kf>eb)y43 z1NoAej?pcXvl3c@g+gjNqzvU`j+zhANCB>%1DQ*{REJWEZx$g+@f8SRf{8wf2H@IM z6H4ZB@~syxY9=c8Hv`q;!1R4n0@FE1-Gh8w@a(}b+^KWU#{7GiUryhc;omzUJRLYO zS7R#v-t*jf#6Z+A5HT6!+{L2^S?oGq*bl*Up=;6o^jCxSQ?7&PxM9xGh_;3EuLxZL zv~V|URzFs|t2~o>0P;|#f)uSoS%?NI>~y=4P>eIrOvg;C4e@GDm-?CdjykkRkBC+U zd88`~rwv`zU|nnp3CosS%d>}51rJJ-wXEGNX{5+)0;Lwv=!Ftv0i&?ZYe_$>*Wrp~ zn-X~hse|0}s*j-iQQb1&MMaZ+-rX-(5NK^acmMdm31YLT4!Ox^BVl6|JO)XmL^42n zKt+71EwRzc98e)od9F!$ZiizVI;<(#VY~jj&x9PtB(>}0&eiNJrBQk}*ePx&Kyk|X zLdnK~5?l#!QCFSF#$hHF^Ds~6BHzaM0b{tVI-;qlrUF^faddJz|&*j>@ZL4_SF!!`HU3L^QW}0tc zT18WfJIu?mYoVJ=gg-VW-~a%|iTO_&%pgEh3RCO+J<6LZbpo7QSt1ts(LJ-S!e+1# zARBVG!26YKP#q2*hBvqic7@IN@yvEY3Zfn3kp;rUm5`G9 zqXeb43qNA%xZ><6Xs$jEf&_8?QT5EZiEB_LQjbi)2K+O&i>ku-Rbmt;n=u`PM(r^5 z&=fJbm+=o6d$8cf*PUbd{Ri>A0^fIylO7w1`**MyzZfZW69zM{&Hi+|2!{9uyD7-%dU07SvOKH5LZ}W*> zeK%X-a8uEyl0IqS5Bk?uIK$0Fh_1c8xAMZUe%vD;22TMv13Jt@e={$Eh=mvhBqnLo zTI4}}@zx?Qe~|0^UYl@030g!DJLdSlKrP9{&xLA`J3?Fwo<~ z_ep2?Kp(BXq4aw=A6Sval<)zi=43Bi*8nth01~rAB1|fyFG2$@j$j^ILM%{KYe}WR zqGT+8A~;s|3l!r`#l7RkqrkUnPNM6I5SN&Zc0~hRK{mgCg5~#)gH|`%H|K!B?qnae zqKe<)14Ydzd#e>8`QdLq*-NdMPU-p%BwuSu4j2u{4f8E`h0bX$$+JH_utN*tJHf9?H!6H4VCgSaTo-IA1#O5>n4 zB+Z-q2eiN0j$t@Z8{)#x6&U3~-8l^lEIl%hWwq&eg|gn?z^9_~79efj zMVSGSEh;+&qw^Y$4>>qJ=wLZman41=n$hm9{@@_NIrGA3CGLt^ ztgSSTI~Cbe-LGcWS7|VrA*0e*@s;je51Nn){HNdHut>)*u8JuWBn6oThf^&IlC*ty z-?zi_Jwf6^i^NDRLJ$Nb;foOj2c)TWy!VUhI2}+UfaZbEabGtdaLzf920uG}cdKT@xmsz7m^910(CfKNht;rin{nm=}CKz6}Jiu%-iKtn>6Ih~ZX zFIE~Ck|}GYUe0ysGsv4*hnhd9Ed(+PIwJH#Z6uV&dZ9E@WBlUjws+VVSM#Y1bun?o z*MW4jZu?2JFZ{VfT`VxIBi80{NQyPDZ{51}_{Vb&d2s5%O)4ks z9p#0Ql+pE4M&E=SU@0~(&0H$nWO%R|jyFt41gDFt&$0RUuQxMr?Jw~^vHxcrS&VCx z8=gvcQxkJ3jYXb9SLocr^ibdUAA@7jylJ>dAm0z6f9ugk#scgYw%(5d73Elc-=hhq zb&$dC+#LWB04vfFo1gon6(03M4cniv!3VQwe=o}Ba=9b`HoTb%ZE?U8)P$d4Sh*K* zk4Vf~p)9Qe*Sc`He1x)oWSx^x3ayXcfEJ7|O5DW8lFZtNtL}@k;vUaNRZHHqD>Ar^=<8Wo;TJS1Ds8694_vqa}A88@aXsxRl+uqCBod$YKIo)f<~ME!CcSR5>ZgsQM&Ka4UBKAc#l07R zdtfRxZbCojHo=mScy&nL*EGJ_4tSrYp*?F#(LIh!&^gw6i1k$%ch5)vYqvDH7E0KF7P=LP#SXzc+)5RU` z=TV3FQZn&qEi0N$e>mKd&As0Ee&bi$IIu{cQKO9mzh--Hi=XptJaXfH_P0-@o)Mf756zS<9;*e5F#0k>9KgaEh<))5t>(`Ki{`1k=p_3HnPBvv3P zO~_(-m?&Tf+GFnBr9Cd-|C*~9ZG=<1L{n=JeE90>fqQp?&xemFkJqgfozkJZ3d8>o zdv70KRdMbAClKW*u_v~vrruOzO}(+EHnFJ-+k?et-P%WzOu`Gi$F|vu4ejHEY)NvJ)jXzNX~mB^%FtH~-2LD1B&u*q{>FO{(yP z$BZ)rIZ!kIPy^!}?`!%W3cm5n*jpmx|Db2Jag{maLiv-HgGh2 zT`v1>K!p6Ud4>4nlR!9dJP`fBzuQ`xv6gBTR346mEjAL`@}2SnuL=jkWOI6#ne+#u z%!HbUksCM43ONDGWR*WbdxWi{=G)2)7UyYaqrlMMCT-A z8@*Yo|L6%$^tTva)bxKi+?UdOvK7RJ(G3$+_-T{)Fey;UMDXQz4JH2y9PIGZ9CQCF zAvnhntc=B*nqTYN`h27hZ~tmH8XKCLq{Yi z8uBCX;;HVqa7qf-eNoA90Q5f>?E1xUH~&x{2y23|PRW&}rqJK-U;mMf!jIN?bu#(I}ZhUuS zN#Bx6&9`7MP#>cEA6TjGznCKF-R*H(=Q6u>)GlPqmJuh+1OsyXcYJ048{sway^1o$*$hJZKW@`w?&i(Kxg()z! zVy(4;Ahl}6Go2?e_$W1#E^)$m@A$?<#}`q)$cp5G1KHBR-rq?!Sb3-M2MBAG)wfoS zsV&qRbauP5(Vg3N&Q`90*>MEf>TW;eZDO6V!o~@CZL32fw@AX}sci+4F#XtkJtO#3 zTGaUVJ5Ynps6ga70V5TIc=j)L9P&a-)eHZGcp*{!!bcQ2=!KS=7mi`?s-^08xtDid zH>{)F%`qV!-DBZ!N$!g-$sPS;EVV9Q`~<&bZW6zIk`GFr>65EXB{aRvKb7IYSs%`9 z*?-8e_Q@qRJoq-lx*i{6%@X}SZS+G(h<=)8P~9Sqk6tM{4W#XVF49fYtK z$GxBkL2Q0%d`2SeRbM!Idxc{)eB7Y5AA_{X`2qU)k#rp9FEs|i$8x1~z-+pWW@{?? z57s-FWnrM znkm^ob$UKE$=frt{;|7|3JTE%ldS6 zLv$IRsngf!s7IjEM;A&z>`M1vOb=2IQ}8L0eK-AKT!MTo006zXDRYuis134aG`^S6Ey-?I0tUF4^k0 z>BHbA9`qBV&SBHxi&l-@`PIz~M|m|eNIBY^d}wS{w7IG}O%7-S1)sCMJjQJ@bB_R8 zOUjq{{-_p0g@%ednuoRNEh);IWFw3ZY_3i^h32J?lN^YH8!dOKYLd znnjKb`oA-gM|T@>AdU9f_X%zWE&_C6{ytT8!|38!*@-QLr;6J^7t|0n!H#w}$Cz#_j5vW=I$sWhwXzFAYV+fnjlRFKyWWX8*})4y z6b2$hFPr|oh9TA&s`US2RW@DXK(v5P|0Ak*U`s{y5T5~{XhJqU?33^2`+JJVL$G;~ z>HlwrOCHEQM(U6MlRGpLS*uIKiPpnz9Xc5XqnxcZLWcY=3NNk6WB2j4^mX6Dlm7K} z-{uk}#8M^%-n+v(m|;=WZ8>`{on#8SGoHjGzW+p3TD5m<8z(?vF*+hs9I=@-AwJW5*)eAzuKXFtR$`%INL*%+Jv$Waig)(-H6m zk-G{8srtxPa22I30+_R(5!0q(_%*$%CcdwrpKIj33JwI&@mu6jq>JwAXP~~+re*}! zb27$S)OmBC?DOmvA`11Ba6hIc=kVpt8$$idg5c+|juY72kUn=7SOyx930C`ERp1{SO;$&6O70|veMG5QZpMmWhwL~BEb8xTSV zy@tk~t*y2HEH0>~vISDB(V7q9eF~L(Kra?%iFMC`yWG5L!1fdLf`m2|s)*ItHY308 zDZO5<&!&5;l+h8k)lkX3#Bd8Tk3nLl;gElWKQEL5dGQ;e0?8GJ`$k?nPLuDW-77FS z%ulcmT|225pE>vxOZ6rCBb3f68D3ggP4n4Kz)lsTJ^%d_2Xe{a(dOe+{v z!s)YZ!N-?rI6b}F=`T!vL?NWL#HLE5{B*(ks3ph>*E}cLoX_O?Fx1TeMKTlsq5k^# zQo;YX0q{+U;}hFU97D*EiTx@gdX+Kqp$M}Bmz2v`k3*#}Jk$Ukl1(wWh*5J979 zuo8dwu2+G^9R$gH#>u199iZ+R#@pKH5cOI+M7>GF$q9w7uTdu=eB&F`_DTtFnw^sH z&VoLR&s^o7TVXJt9)2!}VYk+7rW1!k&Wa zz*OhgMyva13*7W|==X2eh<-1oeFL?b1y$7IV|LQ*1)$K)M3ol}|w#u92o#MCtq3Kht9DB(=HdE@K} zJNB{Ra%XABI}&tykDb*DR#?G*Q$dZRf#uw_4_~hI0-R!rQ=>Aj11?*&<2`8qj#R*s zj<M&)O@yr}tS30e>?AcvRb`_<}e1~oEE_oX#m-n@9ES-ZJ zsyAU@@}cGLgC)toDan+$b;A22c-+q!`P$Cq^lAg;TNL%S1*BVM&|zb^3~SZxnxXf3 zEaq2@9#kXPYPedEG^(kRf_oSVy=$mNM zF@-eJ@}0*GB~EMy#o^^Z>AWFEffx#P`?p4e&G3)-JNp&!_x?Y@-%EE(tcU(s@b+ZJ zXu;&xfqkhUY;jo#NB%eAhL~Abu3(o*tJJ3jDH6cpq{3h;&tIF!ukE6c7lmL*tE4-e zn_yJa6wZY1f_>aZ2}SytSf0FRVgFCJ5_%TvM6ZnrrgA{qREa~o_G zibLifH=DbyCM{;Tyd}X;dAetW!bFyDdVhHGo~@8^5~HYfvqHnIvw5l@G|z;2_oSB_ z^SLv+<7nbm=8^-dL`$Vf1FHC6DQEs(`7;({{zZzW7%6Tw5KIhNt6%R0QgvZYL-<=C z{*DQMo5SCx@Yg!Q;S(#p$8{p=Clo^#V9e}q3`tbV$!h3aUMgD#9;azO zU&?SEig2$smM5 zW%9u{y-jR|6QQXh{pyHk|KQ~k<;U=*jEiJTcckBKxzXcuGM_;8QZT3ocA0-^f{)ke zxz6K@i&la^M?lNTt+M!#fM@}=icx!#H&sjfL2$^a{TqClcTL{*O}i4M+Z&&G=N%rK z6-9Q|;Jh))n>`>;&vGHI5uBqPocaOpfzzNe^9JYDDetlYd3tWw5Z66a4J_s7`5BGM zP-V{CL|V30J~c0I3Rk+f(tF=zYgK+hIq#@gH*_UeL3*}gIA~afKPYLJhi1LD>9FiP zE<>K>)HHAFbl85Hw==&=>e?)C=j@r@@20yaEz0WhgLIOM$f{xM0+o7C+R0T-lZ?pR zRX7fD4F^Qv%Ls7h(cFLrI{Rcr+o)%}bqiq7J-RvY2+&Q+W}cNEFntciCS z&vZ;JVuYdpD~(zxz2}lkVQh zuYa?#QDjvA*QLE8!9e?BsY&v53avlef!!j>sx4yWpO^D8S?kd*8%%GgxqE+ z4cO*o7sVod>BZ5KV#()9I(DN6X#K%CmS%m-oq*}k;n~nnx^ySCN4?UKSaN;7#@pJt zV{ggtIx4-b{o4Q+8EGCA8O(Ut|BVpG%T}=${`{9gurIqdYfVbJ5-MilmIIf1K!t(5r1t|Ba;8whQC`*;H+$6Zt z&6n;AH3LCUb+n1-k_nvTGLv70Yd&!7uI8ZY9=8A%KV!am;45P0i(eT@Aofc7G49lI zb#)hWtla2YDl9OvXSRBF+$#uqdB1r%=2uU%QLfg{flk=i!`s>xJan~Mf9cCwZC7N|SMY^Ya5YW>zyrn6 z?(lw-q6~ZrM$4`aZ$DXGso}OcG`MScV)Qf%zw1mJm)O_44dC%Hz*7MzV4vWa%!&UH zVCOxNd|bPoX1Fimczlc7t{FY0=Em$sF;{1|e^%|N?&s7`-{~Qcv@un@K5q-2y-IDo z{w4LWHfa5uYHRd!e{HoI!C3JhmZ*t)exH#o-1e@U61?{0en*ewirEVY2WcB#M1*7@ zR|^A96by(0sqx}>?*aw{JS_O|aqnq?!|If6`*=6$`_Se8-EI=Ya+Y@10Tl{&9l2}0 zl##hGzj~flU@Xb$J_^=I!e1+? zgS9U)4BF`AwW27MC0CAwTG0ijkJk3kaGY=N<>xJsAR@5(FCzB&h_mgBs z6KuBwx)I=7z_?T32m{1r=A-HlKH^`;*+<;x*8ZLfKfeVK*-1DMcj+tZc%tn1-=r~> z+YA~8kZL$!G79Bqtzf45#*4qP^W&o=Y$WfZY!59W@ zyt2?wH`lm+der(Uw;4C$%kT$zm;;|B^vO1U4q(jz-x}&GyzZgeiI|c>q>3WFJZ_ZT zIyb}MlP$;3kB9S)^(xWV!v0H*i8?Pcj>)GnpIaa^1@kCO zj9Efh97V05ZE5ZFPTNl#BUXhmg`<(J7|C>Nal^sv(Z4J z^Z23PlXm{l-KIP5BFR9Sg1DMCtn;OJP#$zhqvJ?z`nnSG#88RdiF6+ZbLMBa3AqAK z3-V{C_(aEavUdS0o0bEHWk*>&(Bh{=h?5VIg4fB+`VzmUDFvUwLEH3_(B9J){0l8# zx@F|^5&fvWpW^tXlxX~*zW5K^A#mRnG&pT1KaD-pgX?-@>XpogdcGDhMm>>k_|gR; zlw4j#RisCS`L$GX^{2qGPYa9Up)2d*00*6UGyvVCrl=9q2Q$b%0AMvGwwZEkm3L+Ur1LqCk*TI3B?w|x}vTwe1qQ>%}DRJUpN^pb@ zPy?wEsxX|N!hSxj_Hv6ii-2OWgNVQUc#6|(B*rRIHT=&_VK?!^P6e4alcJ;4v4*2< z-|%n?c~jfny;5{kO}t=?O%D0h?uw&Iq;^QrTuO_v9d|_QVU5q>&}QkD_0LLYt3)u? zW5lTQmx~7??6-%73MM>~8RwJ^j;*M|Oi_q$Y+{^i>7IkSR64%jsu9gW9tBch7`N zK>07#guJ0%wsnKQV46Z1bg6x5+uLgheqQ;W>>O}9ndVx=Q^KAWmW9@GW7t zU8^*Z-r3pzxPJX*O>~Q;;)ihX!|0ahQ?OY-L@l(^# zPc9CdE16LqJjIc2$x&;q-(J=h{FFXT_m;c$D3h;d{;AU(B=+$Lz2Ndv)4Yd-3s|Om ziL7pdYn4A~4)mD<$Qk(^;mW!5YFARVqk=3 z_kY*g-7*XMa6SUK+oKivomS-;TMcY+rE|n^iRQEA580a^x;LCE3SFS6mHtJ3ep&FT zueo`1jOsX^b^IEfG6#BY{nmE3e_83@;`lY;hn{~r5Ml0l{_5LBSwAq1Xc?zHN3P8C45}k;lhzN+OlcsS~I*pciQ`>M4D8I=pLApY2*?5OtzE;Fqu>Z(T&xiIml!Y6S#SS7`zq!ZXJyFb)dip=LrrMn z7+c37>?2R%n0E1t`gk0f;V0R3zO}17yXHiSPjz>)J3GnP23IyL`2DEhX$KSx2SHeH zPE>H>0R>wJLHtlu@WKNM68J{LJ%sqA$PDYQX+NOg zcfCrT{7RB}?QOh39^&0jc41@5;3lU3k{B$;lrlgg$5FPx=_m0}!lhv;va zY0la)m-x-jse?lZl&gEmCIon?35VZj(Ytg~-b}nR#Dy z?7iG%s)}o0Fq_$}!4zIJ6z;=i4iUfyN}uAA)4!Q898=N@lrg3>uaSyK9WSjjuWx)3_HQn1ocC z{AM!Wh}a>o|CPWDf|1RF1v;CGm>xKU$dDLK1JrWVdkY_<~(J7AV9Y?q?_O&Eap-drZ+=SrqMU&FQ?|&mFQLKax;bM-#K+qsS@2 z{XzrpcDZ*kTp9B0ZL4Z-E_z!Py=~XqJBr>`>n$n<;c7a@IYb#M8fqFQ?C#EVnL12| zy$AZC792wbt|%OGRM9oy&8>3@)&XlaFhr?CzqAEkT8VD3-h`I29(jpRmvx+OBf^;$ zkG|13h5DZkErBOv3H)dA`VcWylZd+ML<&&1Jq;{kxh;YB!f`xMw0}nfSfc%V5PtCV z)9jiTioLZF4?T83!7+mho);C|en7#N+}{~tgG%SY&c6TE14_@zZFKg7f%wXQ*2<4M zp!}RcfPWA*?7RaC&dr?z;CQ?ZsusiF8xNIePM;<&I}B*Sb=+91so>Ah)YWFhfLKZH zC2~yuXrvu5{+HYMkH#&(Rn*bYtqy-}=+Zm}WrYg^gSgiYCE~g)SEnvyzu)KqCk!3f zKbxr=!;+I=Rk8T+(vR{1?u9vVPu@%SSUORsbg!jneG2#c^fpUxwDeP!zOz|np0o6} zH~&IRDWaJBT(yLf5~bnqT@U1(>g4kFi)$Lg*F=rI;y7RqCF{{ip+ zT9C(L&ja31ExcEE9q``4cl{@($$SVI!TP@%d0J*S6)_{3?x1${jje%o`KhH5CAmA9 zYQlL5{59DRf*()&Ij$TG=R3+tbr@96l!)AeoF0$X1K|_m=1WauuUQTG%62xf04bH!6TbFg{DJ;RPglh0WI(NP@&bvz(2wF!Bsdrs&Lz& z3ZE@hfJ!AfbCy`sLK5Lf)U`)m)3!};^kS1&cDTtXL^Y8W>hiZFcMjhPPF)k7Ck<}9 zfF;1DWUrl9lRYJo-YC_qq%)Cwk>DfneRk;z#I%ishjCMi$8Tsq3N99itxs(+e>g?T zs$q>^8wyi@y|hIqQoEfaJOcyc5CPf2HWur(;A`fpGQtP zI;AZKb1V1%J(R0Zw=KA!pU3WCwAsSKao4@=SdEt+DrdV_d`RhDOD{Yj9(UdChbe92 zt~+sx(l+k8t3Ii;jl1p@1b+|5U3Zu7RBy0^@ofRg^^TiN`oC6wYt zcI^dEb9LaRi?ZE!^8HJ4^WKFt6twkcaNl`+ukTpChv@`28o#ZI)0kAvJmW8@@^)m$ zj!2%pdDFYcZOVPL^htth5asElC%Ijo<->P2>srz6xPeytM{!||J9&h=>oYo9z@>SE zoIJ2DfiC&x$b{U+*5}W{E5FkSsif1 zCOV+;ML3tU0QYj*0oMBpxX;HC)KCt0>IpsOe2IDIjqV#~Gso6(6{UUS%$n0TPJ^dp zK0a-#=Gr-^(zvR=7AxcI^4@pUxS7EvW*do|kkzm1uV69Pj~;Sm&&U#4y3@PmP}IRF zU8p4nbJPNUo4l>D1!^*jcGhbTBT%)3`!T;h$A8)1(Y*PedL+niOO>9E))T%>KEZyE z;jTs*B?+dPxmx+>R{K|$lT$wG>11ZEa)`p~UtR7WwiOpST}p7ab|MM;bxs8j=aj6N zTsw+~BY8Mi52y3+!EEXSBu68QH^Egq6xL^2ZT;R6Ed6&f!uh(QWUtg}hGAYQ%JFM7 z<<}|0ZZ>1Qfb+^*5SFaT&TV{=Hr0|khu<20&*oQ`by?j1{&C`W#lIVMI)#&KwaZF@ za+_DY7xZ1MC)~gL>IgU-50lDgU!#F_iOSN^mnM?gMn2}EGON_Nxxp|+0)k= z^|b3fZv@^~e?O6xat#^&#A?LHQMgnP6q_ShD@!dikvkg2!rN!^FgT+Y&x+(Q$}-aW zpOwy?&&}tLo4eb8We5xf9~ajEXJotso1$qxmMkx`}KYW7Y~*dkMll`)F+yKQn_{M#_Dr zyj}MI;Du9(rDwIGI02g@597DCmMKzBV*aPt{n!)ZpdN#HQo$4N8ya@x2z|ADM(|LW z^99%=F?>=!L8xjRx!_HKPHLsZ^S>Wae@UGh{#nxg@0DofT{nOxQKPM7-B|# z?QVyQe>4<_4a)QP)kAc5aB&v*ps(J^7!rXdV$zGaD9#i2AB5{3Ye$0NGI1L`SgW zuL)M(;SK(}I$DcVk}bVSLJBfq)D#WC=~#rE=Ef#|6Z|%W)_>s6Gm7kgeVJa{x z^Q21S20p0uhlTF6OH~tX9VZvJJ6e-# z)^PmU^1^V`Bv>-tdtC85+JgT+SN-EZ823+fG_|6rE2ajC@5fzn*Es{a0t^Q9g>5+} ze7EIXp}^!RuaZNLt^UM@FxCX8Z=P~8BRwY{-{P^rT15@QF9x97mMgv-pmX>-6C=G?fY&0h2rV2 zGRER=!>h~uudkpLnJ2Q#<%H=UlWg7QU|pK~+MxyR3H7she1Gq3@z1${T)Mj#05R8S ztPmGvgN-2nXZE2mHcsqUGW$Zh-EQw~k*mZc{Yiz9aB9q@LPK{N;(;4zEj~`@!9s2e zxd~Nh&>vzHb=1z)|9*EDUk=AZL~>rRDYyD2VEW@LPoCI<7Mvmw!O0V;XnlJLxf1RIlgTjF zq|p$na|$64>pRaKJ-#BDnaayi(<_sivq@-v=QA9hP%w@GC^E~sDE^T<&rwTz9|d=b zJMHg#1ap{P+20dflrHcHbcp#QJ<;UyPTkTf(&l&@3M_^tJq3zi9p4jmDl8LT8sF3)=>5@0TKE0Q|DdLKH2rvP*HVSqUU zH;G)RQ|)t^%vc-~$`xjAVs-lP25&53*TOJ!R&;}ShoW938bf#hJbx`$b}M)mm|5Vg ziE-epiBaGzUWvD6U+9X-%>>j2_We-2w!bIhHLx;A5X~3xSUCQI7b#$TRxUnUe5K>D zj9By^^H})+LWazOI@ozP)NH1GV@B=koDG{)c1|OwV)VkQ&ecf3%2AW5JO4fWI{p3+ z`9+gZ#4o2U?UlHU_=Q$*D-SpKRQErs@ls4dkk9QxrUfIH4#7{s)uScAUcSfaOEN;F z5QWn~aF)iR|821mo;zhBo6+6Oqc0}A_LI+vIDfSXIW2M%{wLfb^{{Q7S6O#(TwURF z0E%Cj@uLgB^g*VDdg?FXw}Ic13pvA5HwAZr1?&uAGpe%{j24YiIDlkkFH16otJLh+a0||4DBdGM6>@B3?c=k3aqYWb#_wd1~y5wn_x>)4pHGd=g zf_Hvw!!~zcVd|q}vdb$*v%VnG{eNM+bt~z}F zhkWNpkv&W9M3OCKE-WP*c#HkV#2@|$pQOR zv)Brvaj4Wsz2odT*XW3NCH`xin9i@#GTY*<=)t+ERrG%+k`IjJ^6a#`_WOr>i9XhR zfV`5^hQcnHxdiIiYQHd^LAJsBt#gMA@_!>Rt|pJdd&%?QiW{Kcr5oJflO9q@TL@{T z@t%2R@kPEb6_$%srtBR@c#)G`tcbUgSEjqj?=zlMpCyl6vXLLRR(9(Tn5%*;*U06UxwY{b`LR4iBmH%|RcuKmi*H$O)~j(a^UC!smI=nXold7Oy1pzqfiz-f zk{O$16|}H1$gjkX2A+u>ew)JQ+7&NC-b(#zsXeN?fJ1FCiFC(`OenCQs zYua#08E^n4nfZlEfpKhJ7!4w!c*1^RsQz{^sv2+LP%9iX+(}1x77K`~+h6#`X#Z$b z{aSyzqMn4PsNsX~=voMydE0|W=g40VeXhG=jEo6S{fq6>U?!YN0pUYDj7?@|_;LJd zOo2rK@zof_9g-J;7nd_5p&PjdXRf{fQvCkyf%1m$xOiJ<$M2sjdcV!;pA^5>nfhS% zb+NPw^>w%YJ=64`AIhSHi>3?%xaNDSm0;REB6#M5ZeRHsdJ@HgQB6TQZFLz*gZ)woD2s?~%Ff{rEis**TY2_>qs=}9+|a9VtN<49%JP;n;ZyXCw= z$;XwJn@2XC=v7)q1iou!WLE&}msPQr&`{SZQAe$Fm8j>HcH<^AWYc$APE$6$?L6f) zXVV+C!8TzGuS%5DLK8}rXr-1VCV}}dh$VzzHR^)kigdHP3QoPg-R@>@Q0OHL?T7PRx`jHuCzogjhd>o z^k4EX5h-r5bm9V~Z?kmWg-YM<(j!$~(wBymDV;KM-D2r!mfrRO<=<&#ZfR3mlOnA< zQ|S$^?&p-g*U~%X8PI*dE5jzJ*ZruaZ3ncw$I`X~+TCku+X3y~W@+02?S9JAwgcMz zoTY6Cw0ozeZ3ndbB}>~5X!kBlYe(1PRP>&U!adz&ml|)U@RD6wl6H-57YT{8L8tMI zwL2ib{3arV%~hhihw|{1TqQz;%~c{q*jyz-gw0hVMA%#z9H!O6xnPELWKoSQ+Q^%O7*Hv!)r_5`ci}(=T0Scame0e2Ij>{( zWL|CDJK&Q%0|IG)fgu&-F1BvVwIjt>IY8Wq_|wL{{ZE;^FZxvDURO~)es@^)lbQg` zo@MiQF!NK)-j6@_z0g5^PP__WYm)hUfq$Ro?%-0Kz7R|KHBBN3=BEkejXNbQGHu6L z3^83I(0+5F%g_;f8VxQ2J(j!$eE@g>X>-Wj2YsM3G2*+A>Q0>7_<%X<_>#v z$q;W$d}qEq#2XXfnd^plW8yrM9^#D&_spsx-q=)<`SuWRGzmD@Y`;OuDC%M>SyCY< zg};;ad+99Md%}Cgn>jhf2*;7%>?Gx0rgo0H>_>b63RBL;C0ZyF93^xN=KaJJj;D-4 z$t2L9Vk;4UWhUx$Gas!^k<&7B{_(7tohx+nkoG~~D&}9>!cTk|JzB8|EgZp%ES`K~ z_-W6jF1&4y78vG~vw&kybTp%5N47exWvd5$lB%s!27bc%p-Vn8F~zN)m485ujoOYo zMlgPfDTgbjqk>rsymL#O3{zm1v;E8%R+m~u{1Q4!v}VSjR`Puv)XQvzW+t=d7%gQI z>}pbT-eIdsRV1L zqRXsZ&(jtizOCVZY{94H*Tjt?WL4B4oL&qyeg-zE3`oTdTK*ySx(@HlXjv(AAa*<6 z30fWpJZCfejy8u%FLUR3J>K#`7&EiM(#=OIeXphKq)cWuT6)F%%+Z-gExpmwJ(fu|7 zM(137BPet_+BdS3!V%i0xozC|&Ad0z&p@GoB0mFL59><{+5LyeMa&H%xl4HC=2zD* zxy!T?f^Am;)eRArwi1I3h3e6Xq@B(?5S9*C!~f@h0W(4Z?*C8sSZ)ekIe_F!l0evI*%WdX;sy=zl;g((9#4_K@ zR8pP`5HJd4sszw2IB%s8BE32I;{_HD!X#H0nZ7UO6N)q=Qft-L+sOUWULA_g`WA+} z52LG&xK?I;3$*-(!>JCxRvB}*R{%u)Z-aR#lK zj$}v$?$V_Iw8CTK=1!C0ybZ(&o>*#7q%Q2}bzdeehhh<5IeU0KbDJ(mh zn)7|?QLwsiiP%d2Yygjmtu(tSoOaRw%%CNjcEP6%6Z?-$U0SrzKq9tSf1580 zA=|U*-PE0(**kw&vUShUd`R#BwHsT&XQ>N<-eYQXYG&~BZy3L@eBoIw{JRk%_g5NH zkPq2(#lUZhnh0*Mu6NGEDPg2zR6gQg9F;my8xCxQd{{zdr&GMcO^S&Mo zZ?`>eNy_}aqEGPMZyI$5MvYMXC9iKraKXnUuO3^Ayz-uP`)&R`CZ=w7_jGHQyA_+< zd5Tg}?N6^M+KwZ)(w|<<8^B(o&!dL0tvx1~Iv1v4JE6MCH?BdYc$e@dDlXFH-b7XBz8(=E zIGM?iky%e^7`E)NaSbRa4XNpc&$iDp+_XJ0idV#er>G3s$;{)VyhrZfukV~Q!riT8 z=13akcDN$98#jNkw=81q6Bn$#6h56_(w+d1sgS5LyLLV~Q>JFuUSq$h{Mr?`4)UrQ zPY5<|bLQ%(c{aVREGNfGhDWwC3xE>&;mAj^I;h*^{KPQzGa-G^TU4>%8((d79bZ$L z`%YoBT()ZIxeX-}pd*4)tKQD%KBcj2^Z20lbdJwj&|zE}v=%6A-Q~ud@9gC8C?|lO z37`<#b`X$`M}qUe7*D0)cy;UZhmOxg%PX{d28{{AN@suEsc zL!F}vJy*BFJ2J>~Uj+$&IJ~ovzSa|~{O9R6ayrQ1oZgl0D~glXaoCdPl4RzHLqJ>m zh%F8BJG}&z*}uMwl}WXKeS)8skC&8`E9}ZGg1|rD4t|ocL{I!XY!9+gVH0k0&vMO` zN3H7_U^h4g8ho0Dn_*D0G`%=+2znuWVrKsu7k{xT{|xnd0R%0w?i;E0vp;4^a;>T7 zTw(ys`uu|G`~m_ua>`T(LKQ-Dj_;g`IG#Eszh)zYM90({#NAgi8ABp`nu#=tdk?r& zZwkuNdrH&0N>dEQ7GPEf+t4S zEWsNaNou_KQ!2P**Pl}9aknyNo418TA4;)0giloYEwz0k&QisRHTgArcrCQ#g;C4> zdfqTD=g_dJnW?M4>_3I$ZRW_St&D2XO|_%%;S6XAP_OaW=XVcINhM}G`|O{kjU5tO znUUBdSdl^@qR82*ls4LxP7B?YPKTxlD!wMVtw=j}5STr-^BY2uH0zJ-Tuo?zk95;% zN%ny>T=hfUo15%Xj(w&!v`F!paP5mhAKh5nh|!1X+$8{T-&e#D+Q^ksGo$ZkGYc3E z>E6mz&^sX<5FK2nUBOWJsD{G1Ll1?HPa6s+AGDYp`+)KjFg znel*11)qzNILRULF{y>J)^?nH5KKO#ZhnlZmgDJ*LS~+kbzz9OU&^R+2c1dJ)xwVq z(!MeoOG|>+_8IrVuPbho@~Ba1VLJArqn*7>X8y^LGj~Y4z~>7dIpW5iFO;O@g3a08HP0F6mbaIb zv}jX(Omq^wN{7hx(wI5i7eBR7EKfG94jvJZU6F<%+dD=i)BfpT~TZcLDI zH5v42HgmM~-;J%tL|UhY@@@(R#K)p|_JKzLl{-^F++>Izl)bHX3GeWH-(B`Fffq`= z-@Ub7Lvd<;O&zu9(woVZd=dkjJq zHLHqOGBB>WoRZ|4!ktns270rVJQDn4{dr({IWsj|`Gu91a&Ly{|hN)EDd7F4exDcz=4zmnMAHlFJAl)W&&X_uT%ZOL=eHb^(k`yJm) zg_r=2V>FX%CvTl__=xn@@>|&)R|NE07Z`mK&n_@}s|7}{v1dzGECp&F69hrgL8RhV zh&hd@=ruSGVvZxAaUH+S{1Q=k!afB^S5)*-1cL4K7_hToR&OXU2tZ!(XZ3hvSV4bH~GIwm+O{Je+(NMW)~?zod8qc+-oXz~8uu;cIJ0mH7w@0|n;}fi9$r|$2!1T4%H0-=&sW`MQ*st+khbJzs{s#EnSG$#`n|>UpKLnXtK(ch zUZ}ITPGGqG{!DoPMfiTy0qXG-!Ckv)W8Y-Roa3Rj+MRW7b~2-h#@7z31)|RaAVJEe3g zt9SV&^W$Q}p8Inxe#%qGvWjfFN1cO**m%aWoT6HtizYZ~IR{SO^n~}O_d18x_XXSc zm`1Q^-*IX~I3;qs-T<=-@&p^!{t)V4T3Gzp=RGzbfBXwuc6poo|10?7EP93RaQ3_4 zHy_mc=FH{c`evWn(d7<0+#el#ka-ED6^*+}NeIJZAtHA`C5{bbCUKq2U}3hCH%y=N z57$B()-63_rQJp&3cot|}7oCLI!UQ$ItzPo4LO%XQ#crb*ugbk0AfbSjvbDQSmi0%D*)0a@gNXrhLoq-M?hA(tSTe6Ru$eT$41vdoY>TEWQ zdpH#eRZNLrX~}VZ86&J7mBagMyyk&D*hkp)@8U1E%DHR-VD0v0=`}4WvMK~c@c``- zHx&p6d+wIPf*t--eDWq$sG1pEvCJH~YuU_7J)ESIkgj9iT94Maga=3}9SKs@jbiT$ z#A}jWia!hGD;Ym>W0Rj_t3N?E?}>gLypp7@AzeYbL4;~Q{9`r~SE78`MQ|Zz;~v%;xOlbFsSyRxCRI6%gIxuZdP$ELU3H^c9D0- zK6?7(DN)vreY#IPe;Obin^lTx2W=2=TfJ@R-de%iwqqZAZ1r+6tns!La;oEN1qTrW z2`Rp+kC+J5^;{P>7S<#$cN^l8`Q0uogYiG1F_X>Jba7UXHV46>Y zl{_4B<1)_WEm_F67~(vU`}A$48lRCTY9!C&`R98_YyLTxN-n-)o!!df{L>=mwTW=( z0ROc4ihw)VgYAd`CEV2`NGb17I8)|xe98QY2|PBqbER*Bsj|3iSXLE(xeEm2&#+7n zCIma@zq)YxePZ-o-Q6-Xku6^X8A_(4+RJKAJ4yoLTC5IIx~?ss8vN;PJ09(ImT@J~ z;Q0Aq;oMKc@27%KjK=&lp#ow)DD+fB!G`^wF0V#~wulXeYUMkph zy6HDun8S+!`9E~|2cTM*k1YP>QR<)dOLYEXgIK_6oNz$7@9UsRY-+pBz3tVHI~TM} zYK`CEkL4t9=Wu_lV$>so>Sm@0f;b!1UGMX&cRB&5Rmq3xM^GH}ilLHC_f|2RWz&~y z{W$-a?1oxRHPeIt*{->?2DmdpOd2PvHfZKfz?9D~Rb1Kl?&xHfdXE9P2rMf3j(<)f z#UZ7A!423*QF`jd;E)o&A<2WhW;x6)<{4TH}?f`-5Gbzvm{#35^ z>Lih(V;-O;;>1SZ#XPvHB|>K^r>~~3qIHdXQ$cc+>#@FYv@m{9^jA`=gqAPk2g$9U zOV1uRj%2rzsi_x`{CAQQ&YnCzm(yer#xHhy@WahcPria_FW7y-Aa&5`A20mbE~}Xt zoO?KWNZ*5t@zl;XWdK>ycG&ZTsoY&1jo<9Jy)Vzv-Gm8o!i)U>a&;{Noux=geq9CA zw)X;@wWajgUB~ZvcAo?Wg(_cp;$b_WibC?T5r{XYySDv-62% zL;w2H6>+LOP9@@0S)3|~Q~MD>uI|1#^>&=v6Q_2^sUS}MK2Gh5Q!mA-opI{9IJG@a zJr$?6#i`yn)f1jSJwd9I;?yk7rEipvN%3>tLQASK-V;fgHdL z3w$yzaCiY`5v+S0tYLA{V*J7auig+fpa?$=jUt#ocQEgcs}#cw3uNO0MKCqUieNtH zV9t)K6vGS)jEV~s!PIaqg83&0^U%0TG0d>Q9~K>??Hc$+FyC}Ae-c+Ih8Y(4kGMb) zo)RHNFyD7DFNv!Z!wd_Y5f>QVR3;Xm{KWY|d9XHy1%4eDI5@0-b+GP=ix%S* z7VzQ%2Zwc?gLO$f~-WS1q#KF8fu2Kv$ zERc;06v33Cpa|v@4(9B*N-@l^z^J%D5lopJieSFvU>+J*DTWyq_`?+kX}gRUMKJd` zm_LcD6vGS){6}1%2v3u%( zya2UH&h}u(A^wF`-Z9ut4)NI$sko>Zo{G69Y%zOa@%#VV&vu?-cz%!U-(QlwN)E*J zzPsmm{c{(?9gB5&*LG66>y2&IY`UDyVYXgo=6|gSU+mfW=|_3bc9#p>5*kp4qE~VI z+Jf%)_3=~e)!%FMGMHcIWpdPkT52!iB^`!zx#>FAprg@WArbwJ%V2eah-C8dUfG6J_W7-)RpR zmp`mSVYH&G&o&42CBpVzu&MD0%>R=%dCQiNL%|AfnXLH{hX0@7hX|R7|NsAI*Z2Rs z^sw=C-`~a37hPudUphK;W@YbR4g{Srguh^}jGa&eV;N-DY92HdCEl96u#TVNV? zIBCKqL^Hx+Z#ryMlYfSg(P3FRA=IRMb-`Ov*%AK_%KjgPo0jXXNeccP5@B&=IeS=* zeBPfmH}hi01%yFHBu(<0^{Kn{DV+R^Xg*9Lkuw;N876Ep6H}(R440@oWWt?H{5rZD zY+mf>hjgI?W%@Dvz^2S!CBG#6Q_q>}pRK!84s~&Q{Hd*B08IBhlzh_dd*z{24I_5Z ziVp+i5P#Mp?<0uTgui47{N)WR$jXAeBmVtgM4grYGT?ll4!~GUduksEI8ON_rplEx zWk*lkm3l3j8Hm;HW(Gn4$B{py{k0+S4X)Xz!E-F%1FHI-7F7EGZf<%{bbLC~^9Xx; z`Q)T6x>Xi!B6-0U3VLT%_{&s=tvMkwPw}IxXc2_Wrbj$Uzb~zQLG3 z)4Wahe1Q#pk(yl>KXeJ~IF32z+QYpR(d!+YrO%xm-m@?T7^|{NL%3zRv-GU?5M=U! zchrE3frvr^K+UKGC%?MXU!i^^iuafI&ihi2CW+ELnn3Zeig))GG7;pPYjFVyxUTSLi!F3F;9%b(XEaTM~Al5 zah#r@^(9_~M@%_KV6~6oROO+o4y3s9^?k(2pZkTt#X`WyjW0Tk(3b5E&_=o7Xl*aD zW7h08Qrk!=;vT>>uFrIO=0C#k$Oyj(w`OodW>}obW=n)b4&!wPml`_1ymTNv%Kxv? z!{)>9y{!>(E-0`ciu-|GZ+E9S{n|23gWpo}6v8f_;ZIO#>eJlh2176%R28N+4R~|; z(WFw(GKP!;pfQ^P)M{wPDbo}lgybUmSOie`?G zkJR7OgAuRO-H%^!Nf=K>_ovq3_0}+-gDxD7;Q)j>x2I!@wvT?k*rS?`2_8)P69y{>Zfvn!1xMvuE ze8~A9rGg*x-qXd;13OZ2b}IUR6cQ-BFZQud;?H%@oRKAQ)Vs3WSEvm?i9W%%_5N#v z-?tUs!{5Psf6{=zoH7=ld>Zm!w>RFZ7sH(f%o z(9qxRabViHbAXIu`ipqFaWAfQST9Zs39<^eI{yOLyDVF2{zJ)owoXlNEzOoKCEBRD zNe#c;V!)5SwtUeul#^{j{RA47`Fn+EezgpPCLofTHDH{T>kxWR2j@l}R0;4md*leN zJEyPl+yaMA-9p**Pu4=+_-XLes{FmX_&b&Pjq5mA$P;}vzgl~Ml9N5eF{TR5Q-oAQ zX3+Q$7>$s_!Uo#0`a2sfXl zA1@_HzPEvet@Ei)!JPw{SgWrG9274SgUk!`>%EDe@~?<;x< zs=()?fzmOPucv~0Id-7KU6Nv9;fln^dYthdO&LF zmiC#b(dawQHxk7CQ&YkJjE_;@(7#6qII`1Ls{7JuDx=Ff$-3*%|4>F|M475f$ex!DvPA$RC^J`uzG=4Nh z#f5s{;V&uwW_XKc_E;~7rSpF#-*oXoi>hWb$2tnOgdlPYDH+MPSf2m)>*`#8x>&Rv z+SSmVU&lV{HG$IJEjfdc=!JB6_)BMPHHea4Rj$#AWyiS(hnJ`lHt@#grs|COkHVCq;u z6)dG7Uz9!(F3TAhYCqhfMX07;g=kIW{!|#@@%tslNhvM#%5q!35#4*I_cMe4{vG_+ zcm6a*1g3xs2OQRD_Vxs8DGw$n{T6Lh5^$Z?%*D5dNAY&PCU{%lZwvK#0t~Z+YxRd` zdKRAKx5=^aV^EpXvuou)l zx?|Pa6jDDviB7=_VXY&!`q5BROjC*Ey(|dC^R*A{j8WR9{dw* zu`Y~EP~eDEYxbPUaKG$7QlL-Oh|_!_x-{fFANj&qP=Cs*&%;yu7}Y^PIwO;uObzebu)3i=h0p2s84Zbjh8lI zgk*O7wEAU{`28t^_=y!M;3qI~jP(cb*6ekhxeghNPshCFcdMPU=R0Fbf!ARBRgI1= zAGON;o5HV${Kx%If0Q)10R&{$?~?zBxmdEtqxs_P3*R^ zI!_J`eU9bYCUi30q9bc2pj8ik)B>je`!W68ySM55@UzLTD(O@xhM24rQbMNBs%-ix zrrnv-#Raz>#sLaW32V_h79u5A{tB%9`Gi_euIyFvx&+qal@F85u3xEkr*%bVW1bLC z3GdgyEANjS+QZ&qcMiPLeWjyrs93z1t3KeneA7nI-ex09i`7@t3oA-Hf9X%Efu*>= zNZMj$u>KI^N!}mtPLUp?a0I8SKCjVK3%7!P)HQZL5M5xi)%zUq^uD(`(%$QKe@p)e z?{(yIqqJ~QZfbtDoZv&sMcakk4sz$JWyB$DE_M)wq|uh2&+|ZQxVtV%{Rx zq{!C{=8x>GkraL^0#J4>GSq0FUsvNYsq>pSPaH3lSw>w1ej%r!Xz$=ull1*_$Tju5 z^Yz>)mC*Qx;pSVId_J|!K}hc_O+R1K|Mg(wu`v-tdzQP;Zr5uX^efIASrU97QfSBG z1~2kYwMZz4pX!fCH~S_uxO);*vE?)P_YRH7!E-uNpeIB3(pMu|FtNn4^G z-P{rlgblU?;jV9aSY?{C=_;$f5Xg6u)4hal2lx;5b`kNOtvq3^_gP{VL6O($)f_5X zVlIU(L0Ic%OSF^oQ-RXKVLtRNr8RF65?esR$j}1=Ezh!ijd##kuQJ;#-M&HTr(9iw z^PHsz23p?sGnJA0L^B5jT5dL&zqkC2J5@$&CGdY<>D`vD`?k`I0`m90sPx;GUSW0j zS$g3O%6Ear7v8P3f-ak47Vet|Ux6FFK3K$ine%k?EnhiT$AD(0f)P%p3@i_OM|PZC znMs`fd&Rf|@^_H$4Q=1a#PU}2rR*~oKQE2xsdG$YQqYNMrp@)mqM+WN*y`8$_yeOI)w%wSBzRIl0omA(G0y?a7CxN>Qv%K9u@^ z-=aHPZHrEt3P3nnSX&nS_XYbIot?V3PqI!MSrz$d4dr{%1zn80Py1R&U0kzxuEqlA zF~dS-c5k-Eb|>ubkB<@H98&2%>hR%#2!LN5Es_nXW)KpWfCTVwydA*Na=H^kv|YZk zCAjC9SP+EGj_lhX__fG+!`YA%`?l=46=|@6 zaOoh_(#0XnL59KV0tO%R*RB8*%Io2M76VGuXzU5j*XJkb^CO(%OMLC{`+w2*Rm@(* z7`XUx$>-Gk#eAOlarjH5g38avTJ4`+LaSYAT5V;Izf@ic*|P1daERhm+Hq|5fmJ~D ze)llPdP?5~KMA{@O|2>yYQM>+N0}3n2611FJ9|vYnIr{}^_T#)tTw z`C?Yg*OTemx%APza6hx9f!2P6%*o*_)_Fm?cUHXZ=dL0l=s}{dMZwh-?^R($2Ua*X z`A}=^QOSqk^`A0CWK5b14DM6Qee3mMCBZ^MR1V~q;P#j4t<4uqj4qTJ5N{l~3&Qn* zPFtVX;4jqq{DtiMaGrg>p9I_MzueHev`f$+#FLJ^$f&So+Z}$G? zH{HSr@a;a62>m_5+00djEWBa(3jL3z(E9&EtUEYz)Wt0~{(N8qKS}7<(CcVm_EFho zO^7U-yC94Wn>(-M&3v$eOPU9^_y08gS0FG4;_(mY|4~{L>^o{OJ|_QmnEV@W@~;Yh zXz(pgUt2Jn$Q^_Tgbp8v!e&HWM#BFb(rF~Th?Oy;Bbmf4Bj;NGf)>=l)BTyvjXnK| zRYctxwXNgiQPs;j-%jUBy$f1KZMyb|{$nC~P>v#g`7&?vvi+kcwp{&Z$6<7TblgZk&g9i{8izi@EAb}x-VzBX!daeUhdN{;h(C9 ztUSJs54wfk+Ku|)c$2^S#(36%UrqLnZ?!5HwB+uFJsoOVG4x^SaM<*}sCJsX@t$uB z{)GlE-7>OO60a^C%Xi%Y5ZJMjt)hyl!74)V@CoLH6<6)tlg}c3LbGZpgD6_=&uTRs zIu5e~!IKr^16}Zt_Oqs*+C&qGXeaX+H!?j6;tpKbANfwUEy0l4PmC4jtMcSS<8+0b zcUB##qr9`~{c$yYXVq#J^v-Gs!Rb{>C1stib%1NRgbBc&HhVPJcHJe?Ef;zFT51dl zF2dOtyp?6yIv&xS?7Ei{!3o{4>GUdW`1^w8E6iMyeCXUz0QK3IK<}f3it8I+O$9?e zPgpS#+-|-X5;V&e-sAb46=C7+0&IkO3KK2G%Ck%6Fw(X9y2x3Da_`Yi$Qjzq`-<$6 zA8W-BoVOoirY+ySzKgtlwn(&fM_g`|-~=Cc<-9(-#i2-EYkdCfX^qeNu{J&n(t8s2 z_eDs^%WE(9zoXus8Qj$n_wv`DAHek72466t*yW&lziw0R9`_mb9QT{8eP;sr88#2Zp;C-4ZQ^;Dmk$U6G zy}t0>M__07DKQFzgB`0|RAzHnK>99b9$slT#J1?0MSP$AE@4BQ6~Oyz^kLho@uzAN z^K!st+bXbbDW1cW{MsHvRm_wTK7Hd%Z}8g`swK0Y99Ovz!zP&#ZU@A%>ApYg^M}e! z<3zwcDSXlkn@T^@liu}yx@UOqMn4`XV1uFtQv?I{EbdS>&5vpHeE);4_DMojmXXUCSQtqPP;$9}7}j}(WbfiE=3 zoU?WhpwR1D-H6J_e9oB8c9%_d!QgeNl>7f`;ZrZZ9`~*|w>sOskF`XK+SL}y2rO@N z(AZ_F$XzV1M+})=s{5DleC|bM-EYc@=3OLDc3eU`XP-86Ti7SDfiBs#*aTdHokP&c z-4=}_GIm1moIe;|#G5Dh#+#XzsP-(?zC?u`KExmHE@^Rt^w5#cP?pf^X#5dnyx6$O zs-ye&YQ#|mINW39_LG<5bVQr`UkDyb#uKQmAA)~=lF|A2$}_`wMNJUcf3#LHo!L34 zkBv_Xq!Z(OW%Zg37u@Ffy}-Mt$Of(t`Ul=ImupKs+gzMJWkeQ z{PIZgSqiT%6f(gPkA;SMfX^4~Xr*N@ha^*5TUe)X;5H25(96^8Dp6t4c>`~?2oqI%0 z>ni;?fPn)j4NWrfNjjK!35Y4m38OE&tQt(&1Zwo2%`T|65({hlj}E&My*S<1I+~q= zWLL9ek@>A$biXDAsSI-GOVp`0^_t+Tz{xI5y!CxhugNZ){J)rc`}nx3YX3iJr)_}1 zM2Q$BYSfV%Ab1n4m`J#UCTRl{7}~T=p+NQ48cKl*Gi`uUQYI66JPbqv$dlK4g=@W_ zf;<&O>=O;;v4BEjc@*`YAv_ccr98-d-=DqDIWuXS7XSFYUcV}tea_hrYp=cb+H0@9 z_F9=A+Asc#m3@@Tznh!tDlJMxRi5MlsOK`$qrs-rH!*AD-a+r0sl};{A*ad^v(j4q zN=p(}3+`BmV}FZyQQH8+V9~FS6Z5+BtK|S-V4@*eK(}>P4?hso`$AH^Y#ObIU!^4@ z3XdmJ-t9K$)jUn*Nz7M<6XWQJoh-U-FC<&kr_a&gk!hb6JS8O%f=t+Pc^jTMUMG}S z8wrjhW-Gw~7}HbQOv*!pk#sKcWtB6XIe!k{GwGt^g`hE5NBIr8=`IFb5MC=JU){O- z-JEl^LSm$fH1n`XtAWqRL5((Op)PX1<}zJIW6kS8Uv1Gj9Il~W^rxW1A}&7|sDqEV zup)X{wf#m!Cj;9VSO(DnXMOeraZStmq0@Qtf0Z|Gvi{G4x#^f*c&DCNtgbAR2V|U6 zZGJcB{RJBWy_&%*?+f@sv>m2G+`32|reOycm7RBz2$~34mbBbKBkb`Es$uKt+u?Sd z^1{lrjj4vwS~;&W!Q!WMR<_HE;_Ag<#*AfhpXlAzW%ROUOs(ZZtTEm>=Qx<|Hw&|s z$T@rcvSy-I;0A3)E%i26#XFBJ$Vj))bRZ!CGhC`P(;SI+wiINr#M7gYB8*SD(}7&3 zAU(4t{i%Ky<>xkZS;sI#1 zX1O!Of9CLC7j@N8@ofG})IG&&(yn~~zs7qMh2~RWfmejD&>d+mdkZd0LGHZKovj5p zn|a#2h&c!!2HR6`l>jyn&WTQo^CHcZsoMZsw!S6S3d$nOP^|M`+w{(fs`T3hLmFN7 zCu*6yba8Cr#dsY5q9}qIjB4#jNlwYToe#6`kud88-7CxfKu#9#e+i35hd z?YB0!PZm-|PyZwROtLDqy0~F=@(okvB2(oPZw9U31ca+!9)+~7niya=Qi1`owmiF9 zMAE+p>qB>0IaWl;%9Tm?7+!q=l?HH50!}`Q#k!|s1Tl&a6~$}Kd75inh#kA~RW@mVPMgM|%#T zh-O{MvRScKjU~d-3_Fg87mVZicTttIm1W(?dv19xTLWDIz)^CcWdsNYM%>jc{a7{^ z$!7r9Y95AVBM%*|gsKdF?-PCtJ>;f2wKjAb8Ahj>^do=A2o7(T{n$rXWZ);bOlM+M zcnz1Zk-1u@acozv4v)s7>9>X1ySkRb>4|FnH$7!~cyfMf-eKAGL$Kjqolp+8F>6FI z=^E}O8Mkk&^D)MvG_|VAd74C7Chf^y0JLS&n_gzcpfi~s!~F)*s)X9~xoW8TjJ229 z=>n193@&jL9WQO5j%d%9)MiC$RfL@E`yw{$XdYM>S<7bg-E=bfNb1Al#9gTm_f6a; zyq&RCb>90`{)|ol!~Le^tvBPzQldiYGUL?~lQSD;w>n?f&{F^SJX;4l>@(Q6^7vbr z6VX`KdDkpemd(Yzzu4DIx!=CWk-~Q8J(3NK4phg?9fIe13;!cnRz@7{JipBT5{Ji> zyq%J^`Te%#;y>_~jvkGENP{BW36isb5C#y-j+dv|AM@Sl!;SstAGCj;{|&Q$7pL{_ z`v{S4Zy5?8A*3hOSpBbnzy%69irXK^%tlN z_lI^fy)RL_L~8A3srxN>l21R{LR(JiP6TmIj|qC`q*mIr4r5dI+w}h`t!Q>K&i#q7 z%F=m!OD@?)NSQak8y@FGd!AC)u#+@9E_=Me?n(mUtKQgGO(2C&XHtt#KwFWf<$ylr zxOPU9dt#$IslMUi#j(r}i?zm--$kAx+-4kcGV9SIxoUMLY35Hi3*2?%B$NjujoGU74Mmi0<d5s)u4`ZRSrj#`_%ud00 z%lGFP0Z8m$d7G7G854-8p9jT>K#H@_J70};qDgVxKpDwvDzou zGGU1F0~1?F6@|o@#-T>eS#L=Y$m^bR+p0UCt)uJ~@4&h8O{$%;(Sw=tMn$hGvJH}m z=}sS_DrN!RR1;83iYu;al*KudW`&J=W5;qXXlxsy8YgAq2tEbkDx*EWr<#FFL<i-qAap!=>o(lC4_G5wVb|j* z=_4^7@UW<>05-MVPkALicvLjdRHct8bBSBy7M$m2?$&zy(IIBNErq~qnM+mh&}z=1 z<2>}bdV+IKInl2MCYeSCCRvasnX{UKNoEP;5O(JOZq2dD@BuMrQrYis zf7{YgDzFu`18Crz?!9@JpgYY%XX7C@Yn5qrd+pVS#BhwveJqa=lS7>z=nXNl?L9MK zXtwnsWpAAsz9oEkO&XpxZys!rVej_^;TN?S#&cJWhwI^xQIp$LP-Zb|?K`J=lLYUB zzo7z_Cf(0MegWKb?Gz)`>9)=0p6Q0fRQLRH)EJZ9N$SrJGYcXvfrD6*G9B+UtWV6& z+_ix)zeD9dL8EUg(-#DdgcN+!wY`o2jG@@%%SJOFiWv+r;AYZq8v1?3IoR@nVAvyn3Bx-?=(D;c))M96#IcmWtpyb8rE`|QLVA_%eVH*P+uQvw>}>> z!v}nNn(B>yKqP)kwMbn3S8RYQDXBNEEFpxM6IHwV(H6J4}`HFw9 zn{qS<95NKceYLsL48ft0E#p57&9rV7O@F{}BF-6dPrcM(3-+ z@Ux(jx^3o4vP-Yf(bWcxVZk~^-ga4T+ ztv>h-W3I1Nl#yHCGfG(*Z5zk)cWTM|w}XA}EzurD0;XqWHjpPJFq5Kyjpf;kp@f|Y z1VbVtW*61o=bvLcz&2aR48|z$lRfOyF8cZ zIa7mymAS&p0y-2(x5T#_@Jp3YxTxVx6Ss2)I0>hTiQ8#I2JWR zZe5ESWzkeq5VMo(Xqp=A|Nl-Se8kEz+Ve$P+~GQr_M6BVR#|EInVC;4R*KX46QNdd zI0sxj1G5&t>e(P?#B2sgaR(f;gM= zZPeOl`Ib;tX!rYcmeDb~7t~;R@A*_`#Z~FRQl;!bi^M0lC?_u?Webma5ox=+5lzOj{NypJMzaK6Tvb(u=wW~ znb((!KDS#Apmj_0_8pC*_tsxbH|laj59aCLHTqpq7(=x<);U8e&L&V~jIzvF%@nhb zbW@W*T%(5#*LaJ|g5in?{nKV3K#o_KJ6qdis>rlIXy{>Ubjc`KZ<8;y&W%39uuNl! zNJU~Q(*XpFV~bf8;w-_kjE);9{+NeiIMFoi1ce5u(Kt9Ep)>v#2CyUdr0VtS>|=ar zqJ{=*-D4}t^fdBd}bB@JyQ$+sFhOOvl5t}Wm){CvO%(sNeNjV^f@ zh$qK7=SI)lSjFS2thS9Izm&g*IxxRz&|p4$Y@X4Yak-Om(f1kt_e1y&EH&J{aXTwj zO`jeirD1&KjChA9HbIOp&RG_KH*$1seDeAuoLghd0KmD*MDJwzQ=mj~1NGnHfI|fN zcd23)rvFP5wmsHKBlD#R=rtmMowT!sIvFsvo1y3wei??z6v;#`9%&d1D=_-&VD3i1 z_v9Icl>vbntZ2_8w3o3#tYB-6#G^n?-{ADgPv{3gH z%{3wG`%~X3hrT1J?N#T#%LhoBqGslV~Y)n|uiNSmm zsVV?Mbg>wp=AHV4j;Kl?@=R*{N#a6hVq?YEp@z_|B$H}4Z1yDkC3_XhU^6|+RG=>B z)!Ppcc^g28hZ{4t{~=92#DGFX!FvoxdOg~+%vJMV4YG1#O!iv^-g>(FWOiMC)nRl_0GFZ z^38zDiUsj_N`EEa^t_ zQPH3`i1mZqg|MeGTOr>!$jLKB2X-^XR_xi$6H5o>y8*`)xG8z={lN|HIn}lVHH_ap zv1DtshA>JmyhY=Udc||Qi5xYaRiZw%PEHsq>?R2wUIWXjcC34b>S_L_jU4s4XW4En ziP&uwB~jYN{Jj;!q^%t#%f%5%7t5Q&3FYqevV0LjzEO-r=W@RotyNK`Qmv`HEowYc zEsWSM(1yPS^j9-gJ{IR#+Gkg#hTkIg^-z_Nj1O#I zTNw?+|Fc27e_QlK6TJ;v|G^0h2IW|50?&&H$QVfQKq1)jp(GV+nQSVi;vZDVZd(l{nT^5(QHO~nBwL75Sp3i3b?*rcK zar8ms0sO1w!4*YY2h~eDdmqmRziDPR%2deiw(+W?p#c9XOz3{ zpQMqO*!2r4f~2*}jQPVY(oL-^oia^vw`veZPONliR5e8^6yj8RR3!l~Q zW-=oUSY>Q&W|Ktf(=^kqn(}Z%)2KX(=4zC7{2DG}Vv?5*eHuJ+FH!B(N22LL5`R#$ z@DJ2*k+~>o8VMH24D0WfL?IIIdYlEF)7#R_{U-7#-$Y5=W89adxD04vuh2A&G0gSP z<{MoyR%%ZrzDEzs4rSY0_Y|ah#cgVf{?ZomPc0LUDju~}%qyBUZ&X;`ptOgeumyHK zvX5T6&LCl9C?-P(4A`R#82-PWFnA`;;`MgE4ucp=iV-2sqy{zQoL;AcI(Zxix>Nn!f8iS_jCmIUU-h0} zE{*8q&!D1Id?m}#7suL|8k50vX{hbN-7CWujBp;yMp^)kSV+5&(ciXC?&zTRF7+tpB*~iX9(yA^ZLj+su_J`zUt)5T%L!% zaLAL~Yp6x@i5H;SJ+8#@W_YJ-NfmWm?9oo8zmrLR2Lfth>RLwxx#c?4^cyte)H`Ix z>C2CsaVjX8Sno~#`!IBg{<)-TkY5_p(&x?lm8Qa{%l8otl{o92$AB9 z?k9`ta;n{)m^u~i6D7%E)W)m8(*xsDNdJ#o`d^=oi+1lki2U}usGIo5;dh;NWE0L)Hz{eZX9dC(HsXM^2*wk2Q4@MGqkj2_3DQ0`j#VeMJ70|*Y!#`rhU`A zp`S{(KIPNWts8#`HLT7^7J)Vfq!^N?e+Vm(4ofF;lh!xqX@ZPu9eswEU>s5`=`1QK z(I{16Pg2QifR;&7YCD3vxfjmlaSylbrj+RF)+)rrv&6fYd{x4@SPFDq+t(l$PiF#G z!`!vCBzPV2i!6oZfTBZ-hP7*?5e%-%^7zBK$=lld#=J@SdBM0)q{3^DWULAhF z+X09xe39Ux$aA_MCkp(%4m()?-uKE`ap@}31T|6U2ON@oi*#v7#+r_){B09Urk0P} z^NwP_^M!@hsj-v-`Z9SD56nSGc1AnF#B2rj_TnR%PO-e87dlyZFmbm94>M!ti+|qm zU}Cx9dWRP%d^vBJD3E(K1isR0fWGjmE|>-G*(J!s@+ZIqo`#Yyn7~Nc>CZs^S)(8| z_hW+jQMbViX7*4%dvjj019C*XqU*wGna-*i&a=}WkXm3Wrk$^qqM|nPO813TMaep6 z%XRM^F}k_JX|8A(=&I*xOXld@ksmW97QJAUI%e*ACq6Z*NCgs4aE$#G&a8)(JO3dl z-DE7#FXw%I+x9~G7=4rI0%kwi{c>nkUCM+18AG-7^9-TFrrQLdcvG!!Euv(VM z^1#p{t(z+(v8!N*hUwQ7bXKb)&cg^;rS1w@N!BSLQ2rF~Y8y z*1{bm60{%$B70R@x_TWK{TV~B8@R2V%Oxf;MzccJ^+z*C^X)Y9`OejbZk|d!>79Sz zsG>vDKB1+%$?F{;W64}Dd9UFt$=`9Sx{1YYqB(RLNF}C_iGOgIG24oYlUKsHOvG!T zgXU}F-qq)0lfr&V_uCC058xKz>%(~e!w%!SV%YdzZ^yS^WBJNv#xgkXo^g%V*E*< z<@&E>XXdtce0d8ybLjP+)clFEknIrhJT%%pewMQ)c2xJntG@geu8)qN9c^9n<+q$Q z-GBS2`|;6wGbenrwfk|@B<}H@;hQ(R9~a|lUGvrCe3f~z`|&E|j@C7E9n(z1MeWg^ z#~CCvo%NYJ+CH~Ecdy*&I2W}ee>OsQTW@Bp8Z*CNa4efk{8sGsE=q!AORm35V4Hbo zN+2~%X2`bQJdi5I8oQP{2T~q|FxVmW8mVuX)D}|TG^uw;jW?<7q`qZRACWrTq>8BJ z+a?tuRc}%yq#8(Bk}6An7VSm^mTD;q(V}^gp(sY6Q6pe|{3I*bS@Bq~uX^dDtX$1_ zcVK4b(+mEuuhQ=2@)BcUQ7*BD`B4KCtaVSWawgO`$JWZ7r+AqH3=H-v_<#*dAhAvH z2wonvu?3Dx3@(oC=aj~x_q4?J>;Bu;?njMeUg|tlw_$L8taR`r{_Z!p;ktbJ=W1eg zPX*<>3Nls3P(RRKWsGIXrb$$}qmkiGIW2p|y&?ZHFV_0>>dojk^gph^-eWwyYNAIi z*wW~7i|lE1Xs8Q=@&Pn$rTG< z!qRxjtD4;HHs6_TjESMIaR!n~`V@=`)l@NKrc473{E-fXXc;56#eJfEB^B+Yai#$zk=zq`o+=4Jsf)+Cdt5rD&=Gnx4IK*+;gir#V+2q z*Oq-I#Ed|V&3J12=!F$PSn7^8p1JCtf`#0FKgdoT#Ep!rmX4<@cuq8MoN}7=|0?;} z`{;7Dcg_y&(cC9(Pu}Ke>_jzYC;sl*la542T4GY1o-ji7hG|W&(zY7i%^^!alo~nO z^BX`|`k{1ZiG@o)JjT4cgm(d#!TugPVMjD=y7vueh{3Q$2PPVHQFUpwr!QYim#rna zPu){Gxw>kNGrfjg(RfrWwNwQy+Z|d`0|eTzH#7OTA&5+Gg@zs8qchy)``GaJVSCj> zmqQo%_G8%#Mg0Z*68v~)WyCR`D>fXn+MvhRwwb&7c49)qk%h;*$H~FlcXaaiv2c?s zCcztAp;{Me^MbB?~ep4Z!wlXd^B$BG=Z?=Y&)LWEa z&+^sSHSz9t#oKvfb2fUz+Gy)0x0p5LGlM!DC}nB$Hg#{!4Kfmgkyy{>WJV`0b*uOr z?uVZ}ETo%H(%#@3&%HdjVUuY!XmjXCKL427g~BC$Fen|l^A_sgm?%M~EY5zU!7jl6 zRPXMq#oSLT5_7MBh^pN9g2ASQT-!C5XjvXgE_cP z#VJ`SD)aka1M)4oy#cu%el!c_GzZY*%&AVM*=#sNx%j2La@KGd#A-j75-rHW2WxCN z{&jq>aL0xNUHLrEn_k{@LSi#su(n_4j&t08;ZyCgcK*(y!}}4qj0)8w`qsq!Zn=(5x21f` z_Z7E=kppuOH4oq++O7d1zMV3rdO1- z#6Gl-;SD(XI{%kK4L^3}nn5;xAfa!?pi$-yR#w%mLyab{NVfl_mv zmluu6)-%p{N7`jm%H1y{UECX8)e*K?&Tl-_34z$4D zCqsjAacG{~o%dGfzQhB!XVnDkY44$mKDUXpb%KP^=Sbbwy7%`QOumLk1Mp%yezl>~ zwCL2uq>_rNMWxc~RE2a}0|izGY)-S)v>@_?c#lbJZmux&Sj`-&HpKc@*vBzlo0}^w zo$_AmIDk|ENL+w?u-9Lbd&9!wCHliHEWk|u)s^EdjZ~Zqd~GZmP1iwTEzm%FQBn6% zd|;aEVk!H4r1@!=KIC)er9`MEDU2^DHoQBU*2O`VG@UFJ&nwn+ zMLU3@KIE3-gjb4UZe8pAu~^7u!sZst;_k&P=Fr5Jj+3dd>?AN>ftntjS`kZt@69w+ zUp#J`$n;Mbx80ni&R5|NoYk4s=zZVMJ^fc_ddJLDKs;T_0#|7ESZm5P1(?ItUma%9YIW=D&a)XU!DJy>AzzP z$72E#12=Q@!1-3#-enke%=>EC9{8A?>+dt|P4?R}XUP7#XUe&9+QT_|3h!r9V;&h<@l^D@8T84?{2vp)_iD=w()|2~aYR7``ZMupB6r2VVb zRBeo=FQNi!Eb(2NQvbHJlr%IpsK$;fhb4dCJz5*58Sc^IRdIMMTL2nb)*d^QYAfAh z|C|Qv4W8LJ6`a$|64x!LuTnn%VbYAoTPro>bj^GBK6t#|MbnRv)oc;ePe?8O zd1%pXZqX9lKhQdeJcd!&yXwm=(=XS*c|ofslS{0b)dD7Cp&^_k(y^Y zDKp45<3RNtH}cX+U8PT{9+TFd&H|7;XnkrqPeta!Fip>P@67o9N>@v6Ta!JBAI!vB z(56S9F}br5TJ&BR2v=?&LwWh9TSRYR-x(iaDnXvsx(ek2d_x_Y= zGnbH;W9YA3^mq7_lXCqDg96Cz;;$I|=Z}EaQ8W~mt-z>0xz!wBj81QrKhUG@dzn2d zMxFL^pL^BXHnv?2e@k1g7F^o^;@Py_r&?iJ>tvt3ccn%K`g z5E=T>K(8k6#X^!c2Lrvgk;HROQFgw0yp^O#A}hW!(7S@%pVh2U`4jqn5$|2F`kSZ+t9kebRj_@WuKxo(uTzt=A|kZdmim3T7Rzbp=k`B%fjx{`O2 zcja~7yd_rUbY7`nrWxPurBo@pq?zQ6Iy{}0`-wJ7e%#aC zJtaIy)&7jrOo582K=u%?GM6s5A)DHm!7X%!pCuBRFd%pVrQp^*Yn?g`#;?@fqGj-?BDM>tTPDcaAD5-g*SG@VUD42~1KQa?z8wHKi@_*^X7lGblYwi&KvTKsR+`0|MLyPz_mu()jTGxh zW=va?AuArrS$ArX>MGz&>aGF>Vte*VBuHBLez5&)p4|Q7(U=%TGiMs zKSB={b0}B5I(m0&u4h%!%hc>c4N`R?ikG3v(n(1qxtH@7IysI`;%1@r2(+o^eZv_V z$`tZ@c|obcwNX2;1?BeD3Mnm%_sAV)VVoQw9btc#MY_R{^L*Wgp|p3`8t?|Wn*EIT zUp$Su;w`h6vDXXbTQ32DmeUakJRf4$?K9011bN%2Nb&_Wnd#Q~wKs)^hZQjG`TS$e zV)2i|XhH;&H;t%;|1uKrlJ>z%CB$Fne%(Dyt7ODV@ANCi=#?OrM>f6u+{DJ`8Tz=& ze-eKVKQk{baj=Ta3H%`P0V7DbCSYNx`SG=TB>76E)6lT?|_m zod#k<^5{@x7^Xi>9{jd!0V{mv88Eh+7lJk}m3*TS>_7N9E?TFp_VK%;y-&S&L0SvZ zSGMde%CGQOqMlfFnN*_OD$EOjW>!RdR;w#86b_C0MVt5KqJ}6j-I}yU2Z(5S&RYZ} zM0KeO4J22p%yHfNmPjQfu_>;CwHx!F_%v_cH{WBncWQy)K(Ry{0BdsIbqW|l8j+L# z7_Uw9UEgqf3e9zr#}6~r;kNnMk1}mJ_WfC|P(&)W-aNDnU{OoUN{T9c%6)*PCO33P zUvSMU@_Dm1c{Qu@6F8tp;mn)bBQ$;ZhSuxx=qTC>;?!v{jab~XufTsWv|{kxq3WPd zG{Igh?)fvS3Dz&B|h;J%emWf;~@{j)ZA)d4q=M2Yr%sUu1 z$TGIg`4v=zYfe+{ zsZ4)2@hKft?KRV7AS=%9S6HKI<{LGmq@i!tELn?2HOhP=ia5$TT{~LOAdYdcsCXf|Y8 zi|BMauKxMyV91S;E>^o3=wh&2?nbE2Y^Q_c47%`^(gA=H@`1tshcw-h?E`jioWuaMxF-826zoP5FU|m8#1}WhS*! zt1&j3FW+q7&09YWn-9%PH6MnCG#{iBkW0^Y2&FQVWoz6^ZlYdC`jn;e>*2PQZJSVA zlKd9inY7C%sFhOXxpVQI5juG_SJlC91<)H09y$US-trs~_e7%gyu%2?7b|TP*IZw> zT9xW0;Gog;l{SB-|HQ|(`}*%I);l0x`#SB-=cy0q(XTPxFMJ(VqxwEd@ zPSlVkr?|H)CkKKC{=;!<_CB5>S~5i_IkCilyLhjS$!y>`BHHr{VeDfr0UPtuk8#hb zjdki{4&yeGkm_3}5O$W&?L&oDo=N?kDMJrAP$xJ6N9TxTakIDeK1vuf05o>URQxUD zzw-0_Vw;$^AX|0tU)j9bm^BP&z4ek<`&gKud=(CgGP{j(#!Ypy?H8cw8DJ7@w1J=! z({?+R2|rB+1a{*s0A9q)P}z44e$wo?sGu=PETM~J>0md`Pdlt}vJpCWswD1rKKrTb z{qsMwK7R8ejo0S?+hIQoP_=FoeUJA193U`c)Om5nm9qj|a~%I?a|ot@19l$b=N zJ`-<`)BU5}|DZ;DUkDRSE$oF$F*k%VS{qe=h82OT}usi1h2z72A zo5JG6O%fl{`EVoy=}#;H{MKHf21BPxAfJa=ir&Ke`vGR!HWEKWd?(nv92#z3g7p`A zEmsNZM7FPrd&f;RC5ImJUcM`wAKsJ&>hB-^=Ibj&?f(sxyR|rCLzjMy(o^MWgvh*9 z<^EQ^n{GP<4t?o~pW^9U%Q~+Dq=SWH>@M5ITWI0_z5oNo!5-U=)7dhd7Wwbkdq3Ko zE(Q52X4^p{zg)WA@T4byYUF`1MgSJGdIJ;ZXpcOx zx$)W3$$eMJV-;k$M%D~dcD(M|S}d8POmHSyIEOA&>k9DR-OHE@rD7^-4AhF(Vs}Rj-^)P%lI8q zrI1M#V_ej*Hrmq!96q}-`nn2NPIGJ@IWuCzAe;-dBrEy(oZKJyq48A?= zn##1)+L8t~qZo~dnwld7bbvo?MohA&1jc|O(<|d|Iu0B6_lFn;1#7U~Uj|>Apca~| zaQ6W|YIm#c0d4An*^&fHrk|G;~2&OlRgjDfRh~VC07;8T}=y`iS$^# z<9oC+X6xU%dQc9kjod~d+Bf>4g3*t}Rw6DId1DV{@OwYkY%n_; zwNm!yG$h=G&?9ZgZlqp}%I^sTHdSJrKf=0kNpsncB{T*6#Q zP2Cu#t_@RHg{i(UwJc0Y#IQ7-R7N!)G-j=NlQx##VJWQ2^snRf25~d6dm0?Opz&4-GO>IgC zIyR-VN}IYVOf3&nH-@Qe!<5cZZ3&$_+SFxXYFU`-2~*u+YH^tA3R5~+v9-+iQ+)+a zXeM!T6$(Ptw27CWdpK0Xd{m(V>-*b}xY&>IQ|IN)__IcK8n%M{%v+sUU zv;>~tbiy6cUVo87?8RQ<$sCXGAieSx`K<7zvtyt-HVpK^EQL!xZvtEDIT`gOwCq>q zfKT?YrB*xZum6%?%?;V9KNS2QZWjDvWoUHbxjL~fI6v~VC_A-oyzKOB(LBGfG0cwp zfh2_cr~r*?Y+hxsMjMb47dUH!wb`9C+h1wUsm00yhN-(xEIOQDm=!?F4RF$~V7Plb z{a~jGCq*yh5CnTP{0yXGPg26+gukNC36BuIX_s`GaXQRZwm{@bpns;No!5|1dIlKqP?5}Q{+fBNN1-u9=1)E}#HI;UmF{ur5hSby*XVNOTF4xt=V zZw{w7)7b_+1fDag$+kDVINaBo(VGQ`g=HbEb`GmvF^7;gS^&!o#)fbtlY3?FSZW49w)n=9%#G-RCr}hQQdC_z*i^_6f5{-%w ztK1uO@`~xzN@gr3TxMXONPojw*epO(A?GKa;(jtacs;H6@m~ zcif~3mNcew=uJ?C9;?F+kXA|sW$q{@YNfR=aJy=Fz*mF;6!q#TF1jE)o`jHrMpcuS zGh6P#^Rhnoq^<_lOyyM-=la6Av!u~BYYB#kkI75Kc?O!ai{NyE{FYfEw{}SxdvzR+;UVJ7v->Y;l(YS+;h~4?PowKQ^mT4TNH5I%} zN*!wM(MHqjfozX?}le>`@4R{3o(gkqw_$nOPPl2li` z$idt*UXdK@w8fmb?od=X@tUx#9b!ZOs9XhZWU!-bt>6#y`0aU*-^6+DAD_0$4;_40 zxwly&>=OwWI>Z?b6{gn3Bu0e#g{f3t8bIcDi~TT@K7*yx7`J1w^Es3zC2n`O`aCKO zEb0#l_M^|7Cf&=?rg{(0opzt_Ym52Fq1JwX)YBa%H?tjE8E=RbjRa>NMjE`b&&OmWdr1(7Gi6 zjd%Y0<@v2^9{?W-J7kzAK zjwkjFiAdvz9?YF;rh?HSx?N3lAyB{ov=KzM8~7w@#TWyYQFFXFq1OG8P|gukX;E@=>|%#E%`v#j!S4B$++}Id z+%*8_0SJh1Z>uJvV~j|Z+iU5>?AmfK^)W1kGswy(eRCwA90f2e#iBHS(j|{GT-7l^ z%^Z*D@g2)v3EIlTVOV5V6w5nbk$a!`b?ODFhKkE2A1vAzk37`K3aQKgAJb=eLvP1Z}^--UG zbxMX1?DiQjpk()25eSU!i|&Nk=ngNa2bgj0)HXmnE~Gm6_JwVHP>`k_=|#gPUXSx9 z2)0c??@X|LOb+&>VR7xUnIHk(i)$hF$T~mRuJz8^rtO-Pl}@wKL+ZpF#L%&YJ>4OL*o20!_B=zCzGK*m`X{JP23=N?nZC1?ZGqI114K}q5N`fQNHu(9$H~8>k_W4a0j7mtz&1;i-C*Uj=jt30cNr2=} zDAAMmT070HK3&Zru+y4kSeaf_x;IqO4H`TV=6XQtJH-nR%3LSEQQm;*-Jtc$nsGA7oL{Ne{I~mclcLJ=Y{iK^TF*Cp^!q1 zM_AP~&u)3S*vJdig_$aBIn0D3Z{_eFCx=0Nuq0Z3{?SzR_ne0;KWDm9xXk_CWop3` zOmACqfO~x(&*{xexC}HK=A2y}@V(fy|K>ojo|It|qQNZ>T2FSk*9#h2-_O0oz_DrxqRi=Q3tN8kUuxNx zYi(cN-H!tojYG&!?wBQhatbhspU8e*T$JNE_jbcmEjKX{%mXfS=6e&&JWGDhT@r)E zoX6suNxcGH@X+p_#lwescpdj7R=;W4jlU9{Jku9xP+%aM2l8n0Y~D9VQj@ zTkCV2>?PfbXM-E_r{BvB{iBdx%zE|8De8~AKH!hF?n?DTs-hcV?euWGd;3k`*qvU_ z^!co{0fNeL{a!M~*i*?u&7CN%1Me_t@0U(r@1{?tgwZCLm90RkD;#?|g-B;sxasjv zP(VHw!vgJ}pn!ad1qCK{0_LtQ)!d1gk0icI7jg^Ba{cX)=*-;0@?8H_q)yE(#9r=J zQl_(W$oXyQ@A_AO?#wM+E>1$GP4Vu!Kr@*8OywtY&b4sPw7B=*yy8;SoP6o&Mo#=h zD3N4asBX7fdn<}bJ3fBEh!S?<_$y4vAIY==CYf!sAsv<_0za+eq( zjxX1&oQv?ERMIe%d??fV?_dHoSjj-|O0XwsVW9Ul8n>xUe#-ghK(7vQ^cD~z=&L|6 z?)_w$i+<+T^}YxHqi7i@iGhjTf-cT#tzw~4lZd>7^C@1gu{rhI(F@-=%XFUrXD zes{$3uRXYX_@#%;^e!5){H?>wKcC#8|3+Qkd-;gv=kKBX3e*10BbKk(LwPauOz(Xo zmVa$s(Em^EG=7=hhgFV1!i?REs7qnEcKn&B9Ibf24GKro>plyyL0WGnpU)G3^C1LA zT=?gAsz!QGJKK#td%@+GH?M2^p|4bZV`au&)J7W2L_fWpmlrNn%(tLPq)$aR0$CUr-h~+b3 z`CW};y~^!o98U~N6R~#x-HxMH-c0W?Bf>EzsA&YgFw2xbZN%~q{&Dws=rH9Mj#xgu zhw|;Fd}hS*tzr3H;qjL$w;Mc;3ra`Rw|;uJczo2rap#C|{NaJ!<6*KXzjnm(7lq|_ z)sLt4(2t{n($VxgpBk|rnckQ8P|tgR@Ou$W-@m(h-rPeyzs=Xvv%7jmpSt_;`9Z#( z$-Ap(%O3dNm-6+rqZ$~2|7Uuu_5jbb_lNkAXXFv;(K=FV#=B1S?NYqU1T~E??`ll> z2_u$2eh=mUWXjJRvHZSa`CZZ5!ad;OiQk8Ki0O{ouH_ryA!guMHXGs{J@CiAG~k(^S<1ae}2UB={=M$Gv(hJv3%Bc}ZL5zD9dP+m5BnclV$%eU^Kye$1Py)#EFKV}c* zWkZ$eJ$J2*gepAO6KY93Zh+dY4r6qIKD+Gn@(P&SR3-d~Ie$3O4c zxgXl}2HRE7lwUbw`9JKTyfiGC-p5BQf6*Swzhufc3Lm@Vr$>h6^LPy4&-A{cc6TEO z4IQa_Tz%bRU; zVfjZ*`9nu6|E=NWhqUc3EdP)xKXJtJ@7@*AK^~7m`AqM0mD>#-?+HpHKVX6q;!%o{ z;dqqQYo_jdj#PWyjp}Z_?Grc#ASpM}p13cvSyM^t`E;rNr zs}alpdJpAqHRV^0SpKX%lwV=WKRIIg!}d`ACR6_95zD`R$L{;T+?3xsV)V)8Rdi>hv!3ISF!x$%x@qmBg4~WdG4W<{(acH7kUrD9;*59kG=oaA{!ArG zGQFLLDp8i{tv+0dicGIJoksPvy~ohH4}q__WC?;kbk6}Kq;kV)6StMvUQT~f^@rPMn6{vf4S znRKVA=OvSF`-6awaj)roCEDrWkCf;j@ogn$(U*T$qKm{gl$f3AU1<_?GQG=`$GAG9 z3-wCt^p0+RQ|UgFuC7z5PD+`?e8hvp^kzY(_u8dO)Mt7tzOF9|2%hk;>*Y0JAo-IrHp>a0|rCX=pyQ}0_$y6qXI+f4e}>y)mv z?@ie%lV0`=Aq`&-->De%{0MZE0i zG2$@ir~dPl_l7^WdBdMC+2L6ZnF`Cly~FdX+=DFq{=IjGKVN`vy~6M3zB>H*kk^Jk zfA96-&lT8h7nYCj@Vsn?XWcO{`E_1A-TUKsoxXkjSLXChr{`6ik;!XujrDGRM5?R0 zDDf?9OG;(j%DI~P#rvi=xZ%a@1<~YZ2b;=_ox(xM*ih;7n}U1W&u@~sY)AD#lc*XZ z!7skXE7N-uOdP|~sxiFgBn+!+xy+xR2u&G6_;fz_1q0z_D-49C#$*q-e=Oc&(}m&b!^2vZfwr*&jU<#nzNJ99?qptERt{eEc^b;L2$8g33SO(h`($z}yTj~E+>DOHp z;Z?n7>C%hj)Mh9>;8c*)paSW;{(Xi}SUne&S|%x+j6 zo&2oRuiUsf_?p`jQ%=8k(XA3H;fo?Y)-SAaCo-!NUxIjEIq*cv+1WF=MO96#QfCckgw zkPQz{xjFM30g}D(UOSG z$=q)S8oNS;G?m=~*Ugy5%wEVYxe{6f2vt&STDM$8!(C z{5=p?e(rJO zqdi*V&HMr@Mdyqv$}ZGZX8c#Kb~ZW>XMd?DrbVAW25*616XL`lwzm+f?5on4b6mCJ zYkeMq9f@+Hm#(2g_riLoQ9~*^ID+gu53)P8QFH*QKnIFaWU>q+6`u|s=F2XrU`?~3 zg6zBMLOB23(Kx_6uLGa2uEaLyh8y`yP{b|rvij!D&`5K;+YHGhJ_jq1lZL9DoIzxk zL)46wImU zr7I}JT*(gR3o{Os-)C6)H?pJiT%P*g$Zpi70%l&Oxg)!T!rroTVOF+zYY%reFUFky zbAL5w_~nt(TrCkp*gk6EURd{8!#$ZzV;=}jarLw0lx!(?=mYGD4vc-<7gb-B`iw8h zAaq|N*Fn02P*QI9wf;dK^H%>b z^bf*~fvw-t`gFr`H7Z+i#l&f0ZqzeGZGbDQq9%S}-(}y0v15P~fq&3J*8hf;B=MXk zHFU#3bRtoXSX<)wJxiF2x?Hu)C9#vzaf#E4EE!m#5ely)lj>>Pp~7goQ8by7TG~`a z%-C967xs{am6;e6wc2@oMbNxf+9?U%kLtJHK$mx;pIK6xIiZB;lM_qGguT&C`r#i` zhCqAp`%70Z=gAP6^Ywv=$OPR-(eDy)P&zQN9m2@raxIg>zhll>LS#=&@zwz&4!ai| zfdR0dbtL7scABQ6J%6Jgn&8eF*H~nMtaluH-(jrVh3#~-=Pl?9z=v6RBL~^_87yW} zcha0SdCv4ds-`E3DaBpm$bcoi15VV=Vy$(|x?ROS6ukayXS`}_$hXd0`3-N-T0BL2 zegGuFWml(qr6fhSUq?%O8q#EIioF266 zrgZdT=SXolM@%82JqI%mUQ?TODAkuqeG%Y zSXP@okk(9PiCuL%X)9X^hWF6ndR6wg@iYQtKiCaq%lBMaqbge(RF>LJWy|(lS(7Ro zFaF(sH8sWKI}L5J#h`4?o>9iOp*D5V>>}j055QY^M|a;<5GBO^5~8g--}`zCqtiM$J4OY6FL!+>oiw9x zJpJ8t>wGxn;jS1SHm=;@G^WLF>wL4Ej9{QV&^ljSiTv~6pz`A8`*zK*e0;-cgV2(k zuL)-Y(=!Va@yR(Q?#`?Rtk zt1qIJI?4_!8BM=SgQoO$5|+wL=`obf^luS3tqI_1^4Gfg$Rh39WY=V)z+>-wd2e(g zFTMDa@cKIixZ_}4A0WVp+7y4(U8%iZ-R5-e;__@3gqi*5+Tw-}qdkA&5hq%2{EU6e zf|euBE=~T!tox>thHF)D$ zC3;1#>h9AEq6)Lk__}JQ({7&;hs^yUBPPt@ z&g0%JhB_KvTvDNZ#U`S~dk3i>O)aU;_Tq*YlSBSITYK=JbsVZiw|&EVtN%KBN~XQK zt=OBQ0DKjWm+M=uZDU%fqfR&IhVhnZ_9=or)7|l{?ZeiP!{e+WcMB(>zT+2%N}fFK z8p)H@$WM*#J-R=@V%D!iDQDs=L(hnc>g%A~fJNrk$im0?M>{kPPzx0>{(zbSp2Nv~M0 z^h%q@sBZ5!=}wbgWzrP~znf#A)K`?^yz+kaZKRT0CQmddLnBOrQJ(HCg{v`m&crSQ zhD-$AON9fCjKt=|gur`G;J85dF(xoeAmDI){>ur&*Jq60pZ(t3;=@BX&h7IK+*Dk& zV>QzErIxeq4&5D&$NqL<$z@n>{Fc;u z{K@DToraEBRJr&cZiK7e3g|JyEeTbbh}G8REY;vr@A9=E$(N7ZYs}n<~8Y zxso7&+*bG;_;HUfO}&cVuNWC02)uIE#pJ64tySi6pt#`yP1xuaEr|T;dDm=->JPKW zFi|0+J#UlI`>)^dbyB&zfMp>u*_Ag)E5=I{*tswA2Z_WPc&(g$t054Ufx@dC)CbDl z1^8qq%Kmu9(p54yfj8^q)=ZOs*8DfV4yZjYSWl2<+=8XLI^uYqXKyJu#;pvX}6Ls01q@7;nsjYXAhv`St%H+rrMpM z5OC$Ye7%4b@Dq=~_vQU~75%1zZJ>w88iE8^8L-()kB`<+_y{_S$#iY3~!O_k!7B-1~>QO?y% zoZfN@NCCRh>8&6M;}M=8Bco1Byw4x~k>ovsHR`o-&SrQPozb~brQR+i^BJom`~@?m zv|r>rk-0Cv&BonZ*7Hf3Cn-b|rdej?Notfl7)y||}+?8kE%hL5w|Jo+8#1At8GgKvO)Z*{Xd ze;oR$*~jU9nHiIQNd!T3lk^4=@*U4pBKrVIwhQr0N*7wE$GwZG0cfiLexO?;sedb> z|D1KJ1O4x^!{j$`%wmY+UW0{$inunfTJn=n(}K+Uv||H*qf@4mb>^7#oe8!x_j-q% z9G)&9r%v;3D92Xd!BGyE-JNHrJC9Gr-Sle}aqr4SVQh$Be1U#sv}wykR=K}2l6K33 zMLNrDYjM11=ZgS8)}-WdOO8nN z6m!sr3_F>3Pig1w{z}R{IJ6EpZH2g}a%Wa2vhEq>?lBcZx8Pseyio&ooMc?)l~JNfqw#lhYfLU(mhz!u!(h`7!sT zYV$Gi%8KH|i%d!Rd2(;LiSkpu(mV`@3Wm#lfCpO_2#lpZz?++5n{VvS zC%?bBsrrRs?<$BjpHj6PVl^!=)*U)uEKMrRMWmstJlb7x&`xv_{hz*Un{Ql2|$sz=pTj6kvIDweGSONul9q2`4;XUpFU9h`@&xF z?|R^g!#F4Vp3Lsmu2z~gyN_pd%29QQdHEZ8=74tcW;f3t<69Ib-NCkBS=sLffpGlo zHL9t3W2FaC&U0dtD>>zUL=VvIi)YH=pQrz-MZ zOvj@(AhV7hi1cIBd@y2w^*uC1d;Y0a<(5CO&3Drp84;chkR--6if)ft3_uO7MbVxo zHQB|6IyfGRdtW)qnnw@{JvK10n!-izwK5L)8dIpVGVoX8v{m~!pnvp*?cs3MM<%t( zy1Nk`#?yl}&crJBmQ4aE^&EdQ$Cub0XKGamsHg|P@nBN>&l|yDGP&}q@J@&Ka$ZEC72VPFclo@c zDVkP%DtA&$2$$7_CLc%k)4U&_8}f<=Dwulx{?rSnKXFBxTDG;;7AHnqzh@=J+nMLx zPBRm=k*#yju1UY1Jj9xT)_TsGV*SA# z=gt@pqiiYMS5|2RSW&gbW&{G%m4GHr^1x_~;zAJFln}(!34W`nc5dHl4;@$}wWS#I z2Dv9KGl;qSPU#t%1jDMt91+obix>2GOhjnOHU zE2T1|5fOr1p*fq-@y_Nj%bXo9@1r`iUq-`ftYU&GssW@&!GsP%DWuq-RKI#Dn-HvF217Rl{)RMOeqAc18AdyxQ^;olJ>|4{#YX7x z(kB+!>luGRcK{LokCx>1%bY*^I_3xbr8B}A{&B+2q*^*fpmB^u*cjcTQOPY@43l`t zXl}6lYRNC~lRDgqI`t`aCd~prWdzO}zDVZoClyF;}k+q3s{#NcJddC-wtzH z?hut8){_T!^bC2bWw9LQK#pS5y+vn+gtF>WyIL8U$T)Bvy42WnPWL9|^Z#VT{7o?c z%YH8}Tbgyk$cNs0%*87$ec5P>?N}Hnr~QQdhZm zsX|<8Yea&jDqV_Aczm85{5q33LDHc4M{1dLy~LNr#u&FHl5I|Xd z$dbvNH=c80;d!H6IyUM2gOd%n-u-&Qj~GSWdc=Nu*c6x=+=+*6Id~s+={^ z6O?n6+gfE(4QryuuK_RhZfgx08f}I~Wr!(5qsah-_i?k6uw)0nP3AVoBgk48Zo0K- zZ%%v~pma)9?=0xxr_ouU8C~Dd3Okyh#?^AGmbONxwNjY}y04--J{1j(6~QU?UE%&r z*wxp%&Dne4EPa?2UH6uWN18TqoM;QRS{*i-if(&w*xLPjXl+|-T~*>LK`=O}%cI{k>KBe5{rm7z1J)EVnJht9XuD z1BaX$&Ov!%zx7+TmZI{u1D1hHw*{c7bK1hUXM=Q;5?i{|j(C{m*@_OS;AWU>AV8z_ zQb&;UBez75cVt9tl*vL!;_hP8M9gw)#eHxE_S+a>v6<*#H=c5py}hTf|AdnE`}uH! zrwzXhYCPijxlEsrxZ;pjwA-_HbVfov!tJL!`WGWoG=vin=_T&odm0axUV_6uDAsRv zYl1?KrySLtV!c+I4l$Qu4*kvNT^$ppE7= zOh!SRuc5HJOM&ey9QkP41UyoOnSyt!o^aM(hF;ZOCtW3<1cewB(xH&kpa$9}@iFJ{ z$OR}3=mzbvEB4XkKLU9kt7YsLA}%Ae+f1xv@+U%L_468Q-aYD`U;TifdPsVeV5NGO zeDYiReex+Mo@)Qt>;)NAWc4FTx(_7*Uyz8@_c?nRA;i>YBBGin6E$Hj(>JHdu)fV* z==3BDl9X^9)k$G;%~O!%)+le?0-TveCRGlbDha-Faz(4rOlzNTZK6Mu+EHeku z)XY`gfN8W;$Uu8=mT)uk8@G#ZmO5*za-Y23 z3ZyjW@em77Y^G?+iRFH9s`Q2Aa;hrF9Gz{xLJB)#x28r{sND93ikY8Cd~w zCzg^tKt3PBM_$_aD`z?7)`e_mIi2AgswKnX2U8s z1#N%q6RGv3gSKXA4$$)<)l#Xr3KgkhY4r=Sv=Ys6E|5fhv@oSEt|oFPxj^22Lqb*f z*x)KV=PFkvy3Gge+u5KH<25b%mLGcGL194#Xsws(Z zo;3O=!VC#N9E2QU|KTrQ4-S6jM;jw3fd8V6Tq*G%^lhV&ODSmTMk7~JJIY~O>AX6G zFA8?hL!4%ptLK?5V!^ddTYM4ak~l^UVX}BA-%`a^HxdU2oZdm8W;HBhS=fjqUv@EM zgl{z~u}c!V1r({WPn_YB;^y=eQmCzuBh3*sNWnZsbHpi*Il@iL4)t~Pdtr2Fc%2Ot zdn`&1naGH~Mdo6%A*u%#3L`h-&60If=SWa7m&R4N@I=cepd84W+$1HjxiUGFBxh96 zl2B1WOg^O&@9woyydv_38 zKaDClJ`~^Goc!($?{UA&<5-Ek30&=GE^-B(!dveD*nJN`;6;BmQ|gS_ST*EBVi%a{ zW@U~U%udXnW$%VZxG_8+l{v?7hEY|ZY$osui=*V^mY$BHg=I9$ z7el9`%#8jTGRQtmDvpFk^UXAced{A)LVVf zpg-Rc+u32Ma!;atObh0>4c6)Lam7+hjpb+>!+(`Y2vHVM5cBYM_7}Vzl0#8u9 zZlIN?B_EGg3l9{56^hzJz1>x&+@GM`LIDNNQ$XPz@UWqT@ilN+5KPRiv2*Xk+2qM| zurVrXtjoQ|Pi7j!n~ei@BUze;VdE>R`myuBcKKA=bAG%J$gW>ptL!=S-z`Ib7o*=x zaGjdKwG4Ul#4$u zl0zwh!n=B5V_`e0hBzfF8Nf;;$`ngMCZc+oIvJ0fE86ZY(CU{304O?LN^w|dfRNght^)hZS;)9FwAGv%5cV_6f6x5 zCj3799j6-={-TGP@Kxxi`ZIUo*K4M`%2JnD4fu$HqiX;MCaN_d^zU_<>iW3npY~$? zY%C%=@rRxE8LzOS_8zL{wJ4IUZ;zG9y(u2y}qDyNu=xA*sBbcZ8cYF{f?kIhGRb4LzcD73>TqZ)j4+H>;ndX0Gpdjw=4(ESH2Z+kcA`0yJ zT#>+I2;xh5O@+JZ>$0bSo?$Sa}FltlfJZ?=s{SgsPHAfL9b2wtm~4gAe{? zABsQTor5EfbLZel5Kr7WxEcNw#BPbG%0aL&c@rY#y`{_h2Y)Al<6D(JGReMMrL3{b z&jrmuR(am}DJ)#-+XkRP5Qcd!&A?p36)+3^=}r^cihE|_gvGx0ba<;k?!A__Z$qwD zzLt-^eeJF4F=O9`boJ=px4|zS>t3tdx1mI(mh9W$6OZ+;p>%)U#~FMB`xLg;!Eo!* zmbBu{Z`R*c4{mA=@n)A=dhF$nul<>Lz}`_9?*(|rPl43xlee++_;xPokoi0@+A4mj!b0gV-X##d?yM1t(5UOe#ZLdF%jK zjpc->r(f&jh*Yg%t?UDO6MD=@U=My=yGJ=D9U$zhU-u1?Q-@D8X7}kxqus!IDnMz# z>Sj*85~JZd$bm^A$Q9uOoCtM;2`GF5zMuxR2juc6cjN zSu*erf#3!B3=~;iH^LKIj_+amA*GP&MWyk_qc@1VeGyPn9{Dlnzp|UsXpBKXl&6pW{9^mtz5kM#Tz7{c*_-Uke%YK zgl}~o@s?S~mkjw*_qva7e&@~0w_N8$?9@Z2&rdmuY1#vjmh%ue9DFEFP?yu zul@t>`GG;rB>^ZckTg<6o>#w)%7QB;tD6%ooE^Z~IQ!mGjK`^0!oRmbC}5BLP;P*% zvfmm4vQkNL&nH4iVpQsx0eqWZxWhg-hAC+M12cLh1t&v~7q+fE<2sLLLs{Td4+7Bi z#9;0@^t$WkSRq^kT^8sw^oE;e;rGOFXz2C${lT2;Zwgg|_fA&b4u23VXM&S!SlcAK z|1(lP?X^RXVxj-9-0*w$S+gl`=ACObY+U-!g#F|V;`IXit6!q;8mO*=2*kx9!if5H z`FIs#77e!=G%tORo`>rYx;?(tuE8=yWK0)i_>Ia~X}>u*$z4*t5%VwoitT)xD&KFX zE0r&&HY2f=vO#iEgi*GfD2RwsC}SzA3(;v<8-ZnIkTcsJ#BPC+5<(6^4NEhEHIZ^( z9gKc1SI(PmmU6E`M#U-3lrBy}7^PPD7>aNz#3g}N);1hhMd^s1NcXkG(v1M%%D|8R zgBHr49MQ6nF8N`p!w-v^1RjKsyblXQ>~+_{5kNlx zV_X=0WKPOjnOF!{-F9tMdtm~{Jy-EnD~nberMW(jiWGBo6Xi= zx@2xHI)#$bsyl@Wnf*pz$-?S8+}eGS2a9R!mf*U_68v2?fn>P|)6sgYF1s|EO-3fg zs?(tVb-M#-KU;hje%aOn{IZqj;Wrz<#rQo1zq$C$!S9*)?T_Dl{O02K9Q>Y+-x2r? z;P+zuB7RZIdFaZ+LQrhqUBCO%5)a&gYb9-bTEqL$R8|JrULzf09%T2nX`|Zog9*$q z)kYQCcSXi3fF-IMHd(%&T4g&bK!;t?D>b2SvPLUdSG~V|A15T7Z z@*nabXrAYClbOAahpWuB=eCuPscBqb5fvfx8K;Z|AV$qVO_$0 z9N1D02uA>rW0O=N-=5_bD7n{x%uS(~==U|#1U|R>V>g29#Ox9~DY*^M{PL9||3-go zH1Z3#iSfIn-I~yMLTohPI6q9TvakP?3SXazv=;kJJrmXfsG0Pbgn~B$Z&MR5FcCTr z{!(7+v?z3inUZ*ci7t%Q!q>vq7Y6|c3hIe`e~rmomcz2*W@W-k||Q#pmYi^bkOShRF(!Tz~IL5sAb%0$au zq7_<%{zgCwdKR59nvr_t)wu6D(c;IWAsUO#2He4jS5A7Z;Tc$I06;Z47wJ=`PGX2F z`30$U#20k^1vSQjx-kW6wgZ);pw4ulmQh(!HI8+lNFCzkaiHE!f%>rn6;M#` zV8RuRY)Yxo>p^Y`buHJdgqvb)c?OP`5c{ zy_5p=I|r&pK}~R=ev^XN?GDsT1%;)d?8iT+KuvU@W+|u)2kP|{sG$y2NI~t!co#hJ zVG2}F2Wp;zddY!0lmhkPI7Ny13TmkX^?phlUv{AC6coKLMU5vxoH(QQJ_jnIpe}cy z3R0kc=|D9pD0;4ovPx5+Mmtbh=iyV5HF-a-0VR7UP7EHAYM&@ z80$bhA#rJdr&c04XC1)Xai-4LyCTmyZ9F+>pV&j_?#T%@_98&+3;HJ)nCh9~e*A(-cC1?A6AM`l#pV8Qar)cB->OI={0G{|S z+W3fivORFBF&`FySQ0T4>*E|_gVkuZhH0 zQAO8lY3|k{X91f14!6#6NcLloD?6B|nqW1ahEJgpz_>P@+j8TBwLgV1Et@AJa}rfk znDvyf=kj#lEg*1~NTrQ55Uia&F;O)gB*I&+dYdwJqKOkn$hhXpDHBCmctkmB_X|a2 zV!>XO?{1&{3XK$9gi`W?wKvzoi?-@Is84Js9p8}&=YcwaP2sX$KB7dpkJ1@#(ow;6 zxtfHwRDmslCBllX%t~6rTPUP{9s5dJ@P$5$GP;xtBbT5&Lf||SUk&^F-C}AvJ8}GqfJX_G`*FY%>{uxR@NxPDTIkFR zu!7 zFOr>XGzuGPI1W9|YPt|TTpPjzx2CK*j@NN;dVd@WH@F^TaN8og;G67Z7lhRMq{=>X zCyBqgf*59)y4u3yhOpIgNk6jQc&kNi%jt4kt`s#$NHMzLkT2F+spfjzy#eOsKhRib zfD`H8W8VZMx?L@56X(K9?+YXQz&!Y9%OQda(TPjFdCLc4BdlHP`8C|-(J7SJp}_P> zL5l1|3l%W2x}#o%-Z3)+`hhv2%L@0Q-QyB1&cHYwCsrbAOF<5ax%KNFU<-s>&|1u& z_yCf``CzLW-;nt@m`w-H0BX#jw>Fh43SFH1W3A|TPAL~g0xMBoxB<{K<9X;(4iKt! z3M5tonPrbW$vJ;gWzTtsgzjHXe$93WN%FP~hdrU8RfxLqwP2o0C;@b)S}j?<*xlIf zSj=t><#`c1$O9((xj?B}M! z({MFFd$TOP4!vji0`_l_f`?(eCvgr) zY>SqUL0KMIB)e=!_)n?+ktiz59LxO@b5=24vcZUXM-@z&3y~qbuQ`Y1*Lqd?2s(>W zW0!H3Oc~$yMVq<%@YG1*a=|+g80Wp1G^*inaPGBY52G_SU>#_zb+=<0M7)oOe-A*g z#QutcG;IHAktRUZFT~bVVnDb@v;q%&$HXJwIRhcIi3v~R3p=Z3bykJ2m(y7_Z(jwD z+D(>`Q_T9ABz)_FpA>F`Looa)OJ}KoHok2ZW7@#$vc$jR%blHbGCQZuN;$u*w|k53 z;nxdai#ywI^#APYUmq>S<{0QLywX9{Xz5JxUQq^~%HlOH6_vQHiajXK8FzJz&xL0u zR4{ZMPXAgO;6q<$5|EQ3mE0^-R zZrGt`2%!7LOV-pY6SMs&q)xKBc!<-hrJ1RCpjHst zteJ&Sq%|ft+%hmE{nnxa;7tFkXC-PFwkLyOGK3tZcDayr(iZ~5s$4TW?zS-^F)##owcJP+YNLB5nzrt&n5_ywyQ6Oa)LewVKa;S z&HX`STlhryOqh}S4Dbm$IX&@yv-@p|ymr%6dEfWFinZG3Z08*M&PBaE@Za*Ydo#m> z_LU4t3;oD!qS~S#Trf9VTfR+OzNFvETcI^w={4?WM$?3h0?dJ8y>qPgRmlROprWG8 zaDStHbuWBY+;i^9=A}6(5nDT7KTkK!^( zDIdgkM)*WCh!d6JUTT}GAejGc?VretW8ef>e<%Sv`rJzM9?`Tz3+5JLA$*%xfB%xU z&$}BhGBvZVese2+jjx-gpID$L7KZxh?P-SiqN%K?KrZuSN1(g}%9~~V+LM<^$kONR zx`>IPx098;ZmhL#@wUY?jptZH-D~f&Xk%?#yu1G4C2+9Q4=)V;(Yh@ScsNJ^qL7t0 z>+R{u%H#E7K4QJ_9BG`z>E3CJ*7#Grs;c@rRqb`E%5@6jE*D(WIV_!k|{4SiAcbtta?YvJ6}%|_9i2NulD$Ng2teSB-0-lM?y8h307 z{xl94?-*a(ymTj746>h82#~*o6Q#Q>%PHJexJ|e;ZlD(n7G2(Jetgvexbhd^x!dXa zLfj9>GY?ubzmNJoQT_gazX-(_I62%G16o@?!Ntz>kpov9`>%S)(_o^tCR{`kuWM7PO1a9IF*U< zB;@g~o>-5*Iii=xs>^_bcq)M44|G`u7VFbdO(kx4E1G_fFVx2x??teQ@Ln;mxGf<3 z(ckk+O8VYru(+`G!ZCOFLMOqa5MedLU%?&U{a_9bE)LHG_u%|ucl^}NPs{S2+^WCd zji)tAL!xO(aPW9}z8ymU)Mv47A;W&OOJfXk8 z2u0Kr{|J0ixM`ZPQLWE0%gzsEWPn&}1%2&TV9oFL=krOQ_?ZWeqK}}!x6B8?$X8uI zuh+>w6iKhZBj!uD`Kmp#egdodFJ}EiQ9t&7>v7Nbm~K|x8R#gunz-Le1`_xli4W^1 zc}5~OXsC}lGFx0k0KEX8AFID){XLTPztV&4Kd(#u!@pnsqDr%*Sj3!7!Tb32_e|D* zG3y_S`mMUsWANvZ?R9CQ=(&=;{4M=s=e`bAp#9BrdwB$T7j)x9Yu$1GFL9u@yR@rd z_?(a%IvGFRb3>=#r$?^!>sv{KGV}rBGTbqpm^E8>+?RqO{QEs^)OBW~Y|O&O+WI|@ zKreEQ+YjIcp8n8tt>-Gk2NN$|4^*+${&@TZC8x-}*N5O;kaNc^UunzBBE4Wk;b)F% zF{^$Zixh^LIi8gpF?m6TW_5=QMf>f#R@VRZ@b9kQp7Y)HulUaTZ{dh~*It4{qO70& z`(6Db;z2#OiR##B;HmGKnKWrkhunz->QE>q8cGKKX7Crh-1}?oW{-BF&RqfXg&Mf| zV>KNR-Ho~HB!t(`pmSvotS~vSaRqDC5xp?)Kb!7)7%;SrzHX*aZ)h&TqIM#jH?!a% zKI6yY6Uc+?w9vI?i>OKGu7k04pzs@t{0X?geHzvaZajD)i-j&7)NNnw4X{-#13%Q> zFtPTA$>LSG&|AWYn0SGfxuAUjm&@wwN@71p*Wueq_9p|~vxHR}zevE;Nmt_>cs`CZ zO@;@-LC%Sj8MeU<7-}MvYhBy>zVtip0zQdZbo)lo#+JL_SHuN9jUnt0(|iDR_BM&D z)*x;x&{-m=StLVKb{BCZoT!v{?fC+@Vc`)KR7TklLWZC~tUJmyN9Dx-4y2ukcGDgB z_-4B~Jx%ogWIO#8Fk$qjbGW^OPLZ23<}g^26II11K7NujpOJRG68GhJi8i+a08xS` z;P-d3I4tG2M#(7yQ5dq#7w#{|5>Rgkm3bqW{n~K3XE+MNPK*2nCI$(DYC&}e>Tw4O zHZQ~v?h5s#1GUhBg6^V4Zs-cN64F7`c%=iCN2t=SP__d#%z?@$)M;IzdjCR|)yIJn zHm&^-Tq)QOa-cpLrrJ21Wo_*WHOhf%bD+2cj6B&DD&rPa<8K`(gl5tr4PBw~9jLGa zRYIt%yFyKIYW#@1Va6;E7W!e>K+Gb3ZZWA3bn_9y3v7}PN<1pp@I&*${na{2qjL? z3q}=O*y|=m`vDFVOd49GXV5qD^|S*u zi%|D5+CmP*^$x^5KvbnbEOa1B9fvWLKo09!it#&EE&7-q>FGYyM_ zGt8bs(LC2tG%fvkR86ZE1WD|LPas%%@6F!rA}ESTe29r+eV{ELla>|P6rKuAvCBO}wJG_Z{~P)5b0F2^Gj3m zZ({z{UGsmGl79vBFX@_}o{~R=`2)JK`*3B@&tvGCP$Uvm)tf~*Z$^N!np6$SAhBocc8Ldx2ii?RpAco$^Dv@ zsj7JN)^ALK?*gh~c~$mXYl!~>6v)~Be}O*?1V`bo(j@-S9qr%!1=__1KhfvG_G0t) zOl;P44KS4mp9VbgU7hbyfxnDmCG;YkfZrqOiz{*F<>8cs<)ak!Kv3e~o3p{;?65z- zS8ouvskMF57dm6qQv}fZH+z+P>To8(kCTG4eTjSLLpVq(H3?7dDkxIs<#`R87M>NK zD&$YK6gQ%&$Ie(F_=+=zT4~$zg@KO4>0`me$xSr88urrGxrkCa| z1np7pdEZuVpRV;@{4MomvcAmkt`FYB$7|=jTT|LNQqcSO?enuf|991gr9^hH=H~M3 zx}(WD?;ONYfTEsd1oNr6!eD~qhp8R`pnfb2+fGv63pgHAJTk6AY%JjHu?G-V=g9fb ze(HIy=?45*YQPwM!X(VNAMgT@(Ax6g5OjzBRa#SU2#iYOYt9*sbwNSm9>tRaR?Rol zMR{+Y*|ogzK(`Rzw-ut$lRrY9WQy_@9=E(#zh`+DBM@n~p(u_kMP5e-TO_7@o`4@= z-kzr|pFI@(SX_57BXr5j90=O-gT~(NA7Mw~0!-u=X6kL;Cj3B{mGrcmN{2=e>BIPH zM0*Hk!5o}(30LasgpBySFadz;#h3UbM~``pz4H5T>;AtDwBs+iLNpG%SR7^r4(yMpZ>wWnnt6qHjR^gHB63JZF%WXuKvh7L-DoL zBVZ&PXk(@C9#xj)7xo|OM^uKU2mIP{tYZ!WSr8S6y0*sf2_jP_8N*!cYaVOz) z)G*jMsP+@g(HVtXno0+sQ<~4s7+*c6o?gPZAoQZ9s=?w#R+kd5=ED~$^34E!Kez;S zJ*MVE$UGHz0!i=#d4xZA1-KIoV|Xt;;SG(|6KU{MEDOwcg>w;{#_QLy6x20C=v7_v zPj>TFY>|(z$1oB285{MD{(WsFTKUF(ZT&(|;Qf6cbiT~+gQh+YZV)gZj6lJ-`i-}+ z4afGl-#wJfd2$Y;Fv2-4BXJ(wIyhm2SWqWFj$H}jH`C6_Zvar6%hLiL*eRVDe36e) zaLQTe8c#+Bwn$rOJI05(xbIpNrZrhek;NcF?-M_lQ4&xrZoco1+eI-0$Xp-fO>wa1 z^m1RFxD=9umnDf}<}vW?2xEPlo!RzTZyeXvKSD^GY~!XZ{R4kEB-?8S5!XhG%x96e zE+MV>Xl*1Uqte~=+(qP?gZ zk%?rp4X-)MZ{{)T&8L6@XQP##2xIAl68%i@Ov&T)Wxs8*@5ucr!tj<7$EaH3W>n}rCcX93C?xYr++A6kUKt^i!3Bqde&?#y6u-cMWG<1u@k!} zsi>IPX9JrYCnh8y;lh=QDRCPG+{jUvqDw`myjX&#*dNhKboaLvX6buqE3oq=La|!( zMs$=P0|zYa4y_YZ?il1E8U3A#L6TMYJ+|9UN8HDVG9d4fk*SuYq^*~0``C> z#Vr(U{dLPF`Y;)Eu}tE`$ObWzrg%vhhE@xlhdEm%@S1LTGX5If*EI-m}6=^ zH*DZEVnxzz_)^ddkFH!(VBKZ(QFnO06K?ARp_M><{He#S5S* zZ{V6yQ!bS$N7$e>DB2?m;ZbNY0V*HbUiIsU6K73(!RJYJPR^igkF$PaX|+Ty#NX9@Z-(_^gIVH(Z{$!sTTlK2;<@$)UPf_fvVF^2;1P0gxK~u? z7kj`AR!be8IHY6vsu*9@-XNgMQlSZRt*B{U3UrXr^91xsE_4=10hp3L>7J-QA5Z)T z%E^fu`*&{DQQavPwh!4@%&+LW7oTHGf11OV2Cg^zkUuEq5pTTAl{?gl>;Z3*?K7}n zuRpPyE=Bt5cc2$RX-Xtf6IxsZq4X;;$1{*{=weO@ErK*KkPCgi_6Ga}@cC72QV0*E zB^)0ihwM|fk!~0U@-{1~TF%xABtifNC_B2x?KZ)G_OL(Fp8e3Nv}aSzlEck63HNd& z?z;}isg6k6g^aJDv5~paKQXH@jQZJHkS#XoZ?Ie(rBAgyODbK6DzKt;m8pD;WkykE zjFTzY6NT|?&P<*OPM2pY;Gvex59Cj-)i7usLWgdk^Y9r$ zNOtY}9C(qU@AJ{+cOIkf`(v0X|Itq?ibl+B}~AJ#8L2CkvBJ7W^?8b1}cR#IaKd1`Lf$I$;7MR2TNy zhq~cX5XIP6YMso=Jg7y^vF&K(YPFv3ii-|CQ#s4JrbtV7oosY3SW3p9y=A%7`P<>>3 zE<3V4bA9$%sy!8KPo;6SYESuax}!wPWqZm)K0#+!PNlTtzqfvCJLaMtivV(*b~r0P zH9nm7^bzfu|3lH9>(G{Y7z|nNIG#}0x}hvEq+jhdT{;Z$tieY|HWHmy?n`!>7Wsle zGl~&Q1WW_plnnWkDS!O@*-$zLPAG5*geOk@uQC>N!@dXUkq(CRShIZ=JOv@RtlP7V zuZ<0>Iyz8Jk39S{Y(3h&+L(Nj@s7UM7p>^qfqxq+4(DyCNaWepdx(f}IQ%As9+>$R zmR3cMwi@&PCXU<`3q5Nhtf62Ft8wLD8EW5ZyhbEnERv}mk8u}!%f!f;t{m#kVGNc& z4J|;J#U}Dr72ICR;X@F7sG2h<&!dD3unIE5;<=6uY<%%z-0(phr$Pak8-zcDm+*mrYB;Vu9+Fo}5JaLW=t^6^1Bb%}k&tveL zrT7V(yl04Y257KljibITew?Tr2rPIXj#@t+8159bfU0Lr$+jwe);wIKV(c_tGZ25O zyZ(Nzc5lV&xG}Z$)3it{tjz7 zGW)?i5_;Fz$Qj!1j{s3oHiE0MocMYXzY<3zL{G@o;Iz%Mso9WRTu-A}G2YGL%pZc& z$~}VB-l@i|EyhONP#~DB+?ThZyjz~ADXc=z1#|u=}N@Us3 z{oU)vH^7wax8Hw)Q+887>_?3fEJ7(y7D=?E@ZeWSG#8ZN;MR{Uy$Oq|q8_0u0fm== zY{DtBj_9Z|0HP%F8U7VK6%i4^RjW1c>Xx z*x8Vj#e_@>*?|gLyzY=yC z(LhPWBJ}}1DO2oKe*2L>l75wa|9A9z=QV-P|7Y|o16IeT-&qphW76*gesv`M4!$Z0 z?$U3f{l^C|d#*p>MB(Hk?Qdoz@CbVwqQr>0^Ui$ZfVr@kQIkww?58beI4TU^EVCqN z7MKkooZ_Vn8;fMYQ1_;A?jmRd=7R{jh&W>ca7Xy0*bXQP9Ou7{pf<*KeH9584hw&d zVj6aV;~>x&v)XSp)IgEMQ$FbcxmH5ChPrbTv&!s$tP--#Krm))@edjD<8Uu6vI}Kl z|1`7}j!%JNh5>#FS;amr5)dH%1uKfZ;TJFgWfJ1D5fy!KLhOAFnsIRtt#K%Ts20(X zxuhWv)ti}(=1UDte2O$w5+A7hz$trGCW+Ny@A(Zbk~p}kw|v`$H%cLK2M}^M%lGV6 zba}=5D}2ZD1E%7@)3h_Ird^V6%!E(XgiqBIr zja~(+h|;<-`Cs=-L`TcZq?}6rj%25_F(WGdp)&w1ZV*D_qUxJ5t29xRY}|7q6>-K2 zHx)00#~R7{9{%gFn%_B)==jU;e|0d?@%UdKK9FEMVsRN{wzg)I(NVa~4h!UPX!ZMk zE68h~r#>I~y+3C^*!vacW#8{};nN6mtmNk_$^zwrK4&D*iGyhiAORSR+34tOc=ogX ziOvau>|Jf04I~GidCaBZ2@nO(xwwI$L68P^nq4svC{GY54+OHOsPZes)gE2S&qMin zMn?z93_k5Z$jFZC0)Z|BwzKg)){FiZOVC)3m7>kssLf^?ukh~mjZvn3V;ry+`Vd8J z(1Ahi-ZtYcafN+s3M^!pS$-r1fjhH=u;Ga)f>N`Yxj_gcSX?I1fUoXtpAGSmYQTql z5OM?Zq2Ya4p5kvh^Nqt}7mcWdX7>~j1fPi!^fLss;0U^?%Lp3draB`ija+=Lo9v7r zF|hi($<7E81FMIdEJsk=K`|8e-s{u|^poSQ(@mCxNsYI5Bsg{r`hOhylC|W%1ifzuyotI^+NjtIz+3 z1Nc1kdFl77-5J39Rm01~0Coiz$E_Nx*&M4BU}D@R$7-$^s{t`q101VQsiMjSC$Ojh zWFW5b!0^n*@XW#R%GR% zm6d(GP8aZUM9Wdafjj@#UQZ0yQaMdD`(aFF*?-xJYEObjdC|&I!1Uo(OyPQK8jb+O z+5s#oklJJ%zAIEeuSK%mztgppD3XcwxZT)7{pj-^LO;^?%!hJBn=E?ApQ0Sibd)39 z*e#T!6CekGj{gYdC>zOACZ;Gyb%gDz9Gx8d1Ei7cpQL{DYos~)5i5Xx#PHIPs7gP| zNzsq8P<;;dqrX0vq96ScMd*inE_es4zx?#@c5qJyJ9_Yl3U8>In$Nv}Kx)oWY7g|C zY)AD0p&c>t&*oGy@d@69VBpnY)n=FN?61`zJS&BduuricpH5{o9N<&9frfZRVB}$x2 z_*p;o*-$l|sEWV2TcSC1l{24+8R8>18H7xV?lX}ifSI>DA6wuermlk3nhm(3vHcF1a8NN!% z>i7m$(+ru){SL+)r+gJMJ2r<%EIX6wQm&-P)16S4Qsn73FG+E?0m&>-$V*2n zrijJADmYyJo3MNQ)fJ0k|3dhO`0axGx!&$b!+Lu`F?SCvo#r~M?4`A?U?uB+>sBf&V(v zzR|jr^se!8OUIX(Q*7xOW&23(CSe?HTb@eS7mh{OecwUXU8_V}zAs%73#}_%Z~fkM zb@ch8>36xrDORTJL&vr+1pvj4>`LDgn0l1`1D-~l@xMNjzSrDK`et}i`8i(@_z6Ma zYyRT!bKyS0&l^SZWk~*C@^iIB>HE_C|Ae345u?^0ll*)1N0e&vIyFLJxlmBA*@epNKUzXwYH@b5FgnbJ;u5f zhdG1B?PH9rCdBVwwDArcoU-pZ`|E_5nx+|BIIIO8QeN4w7_4vb@$0+p``0({Tk5+) z)c5kgkK4X~4Eo;fd+w~`w{KSy+c)<3^+mpaeV2YqeK(2vc7Ai*_GNwl`nC=_PW$Wy zZ@_=^W>hBqH|JB`g$jN@rP(q^6VEVjO73&dgh8PkUhi6ja*&E0_RWXk{<57Nk}sG< z|ERJ6W@8bV3D!m^B$$nz9b3UaW;tf5&{j;fel9w!>4AI%G!~lUdyv9kKe++QSXymK zRboz={pTmtCe!H)9yWiK37^tg#yj2)juXTz(i-kY2@D(49^MOyS(|2Gb%NNx(Pswy z-tZsA0X`)NyC7B$#E_7wj&sPxhteBjXF>d^kFfqa8o6!?xxOxP+TGQVrLlvQf3!Od z)>ec97nw5yW34sf_`b7NdvcS-4Y(66NJoF8|7V-%(tIGnz_>`lq zDGL%jCtu6HAA8BMUU9R~%Bs6qmvqDp=|T2+j5^Tv!|=ZrBdhZRof zT(k_8bvgktQP}!CwqPR`*<&v*EH+9Tk&kL(FJ7S$5bT($cqq?Wp?%B?m&80TQM_m z5j*`{vS$%F^L(;hclJM6aVFN0Yi0(9vRlB9^8>xSHX$!$>W=^jwk`{thQ7~q_zhPD z;M+3>t!K^v2BBguqP6Gpn;$cCP{%=;J&@TpQ3Ai1H40P764n8*fyf zJu}c9w~>%dh*x*R-gQuLp-mP+AeHK~%L2U+OuoQqt8R;F-nQzk2YD%A)d=HI_1QSZ z-8n7)Jv2>nq-Z5R0w0q(y<1pHlq_|7N$0fT1Z0$q?j1mbjNBazHm%HMFd@G{m9^Pj z`D;4(t5hr^T>gS2Aa9)`c3>rSN6M zhjX8(fgFj;9?a5Aig$X-3GH*KtJUMi1oQwLe1*I%0%vvT^n^^Cta}T23>?y?UlKZ;9R^Wrt?xS-)I=>IEo=Q+7FCCOa4F^7g(=kk6c)pFe13237-YkXot|4hf5Kz?Zk89xgr zBi=EC3`ELn6mXP&IBjYIRdtUMfRJ;9<7`wwsG7Spf!!h7Z)~WtUuYr)rhQEcWY%VM zah4BV>iTjQm@OoZc{%Sb?`vENZ*>{lL>AqQS7Rj5^{u4TN}iTQp^kt4rl%Yp2Lei; zzG(qR?#{2M|GgqAm`oZK;Zj|3O-8e^9rc}Myb3xMrG>vl@WL~U(Y~U|+1LmqHM%e* z2;nRkjh|!zD7?eCIvaP~src05Pz}9yUuk5ct5I$J9`5z12`M5j`a>KHjLE1Tswef( zQ>*h4K+dYjg&08$%Z?BJ$=zct&*{ob(PHd1J~#f2yMmnP0jLibsrf?V&9Fybj}G?1 z#ZLMBvPWCP@9&F<2+Y3FTab_$MP&hh_;tWZH(|t6fO*F862=!SE&RNYrxHh{YleH* zuOt3qKD3``cPC}hzc~N6i0xePB|8`KWa&u^_Wn*c;-s6gDX4&NG#v*ZW6L>Y#eBe5 z=ZqKe683E#_yOXuf904S+;aLs8g_~zgTN7VzcGg)lGTSj^ndlxA{QZzZzJ@7jgaTk zjs1l?^iR_D1TM-wh$fl0s%y0 z`$s~n@_NEq=54w4A0L3FQ~xBb=YCCiF5`yHCww6uXUH|NX_bz6L0V)RN>PIl{RJ+o zF}7H@WS^w%>;6&Wkp_usUX51$l|0CMLvb};hpM43tgqv8m*ZWnwx8AGzfnqp%PH z<`#zL$WN&s4Zx>@423{IT&E18E5EWce7b#95g<@N= zN-;jwU-b$s%RY_K!3ak{y|D^Bh{Q-axH@(_{s=rTAc2lquwNC7mU_e?AOT+j_?Iyp zaXYe$2{3KAmFpwH*|9O)xNIx~Aeexw5TF_Q5XyKCd}z7)%%Z)?fU1MlXh!@rst@8z z#3G%P24aRadJl_1uA*CPe%A?l*FUZ9+9#O%NSKzerGH;0*H0w)jKq@IQ5}N`*ifXltZ6TA-MzVe0OPF!Q zd?4k&{pcJ@ls<7t6s-R;Wf5e8Hv}0FPBbGCtaPsl*dU1`N3`NJNR*N(Qk+apNs>hw zxb!wSCgr&d)HK$jZ?2Yj$ShP{l?YC_@+w3j73hu^6%SXv63Q{!g`Q&nlZ|!oMCXh^ zaqc^cn4)g)4gb+i1%5$7InL&C$k6 z&*AgL*DgoOdmK z^=_=$%*Q}QtT8x9F%t0Yvq->G28NB#KxBc8+B9fX2Y{!sK6z0Un%&Az5R*W*d9Dvf zafx+Yw;msApndMnO+?5a*T&ERlMBz9gvUa zPkc!9VTxVAGapMJnd~RNhEU?^Q{>yf#S3`G(q9(*@cQqZrqUr9@z`#6^7jbi|5I-M z0Z@3JS)g)9akk%UdqbPlIB6bHd9nme>QLc}v>TaJ;ZoB;xa$CM@ zcu{;OS2NdI<`D1#LybWwWLV}Em7w()P+j;tqwlX111J6ir;<51Fv69;KEf9+UkRd# zsN}#}*zw>~>BU*LI&>cBhdW}og=rwgaVBLT{ga?>urN~udC=^?kb`f8Qg9Sb+be0B1ld& zf``7%d5pwgj8Aeby#~>R@sw{IZopliw?Io0^!C-zXAejPa4L*sOEhP2G>XY|aS6Z* z6Kyt68<*khjL;i!vHz!W7|V|e^5u+7tdS~k|7Un)wZ1S7)BJyjrb8kYCT4V|X9`zhF zld(Y6B7eZ3(GPjU&!O91#8)0!EC_&rq>=Qy=EL8$WeY@A(A58mAG;fleW7KnH{3+L zjL)S#88u@eK>ISQ!`lT~;}pE%X^6JyOcKN%ikIG6BSXrO#M+8h^DceE*cJ8y$QdJc-kST;IpA)S1kIRSf_ChbWxi2~{Vo#p=Q z80DTR%FTr1TuuPt#III`{*Z-AjLq^a@N+{qq;#pmK|1_c{25Vyc{bsANc)&@P<}z^ z)On7F9BPSoju-)EGbtjAwg1o}Teld+Nq*o&=D`>7&GKDvJ4f2(070K&5d4&NlWjsh zqU96?xS!R&3$uQ#g2kxzjLpPc)T{cU%dsq82%zeV_TXw=p4&CA_HipjNTC)Xg{I=N zWyE>I*Eo|uKj2S8unh#~HL4K8q-t=ls-frLDkp?FXo9Mam@Q`3JsjM(im}fFIDzVm z5{P}h5k4K-imc0pX*mO%4v8W9oiw&=MqDhA+j5ky(4rXuXE1s=!IBkkclzH0HszT&%#2N!m z^wl#u#rCb74Yof9ha7k^0wvNm_D_reIjBB<;P%3%lSF#7?K-F*ObgwhAA}_%8(-=N(eJcV?CjwGaC!TMQ}Q%x z2U4uzzXbv)I=k)TH1AjDxrU(w#0y1uPVbh6vQ#%&)^is?-4u{O~G=6CHbBuuOOLCyNex<{9No& z1u$cgL(j*IiXlR%*x7g%{hW2|`Xt7(wl%-?dg9FjKdaK;G$wF%;UoqTBNivJ>cJ`SfIK@>i<|&?vY~XaCq}`-0x`bFgDN;6m=)r> z;IHt#k?e?Tq$|?MW7lFFHm9&~72b``!fmk&lj5qmaNCB`q1X+o%8!i`o~;x!EI9FO z2jz>9GT>+-bM1@ag~p;0B%1OSa9N3G-vt~c&2|x6Mr*i-dQv1nWyRIZTF}b+byRGG za<;E@h%eNi4bDbWbM?JmHx>`iwBhFKEZj~=qDXq!*FS~|QSkwcGHpdW6oiFyhqz&g zw8n2Z&Qn928yjOb(xTLPJh3@I$!LeC=Nk_LHz6KkZOFFYc-l2>%5lN<)TF{zdGOQz z{FhX6m%d9S*SA-D?uDoBfU#|cy%gTHhQ1On6hLGjC?=Q?URi=CEFAThR2H2y8((-9 zZi1Ns9yU_dus!+Ns*U>%yG zHNJ$uuoEDjQ--m=hPzwN0bc|69}2rn42jOwI3SymXO;M>FnY7FC|ue~Y4k8xpnLW5 zO0T)770p&3(lBMLY{Fl25ov3@!c0>5JW3)`BXt+;QY4y-97@OWnFJ|Gb4qNYYNTWB z+aZ?(XrL^aWuAVlG6#!9pS5TmMpaE6KCcSeHA@s_bD)*0q8$1r%jS1=f1-1Xf5xuomSl z4?_TtjRbt1S=c)0AX4TrMQ^);Ub9c)f+@_Lk^9kks|xWY@@atetQ>B=E4%%#GW(e0|iEd;Z*y%-1 zeJdZupH;c~%Fp7bB>4;0*xgYwBLHai37wF|e1GK&5^_hq9je@JXC zd4qCl13EEno34>tR|Iza4Nj%hfiR!xd5r~&FFp@h~=OUdmN74h$K#7 z)-66JdiNqC=ms)bO}BHjIK38 zOvm!XhcxZx9&ti>$H3E2#DcG6*H zjPT-)z~akcavFw7uJINqdKw7Yb)Zx-MQ8|)}HcNvn6%$ry9lbjbq|bc`U5O(fk?seu3e`8}qJm27eMw13dE7`Zlc0U& zVnOcsLu?b;f1C4uFj^_U|?}4%)KS_HJpj)2yuZsM#~9ooSY@#ESHI zAEkrQxbXlcOM_N;8P-FWvpKOs%5E_}SC-&2+*GqEzRS*g-0e`@zr!sx8hCNnL?zc| zeNv}|X7~({pvHD%i(Rr0LZY;cBD}_HP56bUZFjod&6qvL?&lGD2iku=g@`r5Z%26@ zJO;yb_u0vD%M^>&`D&#fEpcp^ExF>wts#QlNuBPX*q^5BT3<{)o7-v#|A8_x#c0 zG8wJJ7-7`->^paZm7x8UR*D6-eW#3CVK6?67Rl$*6nA49R~Fa$YwA!HHb+Dh#&JRW zi}}iJtVE0G$ilsTy?Mk5n{vhYjy$%AzVe88!cGj@7sH7HtjvOMM2et}7U2j3g|x_I zJdjFD6_u8{RMH|`_K5mpnIK9EWl0+MiBYL)MpdYZ^H>Jl-E#2=l}&n$_7v!I zSV36%c}VN#1q%P}+T9=GYX}IzZEC7GSylN8{mv)ar*_;Q0FoXj z(sP$)BqKc=Rl#VNXgB)p8Ocj?%0s|T7@kCYdD!BOPwlrb8=@W7qC9BVRl&*j;}47G ziz%8y>Takfl!ZwUd z494-mYUA>M7rh;hgTXQ&BhO|BkFzh!k}HVvj2I_5DL+K(SK@R4g3~OLEbzOBL_0*7 zIW=mO{v{)u)Wc^9$Y2_JhsC&ZkIS^8Apc%0{+5crmE!MM@pnAx*vajP+P;`MMoqRy z#!EOuv0)9^LQ@Q|A z#m!$gaRh9G{@NOvXr5$Yo1&8E@Qt8v&_Q#;kZ+(l#f+>xp*$H+L|Bfq{JjV@bU6%F z!M56Rj7n;ee~=bK@VNtm1{Z(n@B>Gu2=#&$xAgaWR1V|#iyYeGlvB`NtkNET853_J z{*a3IYo9*_{IdR`*L(6(qb}!ZGmQ=IX4g!dhrtqpF>HCl6%jzx*{N(bcz|C@9FS~^ z&^>d62!%vnY~YL~`od@akT#|k%)R=7Ug6CgX!#8AkvDK-)nc8Pyj~@#@<=_OBcW$(KB-Dze^5*gtc#F!d#m zppI6_L)2MYby9Y?o7_!7i;xDVxyjvCvIrs4-A#4^5%_pI^@|D4nO#nLPAfW9>flvq zAyS?A2W~PQQW>>C)cB;EEMussbH7WFY-P=1=MA-n_r0KOa`tRrQ`!01Bn@r|JilPX zmN`9;P=FisWZIbXv+16n0ncc0jgxpVI;hj)HoA@vMcV!?sP>fasuqHC z%(vA{&GJ8~xj@xiXkC#mYCiRUTQfQDKdE^+uFzuF4zsTCp~X4hRqwYpmrC}3Qt73t z(&5$>-B9Uis#0vzgP%@Ny?cV_U6D5Cgm39xj++0Z($^8-IaYxclr#Sy2xyDX$2;}Z zfm%a89yy<3Iu|-BTv`WP^Rlf5+87}OasBH_m}JCNuKI2SW-II64>8(W?X(E|;@T0J zt*mziVzX(Hz7%-HCiJ0a@g(NR=~$Fz-7h5`1=mlIfzgnalz5oB140+m8v3G1M@YTw z*k|ZbVIOeh7lMr=>B4?8Uei((s4c%j1Yn^+*cD{IUO}fOpBMm2dd-{Sg~KD{*ULu& z2*IbzdPUuI;p5mNDd)=e(9ukkzmuD)Gh+7+)0)4ONpeRGBr(wGGYsI zoFpl`q+IUdBs!8yoZ|oTC!(=w5Y!Z13fCPXbyWHVJ!YphA<)v~YzV4eO%>R{+M+EV zm98zhqCB}As(cZ%IYGevbspA$q ztday|fm#K$7NsiKhj&@gpcVr~_W%9PxpyA{TKoV1fA&*y_dMs!nKNh3%$zx`(5bAR zGFbHiwE+77Jzt%6+)jEjrsMWAQ1#Pm#F%vUla78)QT@O}ll}BUKaio1GZ+!8l9tGE z`*~JjtoMj98SDobnsTb@=Ty~CZ}gLK{C;{co#Xa%h3cozh%rv~11wF+RsCR*aXgr< ztKk`Qyz!9uzRP&tA5Xfdc8wU*i~RsgQ%+O;oTmDLuHx!m$M2^HYdP+CZbv_UvJI>@ z7lSf}d*k6!Ew~jdCGsv@Vnm-p-hq50+t0v^Z{s`5T(p?W2yDd_c0LRlB^F(ikZ-)d z>LJ^BA3=i1H7~+P3EU#8Tcsh7CE^#*JQSHti3j3(8##bcI|-6l@Dbn*KNI&Z>1%=8 zj3Ux2@e}V*CL)T4vW*6P486d!!g%c+|7{wBNRMNB<(rooP=(>KLz|nzpCKM6>KTkU z@*%wYr2igcz>Of(vd8i1JxV^i0%-^q4M#=vML!FNIqhp0xvD4O6KorUQC0HImsJ(; z%k0Q|FbX4G@#tFfr&eoQlxJaTc$-rImEG-aR>9s#GoMBv8{m)U0Z7DD+PICWWkwxP z=IiSh?F;c3s;g0eZGazIxIzF^xk_Z0^H`m^qMql7Q5`%-WG7-|BcMA@DGcV$pzgyO zTIS(VS>HX{nyuJxzzSoIo41s_| z?Mo3C#vfD5lLC>e?~Y$>C4T+?5|_MEq>}2MH*bZt+9o|Ud^z8l|KLC9oZHCz0DkF* zik4sq*_b9-r!YOdk3$#HSo$9PeV8?gYsXT&-mKP+S~eh%SH_~mTJCl02X3U_hUbh7 zcEyX4L(m@qpHA0=UIPn^>Mob3yd4Qk)n2#4AVHCvaOt z*%y>`0rrW_{wVDe7=YLoiuU2@bsrU-|qh*ye8^8LQ!g@Px)}Z>>?an&$ zUsTO)q;`H-oJba+dH+W1u`;z#xSlM1d*lwap47e1o2TK)uJ1t$LVY`Q?WXA35tuza z$%6!ujgX&lzx5pMDPa2{*&YU|EOOtdWEWkVV1h*EK-!>$7a(Q%y7pSul~R4 z(;2_tmitrm>E@a2Asj*v_0XpWfB}m`L7z_El%!9u^mr4>^oRI-kf1>e(4IwQ`XY&v zt`}07KI#w1rZRmhl<9b^V3Z01pjV4BJqA=4wYSW3)%04~Prtql7i;ti-29>m6?+4c z)%&X93Q@JL=geqps^Mi?505qG{*om}U34PePL;1)2WY`}r1qgc=~{3zJ}u?-+xP_0 zO*S8SP&71p#k6phiW#qBto!fDO4d44k$W;a)c0a1*#xa47O%aMwcuEc6(WODOYwce zWDvs@?xP?L)`O41)$PqpZy)?w+0S>ObyGVrAPgf|s*0uIGFOHAbh))a2|mLWIc!x8 zCrC>Y-ZvX-fkz05m>TQLpm45uDu5267s94*kP;AT?zUH7XxdPKo|f8 zFOL5TKo_1ctDFX~YzD)4>L!_Ig@oSoFT)HGe?_rbZj@q)@*i5dx_Kv9O1Xh$F73f~ z=z;aHHHneMR6&bBJInkhJvm02A8Jm~m7fAPAU|~Ff-bY^u#HKJVxkY4`FfnIA6uV1 zEpnpm_jfFPGA~a`sBmrdG|xb2pmnc1mre0o>yNZgeKD-}aeXm7w2U#( z7l+Gd5JRoCGh3(L+&XraP@gdMyEME;@j%iF(^x@RzRhw{lnG20qI%vl$gY)mbrwq#t#oMFQHAbx1Zt zn*h?LG<^&V2WY1Z&XH{2Z-O%J++bXd4MX{ZL0xi-f5(#NVXskpNXluy9dx5_dAqLzDzvG`tjE{4#ukr)-3N}+&pXLGQKqi>@_mvs0; zbQrk+X%;@FWa;~Hk!OdOcS{No2IXEc`7dveKF)FLAHexH){P^{Xx6ca0_UaqQ_Y9p zK$qdK(Q!dI7@NQ0yUCbq2e!j=gt8pvfFWr9rB4B2(1K?W5?-7KImn0pFw3C@%1iBE zKaqhGC6V03dQQ+m3eL2^`HG2zEWG_*Rgav6Wb=z)eBmV1xA_**d#!)jCeJL43?RBe zlO#D1WSm%uXUsuW4M=VY**!^g5{f2~X#tW6Ud$#@l4lN1XJl)}!$P9X@p$4-qebwG z1bse$1e-ozz?mJ?*aVqNb~I9_Vvbhq%$x*$x=EjpU#~VR+|bgNOowIx2kfjg^B)^9 zqA_DhqfMkyu8XoFU#D?r7H<{(hy~|QN5*aV0;iuRB(t&tH2Q>^ADd3mdtQ?N3fw$I zz|FONS88ra(5WnQTkyXKLuuJa)GFCuQB<2CPnIodmK#r00^A`SI-dJIGTwUD%QJyQ!{bdL6j(+X*+t=>;f*a^7%t?y45C(`A&Wp{vHuj7b> zOpcbJ7(Av#V`qMdUvT-5rWt+saqQawF^3U|vla-jFE40iIQ8WV@~v>{k{VbrmOrtj z+95_CV8i?E$m#+7!di?+R`;sk@erdkq~n)86n*usk})?cj{t5h`;{F6O=DPK9i?{F zzAS5*UOaXpwLCOVh>CH5oyr4N++@)WUjV?89S@8yHj+<}ioSU0iQ7EhLYlVvWsjeU zfNGZ4gCbNks34;+s5&@#OG3u>gXW`BWwD1c;c;SHHp*BRdx9(?jU5%)iHkoi{p9=wjs~(m91@m z`ccQw>iJl;OYcRJLY!%i|A5+@=^#Rfn25n6MaJ1=iBrG0w9uK=+6Dp!-u2TY^Ep z{SB%``Xf>N2k7IL%p zClPQ$Vh_g|@jY$zb~#PY#%tVhU>J8Q<{h`b2#_=%#HIKz z@L{gnuFT}`;fIl-AJo4zSKv{$Z{Q$yI$%K@Doa`Ndlc|*oSn=tF)mj*lGpPeqw=J~ zp(}Y8JJ-Jl2l4D29K|e#G7naW8IKVs`Pq$(7D9$q!-b4~Hw$$uR^DAv$#o62&2f_KS49bbB2JJnB5y!>K6Hya!zhGeNeU32y$&IXX0M;@rPjyv-e4$u4&iw^5I02#(%`Y?4mOzDuB^Fxg@q8=N+*e++K znI~aI;uLI-XR%JbyI>n!zbcIkqkL?zef};w3Dg@I^bdHmUN&@pHzZJ$X>Y#g{4;!E z_&km*#m??~t@)l2j=R?QH(a0`Omfko2UkjPZM8q5^tsX^ygv!~qNu%S7xIQ-OzHX% zK##MjP?^t#bE#06xvfdvKb>rjxs?76FZ{~#ckmkOiAS9ATQNFd+#M(J893Z`BN1-@ zE0PZPlduo*aIYSX=aIfpuP#%E`k4iq5z_H+j?@3# zkomSZr=jIwe+}^BkbVI7cwo^~w^yK;kb8NSz!9!E+mTjY9yb$0B5l5~gU>{K}?qsmDsRo;?}vB+r5fqd5SDXMJA zL=ZybU6lhvT;t%5J?Lc*dSS-4M8>J9Rmd&T18h)@xhYjXNMsC2t+HF?U_6bdr&Re% zBIAtIDxavFvry&Clqw&o3=e#C&%)T-O^l^Ib92b}2QnIT|KIQ@Cw}xU+R*?XC;Up6U&v}q$FJV;yx#cLH=frQzg+P=gb2zi-K+)5LBiS^w`%|A z%HP;lI~=A&0D{4k+lq@VBK}~ahjF4ECcv^LI(Qi-8k{H;Jo$Edm&)0q)@-{`9ktYB zUR0{dF(%oy=oS#D!F6jrD0goa9+a!DL{aiH_&*^>-BVhjeE6Ohl+2h)hGm?Y3b|3z#ZRz2v}5%7X~*6np)9v- z5B@zF1>4sZ0)lsT_h@_u8VBb&LwAD0EAndb&*}VU2>&^a|Kx(PT8b*{MP=rk1Jq1; z@SSVE7g1WOF|J50s7&-&$iQ+}Btp#EW-Mh9Kq%Y} zMF+EB#^n-&ebxb46q`N*`$EeNwHz+Rz8~BOqL;qWRt}$c(Ytve{;w;)j9r7t%uyRw zx48oepiDe)jD86)x0k}mV^r@!Ujcf?Zs6AIa*Wy&^txPaP5DWTNE*2zMgNCUU5HWT zVymLukd2Wsl94+xwsjoA@rFm|x1lmTc~E!>tlJ#hR-yteMf!5?xKGNw<@h+=gRc=f zVYvgCI?G8uicfKpe;IX2eJd;{`4ve{@(&|#-3)@d(|qa^$gIEP+_Qa1Cw+;4%Nx$` zornAKE^W~RSTgIr#x!eBcWMg)_!W7SlWx&B==O&~N2Svg-97`dZj;c-TJQ`MI(0 z-9&9ohyG{tA3u)8z;HBeP1w8^J{FK@Jcx|v%apJYJdf%f%wO*XyofaG^6zQ(Zy6O~ zw9N!Q7b+WS5i>+ za;A3_{#@_$iX5GW23ndtq5^<)7wGhz2H`m;xMTi_*#9@QLHxTv-J6L&gZud2YG^Bp z_oU!v`-wE=PrMeRf}^+43G*cgOw#Y3@HGH{tm|oBcY9B#a1WqhUr&IA2Ttue4WsT) zM{dKYXYr@Qwbj?VVH6BOh>5sqqDmcKIj&H{;%NO zWsn{jk5iH>fTH zF$v>^Up@!4B=Z|jvg(^3-HP$P{X{0hWo%yHa2%EYI`dy-KD5q8^KO)ZTyrV`HpZ4f z-;-&Ktts6;|Ad0AM)@>&PDJb`+KfbN@%c4>!uD=Jd*UfWb+O&%$##2FYf9gle@ejz zR(t-9F2Q&YBI_+pQ7KHojoe9q3NJ^W)9AnDxy7nxA4bzjjJv5_sTqJ{S086NABRO>w=vq4+`Yilb3G&%AU)Gw2BV_cjwbQ`iR#vE7}D(yt@U1ZyG(U^JG;eY zUR&NVzL)Rc%YG+h>270!8>a?iLbhJ(GA868WDXAMozA!qkxkEw&*k`HkMg47_BfO{J{t~V^G9SOPumN;2#yaU3MZVsI4Mi?Nrj_OS z1}grjtsb3*CkV>&y#EZ~T?73jZ8hF>_MTkU*Xtnwc79*)i2>Y;)&~ibOT-06*(fw! zXhJgdLD9cjs8;Rs_GBFT0fa9Bf6*?CpjbxM*IT4--~e-?`7&&HK}9n7c>%!BwRZ_d+eZybz(P)4JoQPD^$!EVmI7yD=HQ%s%fHJ^GG z;BFdHuqk+8Ua4+2WOjS6?D!PHZuVtp#>7k9q?LhMfOgNJK3Q( zUp&nH%&P5-{Fc=$e)$pe-%ib6mX!ZG^IuHOpPQ8b1oM}s=GP_V&tv|rsrkc`@~>z9 z)v5V|lJYNO{)MUeUrk8BKZN;OYW_P(`A23V|BHuG$Dfq{5%b?p&0m(3|2p$uOwFI0 zl>Y?tm!{^|CFRd!{;jF`!xQ=S=ErAJRvnKL*b#X*fLBTx&pF4qrU`N71{ogu-`2 z3pcBA#pyg9J*)k)-hA;4;%kUK9teWyk&$6>_-exTG1xf4m{U?W0XG!u5n5E7Rju{2 z@Us+rJ$Lod_^LBc8p@sO^%XRwh=Ey}m!?lL@cgaQxVD6i*Oe*r2;T+EUSQ7yZeCAj zvo`+Cc@3O@w3f8~hO>mV{;p^K)v5V|lJYNO{)MUeUyV=HAHsYsHUFKY{BjPb^NZyw zzJVQPx>C#_c{q0Eljq5~7Q7B>ewdj1tt$un!P|Q);6e-}P(fo}4F?7Nw^VsUDglMU zN+gjbedhtk!l3CV9#73qW>%Pk$mM{^y!)oOvB(;Ko%ufn#P@grXyF@hAha*=;Cvd9iA*`W&72JnPA=Zw(hC(U(9p#fc^Bn2_t!2mP-*Tt;&;9@4 zIQ?699##LNj@3WpBlDSjVxUGKNEj0+7t-H*UYUwK8u%x157oY(s(n7mr&Rk3$0n)% ztN_+2$kT#w7C7ojzPo{9ygqjZqv$+cBk21tpD;^)|1XXyEyyLDL4CuT`du&g- z`K6Vw-b)jVC~fQgRt7D17R{*p;8wh-+pYZnLBr-V2=B}OZFv_e9dp|`oYThpA%-dy zvgJdWOx0SD8Zz}(;#ruBDu<)AkN29SiRr7l2`jC#QYoK^e6*re%D)noGFN1Exusaf z@~Kuu;*;X@5&6^$eFwZp@3#irrWP4BRqCEFR}vbEc&}6p?r3~oiyQzGVYFA+OH*102uzSF+(*A}`1LEI;s0;m zH~jUwFOU1a;YT^_@2cbX7x?e{yW)8LK^Yo1SF58>Z6$=J;Sh2V5wmgV+BE3rvCB|{ z-XCmy7@zKF?@fi|tPCiy2i8tBU%o`N;Ym#1hX*BcH<*upKe4@A{E+<_Vq6zz40sBl zTD~z6X0yf;bX<(~5#!t8aIsf^do>i~FgD|S2VsJL(Q}_!wC=dj^N8d1d3V}1| zHxAM^9;5|j0ETt5i(jXz1~|2{!q!kI{+kIqCcmqX(fDw!Yrbz}67S(Pa$_0Bm4 zI`6qNfllx3m~WsGa|>7diM8hS#VS+165v0SmDSG%<(N0hR z95_M1bg+`k-^2&$mYL_{gU5(G^N+9EepW6#nUf$5->Gttu;dG+*B_{0iS9JV01|5m zBCozetedwFAv}YR1CRa*msFZe5)4WL46d#M7|x!R&|82ii38OG-$T^t2FqCRYTe(v zYqa1y`X}?nYvOR(@&ec1z-$svb1R64mY0P0Qm#=^hPy^{;7l+ViY3@lYHt^-gmLTMn%R2IZQ7ch zH}8^5m{E7ZPF}*?DHkxWxLx0d1JetXYSqF_ntz;sPauYeEaLXWz&Y#=T^SQ-1aNpq z$NTKj;k9#)*Wu{73~Lh^#SS^&A@yV+7C2HDm1EmX<_~q|*Qb*B9$U!8z@wm2pTVID z@DwI<``R+tB*5ew^g}={ymAEDnTW14$TJUq?~%V10bfls;h!D!F938q1)nQ!h}2u6Fvv zuJD)=LTs6s%f-YT9-YMNN9WQg9UkokJB>lU=KPyW&_l2JLC(%Jt7Y53F~q{7ZRZfX z$tiKWNrU!9I}Y6gGp?gr8{_#(yR|$!o`QIVQ_R(FOn&$bG!HjRiN14f7Ix~yo<186 zdTVfzA6!{mGg>}Q@c%1ATZA_Q9ic@g4btcHUzFgkIt+j9kUS)(kn>S(jkBczw-?xBk=KS5(W$2u3KnRp-q z+g^@56$5X**hB3A6En?-8fo4ExO$%rH8>c-1+Dej=1}-Y>eV^s++R=~+js*2R*EuU zz`TAHqI}}4;u~v?qq(WY?eJY|RA+?{vf}zIqG4eUrYcdAo`m54CC9#d=2^6WbzvVB;xQ8V;(v;2e z_HYY?E<|LGxLcr-IqGjqY?3OT9fDT7uv0eZ8QPkw`|=IZad4QL@4DWJcxf02d;?84 zqDX6New?nY8Mz6sm^QSGyxxhYT*VphTSq@_IhdPRn$KW>QN3?RHwtpfyj*T-&;!&CtNMm@4shuntx|ZuP!#m&4AIWH=Jwn zBU~-(0U-zlF;L<630I386c>9GA8Ba$_OCR|_65_$cP~KKk+~IMMQ+3FB=8GE@|k#R z;xr`U)7kINA^5X9UEKztE%o5HG@eEdTa2rrCDN#YgM9>nRtA&rYowJgSZwMw<*XDXtvt8Rnl)B6FPILgom|y9dYdKH+lN zg^lWb-Z`XSygoX=^tU@{YzxrR;QtjZU};8gb0@+G8r8+9b-Z&v4Ee{+gUi!#@-Rj` z-IJ;`u|sO7JZv9OaOm-vRUmuE~8o54-p`4SM&s%zu_sa z4Pg74zOB>+JJbi)MfUJ~A2;Ay<))aQ_9Hu+h}P=s0QzNs5|*MhXPpVHRO}&or&#aG zgC*347M+Upy4rek*%~>3p$3CK+eW*#>x$YFzpy@KUXO0Yf#;Rj%2lcrX(7IUPd29z zrZ--nZ>?X3gex@0z!c@Z1vi`Or(z0&PZ6^Ev9HpX$w-GU@`*g%pubst&FTk`26+S^ z^D_Nzqk1ZsUWHLz0{MIj-o`0MYsidGRSM-HBRs~k7jbakw?~KZSehhqR&)h#!MJ|Z z`!giizF~hVQF~%Y%6p4c*|;)D3-A`3lvld0pR4kbp`2|@v*^iET?ZFfMO;Y)q0Sqr z<*v2LX((su>+8%n2608)GEc1tD0kp@Jp}!O9(R)k7JGUUCiJC@BFO!8vKh|gd|ZI) z&<&xQ@i=`Dz)^XU^uV-mxva-fK(FK0SqL!bwpND_ z!rrSfx^cqPy0ngklj?+yJ$i@=#l0bHQ1!86#n zVV=}ZEz(yZHne>5BWL;Yo9{`R>pK&! zf9XX#;6-sts4hL41^)=~$3Vh~ezUMF^N!CMnAe5VoAT!p@6n_L;b&9KFP-Q${C)JQ z_!(_*JVar!f-_!?H>12&xRT+kGM<#pb(eQ!(Y|PZ_&>lm@k1bE7=d*mo_BrHOPant zU^mi39tG5daFW00=1a0kRtuAgfk$ul&;N<`2Usc}U zqMbH_61>)%!wLGPry4DUWf5Ty#u0`9IH85LY2A2X_k&rzYOzi?+Y{)+ouZ0fg1pm0 zb-kh*J32Q0oIL$1e=LNK72YKYmc8`00U(#o(*XjI28Cfi;{lEeV{%1?QV_hu5vk*v zzk~5g5Rk*+1`%a>@anYv<^Qa(XqWk;436c!J2Mm4@ALBLuQ8M5;Gyi95?j4^Boqb@ zx&Q@;;d?t3Q7n0sB(hM09Kjg0Sh}uIz>|ww_;d#M`SKMVhN|2J8@#utbxVr~wH$lU z1VT^;c4;?WssG4WLfCN<9;Rn|^lgx(e{43u3)aY{+_;|4x@Jjbe7Mc5&0y)cw1Udd z1^|+8{Ilg~&vyf%kj{L|h*tx^U?kQm*MchnZp+4DNJ%};+N z5avfNBNAoajTeLt_jwy~WSqzcR$^onewjCni8BV9-=)qUlu72@{m3iMyaRJ)DV3KC z-ivlXfslh?@)4QkJh7=s#L}ua|FlWiQtY?6K-MhYA;;iM|#ZxiM?5?{raB_n*}lZ`H(>59pa0}eLqT13&PBDM$ zAp02NBl|!lx8X2kU1J46e#VNh;Ce{l+JN;Hj=O$_+v;CM9}a_FN?aF@%oe2CqfCEk7ROwM|+djqICztPYP1&1z>p^L~sP=k#`+6Q;uhi8&zImstbYbwA|ost|; z9!zXD*C!wc0TU+j5m_2j%-1*Az%N^xy+e!H?4ybdn{yKjY3C9j@- z1ar1&$sCbao&MLi0dr~IxyBRZoxxp=eT^kDXdfJNNM^fkr^t~L^5=7!%+Jq-y<}6!Uxr`0(_?;w-@qY- z-nr=z@Kz)6Fugb#2OXYFc+A(jG_j1ACXzz(FC$M6`-unshdupTOl-aR+V2#?HvvLC z$1L{WStIZY>N6-MJ$X;0+h=1MUKjn=y#9YcfqxPFnC1lhU?WGJl)|zi*iTrfgkRi!_1}&e0JG$@aSM}E$4nY{u_1a`X%qNojh%zm$}kK5 zBQfvg*nnouC(%*hLVQPR1~^>KQmip=Q)O8h2n(_fw8M;RZ(jKhsmXVN;?uD2F8BN% zJy;4|EqDPcw`?SvPL_O7aiCPhJHFj!Z}o|r=jOk5usQD<8#W%72@_?8asZkq58eYP zYs()-nH|72k8pSwfXkLNmpJgA6=p@Cdrq3u0yMX>DZ5!|5}Y`X@wTki5-n+gVwSgC zJJ)XQdaJdQ{#|SNaoEKFQo*JLJ|RP}Tjb+p0$-NZ;zs7e{tx~z0jFKG@h0#uDcD0Q z(_+mfXKR5^fkjBF#rkG*Lkrog7BK9VI#m>hz}>2!e3UCRAGb>JJzeSVF{{)hB-CO# z-@~N}JQOEC1fBU~NVt4Dppe>q_-mqDJU51a4|Fv9ZfV}*S_{tP@D0GZpAS<(0UW9< z=LJ%#H41e`(9H^0Ie;a+aL9j=06j!w|5s+99_|ib-Jw@0-91!!ty?H=~r~)JWF0$#i$>yowVBx&6;K$Te!9JsJX!(r9XSpB* zggA|gCSGKyXfh^d@h(F>?loi?^|;sIHtKP&Asbn+Jwkz|*Pg>-^~3bG#n=#ydzwU! z3Xhq_?9kQI{Nd^0Mc)8O{uVnGZa(0rn5s}byy!aMN(wLKS4;Q?{2Lx~X}r9@<8oEF znuZ{3cHYtGQsIrB>&1W`{^+^t4_B|F=Nij^K{| z-T?r47C=8BIK2dLGP>cDFR0yd43u$AMq>_R2wv9rtSE1m1#e!=28|l-mztgS1Bm|~|E1@R#`Y&PLCzAn9Yv>bO z26D5Ri@O+SbL+?>k3YsWNqPAMs6!lfXZ_4Gs-`zXGnrE#TcI{fHraX@?I0UWWNhus zv#MOpso5XKvny+7o>}GWk^MTd*XChCBK|?g-d@I}<a$DVn*ch$h}tQ4bco*FVfHdA1C`p--P!`T z6Mco#{4rc1e}~^Ox9`IP2ugzMn_mEy^^B1k{R8%$S!rlxXzk1sW~CjC9sLFLV^rY0 zt1UfMK8NwMEsm7h+L;$uxtqZ!a+0vxcn+5JBwWKtb9nm_0i$y{cqBNSNB|9&a{wTf z$T;qyT%U?Axf30OF7=rx#z_u-@)L-Qys5qT47GjQ7i&STqL1jkiw`ryWgR(X7J+Za$VH5;D zA-&@Ry#)q?dZbG2%;H&&K#!T%T62+4Tjsf_h4ncaZ;C+G4DRo?^cD9s8B5uiwk8X~ zc+&Ck$23wzpw(U@D2@^86~(3R`L?4K04y$HiKs0})4A|50*D!H<_7^>0Hn?;ubp|( ztn!|8skQPxxwaY?iparu%^sJP0b2CRHoxiK-fb*zSqWwyddURkz(#teQRhK^Hg09< zb=`*$`{OuO@dfL5P$q< z_yz&WwKkL(>abAONqWmmL_9b3`(MUa={E08`g;YNpqS^i`D{k(dmsIWTUH{M!wVJD z9i=3cE&3R}t6&?R-bQJ?SrtQj*Q;<&R%{0J7y*y_ViYUsySL2>Xe@21b?dYgsQu?cZaS_)5m!* z5B9tYwM_y>z?;>?yRXE{%|l&4T^9nzI# ztVT%`wSI_gC;DsA@8I-0`Jcq^w>J>K3_4Z_7E%l;z9jAmoJ$BBb8)V?AINP8mwRgY zFCxN1<}OB{noC#!5?ifj;>_l%VQ~NeJ1Lg>;ItSIXHJCv#^iyWJ zaSFtvpJ9BDuk5%p5x3!{Z!7Vvt>DuJ2xV7Vv%=v!9m}{T zu1==@KmI(f=$UjBGA27i*%SSpwP~MZOvWBO@zs%yo_jZCH0F;u*}L8_ronoSl~L1r zvSCawm+xK&(wx3$3=&OtdT&8J{2=0XdI8hT+7| zql@ta93NX;HZ3~Q9Fgyg-@nAII2iMtk9f}hBbR&c@E>veOyi|)CL^S$552!m`95CM z`zPG@spo#!venxA-K71*IS4x<ad;(dO|2 zU&|35yS$@N+*tk+#ZBC>gYBM0>pO6u7%SOFj0Up@Ax~;&r;2|#gboDgh6|0 zo!GLGlO`Ih*C}O1mT|FM0KX2qZ?(UeZU4Y@cVt{=2XCfahsEI1JB+)UfMuugB=^Gj z^wS`QlL3Mazl;e5`Q@TemenZrjW~Lv2<5ogrC1aQk5A2<;(|-6@QL|!c9>4x=|K

*VdUGyXA?sMm@u;F}`)v@pN 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%0D2KGB%5hi>Y@-tYb*h6 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

2X% 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