Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
namespace Content.Server.Imperial.Medieval.Magic.MedievalFoliantToHandTeleporter;
/// <summary>
/// Компонент телепортирует предмет по UID к пользователю в свободную руку при активации триггера.
/// </summary>
/// <remarks>
/// Вообще планируется использовать этот компонент для телепорта не только гримуара, но и других предметов.
/// </remarks>
[RegisterComponent, Access(typeof(FoliantToHandTeleporterSystem))]
public sealed partial class FoliantToHandTeleporterComponent : Component
{
[ViewVariables]
public EntityUid? ItemUid;

[DataField]
public string? KeyIn = "UseInHand";
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using Content.Server.Imperial.Medieval.Magic.BindStoreOnEquip;
using Content.Shared.Imperial.Medieval.Magic;
using Content.Shared.Hands.EntitySystems;

namespace Content.Server.Imperial.Medieval.Magic.MedievalFoliantToHandTeleporter;
public sealed partial class FoliantToHandTeleporterSystem : EntitySystem
{
[Dependency] private readonly SharedHandsSystem _handsSystem = default!;

public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<FoliantToHandTeleporterComponent, MedievalAfterSpawnEntityBySpellEvent>(FindFoliant);
}

private void FindFoliant(EntityUid uid, FoliantToHandTeleporterComponent component, MedievalAfterSpawnEntityBySpellEvent args)
{
EntityUid playerUid = args.Performer;
var query = EntityQueryEnumerator<BindStoreOnEquipComponent>();

while(query.MoveNext(out var folliantUID, out var bindComp))
{
if(bindComp.BindedEntity != playerUid) continue;
else TeleportItemToHand(playerUid, folliantUID); break;
}
}

private void TeleportItemToHand(EntityUid playerUid, EntityUid itemUid)
{
_handsSystem.TryForcePickupAnyHand(playerUid, itemUid);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
license: This content is under ICLA. Copyright holder: Zakvielian (discord) (Read more on: https://wiki.imperialspace.net/ru/icla)
copyright: "Zakvielian (discord)"
2 changes: 1 addition & 1 deletion Content.Shared/Actions/SharedActionsSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -689,7 +689,7 @@ public bool AddAction(Entity<ActionsComponent?> performer,
return AddActionDirect(performer, (ent, ent));
}

/// <summary>
/// <summary>1
/// Adds a pre-existing action. This also bypasses the requirement that the given action must be stored in a
/// valid action container.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,3 +69,10 @@ medieval-store-spells-earth-obelisk-middle-desc = Создайте в указа

medieval-store-spells-earth-obelisk-senior-name = Обелиск
medieval-store-spells-earth-obelisk-senior-desc = Создайте в указанном месте разрушаемый обелиск, который будет создавать волны шипов с каждым ударом.

# Earth bed

medieval-spell-speach-earth-bed = L̰ͧe͉ͩc̰̍ṭ̛ựs̰̅ ̰ͩT̰ͤe͉ͩṛ̛ṛ̛a̰ͤḛ̅

medieval-store-spells-earth-bed-beginner-name = Ложе из земли
medieval-store-spells-earth-bed-beginner-desc = Создайте в указаном месте не особо удобное место для сна. Стоимость 45 маны
Original file line number Diff line number Diff line change
Expand Up @@ -93,3 +93,10 @@ medieval-store-spells-light-sunstrike-senior-name = Солнечный луч
medieval-store-spells-light-sunstrike-senior-desc = Ускоренная версия солнечного луча. Стоимость 60 маны

MagicSpark = Магическая искра

# Summon Foliant

medieval-spell-speach-summon-foliant = E̸V͢O̸CÁ͠T͢IÓ̵ G̡RÍ̛M͢O̸I͜RÍÍ͠

medieval-store-spells-magic-light-summon-foliant-beginner-name = Призыв гримура
medieval-store-spells-light-summon-foliant-beginner-desc = Призывает связанный с вами гримуар. Стоимость 25 маны
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,10 @@ medieval-store-spells-vodka-ice-dagger-middle-desc = Конвертируйте

medieval-store-spells-vodka-ice-dagger-senior-name = Совершенный ледяной кинжал
medieval-store-spells-vodka-ice-dagger-senior-desc = Конвертируйте манну в жидкость и охладите ее в руке для создания ледяного кинжала, который значительно острее обычного кинжала и исчезнет через 30 секунд. Стоимость 12 маны, перезарядка 1.5 секунды.

# Water Orb

medieval-spell-speach-water-orb = S̰ͧp̝ͥh̼ͨa̰ͤe͉ͩṛ̛a̰̍ ̰ͩA̰ͥq̰ͮựa̰ͤḛ̅

medieval-store-spells-vodka-water-orb-beginner-name = Шарик воды
medieval-store-spells-vodka-water-orb-beginner-desc = Небольшое количество воды, заточенное в сферу из тонкого льда. Стоимость 10 маны
6 changes: 6 additions & 0 deletions Resources/Locale/ru-RU/Imperial/Medieval/medieval.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -5819,6 +5819,12 @@ ent-IceDaggerSenior = совершенный ледяной кинжал
ent-SparkBeginner = магическая искра
.desc = Огонёк скоро потухнет
.suffix = { "Средневековье" }
ent-WaterOrbBeginner = Водяной шарик
.desc = Скорлупа скоро растает
.suffix = { "Средневековье" }
ent-MedievalEarthBedBeginner = Ложе из земли
.desc = Говорят спать на твердой поверхности полезно
.suffix = { "Средневековье" }
ent-MedievalMagicLightningRune = грозовая руна
.desc = Используйте, чтобы изучить заклинание грозовой руны.
.suffix = { "СКИН, Средневековье" }
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Beginner

- type: entity
id: MedievalActionEarthBedBeginner
name: medieval-store-spells-earth-bed-beginner-name
description: medieval-store-spells-earth-bed-beginner-desc
components:
- type: CastTraining
trainingResults:
- !type:AddMagicEssence
essenceAddProbability: 0.0007
bonusAddProbability: 1
addedEssences:
MagicMedievalVodka: 1
bonusEssences:
MagicMedievalVodka: 1
- type: ManaDrainSpell
manaDrain: 45
canUseWithoutMana: true
manaLowMessage: medieval-spell-speach-not-enough-mana-fire-spell
damageOnUseWithoutMana:
groups:
Burn: 20
- type: SpellCastEffect
effectProto: EarthBedSpellCastEffectBeginner
- type: MedievalTargetSpell
- type: Action
useDelay: 120
itemIconStyle: BigAction
sound: !type:SoundPathSpecifier
path: /Audio/Imperial/Medieval/mob_spawn_effect.ogg
icon:
sprite: Imperial/Medieval/Magic/Earth/EarthBed/icons.rsi
state: beginner
- type: TargetAction
checkCanAccess: false
targetingIndicator: false
range: 5
- type: WorldTargetAction
event: !type:MedievalSpawnSpellEvent
spawnedEntityPrototype: MedievalEarthBedBeginner
spawnType: SpawnOnMousePosition
speechPoints:
0:
speech: medieval-spell-speach-earth-bed
color: "#838275"
hideChat: true
- type: ShowSpawnedEntity
sprites:
- drawedSprite:
sprite: Imperial/Medieval/Magic/Earth/EarthBed/projectiles.rsi
state: beginner
alwaysRender: true
spriteColor: "#574242"
outOfRangeColor: "#650000"
range: 5
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#Beginner

- type: entity
id: EarthBedSpellCastEffectBeginner
components:
- type: Sprite
sprite: Imperial/Medieval/SpellCastEffects/fire/nova.rsi
color: "#838275"
noRot: true
layers:
- state: beginner
shader: unshaded
- type: PointLight
radius: 2
energy: 2
color: "#838275"
- type: TimedDespawn
lifetime: 0.5

Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Base

- type: entity
parent: Bed
id: MedievalEarthBed
name: Earth Bed
abstract: true
components:
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 60
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
- type: Strap
buckleTime: 0.5
unbuckleTime: 0.5
buckleSound:
path: /Audio/Imperial/Medieval/Effects/lay_on_bed1.ogg
unbuckleSound:
path: /Audio/Imperial/Medieval/Effects/lay_on_bed2.ogg
- type: Buckle
- type: BloodRegenBed
bloodRegenMultiplier: 2.0
- type: HealOnBuckle
damage:
groups:
Brute: -0.1
Burn: -0.1
Airloss: -0.1
types:
Poison: -0.1
Caustic: -0.1
Radiation: -0.1
- type: MedievalPlagueHealStrapped

# Beginner

- type: entity
id: MedievalEarthBedBeginner
parent: MedievalEarthBed
name: Earth Bed
components:
- type: Sprite
sprite: Imperial/Medieval/Magic/Earth/EarthBed/projectiles.rsi
state: beginner
- type: TimedDespawn
lifetime: 60
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Beginner

- type: imperialListing
id: MedievalSpellEarthBedBeginner
name: medieval-store-spells-earth-bed-beginner-name
description: medieval-store-spells-earth-bed-beginner-desc
productAction: MedievalActionEarthBedBeginner
priority: 7
icon:
sprite: Imperial/Medieval/Magic/Earth/EarthBed/icons.rsi
state: beginner
cost:
MagicMedievalEarth: 60
categories:
- MedievalEarthSpells
conditions:
- !type:ImperialListingLimitedStockCondition
stock: 1
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,92 @@
Burn: 5
- type: SpellCastEffect
effectProto: MagicLightSpellCastEffectBeginner
- type: ActionUpgrade
effectedLevels:
2: MedievalActionMagicLightStationaryMiddle
3: MedievalActionMagicLightFollowerMiddle


# Middle

- type: entity
id: MedievalActionMagicLightStationaryMiddle
name: medieval-store-spells-magic-light-flash-stationary-middle-name #
description: medieval-store-spells-light-magic-light-stationary-middle-desc #
components:
- type: MedievalInstantSpell
- type: Action
useDelay: 60
itemIconStyle: BigAction
sound: !type:SoundPathSpecifier
path: /Audio/Imperial/Medieval/lightsphere_cast.ogg
icon:
sprite: Imperial/Medieval/Magic/Light/MagicLight/icons.rsi
state: middleStationary
- type: InstantAction
event: !type:MedievalInstantSpawnEvent
spawnedEntityPrototype: MedievalProjectileLightStationarMiddle #
speechPoints:
0:
speech: medieval-spell-speach-magic-light
color: "#FFE57E"
hideChat: true
- type: CastTraining
trainingResults:
- !type:AddMagicEssence
essenceAddProbability: 0.0004
bonusAddProbability: 1
addedEssences:
MagicMedievalLight: 1
bonusEssences:
MagicMedievalLight: 1
- type: ManaDrainSpell
manaDrain: 40
canUseWithoutMana: true
manaLowMessage: medieval-spell-speach-not-enough-mana-fire-spell
damageOnUseWithoutMana:
groups:
Burn: 10
- type: SpellCastEffect
effectProto: MagicLightSpellCastEffectBeginner

- type: entity
id: MedievalActionMagicLightFollowerMiddle
name: medieval-store-spells-magic-light-flash-follower-middle-name #
description: medieval-store-spells-light-magic-light-follower-middle-desc #
components:
- type: MedievalInstantSpell
- type: Action
useDelay: 20
itemIconStyle: BigAction
sound: !type:SoundPathSpecifier
path: /Audio/Imperial/Medieval/lightsphere_cast.ogg
icon:
sprite: Imperial/Medieval/Magic/Light/MagicLight/icons.rsi
state: middleFollower #
- type: InstantAction
event: !type:MedievalInstantSpawnEvent
spawnedEntityPrototype: MedievalProjectileLightFollowerMiddle #
speechPoints:
0:
speech: medieval-spell-speach-magic-light
color: "#FFE57E"
hideChat: true
- type: CastTraining
trainingResults:
- !type:AddMagicEssence
essenceAddProbability: 0.0004
bonusAddProbability: 1
addedEssences:
MagicMedievalLight: 1
bonusEssences:
MagicMedievalLight: 1
- type: ManaDrainSpell
manaDrain: 30
canUseWithoutMana: true
manaLowMessage: medieval-spell-speach-not-enough-mana-fire-spell
damageOnUseWithoutMana:
groups:
Burn: 7
- type: SpellCastEffect
effectProto: MagicLightSpellCastEffectBeginner
Loading
Loading