This commit is contained in:
Ed
2025-01-19 00:43:07 +03:00
37 changed files with 389 additions and 170 deletions

View File

@@ -1,15 +1,16 @@
<Control xmlns="https://spacestation14.io">
<Button Name="ProductButton" Access="Public">
<BoxContainer Orientation="Vertical">
<BoxContainer Orientation="Horizontal">
<TextureRect Name="View"
MinSize="48 48"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Stretch="KeepAspectCentered"/>
<RichTextLabel Name="ProductName" VerticalAlignment="Center" Access="Public"/>
<BoxContainer Name="PriceHolder" VerticalAlignment="Center" HorizontalExpand="True" HorizontalAlignment="Right"/>
<BoxContainer Orientation="Horizontal">
<TextureRect Name="View"
MinSize="48 48"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Stretch="KeepAspectCentered" />
<BoxContainer Orientation="Vertical">
<RichTextLabel Name="SpecialLabel" Text="{Loc 'cp14-store-ui-tab-special'}" VerticalAlignment="Center" Access="Public" Visible="False" />
<RichTextLabel Name="ProductName" VerticalAlignment="Center" Access="Public" />
</BoxContainer>
<BoxContainer Name="PriceHolder" VerticalAlignment="Center" HorizontalExpand="True" HorizontalAlignment="Right" />
</BoxContainer>
</Button>
</Control>

View File

@@ -21,24 +21,15 @@ public sealed partial class CP14StoreProductControl : Control
_sprite = _entity.System<SpriteSystem>();
UpdateName(entry.Name);
UpdateView(entry.Icon);
UpdatePrice(entry.Price);
}
private void UpdatePrice(int price)
{
PriceHolder.RemoveAllChildren();
PriceHolder.AddChild(new CP14PriceControl(price));
}
PriceHolder.AddChild(new CP14PriceControl(entry.Price));
ProductName.Text = $"[bold]{entry.Name}[/bold]";
private void UpdateName(string name)
{
ProductName.Text = $"[bold]{name}[/bold]";
SpecialLabel.Visible = entry.Special;
View.Texture = _sprite.Frame0(entry.Icon);
}
private void UpdateView(SpriteSpecifier spriteSpecifier)
{
View.Texture = _sprite.Frame0(spriteSpecifier);
}
}

View File

