From 72fd6d26e93e0afa6787e8c6b03a02ceab6be434 Mon Sep 17 00:00:00 2001 From: Whatstone <166147148+whatston3@users.noreply.github.com> Date: Mon, 22 Jul 2024 19:49:28 -0400 Subject: [PATCH] Add FuelVend vendor. (#1601) * FuelVend, rough draft * FuelVend fixes * FuelVend pt 2 * Infinite vending supplies * Infinite tank dispenser inventory * syntax fix * Revert EngiVend, gas dispensor, youtool, fuel pack * FuelVend costs for plasma, uranium, AME jars * Add welding fuel to the FuelVend, revalue uranium * fix VendPrice field * FuelVend cleanup * meta whitespace, remove CostType enum * Fix FuelVend license * rewrite VendingMachineSystem infinite comment * Plasma, uranium values, override if vend present * Fix vend order (prefer staticprice vs. stackprice) * Cleanup * Update frontier.yml * Update flatpackvend.yml * Update vending_machines.yml --------- Co-authored-by: Dvir Co-authored-by: ErhardSteinhauer <65374927+ErhardSteinhauer@users.noreply.github.com> Co-authored-by: Dvir <39403717+dvir001@users.noreply.github.com> --- .../UI/VendingMachineMenu.xaml.cs | 31 ++- Content.Server/Cargo/Systems/PricingSystem.cs | 20 +- .../VendingMachines/VendingMachineSystem.cs | 14 +- .../Cargo/Components/StackPriceComponent.cs | 5 + .../SharedVendingMachineSystem.cs | 9 + .../_NF/advertisements/vending/fuelvend.ftl | 20 ++ Resources/Maps/_NF/Outpost/frontier.yml | 219 ++++++++---------- .../Catalog/Cargo/cargo_engines.yml | 6 +- .../VendingMachines/Inventories/medical.yml | 2 +- .../Objects/Materials/Sheets/other.yml | 9 + .../Entities/Objects/Power/antimatter_jar.yml | 4 + .../Objects/Specific/chemical-containers.yml | 5 + .../Advertisements/fuelvend.yml | 11 + .../Inventories/expeditionaryflatpackvend.yml | 10 +- .../Inventories/flatpackvend.yml | 49 ++-- .../VendingMachines/Inventories/fuelvend.yml | 10 + .../Structures/Machines/vending_machines.yml | 29 +++ .../VendingMachines/fuelvend.rsi/broken.png | Bin 0 -> 1061 bytes .../fuelvend.rsi/deny-unshaded.png | Bin 0 -> 528 bytes .../fuelvend.rsi/eject-unshaded.png | Bin 0 -> 750 bytes .../VendingMachines/fuelvend.rsi/meta.json | 66 ++++++ .../fuelvend.rsi/normal-unshaded.png | Bin 0 -> 511 bytes .../VendingMachines/fuelvend.rsi/off.png | Bin 0 -> 737 bytes .../VendingMachines/fuelvend.rsi/panel.png | Bin 0 -> 189 bytes 24 files changed, 355 insertions(+), 164 deletions(-) create mode 100644 Resources/Locale/en-US/_NF/advertisements/vending/fuelvend.ftl create mode 100644 Resources/Prototypes/_NF/Catalog/VendingMachines/Advertisements/fuelvend.yml create mode 100644 Resources/Prototypes/_NF/Catalog/VendingMachines/Inventories/fuelvend.yml create mode 100644 Resources/Textures/_NF/Structures/Machines/VendingMachines/fuelvend.rsi/broken.png create mode 100644 Resources/Textures/_NF/Structures/Machines/VendingMachines/fuelvend.rsi/deny-unshaded.png create mode 100644 Resources/Textures/_NF/Structures/Machines/VendingMachines/fuelvend.rsi/eject-unshaded.png create mode 100644 Resources/Textures/_NF/Structures/Machines/VendingMachines/fuelvend.rsi/meta.json create mode 100644 Resources/Textures/_NF/Structures/Machines/VendingMachines/fuelvend.rsi/normal-unshaded.png create mode 100644 Resources/Textures/_NF/Structures/Machines/VendingMachines/fuelvend.rsi/off.png create mode 100644 Resources/Textures/_NF/Structures/Machines/VendingMachines/fuelvend.rsi/panel.png diff --git a/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs b/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs index 977d4abe3e6..d612248ab7e 100644 --- a/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs +++ b/Content.Client/VendingMachines/UI/VendingMachineMenu.xaml.cs @@ -148,15 +148,34 @@ public void Populate(List inventory, float priceMo } } - // This block exists to allow the VendPrice flag to set a vending machine item price. - if (prototype != null && prototype.TryGetComponent(out var vendPriceComponent) && vendPriceComponent.VendPrice != 0 && cost <= (float) vendPriceComponent.VendPrice) + // Frontier: calculate vending price (this duplicates Content.Server.PricingSystem.GetVendPrice - this should be moved to Content.Shared if possible) + if (prototype != null) { - var price = (float) vendPriceComponent.VendPrice; - cost = (int) price; + var price = 0.0; + + if (prototype.TryGetComponent(out var staticComp) && staticComp.VendPrice > 0.0) + { + price += staticComp.VendPrice; + } + else if (prototype.TryGetComponent(out var stackComp) && stackComp.VendPrice > 0.0) + { + price += stackComp.VendPrice; + } + + // If there is anything that explicitly sets vending price - higher OR lower, override the base. + if (price > 0.0) { + cost = (int) price; + } } - // This block exists to allow the VendPrice flag to set a vending machine item price. + // End Frontier - vendingItem.Text = $"[${cost}] {itemName} [{entry.Amount}]"; + // New Frontiers - Unlimited vending - support items with unlimited vending stock. + // This code is licensed under AGPLv3. See AGPLv3.txt + if (entry.Amount != uint.MaxValue) + vendingItem.Text = $"[${cost}] {itemName} [{entry.Amount}]"; + else + vendingItem.Text = $"[${cost}] {itemName}"; + // End of modified code vendingItem.Icon = icon; filteredInventory.Add(i); } diff --git a/Content.Server/Cargo/Systems/PricingSystem.cs b/Content.Server/Cargo/Systems/PricingSystem.cs index 7d93fa7fa01..9aa3bdf284b 100644 --- a/Content.Server/Cargo/Systems/PricingSystem.cs +++ b/Content.Server/Cargo/Systems/PricingSystem.cs @@ -17,7 +17,8 @@ using Robust.Shared.Map.Components; using Robust.Shared.Prototypes; using Robust.Shared.Utility; -using Content.Server.Materials.Components; // Frontier +using Content.Server.Materials.Components; +using System.Security.AccessControl; // Frontier namespace Content.Server.Cargo.Systems; @@ -380,18 +381,29 @@ private double GetStaticPrice(EntityPrototype prototype) return price; } + // New Frontiers - Stack Vendor Prices - Gets overwrite values for vendor prices. + // This code is licensed under AGPLv3. See AGPLv3.txt private double GetVendPrice(EntityPrototype prototype) { var price = 0.0; - if (prototype.Components.TryGetValue(_factory.GetComponentName(typeof(StaticPriceComponent)), out var vendProto)) + // Prefer static price to stack price component, take the first positive value read. + if (prototype.Components.TryGetValue(_factory.GetComponentName(typeof(StaticPriceComponent)), out var staticProto)) + { + var staticComp = (StaticPriceComponent) staticProto.Component; + if (staticComp.VendPrice > 0.0) + price += staticComp.VendPrice; + } + if (price == 0.0 && prototype.Components.TryGetValue(_factory.GetComponentName(typeof(StackPriceComponent)), out var stackProto)) { - var vendPrice = (StaticPriceComponent) vendProto.Component; - price += vendPrice.VendPrice; + var stackComp = (StackPriceComponent) stackProto.Component; + if (stackComp.VendPrice > 0.0) + price += stackComp.VendPrice; } return price; } + // End of modified code /// /// Appraises a grid, this is mainly meant to be used by yarrs. diff --git a/Content.Server/VendingMachines/VendingMachineSystem.cs b/Content.Server/VendingMachines/VendingMachineSystem.cs index 1ee7cca8e1c..f53fa7d7f21 100644 --- a/Content.Server/VendingMachines/VendingMachineSystem.cs +++ b/Content.Server/VendingMachines/VendingMachineSystem.cs @@ -357,7 +357,13 @@ public bool TryEjectVendorItem(EntityUid uid, InventoryType type, string itemId, if (TryComp(uid, out SpeakOnUIClosedComponent? speakComponent)) _speakOnUIClosed.TrySetFlag((uid, speakComponent)); - entry.Amount--; + // New Frontiers - Unlimited vending - support items with unlimited vending stock. + // This code is licensed under AGPLv3. See AGPLv3.txt + + // Infinite supplies must stay infinite. + if (entry.Amount != uint.MaxValue) + entry.Amount--; + // End of modified code UpdateVendingMachineInterfaceState(uid, vendComponent, balance); TryUpdateVisualState(uid, vendComponent); Audio.PlayPvs(vendComponent.SoundVend, uid); @@ -394,11 +400,11 @@ public void AuthorizedVend(EntityUid uid, EntityUid sender, InventoryType type, var totalPrice = (int) price; - // This block exists to allow the VendPrice flag to set a vending machine item price. + // Frontier: if any price has a vendor price, explicitly use its value - higher OR lower, over others. var priceVend = _pricing.GetEstimatedVendPrice(proto); - if (priceVend != null && totalPrice <= (int) priceVend) + if (priceVend > 0.0) // if vending price exists, overwrite it. totalPrice = (int) priceVend; - // This block exists to allow the VendPrice flag to set a vending machine item price. + // End Frontier if (IsAuthorized(uid, sender, component)) { diff --git a/Content.Shared/Cargo/Components/StackPriceComponent.cs b/Content.Shared/Cargo/Components/StackPriceComponent.cs index aa0dc839a66..4f36bafdf8c 100644 --- a/Content.Shared/Cargo/Components/StackPriceComponent.cs +++ b/Content.Shared/Cargo/Components/StackPriceComponent.cs @@ -11,4 +11,9 @@ public sealed partial class StackPriceComponent : Component /// [DataField("price", required: true)] public double Price; + /// + /// The price a full stack of this object sells for from a vendor. + /// + [DataField] + public double VendPrice; } diff --git a/Content.Shared/VendingMachines/SharedVendingMachineSystem.cs b/Content.Shared/VendingMachines/SharedVendingMachineSystem.cs index 59f8489ac62..b72c291d360 100644 --- a/Content.Shared/VendingMachines/SharedVendingMachineSystem.cs +++ b/Content.Shared/VendingMachines/SharedVendingMachineSystem.cs @@ -118,7 +118,14 @@ private void AddInventoryFromPrototype(EntityUid uid, Dictionary? restock = (uint) Math.Floor(amount * result / chanceOfMissingStock); } + // New Frontiers - Unlimited vending - support items with unlimited vending stock. + // This code is licensed under AGPLv3. See AGPLv3.txt if (inventory.TryGetValue(id, out var entry)) + { + // Frontier: Max value is reserved for unlimited items, this should not be restocked. + if (entry.Amount == uint.MaxValue) + continue; + // Prevent a machine's stock from going over three times // the prototype's normal amount. This is an arbitrary // number and meant to be a convenience for someone @@ -126,8 +133,10 @@ private void AddInventoryFromPrototype(EntityUid uid, Dictionary? // all the items just to restock one empty slot without // losing the rest of the restock. entry.Amount = Math.Min(entry.Amount + amount, 3 * restock); + } else inventory.Add(id, new VendingMachineInventoryEntry(type, id, restock)); + // End of modified code } } } diff --git a/Resources/Locale/en-US/_NF/advertisements/vending/fuelvend.ftl b/Resources/Locale/en-US/_NF/advertisements/vending/fuelvend.ftl new file mode 100644 index 00000000000..64ff70dd3ba --- /dev/null +++ b/Resources/Locale/en-US/_NF/advertisements/vending/fuelvend.ftl @@ -0,0 +1,20 @@ +advertisement-fuelvend-1 = LOAD THE SPACESHIP WITH THE ROCKET FUEL! +advertisement-fuelvend-2 = In a rush? Get some fuel! +advertisement-fuelvend-3 = We've got rates you won't believe are legal! +advertisement-fuelvend-4 = Checked the pumps lately? +advertisement-fuelvend-5 = Headed out? Fuel up! +advertisement-fuelvend-6 = Fuel up! Coal-free since 2520. +advertisement-fuelvend-7 = GAS, GAS, GAS! +advertisement-fuelvend-8 = Plasma? Uranium? AME? Got you covered. +advertisement-fuelvend-9 = Need energy? No time? Buy some fuel! +advertisement-fuelvend-10 = Locally sourced? Ha. Get some fuel. +advertisement-fuelvend-11 = Is your generator running? Better go and fuel it! +advertisement-fuelvend-12 = What's the anti-matter? No fuel? + +goodbye-fuelvend-1 = Another dissatisfied customer. +goodbye-fuelvend-2 = You'll be back. +goodbye-fuelvend-3 = Hit the road, you're taking up my time. +goodbye-fuelvend-4 = Don't let the airlock hit you on the way out. +goodbye-fuelvend-5 = Best of luck out there, chump. +goodbye-fuelvend-6 = Yeah, yeah, get lost. +goodbye-fuelvend-7 = You're still here? Huh. diff --git a/Resources/Maps/_NF/Outpost/frontier.yml b/Resources/Maps/_NF/Outpost/frontier.yml index dc097232da7..3b1042c70b8 100644 --- a/Resources/Maps/_NF/Outpost/frontier.yml +++ b/Resources/Maps/_NF/Outpost/frontier.yml @@ -77,7 +77,7 @@ entities: version: 6 -3,0: ind: -3,0 - tiles: fQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAbwAAAAABfQAAAAAAXAAAAAACXAAAAAADXAAAAAACXAAAAAACXAAAAAABXAAAAAABXAAAAAAAXAAAAAADXAAAAAABXAAAAAACXAAAAAAAXAAAAAABXAAAAAABXAAAAAACbwAAAAABawAAAAAAXAAAAAACXAAAAAAAXAAAAAACXAAAAAAAXAAAAAAAXAAAAAACXAAAAAADXAAAAAABXAAAAAACXAAAAAACXAAAAAABXAAAAAAAXAAAAAAAXAAAAAABbwAAAAAAawAAAAAAXAAAAAAAXAAAAAADXAAAAAACXAAAAAACXAAAAAADXAAAAAACXAAAAAADXAAAAAABXAAAAAAAXAAAAAADXAAAAAACXAAAAAABXAAAAAABXAAAAAADbwAAAAACawAAAAAAXAAAAAAAXAAAAAABXAAAAAADXAAAAAACXAAAAAAAXAAAAAABXAAAAAACXAAAAAADXAAAAAAAXAAAAAAAXAAAAAADXAAAAAAAXAAAAAAAXAAAAAADbwAAAAAAfQAAAAAAXAAAAAADXAAAAAAAXAAAAAAAXAAAAAABXAAAAAABXAAAAAADXAAAAAABXAAAAAABXAAAAAAAXAAAAAABXAAAAAABXAAAAAAAXAAAAAAAXAAAAAACbwAAAAABfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAawAAAAAAawAAAAAAXAAAAAADXAAAAAAAfQAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAbwAAAAAAawAAAAAAbwAAAAAAbwAAAAADfQAAAAAAfQAAAAAAfQAAAAAAawAAAAAAawAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAbwAAAAACawAAAAAAIgAAAAABIgAAAAADIgAAAAADfQAAAAAAawAAAAAAXAAAAAABXAAAAAACawAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAIgAAAAAAIgAAAAAAIgAAAAADfQAAAAAAawAAAAAAXAAAAAADXAAAAAABawAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAHgAAAAAAfQAAAAAAIgAAAAADIgAAAAADIgAAAAACfQAAAAAAfQAAAAAAawAAAAAAawAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAHgAAAAAAfQAAAAAAIgAAAAABIgAAAAADIgAAAAABfQAAAAAAXAAAAAADXAAAAAADXAAAAAAAXAAAAAAAXAAAAAADXAAAAAAAXAAAAAAAXAAAAAAAXAAAAAAAXAAAAAAAHgAAAAAAfQAAAAAAfQAAAAAAawAAAAAAfQAAAAAAfQAAAAAAXAAAAAAAXAAAAAAAXAAAAAABXAAAAAABXAAAAAABXAAAAAAAXAAAAAAAXAAAAAAAXAAAAAAAXAAAAAAAHgAAAAAAfQAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAawAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAbwAAAAAAawAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAbwAAAAABfQAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAA + tiles: fQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAbwAAAAABfQAAAAAAXAAAAAACXAAAAAADXAAAAAACXAAAAAACXAAAAAABXAAAAAABXAAAAAAAXAAAAAADXAAAAAABXAAAAAACXAAAAAAAXAAAAAABXAAAAAABXAAAAAACbwAAAAABawAAAAAAXAAAAAACXAAAAAAAXAAAAAACXAAAAAAAXAAAAAAAXAAAAAACXAAAAAADXAAAAAABXAAAAAACXAAAAAACXAAAAAABXAAAAAAAXAAAAAAAXAAAAAABbwAAAAAAawAAAAAAXAAAAAAAXAAAAAADXAAAAAACXAAAAAACXAAAAAADXAAAAAACXAAAAAADXAAAAAABXAAAAAAAXAAAAAADXAAAAAACXAAAAAABXAAAAAABXAAAAAADbwAAAAACawAAAAAAXAAAAAAAXAAAAAABXAAAAAADXAAAAAACXAAAAAAAXAAAAAABXAAAAAACXAAAAAADXAAAAAAAXAAAAAAAXAAAAAADXAAAAAAAXAAAAAAAXAAAAAADbwAAAAAAfQAAAAAAXAAAAAADXAAAAAAAXAAAAAAAXAAAAAABXAAAAAABXAAAAAADXAAAAAABXAAAAAABXAAAAAAAXAAAAAABXAAAAAABXAAAAAAAXAAAAAAAXAAAAAACbwAAAAABfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAawAAAAAAawAAAAAAXAAAAAADXAAAAAAAfQAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAbwAAAAAAawAAAAAAbwAAAAAAbwAAAAADfQAAAAAAfQAAAAAAfQAAAAAAawAAAAAAawAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAbwAAAAACawAAAAAAIgAAAAABIgAAAAADIgAAAAADfQAAAAAAawAAAAAAXAAAAAABXAAAAAACawAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAIgAAAAAAIgAAAAAAIgAAAAADfQAAAAAAawAAAAAAXAAAAAADXAAAAAABawAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAHgAAAAAAfQAAAAAAIgAAAAADIgAAAAADIgAAAAACfQAAAAAAfQAAAAAAawAAAAAAawAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAHgAAAAAAfQAAAAAAIgAAAAABIgAAAAADIgAAAAABfQAAAAAAXAAAAAADXAAAAAADXAAAAAAAXAAAAAAAXAAAAAADXAAAAAAAXAAAAAAAXAAAAAAAXAAAAAAAXAAAAAAAHgAAAAAAfQAAAAAAfQAAAAAAawAAAAAAfQAAAAAAfQAAAAAAXAAAAAAAXAAAAAAAXAAAAAABXAAAAAABXAAAAAABXAAAAAAAXAAAAAAAXAAAAAAAXAAAAAAAXAAAAAAAHgAAAAAAfQAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAfQAAAAAAfQAAAAAAawAAAAAAawAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAbwAAAAAAawAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAbwAAAAABfQAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAA version: 6 -4,0: ind: -4,0 @@ -4340,18 +4340,21 @@ entities: parent: 2173 - proto: AirlockFrontierCommandEngineeringGlassLocked entities: - - uid: 998 + - uid: 723 components: - type: Transform - rot: 3.141592653589793 rad pos: -40.5,13.5 parent: 2173 - - uid: 1918 + - uid: 747 components: - type: Transform - rot: 1.5707963267948966 rad pos: -39.5,13.5 parent: 2173 + - uid: 748 + components: + - type: Transform + pos: -40.5,10.5 + parent: 2173 - uid: 1950 components: - type: Transform @@ -4363,11 +4366,6 @@ entities: - type: Transform pos: -25.5,12.5 parent: 2173 - - uid: 4081 - components: - - type: Transform - pos: -40.5,10.5 - parent: 2173 - proto: AirlockFrontierCommandEngineeringLocked entities: - uid: 712 @@ -14647,13 +14645,6 @@ entities: - type: DeviceLinkSink links: - 6145 -- proto: CrateSpaceCleaner - entities: - - uid: 748 - components: - - type: Transform - pos: -5.5,27.5 - parent: 2173 - proto: CrateTrashCart entities: - uid: 1990 @@ -14661,27 +14652,6 @@ entities: - type: Transform pos: 48.5,15.5 parent: 2173 -- proto: CrateVendingMachineRestockEngineeringFilled - entities: - - uid: 749 - components: - - type: Transform - pos: -4.5,28.5 - parent: 2173 -- proto: CrateVendingMachineRestockMedicalFilled - entities: - - uid: 723 - components: - - type: Transform - pos: -3.5,27.5 - parent: 2173 -- proto: CrateVendingMachineRestockVendomatFilled - entities: - - uid: 747 - components: - - type: Transform - pos: -5.5,28.5 - parent: 2173 - proto: CrewMonitoringServer entities: - uid: 3055 @@ -19062,14 +19032,6 @@ entities: parent: 2173 - type: AtmosPipeColor color: '#990000FF' - - uid: 925 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -33.5,9.5 - parent: 2173 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 961 components: - type: Transform @@ -19208,14 +19170,6 @@ entities: parent: 2173 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 1146 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -33.5,11.5 - parent: 2173 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 1155 components: - type: Transform @@ -19401,6 +19355,11 @@ entities: parent: 2173 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 2037 + components: + - type: Transform + pos: -33.5,10.5 + parent: 2173 - uid: 2152 components: - type: Transform @@ -24086,6 +24045,12 @@ entities: parent: 2173 - type: AtmosPipeColor color: '#990000FF' + - uid: 1918 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -33.5,9.5 + parent: 2173 - uid: 1938 components: - type: Transform @@ -24101,6 +24066,11 @@ entities: parent: 2173 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 2015 + components: + - type: Transform + pos: -33.5,11.5 + parent: 2173 - uid: 2516 components: - type: Transform @@ -27975,13 +27945,6 @@ entities: - type: Transform pos: -36.5,15.5 parent: 2173 -- proto: NonLethalVendingMachine - entities: - - uid: 2015 - components: - - type: Transform - pos: 6.5,6.5 - parent: 2173 - proto: NoticeBoardNF entities: - uid: 1029 @@ -29044,6 +29007,30 @@ entities: parent: 2173 - proto: Rack entities: + - uid: 749 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,28.5 + parent: 2173 + - uid: 925 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,27.5 + parent: 2173 + - uid: 998 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,27.5 + parent: 2173 + - uid: 1146 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,28.5 + parent: 2173 - uid: 1716 components: - type: Transform @@ -31407,6 +31394,47 @@ entities: parent: 2173 - proto: SignDirectionalCryo entities: + - uid: 2029 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.501318,5.932657 + parent: 2173 + - uid: 2030 + components: + - type: Transform + pos: 1.4989707,19.709929 + parent: 2173 + - uid: 2031 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.4997387,7.93929 + parent: 2173 + - uid: 2032 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.502116,7.9334483 + parent: 2173 + - uid: 2033 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.500662,5.9277573 + parent: 2173 + - uid: 2035 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.500927,4.9328446 + parent: 2173 + - uid: 2036 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -46.502876,5.935037 + parent: 2173 - uid: 5696 components: - type: Transform @@ -31466,6 +31494,12 @@ entities: - type: Transform pos: 4.502248,29.284199 parent: 2173 + - uid: 2034 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 26.531145,26.61362 + parent: 2173 - uid: 5612 components: - type: Transform @@ -31484,62 +31518,6 @@ entities: rot: 3.141592653589793 rad pos: 1.4990518,19.281113 parent: 2173 -- proto: SignDirectionalSupply - entities: - - uid: 2604 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -27.500845,5.936363 - parent: 2173 - - uid: 5603 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -6.499854,7.939665 - parent: 2173 - - uid: 5608 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 5.501395,7.9372363 - parent: 2173 - - uid: 5609 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 26.500668,5.93005 - parent: 2173 - - uid: 5618 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 1.499052,19.719688 - parent: 2173 - - uid: 5619 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 54.498882,23.283236 - parent: 2173 - - uid: 6156 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 50.501198,4.927295 - parent: 2173 - - uid: 6161 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -46.498417,5.9381766 - parent: 2173 - - uid: 6164 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 26.527615,26.622704 - parent: 2173 - proto: SignEngineering entities: - uid: 5698 @@ -33209,6 +33187,13 @@ entities: - type: Transform pos: -11.5,6.5 parent: 2173 +- proto: VendingMachineFuelVend + entities: + - uid: 2028 + components: + - type: Transform + pos: 6.5,6.5 + parent: 2173 - proto: VendingMachineGames entities: - uid: 1974 diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_engines.yml b/Resources/Prototypes/Catalog/Cargo/cargo_engines.yml index 73338525805..e25a81e9364 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_engines.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_engines.yml @@ -4,7 +4,7 @@ sprite: Objects/Power/AME/ame_jar.rsi state: jar product: CrateEngineeringAMEShielding - cost: 10000 + cost: 15000 # Frontier - Up the price category: Engineering group: market @@ -14,7 +14,7 @@ sprite: Objects/Power/AME/ame_jar.rsi state: jar product: CrateEngineeringAMEJar - cost: 2000 + cost: 10000 # Frontier - Up the price category: cargoproduct-category-name-engineering group: market @@ -24,7 +24,7 @@ sprite: Structures/Power/Generation/ame.rsi state: control product: CrateEngineeringAMEControl - cost: 4000 + cost: 6000 # Frontier - Up the price category: cargoproduct-category-name-engineering group: market diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml index ad8c9790f05..45fee417b7b 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/medical.yml @@ -10,7 +10,7 @@ BodyBagFolded: 12 ClothingEyesHudMedical: 2 ClothingEyesEyepatchHudMedical: 2 - MedicalTrackingImplanter: 20 # Frontier SadTromboneImplanter: 10 # Frontier BikeHornImplanter: 10 # Frontier LightImplanter: 10 # Frontier + MedicalTrackingImplanter: 4294967295 # Frontier - infinite \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml index ea3c1fd2583..503f3573e26 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml @@ -73,6 +73,8 @@ - type: Stack count: 1 +# New Frontiers - FuelVend - Expensive plasma sheets +# This code is licensed under AGPLv3. See LICENSE - type: entity parent: SheetOtherBase id: SheetPlasma @@ -112,6 +114,8 @@ - Sheet - type: StackPrice price: 10 + vendPrice: 1200 # Frontier: FuelVend price +# End of modified code - type: entity parent: SheetPlasma @@ -187,6 +191,8 @@ - type: Stack count: 1 +# New Frontiers - FuelVend - Expensive uranium sheets +# This code is licensed under AGPLv3. See LICENSE - type: entity parent: [SheetOtherBase, FoodBase] id: SheetUranium @@ -226,6 +232,9 @@ - ReagentId: Radium Quantity: 2 canReact: false + - type: StaticPrice # Frontier: FuelVend price (use inheritance from FoodBase) + vendPrice: 2500 # Frontier: FuelVend price +# End of modified code - type: entity parent: SheetUranium diff --git a/Resources/Prototypes/Entities/Objects/Power/antimatter_jar.yml b/Resources/Prototypes/Entities/Objects/Power/antimatter_jar.yml index 28573c5e638..2aa4d2e178a 100644 --- a/Resources/Prototypes/Entities/Objects/Power/antimatter_jar.yml +++ b/Resources/Prototypes/Entities/Objects/Power/antimatter_jar.yml @@ -1,3 +1,5 @@ +# New Frontiers - FuelVend - Expensive AME jars +# This code is licensed under AGPLv3. See LICENSE - type: entity parent: BaseItem id: AmeJar @@ -13,5 +15,7 @@ - type: AmeFuelContainer - type: StaticPrice price: 400 + vendPrice: 4000 # Frontier: FuelVend price - type: GuideHelp guides: [ AME, Power ] +# End of modified code diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemical-containers.yml b/Resources/Prototypes/Entities/Objects/Specific/chemical-containers.yml index 4a740ef6852..ec90ff277f4 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/chemical-containers.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/chemical-containers.yml @@ -453,6 +453,8 @@ - ReagentId: PlantBGone Quantity: 200 +# New Frontiers - FuelVend - Expensive welding fuel +# This code is licensed under AGPLv3. See LICENSE - type: entity parent: Jug name: jug @@ -468,3 +470,6 @@ reagents: - ReagentId: WeldingFuel Quantity: 200 + - type: StaticPrice # Frontier + vendPrice: 500 # Frontier +# End of modified code diff --git a/Resources/Prototypes/_NF/Catalog/VendingMachines/Advertisements/fuelvend.yml b/Resources/Prototypes/_NF/Catalog/VendingMachines/Advertisements/fuelvend.yml new file mode 100644 index 00000000000..9e60485a050 --- /dev/null +++ b/Resources/Prototypes/_NF/Catalog/VendingMachines/Advertisements/fuelvend.yml @@ -0,0 +1,11 @@ +- type: localizedDataset + id: FuelVendAds + values: + prefix: advertisement-fuelvend- + count: 12 + +- type: localizedDataset + id: FuelVendGoodbyes + values: + prefix: goodbye-fuelvend- + count: 7 diff --git a/Resources/Prototypes/_NF/Catalog/VendingMachines/Inventories/expeditionaryflatpackvend.yml b/Resources/Prototypes/_NF/Catalog/VendingMachines/Inventories/expeditionaryflatpackvend.yml index 01494e6bc10..b9283607ef6 100644 --- a/Resources/Prototypes/_NF/Catalog/VendingMachines/Inventories/expeditionaryflatpackvend.yml +++ b/Resources/Prototypes/_NF/Catalog/VendingMachines/Inventories/expeditionaryflatpackvend.yml @@ -1,9 +1,9 @@ - type: vendingMachineInventory id: ExpeditionaryFlatpackVendInventory startingInventory: - ComputerCrewMonitoringFlatpack: 12 - TelecomServerFlatpack: 12 - PowerCellRechargerFlatpack: 16 - WeaponCapacitorRechargerFlatpack: 16 - BorgChargerFlatpack: 16 + ComputerCrewMonitoringFlatpack: 4294967295 # Infinite + TelecomServerFlatpack: 4294967295 # Infinite + PowerCellRechargerFlatpack: 4294967295 # Infinite + WeaponCapacitorRechargerFlatpack: 4294967295 # Infinite + BorgChargerFlatpack: 4294967295 # Infinite ComputerIFFFlatpack: 1 diff --git a/Resources/Prototypes/_NF/Catalog/VendingMachines/Inventories/flatpackvend.yml b/Resources/Prototypes/_NF/Catalog/VendingMachines/Inventories/flatpackvend.yml index a2430466621..ed27a431dbb 100644 --- a/Resources/Prototypes/_NF/Catalog/VendingMachines/Inventories/flatpackvend.yml +++ b/Resources/Prototypes/_NF/Catalog/VendingMachines/Inventories/flatpackvend.yml @@ -1,27 +1,28 @@ - type: vendingMachineInventory id: FlatpackVendInventory startingInventory: - ShuttleGunKineticFlatpack: 12 - OreProcessorFlatpack: 10 - AutolatheFlatpack: 6 - HydroponicsTrayEmptyFlatpack: 16 - ExosuitFabricatorFlatpack: 4 - ProtolatheFlatpack: 6 - CircuitImprinterFlatpack: 6 - ResearchAndDevelopmentServerFlatpack: 6 - ScienceTechFabFlatpack: 4 - EngineeringTechFabFlatpack: 4 - SalvageTechfabNFFlatpack: 4 - ServiceTechFabFlatpack: 4 - MedicalTechFabFlatpack: 4 - MaterialReclaimerFlatpack: 4 - UniformPrinterFlatpack: 6 - TilePrinterNFFlatpack: 8 - PowerCellRechargerFlatpack: 8 - WeaponCapacitorRechargerFlatpack: 8 - BorgChargerFlatpack: 8 - MachineFlatpackerFlatpack: 8 - AirlockFlatpack: 20 - AirlockGlassFlatpack: 20 - AirlockShuttleFlatpack: 20 - AirlockGlassShuttleFlatpack: 20 + ShuttleGunKineticFlatpack: 4294967295 # Infinite + OreProcessorFlatpack: 4294967295 # Infinite + AutolatheFlatpack: 4294967295 # Infinite +# HydroponicsTrayEmptyFlatpack: 16 # Get a food ship, or an atmost ship + ExosuitFabricatorFlatpack: 4294967295 # Infinite + ProtolatheFlatpack: 4294967295 # Infinite + CircuitImprinterFlatpack: 4294967295 # Infinite + ResearchAndDevelopmentServerFlatpack: 4294967295 # Infinite + ComputerResearchAndDevelopmentFlatpack: 4294967295 # Infinite + ScienceTechFabFlatpack: 4294967295 # Infinite + EngineeringTechFabFlatpack: 4294967295 # Infinite + SalvageTechfabNFFlatpack: 4294967295 # Infinite + ServiceTechFabFlatpack: 4294967295 # Infinite +# MedicalTechFabFlatpack: 4294967295 # Infinite + MaterialReclaimerFlatpack: 4294967295 # Infinite +# UniformPrinterFlatpack: 6 # Loadouts are a thing + TilePrinterNFFlatpack: 4294967295 # Infinite + PowerCellRechargerFlatpack: 4294967295 # Infinite + WeaponCapacitorRechargerFlatpack: 4294967295 # Infinite + BorgChargerFlatpack: 4294967295 # Infinite + MachineFlatpackerFlatpack: 4294967295 # Infinite + AirlockFlatpack: 4294967295 # Infinite + AirlockGlassFlatpack: 4294967295 # Infinite + AirlockShuttleFlatpack: 4294967295 # Infinite + AirlockGlassShuttleFlatpack: 4294967295 # Infinite diff --git a/Resources/Prototypes/_NF/Catalog/VendingMachines/Inventories/fuelvend.yml b/Resources/Prototypes/_NF/Catalog/VendingMachines/Inventories/fuelvend.yml new file mode 100644 index 00000000000..c96aed7c304 --- /dev/null +++ b/Resources/Prototypes/_NF/Catalog/VendingMachines/Inventories/fuelvend.yml @@ -0,0 +1,10 @@ +# New Frontiers - This file is licensed under AGPLv3 +# Copyright (c) 2024 New Frontiers Contributors +# See AGPLv3.txt for details. +- type: vendingMachineInventory + id: VendingMachineFuelVendInventory + startingInventory: + SheetPlasma: 4294967295 # Infinite + SheetUranium: 4294967295 # Infinite + AmeJar: 4294967295 # Infinite + JugWeldingFuel: 4294967295 # Infinite diff --git a/Resources/Prototypes/_NF/Entities/Structures/Machines/vending_machines.yml b/Resources/Prototypes/_NF/Entities/Structures/Machines/vending_machines.yml index 2b164036534..9301f074536 100644 --- a/Resources/Prototypes/_NF/Entities/Structures/Machines/vending_machines.yml +++ b/Resources/Prototypes/_NF/Entities/Structures/Machines/vending_machines.yml @@ -570,3 +570,32 @@ radius: 1.1 energy: 1.2 color: "#4b93ad" + +- type: entity + parent: [BaseStructureDisableToolUse, BaseStructureIndestructible, VendingMachine] + id: VendingMachineFuelVend + name: FuelVend + description: A vendor selling fuel for ship engines. Smells like ozone. + components: + - type: VendingMachine + pack: VendingMachineFuelVendInventory + offState: off + brokenState: broken + normalState: normal-unshaded + ejectState: eject-unshaded + denyState: deny-unshaded + ejectDelay: 2.1 + - type: Advertise + pack: FuelVendAds + - type: SpeakOnUIClosed + pack: FuelVendGoodbyes + - type: Sprite + sprite: _NF/Structures/Machines/VendingMachines/fuelvend.rsi + layers: + - state: "off" + map: ["enum.VendingMachineVisualLayers.Base"] + - state: "off" + map: ["enum.VendingMachineVisualLayers.BaseUnshaded"] + shader: unshaded + - state: panel + map: ["enum.WiresVisualLayers.MaintenancePanel"] diff --git a/Resources/Textures/_NF/Structures/Machines/VendingMachines/fuelvend.rsi/broken.png b/Resources/Textures/_NF/Structures/Machines/VendingMachines/fuelvend.rsi/broken.png new file mode 100644 index 0000000000000000000000000000000000000000..bf0055e673bc982ba4b96f31d24db656f70ac197 GIT binary patch literal 1061 zcmV+=1ls$FP)5pVVo73-y>Ac}Y>NCiE3@~B`CFCvN> z@L~@=c$Ru8Rs=)wB!rS}AjCA=o!y<8oqunQhsm4FpEudvUi`u`Z{K_KzTe;X{obFM zA%XLsUOr$-INLpDA8#nzf}TgEQB}6x{Ahg!K+86~dFdjKJ(x;FZ>I}DV|gi8pRJp% z&-2rd*W&*VO~q7z#_|&Ve@vyQamYE4MNxDr-2L+o3#S%S!lo0@2d{18IW|knC)wKA zWTCal((*|V#}9P+*)wcyY~t@Y$G$T=szJX<0C3{5hjIQMu(h!n*L8O~0MVcY=UZ&a0nJBG6%RD3(R?D^o*iRuVF|0B&W)6S&b=%0ZB-*wXfH?`fi?BBDWFsEIYP53baE%6Ck4s4}}=DDkD+6A14#ia$ErBW{tQ!wE#&9 zU=M8UL4I?RQ;@~&&%OoV#ZRtq=bK*u@O_tHxW{uJzMbl;Ov0>{_4#^^SkAe2m;*^v zYAq_Y764DZ^D<9A^CZD=PZ{Lc<2VcHL{?N1x^Bc}=|H8{Qi@19;0Ff``om)d)aUER zlAET3Wwx=*Hm2#&ym&6$fk5o{2oJv{Ao@Phn(7bOoPhg#_a2zM5MBs( f9jNAA{NM2(opaILW7PxH00000NkvXXu0mjfkqiL3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_NF/Structures/Machines/VendingMachines/fuelvend.rsi/deny-unshaded.png b/Resources/Textures/_NF/Structures/Machines/VendingMachines/fuelvend.rsi/deny-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..c412a3604e73fe678edade3c5b5279e7b1d46875 GIT binary patch literal 528 zcmV+r0`L8aP)RGfIKeI*ggSJv|3Jt71?|w?c5&(~+#nR(I=PhY9ooO3qx}PPaIoOe zrGX0^2X=D04rkQMndW{pC&K%H;Q7MKOY)M-_X!XLLF|~4%JB5^9i(-3cXO=tr{Yj$ zs8s7|ePu!!fbTH?!0CzJ$>*1W0K^Q~HN6x5V;}%A1N=zu#P{ z9k`M205F+_ZLTj%|F;e09N^9fjczL(Ie^*27;xFLZQ5=V1h8!v)XVDu&TH#)BF`?+ z=D@Z!mvh2+4#;Z`M1M1y16IEkTXP_q6aMWuZNK^eL=McKIRL=k(ni=Sv&{YP!AVH( zf+VA>R1E}>bzc(%K@h~=p}mx*!N{f5G};S^kY;}|p-ZXBOR3dw0aywXiAFcH85bta zP7U?md0d*6OPCJaT*4%gIF$wIrcf1)@T=kOBn&Sc~=9#5aU$A-iC6&E=dh zUZ9ZIT+RujIdJu;FVnp(%XC?CKwGR%Q>rymtls%aNbiD=9HYw>Kv92K5X3K0ctC&- SGS4vp0000R~Q(WDm`5sLn`LHjgIYaHsHCP z;r{dg{vQiuFUd{gKid1?U5;X0jA)XmkokuS0T#zQ%;)`=e4Ks4ewu&FPqAm;t!w5A zC|RuN`nWZ$^ZxsSyMcX^1sa?6muA#x);272uxV;uzm=ckV*!f>zx#v7@w=ERTC!)f zD}VTSOv*uN#um0mf)+olCTwRr)o|!LyY4==D;!q$<3)}BOSP|H5IJ~o{bP>3nh!ZH zn5)V#p7O7}u6(oT$?I#gW}VlSTh0EZ>*(?0+G0^7z_4W~M!rjdj)R zQ%br&q#d1{d-n|IrnR$!8*N^v`Aq=wxKpCHOJ*}{%A038Aq&hk|IB2(X7*Q+72+Qv z%v;RaE9Nn!EWSMDf~aDW-&)3f9M=u<;}Y&97%FWs+nst(rort+fWv$C6myd^jKxw? zM*hG+5x9Q%`Frt+^51@U-Y7oLVq~A#%v8L+;J!d9ZlZXN?oGgyDM z+1bTyJOA@Ii^lDTyXqz}6(&2eu3!-T!Oit#+w+I-**BRRZ~(*eQI*d7f4ipTt^H>6 z$$G)d`>{43tRJXki*3()`RvLX&duFH%b6-&HANRNg*0#lG~Qp}u+Fyp3iD2BkvsCh z*id-KZycNU_)|&dG@qLW-pg_V7_}Tg_AFpB4|wpY>cOL~jvvQ=Fz#sd_?^8XeiJZd OGI+ZBxvXIuw7nbD`d7zmI8>eTFy7E7pXUW#QP@RI_q zo&drCa?mkUaH2rcZ=<;Gs2d|4PFJxE1j-7?aC3*{LdQ5!AX;o53zQ2^6_|}OoeS8L z0xFvuZ5_)%z@~s4bbwX+cyfUDe;IThuq!~Tr+p9Ta{knI+lTe&7hEBur5dl&I}4F(TkHh$0GtRM3l;9u=(KL=Uow1la064cuFf2Kec zM~07~sRagx4gz@Wc2F;drWP6#$ma@tT3usPE4H1i9prO05_J{$@Nj{cBoU3qh{e2J zB&pA}ZQJs+31M*Y>FuV;{gVq2*wl)|B#EOV!%YL#L+;mxYtKK=zz&`&o4qv?7!x3{ zf1saeG}d-S-QnBI z_rUHMVV2f8b^p4jZ%>!NIi%vrH1T8_fa5pLapL3%W@)|tm}Y@Gg)Apr+fg8%OxGph zQ9zg#w$xHr$rVLMQ?h7E7DdrHJUQx7U`s6_%-S{#r3M`N0X7ytvO$XqIPm{u+J!79 z+-2}9;D<*6%dVj7qO0VZW}qoq*DfrrdKA!gfn|rZ1dej)smrb}dH(e7yTO=HYCu_9 zL6#Hv%UKA61DD3aCm_oS?%ll>@IQI>I^YY10KmKD<(B$+2$;HrQ8KZt&I-}81SNeN zAq>8J&Ia0rFo={)Y`Xyg2W8vl=l35-QeV?MA=C=bvIOO7|rwWOwv9G4KL&AzH{ zN7Q0^qF2n_tJt9{XPZs5DTHaafMCJOl_vutA~?2BZaI0lMkCyyy$+Wqq%l0#ul$J`qyUuNBVQG2su$7O&bK@1_paupnDiRUHx3vIVCg!0LMH=J^%m! literal 0 HcmV?d00001