Skip to content

Commit

Permalink
Merge branch 'master' into darobotochkiii
Browse files Browse the repository at this point in the history
  • Loading branch information
Filokini authored Dec 21, 2024
2 parents e33eef3 + 2b6fe4a commit c331cad
Show file tree
Hide file tree
Showing 43 changed files with 1,337 additions and 50 deletions.
29 changes: 29 additions & 0 deletions Content.Server/ADT/Abilities/XenoQeen/XenoQeenComponent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;

namespace Content.Server.Abilities.XenoQeen
{
/// <summary>
/// Lets its owner entity use mime powers, like placing invisible walls.
/// </summary>
[RegisterComponent]
public sealed partial class XenoQeenComponent : Component
{
/// <summary>
/// Whether this component is active or not.
/// </summarY>
[DataField("enabled")]
public bool Enabled = true;

/// <summary>
/// The wall prototype to use.
/// </summary>
[DataField("wallPrototype", customTypeSerializer: typeof(PrototypeIdSerializer<EntityPrototype>))]
public string XenoTurret = "WeaponTurretXeno";

[DataField("xenoTurretAction", customTypeSerializer: typeof(PrototypeIdSerializer<EntityPrototype>))]
public string? XenoTurretAction = "ActionXenoQeenTurret";

[DataField("xenoTurretActionEntity")] public EntityUid? XenoTurretActionEntity;
}
}
66 changes: 66 additions & 0 deletions Content.Server/ADT/Abilities/XenoQeen/XenoQeenSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
using Content.Server.Popups;
using Content.Shared.Actions;
using Content.Shared.Actions.Events;
using Content.Shared.Coordinates.Helpers;
using Content.Shared.Maps;
using Content.Shared.Physics;
using Robust.Shared.Containers;
using Robust.Shared.Map;