@@ -53,32 +53,50 @@ public sealed partial class CP14CargoSystem
var prodBuy = new HashSet<CP14StoreUiProductEntry>();
var prodSell = new HashSet<CP14StoreUiProductEntry>();
foreach (var proto in ent.Comp.Station.Value.Comp.CurrentBuyPositions)
//Add special buy positions
foreach (var (proto, price) in ent.Comp.Station.Value.Comp.CurrentSpecialBuyPositions)
{
var name = Loc.GetString(proto.Key.Name);
var name = Loc.GetString(proto.Name);
var desc = new StringBuilder();
desc.Append(Loc.GetString(proto.Key.Desc) + "\n");
foreach (var service in proto.Key.Services)
{
desc.Append(service.GetDescription(_proto, EntityManager));
}
desc.Append(Loc.GetString(proto.Desc) + "\n");
desc.Append("\n" + Loc.GetString("cp14-store-buy-hint", ("name", Loc.GetString(proto.Name)), ("code", "[color=yellow][bold]#" + proto.Code + "[/bold][/color]")));
desc.Append("\n" + Loc.GetString("cp14-store-buy-hint", ("name", Loc.GetString(proto.Key.Name)), ("code", "[color=yellow][bold]#" + proto.Key.Code + "[/bold][/color]")));
prodBuy.Add(new CP14StoreUiProductEntry(proto.Key.ID, proto.Key.Icon, name, desc.ToString(), proto.Value));
prodBuy.Add(new CP14StoreUiProductEntry(proto.ID, proto.Icon, name, desc.ToString(), price, true));
}
//Add static buy positions
foreach (var (proto, price) in ent.Comp.Station.Value.Comp.CurrentBuyPositions)
{
var name = Loc.GetString(proto.Name);
var desc = new StringBuilder();
desc.Append(Loc.GetString(proto.Desc) + "\n");
desc.Append("\n" + Loc.GetString("cp14-store-buy-hint", ("name", Loc.GetString(proto.Name)), ("code", "[color=yellow][bold]#" + proto.Code + "[/bold][/color]")));
prodBuy.Add(new CP14StoreUiProductEntry(proto.ID, proto.Icon, name, desc.ToString(), price, false));
}
//Add special sell positions
foreach (var (proto, price) in ent.Comp.Station.Value.Comp.CurrentSpecialSellPositions)
{
var name = Loc.GetString(proto.Name);
var desc = new StringBuilder();
desc.Append(Loc.GetString(proto.Desc) + "\n");
desc.Append("\n" + Loc.GetString("cp14-store-sell-hint", ("name", Loc.GetString(proto.Name))));
prodSell.Add(new CP14StoreUiProductEntry(proto.ID, proto.Icon, name, desc.ToString(), price, true));
}
//Add static sell positions
foreach (var proto in ent.Comp.Station.Value.Comp.CurrentSellPositions)
{
var name = Loc.GetString(proto.Key.Name);
var desc = new StringBuilder();
desc.Append(Loc.GetString(proto.Key.Desc) + "\n");
desc.Append(proto.Key.Service.GetDescription(_proto, EntityManager) + "\n");
desc.Append("\n" + Loc.GetString("cp14-store-sell-hint", ("name", Loc.GetString(proto.Key.Name))));
prodSell.Add(new CP14StoreUiProductEntry(proto.Key.ID, proto.Key.Icon, name, desc.ToString(), proto.Value));
prodSell.Add(new CP14StoreUiProductEntry(proto.Key.ID, proto.Key.Icon, name, desc.ToString(), proto.Value, false));
}
var stationComp = ent.Comp.Station.Value.Comp;

View File

@@ -137,14 +137,47 @@ public sealed partial class CP14CargoSystem : CP14SharedCargoSystem
{
station.Comp.CurrentBuyPositions.Clear();
station.Comp.CurrentSellPositions.Clear();
station.Comp.CurrentSpecialBuyPositions.Clear();
station.Comp.CurrentSpecialSellPositions.Clear();
var availableSpecialSellPositions = new List<CP14StoreSellPositionPrototype>();
var availableSpecialBuyPositions = new List<CP14StoreBuyPositionPrototype>();
//Add static positions + cash special ones
foreach (var buyPos in station.Comp.AvailableBuyPosition)
{
station.Comp.CurrentBuyPositions.Add(buyPos, buyPos.Price.Next(_random)/10*10);
if (buyPos.Special)
availableSpecialBuyPositions.Add(buyPos);
else
station.Comp.CurrentBuyPositions.Add(buyPos, buyPos.Price.Next(_random)/10*10);
}
foreach (var sellPos in station.Comp.AvailableSellPosition)
{
station.Comp.CurrentSellPositions.Add(sellPos, sellPos.Price.Next(_random)/10*10);
if (sellPos.Special)
availableSpecialSellPositions.Add(sellPos);
else
station.Comp.CurrentSellPositions.Add(sellPos, sellPos.Price.Next(_random)/10*10);
}
//Random and select special positions
_random.Shuffle(availableSpecialSellPositions);
_random.Shuffle(availableSpecialBuyPositions);
var currentSpecialBuyPositions = station.Comp.SpecialBuyPositionCount.Next(_random);
var currentSpecialSellPositions = station.Comp.SpecialSellPositionCount.Next(_random);
foreach (var buyPos in availableSpecialBuyPositions)
{
if (station.Comp.CurrentSpecialBuyPositions.Count >= currentSpecialBuyPositions)
break;
station.Comp.CurrentSpecialBuyPositions.Add(buyPos, buyPos.Price.Next(_random)/10*10);
}
foreach (var sellPos in availableSpecialSellPositions)
{
if (station.Comp.CurrentSpecialSellPositions.Count >= currentSpecialSellPositions)
break;
station.Comp.CurrentSpecialSellPositions.Add(sellPos, sellPos.Price.Next(_random)/10*10);
}
}

