Trading content (#1010)

* reroll positions

* more trading content

* bugfixes

* more content

* guidebook uodate

* Update buy.yml
This commit is contained in:
Ed
2025-03-12 00:51:58 +03:00
committed by GitHub
parent 56f4012a49
commit 93ed28d34c
53 changed files with 827 additions and 157 deletions

View File

@@ -0,0 +1,64 @@
using Content.Shared._CP14.Cargo;
using Content.Shared._CP14.Cargo.Prototype;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
using Robust.Shared.Utility;
namespace Content.Server._CP14.Cargo.BuyServices;
public sealed partial class CP14RerollSpecialPositionsService : CP14StoreBuyService
{
[DataField] public int RerollBuy;
[DataField] public int RerollSell;
public override void Buy(EntityManager entManager, IPrototypeManager prototype, Entity<CP14TradingPortalComponent> portal)
{
var randomSystem = IoCManager.Resolve<IRobustRandom>();
var cargoSystem = entManager.System<CP14CargoSystem>();
if (RerollBuy > 0)
{
var removed = 0;
for (var i = 0; i < RerollBuy; i++)
{
if (portal.Comp.CurrentSpecialBuyPositions.Count == 0)
break;
removed++;
var position = randomSystem.Pick(portal.Comp.CurrentSpecialBuyPositions);
portal.Comp.CurrentSpecialBuyPositions.Remove(position.Key);
}
cargoSystem.AddRandomBuySpecialPosition(portal, removed);
}
if (RerollSell > 0)
{
var removed = 0;
for (var i = 0; i < RerollSell; i++)
{
if (portal.Comp.CurrentSpecialSellPositions.Count == 0)
break;
removed++;
var position = randomSystem.Pick(portal.Comp.CurrentSpecialSellPositions);
portal.Comp.CurrentSpecialSellPositions.Remove(position.Key);
}
cargoSystem.AddRandomSellSpecialPosition(portal, removed);
}
}
public override string GetName(IPrototypeManager protoMan)
{
return string.Empty;
}
public override EntProtoId? GetEntityView(IPrototypeManager protoManager)
{
return null;
}
public override SpriteSpecifier? GetTexture(IPrototypeManager protoManager)
{
return null;
}
}

View File

@@ -47,9 +47,8 @@ public sealed partial class CP14CargoSystem
//Add special buy positions
foreach (var (proto, price) in tradePortalComp.CurrentSpecialBuyPositions)
{
var name = proto.NameOverride ?? proto.Service.GetName(_proto);
var name = proto.NameOverride is null ? proto.Service.GetName(_proto) : Loc.GetString(proto.NameOverride);
var desc = new StringBuilder();
//desc.Append(Loc.GetString(proto.Desc) + "\n");
desc.Append("\n" + Loc.GetString("cp14-store-buy-hint", ("name", name), ("code", "[color=yellow][bold]#" + proto.Code + "[/bold][/color]")));
prodBuy.Add(new CP14StoreUiProductEntry(proto.ID, proto.IconOverride ?? proto.Service.GetTexture(_proto), proto.Service.GetEntityView(_proto), name, desc.ToString(), price, true));
@@ -58,9 +57,8 @@ public sealed partial class CP14CargoSystem
//Add static buy positions
foreach (var (proto, price) in tradePortalComp.CurrentBuyPositions)
{
var name = proto.NameOverride ?? proto.Service.GetName(_proto);
var name = proto.NameOverride is null ? proto.Service.GetName(_proto) : Loc.GetString(proto.NameOverride);
var desc = new StringBuilder();
//desc.Append(Loc.GetString(proto.Desc) + "\n");
desc.Append("\n" + Loc.GetString("cp14-store-buy-hint", ("name", name), ("code", "[color=yellow][bold]#" + proto.Code + "[/bold][/color]")));
prodBuy.Add(new CP14StoreUiProductEntry(proto.ID, proto.IconOverride ?? proto.Service.GetTexture(_proto), proto.Service.GetEntityView(_proto), name, desc.ToString(), price, false));
@@ -69,10 +67,9 @@ public sealed partial class CP14CargoSystem
//Add special sell positions
foreach (var (proto, price) in tradePortalComp.CurrentSpecialSellPositions)
{
var name = proto.Service.GetName(_proto);
var name = proto.NameOverride is null ? proto.Service.GetName(_proto) : Loc.GetString(proto.NameOverride);
var desc = new StringBuilder();
//desc.Append(Loc.GetString(proto.Desc) + "\n");
desc.Append("\n" + Loc.GetString("cp14-store-sell-hint", ("name", name)));
prodSell.Add(new CP14StoreUiProductEntry(
@@ -86,21 +83,20 @@ public sealed partial class CP14CargoSystem
}
//Add static sell positions
foreach (var proto in tradePortalComp.CurrentSellPositions)
foreach (var (proto, price) in tradePortalComp.CurrentSellPositions)
{
var name = proto.Key.Service.GetName(_proto);
var name = proto.NameOverride is null ? proto.Service.GetName(_proto) : Loc.GetString(proto.NameOverride);
var desc = new StringBuilder();
//desc.Append(Loc.GetString(proto.Key.Desc) + "\n");
desc.Append("\n" + Loc.GetString("cp14-store-sell-hint", ("name", name)));
prodSell.Add(new CP14StoreUiProductEntry(
proto.Key.ID,
proto.Key.Service.GetTexture(_proto),
proto.Key.Service.GetEntityView(_proto),
proto.ID,
proto.Service.GetTexture(_proto),
proto.Service.GetEntityView(_proto),
name,
desc.ToString(),
proto.Value,
price,
false));
}

View File

@@ -5,6 +5,7 @@ using Content.Server.Storage.Components;
using Content.Server.Storage.EntitySystems;
using Content.Shared._CP14.Cargo;
using Content.Shared._CP14.Cargo.Prototype;
using Content.Shared._CP14.Currency;
using Content.Shared.Paper;
using Content.Shared.Throwing;
using Robust.Server.GameObjects;
@@ -105,7 +106,7 @@ public sealed partial class CP14CargoSystem : CP14SharedCargoSystem
}
}
private void AddRandomBuySpecialPosition(Entity<CP14TradingPortalComponent> portal, int count)
public void AddRandomBuySpecialPosition(Entity<CP14TradingPortalComponent> portal, int count)
{
if (_buyProto is null)
return;
@@ -137,7 +138,7 @@ public sealed partial class CP14CargoSystem : CP14SharedCargoSystem
}
}
private void AddRandomSellSpecialPosition(Entity<CP14TradingPortalComponent> portal, int count)
public void AddRandomSellSpecialPosition(Entity<CP14TradingPortalComponent> portal, int count)
{
if (_sellProto is null)
return;
@@ -215,10 +216,9 @@ public sealed partial class CP14CargoSystem : CP14SharedCargoSystem
var cash = 0;
foreach (var stored in storage.Contents.ContainedEntities)
{
var price = _currency.GetTotalCurrency(stored);
if (price > 0)
if (TryComp<CP14CurrencyComponent>(stored, out var currency))
{
cash += price;
cash += currency.Currency;
QueueDel(stored);
}
}

View File

@@ -121,7 +121,7 @@ public sealed partial class CP14CurrencySystem
if (ent.Comp.Whitelist is not null && !_whitelist.IsValid(ent.Comp.Whitelist, args.Used))
return;
var delta = GetTotalCurrency(args.Used);
var delta = GetTotalCurrencyRecursive(args.Used);
ent.Comp.Balance += delta;
QueueDel(args.Used);
@@ -206,7 +206,7 @@ public sealed partial class CP14CurrencySystem
private bool ProcessEntity(EntityUid ent, ref int remainder, HashSet<EntityUid> spawns)
{
var singleCurrency = GetTotalCurrency(ent);
var singleCurrency = GetTotalCurrencyRecursive(ent);
if (singleCurrency > remainder)
{

View File

@@ -54,7 +54,7 @@ public sealed partial class CP14CurrencySystem : CP14SharedCurrencySystem
{
foreach (var containedEnt in container.ContainedEntities)
{
total += GetTotalCurrency(containedEnt);
total += GetTotalCurrencyRecursive(containedEnt);
}
}
@@ -63,7 +63,7 @@ public sealed partial class CP14CurrencySystem : CP14SharedCurrencySystem
private void OnExamine(Entity<CP14CurrencyExaminableComponent> currency, ref ExaminedEvent args)
{
var total = GetTotalCurrency(currency);
var total = GetTotalCurrencyRecursive(currency);
var push = Loc.GetString("cp14-currency-examine-title");
push += GetCurrencyPrettyString(total);

View File

@@ -45,7 +45,7 @@ public sealed class CP14CurrencyCollectConditionSystem : EntitySystem
if (mind.OwnedEntity is null)
return 0;
count += _currency.GetTotalCurrency(mind.OwnedEntity.Value);
count += _currency.GetTotalCurrencyRecursive(mind.OwnedEntity.Value);
var result = count / (float)condition.Currency;
result = Math.Clamp(result, 0, 1);

View File

@@ -45,7 +45,7 @@ public sealed class CP14RichestJobConditionSystem : EntitySystem
if (mind.OwnedEntity is null)
return 0;
var ourValue = _currency.GetTotalCurrency(mind.OwnedEntity.Value);
var ourValue = _currency.GetTotalCurrencyRecursive(mind.OwnedEntity.Value);
var otherMaxValue = 0;
var allHumans = _mind.GetAliveHumans(mindId);
@@ -63,7 +63,7 @@ public sealed class CP14RichestJobConditionSystem : EntitySystem
if (otherHuman.Comp.OwnedEntity is null)
continue;
var otherValue = _currency.GetTotalCurrency(otherHuman.Comp.OwnedEntity.Value);
var otherValue = _currency.GetTotalCurrencyRecursive(otherHuman.Comp.OwnedEntity.Value);
if (otherValue > otherMaxValue)
otherMaxValue = otherValue;
}

View File

@@ -22,7 +22,7 @@ public sealed partial class CP14StoreBuyPositionPrototype : IPrototype
[DataField(required: true)]
public string Code = string.Empty;
[DataField(required: true)]
[DataField(required: true, serverOnly: true)]
public CP14StoreBuyService Service = default!;
[DataField]

View File

@@ -17,9 +17,15 @@ public sealed partial class CP14StoreSellPositionPrototype : IPrototype
[DataField(required: true)]
public int Price = 100;
[DataField(required: true)]
[DataField(required: true, serverOnly: true)]
public CP14StoreSellService Service = default!;
[DataField]
public SpriteSpecifier? IconOverride;
[DataField]
public LocId? NameOverride;
[DataField]
public bool RoundstartAvailable = true;
@@ -27,7 +33,7 @@ public sealed partial class CP14StoreSellPositionPrototype : IPrototype
/// 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;
public bool Special;
[DataField]
public HashSet<ProtoId<CP14StoreFactionPrototype>> Factions = new();

View File

@@ -37,7 +37,7 @@ public partial class CP14SharedCurrencySystem : EntitySystem
return sb.ToString();
}
public int GetTotalCurrency(EntityUid uid)
public int GetTotalCurrencyRecursive(EntityUid uid)
{
var ev = new CP14GetCurrencyEvent();
RaiseLocalEvent(uid, ev);

View File

@@ -0,0 +1,2 @@
cp14-buy-position-reroll-buy = Reroll purchase offers
cp14-buy-position-reroll-sell = Reroll sales offers

View File

@@ -0,0 +1,2 @@
cp14-buy-position-reroll-buy = Реролл предложений покупки
cp14-buy-position-reroll-sell = Реролл предложений продажи

View File

@@ -67584,14 +67584,14 @@ entities:
- type: Transform
pos: 105.5,61.5
parent: 2
- proto: CP14TradingPortalBradFamily
- proto: CP14SpawnUniqueTradepost
entities:
- uid: 8847
components:
- type: Transform
pos: 104.5,61.5
parent: 2
- proto: CP14TradingPortalSpiceStream
- proto: CP14SpawnUniqueTradepost
entities:
- uid: 1051
components:

View File

@@ -110813,14 +110813,14 @@ entities:
- type: Transform
pos: 52.5,-12.5
parent: 2
- proto: CP14TradingPortalHelmirWeapon
- proto: CP14SpawnUniqueTradepost
entities:
- uid: 4176
components:
- type: Transform
pos: 51.5,-12.5
parent: 2
- proto: CP14TradingPortalSylphoria
- proto: CP14SpawnUniqueTradepost
entities:
- uid: 4163
components:

View File

@@ -185,4 +185,45 @@
- type: StorageFill
contents:
- id: CP14VialSmallRainbow
amount: 5
amount: 5
- type: storePositionBuy
id: Candles
code: CANDLES
price: 100
iconOverride:
sprite: Objects/Misc/candles.rsi
state: loadout
factions:
- BradFamily
service: !type:CP14BuyItemsService
product: CP14WoodenChestFilledCandles
- type: entity
parent: CP14WoodenChest
id: CP14WoodenChestFilledCandles
name: candles chest
components:
- type: StorageFill
contents:
- id: CP14CandleRed
amount: 2
- id: CP14CandleBlue
amount: 2
- id: CP14CandleBlack
amount: 2
- id: CP14CandleGreen
amount: 2
- id: CP14CandlePurple
amount: 2
- id: CP14CandleRedSmall
amount: 2
- id: CP14CandleBlueSmall
amount: 2
- id: CP14CandleBlackSmall
amount: 2
- id: CP14CandleGreenSmall
amount: 2
- id: CP14CandlePurpleSmall
amount: 2

View File

@@ -78,16 +78,6 @@
proto: CP14AirLily
count: 5
- type: storePositionSell
id: CP14CrystalShardBase
special: true
price: 50
factions:
- BradFamily
service: !type:CP14SellPrototypeService
proto: CP14CrystalShardBase
count: 5
- type: storePositionSell
id: CP14BaseAlchemyBomb
special: true

View File

@@ -0,0 +1,21 @@
- type: storePositionBuy
id: RerollSell
code: REROLL_SELL
price: 20
nameOverride: cp14-buy-position-reroll-sell
iconOverride:
sprite: _CP14/Interface/Misc/reroll.rsi
state: reroll
service: !type:CP14RerollSpecialPositionsService
rerollSell: 5
#- type: storePositionBuy #Неактуально, т.к. позиций таких нет
# id: RerollBuy
# code: REROLL_BUY
# price: 20
# nameOverride: cp14-buy-position-reroll-buy
# iconOverride:
# sprite: _CP14/Interface/Misc/reroll.rsi
# state: reroll
# service: !type:CP14RerollSpecialPositionsService
# rerollBuy: 5

View File

@@ -1,23 +0,0 @@
- type: storePositionSell
id: CP14FoodPieMeat
special: true
price: 60
service: !type:CP14SellPrototypeService
proto: CP14FoodPieMeat
count: 1
- type: storePositionSell
id: CP14FoodPiePumpkin
special: true
price: 60
service: !type:CP14SellPrototypeService
proto: CP14FoodPiePumpkin
count: 1
- type: storePositionSell
id: CP14FoodBreadBun
special: true
price: 20
service: !type:CP14SellPrototypeService
proto: CP14FoodBreadBun
count: 3

View File

@@ -0,0 +1,45 @@
# ANCHORABLE PROBLEMS
#- type: storePositionBuy
# id: DwarfBeer
# code: BEER_DWARF
# special: true
# nameOverride: cp14-reagent-name-dwarfbeer
# price: 150
# factions:
# - SpiceStream
# service: !type:CP14BuyItemsService
# product: CP14CraneBarrelDwarfBeer
#
#- type: storePositionBuy
# id: BeerGerbil
# code: BEER_BREEZE
# special: true
# nameOverride: cp14-reagent-name-breeze
# price: 70
# factions:
# - SpiceStream
# service: !type:CP14BuyItemsService
# product: CP14CraneBarrelSmallBeerBreeze
#
#- type: storePositionBuy
# id: AleBottomless
# code: BEER_BOTTOMLESS
# special: true
# nameOverride: cp14-reagent-name-bottomless
# price: 70
# factions:
# - SpiceStream
# service: !type:CP14BuyItemsService
# product: CP14CraneBarrelSmallAleBottomless
#
#- type: storePositionBuy
# id: WineZellasian
# code: WINE_ZELLASIAN
# special: true
# nameOverride: cp14-reagent-name-zellasian-pleasure
# price: 150
# factions:
# - SpiceStream
# service: !type:CP14BuyItemsService
# product: CP14CraneBarrelWineZellasianPleasure

View File

@@ -26,4 +26,104 @@
- SpiceStream
service: !type:CP14SellPrototypeService
proto: CP14DyeBlue
count: 5
count: 5
- type: storePositionSell
id: CP14FoodPieMeat
special: true
price: 60
factions:
- SpiceStream
service: !type:CP14SellPrototypeService
proto: CP14FoodPieMeat
count: 1
- type: storePositionSell
id: CP14FoodPiePumpkin
special: true
price: 60
factions:
- SpiceStream
service: !type:CP14SellPrototypeService
proto: CP14FoodPiePumpkin
count: 1
- type: storePositionSell
id: CP14FoodBreadBun
special: true
price: 20
factions:
- SpiceStream
service: !type:CP14SellPrototypeService
proto: CP14FoodBreadBun
count: 3
- type: storePositionSell
id: CP14FoodCabbage
special: true
price: 80
factions:
- SpiceStream
service: !type:CP14SellPrototypeService
proto: CP14FoodCabbage
count: 10
- type: storePositionSell
id: CP14FoodPumpkin
special: true
price: 80
factions:
- SpiceStream
service: !type:CP14SellPrototypeService
proto: CP14FoodPumpkin
count: 10
- type: storePositionSell
id: CP14FoodPotato
special: true
price: 80
factions:
- SpiceStream
service: !type:CP14SellPrototypeService
proto: CP14FoodPotato
count: 10
- type: storePositionSell
id: CP14FoodCucumber
special: true
price: 80
factions:
- SpiceStream
service: !type:CP14SellPrototypeService
proto: CP14FoodCucumber
count: 10
- type: storePositionSell
id: CP14FoodTomatoes
special: true
price: 80
factions:
- SpiceStream
service: !type:CP14SellPrototypeService
proto: CP14FoodTomatoes
count: 10
- type: storePositionSell
id: CP14FoodPepper
special: true
price: 80
factions:
- SpiceStream
service: !type:CP14SellPrototypeService
proto: CP14FoodPepper
count: 10
- type: storePositionSell
id: CP14FoodOnion
special: true
price: 80
factions:
- SpiceStream
service: !type:CP14SellPrototypeService
proto: CP14FoodOnion
count: 10

View File

@@ -0,0 +1,68 @@
- type: storePositionBuy
id: CP14SpellScrollResurrection
code: SCROLL_RESURRECTION
price: 100
factions:
- Sylphoria
service: !type:CP14BuyItemsService
product: CP14SpellScrollResurrection
- type: storePositionBuy
id: CP14SpellScrollCureWounds
code: CURE_WOUNDS
price: 100
factions:
- Sylphoria
service: !type:CP14BuyItemsService
product: CP14SpellScrollCureWounds
count: 5
- type: storePositionBuy
id: CP14SpellScrollCureBurn
code: CURE_BURN
price: 100
factions:
- Sylphoria
service: !type:CP14BuyItemsService
product: CP14SpellScrollCureBurn
count: 5
- type: storePositionBuy
id: CP14SpellScrollBloodPurification
code: BLOOD_PURE
price: 100
factions:
- Sylphoria
service: !type:CP14BuyItemsService
product: CP14SpellScrollBloodPurification
count: 5
- type: storePositionBuy
id: CP14SpellscrollSignalLightBlue
code: SIGNAL_BLUE
price: 50
factions:
- Sylphoria
service: !type:CP14BuyItemsService
product: CP14SpellscrollSignalLightBlue
count: 5
- type: storePositionBuy
id: CP14SpellscrollSignalLightYellow
code: SIGNAL_YELLOW
price: 50
factions:
- Sylphoria
service: !type:CP14BuyItemsService
product: CP14SpellscrollSignalLightYellow
count: 5
- type: storePositionBuy
id: CP14SpellscrollSignalLightRed
code: SIGNAL_RED
price: 50
factions:
- Sylphoria
service: !type:CP14BuyItemsService
product: CP14SpellscrollSignalLightRed
count: 5

View File

@@ -1,17 +1,17 @@
- type: storePositionSell
id: BountyTorch
special: true
price: 200
price: 20
factions:
- Sylphoria
service: !type:CP14SellPrototypeService
proto: CP14Torch
count: 20
count: 5
- type: storePositionSell
id: BountyLucenPlanks
special: true
price: 300
price: 200
factions:
- Sylphoria
service: !type:CP14SellStackService
@@ -21,152 +21,122 @@
- type: storePositionSell
id: CP14SpellScrollIceShards
special: true
price: 50
price: 20
factions:
- Sylphoria
service: !type:CP14SellPrototypeService
proto: CP14SpellScrollIceShards
count: 3
count: 1
- type: storePositionSell
id: CP14SpellScrollShadowGrab
special: true
price: 50
price: 20
factions:
- Sylphoria
service: !type:CP14SellPrototypeService
proto: CP14SpellScrollShadowGrab
count: 3
count: 1
- type: storePositionSell
id: CP14SpellScrollSphereOfLight
special: true
price: 50
price: 20
factions:
- Sylphoria
service: !type:CP14SellPrototypeService
proto: CP14SpellScrollSphereOfLight
count: 3
- type: storePositionSell
id: CP14SpellScrollCureWounds
special: true
price: 50
factions:
- Sylphoria
service: !type:CP14SellPrototypeService
proto: CP14SpellScrollCureWounds
count: 3
- type: storePositionSell
id: CP14SpellScrollBloodPurification
special: true
price: 50
factions:
- Sylphoria
service: !type:CP14SellPrototypeService
proto: CP14SpellScrollBloodPurification
count: 3
- type: storePositionSell
id: CP14SpellScrollCureBurn
special: true
price: 50
factions:
- Sylphoria
service: !type:CP14SellPrototypeService
proto: CP14SpellScrollCureBurn
count: 3
count: 1
- type: storePositionSell
id: CP14SpellScrollFlameCreation
special: true
price: 50
price: 20
factions:
- Sylphoria
service: !type:CP14SellPrototypeService
proto: CP14SpellScrollFlameCreation
count: 3
count: 1
- type: storePositionSell
id: CP14SpellScrollEarthWall
special: true
price: 50
price: 20
factions:
- Sylphoria
service: !type:CP14SellPrototypeService
proto: CP14SpellScrollEarthWall
count: 3
count: 1
- type: storePositionSell
id: CP14SpellScrollFlashLight
special: true
price: 50
price: 20
factions:
- Sylphoria
service: !type:CP14SellPrototypeService
proto: CP14SpellScrollFlashLight
count: 3
count: 1
- type: storePositionSell
id: CP14SpellScrollWaterCreation
special: true
price: 50
price: 20
factions:
- Sylphoria
service: !type:CP14SellPrototypeService
proto: CP14SpellScrollWaterCreation
count: 3
count: 1
- type: storePositionSell
id: CP14SpellScrollPlantGrowth
special: true
price: 50
price: 20
factions:
- Sylphoria
service: !type:CP14SellPrototypeService
proto: CP14SpellScrollPlantGrowth
count: 3
count: 1
- type: storePositionSell
id: CP14SpellScrollMagicSplitting
special: true
price: 50
price: 20
factions:
- Sylphoria
service: !type:CP14SellPrototypeService
proto: CP14SpellScrollMagicSplitting
count: 3
count: 1
- type: storePositionSell
id: CP14SpellScrollMagicalAcceleration
special: true
price: 50
price: 20
factions:
- Sylphoria
service: !type:CP14SellPrototypeService
proto: CP14SpellScrollMagicalAcceleration
count: 3
count: 1
- type: storePositionSell
id: CP14SpellScrollShadowStep
special: true
price: 100
price: 40
factions:
- Sylphoria
service: !type:CP14SellPrototypeService
proto: CP14SpellScrollShadowStep
count: 3
count: 1
- type: storePositionSell
id: CP14SpellScrollFireball
special: true
price: 100
price: 40
factions:
- Sylphoria
service: !type:CP14SellPrototypeService
proto: CP14SpellScrollFireball
count: 3
count: 1
- type: storePositionSell
id: CP14SpellScrollBeerCreation
@@ -176,7 +146,7 @@
- Sylphoria
service: !type:CP14SellPrototypeService
proto: CP14SpellScrollBeerCreation
count: 3
count: 1
- type: storePositionSell
id: CP14EnergyCrystalSmallEmpty
@@ -186,4 +156,104 @@
- Sylphoria
service: !type:CP14SellPrototypeService
proto: CP14EnergyCrystalSmallEmpty
count: 5
count: 5
- type: storePositionSell
id: CP14EnergyCrystalMediumEmpty
special: true
price: 80
factions:
- Sylphoria
service: !type:CP14SellPrototypeService
proto: CP14EnergyCrystalMediumEmpty
count: 3
- type: storePositionSell
id: CP14ClothingRingIceShards
special: true
price: 100
factions:
- Sylphoria
service: !type:CP14SellPrototypeService
proto: CP14ClothingRingIceShards
count: 1
- type: storePositionSell
id: CP14ClothingRingFlashLight
special: true
price: 100
factions:
- Sylphoria
service: !type:CP14SellPrototypeService
proto: CP14ClothingRingFlashLight
count: 1
- type: storePositionSell
id: CP14BaseLockpick
special: true
price: 100
factions:
- Sylphoria
service: !type:CP14SellPrototypeService
proto: CP14BaseLockpick
count: 10
- type: storePositionSell
id: CP14MobRabbit
special: true
price: 20
factions:
- Sylphoria
service: !type:CP14SellPrototypeService
proto: CP14MobRabbit
count: 5
- type: storePositionSell
id: CP14MobPig
special: true
price: 100
factions:
- Sylphoria
service: !type:CP14SellPrototypeService
proto: CP14MobPig
count: 5
- type: storePositionSell
id: CP14MobBoar
special: true
price: 120
factions:
- Sylphoria
service: !type:CP14SellPrototypeService
proto: CP14MobBoar
count: 5
- type: storePositionSell
id: CP14MobFrog
special: true
price: 10
factions:
- Sylphoria
service: !type:CP14SellPrototypeService
proto: CP14MobFrog
count: 5
- type: storePositionSell
id: CP14MobMonsterMole
special: true
price: 30
factions:
- Sylphoria
service: !type:CP14SellPrototypeService
proto: CP14MobMonsterMole
count: 1
- type: storePositionSell
id: CP14PartsMonsterGlands
special: true
price: 80
factions:
- Sylphoria
service: !type:CP14SellPrototypeService
proto: CP14PartsMonsterGlands
count: 1

View File

@@ -20,4 +20,8 @@
- type: UserInterface
interfaces:
enum.CP14StoreUiKey.Key:
type: CP14StoreBoundUserInterface
type: CP14StoreBoundUserInterface
- type: GuideHelp
guides:
- CP14_RU_Trading
- CP14_EN_Trading

View File

@@ -46,6 +46,10 @@
stateBaseClosed: base
stateDoorOpen: base_open
stateDoorClosed: base_door
- type: GuideHelp
guides:
- CP14_RU_Trading
- CP14_EN_Trading
- type: entity
parent: CP14TradingPortalBase
@@ -62,7 +66,7 @@
- state: flag_sylphoria
- type: CP14TradingPortal
faction: Sylphoria
specialSellPositionCount: 3
specialSellPositionCount: 5
- type: entity
parent: CP14TradingPortalBase
@@ -79,6 +83,7 @@
- state: flag_helmir
- type: CP14TradingPortal
faction: HelmirWeapon
specialSellPositionCount: 5
- type: entity
parent: CP14TradingPortalBase
@@ -95,7 +100,7 @@
- state: flag_bard
- type: CP14TradingPortal
faction: BradFamily
specialSellPositionCount: 3
specialSellPositionCount: 5
- type: entity
parent: CP14TradingPortalBase
@@ -111,4 +116,5 @@
shader: unshaded
- state: flag_spice
- type: CP14TradingPortal
faction: SpiceStream
faction: SpiceStream
specialSellPositionCount: 5

View File

@@ -2,7 +2,7 @@
crystallPunkAllowed: true
id: CP14_EN_Alchemy
name: Alchemy
text: "/ServerInfo/_CP14/Guidebook_EN/Alchemy.xml"
text: "/ServerInfo/_CP14/Guidebook_EN/JobsTabs/AlchemistTabs/Alchemy.xml"
children:
- CP14_EN_Precurser
- CP14_EN_ThaumaturgyEssence
@@ -13,19 +13,19 @@
crystallPunkAllowed: true
id: CP14_EN_Precurser
name: Precursers
text: "/ServerInfo/_CP14/Guidebook_EN/AlchemyTabs/Precurser.xml"
text: "/ServerInfo/_CP14/Guidebook_EN/JobsTabs/AlchemistTabs/AlchemyTabs/Precurser.xml"
filterEnabled: True
- type: guideEntry
crystallPunkAllowed: true
id: CP14_EN_ThaumaturgyEssence
name: Thaumaturgic essences
text: "/ServerInfo/_CP14/Guidebook_EN/AlchemyTabs/Essence.xml"
text: "/ServerInfo/_CP14/Guidebook_EN/JobsTabs/AlchemistTabs/AlchemyTabs/Essence.xml"
filterEnabled: True
- type: guideEntry
crystallPunkAllowed: true
id: CP14_EN_TargetEffects
name: Target alchemical solutions
text: "/ServerInfo/_CP14/Guidebook_EN/AlchemyTabs/TargetEffects.xml"
text: "/ServerInfo/_CP14/Guidebook_EN/JobsTabs/AlchemistTabs/AlchemyTabs/TargetEffects.xml"
filterEnabled: True

View File

@@ -0,0 +1,39 @@
- type: guideEntry
crystallPunkAllowed: true
id: CP14_EN_Jobs
name: Jobs
text: "/ServerInfo/_CP14/Guidebook_EN/Jobs.xml"
children:
- CP14_EN_JobAdventurer
- CP14_EN_JobAlchemist
- CP14_EN_JobMerchant
filterEnabled: True
- type: guideEntry
crystallPunkAllowed: true
id: CP14_EN_JobAdventurer
name: Adventurers
text: "/ServerInfo/_CP14/Guidebook_EN/JobsTabs/Adventurers.xml"
children:
- CP14_EN_Demiplanes
filterEnabled: True
- type: guideEntry
crystallPunkAllowed: true
id: CP14_EN_JobAlchemist
name: Alchemist
text: "/ServerInfo/_CP14/Guidebook_EN/JobsTabs/Alchemist.xml"
children:
- CP14_EN_Alchemy
filterEnabled: True
- type: guideEntry
crystallPunkAllowed: true
id: CP14_EN_JobMerchant
name: Merchant
text: "/ServerInfo/_CP14/Guidebook_EN/JobsTabs/Merchant.xml"
children:
- CP14_EN_Trading
filterEnabled: True

View File

@@ -1,13 +1,20 @@
- type: guideEntry
crystallPunkAllowed: true
id: CP14_EN_Demiplanes
name: Demiplanes exploration
text: "/ServerInfo/_CP14/Guidebook_EN/Demiplanes.xml"
filterEnabled: True
- type: guideEntry
crystallPunkAllowed: true
id: CP14_EN_Imperial_Laws
name: Imperial laws
text: "/ServerInfo/_CP14/Guidebook_EN/ImperialLaws.xml"
filterEnabled: True
- type: guideEntry
crystallPunkAllowed: true
id: CP14_EN_Demiplanes
name: Demiplanes exploration
text: "/ServerInfo/_CP14/Guidebook_EN/JobsTabs/AdventurersTabs/Demiplanes.xml"
filterEnabled: True
- type: guideEntry
crystallPunkAllowed: true
id: CP14_EN_Trading
name: External trade
text: "/ServerInfo/_CP14/Guidebook_EN/JobsTabs/MerchantTabs/Trading.xml"
filterEnabled: True

View File

@@ -2,7 +2,7 @@
crystallPunkAllowed: true
id: CP14_RU_Alchemy
name: Алхимия
text: "/ServerInfo/_CP14/Guidebook_RU/Alchemy.xml"
text: "/ServerInfo/_CP14/Guidebook_RU/JobsTabs/AlchemistTabs/Alchemy.xml"
children:
- CP14_RU_Precurser
- CP14_RU_ThaumaturgyEssence
@@ -13,19 +13,19 @@
crystallPunkAllowed: true
id: CP14_RU_Precurser
name: Природные исходники
text: "/ServerInfo/_CP14/Guidebook_RU/AlchemyTabs/Precurser.xml"
text: "/ServerInfo/_CP14/Guidebook_RU/JobsTabs/AlchemistTabs/AlchemyTabs/Precurser.xml"
filterEnabled: True
- type: guideEntry
crystallPunkAllowed: true
id: CP14_RU_ThaumaturgyEssence
name: Тауматургические эссенции
text: "/ServerInfo/_CP14/Guidebook_RU/AlchemyTabs/Essence.xml"
text: "/ServerInfo/_CP14/Guidebook_RU/JobsTabs/AlchemistTabs/AlchemyTabs/Essence.xml"
filterEnabled: True
- type: guideEntry
crystallPunkAllowed: true
id: CP14_RU_TargetEffects
name: Целевые алхимические растворы
text: "/ServerInfo/_CP14/Guidebook_RU/AlchemyTabs/TargetEffects.xml"
text: "/ServerInfo/_CP14/Guidebook_RU/JobsTabs/AlchemistTabs/AlchemyTabs/TargetEffects.xml"
filterEnabled: True

View File

@@ -0,0 +1,39 @@
- type: guideEntry
crystallPunkAllowed: true
id: CP14_RU_Jobs
name: Игровые роли
text: "/ServerInfo/_CP14/Guidebook_RU/Jobs.xml"
children:
- CP14_RU_JobAdventurer
- CP14_RU_JobAlchemist
- CP14_RU_JobMerchant
filterEnabled: True
- type: guideEntry
crystallPunkAllowed: true
id: CP14_RU_JobAdventurer
name: Авантюрист
text: "/ServerInfo/_CP14/Guidebook_RU/JobsTabs/Adventurers.xml"
children:
- CP14_RU_Demiplanes
filterEnabled: True
- type: guideEntry
crystallPunkAllowed: true
id: CP14_RU_JobAlchemist
name: Алхимик
text: "/ServerInfo/_CP14/Guidebook_RU/JobsTabs/Alchemist.xml"
children:
- CP14_RU_Alchemy
filterEnabled: True
- type: guideEntry
crystallPunkAllowed: true
id: CP14_RU_JobMerchant
name: Торговец
text: "/ServerInfo/_CP14/Guidebook_RU/JobsTabs/Merchant.xml"
children:
- CP14_RU_Trading
filterEnabled: True

View File

@@ -1,13 +1,20 @@
- type: guideEntry
crystallPunkAllowed: true
id: CP14_RU_Demiplanes
name: Исследование демипланов
text: "/ServerInfo/_CP14/Guidebook_RU/Demiplanes.xml"
filterEnabled: True
- type: guideEntry
crystallPunkAllowed: true
id: CP14_RU_Imperial_Laws
name: Имперские законы
text: "/ServerInfo/_CP14/Guidebook_RU/ImperialLaws.xml"
filterEnabled: True
- type: guideEntry
crystallPunkAllowed: true
id: CP14_RU_Demiplanes
name: Исследование демипланов
text: "/ServerInfo/_CP14/Guidebook_RU/JobsTabs/AdventurersTabs/Demiplanes.xml"
filterEnabled: True
- type: guideEntry
crystallPunkAllowed: true
id: CP14_RU_Trading
name: Внешняя торговля
text: "/ServerInfo/_CP14/Guidebook_RU/JobsTabs/MerchantTabs/Trading.xml"
filterEnabled: True

View File

@@ -6,8 +6,7 @@
text: "/ServerInfo/_CP14/Guidebook_EN/Welcome.xml"
children:
- CP14_EN_Species
- CP14_EN_Alchemy
- CP14_EN_Demiplanes
- CP14_EN_Jobs
- CP14_EN_Imperial_Laws
- type: guideEntry
@@ -18,6 +17,5 @@
text: "/ServerInfo/_CP14/Guidebook_RU/Welcome.xml"
children:
- CP14_RU_Species
- CP14_RU_Alchemy
- CP14_RU_Demiplanes
- CP14_RU_Jobs
- CP14_RU_Imperial_Laws

View File

@@ -0,0 +1,7 @@
<Document>
# Jobs
TODO
</Document>

View File

@@ -0,0 +1,11 @@
<Document>
# Adventurer
The Adventurer is one of the available game roles, focused on obtaining resources for the settlement, through risky ventures.
## Ways to make money
- [textlink="Demiplane exploration" link="CP14_EN_Demiplanes"]
</Document>

View File

@@ -0,0 +1,11 @@
<Document>
# Alchemist
TODO
## Ways to make money
- [textlink="Alchemy" link="CP14_EN_Alchemy"]
</Document>

View File

@@ -0,0 +1,17 @@
<Document>
# Merchant
The Merchant is one of the available game roles, focusing on social interactions between players.
The Merchant always has one of the [color=#a4885c]Shops[/color] located in the city at his disposal. You can use this construction to centralize other players' interactions with you.
## Economic Race
The main goal of the merchant as a role is to become the richest of the merchants. To fulfill this goal, you must have more currency on hand at the end of the round than the other merchants, and you must be alive.
## Ways to make money
- [textlink="External trade" link="CP14_EN_Trading"]
</Document>

View File

@@ -0,0 +1,41 @@
<Document>
# Trade with the outside world
Trade outposts are one of the main ways where you can spend money, or from where you can acquire it.
<Box>
<GuideEntityEmbed Entity="CP14TradingPortalSylphoria"/>
<GuideEntityEmbed Entity="CP14TradingPortalHelmirWeapon"/>
<GuideEntityEmbed Entity="CP14TradingPortalBradFamily"/>
</Box>
There are trading outposts belonging to different factions that can be found in different locations throughout the game map. They are located in different places each round, so they have yet to be found.
Different factions offer different items for sale or purchase. If you want to buy weapons, you'll obviously need to find an outpost of Helmir's Descendants.
<Box>
<GuideEntityEmbed Entity="CP14TradingBoardBase"/>
</Box>
## Sel
To sell an item - put the requested items into an open outpost, and close it. After a few seconds, the item will be picked up and payment will be thrown to you.
<Box>
<GuideEntityEmbed Entity="CP14PenFeather"/>
<GuideEntityEmbed Entity="CP14Paper"/>
</Box>
### Purchase
To buy an item - you need to compose a paper with an order. Each purchase item has a unique code that you can see in the sales table. It starts with the symbol #.
On any paper, write any number of these unique codes, each starting with #, with a quill pen.
Put the paper with your order and the required amount of money in the outpost. In a few seconds, your order will be delivered to you and your change will be returned.
## One-time offers
Many outposts have "One Time Offers" - special items to buy or sell that are upgraded after use. These items are often particularly lucrative, and you can make more money with them.
</Document>

View File

@@ -0,0 +1,7 @@
<Document>
# Игровые роли
TODO
</Document>

View File

@@ -0,0 +1,11 @@
<Document>
# Авантюрист
Авантюрист - одна из доступных игровых ролей, сосредоточенная на добыче ресурсов для поселения, путем рискованных авантюр.
## Способы заработка
- [textlink="Исследование демипланов" link="CP14_RU_Demiplanes"]
</Document>

View File

@@ -0,0 +1,11 @@
<Document>
# Алхимик
TODO
## Способы заработка
- [textlink="Алхимия" link="CP14_RU_Alchemy"]
</Document>

View File

@@ -0,0 +1,17 @@
<Document>
# Торговец
Торговец - одна из доступных игровых ролей, сосредоточенная на социальных взаимодействиях между игроками.
Торговец всегда имеет в своем распоряжении один из [color=#a4885c]Магазинов[/color], расположенных в городе. Вы можете использовать эту постройку для централизации взаимодействия других игроков с вами.
## Экономическая гонка
Основная цель торговца как роли - стать самым богатым из торговцев. Чтобы выполнить эту цель, у вас на руках на момент конца раунда должно быть больше валюты, чем у других торговцев, и вы должны быть живыми.
## Способы заработка
- [textlink="Внешняя торговля" link="CP14_RU_Trading"]
</Document>

View File

@@ -0,0 +1,41 @@
<Document>
# Торговля с внешним миром
Торговые аванпосты - один из основных способов куда можно потратить деньги, или откуда их можно приобрести.
<Box>
<GuideEntityEmbed Entity="CP14TradingPortalSylphoria"/>
<GuideEntityEmbed Entity="CP14TradingPortalHelmirWeapon"/>
<GuideEntityEmbed Entity="CP14TradingPortalBradFamily"/>
</Box>
Существуют торговые аванпосты, принадлежащие к различным фракциям, которые можно найти в разных местах по всей игровой карте. Каждый раунд они располагаются в разных местах, так что их еще предстоит найти.
Разные фракции предлагают различные товары на продажу или покупку. Если вы хотите прикупить оружие, вам явно нужно найти аванпост Хельмировых потомков.
<Box>
<GuideEntityEmbed Entity="CP14TradingBoardBase"/>
</Box>
## Продажа
Чтобы продать товар - положите в открытый аванпост запрошенные товары, и закройте его. Через несколько секунд товар заберут, а вам выбросят оплату.
<Box>
<GuideEntityEmbed Entity="CP14PenFeather"/>
<GuideEntityEmbed Entity="CP14Paper"/>
</Box>
### Покупка
Чтобы купить товар - вам необходимо составить бумагу с заказом. У каждой позиции покупки есть уникальный код, который можно увидеть в торговом столе. Он начинается с символа #.
На любой бумаге напишите писчим пером любое количество этих уникальных кодов, начиная каждый с #
Положите в аванпост бумагу с заказом, и необходимое количество денег. Через несколько секунд вам доставят ваш заказ, и вернут сдачу.
## Разовые предложения
Многие аванпосты имеют "Разовые предложения" - особые позиции в покупке или продаже, которые обновляются после использования. Часто такие позиции особо выгодные, и с их помощью можно заработать больше денег.
</Document>

View File

@@ -0,0 +1,14 @@
{
"version": 1,
"size": {
"x": 32,
"y": 32
},
"license": "CC-BY-SA-4.0",
"copyright": "Created by TheShuEd (Github)",
"states": [
{
"name": "reroll"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 828 B