Some shit (#380)

* telegraphy effects

* shadow step spell backend

* add component spell

* predict sharpening

* Update ring.yml

* locale sync

* Update entities.ftl

* icon shadow step
This commit is contained in:
Ed
2024-08-02 13:51:54 +03:00
committed by GitHub
parent 31c9485e3b
commit 599c599a4e
22 changed files with 410 additions and 171 deletions

View File

@@ -1,8 +1,7 @@
using Content.Server._CP14.MeleeWeapon;
using Content.Server._CP14.MeleeWeapon.Components;
using Content.Server.Administration.Logs;
using Content.Server.Damage.Components;
using Content.Server.Weapons.Ranged.Systems;
using Content.Shared._CP14.MeleeWeapon.Components;
using Content.Shared.Camera;
using Content.Shared.Damage;
using Content.Shared.Damage.Events;
@@ -43,7 +42,7 @@ namespace Content.Server.Damage.Systems
damage *= sharp.Sharpness;
var dmg = _damageable.TryChangeDamage(args.Target, damage, component.IgnoreResistances, origin: args.Component.Thrower);
//CrystallPunk Melee pgrade end
//CrystallPunk Melee upgrade end
// Log damage only for mobs. Useful for when people throw spears at each other, but also avoids log-spam when explosions send glass shards flying.
if (dmg != null && HasComp<MobStateComponent>(args.Target))

View File

@@ -16,7 +16,7 @@ public sealed partial class CP14MagicSystem : CP14SharedMagicSystem
SubscribeLocalEvent<CP14MagicEffectVerbalAspectComponent, CP14VerbalAspectSpeechEvent>(OnSpellSpoken);
SubscribeLocalEvent<CP14MagicEffectCastingVisualComponent, CP14StartCastMagicEffectEvent>(OnSpawnMagicVisualEffect);
SubscribeLocalEvent<CP14MagicEffectCastingVisualComponent, CP14StopCastMagicEffectEvent>(OnDespawnMagicVisualEffect);
SubscribeLocalEvent<CP14MagicEffectCastingVisualComponent, CP14EndCastMagicEffectEvent>(OnDespawnMagicVisualEffect);
}
private void OnSpellSpoken(Entity<CP14MagicEffectVerbalAspectComponent> ent, ref CP14VerbalAspectSpeechEvent args)
@@ -32,7 +32,7 @@ public sealed partial class CP14MagicSystem : CP14SharedMagicSystem
ent.Comp.SpawnedEntity = vfx;
}
private void OnDespawnMagicVisualEffect(Entity<CP14MagicEffectCastingVisualComponent> ent, ref CP14StopCastMagicEffectEvent args)
private void OnDespawnMagicVisualEffect(Entity<CP14MagicEffectCastingVisualComponent> ent, ref CP14EndCastMagicEffectEvent args)
{
QueueDel(ent.Comp.SpawnedEntity);
ent.Comp.SpawnedEntity = null;

View File

@@ -1,10 +0,0 @@
using Content.Shared.Damage;
namespace Content.Server._CP14.MeleeWeapon.Components;
[RegisterComponent]
public sealed partial class CP14MeleeSelfDamageComponent : Component
{
[DataField(required: true)]
public DamageSpecifier DamageToSelf;
}

View File

@@ -1,16 +1,12 @@
using System.Numerics;
using Content.Server._CP14.Alchemy;
using Content.Server._CP14.MeleeWeapon;
using Content.Server._CP14.MeleeWeapon.EntitySystems;
using Content.Server.Popups;
using Content.Shared._CP14.MeleeWeapon.EntitySystems;
using Content.Shared._CP14.Skills;
using Content.Shared._CP14.Skills.Components;
using Content.Shared.Chemistry.Components;
using Content.Shared.Damage;
using Content.Shared.Examine;
using Content.Shared.Hands.EntitySystems;
using Content.Shared.Popups;
using Content.Shared.Stunnable;
using Content.Shared.Throwing;
using Content.Shared.Weapons.Melee;
using Content.Shared.Weapons.Melee.Events;

View File

@@ -36,6 +36,10 @@ public partial class CP14SharedMagicSystem : EntitySystem
SubscribeLocalEvent<CP14MagicEffectComponent, CP14BeforeCastMagicEffectEvent>(OnBeforeCastMagicEffect);
SubscribeLocalEvent<CP14DelayedInstantActionEvent>(OnInstantAction);
SubscribeLocalEvent<CP14DelayedEntityTargetActionEvent>(OnEntityTargetAction);
SubscribeLocalEvent<CP14DelayedWorldTargetActionEvent>(OnWorldTargetAction);
SubscribeLocalEvent<CP14MagicEffectComponent, CP14DelayedInstantActionDoAfterEvent>(OnDelayedInstantActionDoAfter);
SubscribeLocalEvent<CP14MagicEffectComponent, CP14DelayedEntityTargetActionDoAfterEvent>(OnDelayedEntityTargetDoAfter);
SubscribeLocalEvent<CP14MagicEffectComponent, CP14DelayedWorldTargetActionDoAfterEvent>(OnDelayedWorldTargetDoAfter);
@@ -47,15 +51,132 @@ public partial class CP14SharedMagicSystem : EntitySystem
SubscribeLocalEvent<CP14MagicEffectComponent, CP14AfterCastMagicEffectEvent>(OnAfterCastMagicEffect);
SubscribeLocalEvent<CP14DelayedInstantActionEvent>(OnInstantAction);
SubscribeLocalEvent<CP14DelayedEntityTargetActionEvent>(OnEntityTargetAction);
SubscribeLocalEvent<CP14DelayedWorldTargetActionEvent>(OnWorldTargetAction);
}
private void OnBeforeCastMagicEffect(Entity<CP14MagicEffectComponent> ent, ref CP14BeforeCastMagicEffectEvent args)
{
if (!TryComp<CP14MagicEnergyContainerComponent>(args.Performer, out var magicContainer))
{
args.Cancel();
return;
}
if (!_magicEnergy.HasEnergy(args.Performer, ent.Comp.ManaCost, magicContainer, ent.Comp.Safe))
{
args.PushReason(Loc.GetString("cp14-magic-spell-not-enough-mana"));
args.Cancel();
}
else if(!_magicEnergy.HasEnergy(args.Performer, ent.Comp.ManaCost, magicContainer, true) && _net.IsServer)
{
_popup.PopupEntity(Loc.GetString("cp14-magic-spell-not-enough-mana-cast-warning-"+_random.Next(5)), args.Performer, args.Performer, PopupType.SmallCaution);
}
}
private void OnInstantAction(CP14DelayedInstantActionEvent args)
{
if (args.Handled)
return;
args.Handled = true;
if (args is not ICP14DelayedMagicEffect delayedEffect)
return;
if (!TryCastSpell(args.Action, args.Performer))
return;
var doAfterEventArgs = new DoAfterArgs(EntityManager, args.Performer, delayedEffect.Delay, new CP14DelayedInstantActionDoAfterEvent(), args.Action)
{
BreakOnMove = delayedEffect.BreakOnMove,
BreakOnDamage = delayedEffect.BreakOnDamage,
BlockDuplicate = true,
};
_doAfter.TryStartDoAfter(doAfterEventArgs);
//Telegraphy effects
if (_net.IsServer && TryComp<CP14MagicEffectComponent>(args.Action, out var magicEffect))
{
foreach (var effect in magicEffect.TelegraphyEffects)
{
effect.Effect(EntityManager, new CP14SpellEffectBaseArgs(args.Performer, args.Performer, Transform(args.Performer).Coordinates));
}
}
}
private void OnWorldTargetAction(CP14DelayedWorldTargetActionEvent args)
{
if (args.Handled)
return;
args.Handled = true;
if (args is not ICP14DelayedMagicEffect delayedEffect)
return;
if (!TryCastSpell(args.Action, args.Performer))
return;
var doAfter = new CP14DelayedWorldTargetActionDoAfterEvent()
{
Target = EntityManager.GetNetCoordinates(args.Target)
};
var doAfterEventArgs = new DoAfterArgs(EntityManager, args.Performer, delayedEffect.Delay, doAfter, args.Action)
{
BreakOnMove = delayedEffect.BreakOnMove,
BreakOnDamage = delayedEffect.BreakOnDamage,
BlockDuplicate = true,
};
_doAfter.TryStartDoAfter(doAfterEventArgs);
//Telegraphy effects
if (_net.IsServer && TryComp<CP14MagicEffectComponent>(args.Action, out var magicEffect))
{
foreach (var effect in magicEffect.TelegraphyEffects)
{
effect.Effect(EntityManager, new CP14SpellEffectBaseArgs(args.Performer, null, args.Target));
}
}
}
private void OnEntityTargetAction(CP14DelayedEntityTargetActionEvent args)
{
if (args.Handled)
return;
args.Handled = true;
if (args is not ICP14DelayedMagicEffect delayedEffect)
return;
if (!TryCastSpell(args.Action, args.Performer))
return;
var doAfterEventArgs = new DoAfterArgs(EntityManager, args.Performer, delayedEffect.Delay, new CP14DelayedEntityTargetActionDoAfterEvent(), args.Action, args.Target)
{
BreakOnMove = delayedEffect.BreakOnMove,
BreakOnDamage = delayedEffect.BreakOnDamage,
BlockDuplicate = true,
};
_doAfter.TryStartDoAfter(doAfterEventArgs);
//Telegraphy effects
if (_net.IsServer && TryComp<CP14MagicEffectComponent>(args.Action, out var magicEffect))
{
foreach (var effect in magicEffect.TelegraphyEffects)
{
effect.Effect(EntityManager, new CP14SpellEffectBaseArgs(args.Performer, args.Target, null));
}
}
}
private void OnDelayedWorldTargetDoAfter(Entity<CP14MagicEffectComponent> ent, ref CP14DelayedWorldTargetActionDoAfterEvent args)
{
var stopEv = new CP14StopCastMagicEffectEvent();
RaiseLocalEvent(ent, ref stopEv);
var endEv = new CP14EndCastMagicEffectEvent();
RaiseLocalEvent(ent, ref endEv);
if (args.Cancelled || !_net.IsServer)
return;
@@ -71,8 +192,8 @@ public partial class CP14SharedMagicSystem : EntitySystem
private void OnDelayedEntityTargetDoAfter(Entity<CP14MagicEffectComponent> ent, ref CP14DelayedEntityTargetActionDoAfterEvent args)
{
var stopEv = new CP14StopCastMagicEffectEvent();
RaiseLocalEvent(ent, ref stopEv);
var endEv = new CP14EndCastMagicEffectEvent();
RaiseLocalEvent(ent, ref endEv);
if (args.Cancelled || !_net.IsServer)
return;
@@ -88,8 +209,8 @@ public partial class CP14SharedMagicSystem : EntitySystem
private void OnDelayedInstantActionDoAfter(Entity<CP14MagicEffectComponent> ent, ref CP14DelayedInstantActionDoAfterEvent args)
{
var stopEv = new CP14StopCastMagicEffectEvent();
RaiseLocalEvent(ent, ref stopEv);
var endEv = new CP14EndCastMagicEffectEvent();
RaiseLocalEvent(ent, ref endEv);
if (args.Cancelled || !_net.IsServer)
return;
@@ -154,80 +275,6 @@ public partial class CP14SharedMagicSystem : EntitySystem
RaiseLocalEvent(ent, ref ev);
}
private void OnInstantAction(CP14DelayedInstantActionEvent args)
{
if (args.Handled)
return;
args.Handled = true;
if (args is not ICP14DelayedMagicEffect delayedEffect)
return;
if (!TryCastSpell(args.Action, args.Performer))
return;
var doAfterEventArgs = new DoAfterArgs(EntityManager, args.Performer, delayedEffect.Delay, new CP14DelayedInstantActionDoAfterEvent(), args.Action)
{
BreakOnMove = delayedEffect.BreakOnMove,
BreakOnDamage = delayedEffect.BreakOnDamage,
BlockDuplicate = true,
};
_doAfter.TryStartDoAfter(doAfterEventArgs);
}
private void OnWorldTargetAction(CP14DelayedWorldTargetActionEvent args)
{
if (args.Handled)
return;
args.Handled = true;
if (args is not ICP14DelayedMagicEffect delayedEffect)
return;
if (!TryCastSpell(args.Action, args.Performer))
return;
var doAfter = new CP14DelayedWorldTargetActionDoAfterEvent()
{
Target = EntityManager.GetNetCoordinates(args.Target)
};
var doAfterEventArgs = new DoAfterArgs(EntityManager, args.Performer, delayedEffect.Delay, doAfter, args.Action)
{
BreakOnMove = delayedEffect.BreakOnMove,
BreakOnDamage = delayedEffect.BreakOnDamage,
BlockDuplicate = true,
};
_doAfter.TryStartDoAfter(doAfterEventArgs);
}
private void OnEntityTargetAction(CP14DelayedEntityTargetActionEvent args)
{
if (args.Handled)
return;
args.Handled = true;
if (args is not ICP14DelayedMagicEffect delayedEffect)
return;
if (!TryCastSpell(args.Action, args.Performer))
return;
var doAfterEventArgs = new DoAfterArgs(EntityManager, args.Performer, delayedEffect.Delay, new CP14DelayedEntityTargetActionDoAfterEvent(), args.Action, args.Target)
{
BreakOnMove = delayedEffect.BreakOnMove,
BreakOnDamage = delayedEffect.BreakOnDamage,
BlockDuplicate = true,
};
_doAfter.TryStartDoAfter(doAfterEventArgs);
}
private bool TryCastSpell(EntityUid spell, EntityUid performer)
{
var ev = new CP14BeforeCastMagicEffectEvent
@@ -251,25 +298,6 @@ public partial class CP14SharedMagicSystem : EntitySystem
return !ev.Cancelled;
}
private void OnBeforeCastMagicEffect(Entity<CP14MagicEffectComponent> ent, ref CP14BeforeCastMagicEffectEvent args)
{
if (!TryComp<CP14MagicEnergyContainerComponent>(args.Performer, out var magicContainer))
{
args.Cancel();
return;
}
if (!_magicEnergy.HasEnergy(args.Performer, ent.Comp.ManaCost, magicContainer, ent.Comp.Safe))
{
args.PushReason(Loc.GetString("cp14-magic-spell-not-enough-mana"));
args.Cancel();
}
else if(!_magicEnergy.HasEnergy(args.Performer, ent.Comp.ManaCost, magicContainer, true) && _net.IsServer)
{
_popup.PopupEntity(Loc.GetString("cp14-magic-spell-not-enough-mana-cast-warning-"+_random.Next(5)), args.Performer, args.Performer, PopupType.SmallCaution);
}
}
private void OnAfterCastMagicEffect(Entity<CP14MagicEffectComponent> ent, ref CP14AfterCastMagicEffectEvent args)
{
if (_net.IsClient)

View File

@@ -15,6 +15,12 @@ public sealed partial class CP14MagicEffectComponent : Component
[DataField]
public bool Safe = false;
/// <summary>
/// Effects that will trigger at the beginning of the cast, before mana is spent. Should have no gameplay importance, just special effects, popups and sounds.
/// </summary>
[DataField]
public List<CP14SpellEffect> TelegraphyEffects = new();
[DataField]
public List<CP14SpellEffect> Effects = new();
}

View File

@@ -34,7 +34,7 @@ public sealed class CP14StartCastMagicEffectEvent : EntityEventArgs
/// is invoked on the spell itself when the spell process has been completed or interrupted
/// </summary>
[ByRefEvent]
public sealed class CP14StopCastMagicEffectEvent : EntityEventArgs
public sealed class CP14EndCastMagicEffectEvent : EntityEventArgs
{
}

View File

@@ -0,0 +1,17 @@
using Robust.Shared.Prototypes;
namespace Content.Shared._CP14.MagicSpell.Spells;
public sealed partial class CP14SpellAddComponent : CP14SpellEffect
{
[DataField]
public ComponentRegistry Components = new();
public override void Effect(EntityManager entManager, CP14SpellEffectBaseArgs args)
{
if (args.Target is null)
return;
entManager.AddComponents(args.Target.Value, Components);
}
}

View File

@@ -0,0 +1,23 @@
using Robust.Shared.Map;
using Robust.Shared.Prototypes;
namespace Content.Shared._CP14.MagicSpell.Spells;
public sealed partial class CP14SpellCasterTeleport : CP14SpellEffect
{
public override void Effect(EntityManager entManager, CP14SpellEffectBaseArgs args)
{
EntityCoordinates? targetPoint = null;
if (args.Position is not null)
targetPoint = args.Position.Value;
else if (args.Target is not null && entManager.TryGetComponent<TransformComponent>(args.Target.Value, out var transformComponent))
targetPoint = transformComponent.Coordinates;
if (targetPoint is null || args.User is null)
return;
var transform = entManager.System<SharedTransformSystem>();
transform.SetCoordinates(args.User.Value, targetPoint.Value);
}
}

View File

@@ -0,0 +1,16 @@
using Content.Shared.Damage;
namespace Content.Shared._CP14.MeleeWeapon.Components;
[RegisterComponent]
public sealed partial class CP14MeleeSelfDamageComponent : Component
{
[DataField]
public DamageSpecifier DamageToSelf = new()
{
DamageDict = new()
{
{ "Blunt", 1 },
}
};
}

View File

@@ -1,7 +1,6 @@
using Content.Shared._CP14.MeleeWeapon.EntitySystems;
using Content.Server._CP14.MeleeWeapon.EntitySystems;
namespace Content.Server._CP14.MeleeWeapon.Components;
namespace Content.Shared._CP14.MeleeWeapon.Components;
/// <summary>
/// allows the object to become blunt with use

View File

@@ -1,8 +1,8 @@
using Content.Server._CP14.MeleeWeapon.EntitySystems;
using Content.Shared._CP14.MeleeWeapon.EntitySystems;
using Content.Shared.Damage;
using Robust.Shared.Audio;
namespace Content.Server._CP14.MeleeWeapon.Components;
namespace Content.Shared._CP14.MeleeWeapon.Components;
/// <summary>
/// component allows you to sharpen objects by restoring their damage.
@@ -34,7 +34,7 @@ public sealed partial class CP14SharpeningStoneComponent : Component
{
DamageDict = new()
{
{ "Blunt", 1 }
{ "Blunt", 1 },
}
};
@@ -46,7 +46,7 @@ public sealed partial class CP14SharpeningStoneComponent : Component
{
DamageDict = new()
{
{ "Blunt", 1 }
{ "Blunt", 1 },
}
};
}

View File

@@ -1,8 +1,8 @@
using Content.Server._CP14.MeleeWeapon.Components;
using Content.Shared._CP14.MeleeWeapon.Components;
using Content.Shared.Damage;
using Content.Shared.Weapons.Melee.Events;
namespace Content.Server._CP14.MeleeWeapon.EntitySystems;
namespace Content.Shared._CP14.MeleeWeapon.EntitySystems;
public sealed class CP14MeleeSelfDamageSystem : EntitySystem
{

View File

@@ -1,21 +1,23 @@
using System.Linq;
using Content.Server._CP14.MeleeWeapon.Components;
using Content.Shared._CP14.MeleeWeapon.Components;
using Content.Shared.Damage;
using Content.Shared.Examine;
using Content.Shared.Interaction;
using Content.Shared.Placeable;
using Content.Shared.Popups;
using Content.Shared.Timing;
using Content.Shared.Weapons.Melee.Events;
using Content.Shared.Wieldable;
using Robust.Shared.Audio.Systems;
namespace Content.Server._CP14.MeleeWeapon.EntitySystems;
namespace Content.Shared._CP14.MeleeWeapon.EntitySystems;
public sealed class CP14SharpeningSystem : EntitySystem
{
[Dependency] private readonly DamageableSystem _damageableSystem = default!;
[Dependency] private readonly UseDelaySystem _useDelay = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!;
public override void Initialize()
{
@@ -87,6 +89,9 @@ public sealed class CP14SharpeningSystem : EntitySystem
_damageableSystem.TryChangeDamage(target, stone.Comp.TargetDamage);
component.Sharpness = MathHelper.Clamp01(component.Sharpness + stone.Comp.SharpnessHeal);
if (component.Sharpness >= 0.99)
_popup.PopupEntity(Loc.GetString("sharpening-ready"), target, user);
}
_useDelay.TryResetDelay(stone);

View File

@@ -7,3 +7,5 @@ damage-weapon-1 = Looks completely intact
damage-weapon-2 = Covered in a couple of scratches.
damageable-weapon-3 = Looks worn.
damageable-weapon-4 = It's about to break.
sharpening-ready = Perfectly sharpened

View File

@@ -27,12 +27,21 @@ ent-CP14BaseLock = стальной замок
ent-CP14LockTavern = замок от таверны
.desc = { ent-CP14BaseLock.desc }
ent-CP14BaseMagicRune = magic rune
.desc = manifestation of magical energy in the physical plane
ent-CP14BaseMagicImpact = magic impact
.desc = manifestation of magical energy in the physical plane
ent-CP14ClothingCloakArmoredRed = бронированная красная накидка
.desc = Огромные металлические наплечники дают дополнительную защиту от отрубания головы.
ent-CP14ClothingCloakBlacksmithArpon = фартук кузнеца
.desc = Свободные кожанные полоски, все еще фактически являющиеся одеждой.
ent-CP14ClothingCloakMaidArpon = фартук горничной
.desc = Чистота, порядок и послушание - вот основные черты хорошей горничной.
ent-CP14ClothingCloakFurcapeBlack = меховая накидка
.desc = Брутальная, выделанная из шерсти, накидка на плечи.
@@ -108,6 +117,21 @@ ent-CP14ClothingPantsAristocratic = штаны аристократа
ent-CP14ClothingPantsLoincloth = набедренная повязка
.desc = Свободные, ничего не мешает, да еще и выглядят экстремально брутально
ent-CP14ClothingDressBlack = черное платье
.desc = Просторная женское платье
ent-CP14ClothingRingIceDagger = conductive ring
.desc = A standard mana-conductive ring that allows the user to summon ice daggers.
.suffix = Ice Dagger
ent-CP14ClothingRingFlameCreation = conductive ring
.desc = A standard mana-conductive ring that allows the user to summon artificial flames.
.suffix = Flame creation
ent-CP14ClothingRingCureWounds = conductive ring
.desc = A standard mana-conductive ring that allows the user to heal physical injuries.
.suffix = Cure Wounds
ent-CP14ClothingShirtCottonBlue = хлопковая синяя рубаха
.desc = { ent-CP14ClothingShirtCottonBlue.desc }
@@ -143,6 +167,9 @@ ent-CP14Mist = облако
ent-CP14MistVitalExtract = { ent-CP14Mist }
.desc = { ent-CP14Mist.desc }
ent-CP14AuraNodeBase = aura node
.desc = An energy node that affects the elemental energy in the surrounding space.
ent-CP14ExpeditionShipTargetPoint = пункт назначения экспедиционного судна
.desc = Один из возможных пунктов прибытия корабля с игроками.
@@ -150,6 +177,8 @@ ent-CP14SpawnPointAdventurer = авантюрист
ent-CP14SpawnPointAlchemist = алхимик
ent-CP14SpawnPointCaptain = капитан
ent-CP14ConstrainedSpawnerBase = None
.desc = lol
@@ -267,6 +296,41 @@ ent-CP14WalletFilledTest = { ent-CP14Wallet }
.desc = { ent-CP14Wallet.desc }
.suffix = Filled test
ent-CP14CopperBar1 = медный слиток
.desc = Тяжелый, слегка зеленый кусок обработанной меди.
.suffix = 1
ent-CP14CopperBar5 = { ent-CP14CopperBar1 }
.desc = { ent-CP14CopperBar1.desc }
.suffix = 5
ent-CP14CopperBar10 = { ent-CP14CopperBar1 }
.desc = { ent-CP14CopperBar1.desc }
.suffix = 10
ent-CP14IronBar1 = iron bar
.desc = A heavy piece of refined iron
.suffix = 1
ent-CP14IronBar5 = { ent-CP14IronBar1 }
.desc = { ent-CP14IronBar1.desc }
.suffix = 5
ent-CP14IronBar10 = { ent-CP14IronBar1 }
.desc = { ent-CP14IronBar1.desc }
.suffix = 10
ent-CP14GoldBar1 = золотой слиток
.desc = Теплый на ощупь, мягкий кусок изысканного золота.
ent-CP14GoldBar5 = { ent-CP14GoldBar1 }
.desc = { ent-CP14GoldBar1.desc }
.suffix = 5
ent-CP14GoldBar10 = { ent-CP14GoldBar1 }
.desc = { ent-CP14GoldBar1.desc }
.suffix = 10
ent-CP14DirtBlock1 = блок земли
.desc = Блок великолепной плодородной почвы.
@@ -345,6 +409,36 @@ ent-CP14VialSmallLumiMushroom = { ent-CP14VialTiny }
.desc = { ent-CP14VialTiny.desc }
.suffix = Люмигриб
ent-CP14MeltingMoldBase = форма для выплавки
.desc = Деревянная доска для заливки металла в необходимые формы.
ent-CP14MeltingMoldBlank = форма для выплавки заготовок
.desc = Пустая форма для литья металла. Вы можете вырезать в ней любую нужную форму на столе для резки деталей.
ent-CP14MeltingMoldDaggers = форма для кинжала
.desc = { ent-CP14MeltingMoldBase.desc }
ent-CP14MeltingMoldNails = форма для гвоздей
.desc = { ent-CP14MeltingMoldBase.desc }
ent-CP14MeltingMoldPickaxe = форма для кирки
.desc = { ent-CP14MeltingMoldBase.desc }
ent-CP14MeltingMoldShovel = форма для лопаты
.desc = { ent-CP14MeltingMoldBase.desc }
ent-CP14MeltingMoldSickle = форма для серпа
.desc = { ent-CP14MeltingMoldBase.desc }
ent-CP14MeltingMoldSword = форма для меча
.desc = { ent-CP14MeltingMoldBase.desc }
ent-CP14MeltingMoldThrowableSpear = форма для метательного копья
.desc = { ent-CP14MeltingMoldBase.desc }
ent-CP14MeltingMoldTwoHandedSword = форма для двуручного меча
.desc = { ent-CP14MeltingMoldBase.desc }
ent-CP14Wheat = сноп пшеницы
.desc = У вас есть выбор: посадить семена обратно в землю, либо пустить их в муку.
@@ -367,9 +461,9 @@ ent-CP14LumiMushroom = люмигриб
.desc = Слабо светящийся гриб. Часто используется алхимиками как средство для концентрации растворов.
ent-CP14EnergyCrystalBase = None
.desc = Обработанные кристаллы кварца являются прекрасными хранителями магической энергии. А специальные разъемы позволяют удобно вставлять их в магические устройства, превращая в энергетические батарейки.
.desc = Shards of one of the Khyber dragon, used to bind and control elemental energy.
ent-CP14EnergyCrystalSmall = маленький энергокристалл
ent-CP14EnergyCrystalSmall = small Khyber shard
.desc = { ent-CP14EnergyCrystalBase.desc }
.suffix = Full
@@ -377,7 +471,7 @@ ent-CP14EnergyCrystalSmallEmpty = { ent-CP14EnergyCrystalSmall }
.desc = { ent-CP14EnergyCrystalSmall.desc }
.suffix = Empty
ent-CP14EnergyCrystalMedium = энергокристалл
ent-CP14EnergyCrystalMedium = Khyber shard
.desc = { ent-CP14EnergyCrystalBase.desc }
.suffix = Full
@@ -385,9 +479,12 @@ ent-CP14EnergyCrystalMediumEmpty = { ent-CP14EnergyCrystalMedium }
.desc = { ent-CP14EnergyCrystalMedium.desc }
.suffix = Empty
ent-CP14AuraScanner = сканер ауры
.desc = Сканирует полярность потоков элементальной энергии в этом месте.
ent-CP14Bucket = ведро
.desc = Старое скучное ведро
.suffix = CP14!
.suffix = CP14
ent-CP14OldLantern = Старая Лампа
.desc = Пережиток прошлого техномагии. Большой, тяжелый, непрактичный. Таким приятно разве что бить по голове.
@@ -443,28 +540,12 @@ ent-CP14BasePickaxe = кирка
ent-CP14BaseShovel = лопата
.desc = Орудие для вскапывания земли, рытья грядок или могил.
ent-CP14WeaponRevolverNavy = револьвер "Марин"
.desc = Увесистый капсюльный револьвер серии "Марин". В настоящее время револьверы серии "Марин" стоят баснословные деньги, и их могут позволить себе исключительно преуспевающие моряки и торговцы.
ent-CP14BaseLightCrossbow = легкий арбалет
.desc = Небольшой, компактный арбалет, который удобно держать одной рукой. Не слишком меткий с обратной стороны.
ent-CP14WeaponRifleCrush = крушитель
.desc = Легкая, дорогая и непростая в обращении винтовка.
ent-CP14WeaponRifleDurandal = дюрандаль
.desc = Винтовка среднего размера, дорогая и не очень удобная в использовании.
ent-CP14WeaponRifleLebel = лебел
.desc = Тяжелая, дорогая и не очень удобная в использовании винтовка.
ent-CP14Crossbolt = арбалетный болт
.desc = Стержень с заостренным концом. Без оперения, это вам не лук.
ent-CP14CartridgeBulletRifle = винтовочный патрон
ent-CP14BulletRifle = винтовочная пуля
ent-CP14DungeonEntrance = спуск в подземелье
.desc = Темные глубины подземного мира зовут вас.
@@ -477,6 +558,22 @@ ent-CP14BaseSharpeningStoneStructure = стационарный точильны
ent-CP14Mannequin = манекен
.desc = Удобная подставка для одежды или доспехов.
ent-CP14StatueGob = статуя Гоба
.desc = Он прекрасен.
.suffix = Нормальная
ent-CP14StatueGobVines = статуя Гоба
.desc = { ent-CP14StatueGob.desc }
.suffix = Нормальная. Заросшая
ent-CP14StatueGobRuined = разрушенная статуя Гоба
.desc = { ent-CP14StatueGob.desc }
.suffix = Разрушенная
ent-CP14StatueGobRuinedVines = разрушенная статуя Гоба
.desc = { ent-CP14StatueGob.desc }
.suffix = Разрушенная. Заросшая
ent-CP14WallmountWoodenBoards = доски
.desc = Прибиты к стене. Зачем? не совсем ясно.
@@ -738,6 +835,9 @@ ent-CP14WallmountBarShelfB = { ent-CP14WallmountBarShelfA }
ent-CP14Workbench = верстак
.desc = Стол для создания различного базового инструментария.
ent-CP14WorkbenchMeltingMolds = стол для резки форм
.desc = Специализированный стол, позволяющий вырезать формы для выплавки металла.
ent-CP14FrameWooden = каркас деревянной стены
.desc = Деревянный каркас для деревянных стен любых видов.
@@ -789,6 +889,9 @@ ent-CP14GatherableLumiMushroom = люмигрибы
.desc = Слабо светящийся гриб. Часто используется алхимиками как средство для концентрации растворов.
.suffix = Gatherable
ent-CP14ElementalReactor = elemental reactor
.desc = A work of art created by the dwarves of Zilagro and House Lyrandar, controlling the fire elemental and allowing it to produce vast amounts of energy.
ent-CP14ChestGeneric = сундук
.desc = Chest.
@@ -804,6 +907,15 @@ ent-CP14BrassChest = латунный сундук
ent-CP14CrateCoffin = гроб
.desc = Удобный и красивый гроб, чтобы с удобствами дождаться своего воскрешения.
ent-CP14BaseSmallCrate = { ent-CP14BaseCrate }
.desc = { ent-CP14BaseCrate.desc }
ent-CP14LargeWoodenCrate = большой деревянный ящик
.desc = Ящик из дерева.
ent-CP14SmallWoodenCrate = малый деревянный ящик
.desc = Ящик из дерева.
ent-CP14Cliff = обрыв
.desc = Серьезные неровности природного ландшафта.
.suffix = Прямой
@@ -858,6 +970,14 @@ ent-CP14BaseWall = стена
ent-CP14WallStonebrick = каменная кирпичная стена
.desc = { ent-CP14BaseWall.desc }
ent-CP14WallStonebrickCrushedMedium = каменная кирпичная стена
.desc = { ent-CP14BaseCrushed.desc }
.suffix = CrushedMedium
ent-CP14WallStonebrickCrushedLow = каменная кирпичная стена
.desc = { ent-CP14BaseCrushed.desc }
.suffix = CrushedLow
ent-CP14WallWhitebrick = белая кирпичная стена
.desc = { ent-CP14BaseWall.desc }
@@ -957,22 +1077,6 @@ ent-CP14CaveStoneWallGoldOre = { ent-CP14CaveStoneWall }
ent-CP14CardboardWall = стена из картона
.desc = Тонкая, непрочная стена из бумаги и картона. Пользуется популярностью в теплых странах.
ent-CP14StatueGob = статуя Гоба
.desc = Он прекрасен.
.suffix = Нормальная
ent-CP14StatueGobVines = статуя Гоба
.desc = { ent-CP14StatueGob.desc }
.suffix = Нормальная. Заросшая
ent-CP14StatueGobRuined = разрушенная статуя Гоба
.desc = { ent-CP14StatueGob.desc }
.suffix = Разрушенная
ent-CP14StatueGobRuinedVines = разрушенная статуя Гоба
.desc = { ent-CP14StatueGob.desc }
.suffix = Разрушенная. Заросшая
ent-CPBaseSharpeningStoneStructure = стационарный точильный камень
.desc = прочный, долговечный точильный камень, способный затачивать оружие без особого вреда для него.

View File

@@ -6,4 +6,6 @@ sharpening-examined-25 = Выглядит крайне сильно затупи
damageable-weapon-1 = Выглядит полностью целым
damageable-weapon-2 = Покрыт парой царапин
damageable-weapon-3 = Выглядит изношенным
damageable-weapon-4 = Он вот-вот сломается
damageable-weapon-4 = Он вот-вот сломается
sharpening-ready = Идеально заточен

View File

@@ -5,6 +5,10 @@
components:
- type: CP14MagicEffect
manaCost: 15
telegraphyEffects:
- !type:CP14SpellSpawnEntity
spawns:
- CP14ImpactEffectCureWounds
effects:
- !type:CP14SpellSpawnEntity
spawns:

View File

@@ -0,0 +1,42 @@
- type: entity
id: CP14ActionSpellShadowStep
name: Shadow step
description: A step through the gash of reality that allows you to cover a lot of distance quickly
components:
- type: CP14MagicEffect
manaCost: 40
telegraphyEffects:
- !type:CP14SpellSpawnEntity
spawns:
- CP14ImpactEffectShadowStep
effects:
- !type:CP14SpellSpawnEntity
spawns:
- CP14ImpactEffectShadowStep
- !type:CP14SpellCasterTeleport
- type: CP14MagicEffectVerbalAspect
startSpeech: "Tenebrae, accipe me..."
endSpeech: "in alium locum"
- type: WorldTargetAction
useDelay: 15
range: 10
checkCanAccess: false
itemIconStyle: BigAction
sound: !type:SoundPathSpecifier
path: /Audio/Magic/rumble.ogg
icon:
sprite: _CP14/Effects/Magic/spells_icons.rsi
state: shadow_step
event: !type:CP14DelayedWorldTargetActionEvent
delay: 1
- type: entity
id: CP14ImpactEffectShadowStep
parent: CP14BaseMagicImpact
categories: [ HideSpawnMenu ]
components:
- type: Sprite
layers:
- state: particles_up
color: "#79b330"
shader: unshaded

View File

@@ -15,6 +15,7 @@
id: CP14ClothingRingIceDagger
parent: CP14ClothingRingBase
name: conductive ring
suffix: Ice Dagger
description: A standard mana-conductive ring that allows the user to summon ice daggers.
components:
- type: Sprite
@@ -33,6 +34,7 @@
parent: CP14ClothingRingBase
name: conductive ring
description: A standard mana-conductive ring that allows the user to summon artificial flames.
suffix: Flame creation
components:
- type: Sprite
layers:
@@ -50,6 +52,7 @@
parent: CP14ClothingRingBase
name: conductive ring
description: A standard mana-conductive ring that allows the user to heal physical injuries.
suffix: Cure Wounds
components:
- type: Sprite
layers:

View File

@@ -15,6 +15,9 @@
},
{
"name": "ice_dagger"
},
{
"name": "shadow_step"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB