Endscreen message + command objectives updadte (#533)

* add simple end screen common goals

* finish common objectives endscreen

* personal objectives endscreen

* Update personal_objectives.yml

* new empire objectives
This commit is contained in:
Ed
2024-11-04 13:41:09 +03:00
committed by GitHub
parent 16a0b99daf
commit c21dd891f3
26 changed files with 274 additions and 102 deletions

View File

@@ -1,11 +1,15 @@
using System.Text;
using Content.Server._CP14.GameTicking.Rules.Components;
using Content.Server._CP14.StationCommonObjectives;
using Content.Server.GameTicking;
using Content.Server.GameTicking.Rules;
using Content.Server.Mind;
using Content.Shared.GameTicking.Components;
using Content.Shared.Mind;
using Content.Shared.Objectives.Components;
using Content.Shared.Objectives.Systems;
using Content.Shared.Random.Helpers;
using Content.Shared.Roles;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
@@ -16,6 +20,7 @@ public sealed class CP14CommonObjectivesRule : GameRuleSystem<CP14CommonObjectiv
[Dependency] private readonly MindSystem _mind = default!;
[Dependency] private readonly IPrototypeManager _proto = default!;
[Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly SharedObjectivesSystem _objectives = default!;
public override void Initialize()
{
@@ -34,6 +39,9 @@ public sealed class CP14CommonObjectivesRule : GameRuleSystem<CP14CommonObjectiv
var query = EntityQueryEnumerator<CP14StationCommonObjectivesComponent>();
while (query.MoveNext(out var stationUid, out var stationObj))
{
var mindComp = EnsureComp<MindComponent>(stationUid);
component.StationMind = (stationUid, mindComp);
foreach (var jobObj in component.JobObjectives)
{
foreach (var weightGroupProto in jobObj.Value)
@@ -43,7 +51,7 @@ public sealed class CP14CommonObjectivesRule : GameRuleSystem<CP14CommonObjectiv
var objectiveProto = weightGroup.Pick(_random);
if (!TryCreateCommonObjective(objectiveProto, out var objective) || objective is null)
if (!_objectives.TryCreateObjective(component.StationMind.Value, objectiveProto, out var objective))
continue;
stationObj.JobObjectives.Add(objective.Value, jobObj.Key);
@@ -59,7 +67,7 @@ public sealed class CP14CommonObjectivesRule : GameRuleSystem<CP14CommonObjectiv
var objectiveProto = weightGroup.Pick(_random);
if (!TryCreateCommonObjective(objectiveProto, out var objective) || objective is null)
if (!_objectives.TryCreateObjective(component.StationMind.Value, objectiveProto, out var objective))
continue;
stationObj.DepartmentObjectives.Add(objective.Value, depObj.Key);
@@ -68,31 +76,6 @@ public sealed class CP14CommonObjectivesRule : GameRuleSystem<CP14CommonObjectiv
}
}
private bool TryCreateCommonObjective(string objectiveProto, out EntityUid? objective)
{
objective = null;
if (!_proto.HasIndex<EntityPrototype>(objectiveProto))
{
Log.Error($"Invalid objective prototype {objectiveProto}, don't found entity prototype");
return false;
}
objective = Spawn(objectiveProto);
if (!TryComp<ObjectiveComponent>(objective, out var comp)) //TODO: мы не можем в ObjectiveSystem делать цели без привязки к разуму. Поэтому щиткодим создания тут.
{
Del(objective);
Log.Error($"Invalid objective prototype {objectiveProto}, missing ObjectiveComponent");
return false;
}
var afterEv = new ObjectiveAfterAssignEvent(null, null, comp, MetaData(objective.Value));
RaiseLocalEvent(objective.Value, ref afterEv);
return true;
}
private void OnPlayerSpawning(PlayerSpawnCompleteEvent args)
{
//TODO: Multiply station support required
@@ -125,4 +108,55 @@ public sealed class CP14CommonObjectivesRule : GameRuleSystem<CP14CommonObjectiv
_mind.AddObjective(mindId, mind, depObj.Key);
}
}
protected override void AppendRoundEndText(EntityUid uid,
CP14CommonObjectivesRuleComponent component,
GameRuleComponent gameRule,
ref RoundEndTextAppendEvent args)
{
base.AppendRoundEndText(uid, component, gameRule, ref args);
var query = EntityQueryEnumerator<CP14StationCommonObjectivesComponent>();
while (query.MoveNext(out var objectives))
{
var grouped = new Dictionary<DepartmentPrototype, List<EntityUid>>();
foreach (var department in objectives.DepartmentObjectives)
{
var indexedDepartment = _proto.Index(department.Value);
if (!grouped.ContainsKey(indexedDepartment))
grouped.Add(indexedDepartment, new List<EntityUid>());
grouped[indexedDepartment].Add(department.Key);
}
foreach (var group in grouped)
{
var sb = new StringBuilder();
sb.Append($"[head=3][color={group.Key.Color.ToHex()}][bold]{Loc.GetString(group.Key.Name)}[/bold][/color][/head]\n");
foreach (var objEnt in group.Value)
{
if (!TryComp<ObjectiveComponent>(objEnt, out var objComp))
continue;
if (component.StationMind is null)
continue;
var progress = _objectives.GetProgress(objEnt, component.StationMind.Value) ?? 0;
var status = "cp14-objective-endtext-status-failure";
if (progress > 0.75f)
status = "cp14-objective-endtext-status-success-a";
if (progress > 0.99f)
status = "cp14-objective-endtext-status-success";
var meta = MetaData(objEnt);
sb.Append($"{Loc.GetString(objComp.LocIssuer)}: {meta.EntityName}\n");
sb.Append($"{Loc.GetString("cp14-objective-endtext-progress", ("value", (int)(progress * 100)))} - {Loc.GetString(status)}\n");
}
args.AddLine(sb.ToString());
}
}
}
}

View File

@@ -1,8 +1,14 @@
using System.Text;
using Content.Server._CP14.GameTicking.Rules.Components;
using Content.Server.GameTicking;
using Content.Server.GameTicking.Rules;
using Content.Server.Mind;
using Content.Shared.GameTicking.Components;
using Content.Shared.Objectives.Components;
using Content.Shared.Objectives.Systems;
using Content.Shared.Random.Helpers;
using Content.Shared.Roles.Jobs;
using Robust.Server.Player;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
@@ -13,6 +19,9 @@ public sealed class CP14PersonalObjectivesRule : GameRuleSystem<CP14PersonalObje
[Dependency] private readonly MindSystem _mind = default!;
[Dependency] private readonly IPrototypeManager _proto = default!;
[Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly SharedJobSystem _jobs = default!;
[Dependency] private readonly IPlayerManager _player = default!;
[Dependency] private readonly SharedObjectivesSystem _objectives = default!;
public override void Initialize()
{
@@ -42,7 +51,15 @@ public sealed class CP14PersonalObjectivesRule : GameRuleSystem<CP14PersonalObje
if (!_proto.TryIndex(weightGroupProto, out var weightGroup))
continue;
_mind.TryAddObjective(mindId.Value, mind, weightGroup.Pick(_random));
_mind.TryAddObjective(mindId.Value, mind, weightGroup.Pick(_random), out var objective);
if (objective is not null)
{
if (!personalObj.PersonalObjectives.ContainsKey((mindId.Value, mind)))
personalObj.PersonalObjectives.Add((mindId.Value, mind), new());
personalObj.PersonalObjectives[(mindId.Value, mind)].Add(objective.Value);
}
}
}
@@ -62,9 +79,62 @@ public sealed class CP14PersonalObjectivesRule : GameRuleSystem<CP14PersonalObje
if (!_proto.TryIndex(weightGroupProto, out var weightGroup))
continue;
_mind.TryAddObjective(mindId.Value, mind, weightGroup.Pick(_random));
_mind.TryAddObjective(mindId.Value, mind, weightGroup.Pick(_random), out var objective);
if (objective is not null)
{
if (!personalObj.PersonalObjectives.ContainsKey((mindId.Value, mind)))
personalObj.PersonalObjectives.Add((mindId.Value, mind), new());
personalObj.PersonalObjectives[(mindId.Value, mind)].Add(objective.Value);
}
}
}
}
}
protected override void AppendRoundEndText(EntityUid uid,
CP14PersonalObjectivesRuleComponent component,
GameRuleComponent gameRule,
ref RoundEndTextAppendEvent args)
{
base.AppendRoundEndText(uid, component, gameRule, ref args);
var sb = new StringBuilder();
sb.Append($"[head=2]{Loc.GetString("cp14-objective-issuer-personal")}[/head]\n");
foreach (var (mind, objectives) in component.PersonalObjectives)
{
var name = mind.Comp.CharacterName ?? Loc.GetString("cp14-objective-unknown");
var role = Loc.GetString("cp14-objective-unknown");
var ckey = Loc.GetString("cp14-objective-unknown");
if (_jobs.MindTryGetJob(mind, out var job))
role = Loc.GetString(job.Name);
if (mind.Comp.UserId is not null)
{
ckey = _player.GetPlayerData(mind.Comp.UserId.Value).UserName;
}
sb.Append($"[head=3]{name} - {role}[/head]\n");
sb.Append($"[color=#949494]{ckey}[/color]\n");
foreach (var objEnt in objectives)
{
if (!TryComp<ObjectiveComponent>(objEnt, out var objComp))
continue;
var progress = _objectives.GetProgress(objEnt, mind) ?? 0;
var status = "cp14-objective-endtext-status-failure";
if (progress > 0.75f)
status = "cp14-objective-endtext-status-success-a";
if (progress > 0.99f)
status = "cp14-objective-endtext-status-success";
var meta = MetaData(objEnt);
sb.Append($"{meta.EntityName} - {Loc.GetString(status)} ({(int)(progress * 100)}%)\n");
}
}
args.AddLine(sb.ToString());
}
}