namespace Content.Server.Abilities.XenoQeen
{
public sealed class XenoQeenSystem : EntitySystem
{
[Dependency] private readonly PopupSystem _popupSystem = default!;
[Dependency] private readonly SharedActionsSystem _actionsSystem = default!;
[Dependency] private readonly TurfSystem _turf = default!;
[Dependency] private readonly IMapManager _mapMan = default!;
[Dependency] private readonly SharedContainerSystem _container = default!;

public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<XenoQeenComponent, ComponentInit>(OnComponentInit);
SubscribeLocalEvent<XenoQeenComponent, InvisibleWallActionEvent>(OnCreateTurret);
}

public override void Update(float frameTime)
{
base.Update(frameTime);
}
private void OnComponentInit(EntityUid uid, XenoQeenComponent component, ComponentInit args)
{
_actionsSystem.AddAction(uid, ref component.XenoTurretActionEntity, component.XenoTurretAction, uid);
}
private void OnCreateTurret(EntityUid uid, XenoQeenComponent component, InvisibleWallActionEvent args)
{
if (!component.Enabled)
return;

if (_container.IsEntityOrParentInContainer(uid))
return;

var xform = Transform(uid);
// Get the tile in front of the Qeen
var offsetValue = xform.LocalRotation.ToWorldVec();
var coords = xform.Coordinates.Offset(offsetValue).SnapToGrid(EntityManager, _mapMan);
var tile = coords.GetTileRef(EntityManager, _mapMan);
if (tile == null)
return;

// Check if the tile is blocked by a wall or mob, and don't create the wall if so
if (_turf.IsTileBlocked(tile.Value, CollisionGroup.Impassable | CollisionGroup.Opaque))
{
_popupSystem.PopupEntity(Loc.GetString("create-turret-failed"), uid, uid);
return;
}

_popupSystem.PopupEntity(Loc.GetString("create-turret"), uid);
// Make sure we set the invisible wall to despawn properly
Spawn(component.XenoTurret, _turf.GetTileCenter(tile.Value));
// Handle args so cooldown works
args.Handled = true;
}

}
}
27 changes: 27 additions & 0 deletions Resources/Changelog/1ChangelogADT.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4887,3 +4887,30 @@ Entries:
оперативников, type: Tweak}
time: '2024-12-18T14:30:01Z'
id: 608
- author: Шрёдька
changes:
- {message: Добавлена возможность взять нифму дионы в руки или надеть её в слот
для головного убора., type: Add}
time: '2024-12-19T21:39:25Z'
id: 609
- author: Sh4zik
changes:
- {message: Был добавлен снежок, type: Add}
- {message: 'Был добавлен огромный ящик, заполненным снегом', type: Add}
- {message: 'Были добавлены превосходные, зимние сани', type: Add}
- {message: 'Был добавлен ????? из слаймолюдов.', type: Add}
- {message: Было добавлено новогоднее настроение!, type: Add}
- {message: Была добавлены различные вариации кинжалов, type: Add}
- {message: Была добавлена возможность скрафтить новые виды вооружения - кинжалы,
type: Add}
- {message: 'Были починены крафты закалённых копей и заточек, а также их урон',
type: Fix}
time: '2024-12-20T14:30:35Z'
id: 610
- author: NameLunar
changes:
- {message: Ксеноморфы эволюционировали и стали намного опасней. В особенности
Королева!, type: Fix}
- {message: Добавлены некоторые способности для королевы ксеноморфов., type: Add}
time: '2024-12-21T13:42:16Z'
id: 611
14 changes: 14 additions & 0 deletions Resources/Locale/ru-RU/ADT/prototypes/Actions/XenoQeen.ftl
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
ent-ActionXenoQeenTurret = Создать ксено турель.
.desc = Создаёт перед вами ксену турель, если хватает места.
create-turret-failed = Найдите другое место.
create-turret = Арргхсс. Шшшшш!
ent-ActionSpawnMobXenoSpitter = Призвать Плевальщик
.desc = Родите Плевальщика, который будет плеваться!
ent-ActionSpawnMobXenoPraetorian = Призвать Преторианеца
.desc = Родите Преторианеца, который будет сражаться за вас!
ent-ActionSpawnMobXenoDrone = Просто Дрон. Кому он нужен?
.desc = Родите рабочего, Дрон.
ent-ActionSpawnMobXenoRavager = Призвать Разрушителя
.desc = Родите смерть во плоти!
ent-ActionSpawnMobXenoRunner = Призвать Бегуна
.desc = Родите самую быструю личинку!
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
ent-ADTShardGlassReinforcedPlasma = осколок закалённого плазменного стекла
.desc = Небольшой осколок плазменного стекла.
ent-ADTShardGlassReinforcedUran = осколок закалённого уранового стекла
.desc = Небольшой осколок уранового стекла.
Original file line number Diff line number Diff line change
Expand Up @@ -44,3 +44,19 @@ ent-SpearReinforcedPlasma = копьё из закалённой плазмы
ent-ADTReinforcedPlasmaShiv = заточка из закалённой плазмы
.desc = Заточка, созданная из осколка закалённой плазмы, имеющий тканевую основу, для более удобной нарезки ваших оппонентов.
ent-ADTGlassDagger = стеклянный кинжал
.desc = Стеклянный самодельный кинжал. Хоть это и обычный осколок стекла прикреплённый к палке при помощи кабеля, это вполне неплохое оружие.
ent-ADTPlasmaDagger = плазменный кинжал
.desc = Плазменный самодельный кинжал. Хоть это и обычный осколок стекла прикреплённый к палке при помощи кабеля, это вполне неплохое оружие.
ent-ADTGlassReinDagger = кинжал из закалённого стекла
.desc = Закалённый, стеклянный самодельный кинжал. Хоть это и обычный осколок стекла прикреплённый к палке при помощи кабеля, это вполне неплохое оружие.
ent-ADTGlassUranDagger = урановый кинжал
.desc = Урановый самодельный кинжал. Хоть это и обычный осколок стекла прикреплённый к палке при помощи кабеля, это вполне неплохое оружие.
ent-ADTWoodenSword = деревянный меч
.desc = Настоящий робаст нуждается в ежедневных тренировках.
.suffix = { "Тренировочное" }
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,20 @@ ent-ADTHalloweenCarvedPumpkinCube = { ent-ADTHalloweenCarvedPumpkinSmile }
ent-ADTHalloweenCarvedPumpkinWily = { ent-ADTHalloweenCarvedPumpkinSmile }
.suffix = { ent-ADTHalloweenCarvedPumpkinSmile.suffix }
.desc = { ent-ADTHalloweenCarvedPumpkinSmile.desc }
ent-ADTSnowballsCrate = телега со снегом
.suffix = New Year
.desc = Ради неё вовсе не разрушают чьи-то планеты... Вовсе нет.
ent-ADTNewYearKatalka = зимние сани
.suffix = New Year
.desc = Такси бизнес-класса, потому что упряжка не рассчитана под стадо оленей.
ent-ADTSnowball = снежок
.suffix = New Year
.desc = Снаряд опаснее всякой пули... БЕРЕГИСЬ!
ent-ADTSlimeHappines = экстракт счастья
.suffix = New Year
.desc = Концентрация искреннего счастья слаймолюдов, полученная абсолютно гуманным путём
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
ent-MobXeno = Бурильщик
.desc = Обычно они приходят ночью. Обычно.
ent-MobXenoPraetorian = Преторианец
.desc = { ent-MobXeno.desc }
.desc = Преторианец. Личная гвардия королевы, задача которого - защитить королеву. Стойкий воин ксено с хорошим уроном.
ent-MobXenoDrone = Дрон
.desc = { ent-MobXeno.desc }
.desc = Дрон. Рядовой представитель ксеносов, задача которых - защищать улей и иногда охотиться. Не обладают выдающимися характеристиками. Самый типичный ксено.
ent-MobXenoQueen = Королева
.desc = { ent-MobXeno.desc }
.desc = Королева. Предводительница стаи, невероятно сильная и живучая, если она оказалась перед вами - считайте, что вы мертвы.
ent-MobXenoRavager = Разрушитель
.desc = { ent-MobXeno.desc }
.desc = Разрушитель. Самый сильный и живучий ксенос, после королевы.
ent-MobXenoRunner = Бегун
.desc = { ent-MobXeno.desc }
.desc = Бегун. Обладает малым уроном, но отличается большой скоростью, так что быстро бегает и бьёт.
ent-MobXenoRouny = Руни
.desc = { ent-MobXenoRunner.desc }
ent-MobXenoSpitter = Плевальщик
.desc = { ent-MobXeno.desc }
.desc = Плевальщик. Рядовой представитель ксеносов, который плюётся едкой кислотой, прожигающую даже броню. Однако слаб в ближнем бою.
ent-MobPurpleSnake = космическая гадюка
.desc = Грозная пурпурная змея с Kepler-283c.
ent-MobSmallPurpleSnake = космическая гадюка
Expand Down
109 changes: 109 additions & 0 deletions Resources/Prototypes/ADT/Actions/XenoQeen.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
# Спавн турелей у королевы
- type: entity
id: ActionXenoQeenTurret
name: Create Xeno turret
description: Create an xeno turret in front of you, if placeable there.
components:
- type: InstantAction
priority: -1
useDelay: 180
icon:
sprite: Objects/Weapons/Guns/Turrets/xenoturret.rsi
state: icon
event: !type:InvisibleWallActionEvent
# Я не смог сделать отдельный ивент для спавнта турели. Он не видел прототип ивента.