View File

@@ -1,7 +1,10 @@
using Content.Server._CP14.Demiplane;
using Content.Server.Chat.Systems;
using Content.Server.GameTicking;
using Content.Server.RoundEnd;
using Content.Shared._CP14.MagicEnergy;
using Content.Shared.CCVar;
using Robust.Shared.Configuration;
using Robust.Shared.Audio;
using Robust.Shared.Timing;
@@ -13,10 +16,12 @@ public sealed partial class CP14RoundEndSystem : EntitySystem
[Dependency] private readonly ChatSystem _chatSystem = default!;
[Dependency] private readonly GameTicker _gameTicker = default!;
[Dependency] private readonly CP14DemiplaneSystem _demiplane = default!;
[Dependency] private readonly RoundEndSystem _roundEnd = default!;
[Dependency] private readonly IConfigurationManager _configManager = default!;
private readonly TimeSpan _roundEndDelay = TimeSpan.FromMinutes(1);
private TimeSpan _roundEndMoment = TimeSpan.Zero;
//TODO: вообще нет поддержки нескольких кристаллов на карте.
public override void Initialize()
{
base.Initialize();
@@ -60,18 +65,20 @@ public sealed partial class CP14RoundEndSystem : EntitySystem
private void StartRoundEndTimer()
{
_roundEndMoment = _timing.CurTime + _roundEndDelay;
var roundEndDelay = TimeSpan.FromMinutes(_configManager.GetCVar(CCVars.CP14RoundEndMinutes));
var time = _roundEndDelay.Minutes;
_roundEndMoment = _timing.CurTime + roundEndDelay;
var time = roundEndDelay.Minutes;
string unitsLocString;
if (_roundEndDelay.TotalSeconds < 60)
if (roundEndDelay.TotalSeconds < 60)
{
time = _roundEndDelay.Seconds;
time = roundEndDelay.Seconds;
unitsLocString = "eta-units-seconds";
}
else
{
time = _roundEndDelay.Minutes;
time = roundEndDelay.Minutes;
unitsLocString = "eta-units-minutes";
}
@@ -99,7 +106,7 @@ public sealed partial class CP14RoundEndSystem : EntitySystem
_chatSystem.DispatchGlobalAnnouncement(Loc.GetString("cp14-round-end"),
announcementSound: new SoundPathSpecifier("/Audio/_CP14/Ambience/event_boom.ogg"));
_roundEndMoment = TimeSpan.Zero;
_gameTicker.EndRound();
_roundEnd.EndRound();
_demiplane.DeleteAllDemiplanes(safe: false);
}
}

View File

@@ -0,0 +1,9 @@
using Robust.Shared.Configuration;
namespace Content.Shared.CCVar;
public sealed partial class CCVars
{
public static readonly CVarDef<int> CP14RoundEndMinutes =
CVarDef.Create("cp14_demiplane.round_end_minutes", 15, CVar.SERVERONLY);
}

View File

@@ -50,12 +50,18 @@ public sealed partial class CP14StationTravelingStoreShipTargetComponent : Compo
[DataField]
public Dictionary<CP14StoreBuyPositionPrototype, int> CurrentBuyPositions = new(); //Proto, price
[DataField]
public Dictionary<CP14StoreBuyPositionPrototype, int> CurrentSpecialBuyPositions = new(); //Proto, price
[DataField]
public MinMax SpecialBuyPositionCount = new(1, 2);
[DataField]
public Dictionary<CP14StoreSellPositionPrototype, int> CurrentSellPositions = new(); //Proto, price
[DataField]
public Dictionary<CP14StoreSellPositionPrototype, int> CurrentSpecialSellPositions = new(); //Proto, price
[DataField]
public MinMax SpecialSellPositionCount = new(1, 2);

View File

@@ -37,14 +37,16 @@ public readonly struct CP14StoreUiProductEntry : IEquatable<CP14StoreUiProductEn
public readonly string Name;
public readonly string Desc;
public readonly int Price;
public readonly bool Special;
public CP14StoreUiProductEntry(string protoId, SpriteSpecifier icon, string name, string desc, int price)
public CP14StoreUiProductEntry(string protoId, SpriteSpecifier icon, string name, string desc, int price, bool special)
{
ProtoId = protoId;
Icon = icon;
Name = name;
Desc = desc;
Price = price;
Special = special;
}
public bool Equals(CP14StoreUiProductEntry other)

View File

@@ -18,9 +18,4 @@ public sealed partial class CP14BuyItemsService : CP14StoreBuyService
}
}
}
public override string? GetDescription(IPrototypeManager prototype, IEntityManager entSys)
{
return null;
}
}

View File

@@ -49,28 +49,4 @@ public sealed partial class CP14UnlockPositionsService : CP14StoreBuyService
station.Comp.AvailableBuyPosition.Remove(indexedBuy);
}
}
public override string? GetDescription(IPrototypeManager prototype, IEntityManager entSys)
{
var sb = new StringBuilder();
if (AddBuyPositions.Count > 0)
sb.Append(Loc.GetString("cp14-store-service-unlock-buy") + "\n");
foreach (var buy in AddBuyPositions)
{
if (!prototype.TryIndex(buy, out var indexedBuy))
continue;
sb.Append(Loc.GetString(indexedBuy.Name) + "\n");
}
if (AddSellPositions.Count > 0)
sb.Append(Loc.GetString("cp14-store-service-unlock-sell") + "\n");
foreach (var sell in AddSellPositions)
{
if (!prototype.TryIndex(sell, out var indexedSell))
continue;
sb.Append(Loc.GetString("cp14-store-service-unlock-sell") + " " + Loc.GetString(indexedSell.Name) + "\n");
}
return sb.ToString();
}
}

View File

@@ -14,12 +14,6 @@ public sealed partial class CP14StoreBuyPositionPrototype : IPrototype
[IdDataField, ViewVariables]
public string ID { get; private set; } = default!;
/// <summary>
/// if true, this item becomes available for purchase only after unlocking by other purchases
/// </summary>
[DataField]
public bool Unlockable = false;
[DataField(required: true)]
public MinMax Price = new();
@@ -43,6 +37,12 @@ public sealed partial class CP14StoreBuyPositionPrototype : IPrototype
[DataField]
public bool RoundstartAvailable = true;
/// <summary>
/// If true, this item will randomly appear under the Special Offer heading. With a chance to show up every time the ship arrives.
/// </summary>
[DataField]
public bool Special = false;
}
[ImplicitDataDefinitionForInheritors]
@@ -50,6 +50,4 @@ public sealed partial class CP14StoreBuyPositionPrototype : IPrototype
public abstract partial class CP14StoreBuyService
{
public abstract void Buy(EntityManager entManager, IPrototypeManager prototype, Entity<CP14StationTravelingStoreShipTargetComponent> station);
public abstract string? GetDescription(IPrototypeManager prototype, IEntityManager entSys);
}

View File

@@ -3,7 +3,7 @@ using JetBrains.Annotations;
using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
namespace Content.Shared._CP14.Cargo;
namespace Content.Shared._CP14.Cargo.Prototype;
/// <summary>
/// Stores the price and product/service pair that players can buy.
@@ -14,12 +14,6 @@ public sealed partial class CP14StoreSellPositionPrototype : IPrototype
[IdDataField, ViewVariables]
public string ID { get; private set; } = default!;
/// <summary>
/// if true, this item becomes available for purchase only after unlocking by other purchases
/// </summary>
[DataField]
public bool Unlockable = false;
[DataField(required: true)]
public MinMax Price = new();
@@ -37,6 +31,12 @@ public sealed partial class CP14StoreSellPositionPrototype : IPrototype
[DataField]
public bool RoundstartAvailable = true;
/// <summary>
/// If true, this item will randomly appear under the Special Offer heading. With a chance to show up every time the ship arrives.
/// </summary>
[DataField]
public bool Special = false;
}
[ImplicitDataDefinitionForInheritors]
@@ -44,6 +44,4 @@ public sealed partial class CP14StoreSellPositionPrototype : IPrototype
public abstract partial class CP14StoreSellService
{
public abstract bool TrySell(EntityManager entManager, HashSet<EntityUid> entities);
public abstract string? GetDescription(IPrototypeManager prototype, IEntityManager entSys);
}