View File

@@ -1,3 +1,4 @@
using Content.Shared.Mind;
using Content.Shared.Random;
using Content.Shared.Roles;
using Robust.Shared.Prototypes;
@@ -7,7 +8,7 @@ namespace Content.Server._CP14.GameTicking.Rules.Components;
/// <summary>
/// A rule that assigns common goals to different roles. Common objectives are generated once at the beginning of a round and are shared between players.
/// </summary>
[RegisterComponent, Access(typeof(CP14PersonalObjectivesRule))]
[RegisterComponent, Access(typeof(CP14CommonObjectivesRule))]
public sealed partial class CP14CommonObjectivesRuleComponent : Component
{
[DataField]
@@ -15,4 +16,10 @@ public sealed partial class CP14CommonObjectivesRuleComponent : Component
[DataField]
public Dictionary<ProtoId<DepartmentPrototype>, List<ProtoId<WeightedRandomPrototype>>> DepartmentObjectives = new();
/// <summary>
/// all tasks must have a “mind”. This mind has all the common tasks for compatibility
/// </summary>
[DataField]
public Entity<MindComponent>? StationMind;
}

View File

@@ -1,3 +1,4 @@
using Content.Shared.Mind;
using Content.Shared.Random;
using Content.Shared.Roles;
using Robust.Shared.Prototypes;
@@ -15,4 +16,10 @@ public sealed partial class CP14PersonalObjectivesRuleComponent : Component
[DataField]
public Dictionary<ProtoId<DepartmentPrototype>, List<ProtoId<WeightedRandomPrototype>>> DepartmentObjectives = new();
/// <summary>
/// All of the objectives added by this rule. 1 mind -> many objectives
/// </summary>
[DataField]
public Dictionary<Entity<MindComponent>, List<EntityUid>> PersonalObjectives = new();
}