- type: entity
id: ActionSpawnMobXenoSpitter
name: Spawn Spitter
description: Give birth to Spitter who will spit!
categories: [ HideSpawnMenu ]
components:
- type: WorldTargetAction
useDelay: 240
range: 4
itemIconStyle: BigAction
icon:
sprite: Mobs/Aliens/Xenos/spitter.rsi
state: crit
event: !type:WorldSpawnSpellEvent
prototypes:
- id: MobXenoSpitter
amount: 1
offset: 0, 1

- type: entity
id: ActionSpawnMobXenoPraetorian
name: Spawn Praetorian
description: Give birth to a Praetorian who will fight for you!
categories: [ HideSpawnMenu ]
components:
- type: WorldTargetAction
useDelay: 300
range: 4
itemIconStyle: BigAction
icon:
sprite: Mobs/Aliens/Xenos/praetorian.rsi
state: crit
event: !type:WorldSpawnSpellEvent
prototypes:
- id: MobXenoPraetorian
amount: 1
offset: 0, 1

- type: entity
id: ActionSpawnMobXenoDrone
name: Just a Drone. Who needs it?
description: Give birth to a worker, Drone.
categories: [ HideSpawnMenu ]
components:
- type: WorldTargetAction
useDelay: 80
range: 4
itemIconStyle: BigAction
icon:
sprite: Mobs/Aliens/Xenos/drone.rsi
state: crit
event: !type:WorldSpawnSpellEvent
prototypes:
- id: MobXenoDrone
amount: 1
offset: 0, 1

- type: entity
id: ActionSpawnMobXenoRavager
name: Spawn Ravager
description: Give birth to death in the flesh!
categories: [ HideSpawnMenu ]
components:
- type: WorldTargetAction
useDelay: 480
range: 4
itemIconStyle: BigAction
icon:
sprite: Mobs/Aliens/Xenos/ravager.rsi
state: crit
event: !type:WorldSpawnSpellEvent
prototypes:
- id: MobXenoRavager
amount: 1
offset: 0, 1

- type: entity
id: ActionSpawnMobXenoRunner
name: Spawn Runner
description: Give birth to the fastest larva!
categories: [ HideSpawnMenu ]
components:
- type: WorldTargetAction
useDelay: 120
range: 4
itemIconStyle: BigAction
icon:
sprite: Mobs/Aliens/Xenos/runner.rsi
state: crit
event: !type:WorldSpawnSpellEvent
prototypes:
- id: MobXenoRunner
amount: 1
offset: 0, 1
Loading

0 comments on commit c331cad

Please sign in to comment.