Chaplain stuff (#98)
* - add: Null rod. * - add: Only chaplain can use holy weapons. * - add: Chaplain is cult immune. * - fix: Fix component granting. * - add: Only chaplain can use null rod. * - add: Armaments beacon. * - add: Chaplain playtime requirement.
@@ -141,19 +141,25 @@ public sealed class InteractionOutlineSystem : EntitySystem
|
|||||||
var inRange = false;
|
var inRange = false;
|
||||||
if (localPlayer.ControlledEntity != null && !Deleted(entityToClick))
|
if (localPlayer.ControlledEntity != null && !Deleted(entityToClick))
|
||||||
{
|
{
|
||||||
inRange = _interactionSystem.InRangeUnobstructed(localPlayer.ControlledEntity.Value, entityToClick.Value);
|
|
||||||
|
|
||||||
// WD START
|
// WD START
|
||||||
if (_combatMode.IsInCombatMode(localPlayer.ControlledEntity) &&
|
if (_combatMode.IsInCombatMode(localPlayer.ControlledEntity) &&
|
||||||
(_meleeWeapon.TryGetWeapon(localPlayer.ControlledEntity.Value, out _, out var weapon) ||
|
(_meleeWeapon.TryGetWeapon(localPlayer.ControlledEntity.Value, out _, out var weapon) ||
|
||||||
TryComp(localPlayer.ControlledEntity, out weapon)))
|
TryComp(localPlayer.ControlledEntity, out weapon)))
|
||||||
{
|
{
|
||||||
|
inRange = _interactionSystem.InRangeUnobstructed(localPlayer.ControlledEntity.Value,
|
||||||
|
entityToClick.Value, weapon.Range);
|
||||||
|
|
||||||
var mousePos = _eyeManager.ScreenToMap(_inputManager.MouseScreenPosition);
|
var mousePos = _eyeManager.ScreenToMap(_inputManager.MouseScreenPosition);
|
||||||
var userPos = Transform(localPlayer.ControlledEntity.Value).MapPosition;
|
var userPos = Transform(localPlayer.ControlledEntity.Value).MapPosition;
|
||||||
|
|
||||||
if (mousePos.MapId != userPos.MapId || (userPos.Position - mousePos.Position).Length() > weapon.Range)
|
if (mousePos.MapId != userPos.MapId || (userPos.Position - mousePos.Position).Length() > weapon.Range)
|
||||||
inRange = false;
|
inRange = false;
|
||||||
} // WD END
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
inRange = _interactionSystem.InRangeUnobstructed(localPlayer.ControlledEntity.Value, entityToClick.Value);
|
||||||
|
}
|
||||||
|
// WD END
|
||||||
}
|
}
|
||||||
|
|
||||||
InteractionOutlineComponent? outline;
|
InteractionOutlineComponent? outline;
|
||||||
|
|||||||
66
Content.Client/_White/Chaplain/ArmamentsBeaconBui.cs
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
using Content.Client._White.UserInterface.Radial;
|
||||||
|
using Content.Shared._White.Chaplain;
|
||||||
|
using JetBrains.Annotations;
|
||||||
|
using Robust.Client.GameObjects;
|
||||||
|
using Robust.Shared.Prototypes;
|
||||||
|
|
||||||
|
namespace Content.Client._White.Chaplain;
|
||||||
|
|
||||||
|
[UsedImplicitly]
|
||||||
|
public sealed class ArmamentsBeaconBui : BoundUserInterface
|
||||||
|
{
|
||||||
|
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
||||||
|
[Dependency] private readonly IEntityManager _entityManager = default!;
|
||||||
|
private SpriteSystem _spriteSystem = default!;
|
||||||
|
|
||||||
|
private bool _selected;
|
||||||
|
private RadialContainer? _armorSelector;
|
||||||
|
|
||||||
|
public ArmamentsBeaconBui(EntityUid owner, Enum uiKey) : base(owner, uiKey)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Open()
|
||||||
|
{
|
||||||
|
base.Open();
|
||||||
|
|
||||||
|
_spriteSystem = _entityManager.EntitySysManager.GetEntitySystem<SpriteSystem>();
|
||||||
|
var beacon = _entityManager.GetComponent<ArmamentsBeaconComponent>(Owner);
|
||||||
|
|
||||||
|
_armorSelector = new RadialContainer();
|
||||||
|
|
||||||
|
_armorSelector.Closed += () =>
|
||||||
|
{
|
||||||
|
if (_selected)
|
||||||
|
return;
|
||||||
|
|
||||||
|
SendMessage(new ArmorSelectedEvent(-1));
|
||||||
|
Close();
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var i = 0; i < beacon.Armor.Count; i++)
|
||||||
|
{
|
||||||
|
var armorPrototype = _prototypeManager.Index<EntityPrototype>(beacon.Armor[i]);
|
||||||
|
var button = _armorSelector.AddButton(armorPrototype.Name,
|
||||||
|
_spriteSystem.GetPrototypeIcon(armorPrototype).Default);
|
||||||
|
|
||||||
|
var index = i;
|
||||||
|
button.Controller.OnPressed += _ =>
|
||||||
|
{
|
||||||
|
_selected = true;
|
||||||
|
SendMessage(new ArmorSelectedEvent(index));
|
||||||
|
_armorSelector.Close();
|
||||||
|
Close();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
_armorSelector.OpenAttachedLocalPlayer();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
base.Dispose(disposing);
|
||||||
|
|
||||||
|
_armorSelector?.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
65
Content.Client/_White/Chaplain/NullRodBui.cs
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
using Content.Client._White.UserInterface.Radial;
|
||||||
|
using Content.Shared._White.Chaplain;
|
||||||
|
using JetBrains.Annotations;
|
||||||
|
using Robust.Client.GameObjects;
|
||||||
|
using Robust.Shared.Prototypes;
|
||||||
|
|
||||||
|
namespace Content.Client._White.Chaplain;
|
||||||
|
|
||||||
|
[UsedImplicitly]
|
||||||
|
public sealed class NullRodBui : BoundUserInterface
|
||||||
|
{
|
||||||
|
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
||||||
|
[Dependency] private readonly IEntityManager _entityManager = default!;
|
||||||
|
private SpriteSystem _spriteSystem = default!;
|
||||||
|
|
||||||
|
private bool _selected;
|
||||||
|
private RadialContainer? _weaponSelector;
|
||||||
|
|
||||||
|
public NullRodBui(EntityUid owner, Enum uiKey) : base(owner, uiKey)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Open()
|
||||||
|
{
|
||||||
|
base.Open();
|
||||||
|
|
||||||
|
_spriteSystem = _entityManager.EntitySysManager.GetEntitySystem<SpriteSystem>();
|
||||||
|
var nullRod = _entityManager.GetComponent<NullRodComponent>(Owner);
|
||||||
|
|
||||||
|
_weaponSelector = new RadialContainer();
|
||||||
|
|
||||||
|
_weaponSelector.Closed += () =>
|
||||||
|
{
|
||||||
|
if (_selected)
|
||||||
|
return;
|
||||||
|
|
||||||
|
SendMessage(new WeaponSelectedEvent(string.Empty));
|
||||||
|
Close();
|
||||||
|
};
|
||||||
|
|
||||||
|
foreach (var weapon in nullRod.Weapons)
|
||||||
|
{
|
||||||
|
var weaponPrototype = _prototypeManager.Index<EntityPrototype>(weapon);
|
||||||
|
var button = _weaponSelector.AddButton(weaponPrototype.Name,
|
||||||
|
_spriteSystem.GetPrototypeIcon(weaponPrototype).Default);
|
||||||
|
|
||||||
|
button.Controller.OnPressed += _ =>
|
||||||
|
{
|
||||||
|
_selected = true;
|
||||||
|
SendMessage(new WeaponSelectedEvent(weapon));
|
||||||
|
_weaponSelector.Close();
|
||||||
|
Close();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
_weaponSelector.OpenAttachedLocalPlayer();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
base.Dispose(disposing);
|
||||||
|
|
||||||
|
_weaponSelector?.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
39
Content.Server/_White/Chaplain/ArmamentsBeaconSystem.cs
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
using Content.Server.Hands.Systems;
|
||||||
|
using Content.Server.Popups;
|
||||||
|
using Content.Shared._White.Chaplain;
|
||||||
|
using Content.Shared.Ghost;
|
||||||
|
using Content.Shared.Inventory;
|
||||||
|
|
||||||
|
namespace Content.Server._White.Chaplain;
|
||||||
|
|
||||||
|
public sealed class ArmamentsBeaconSystem : EntitySystem
|
||||||
|
{
|
||||||
|
[Dependency] private readonly InventorySystem _inventorySystem = default!;
|
||||||
|
|
||||||
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
base.Initialize();
|
||||||
|
|
||||||
|
SubscribeLocalEvent<ArmamentsBeaconComponent, ArmorSelectedEvent>(OnArmorSelected);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnArmorSelected(Entity<ArmamentsBeaconComponent> ent, ref ArmorSelectedEvent args)
|
||||||
|
{
|
||||||
|
var entity = args.Session.AttachedEntity;
|
||||||
|
var index = args.SelectedIndex;
|
||||||
|
|
||||||
|
if (index < 0 || index >= ent.Comp.Armor.Count || entity == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
_inventorySystem.TryUnequip(entity.Value, "outerClothing", true);
|
||||||
|
_inventorySystem.SpawnItemInSlot(entity.Value, "outerClothing", ent.Comp.Armor[index], silent: true);
|
||||||
|
|
||||||
|
if (index < ent.Comp.Helmets.Count && ent.Comp.Helmets[index] != null)
|
||||||
|
{
|
||||||
|
_inventorySystem.TryUnequip(entity.Value, "head", true);
|
||||||
|
_inventorySystem.SpawnItemInSlot(entity.Value, "head", ent.Comp.Helmets[index]!.Value, silent: true);
|
||||||
|
}
|
||||||
|
|
||||||
|
Del(ent);
|
||||||
|
}
|
||||||
|
}
|
||||||
40
Content.Server/_White/Chaplain/NullRodSystem.cs
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
using Content.Server.Hands.Systems;
|
||||||
|
using Content.Server.Popups;
|
||||||
|
using Content.Shared._White.Chaplain;
|
||||||
|
using Content.Shared.Ghost;
|
||||||
|
|
||||||
|
namespace Content.Server._White.Chaplain;
|
||||||
|
|
||||||
|
public sealed class NullRodSystem : EntitySystem
|
||||||
|
{
|
||||||
|
[Dependency] private readonly HandsSystem _hands = default!;
|
||||||
|
[Dependency] private readonly PopupSystem _popup = default!;
|
||||||
|
|
||||||
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
base.Initialize();
|
||||||
|
|
||||||
|
SubscribeLocalEvent<NullRodComponent, WeaponSelectedEvent>(OnWeaponSelected);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnWeaponSelected(Entity<NullRodComponent> ent, ref WeaponSelectedEvent args)
|
||||||
|
{
|
||||||
|
var entity = args.Session.AttachedEntity;
|
||||||
|
|
||||||
|
if (args.SelectedWeapon == string.Empty || entity == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!HasComp<HolyComponent>(entity.Value) && !HasComp<GhostComponent>(entity.Value))
|
||||||
|
{
|
||||||
|
_popup.PopupEntity($"Вам не хватает веры, чтобы использовать {Name(ent)}", entity.Value, entity.Value);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var weapon = Spawn(args.SelectedWeapon, Transform(entity.Value).Coordinates);
|
||||||
|
EnsureComp<HolyWeaponComponent>(weapon);
|
||||||
|
|
||||||
|
Del(ent);
|
||||||
|
|
||||||
|
_hands.PickupOrDrop(entity.Value, weapon, true, false, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -22,6 +22,7 @@ using Robust.Shared.Configuration;
|
|||||||
using Robust.Shared.Player;
|
using Robust.Shared.Player;
|
||||||
using Robust.Shared.Random;
|
using Robust.Shared.Random;
|
||||||
using Content.Shared._White;
|
using Content.Shared._White;
|
||||||
|
using Content.Shared._White.Chaplain;
|
||||||
using Content.Shared._White.Cult.Components;
|
using Content.Shared._White.Cult.Components;
|
||||||
using Content.Shared.Mind;
|
using Content.Shared.Mind;
|
||||||
using Robust.Shared.Audio.Systems;
|
using Robust.Shared.Audio.Systems;
|
||||||
@@ -327,9 +328,10 @@ public sealed class CultRuleSystem : GameRuleSystem<CultRuleComponent>
|
|||||||
if (!_jobSystem.CanBeAntag(player))
|
if (!_jobSystem.CanBeAntag(player))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Gulag
|
// Gulag & chaplain
|
||||||
if (!_mindSystem.TryGetMind(player, out _, out var mind) ||
|
if (!_mindSystem.TryGetMind(player, out _, out var mind) ||
|
||||||
mind.OwnedEntity is not { } ownedEntity || HasComp<GulagBoundComponent>(ownedEntity))
|
mind.OwnedEntity is not { } ownedEntity || HasComp<GulagBoundComponent>(ownedEntity) ||
|
||||||
|
HasComp<HolyComponent>(ownedEntity))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Latejoin
|
// Latejoin
|
||||||
@@ -414,7 +416,7 @@ public sealed class CultRuleSystem : GameRuleSystem<CultRuleComponent>
|
|||||||
|
|
||||||
if (!_mindSystem.TryGetMind(cultist, out var mindId, out var mind))
|
if (!_mindSystem.TryGetMind(cultist, out var mindId, out var mind))
|
||||||
{
|
{
|
||||||
Log.Info("Failed getting mind for picked thief.");
|
Log.Info("Failed getting mind for picked cultist.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ using Content.Server.Hands.Systems;
|
|||||||
using Content.Server.Weapons.Ranged.Systems;
|
using Content.Server.Weapons.Ranged.Systems;
|
||||||
using Content.Server._White.Cult.GameRule;
|
using Content.Server._White.Cult.GameRule;
|
||||||
using Content.Server._White.Cult.Runes.Comps;
|
using Content.Server._White.Cult.Runes.Comps;
|
||||||
|
using Content.Shared._White.Chaplain;
|
||||||
using Content.Shared.Actions;
|
using Content.Shared.Actions;
|
||||||
using Content.Shared.Chemistry.Components.SolutionManager;
|
using Content.Shared.Chemistry.Components.SolutionManager;
|
||||||
using Content.Shared.Cuffs.Components;
|
using Content.Shared.Cuffs.Components;
|
||||||
@@ -423,7 +424,8 @@ public sealed partial class CultSystem : EntitySystem
|
|||||||
var isTarget = mind!.Mind!.Value == targetMind?.Mind!.Value;
|
var isTarget = mind!.Mind!.Value == targetMind?.Mind!.Value;
|
||||||
|
|
||||||
// Выполнение действия в зависимости от условий
|
// Выполнение действия в зависимости от условий
|
||||||
if (canBeConverted && !HasComp<MindShieldComponent>(victim.Value) && !isTarget)
|
if (canBeConverted && !HasComp<HolyComponent>(victim.Value) &&
|
||||||
|
!HasComp<MindShieldComponent>(victim.Value) && !isTarget)
|
||||||
{
|
{
|
||||||
result = Convert(uid, victim.Value, args.User, args.Cultists);
|
result = Convert(uid, victim.Value, args.User, args.Cultists);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,13 @@
|
|||||||
using Content.Server.Doors.Systems;
|
using Content.Server.Doors.Systems;
|
||||||
|
using Content.Shared._White.Chaplain;
|
||||||
using Content.Shared.Doors;
|
using Content.Shared.Doors;
|
||||||
using Content.Shared.Humanoid;
|
using Content.Shared.Humanoid;
|
||||||
using Content.Shared.Stunnable;
|
using Content.Shared.Stunnable;
|
||||||
using Content.Shared._White.Cult;
|
using Content.Shared._White.Cult;
|
||||||
|
using Content.Shared.Doors.Components;
|
||||||
|
using Content.Shared.Weapons.Melee.Events;
|
||||||
|
using Robust.Shared.Audio;
|
||||||
|
using Robust.Shared.Audio.Systems;
|
||||||
using Robust.Shared.Physics.Systems;
|
using Robust.Shared.Physics.Systems;
|
||||||
using CultistComponent = Content.Shared._White.Cult.Components.CultistComponent;
|
using CultistComponent = Content.Shared._White.Cult.Components.CultistComponent;
|
||||||
|
|
||||||
@@ -13,6 +18,7 @@ public sealed class RunicDoorSystem : EntitySystem
|
|||||||
[Dependency] private readonly DoorSystem _doorSystem = default!;
|
[Dependency] private readonly DoorSystem _doorSystem = default!;
|
||||||
[Dependency] private readonly SharedPhysicsSystem _physics = default!;
|
[Dependency] private readonly SharedPhysicsSystem _physics = default!;
|
||||||
[Dependency] private readonly SharedStunSystem _stunSystem = default!;
|
[Dependency] private readonly SharedStunSystem _stunSystem = default!;
|
||||||
|
[Dependency] private readonly SharedAudioSystem _audio = default!;
|
||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
@@ -20,6 +26,18 @@ public sealed class RunicDoorSystem : EntitySystem
|
|||||||
|
|
||||||
SubscribeLocalEvent<RunicDoorComponent, BeforeDoorOpenedEvent>(OnBeforeDoorOpened);
|
SubscribeLocalEvent<RunicDoorComponent, BeforeDoorOpenedEvent>(OnBeforeDoorOpened);
|
||||||
SubscribeLocalEvent<RunicDoorComponent, BeforeDoorClosedEvent>(OnBeforeDoorClosed);
|
SubscribeLocalEvent<RunicDoorComponent, BeforeDoorClosedEvent>(OnBeforeDoorClosed);
|
||||||
|
SubscribeLocalEvent<RunicDoorComponent, AttackedEvent>(OnGetAttacked);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnGetAttacked(Entity<RunicDoorComponent> ent, ref AttackedEvent args)
|
||||||
|
{
|
||||||
|
if (!HasComp<HolyWeaponComponent>(args.Used) || !TryComp<DoorComponent>(ent, out var doorComp) ||
|
||||||
|
doorComp.State is not DoorState.Closed)
|
||||||
|
return;
|
||||||
|
|
||||||
|
_audio.PlayPvs(new SoundPathSpecifier("/Audio/Magic/knock.ogg"), ent);
|
||||||
|
|
||||||
|
_doorSystem.StartOpening(ent, doorComp);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnBeforeDoorOpened(EntityUid uid, RunicDoorComponent component, BeforeDoorOpenedEvent args)
|
private void OnBeforeDoorOpened(EntityUid uid, RunicDoorComponent component, BeforeDoorOpenedEvent args)
|
||||||
@@ -61,7 +79,7 @@ public sealed class RunicDoorSystem : EntitySystem
|
|||||||
|
|
||||||
_doorSystem.Deny(airlock);
|
_doorSystem.Deny(airlock);
|
||||||
|
|
||||||
if (!HasComp<HumanoidAppearanceComponent>(user))
|
if (!HasComp<HumanoidAppearanceComponent>(user) || HasComp<HolyComponent>(user))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
var direction = Transform(user).MapPosition.Position - Transform(airlock).MapPosition.Position;
|
var direction = Transform(user).MapPosition.Position - Transform(airlock).MapPosition.Position;
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
namespace Content.Server._White.Other.MeleeBlockSystem;
|
||||||
|
|
||||||
|
[RegisterComponent]
|
||||||
|
public sealed partial class MeleeBlockComponent : Component
|
||||||
|
{
|
||||||
|
[DataField, ViewVariables(VVAccess.ReadWrite)]
|
||||||
|
public float BlockChance = 0.4f;
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
using Content.Shared.Hands.Components;
|
||||||
|
using Content.Shared.Popups;
|
||||||
|
using Content.Shared.Weapons.Melee.Events;
|
||||||
|
using Robust.Shared.Audio;
|
||||||
|
using Robust.Shared.Audio.Systems;
|
||||||
|
using Robust.Shared.Random;
|
||||||
|
|
||||||
|
namespace Content.Server._White.Other.MeleeBlockSystem;
|
||||||
|
|
||||||
|
public sealed class MeleeBlockSystem : EntitySystem
|
||||||
|
{
|
||||||
|
[Dependency] private readonly IRobustRandom _random = default!;
|
||||||
|
[Dependency] private readonly SharedAudioSystem _audio = default!;
|
||||||
|
[Dependency] private readonly SharedPopupSystem _popupSystem = default!;
|
||||||
|
|
||||||
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
base.Initialize();
|
||||||
|
|
||||||
|
SubscribeLocalEvent<HandsComponent, MeleeBlockAttemptEvent>(OnBlockAttempt);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnBlockAttempt(Entity<HandsComponent> ent, ref MeleeBlockAttemptEvent args)
|
||||||
|
{
|
||||||
|
if (ent.Owner == args.Attacker ||
|
||||||
|
!TryComp(ent.Comp.ActiveHandEntity, out MeleeBlockComponent? blockComponent) ||
|
||||||
|
!_random.Prob(blockComponent.BlockChance))
|
||||||
|
return;
|
||||||
|
|
||||||
|
args.Blocked = true;
|
||||||
|
|
||||||
|
_popupSystem.PopupEntity("заблокировал!", ent);
|
||||||
|
|
||||||
|
_audio.PlayPvs(new SoundPathSpecifier("/Audio/Weapons/block_metal1.ogg"), ent,
|
||||||
|
AudioParams.Default.WithVariation(0.25f));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
namespace Content.Server._White.Other.RandomDamageSystem;
|
||||||
|
|
||||||
|
[RegisterComponent]
|
||||||
|
public sealed partial class RandomDamageComponent : Component
|
||||||
|
{
|
||||||
|
[DataField, ViewVariables(VVAccess.ReadWrite)]
|
||||||
|
public float Max = 50f;
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
using Content.Shared.Damage;
|
||||||
|
using Content.Shared.Damage.Prototypes;
|
||||||
|
using Content.Shared.Weapons.Melee.Events;
|
||||||
|
using Robust.Shared.Prototypes;
|
||||||
|
using Robust.Shared.Random;
|
||||||
|
|
||||||
|
namespace Content.Server._White.Other.RandomDamageSystem;
|
||||||
|
|
||||||
|
public sealed class RandomDamageSystem : EntitySystem
|
||||||
|
{
|
||||||
|
[Dependency] private readonly IRobustRandom _random = default!;
|
||||||
|
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
||||||
|
|
||||||
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
base.Initialize();
|
||||||
|
|
||||||
|
SubscribeLocalEvent<RandomDamageComponent, MeleeHitEvent>(HandleHit);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void HandleHit(Entity<RandomDamageComponent> ent, ref MeleeHitEvent args)
|
||||||
|
{
|
||||||
|
var damage = _random.NextFloat() * ent.Comp.Max;
|
||||||
|
args.BonusDamage = new DamageSpecifier(_prototypeManager.Index<DamageTypePrototype>("Slash"), damage);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -93,3 +93,8 @@ public record struct GetMeleeAttackRateEvent(EntityUid Weapon, float Rate, float
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
[ByRefEvent]
|
[ByRefEvent]
|
||||||
public record struct GetHeavyDamageModifierEvent(EntityUid Weapon, FixedPoint2 DamageModifier, float Multipliers, EntityUid User);
|
public record struct GetHeavyDamageModifierEvent(EntityUid Weapon, FixedPoint2 DamageModifier, float Multipliers, EntityUid User);
|
||||||
|
|
||||||
|
// WD START
|
||||||
|
[ByRefEvent]
|
||||||
|
public record struct MeleeBlockAttemptEvent(EntityUid Attacker, bool Blocked = false);
|
||||||
|
// WD END
|
||||||
|
|||||||
@@ -60,10 +60,14 @@ public sealed partial class MeleeWeaponComponent : Component
|
|||||||
[ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
|
[ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
|
||||||
public bool Attacking = false;
|
public bool Attacking = false;
|
||||||
|
|
||||||
// WD
|
// WD START
|
||||||
[ViewVariables(VVAccess.ReadWrite), DataField]
|
[ViewVariables(VVAccess.ReadWrite), DataField]
|
||||||
public bool CanHeavyAttack = true;
|
public bool CanHeavyAttack = true;
|
||||||
|
|
||||||
|
[ViewVariables(VVAccess.ReadWrite), DataField]
|
||||||
|
public bool IgnoreResistances;
|
||||||
|
// WD END
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// If true, attacks will be repeated automatically without requiring the mouse button to be lifted.
|
/// If true, attacks will be repeated automatically without requiring the mouse button to be lifted.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ using Content.Shared.Weapons.Ranged.Components;
|
|||||||
using Content.Shared.Weapons.Ranged.Events;
|
using Content.Shared.Weapons.Ranged.Events;
|
||||||
using Content.Shared.Weapons.Ranged.Systems;
|
using Content.Shared.Weapons.Ranged.Systems;
|
||||||
using Content.Shared._White;
|
using Content.Shared._White;
|
||||||
|
using Content.Shared._White.Chaplain;
|
||||||
using Robust.Shared.Audio;
|
using Robust.Shared.Audio;
|
||||||
using Robust.Shared.Audio.Systems;
|
using Robust.Shared.Audio.Systems;
|
||||||
using Robust.Shared.Configuration;
|
using Robust.Shared.Configuration;
|
||||||
@@ -500,6 +501,13 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem
|
|||||||
if (hitEvent.Handled)
|
if (hitEvent.Handled)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// WD START
|
||||||
|
var blockEvent = new MeleeBlockAttemptEvent(user);
|
||||||
|
RaiseLocalEvent(target.Value, ref blockEvent);
|
||||||
|
if (blockEvent.Blocked)
|
||||||
|
return;
|
||||||
|
// WD END
|
||||||
|
|
||||||
var targets = new List<EntityUid>(1)
|
var targets = new List<EntityUid>(1)
|
||||||
{
|
{
|
||||||
target.Value
|
target.Value
|
||||||
@@ -519,7 +527,7 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem
|
|||||||
RaiseLocalEvent(target.Value, attackedEvent);
|
RaiseLocalEvent(target.Value, attackedEvent);
|
||||||
|
|
||||||
var modifiedDamage = DamageSpecifier.ApplyModifierSets(damage + hitEvent.BonusDamage + attackedEvent.BonusDamage, hitEvent.ModifiersList);
|
var modifiedDamage = DamageSpecifier.ApplyModifierSets(damage + hitEvent.BonusDamage + attackedEvent.BonusDamage, hitEvent.ModifiersList);
|
||||||
var damageResult = Damageable.TryChangeDamage(target, modifiedDamage, origin:user);
|
var damageResult = Damageable.TryChangeDamage(target, modifiedDamage, component.IgnoreResistances, origin:user); // WD EDIT
|
||||||
|
|
||||||
if (damageResult != null && damageResult.Any())
|
if (damageResult != null && damageResult.Any())
|
||||||
{
|
{
|
||||||
@@ -658,11 +666,18 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem
|
|||||||
if (!Blocker.CanAttack(user, entity, (weapon, component)))
|
if (!Blocker.CanAttack(user, entity, (weapon, component)))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
// WD START
|
||||||
|
var blockEvent = new MeleeBlockAttemptEvent(user);
|
||||||
|
RaiseLocalEvent(entity, ref blockEvent);
|
||||||
|
if (blockEvent.Blocked)
|
||||||
|
continue;
|
||||||
|
// WD END
|
||||||
|
|
||||||
var attackedEvent = new AttackedEvent(meleeUid, user, GetCoordinates(ev.Coordinates));
|
var attackedEvent = new AttackedEvent(meleeUid, user, GetCoordinates(ev.Coordinates));
|
||||||
RaiseLocalEvent(entity, attackedEvent);
|
RaiseLocalEvent(entity, attackedEvent);
|
||||||
var modifiedDamage = DamageSpecifier.ApplyModifierSets(damage + hitEvent.BonusDamage + attackedEvent.BonusDamage, hitEvent.ModifiersList);
|
var modifiedDamage = DamageSpecifier.ApplyModifierSets(damage + hitEvent.BonusDamage + attackedEvent.BonusDamage, hitEvent.ModifiersList);
|
||||||
|
|
||||||
var damageResult = Damageable.TryChangeDamage(entity, modifiedDamage, origin:user);
|
var damageResult = Damageable.TryChangeDamage(entity, modifiedDamage, component.IgnoreResistances, origin:user); // WD EDIT
|
||||||
|
|
||||||
if (damageResult != null && damageResult.GetTotal() > FixedPoint2.Zero)
|
if (damageResult != null && damageResult.GetTotal() > FixedPoint2.Zero)
|
||||||
{
|
{
|
||||||
|
|||||||
13
Content.Shared/_White/Chaplain/ArmamentsBeaconComponent.cs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
using Robust.Shared.Prototypes;
|
||||||
|
|
||||||
|
namespace Content.Shared._White.Chaplain;
|
||||||
|
|
||||||
|
[RegisterComponent]
|
||||||
|
public sealed partial class ArmamentsBeaconComponent : Component
|
||||||
|
{
|
||||||
|
[DataField]
|
||||||
|
public List<EntProtoId> Armor = new();
|
||||||
|
|
||||||
|
[DataField]
|
||||||
|
public List<EntProtoId?> Helmets = new();
|
||||||
|
}
|
||||||
21
Content.Shared/_White/Chaplain/ArmamentsBeaconUi.cs
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
using Robust.Shared.Serialization;
|
||||||
|
|
||||||
|
namespace Content.Shared._White.Chaplain;
|
||||||
|
|
||||||
|
|
||||||
|
[Serializable, NetSerializable]
|
||||||
|
public enum SelectArmorUi
|
||||||
|
{
|
||||||
|
Key
|
||||||
|
}
|
||||||
|
|
||||||
|
[Serializable, NetSerializable]
|
||||||
|
public class ArmorSelectedEvent : BoundUserInterfaceMessage
|
||||||
|
{
|
||||||
|
public int SelectedIndex;
|
||||||
|
|
||||||
|
public ArmorSelectedEvent(int index)
|
||||||
|
{
|
||||||
|
SelectedIndex = index;
|
||||||
|
}
|
||||||
|
}
|
||||||
8
Content.Shared/_White/Chaplain/HolyComponent.cs
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
using Robust.Shared.GameStates;
|
||||||
|
|
||||||
|
namespace Content.Shared._White.Chaplain;
|
||||||
|
|
||||||
|
[RegisterComponent, NetworkedComponent]
|
||||||
|
public sealed partial class HolyComponent : Component
|
||||||
|
{
|
||||||
|
}
|
||||||
8
Content.Shared/_White/Chaplain/HolyWeaponComponent.cs
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
using Robust.Shared.GameStates;
|
||||||
|
|
||||||
|
namespace Content.Shared._White.Chaplain;
|
||||||
|
|
||||||
|
[RegisterComponent, NetworkedComponent]
|
||||||
|
public sealed partial class HolyWeaponComponent : Component
|
||||||
|
{
|
||||||
|
}
|
||||||
30
Content.Shared/_White/Chaplain/HolyWeaponSystem.cs
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
using Content.Shared.Examine;
|
||||||
|
using Content.Shared.Ghost;
|
||||||
|
using Content.Shared.Weapons.Melee.Events;
|
||||||
|
|
||||||
|
namespace Content.Shared._White.Chaplain;
|
||||||
|
|
||||||
|
public sealed class HolyWeaponSystem : EntitySystem
|
||||||
|
{
|
||||||
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
base.Initialize();
|
||||||
|
|
||||||
|
SubscribeLocalEvent<HolyWeaponComponent, ExaminedEvent>(OnExamined);
|
||||||
|
SubscribeLocalEvent<HolyWeaponComponent, AttemptMeleeEvent>(OnMeleeAttempt);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnMeleeAttempt(Entity<HolyWeaponComponent> ent, ref AttemptMeleeEvent args)
|
||||||
|
{
|
||||||
|
if (HasComp<HolyComponent>(args.User) || HasComp<GhostComponent>(args.User))
|
||||||
|
return;
|
||||||
|
|
||||||
|
args.Cancelled = true;
|
||||||
|
args.Message = $"Вам не хватает веры, чтобы использовать {Name(ent)}";
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnExamined(Entity<HolyWeaponComponent> ent, ref ExaminedEvent args)
|
||||||
|
{
|
||||||
|
args.PushMarkup("[color=lightblue]Данное оружие наделено священной силой.[/color]");
|
||||||
|
}
|
||||||
|
}
|
||||||
10
Content.Shared/_White/Chaplain/NullRodComponent.cs
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
using Robust.Shared.Prototypes;
|
||||||
|
|
||||||
|
namespace Content.Shared._White.Chaplain;
|
||||||
|
|
||||||
|
[RegisterComponent]
|
||||||
|
public sealed partial class NullRodComponent : Component
|
||||||
|
{
|
||||||
|
[DataField]
|
||||||
|
public List<EntProtoId> Weapons = new();
|
||||||
|
}
|
||||||
20
Content.Shared/_White/Chaplain/NullRodUi.cs
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
using Robust.Shared.Serialization;
|
||||||
|
|
||||||
|
namespace Content.Shared._White.Chaplain;
|
||||||
|
|
||||||
|
[Serializable, NetSerializable]
|
||||||
|
public enum SelectWeaponUi
|
||||||
|
{
|
||||||
|
Key
|
||||||
|
}
|
||||||
|
|
||||||
|
[Serializable, NetSerializable]
|
||||||
|
public class WeaponSelectedEvent : BoundUserInterfaceMessage
|
||||||
|
{
|
||||||
|
public string SelectedWeapon;
|
||||||
|
|
||||||
|
public WeaponSelectedEvent(string weapon)
|
||||||
|
{
|
||||||
|
SelectedWeapon = weapon;
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
Resources/Audio/White/Items/hit/chainhit.ogg
Normal file
@@ -47,6 +47,10 @@
|
|||||||
maxVol: 300
|
maxVol: 300
|
||||||
- type: UseDelay
|
- type: UseDelay
|
||||||
delay: 1
|
delay: 1
|
||||||
|
- type: Tool
|
||||||
|
qualities:
|
||||||
|
- Sawing
|
||||||
|
speed: 0.5
|
||||||
- type: Construction
|
- type: Construction
|
||||||
deconstructionTarget: null
|
deconstructionTarget: null
|
||||||
graph: ChainsawGraph
|
graph: ChainsawGraph
|
||||||
|
|||||||
@@ -46,11 +46,11 @@
|
|||||||
wideAnimationRotation: -135
|
wideAnimationRotation: -135
|
||||||
damage:
|
damage:
|
||||||
types:
|
types:
|
||||||
Slash: 20
|
Slash: 24
|
||||||
soundHit:
|
soundHit:
|
||||||
path: /Audio/Weapons/bladeslice.ogg
|
path: /Audio/Weapons/bladeslice.ogg
|
||||||
- type: Item
|
- type: Item
|
||||||
size: Large
|
size: Huge
|
||||||
sprite: Objects/Weapons/Melee/katana.rsi
|
sprite: Objects/Weapons/Melee/katana.rsi
|
||||||
- type: DisarmMalus
|
- type: DisarmMalus
|
||||||
|
|
||||||
@@ -69,7 +69,7 @@
|
|||||||
types:
|
types:
|
||||||
Slash: 30
|
Slash: 30
|
||||||
- type: Item
|
- type: Item
|
||||||
size: Large
|
size: Huge
|
||||||
sprite: Objects/Weapons/Melee/energykatana.rsi
|
sprite: Objects/Weapons/Melee/energykatana.rsi
|
||||||
- type: EnergyKatana
|
- type: EnergyKatana
|
||||||
- type: DashAbility
|
- type: DashAbility
|
||||||
|
|||||||
@@ -3,6 +3,9 @@
|
|||||||
name: job-name-chaplain
|
name: job-name-chaplain
|
||||||
description: job-description-chaplain
|
description: job-description-chaplain
|
||||||
playTimeTracker: JobChaplain
|
playTimeTracker: JobChaplain
|
||||||
|
requirements:
|
||||||
|
- !type:OverallPlaytimeRequirement
|
||||||
|
time: 18000 #5 hrs
|
||||||
startingGear: ChaplainGear
|
startingGear: ChaplainGear
|
||||||
icon: "JobIconChaplain"
|
icon: "JobIconChaplain"
|
||||||
supervisors: job-supervisors-hop
|
supervisors: job-supervisors-hop
|
||||||
@@ -13,6 +16,7 @@
|
|||||||
- !type:AddComponentSpecial
|
- !type:AddComponentSpecial
|
||||||
components:
|
components:
|
||||||
- type: BibleUser #Lets them heal with bibles
|
- type: BibleUser #Lets them heal with bibles
|
||||||
|
- type: Holy
|
||||||
|
|
||||||
- type: startingGear
|
- type: startingGear
|
||||||
id: ChaplainGear
|
id: ChaplainGear
|
||||||
@@ -23,9 +27,12 @@
|
|||||||
shoes: ClothingShoesColorBlack
|
shoes: ClothingShoesColorBlack
|
||||||
id: ChaplainPDA
|
id: ChaplainPDA
|
||||||
ears: ClothingHeadsetService
|
ears: ClothingHeadsetService
|
||||||
|
pocket1: ArmamentsBeacon
|
||||||
underwearb: ClothingUnderwearBottomBoxersWhite # White-Underwear
|
underwearb: ClothingUnderwearBottomBoxersWhite # White-Underwear
|
||||||
underweart: ClothingUnderwearTopBraWhite # White-Underwear
|
underweart: ClothingUnderwearTopBraWhite # White-Underwear
|
||||||
underwearb: ClothingUnderwearBottomPantiesWhite # White-Underwear
|
underwearb: ClothingUnderwearBottomPantiesWhite # White-Underwear
|
||||||
|
inhand:
|
||||||
|
- NullRod
|
||||||
innerClothingSkirt: ClothingUniformJumpskirtChaplain
|
innerClothingSkirt: ClothingUniformJumpskirtChaplain
|
||||||
satchel: ClothingBackpackSatchelChaplainFilled
|
satchel: ClothingBackpackSatchelChaplainFilled
|
||||||
duffelbag: ClothingBackpackDuffelChaplainFilled
|
duffelbag: ClothingBackpackDuffelChaplainFilled
|
||||||
|
|||||||
@@ -0,0 +1,79 @@
|
|||||||
|
- type: entity
|
||||||
|
parent: ClothingHeadBase
|
||||||
|
id: ClothingHeadHelmedTemplarArmored
|
||||||
|
name: шлем крестоносца
|
||||||
|
description: Деус Вульт!
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Clothing/Head/templar.rsi
|
||||||
|
- type: Clothing
|
||||||
|
sprite: White/Clothing/Head/templar.rsi
|
||||||
|
- type: Armor
|
||||||
|
modifiers:
|
||||||
|
coefficients:
|
||||||
|
Blunt: 0.8
|
||||||
|
Slash: 0.8
|
||||||
|
Piercing: 0.95
|
||||||
|
- type: Tag
|
||||||
|
tags:
|
||||||
|
- HidesHair
|
||||||
|
- WhitelistChameleon
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: ClothingHeadHelmedTemplarArmored
|
||||||
|
id: ClothingHeadHelmetClock
|
||||||
|
name: забытый шлем
|
||||||
|
description: У него непреклонный взгляд навечно забытого бога.
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Clothing/Head/clock.rsi
|
||||||
|
- type: Clothing
|
||||||
|
sprite: White/Clothing/Head/clock.rsi
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: ClothingHeadHelmedTemplarArmored
|
||||||
|
id: ClothingHeadHelmetCage
|
||||||
|
name: клетка
|
||||||
|
description: Клетка, сдерживающая желания личности, позволяющая увидеть нечестивый мир таким, какой он есть.
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Clothing/Head/cage.rsi
|
||||||
|
- type: Clothing
|
||||||
|
sprite: White/Clothing/Head/cage-equipped.rsi
|
||||||
|
- type: Tag
|
||||||
|
tags:
|
||||||
|
- WhitelistChameleon
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: ClothingHeadHelmedTemplarArmored
|
||||||
|
id: ClothingHeadHelmetAncientChaplain
|
||||||
|
name: древний шлем
|
||||||
|
description: Никто не может пройти!
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Clothing/Head/ancient.rsi
|
||||||
|
- type: Clothing
|
||||||
|
sprite: White/Clothing/Head/ancient.rsi
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: ClothingHeadHelmetCage
|
||||||
|
id: ClothingHeadHelmetWitchHunter
|
||||||
|
name: шляпа Охотника на Ведьм
|
||||||
|
description: Эта изношенная шляпа часто применялась в свое время.
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Clothing/Head/witchhunter.rsi
|
||||||
|
- type: Clothing
|
||||||
|
sprite: White/Clothing/Head/witchhunter.rsi
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: ClothingHeadHelmedTemplarArmored
|
||||||
|
id: ClothingHeadHelmetAdept
|
||||||
|
noSpawn: true
|
||||||
|
name: капюшон адепта
|
||||||
|
description: Еретично только тогда, когда это делают другие.
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Clothing/Head/adept.rsi
|
||||||
|
- type: Clothing
|
||||||
|
sprite: White/Clothing/Head/adept.rsi
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
- type: entity
|
||||||
|
parent: ClothingOuterBaseLarge
|
||||||
|
id: ClothingOuterArmorTemplar
|
||||||
|
name: доспехи крестоносца
|
||||||
|
description: Бог желает этого!
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Clothing/OuterClothing/templar.rsi
|
||||||
|
- type: Clothing
|
||||||
|
sprite: White/Clothing/OuterClothing/templar.rsi
|
||||||
|
- type: Armor
|
||||||
|
modifiers:
|
||||||
|
coefficients:
|
||||||
|
Blunt: 0.4
|
||||||
|
Slash: 0.4
|
||||||
|
Piercing: 0.9
|
||||||
|
Heat: 0.5
|
||||||
|
- type: ClothingSpeedModifier
|
||||||
|
walkModifier: 1.0
|
||||||
|
sprintModifier: 1.0
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: ClothingOuterArmorTemplar
|
||||||
|
id: ClothingOuterArmorClock
|
||||||
|
name: забытая броня
|
||||||
|
description: Звучит как шипение пара, тиканье шестерёнок и затихание. Похоже на мёртвую машину, пытающуюся жить.
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Clothing/OuterClothing/clock.rsi
|
||||||
|
- type: Clothing
|
||||||
|
sprite: White/Clothing/OuterClothing/clock.rsi
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: ClothingOuterArmorTemplar
|
||||||
|
id: ClothingOuterArmorStudent
|
||||||
|
name: студенческая мантия
|
||||||
|
description: Униформа древнего учебного заведения.
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Clothing/OuterClothing/student.rsi
|
||||||
|
- type: Clothing
|
||||||
|
sprite: White/Clothing/OuterClothing/student.rsi
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: ClothingOuterArmorTemplar
|
||||||
|
id: ClothingOuterArmorAncient
|
||||||
|
name: древний доспех
|
||||||
|
description: Защити сокровище...
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Clothing/OuterClothing/ancient.rsi
|
||||||
|
- type: Clothing
|
||||||
|
sprite: White/Clothing/OuterClothing/ancient.rsi
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: ClothingOuterArmorTemplar
|
||||||
|
id: ClothingOuterArmorWitchHunter
|
||||||
|
name: одеяние Охотника на Ведьм
|
||||||
|
description: Это изношенное одеяние часто применялось в свое время.
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Clothing/OuterClothing/witchhunter.rsi
|
||||||
|
- type: Clothing
|
||||||
|
sprite: White/Clothing/OuterClothing/witchhunter.rsi
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: ClothingOuterArmorTemplar
|
||||||
|
id: ClothingOuterArmorAdept
|
||||||
|
name: мантия адепта
|
||||||
|
description: Идеальный наряд для сжигания неверных.
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Clothing/OuterClothing/adept.rsi
|
||||||
|
- type: Clothing
|
||||||
|
sprite: White/Clothing/OuterClothing/adept.rsi
|
||||||
|
- type: ToggleableClothing
|
||||||
|
clothingPrototype: ClothingHeadHelmetAdept
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
- type: entity
|
||||||
|
parent: BaseItem
|
||||||
|
id: ArmamentsBeacon
|
||||||
|
name: радиомаяк вооружения
|
||||||
|
description: Содержит набор вооружения для священника.
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: Objects/Devices/door_remote.rsi
|
||||||
|
layers:
|
||||||
|
- state: door_remotebase
|
||||||
|
- state: door_remotelightscolour
|
||||||
|
color: lightblue
|
||||||
|
- state: door_remotescreencolour
|
||||||
|
color: lightblue
|
||||||
|
- type: Item
|
||||||
|
storedRotation: -90
|
||||||
|
- type: ActivatableUI
|
||||||
|
key: enum.SelectArmorUi.Key
|
||||||
|
inHandsOnly: true
|
||||||
|
closeOnHandDeselect: true
|
||||||
|
- type: UserInterface
|
||||||
|
interfaces:
|
||||||
|
- key: enum.SelectArmorUi.Key
|
||||||
|
type: ArmamentsBeaconBui
|
||||||
|
- type: ArmamentsBeacon
|
||||||
|
armor:
|
||||||
|
- ClothingOuterArmorTemplar
|
||||||
|
- ClothingOuterArmorClock
|
||||||
|
- ClothingOuterArmorStudent
|
||||||
|
- ClothingOuterArmorAncient
|
||||||
|
- ClothingOuterArmorWitchHunter
|
||||||
|
- ClothingOuterArmorAdept
|
||||||
|
helmets:
|
||||||
|
- ClothingHeadHelmedTemplarArmored
|
||||||
|
- ClothingHeadHelmetClock
|
||||||
|
- ClothingHeadHelmetCage
|
||||||
|
- ClothingHeadHelmetAncientChaplain
|
||||||
|
- ClothingHeadHelmetWitchHunter
|
||||||
|
- null
|
||||||
@@ -0,0 +1,449 @@
|
|||||||
|
- type: entity
|
||||||
|
name: жезл нулификации
|
||||||
|
parent: BaseItem
|
||||||
|
id: NullRod
|
||||||
|
description: Жезл из чистого обсидиана. Само его присутствие разрушает и ослабляет "магические силы". Во всяком случае так написано в путеводителе.
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/nullrod.rsi
|
||||||
|
state: icon
|
||||||
|
- type: MeleeWeapon
|
||||||
|
damage:
|
||||||
|
types:
|
||||||
|
Blunt: 18
|
||||||
|
- type: Item
|
||||||
|
size: Normal
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/nullrod.rsi
|
||||||
|
- type: Clothing
|
||||||
|
quickEquip: false
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/nullrod.rsi
|
||||||
|
slots:
|
||||||
|
- belt
|
||||||
|
- type: ActivatableUI
|
||||||
|
key: enum.SelectWeaponUi.Key
|
||||||
|
inHandsOnly: true
|
||||||
|
closeOnHandDeselect: true
|
||||||
|
- type: UserInterface
|
||||||
|
interfaces:
|
||||||
|
- key: enum.SelectWeaponUi.Key
|
||||||
|
type: NullRodBui
|
||||||
|
- type: NullRod
|
||||||
|
weapons:
|
||||||
|
- GodHand
|
||||||
|
- HolyClaymore
|
||||||
|
- Chainsword
|
||||||
|
- SwordGlowing
|
||||||
|
- HolyKatana
|
||||||
|
- MultiverseBlade
|
||||||
|
- VorpalScythe
|
||||||
|
- HighFrequencyBlade
|
||||||
|
- SpellBlade
|
||||||
|
- PossessedBlade
|
||||||
|
- ChainsawHand
|
||||||
|
- HolyWhip
|
||||||
|
- HolyStaff
|
||||||
|
- UnholyPitchfork
|
||||||
|
- WarHammer
|
||||||
|
- HyperTool
|
||||||
|
- type: HolyWeapon
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
name: божья длань
|
||||||
|
parent: BaseItem
|
||||||
|
id: GodHand
|
||||||
|
description: Эта рука сияет с потрясающей силой!
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/godhand.rsi
|
||||||
|
state: icon
|
||||||
|
- type: MeleeWeapon
|
||||||
|
soundHit:
|
||||||
|
path: /Audio/Weapons/Guns/Hits/energy_meat1.ogg
|
||||||
|
params:
|
||||||
|
variation: 0.250
|
||||||
|
volume: -10
|
||||||
|
wideAnimationRotation: 180
|
||||||
|
damage:
|
||||||
|
types:
|
||||||
|
Heat: 24
|
||||||
|
- type: Item
|
||||||
|
size: Normal
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/godhand.rsi
|
||||||
|
- type: Unremoveable
|
||||||
|
deleteOnDrop: true
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
name: священный клеймор
|
||||||
|
parent: Claymore
|
||||||
|
id: HolyClaymore
|
||||||
|
description: Оружие, подходящее для крестового похода!
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/claymore.rsi
|
||||||
|
- type: MeleeWeapon
|
||||||
|
damage:
|
||||||
|
types:
|
||||||
|
Slash: 33
|
||||||
|
- type: Clothing
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/claymore.rsi
|
||||||
|
slots:
|
||||||
|
- back
|
||||||
|
- belt
|
||||||
|
- type: Item
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/claymore.rsi
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
name: цепной меч
|
||||||
|
parent: HolyClaymore
|
||||||
|
id: Chainsword
|
||||||
|
description: Не позволь еретику жить.
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/chainsword.rsi
|
||||||
|
- type: MeleeWeapon
|
||||||
|
soundHit:
|
||||||
|
path: /Audio/Weapons/chainsaw.ogg
|
||||||
|
- type: Clothing
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/chainsword.rsi
|
||||||
|
- type: Item
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/chainsword.rsi
|
||||||
|
- type: Tool
|
||||||
|
qualities:
|
||||||
|
- Sawing
|
||||||
|
speed: 0.5
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
name: силовой меч
|
||||||
|
parent: HolyClaymore
|
||||||
|
id: SwordGlowing
|
||||||
|
description: Клинок светится силой веры. Или, возможно, благодаря аккумулятору.
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/forceweapon.rsi
|
||||||
|
- type: Clothing
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/forceweapon.rsi
|
||||||
|
- type: PointLight
|
||||||
|
radius: 4
|
||||||
|
energy: 2
|
||||||
|
color: lightblue
|
||||||
|
- type: Item
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/forceweapon.rsi
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
name: лезвие ханзо
|
||||||
|
parent: Katana
|
||||||
|
id: HolyKatana
|
||||||
|
description: Способен прорезать святой клеймор.
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/katana.rsi
|
||||||
|
- type: Clothing
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/katana.rsi
|
||||||
|
slots:
|
||||||
|
- back
|
||||||
|
- belt
|
||||||
|
- type: Item
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/katana.rsi
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
name: внепространственный клинок
|
||||||
|
parent: HolyKatana
|
||||||
|
id: MultiverseBlade
|
||||||
|
description: Будучи когда-то предвестником межпространственной войны, его острота сильно колеблется. Наносит от 1 до 50 урона.
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/multiverse.rsi
|
||||||
|
- type: MeleeWeapon
|
||||||
|
damage:
|
||||||
|
types:
|
||||||
|
Slash: 1
|
||||||
|
- type: Clothing
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/multiverse.rsi
|
||||||
|
slots:
|
||||||
|
- back
|
||||||
|
- type: Item
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/multiverse.rsi
|
||||||
|
- type: RandomDamage
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
name: коса жнеца
|
||||||
|
parent: HolyClaymore
|
||||||
|
id: VorpalScythe
|
||||||
|
description: И жрец, и жнец, и на дуде игрец! Коса способна пробить броню противника.
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/scythe.rsi
|
||||||
|
- type: MeleeWeapon
|
||||||
|
ignoreResistances: true
|
||||||
|
damage:
|
||||||
|
types:
|
||||||
|
Slash: 27
|
||||||
|
- type: Clothing
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/scythe.rsi
|
||||||
|
slots:
|
||||||
|
- back
|
||||||
|
- type: Item
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/scythe-inhands.rsi
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
name: высокочастотный клинок
|
||||||
|
parent: HolyKatana
|
||||||
|
id: HighFrequencyBlade
|
||||||
|
description: Клинок, способный отражать выстрелы.
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/hfrequency.rsi
|
||||||
|
- type: MeleeWeapon
|
||||||
|
damage:
|
||||||
|
types:
|
||||||
|
Slash: 18
|
||||||
|
- type: Clothing
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/hfrequency.rsi
|
||||||
|
slots:
|
||||||
|
- back
|
||||||
|
- type: Reflect
|
||||||
|
reflectProb: 0.4
|
||||||
|
- type: Item
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/hfrequency.rsi
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
name: клинок заклинаний
|
||||||
|
parent: HolyKatana
|
||||||
|
id: SpellBlade
|
||||||
|
description: Клинок, с шансом 20% наносящий критический удар.
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/spellblade.rsi
|
||||||
|
- type: MeleeWeapon
|
||||||
|
wideAnimationRotation: 135
|
||||||
|
damage:
|
||||||
|
types:
|
||||||
|
Slash: 18
|
||||||
|
- type: Clothing
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/spellblade.rsi
|
||||||
|
slots:
|
||||||
|
- back
|
||||||
|
- type: Crit
|
||||||
|
critChance: 20
|
||||||
|
critMultiplier: 2.5
|
||||||
|
- type: Item
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/spellblade.rsi
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
name: одержимый клинок
|
||||||
|
parent: HolyKatana
|
||||||
|
id: PossessedBlade
|
||||||
|
description: Когда на станции царит хаос, приятно иметь рядом друга.
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/possessed.rsi
|
||||||
|
- type: MeleeWeapon
|
||||||
|
wideAnimationRotation: -45
|
||||||
|
- type: Clothing
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/possessed.rsi
|
||||||
|
slots:
|
||||||
|
- back
|
||||||
|
- type: GhostRole
|
||||||
|
allowSpeech: true
|
||||||
|
name: Одержимый Клинок
|
||||||
|
description: Вы - одержимый клинок. Подчиняйтесь своему владельцу.
|
||||||
|
- type: GhostTakeoverAvailable
|
||||||
|
- type: Examiner
|
||||||
|
- type: Item
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/possessed.rsi
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
name: рука-бензопила
|
||||||
|
parent: BaseItem
|
||||||
|
id: ChainsawHand
|
||||||
|
description: Добро? Зло? Ты парень с бензопилой в руке.
|
||||||
|
components:
|
||||||
|
- type: Sharp
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/chainsaw.rsi
|
||||||
|
state: icon
|
||||||
|
- type: MeleeWeapon
|
||||||
|
autoAttack: true
|
||||||
|
angle: 0
|
||||||
|
wideAnimationRotation: 90
|
||||||
|
attackRate: 4
|
||||||
|
damage:
|
||||||
|
types:
|
||||||
|
Slash: 6
|
||||||
|
soundHit:
|
||||||
|
path: /Audio/Weapons/chainsaw.ogg
|
||||||
|
params:
|
||||||
|
volume: -3
|
||||||
|
- type: Item
|
||||||
|
size: Huge
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/chainsaw.rsi
|
||||||
|
- type: Unremoveable
|
||||||
|
deleteOnDrop: true
|
||||||
|
- type: Tool
|
||||||
|
qualities:
|
||||||
|
- Sawing
|
||||||
|
speed: 0.5
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
name: священная плеть
|
||||||
|
parent: BaseItem
|
||||||
|
id: HolyWhip
|
||||||
|
description: Какая ужасная ночь на космической станции 14.
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/whip.rsi
|
||||||
|
state: icon
|
||||||
|
- type: MeleeWeapon
|
||||||
|
soundHit:
|
||||||
|
path: /Audio/White/Items/hit/chainhit.ogg
|
||||||
|
range: 2.5
|
||||||
|
damage:
|
||||||
|
types:
|
||||||
|
Blunt: 15
|
||||||
|
- type: Item
|
||||||
|
size: Normal
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/whip.rsi
|
||||||
|
- type: Clothing
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/whip.rsi
|
||||||
|
slots:
|
||||||
|
- belt
|
||||||
|
- type: DisarmMalus
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
name: посох монаха
|
||||||
|
parent: BaseItem
|
||||||
|
id: HolyStaff
|
||||||
|
description: Длинный высокий посох из полированного дерева. Традиционно используемый в боевых искусствах древней Земли, теперь он используется для преследования клоуна.
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/staff.rsi
|
||||||
|
state: icon
|
||||||
|
- type: MeleeWeapon
|
||||||
|
wideAnimationRotation: 135
|
||||||
|
damage:
|
||||||
|
types:
|
||||||
|
Blunt: 10
|
||||||
|
- type: Item
|
||||||
|
size: Huge
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/staff.rsi
|
||||||
|
- type: Clothing
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/staff.rsi
|
||||||
|
slots:
|
||||||
|
- back
|
||||||
|
- type: Wieldable
|
||||||
|
- type: IncreaseDamageOnWield
|
||||||
|
damage:
|
||||||
|
types:
|
||||||
|
Blunt: 10
|
||||||
|
- type: UseDelay
|
||||||
|
- type: DisarmMalus
|
||||||
|
- type: MeleeBlock
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
name: нечестивые вилы
|
||||||
|
parent: BaseItem
|
||||||
|
id: UnholyPitchfork
|
||||||
|
description: Держа это, ты выглядишь абсолютно по дьявольски.
|
||||||
|
components:
|
||||||
|
- type: EmbeddableProjectile
|
||||||
|
offset: 0.15,0.15
|
||||||
|
- type: ThrowingAngle
|
||||||
|
angle: 225
|
||||||
|
- type: Fixtures
|
||||||
|
fixtures:
|
||||||
|
fix1:
|
||||||
|
shape: !type:PolygonShape
|
||||||
|
vertices:
|
||||||
|
- -0.20,-0.10
|
||||||
|
- -0.10,-0.20
|
||||||
|
- 0.40,0.30
|
||||||
|
- 0.30,0.40
|
||||||
|
density: 20
|
||||||
|
mask:
|
||||||
|
- ItemMask
|
||||||
|
restitution: 0.3
|
||||||
|
friction: 0.2
|
||||||
|
- type: Sharp
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/pitchfork.rsi
|
||||||
|
state: icon
|
||||||
|
- type: MeleeWeapon
|
||||||
|
wideAnimationRotation: -135
|
||||||
|
damage:
|
||||||
|
types:
|
||||||
|
Piercing: 15
|
||||||
|
angle: 0
|
||||||
|
animation: WeaponArcThrust
|
||||||
|
soundHit:
|
||||||
|
path: /Audio/Weapons/bladeslice.ogg
|
||||||
|
range: 2
|
||||||
|
- type: DamageOtherOnHit
|
||||||
|
damage:
|
||||||
|
types:
|
||||||
|
Piercing: 25
|
||||||
|
- type: Item
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/pitchfork.rsi
|
||||||
|
size: Huge
|
||||||
|
- type: Clothing
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/pitchfork.rsi
|
||||||
|
slots:
|
||||||
|
- back
|
||||||
|
- type: Wieldable
|
||||||
|
- type: IncreaseDamageOnWield
|
||||||
|
damage:
|
||||||
|
types:
|
||||||
|
Piercing: 10
|
||||||
|
- type: UseDelay
|
||||||
|
- type: DisarmMalus
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
name: реликтовый боевой молот
|
||||||
|
parent: BaseItem
|
||||||
|
id: WarHammer
|
||||||
|
description: Этот боевой молот обошелся священнику в сорок тысяч кредитов.
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/hammer.rsi
|
||||||
|
state: icon
|
||||||
|
- type: MeleeWeapon
|
||||||
|
wideAnimationRotation: -135
|
||||||
|
attackRate: 0.75
|
||||||
|
damage:
|
||||||
|
types:
|
||||||
|
Blunt: 24
|
||||||
|
Structural: 80
|
||||||
|
- type: Item
|
||||||
|
size: Huge
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/hammer.rsi
|
||||||
|
- type: Clothing
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/hammer.rsi
|
||||||
|
slots:
|
||||||
|
- belt
|
||||||
|
- type: DisarmMalus
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
name: гиперинструмент
|
||||||
|
parent: BaseItem
|
||||||
|
id: HyperTool
|
||||||
|
description: Инструмент настолько мощный, что даже вы не можете им идеально пользоваться.
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/hypertool.rsi
|
||||||
|
state: icon
|
||||||
|
- type: MeleeWeapon
|
||||||
|
wideAnimationRotation: -135
|
||||||
|
attackRate: 0.75
|
||||||
|
canHeavyAttack: false
|
||||||
|
damage:
|
||||||
|
types:
|
||||||
|
Blunt: 0
|
||||||
|
- type: StaminaDamageOnHit
|
||||||
|
damage: 60
|
||||||
|
- type: Item
|
||||||
|
size: Normal
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/hypertool.rsi
|
||||||
|
- type: Clothing
|
||||||
|
sprite: White/Objects/Weapons/Chaplain/hypertool.rsi
|
||||||
|
slots:
|
||||||
|
- belt
|
||||||
|
- type: DisarmMalus
|
||||||
|
After Width: | Height: | Size: 758 B |
BIN
Resources/Textures/White/Clothing/Head/adept.rsi/icon.png
Normal file
|
After Width: | Height: | Size: 290 B |
18
Resources/Textures/White/Clothing/Head/adept.rsi/meta.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/d0dffe7ca643db2624424fdcebf45863f85c0448",
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "icon"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "equipped-HELMET",
|
||||||
|
"directions": 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
BIN
Resources/Textures/White/Clothing/Head/ancient.rsi/icon.png
Normal file
|
After Width: | Height: | Size: 560 B |
18
Resources/Textures/White/Clothing/Head/ancient.rsi/meta.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/d0dffe7ca643db2624424fdcebf45863f85c0448",
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "icon"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "equipped-HELMET",
|
||||||
|
"directions": 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 742 B |
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/d0dffe7ca643db2624424fdcebf45863f85c0448",
|
||||||
|
"size": {
|
||||||
|
"x": 64,
|
||||||
|
"y": 64
|
||||||
|
},
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "equipped-HELMET"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 609 B |
BIN
Resources/Textures/White/Clothing/Head/cage.rsi/icon.png
Normal file
|
After Width: | Height: | Size: 450 B |
14
Resources/Textures/White/Clothing/Head/cage.rsi/meta.json
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/d0dffe7ca643db2624424fdcebf45863f85c0448",
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "icon"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 786 B |
BIN
Resources/Textures/White/Clothing/Head/clock.rsi/icon.png
Normal file
|
After Width: | Height: | Size: 348 B |
18
Resources/Textures/White/Clothing/Head/clock.rsi/meta.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/d0dffe7ca643db2624424fdcebf45863f85c0448",
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "icon"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "equipped-HELMET",
|
||||||
|
"directions": 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 689 B |
BIN
Resources/Textures/White/Clothing/Head/templar.rsi/icon.png
Normal file
|
After Width: | Height: | Size: 496 B |
18
Resources/Textures/White/Clothing/Head/templar.rsi/meta.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/d0dffe7ca643db2624424fdcebf45863f85c0448",
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "icon"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "equipped-HELMET",
|
||||||
|
"directions": 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 590 B |
BIN
Resources/Textures/White/Clothing/Head/witchhunter.rsi/icon.png
Normal file
|
After Width: | Height: | Size: 495 B |
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/d0dffe7ca643db2624424fdcebf45863f85c0448",
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "icon"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "equipped-HELMET",
|
||||||
|
"directions": 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 543 B |
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/d0dffe7ca643db2624424fdcebf45863f85c0448",
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "icon"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "equipped-OUTERCLOTHING",
|
||||||
|
"directions": 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 740 B |
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/d0dffe7ca643db2624424fdcebf45863f85c0448",
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "icon"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "equipped-OUTERCLOTHING",
|
||||||
|
"directions": 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 770 B |
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/d0dffe7ca643db2624424fdcebf45863f85c0448",
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "icon"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "equipped-OUTERCLOTHING",
|
||||||
|
"directions": 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 602 B |
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/d0dffe7ca643db2624424fdcebf45863f85c0448",
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "icon"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "equipped-OUTERCLOTHING",
|
||||||
|
"directions": 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 724 B |
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/d0dffe7ca643db2624424fdcebf45863f85c0448",
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "icon"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "equipped-OUTERCLOTHING",
|
||||||
|
"directions": 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 460 B |
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "Taken from TGstation github https://github.com/tgstation/tgstation/commit/d0dffe7ca643db2624424fdcebf45863f85c0448",
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "icon"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "equipped-OUTERCLOTHING",
|
||||||
|
"directions": 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 721 B |
|
After Width: | Height: | Size: 753 B |
|
After Width: | Height: | Size: 762 B |
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/pull/49264/commits/d0dffe7ca643db2624424fdcebf45863f85c0448",
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "icon",
|
||||||
|
"delays": [
|
||||||
|
[
|
||||||
|
0.04,
|
||||||
|
0.04
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "inhand-left",
|
||||||
|
"directions": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "inhand-right",
|
||||||
|
"directions": 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 722 B |
|
After Width: | Height: | Size: 822 B |
|
After Width: | Height: | Size: 1021 B |
|
After Width: | Height: | Size: 987 B |
@@ -0,0 +1,86 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/pull/49264/commits/c9ddcd603adeab3822c2845f6be9dfb53452c119",
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "icon",
|
||||||
|
"delays": [
|
||||||
|
[
|
||||||
|
0.01,
|
||||||
|
0.01
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "inhand-right",
|
||||||
|
"directions": 4,
|
||||||
|
"delays": [
|
||||||
|
[
|
||||||
|
0.1,
|
||||||
|
0.1
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0.1,
|
||||||
|
0.1
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0.1,
|
||||||
|
0.1
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0.1,
|
||||||
|
0.1
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "inhand-left",
|
||||||
|
"directions": 4,
|
||||||
|
"delays": [
|
||||||
|
[
|
||||||
|
0.1,
|
||||||
|
0.1
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0.1,
|
||||||
|
0.1
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0.1,
|
||||||
|
0.1
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0.1,
|
||||||
|
0.1
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "equipped-BELT",
|
||||||
|
"directions": 4,
|
||||||
|
"delays": [
|
||||||
|
[
|
||||||
|
0.1,
|
||||||
|
0.1
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0.1,
|
||||||
|
0.1
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0.1,
|
||||||
|
0.1
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0.1,
|
||||||
|
0.1
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 493 B |
|
After Width: | Height: | Size: 543 B |
|
After Width: | Height: | Size: 472 B |
|
After Width: | Height: | Size: 552 B |
|
After Width: | Height: | Size: 535 B |
@@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/pull/49264/commits/d0dffe7ca643db2624424fdcebf45863f85c0448",
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "icon"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "inhand-left",
|
||||||
|
"directions": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "inhand-right",
|
||||||
|
"directions": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "equipped-BELT",
|
||||||
|
"directions": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "equipped-BACKPACK",
|
||||||
|
"directions": 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 532 B |
|
After Width: | Height: | Size: 668 B |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 659 B |
|
After Width: | Height: | Size: 647 B |
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/pull/49264/commits/c9ddcd603adeab3822c2845f6be9dfb53452c119",
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "icon",
|
||||||
|
"delays": [
|
||||||
|
[
|
||||||
|
0.01,
|
||||||
|
0.01
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "inhand-left",
|
||||||
|
"directions": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "inhand-right",
|
||||||
|
"directions": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "equipped-BELT",
|
||||||
|
"directions": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "equipped-BACKPACK",
|
||||||
|
"directions": 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 706 B |
|
After Width: | Height: | Size: 845 B |
|
After Width: | Height: | Size: 843 B |
@@ -0,0 +1,66 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/pull/49264/commits/d0dffe7ca643db2624424fdcebf45863f85c0448",
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "icon"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "inhand-left",
|
||||||
|
"directions": 4,
|
||||||
|
"delays": [
|
||||||
|
[
|
||||||
|
0.1,
|
||||||
|
0.1,
|
||||||
|
0.1
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0.1,
|
||||||
|
0.1,
|
||||||
|
0.1
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0.1,
|
||||||
|
0.1,
|
||||||
|
0.1
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0.1,
|
||||||
|
0.1,
|
||||||
|
0.1
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "inhand-right",
|
||||||
|
"directions": 4,
|
||||||
|
"delays": [
|
||||||
|
[
|
||||||
|
0.1,
|
||||||
|
0.1,
|
||||||
|
0.1
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0.1,
|
||||||
|
0.1,
|
||||||
|
0.1
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0.1,
|
||||||
|
0.1,
|
||||||
|
0.1
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0.1,
|
||||||
|
0.1,
|
||||||
|
0.1
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 398 B |
|
After Width: | Height: | Size: 790 B |
|
After Width: | Height: | Size: 716 B |
|
After Width: | Height: | Size: 713 B |
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/pull/49264/commits/d0dffe7ca643db2624424fdcebf45863f85c0448",
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "icon"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "inhand-left",
|
||||||
|
"directions": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "inhand-right",
|
||||||
|
"directions": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "equipped-BELT",
|
||||||
|
"directions": 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 610 B |
|
After Width: | Height: | Size: 1.1 KiB |