View File

@@ -39,7 +39,4 @@ public sealed partial class CP14TownSendConditionComponent : Component
[DataField(required: true)]
public LocId DescriptionText;
[DataField(required: true)]
public LocId DescriptionMultiplyText;
}

View File

@@ -38,14 +38,14 @@ public sealed class CP14CurrencyCollectConditionSystem : EntitySystem
private void OnCollectAfterAssign(Entity<CP14CurrencyCollectConditionComponent> condition, ref ObjectiveAfterAssignEvent args)
{
_metaData.SetEntityName(condition.Owner, Loc.GetString(condition.Comp.ObjectiveText), args.Meta);
_metaData.SetEntityName(condition.Owner, Loc.GetString(condition.Comp.ObjectiveText, ("coins", _currency.GetCurrencyPrettyString(condition.Comp.Currency))), args.Meta);
_metaData.SetEntityDescription(condition.Owner, Loc.GetString(condition.Comp.ObjectiveDescription, ("coins", _currency.GetCurrencyPrettyString(condition.Comp.Currency))), args.Meta);
_objectives.SetIcon(condition.Owner, condition.Comp.ObjectiveSprite);
}
private void OnStoredAfterAssign(Entity<CP14CurrencyStoredConditionComponent> condition, ref ObjectiveAfterAssignEvent args)
{
_metaData.SetEntityName(condition.Owner, Loc.GetString(condition.Comp.ObjectiveText), args.Meta);
_metaData.SetEntityName(condition.Owner, Loc.GetString(condition.Comp.ObjectiveText, ("coins", _currency.GetCurrencyPrettyString(condition.Comp.Currency))), args.Meta);
_metaData.SetEntityDescription(condition.Owner, Loc.GetString(condition.Comp.ObjectiveDescription, ("coins", _currency.GetCurrencyPrettyString(condition.Comp.Currency))), args.Meta);
_objectives.SetIcon(condition.Owner, condition.Comp.ObjectiveSprite);
}