View File

@@ -49,9 +49,4 @@ public sealed partial class CP14SellStackService : CP14StoreSellService
return true;
}
public override string? GetDescription(IPrototypeManager prototype, IEntityManager entSys)
{
return null;
}
}

View File

@@ -44,9 +44,4 @@ public sealed partial class CP14SellWhitelistService : CP14StoreSellService
return true;
}
public override string? GetDescription(IPrototypeManager prototype, IEntityManager entSys)
{
return null;
}
}

View File

@@ -9,12 +9,6 @@ cp14-store-sell-ironbar-desc = Iron is an indispensable material in the manufact
cp14-store-sell-copperbar-name = 10 copper bars
cp14-store-sell-copperbar-desc = Although copper is used mainly as a coin material, it is also often enjoyed by blacksmiths in various alloys.
cp14-store-sell-wheat-name = 10 sheaves of wheat
cp14-store-sell-wheat-desc = If there's one thing that's permanent in this world, it's empire and wheat! Please don't use wheat as currency....
cp14-store-sell-dye-name = 10 dyes
cp14-store-sell-dye-desc = Textile workers will gladly buy dyes from you to satisfy the whims of the rich. And the sailors are tired of cleaning the ship of broken vials.
cp14-store-sell-wood-name = 30 wooden planks
cp14-store-sell-wood-desc = Do you really think anyone needs planks from a faraway island? Well, you're right, we hope your settlement has something to keep you warm in the winter.

View File

@@ -0,0 +1,23 @@
cp14-store-sell-special-wheat-name = 10 sheaves of wheat
cp14-store-sell-special-wheat-desc = Urgent wheat order! Our lizards have gone berserk and devoured the entire supply! Any supplies of wheat would be appreciated!
cp14-store-sell-special-dye-name = 10 dyes
cp14-store-sell-special-dye-desc = An aristocrat from the capital has suddenly shown an interest in painting, and requires dyes for his experiments. The Empire is buying up all the dyes you can provide her with.
cp14-store-sell-special-meat-name = 10 pieces of meat
cp14-store-sell-special-meat-desc = Any kind of meat will do. Lambs, goats, cows, even giant worms! In fact, send anything you want, Isil Island has no food for carnivores at the moment.
cp14-store-sell-special-torch-name = 20 torches
cp14-store-sell-special-torch-desc = The settlement of Grimstroke is requesting a large shipment of torches from the Empire! We're making a big march on the Great Tomb of Lazaric! And we have nothing to light it with.
cp14-store-sell-special-flora-name = 15 flora material
cp14-store-sell-special-flora-desc = Battle HQ 14 requesting support! Orders have been received to 'Green the area surrounding the HQ'. Unfortunately, the HQ is located in the desert. Requesting grass to spread all over the area.
cp14-store-sell-special-ash-name = 10 ashes
cp14-store-sell-special-ash-desc = The Mermaid Council is requesting a shipment of ash to their oceanic domain for the reason, quote Where do you think we should get ash from underwater?
cp14-store-sell-special-lucen-name = 10 lucen planks
cp14-store-sell-special-lucen-desc = A shipment of magical wood is needed to build an enchanted country house for an aristocrat. The whims of the rich are mysterious!
cp14-store-sell-special-spell-scroll-name = 5 spell scrolls
cp14-store-sell-special-spell-scroll-desc = We don't really care what spells are in the scrolls, they are only for reporting the magical prosperity of the settlement to the local Commandant.

View File

