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:
Aviu00
2024-03-24 18:43:51 +09:00
committed by GitHub
parent 2b227be6f6
commit daffcf9a2d
19 changed files with 159 additions and 70 deletions

View File

@@ -91,6 +91,7 @@ public sealed class InteractionPopupSystem : EntitySystem
{
var ev = new MoodEffectEvent("PetAnimal");
RaiseLocalEvent(user, ev);
RaiseLocalEvent(uid, new MoodEffectEvent("BeingPet"));
}
//WD end
}

View 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"
};
}
}

View File

@@ -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);
}
}

View File

@@ -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:

View File

@@ -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);

View File

@@ -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)

View File

@@ -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);
}

View File

@@ -1,6 +1,6 @@
namespace Content.Shared._White.Keyhole.Components;
[RegisterComponent]
[RegisterComponent, Virtual]
public partial class KeyBaseComponent : Component
{
[ViewVariables(VVAccess.ReadWrite)]

View File

@@ -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;
}
}

View File

@@ -0,0 +1 @@
blood-spear-component-extra-desc = [color=darkgray]Кровавое копьё можно бросить, что заставит его разбиться и оглушить любого, кого оно поразит.[/color]

View File

@@ -1,2 +1,3 @@
bolt-barrage-component-no-empty-hand = Вам нужно иметь свободную руку, чтобы стрелять.
bolt-barrage-component-not-cultist = Вы не умеете пользоваться магией.
bolt-barrage-component-extra-desc = [color=darkgray]Для стрельбы залпом необходимо иметь свободную руку. Вобросите залп, чтобы навсегда избавиться от него.[/color]

View File

@@ -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)) } может скоро придти в себя.

View File

@@ -1 +1,3 @@
door-locked-via-key = {$door} закрыта
door-locked-via-key = {$door} закрыта
door-keyhole-different-form = Форма замка этой двери не совпадает с формой ключа.
construction-examine-condition-door-locked = Дверь не должна быть закрыта на ключ.

View File

@@ -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

View File

@@ -8,7 +8,7 @@
sprite: Objects/Materials/materials.rsi
- type: Item
sprite: Objects/Materials/materials.rsi
size: Normal
size: Small
- type: Tag
tags:
- DroneUsable

View File

@@ -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

View File

@@ -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

View File

@@ -172,7 +172,7 @@
- key: enum.CultStructureCraftUiKey.Key
type: StructureCraftBoundUserInterface
- type: Item
size: Normal
size: Small
- type: CultItem
- type: entity

View File

@@ -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: "Я весело поиграл в интересную аркаду."