View File

@@ -85,11 +85,8 @@ public sealed class CP14TownSendConditionSystem : EntitySystem
var group = _proto.Index(condition.Comp.CollectGroup);
var title = Loc.GetString(condition.Comp.ObjectiveText, ("itemName", Loc.GetString(group.Name)));
var description = condition.Comp.CollectionSize > 1
? Loc.GetString(condition.Comp.DescriptionMultiplyText, ("itemName", Loc.GetString(group.Name)), ("count", condition.Comp.CollectionSize))
: Loc.GetString(condition.Comp.DescriptionText, ("itemName", Loc.GetString(group.Name)));
var title = Loc.GetString(condition.Comp.ObjectiveText, ("itemName", Loc.GetString(group.Name)), ("count", condition.Comp.CollectionSize));
var description = Loc.GetString(condition.Comp.DescriptionText, ("itemName", Loc.GetString(group.Name)), ("count", condition.Comp.CollectionSize));
_metaData.SetEntityName(condition.Owner, title, args.Meta);
_metaData.SetEntityDescription(condition.Owner, description, args.Meta);

View File

@@ -14,4 +14,7 @@ public sealed partial class CP14StealAreaAutoJobConnectComponent : Component
[DataField]
public HashSet<ProtoId<DepartmentPrototype>> Departments = new();
[DataField]
public bool Stations = true;
}

View File