@@ -0,0 +1,23 @@
cp14-store-sell-special-wheat-name = 10 снопов пшеницы
cp14-store-sell-special-wheat-desc = Срочный заказ пшеницы! Наши ящеры взбесились и сожрали вообще все запасы! Мы будем благодарны любым запасам пшена!
cp14-store-sell-special-dye-name = 10 красителей
cp14-store-sell-special-dye-desc = Аристократ из столицы внезапно проявил интерес с рисованию, и требует красителей для своих экспериментов. Империя скупаем все красители, которые вы сможете ей предоставить.
cp14-store-sell-special-meat-name = 10 кусков мяса
cp14-store-sell-special-meat-desc = Нам подойдет любое мясо. Бараны, козы, коровы, да хоть гигансткие черви! В общем, присылайте любое, острову Изиль сейчас нечем кормить хищнй скот.
cp14-store-sell-special-torch-name = 20 факелов
cp14-store-sell-special-torch-desc = Поселение Гримстроук запрашивает большую партию факелов от Империи! Мы устраиваем большой поход на Великую Гробницу Лазарика! И нам нечем освещать ее.
cp14-store-sell-special-flora-name = 15 растительного волокна
cp14-store-sell-special-flora-desc = Боевой штаб 14 запрашивает поддержку! Поступил приказ 'Озеленить прилегающую к штабу территорию'. К сожалению, штаб расположен в пустыне. Запрашиваем траву, чтобы раскидать ее по всей территории.
cp14-store-sell-special-ash-name = 10 пепла
cp14-store-sell-special-ash-desc = Совет русалок запрашивает партию пепла в свои океанические владения по причине, цитата 'Откуда мы должны под водой получать пепел по вашему?'
cp14-store-sell-special-lucen-name = 10 люценовых досок
cp14-store-sell-special-lucen-desc = Необходима партия магической древесины для строительства зачарованной загородной дачи одного из аристократов. Причуды богатых неисповедимы!
cp14-store-sell-special-spell-scroll-name = 5 свитков заклинаний
cp14-store-sell-special-spell-scroll-desc = Нам на самом деле не важно какие именно заклинания находятся в свитках, они нам только для отчетности магического процветания поселения перед местным Комендантом.

View File

@@ -9,12 +9,6 @@ cp14-store-sell-ironbar-desc = Железо - незаменимый матер
cp14-store-sell-copperbar-name = 10 медных слитков
cp14-store-sell-copperbar-desc = Хоть медь и используется в основном как материал для монет но и в разных сплавах он часто нравится кузнецам.
cp14-store-sell-wheat-name = 10 снопов пшеницы
cp14-store-sell-wheat-desc = Если и есть что то постоянное в этом мире так это империя и пшеница! Пожалуйста не используйте пшеницу как валюту...
cp14-store-sell-dye-name = 10 красителей
cp14-store-sell-dye-desc = Текстильщики с радостью купят у вас красители для ублажения прихотей богатеньких. А ещё моряки устали отмывать корабль от разбитых склянок.
cp14-store-sell-wood-name = 30 деревянных досок
cp14-store-sell-wood-desc = Вы правда думаете что хоть кому то нужны доски с далекого острова? Что ж вы правы, надеемся у вашего поселения есть чем греться зимой.

View File

