Fixes and stuff (#229)
* - add: Add rites description. * - fix: Fix fuel tank explosion. * - tweak: Jug can attack now. * - tweak: Less material size. * - fix: Translation fix. * - tweak: Dead people are collideable. * - tweak: Less small mobs damage. * - add: You can now shoot yourself. * - add: Mood effect for felinids. * Revert "- fix: Fix fuel tank explosion." This reverts commit 72d9d6d2c5a3e579c50e8fa63a58e6d989dbe9e9. * - fix: Keyhole fixes. * - tweak: Doors now cost less material. * - fix: Change loc.
This commit is contained in:
@@ -91,6 +91,7 @@ public sealed class InteractionPopupSystem : EntitySystem
|
||||
{
|
||||
var ev = new MoodEffectEvent("PetAnimal");
|
||||
RaiseLocalEvent(user, ev);
|
||||
RaiseLocalEvent(uid, new MoodEffectEvent("BeingPet"));
|
||||
}
|
||||
//WD end
|
||||
}
|
||||
|
||||
33
Content.Server/_White/Construction/DoorUnlocked.cs
Normal file
33
Content.Server/_White/Construction/DoorUnlocked.cs
Normal file
@@ -0,0 +1,33 @@
|
||||
using Content.Shared._White.Keyhole.Components;
|
||||
using Content.Shared.Construction;
|
||||
using Content.Shared.Examine;
|
||||
using JetBrains.Annotations;
|
||||
|
||||
namespace Content.Server._White.Construction;
|
||||
|
||||
[UsedImplicitly, DataDefinition]
|
||||
public sealed partial class DoorUnlocked : IGraphCondition
|
||||
{
|
||||
public bool Condition(EntityUid uid, IEntityManager entityManager)
|
||||
{
|
||||
return !entityManager.TryGetComponent(uid, out KeyholeComponent? keyhole) || !keyhole.Locked;
|
||||
}
|
||||
|
||||
public bool DoExamine(ExaminedEvent args)
|
||||
{
|
||||
if (Condition(args.Examined, IoCManager.Resolve<IEntityManager>()))
|
||||
return false;
|
||||
|
||||
args.PushMarkup(Loc.GetString("construction-examine-condition-door-locked"));
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
public IEnumerable<ConstructionGuideEntry> GenerateGuideEntry()
|
||||
{
|
||||
yield return new ConstructionGuideEntry
|
||||
{
|
||||
Localization = "construction-examine-condition-door-locked"
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,6 @@
|
||||
using Content.Shared._White.Keyhole.Components;
|
||||
using System.Diagnostics;
|
||||
using Content.Server._White.Cult.Structures;
|
||||
using Content.Shared._White.Keyhole.Components;
|
||||
using Content.Shared._White.Keyhole;
|
||||
using Content.Shared.DoAfter;
|
||||
using Content.Shared.Doors.Components;
|
||||
@@ -10,10 +12,7 @@ using Robust.Shared.Random;
|
||||
|
||||
namespace Content.Server._White.Keyhole;
|
||||
|
||||
// TODO: Исправить, что дверь на замке можно разобрать через ее id: DoorGraph
|
||||
// TODO: Исправить, что при прерывании закрытия девственной двери форма замка принимает форму ключа, хотя закрытия не произошло
|
||||
|
||||
public sealed partial class KeyholeSystem : EntitySystem
|
||||
public sealed class KeyholeSystem : EntitySystem
|
||||
{
|
||||
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
@@ -37,52 +36,55 @@ public sealed partial class KeyholeSystem : EntitySystem
|
||||
|
||||
private void OnKeyInsert(EntityUid uid, KeyComponent component, AfterInteractEvent ev)
|
||||
{
|
||||
Debug.Assert(component.FormId != null);
|
||||
|
||||
if (TryComp<KeyformComponent>(ev.Target, out var keyformComponent))
|
||||
OnKeyInsertForm(uid, component, keyformComponent, ev);
|
||||
{
|
||||
OnKeyInsertForm(uid, component, keyformComponent, ev.Target.Value, ev.User);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!TryComp<KeyholeComponent>(ev.Target, out var keyholeComponent))
|
||||
if (!TryComp<KeyholeComponent>(ev.Target, out var keyholeComponent) || !CanLock(ev.Target.Value))
|
||||
return;
|
||||
|
||||
keyholeComponent.FormId ??= component.FormId;
|
||||
|
||||
if (!CanLock(keyholeComponent.Owner, keyholeComponent, component))
|
||||
if (keyholeComponent.FormId != null && keyholeComponent.FormId != component.FormId)
|
||||
{
|
||||
_popupSystem.PopupEntity(Loc.GetString("door-keyhole-different-form"), ev.Target.Value);
|
||||
return;
|
||||
}
|
||||
|
||||
var doAfterEventArgs =
|
||||
new DoAfterArgs(EntityManager, ev.User, keyholeComponent.Delay, new KeyInsertDoAfterEvent(), ev.Target, ev.Used)
|
||||
{
|
||||
BreakOnTargetMove = true,
|
||||
BreakOnUserMove = true,
|
||||
BreakOnDamage = true
|
||||
};
|
||||
new DoAfterArgs(EntityManager, ev.User, keyholeComponent.Delay,
|
||||
new KeyInsertDoAfterEvent(component.FormId.Value), ev.Target, ev.Used)
|
||||
{
|
||||
BreakOnTargetMove = true,
|
||||
BreakOnUserMove = true,
|
||||
BreakOnDamage = true
|
||||
};
|
||||
|
||||
_doAfter.TryStartDoAfter(doAfterEventArgs);
|
||||
}
|
||||
|
||||
private bool CanLock(EntityUid uid, KeyholeComponent keyholeComponent, KeyComponent keyComponent)
|
||||
private bool CanLock(EntityUid uid)
|
||||
{
|
||||
var can = TryComp<DoorComponent>(uid, out var doorComponent) &&
|
||||
keyholeComponent.FormId == keyComponent.FormId &&
|
||||
doorComponent.State == DoorState.Closed;
|
||||
|
||||
return can;
|
||||
return !HasComp<RunicDoorComponent>(uid) && TryComp<DoorComponent>(uid, out var doorComponent) &&
|
||||
doorComponent.State == DoorState.Closed;
|
||||
}
|
||||
|
||||
private void OnDoAfter(EntityUid uid, KeyholeComponent component, KeyInsertDoAfterEvent args)
|
||||
{
|
||||
if (args.Handled || args.Cancelled || IsStateChanging(uid))
|
||||
if (args.Handled || args.Cancelled || !CanLock(uid))
|
||||
return;
|
||||
|
||||
Debug.Assert(component.FormId == null || component.FormId == args.FormId);
|
||||
|
||||
component.FormId = args.FormId;
|
||||
|
||||
Lock(uid, component, args.User);
|
||||
|
||||
args.Handled = true;
|
||||
}
|
||||
|
||||
private bool IsStateChanging(EntityUid uid)
|
||||
{
|
||||
return TryComp<DoorComponent>(uid, out var doorComponent) &&
|
||||
(doorComponent.State == DoorState.Closing || doorComponent.State == DoorState.Opening);
|
||||
}
|
||||
|
||||
private void Lock(EntityUid uid, KeyholeComponent component, EntityUid user)
|
||||
{
|
||||
var sound = component.Locked ? component.UnlockSound : component.LockSound;
|
||||
@@ -96,22 +98,22 @@ public sealed partial class KeyholeSystem : EntitySystem
|
||||
component.Locked = !component.Locked;
|
||||
}
|
||||
|
||||
private void OnKeyInsertForm(EntityUid uid, KeyComponent keyComponent, KeyformComponent keyformComponent, AfterInteractEvent args)
|
||||
private void OnKeyInsertForm(EntityUid uid, KeyComponent keyComponent, KeyformComponent keyformComponent, EntityUid keyform, EntityUid user)
|
||||
{
|
||||
if (!keyformComponent.IsUsed)
|
||||
{
|
||||
keyformComponent.FormId ??= keyComponent.FormId;
|
||||
_appearance.SetData(keyformComponent.Owner, KeyformVisuals.IsUsed, true);
|
||||
_appearance.SetData(keyform, KeyformVisuals.IsUsed, true);
|
||||
|
||||
_audio.PlayPvs(keyformComponent.PressSound, uid);
|
||||
_popupSystem.PopupEntity(Loc.GetString("key-pressed-in-keyform-message-first", ("user", args.User), ("key", uid)), uid);
|
||||
_popupSystem.PopupEntity(Loc.GetString("key-pressed-in-keyform-message-first", ("user", user), ("key", uid)), uid);
|
||||
|
||||
keyformComponent.IsUsed = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
keyComponent.FormId = keyformComponent.FormId;
|
||||
_popupSystem.PopupEntity(Loc.GetString("key-pressed-in-keyform-message", ("user", args.User), ("key", uid)), uid);
|
||||
_popupSystem.PopupEntity(Loc.GetString("key-pressed-in-keyform-message", ("user", user), ("key", uid)), uid);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -15,7 +15,6 @@ using Content.Shared.Speech;
|
||||
using Content.Shared.Standing;
|
||||
using Content.Shared.Strip.Components;
|
||||
using Content.Shared.Throwing;
|
||||
using Robust.Shared.Physics.Components;
|
||||
|
||||
namespace Content.Shared.Mobs.Systems;
|
||||
|
||||
@@ -56,12 +55,7 @@ public partial class MobStateSystem
|
||||
_standing.Stand(target);
|
||||
break;
|
||||
case MobState.Dead:
|
||||
RemComp<CollisionWakeComponent>(target);
|
||||
_standing.Stand(target);
|
||||
if (!_standing.IsDown(target) && TryComp<PhysicsComponent>(target, out var physics))
|
||||
{
|
||||
_physics.SetCanCollide(target, true, body: physics);
|
||||
}
|
||||
|
||||
break;
|
||||
case MobState.Invalid:
|
||||
@@ -91,14 +85,8 @@ public partial class MobStateSystem
|
||||
_appearance.SetData(target, MobStateVisuals.State, MobState.Critical);
|
||||
break;
|
||||
case MobState.Dead:
|
||||
EnsureComp<CollisionWakeComponent>(target);
|
||||
_standing.Down(target);
|
||||
|
||||
if (_standing.IsDown(target) && TryComp<PhysicsComponent>(target, out var physics))
|
||||
{
|
||||
_physics.SetCanCollide(target, false, body: physics);
|
||||
}
|
||||
|
||||
_appearance.SetData(target, MobStateVisuals.State, MobState.Dead);
|
||||
break;
|
||||
case MobState.Invalid:
|
||||
|
||||
@@ -190,6 +190,10 @@ public abstract partial class SharedProjectileSystem : EntitySystem
|
||||
|
||||
private void PreventCollision(EntityUid uid, ProjectileComponent component, ref PreventCollideEvent args)
|
||||
{
|
||||
// Shoot yourself!
|
||||
if (args.OtherEntity == component.Target) // WD
|
||||
return;
|
||||
|
||||
if (component.IgnoreShooter && (args.OtherEntity == component.Shooter || args.OtherEntity == component.Weapon))
|
||||
{
|
||||
args.Cancelled = true;
|
||||
@@ -356,4 +360,4 @@ public record struct ProjectileHitEvent(DamageSpecifier Damage, EntityUid Target
|
||||
/// Raised after a projectile has dealt it's damage.
|
||||
/// </summary>
|
||||
[ByRefEvent]
|
||||
public record struct AfterProjectileHitEvent(DamageSpecifier Damage, EntityUid Target, Fixture Fixture);
|
||||
public record struct AfterProjectileHitEvent(DamageSpecifier Damage, EntityUid Target, Fixture Fixture);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using Content.Shared._White.Cult.Components;
|
||||
using Content.Shared.Actions;
|
||||
using Content.Shared.Examine;
|
||||
using Content.Shared.Hands;
|
||||
using Content.Shared.StatusEffect;
|
||||
using Content.Shared.Stunnable;
|
||||
@@ -23,6 +24,12 @@ public sealed class BloodSpearSystem : EntitySystem
|
||||
SubscribeLocalEvent<BloodSpearComponent, ComponentRemove>(OnRemove);
|
||||
SubscribeLocalEvent<BloodSpearComponent, GotEquippedHandEvent>(OnEquip);
|
||||
SubscribeLocalEvent<BloodSpearComponent, ThrowDoHitEvent>(OnThrowDoHit);
|
||||
SubscribeLocalEvent<BloodSpearComponent, ExaminedEvent>(OnExamine);
|
||||
}
|
||||
|
||||
private void OnExamine(Entity<BloodSpearComponent> ent, ref ExaminedEvent args)
|
||||
{
|
||||
args.PushMarkup(Loc.GetString("blood-spear-component-extra-desc"));
|
||||
}
|
||||
|
||||
private void OnThrowDoHit(Entity<BloodSpearComponent> ent, ref ThrowDoHitEvent args)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System.Linq;
|
||||
using Content.Shared._White.Cult.Components;
|
||||
using Content.Shared.Examine;
|
||||
using Content.Shared.Ghost;
|
||||
using Content.Shared.Hands;
|
||||
using Content.Shared.Hands.Components;
|
||||
@@ -29,6 +30,12 @@ public sealed class BoltBarrageSystem : EntitySystem
|
||||
SubscribeLocalEvent<BoltBarrageComponent, UnequippedHandEvent>(OnUnequipHand);
|
||||
SubscribeLocalEvent<BoltBarrageComponent, ContainerGettingRemovedAttemptEvent>(OnRemoveAttempt);
|
||||
SubscribeLocalEvent<BoltBarrageComponent, OnEmptyGunShotEvent>(OnEmptyShot);
|
||||
SubscribeLocalEvent<BoltBarrageComponent, ExaminedEvent>(OnExamine);
|
||||
}
|
||||
|
||||
private void OnExamine(Entity<BoltBarrageComponent> ent, ref ExaminedEvent args)
|
||||
{
|
||||
args.PushMarkup(Loc.GetString("bolt-barrage-component-extra-desc"));
|
||||
}
|
||||
|
||||
private void OnUnequipHand(Entity<BoltBarrageComponent> ent, ref UnequippedHandEvent args)
|
||||
@@ -51,7 +58,7 @@ public sealed class BoltBarrageSystem : EntitySystem
|
||||
|
||||
private void OnDrop(Entity<BoltBarrageComponent> ent, ref DroppedEvent args)
|
||||
{
|
||||
if (_net.IsServer)
|
||||
if (_net.IsServer && ent.Comp.Unremoveable)
|
||||
QueueDel(ent);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
namespace Content.Shared._White.Keyhole.Components;
|
||||
|
||||
[RegisterComponent]
|
||||
[RegisterComponent, Virtual]
|
||||
public partial class KeyBaseComponent : Component
|
||||
{
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
|
||||
@@ -4,5 +4,13 @@ using Robust.Shared.Serialization;
|
||||
namespace Content.Shared._White.Keyhole;
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public sealed partial class KeyInsertDoAfterEvent : SimpleDoAfterEvent {}
|
||||
public sealed partial class KeyInsertDoAfterEvent : SimpleDoAfterEvent
|
||||
{
|
||||
public int FormId;
|
||||
|
||||
public KeyInsertDoAfterEvent(int formId)
|
||||
{
|
||||
FormId = formId;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
1
Resources/Locale/ru-RU/cult/blood-spear.ftl
Normal file
1
Resources/Locale/ru-RU/cult/blood-spear.ftl
Normal file
@@ -0,0 +1 @@
|
||||
blood-spear-component-extra-desc = [color=darkgray]Кровавое копьё можно бросить, что заставит его разбиться и оглушить любого, кого оно поразит.[/color]
|
||||
@@ -1,2 +1,3 @@
|
||||
bolt-barrage-component-no-empty-hand = Вам нужно иметь свободную руку, чтобы стрелять.
|
||||
bolt-barrage-component-not-cultist = Вы не умеете пользоваться магией.
|
||||
bolt-barrage-component-extra-desc = [color=darkgray]Для стрельбы залпом необходимо иметь свободную руку. Вобросите залп, чтобы навсегда избавиться от него.[/color]
|
||||
|
||||
@@ -7,7 +7,10 @@ comp-mind-ghosting-prevented = Вы не можете стать призрак
|
||||
comp-mind-examined-catatonic = { CAPITALIZE(SUBJECT($ent)) } в кататоническом ступоре. Стрессы жизни в глубоком космосе, должно быть, оказались слишком тяжелы для { OBJECT($ent) }. Восстановление маловероятно.
|
||||
comp-mind-examined-dead = { CAPITALIZE(POSS-PRONOUN($ent)) } душа покинула тело.
|
||||
comp-mind-examined-ssd = { CAPITALIZE(SUBJECT($ent)) } рассеяно смотрит в пустоту и ни на что не реагирует. { CAPITALIZE(SUBJECT($ent)) } может скоро придти в себя.
|
||||
comp-mind-examined-dead-and-ssd = Душа { CAPITALIZE(POSS-ADJ($ent)) } ушла и улетела. Любое восстановление маловероятно.
|
||||
comp-mind-examined-dead-and-ssd = { CAPITALIZE(POSS-ADJ($ent)) } душа дремлет и может скоро вернуться.
|
||||
comp-mind-examined-dead-and-irrecoverable = { CAPITALIZE(POSS-ADJ($ent)) } душа покинула тело и пропала. Восстановление маловероятно.
|
||||
|
||||
mind-component-no-mind-and-alive-text = { CAPITALIZE(SUBJECT($ent)) } в кататоническом ступоре. Стрессы жизни в глубоком космосе, должно быть, оказались слишком тяжелы для него. Восстановление маловероятно.
|
||||
mind-component-no-mind-and-dead-text = { CAPITALIZE(POSS-PRONOUN($ent)) } душа покинула тело и пропала. Восстановление маловероятно.
|
||||
mind-component-mind-and-no-session-text = { CAPITALIZE(SUBJECT($ent)) } рассеяно смотрит в пустоту и ни на что не реагирует. { CAPITALIZE(SUBJECT($ent)) } может скоро придти в себя.
|
||||
|
||||
|
||||
@@ -1 +1,3 @@
|
||||
door-locked-via-key = {$door} закрыта
|
||||
door-locked-via-key = {$door} закрыта
|
||||
door-keyhole-different-form = Форма замка этой двери не совпадает с формой ключа.
|
||||
construction-examine-condition-door-locked = Дверь не должна быть закрыта на ключ.
|
||||
|
||||
@@ -61,6 +61,11 @@
|
||||
- type: Tag
|
||||
tags:
|
||||
- VimPilot
|
||||
- type: MobThresholds
|
||||
thresholds:
|
||||
0: Alive
|
||||
20: Critical
|
||||
30: Dead
|
||||
|
||||
- type: entity
|
||||
name: bee
|
||||
@@ -466,8 +471,8 @@
|
||||
- type: MobThresholds
|
||||
thresholds:
|
||||
0: Alive
|
||||
40: Critical
|
||||
60: Dead
|
||||
20: Critical
|
||||
30: Dead
|
||||
- type: MovementSpeedModifier
|
||||
baseWalkSpeed : 2.5
|
||||
baseSprintSpeed : 4
|
||||
@@ -2965,8 +2970,8 @@
|
||||
- type: MobThresholds
|
||||
thresholds:
|
||||
0: Alive
|
||||
40: Critical
|
||||
60: Dead
|
||||
20: Critical
|
||||
30: Dead
|
||||
- type: MovementSpeedModifier
|
||||
baseWalkSpeed : 4
|
||||
baseSprintSpeed : 4
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
sprite: Objects/Materials/materials.rsi
|
||||
- type: Item
|
||||
sprite: Objects/Materials/materials.rsi
|
||||
size: Normal
|
||||
size: Small
|
||||
- type: Tag
|
||||
tags:
|
||||
- DroneUsable
|
||||
|
||||
@@ -77,6 +77,12 @@
|
||||
acts: [ "Destruction" ]
|
||||
- type: Label
|
||||
originalName: jug
|
||||
- type: MeleeWeapon
|
||||
soundNoDamage:
|
||||
path: "/Audio/Effects/Fluids/splat.ogg"
|
||||
damage:
|
||||
types:
|
||||
Blunt: 0
|
||||
|
||||
- type: entity
|
||||
parent: Jug
|
||||
|
||||
@@ -11,35 +11,35 @@
|
||||
- !type:SnapToGrid { }
|
||||
steps:
|
||||
- material: Steel
|
||||
amount: 20
|
||||
amount: 5
|
||||
doAfter: 15
|
||||
- to: woodDoor
|
||||
completed:
|
||||
- !type:SnapToGrid { }
|
||||
steps:
|
||||
- material: WoodPlank
|
||||
amount: 20
|
||||
amount: 5
|
||||
doAfter: 15
|
||||
- to: plasmaDoor
|
||||
completed:
|
||||
- !type:SnapToGrid { }
|
||||
steps:
|
||||
- material: Plasma
|
||||
amount: 20
|
||||
amount: 5
|
||||
doAfter: 15
|
||||
- to: goldDoor
|
||||
completed:
|
||||
- !type:SnapToGrid { }
|
||||
steps:
|
||||
- material: Gold
|
||||
amount: 20
|
||||
amount: 5
|
||||
doAfter: 15
|
||||
- to: silverDoor
|
||||
completed:
|
||||
- !type:SnapToGrid { }
|
||||
steps:
|
||||
- material: Silver
|
||||
amount: 20
|
||||
amount: 5
|
||||
doAfter: 15
|
||||
- to: bananiumDoor
|
||||
completed:
|
||||
@@ -53,7 +53,7 @@
|
||||
- !type:SnapToGrid { }
|
||||
steps:
|
||||
- material: Paper
|
||||
amount: 20
|
||||
amount: 5
|
||||
doAfter: 15
|
||||
- node: metalDoor
|
||||
entity: MetalDoor
|
||||
@@ -62,7 +62,9 @@
|
||||
completed:
|
||||
- !type:SpawnPrototype
|
||||
prototype: SheetSteel1
|
||||
amount: 20
|
||||
amount: 5
|
||||
conditions:
|
||||
- !type:DoorUnlocked
|
||||
steps:
|
||||
- tool: Anchoring
|
||||
doAfter: 15
|
||||
@@ -73,7 +75,9 @@
|
||||
completed:
|
||||
- !type:SpawnPrototype
|
||||
prototype: MaterialWoodPlank1
|
||||
amount: 20
|
||||
amount: 5
|
||||
conditions:
|
||||
- !type:DoorUnlocked
|
||||
steps:
|
||||
- tool: Anchoring
|
||||
doAfter: 15
|
||||
@@ -84,7 +88,9 @@
|
||||
completed:
|
||||
- !type:SpawnPrototype
|
||||
prototype: SheetPlasma
|
||||
amount: 20
|
||||
amount: 5
|
||||
conditions:
|
||||
- !type:DoorUnlocked
|
||||
steps:
|
||||
- tool: Anchoring
|
||||
doAfter: 15
|
||||
@@ -95,7 +101,9 @@
|
||||
completed:
|
||||
- !type:SpawnPrototype
|
||||
prototype: IngotGold1
|
||||
amount: 20
|
||||
amount: 5
|
||||
conditions:
|
||||
- !type:DoorUnlocked
|
||||
steps:
|
||||
- tool: Anchoring
|
||||
doAfter: 15
|
||||
@@ -106,7 +114,9 @@
|
||||
completed:
|
||||
- !type:SpawnPrototype
|
||||
prototype: IngotSilver1
|
||||
amount: 20
|
||||
amount: 5
|
||||
conditions:
|
||||
- !type:DoorUnlocked
|
||||
steps:
|
||||
- tool: Anchoring
|
||||
doAfter: 15
|
||||
@@ -117,7 +127,9 @@
|
||||
completed:
|
||||
- !type:SpawnPrototype
|
||||
prototype: SheetPaper1
|
||||
amount: 20
|
||||
amount: 5
|
||||
conditions:
|
||||
- !type:DoorUnlocked
|
||||
steps:
|
||||
- tool: Anchoring
|
||||
doAfter: 15
|
||||
@@ -129,6 +141,8 @@
|
||||
- !type:SpawnPrototype
|
||||
prototype: MaterialBananium1
|
||||
amount: 5
|
||||
conditions:
|
||||
- !type:DoorUnlocked
|
||||
steps:
|
||||
- tool: Anchoring
|
||||
doAfter: 15
|
||||
|
||||
@@ -172,7 +172,7 @@
|
||||
- key: enum.CultStructureCraftUiKey.Key
|
||||
type: StructureCraftBoundUserInterface
|
||||
- type: Item
|
||||
size: Normal
|
||||
size: Small
|
||||
- type: CultItem
|
||||
|
||||
- type: entity
|
||||
|
||||
@@ -1,10 +1,17 @@
|
||||
- type: moodEffect
|
||||
- type: moodEffect
|
||||
id: BeingHugged
|
||||
desc: "Обнимашки - круто."
|
||||
moodChange: enum.MoodChangeLevel.Small
|
||||
positiveEffect: true
|
||||
timeout: 2
|
||||
|
||||
- type: moodEffect
|
||||
id: BeingPet
|
||||
desc: "Меня погладили!"
|
||||
moodChange: enum.MoodChangeLevel.Small
|
||||
positiveEffect: true
|
||||
timeout: 2
|
||||
|
||||
- type: moodEffect
|
||||
id: ArcadePlay
|
||||
desc: "Я весело поиграл в интересную аркаду."
|
||||
|
||||
Reference in New Issue
Block a user