@@ -1,3 +1,4 @@
using Content.Server._CP14.StationCommonObjectives;
using Content.Server.GameTicking;
using Content.Server.Mind;
using Content.Server.Objectives.Components;
@@ -27,6 +28,15 @@ public sealed class CP14StealAreaAutoJobConnectSystem : EntitySystem
if (!TryComp<StealAreaComponent>(autoConnect, out var stealArea))
return;
if (autoConnect.Comp.Stations)
{
var query = EntityQueryEnumerator<CP14StationCommonObjectivesComponent>();
while (query.MoveNext(out var uid, out _))
{
stealArea.Owners.Add(uid);
}
}
foreach (var player in _playerManager.Sessions)
{
if (!_mind.TryGetMind(player.UserId, out var playerMind))

View File

@@ -340,6 +340,20 @@ public abstract class SharedMindSystem : EntitySystem
return true;
}
/// <summary>
/// CP14 Extension - Tries to create and add an objective from its prototype id, and return objective uid.
/// </summary>
/// <returns>Returns true if adding the objective succeeded.</returns>
public bool TryAddObjective(EntityUid mindId, MindComponent mind, string proto, out EntityUid? objective)
{
objective = _objectives.TryCreateObjective(mindId, mind, proto);
if (objective == null)
return false;
AddObjective(mindId, mind, objective.Value);
return true;
}
/// <summary>
/// Adds an objective that already exists, and is assumed to have had its requirements checked.
/// </summary>

View File