@@ -6,4 +6,4 @@ cp14-store-ui-next-travel-in = До прибытия:
cp14-store-ui-tab-buy = Покупка
cp14-store-ui-tab-sell = Продажа
cp14-store-ui-tab-special = [bold][color=red]Временное предложение![/color][/bold]
cp14-store-ui-tab-special = [bold][color=#eba346]Временное предложение![/color][/bold]

View File

@@ -40,38 +40,6 @@
stackId: CP14GoldBar
count: 10
- type: storePositionSell
id: Wheat
name: cp14-store-sell-wheat-name
desc: cp14-store-sell-wheat-desc
icon:
sprite: _CP14/Objects/Flora/Farm/wheat.rsi
state: base1
price:
min: 10
max: 50
service: !type:CP14SellWhitelistService
whitelist:
tags:
- CP14Wheat
count: 10
- type: storePositionSell
id: Dye
name: cp14-store-sell-dye-name
desc: cp14-store-sell-dye-desc
icon:
sprite: _CP14/Objects/Materials/dye.rsi
state: preview
price:
min: 50
max: 100
service: !type:CP14SellWhitelistService
whitelist:
tags:
- CP14Dye
count: 10
- type: storePositionSell
id: Wood
name: cp14-store-sell-wood-name

View File

@@ -0,0 +1,129 @@
- type: storePositionSell
id: BountyWheat
special: true
name: cp14-store-sell-special-wheat-name
desc: cp14-store-sell-special-wheat-desc
icon:
sprite: _CP14/Objects/Flora/Farm/wheat.rsi
state: base1
price:
min: 100
max: 200
service: !type:CP14SellWhitelistService
whitelist:
tags:
- CP14Wheat
count: 10
- type: storePositionSell
id: BountyDye
special: true
name: cp14-store-sell-special-dye-name
desc: cp14-store-sell-special-dye-desc
icon:
sprite: _CP14/Objects/Materials/dye.rsi
state: preview
price:
min: 100
max: 300
service: !type:CP14SellWhitelistService
whitelist:
tags:
- CP14Dye
count: 10
- type: storePositionSell
id: BountyMeat
special: true
name: cp14-store-sell-special-meat-name
desc: cp14-store-sell-special-meat-desc
icon:
sprite: _CP14/Objects/Consumable/Food/meat.rsi
state: sheepmeat
price:
min: 100
max: 300
service: !type:CP14SellWhitelistService
whitelist:
tags:
- CP14Meat
count: 10
- type: storePositionSell
id: BountyTorch
special: true
name: cp14-store-sell-special-torch-name
desc: cp14-store-sell-special-torch-desc
icon:
sprite: _CP14/Objects/Tools/torch.rsi
state: torch-unlit
price:
min: 100
max: 300
service: !type:CP14SellWhitelistService
whitelist:
tags:
- CP14Torch
count: 20
- type: storePositionSell
id: BountyFloraMaterial
special: true
name: cp14-store-sell-special-flora-name
desc: cp14-store-sell-special-flora-desc
icon:
sprite: _CP14/Objects/Materials/flora.rsi
state: grass_material1
price:
min: 100
max: 300
service: !type:CP14SellStackService
stackId: CP14FloraMaterial
count: 15
- type: storePositionSell
id: BountySpellScroll
special: true
name: cp14-store-sell-special-spell-scroll-name
desc: cp14-store-sell-special-spell-scroll-desc
icon:
sprite: _CP14/Objects/Bureaucracy/paper.rsi
state: magic
price:
min: 100
max: 300
service: !type:CP14SellWhitelistService
whitelist:
tags:
- CP14SpellScroll
count: 5
- type: storePositionSell
id: BountyAsh
special: true
name: cp14-store-sell-special-ash-name
desc: cp14-store-sell-special-ash-desc
icon:
sprite: _CP14/Objects/Materials/ash.rsi
state: ash_1
price:
min: 100
max: 250
service: !type:CP14SellStackService
stackId: CP14Ash
count: 10
- type: storePositionSell
id: BountyLucenPlanks
special: true
name: cp14-store-sell-special-lucen-name
desc: cp14-store-sell-special-lucen-desc
icon:
sprite: _CP14/Objects/Materials/lucens_wood.rsi
state: planks_2
price:
min: 300
max: 650
service: !type:CP14SellStackService
stackId: CP14LucensWoodenPlanks
count: 10

View File

@@ -158,4 +158,4 @@
- type: StorageFill
contents:
- id: CP14FoodCheeseWheel
amount: 5
amount: 5

View File

@@ -52,6 +52,7 @@
- type: Tag
tags:
- Document
- CP14SpellScroll
- type: CP14SpellStorageAccessHolding
- type: CP14SpellStorageUseDamage
damagePerMana:

View File

@@ -12,6 +12,11 @@
- pants
- type: Sprite
state: icon
- type: Butcherable
butcheringType: Knife
spawned:
- id: CP14Cloth1
amount: 1
- type: entity
parent: CP14ClothingPantsBase

View File

@@ -12,3 +12,8 @@
- shirt
- type: Sprite
state: icon
- type: Butcherable
butcheringType: Knife
spawned:
- id: CP14Cloth1
amount: 2

View File

@@ -27,6 +27,9 @@
- type: InternalTemperature
thickness: 0.02
area: 0.02 # arbitrary number that sounds right for a slab of meat
- type: Tag
tags:
- CP14Meat
- type: entity
id: CP14FoodMeatSliceBase
@@ -48,6 +51,9 @@
- type: InternalTemperature
thickness: 0.006
area: 0.006 # 1\3 of meat value
- type: Tag
tags:
- CP14MeatSlice
# Lamb Meat

View File

@@ -72,4 +72,4 @@
- state: bag
- state: tomato
- type: CP14Seed
plantProto: CP14PlantTomatoes
plantProto: CP14PlantTomatoes

View File

@@ -87,6 +87,9 @@
params:
variation: 0.05
volume: 10
- type: Tag
tags:
- CP14Torch
- type: entity
parent: CP14Torch

View File

@@ -65,5 +65,5 @@
id: CP14GatherCucumber
entries:
- id: CP14FoodCucumber
amount: 2
maxAmount: 3
amount: 3
maxAmount: 5

View File

@@ -65,5 +65,5 @@
id: CP14GatherPotato
entries:
- id: CP14FoodPotato
amount: 2
maxAmount: 4
amount: 3
maxAmount: 5

View File

@@ -65,5 +65,5 @@
id: CP14GatherPumpkin
entries:
- id: CP14FoodPumpkin
amount: 1
maxAmount: 2
amount: 2
maxAmount: 3

View File

@@ -65,5 +65,5 @@
id: CP14GatherTomatoes
entries:
- id: CP14FoodTomatoes
amount: 1
maxAmount: 3
amount: 3
maxAmount: 5

View File

@@ -69,5 +69,5 @@
id: CP14GatherWheat
entries:
- id: CP14Wheat
amount: 2
maxAmount: 4
amount: 3
maxAmount: 5

View File

@@ -12,21 +12,21 @@
id: CP14BasicCalmEventsTable
table: !type:AllSelector
children:
- id: CP14ClosetSkeleton
#- id: CP14ClosetSkeleton
- id: CP14ZombiesSpawn
- id: CP14HydrasSpawn
- id: CP14MosquitoSpawn
- type: entity
parent: CP14BaseGameRule
id: CP14ClosetSkeleton
components:
- type: StationEvent
weight: 5
duration: 1
minimumPlayers: 10
- type: RandomEntityStorageSpawnRule
prototype: CP14MobUndeadSkeletonCloset
#- type: entity
# parent: CP14BaseGameRule
# id: CP14ClosetSkeleton
# components:
# - type: StationEvent
# weight: 5
# duration: 1
# minimumPlayers: 10
# - type: RandomEntityStorageSpawnRule
# prototype: CP14MobUndeadSkeletonCloset
- type: entity
parent: CP14BaseStationEventShortDelay

View File

@@ -20,4 +20,28 @@
entity: CP14RoyalPumpkin
count: 10
minGroupSize: 1
maxGroupSize: 1
- type: cp14DemiplaneModifier
id: LucenTree
tiers:
- 1
- 2
- 3
generationWeight: 0.1
generationProb: 0.1
categories:
Fun: 1
requiredTags:
- CP14DemiplaneHerbals
- CP14DemiplaneOpenSky
layers:
- !type:OreDunGen
tileMask:
- CP14FloorGrass
- CP14FloorGrassLight
- CP14FloorGrassTall
entity: CP14BaseLucensTreeLarge
count: 10
minGroupSize: 1
maxGroupSize: 1

View File

@@ -65,4 +65,12 @@
craftTime: 1
entities:
CP14FoodTomatoesSlice: 1
result: CP14SeedTomato
result: CP14SeedTomato
- type: CP14Recipe
id: CP14SeedCabbage
tag: CP14RecipeCooking
craftTime: 1
entities:
CP14FoodCabbageSlice: 1
result: CP14SeedCabbage

View File

@@ -66,3 +66,15 @@
- type: Tag
id: CP14Dye
- type: Tag
id: CP14Meat
- type: Tag
id: CP14MeatSlice
- type: Tag
id: CP14Torch
- type: Tag
id: CP14SpellScroll