@@ -1,4 +1,12 @@
cp14-currency-examine-title = Market price:
cp14-currency-converter-examine-title = Cash:
cp14-currency-examine-gp = [color=#ebad3b]{$coin}gp[/color]
cp14-currency-examine-sp = [color=#bad1d6]{$coin}sp[/color]
cp14-currency-examine-cp = [color=#824e27]{$coin}cp[/color]
cp14-currency-examine-cp = [color=#824e27]{$coin}cp[/color]
cp14-currency-converter-insert = {$cash}cp ddeposited!
cp14-verb-categories-currency-converter = Withdraw currency:
cp14-currency-converter-get-cp = As cp (1cp)
cp14-currency-converter-get-sp = As sp (10cp)
cp14-currency-converter-get-gp = As gp (100cp)
cp14-currency-converter-get-pp = As pp (1000cp)

View File

@@ -1,8 +1,7 @@
cp14-objective-issuer-town = [color=#fcae38]Orders of the Empire[/color]
cp14-objective-town-send-title = Extract { $itemName }
cp14-objective-town-send-desc = Your task is to mine and ship { $itemName } to the city on a merchant ship.
cp14-objective-town-send-multiply-desc = Your task is to mine and ship { $count } { $itemName } to the city on a merchant ship.
cp14-objective-town-send-title = Extract { $count } { $itemName }
cp14-objective-town-send-desc = Your task is to mine and ship { $count } { $itemName } to the city on a merchant ship.
cp14-objective-bank-earning-title = Increase the bank's wealth
cp14-objective-bank-earning-desc = There must be at least { $coins } in the bank vault. You can use any methods of earning money that do not violate the law.
cp14-objective-bank-earning-title = Accumulate in the vault{ $coins }
cp14-objective-bank-earning-desc = There must be at least{ $coins } in the bank vault. You can use any methods of earning money that do not violate the law.

View File

@@ -1,4 +1,4 @@
cp14-objective-issuer-personal = [color="#95a6c2"]Personal objectives[/color]
cp14-objective-personal-currency-collect-title = Make money
cp14-objective-personal-currency-collect-desc = I plan to earn at least {$coins} by working here.
cp14-objective-personal-currency-collect-title = Earn{$coins}
cp14-objective-personal-currency-collect-desc = I plan to earn at least{$coins} by working here.

View File

@@ -0,0 +1,7 @@
cp14-objective-endtext-progress = Task completed by [bold]{$value}%[/bold]
cp14-objective-endtext-status-success = [color=#26f09c]DONe[/color]
cp14-objective-endtext-status-success-a = [color=#f0a926]ALMOST DONE[/color]
cp14-objective-endtext-status-failure = [color=#cc2727]FAILED[/color]
cp14-objective-unknown = Unknown

View File

@@ -1 +1,3 @@
cp14-steal-target-gold-ore = gold ore
cp14-steal-target-dino = yumkaraptors
cp14-steal-target-mole = predatory moles
cp14-steal-target-boar = boars or pigs

View File

@@ -1,8 +1,7 @@
cp14-objective-issuer-town = [color=#fcae38]Приказ империи[/color]
cp14-objective-town-send-title = Добыть { $itemName }
cp14-objective-town-send-desc = Ваша задача - добыть и отправить { $itemName } в город на торговом корабле.
cp14-objective-town-send-multiply-desc = Ваша задача - добыть и отправить { $count } { $itemName } в город на торговом корабле.
cp14-objective-town-send-title = Добыть { $count } { $itemName }
cp14-objective-town-send-desc = Ваша задача - добыть и отправить { $count } { $itemName } в город на торговом корабле.
cp14-objective-bank-earning-title = Преумножить состояние
cp14-objective-bank-earning-desc = В банковском хранилище должно находиться не меньше { $coins }. Вы можете использовать любые методы заработка, не нарушающие закон.
cp14-objective-bank-earning-title = Накопить в хранилище{ $coins }
cp14-objective-bank-earning-desc = В банковском хранилище должно находиться не меньше{ $coins }. Вы можете использовать любые методы заработка, не нарушающие закон.

View File

@@ -1,4 +1,4 @@
cp14-objective-issuer-personal = [color="#95a6c2"]Личные цели[/color]
cp14-objective-personal-currency-collect-title = Заработать денег
cp14-objective-personal-currency-collect-desc = Я планирую заработать как минимум {$coins}, работая здесь.
cp14-objective-personal-currency-collect-title = Заработать{$coins}
cp14-objective-personal-currency-collect-desc = Я планирую заработать как минимум{$coins}, работая здесь.

View File

@@ -0,0 +1,7 @@
cp14-objective-endtext-progress = Задача выполнена на [bold]{$value}%[/bold]
cp14-objective-endtext-status-success = [color=#26f09c]ВЫПОЛНЕНО[/color]
cp14-objective-endtext-status-success-a = [color=#f0a926]ПОЧТИ ВЫПОЛНЕНО[/color]
cp14-objective-endtext-status-failure = [color=#cc2727]ПРОВАЛЕНО[/color]
cp14-objective-unknown = Неизвестный

View File

@@ -1 +1,3 @@
cp14-steal-target-gold-ore = золотой руды
cp14-steal-target-dino = юмкарапторов
cp14-steal-target-mole = хищных кротов
cp14-steal-target-boar = кабанов или свиней

View File

@@ -152,6 +152,8 @@
gender: epicene
- type: ReplacementAccent
accent: pig
- type: StealTarget
stealGroup: CP14Boar
- type: entity
id: CP14MobBoar
@@ -191,3 +193,5 @@
- type: NPCRetaliation
attackMemoryLength: 10
- type: FactionException
- type: StealTarget
stealGroup: CP14Boar

View File

@@ -106,6 +106,8 @@
variation: 0.125
- type: SoundWhileAlive
- type: FloorOcclusion
- type: StealTarget
stealGroup: CP14Dino
- type: entity
id: CP14MobDinoSmallHydra

View File

@@ -92,6 +92,8 @@
- type: Tag
tags:
- FootstepSound
- type: StealTarget
stealGroup: CP14Mole
- type: entity
id: CP14ActionMoleSpellSubterraneanLeap

View File

@@ -47,6 +47,4 @@
sprite: _CP14/Objects/Materials/gold_ore.rsi
layers:
- state: ore1
map: ["random"]
- type: StealTarget
stealGroup: CP14Gold
map: ["random"]

View File

@@ -19,23 +19,41 @@
maxCollectionSize: 10
objectiveText: cp14-objective-town-send-title
descriptionText: cp14-objective-town-send-desc
descriptionMultiplyText: cp14-objective-town-send-multiply-desc
- type: Objective
- type: entity
parent: CP14BaseTownSendObjective
id: CP14TownSendGoldObjective
id: CP14TownSendDinoObjective
components:
- type: CP14TownSendCondition
collectGroup: CP14Gold
minCollectionSize: 200
maxCollectionSize: 250
collectGroup: CP14Dino
minCollectionSize: 10
maxCollectionSize: 50
- type: entity
parent: CP14BaseTownSendObjective
id: CP14TownSendMoleObjective
components:
- type: CP14TownSendCondition
collectGroup: CP14Mole
minCollectionSize: 10
maxCollectionSize: 50
- type: entity
parent: CP14BaseTownSendObjective
id: CP14TownSendBoarObjective
components:
- type: CP14TownSendCondition
collectGroup: CP14Boar
minCollectionSize: 10
maxCollectionSize: 50
- type: weightedRandom
id: CP14TownSendObjectiveGroup
weights:
CP14TownSendGoldObjective: 1
CP14TownSendDinoObjective: 1
CP14TownSendMoleObjective: 1
CP14TownSendBoarObjective: 1
#Bank money
- type: entity
@@ -51,13 +69,6 @@
state: coin10
- type: Objective
- type: entity
parent: CP14BaseTownBankEarningObjective
id: CP14TownBankEarningObjectiveSmall
components:
- type: CP14CurrencyStoredCondition
currency: 10000
- type: entity
parent: CP14BaseTownBankEarningObjective
id: CP14TownBankEarningObjectiveMedium
@@ -75,6 +86,5 @@
- type: weightedRandom
id: CP14BankEarningObjectiveGroup
weights:
CP14TownBankEarningObjectiveSmall: 1
CP14TownBankEarningObjectiveMedium: 0.6
CP14TownBankEarningObjectiveBig: 0.3

View File

@@ -24,28 +24,9 @@
state: coin10
# Collect currency group
- type: entity
parent: CP14BasePersonalCurrencyCollectObjective
id: CP14PersonalCurrencyCollectObjectiveSmall
components:
- type: Objective
difficulty: 0.25
- type: CP14CurrencyCollectCondition
currency: 500
- type: entity
parent: CP14BasePersonalCurrencyCollectObjective
id: CP14PersonalCurrencyCollectObjectiveMedium
components:
- type: Objective
difficulty: 0.5
- type: CP14CurrencyCollectCondition
currency: 750
- type: entity
parent: CP14BasePersonalCurrencyCollectObjective
id: CP14PersonalCurrencyCollectObjectiveBig
id: CP14PersonalCurrencyCollectObjective
components:
- type: Objective
difficulty: 1
@@ -55,6 +36,4 @@
- type: weightedRandom
id: CP14PersonalCurrencyCollectObjectiveGroup
weights:
CP14PersonalCurrencyCollectObjectiveSmall: 0.25
CP14PersonalCurrencyCollectObjectiveMedium: 0.5
CP14PersonalCurrencyCollectObjectiveBig: 1
CP14PersonalCurrencyCollectObjective: 1

View File

@@ -1,6 +1,20 @@
- type: stealTargetGroup
id: CP14Gold
name: cp14-steal-target-gold-ore
id: CP14Dino
name: cp14-steal-target-dino
sprite:
sprite: _CP14/Objects/Materials/gold_ore.rsi
state: ore1
sprite: _CP14/Mobs/Animals/dino.rsi
state: dead
- type: stealTargetGroup
id: CP14Mole
name: cp14-steal-target-mole
sprite:
sprite: _CP14/Mobs/Monster/mole.rsi
state: dead
- type: stealTargetGroup
id: CP14Boar
name: cp14-steal-target-boar
sprite:
sprite: _CP14/Mobs/Animals/boar.rsi
state: dead