Aspect fix (#411)
* Aspect fixes * Update NonPeacefulRoundItems * Add PresentAspect * Fix * Fix late join * Change color
This commit is contained in:
@@ -98,7 +98,7 @@ public sealed class RandomGiftSystem : EntitySystem
|
||||
|
||||
_possibleGiftsUnsafe.Add(proto.ID);
|
||||
|
||||
if (!proto.Components.ContainsKey(itemCompName))
|
||||
if (!proto.Components.ContainsKey(itemCompName) || proto.SetSuffix is "DEBUG" or "Admeme") // WD EDIT
|
||||
continue;
|
||||
|
||||
_possibleGiftsSafe.Add(proto.ID);
|
||||
|
||||
@@ -2,11 +2,15 @@ using Content.Server.GameTicking.Rules.Components;
|
||||
using Content.Server.White.AspectsSystem.Aspects.Components;
|
||||
using Content.Server.White.AspectsSystem.Base;
|
||||
using Content.Server.White.Other;
|
||||
using Content.Shared.Buckle;
|
||||
using Content.Shared.Buckle.Components;
|
||||
|
||||
namespace Content.Server.White.AspectsSystem.Aspects;
|
||||
|
||||
public sealed class ChairLeakAspect : AspectSystem<ChairLeakAspectComponent>
|
||||
{
|
||||
[Dependency] private readonly SharedBuckleSystem _buckle = default!;
|
||||
|
||||
protected override void Started(EntityUid uid, ChairLeakAspectComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args)
|
||||
{
|
||||
base.Started(uid, component, gameRule, args);
|
||||
@@ -14,6 +18,9 @@ public sealed class ChairLeakAspect : AspectSystem<ChairLeakAspectComponent>
|
||||
var query = EntityQueryEnumerator<ChairMarkComponent>();
|
||||
while (query.MoveNext(out var ent, out _))
|
||||
{
|
||||
if (TryComp(ent, out StrapComponent? strap))
|
||||
_buckle.StrapRemoveAll(strap);
|
||||
|
||||
EntityManager.DeleteEntity(ent);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
namespace Content.Server.White.AspectsSystem.Aspects.Components;
|
||||
|
||||
[RegisterComponent]
|
||||
public sealed class PresentAspectComponent : Component
|
||||
{
|
||||
}
|
||||
@@ -23,7 +23,8 @@ public sealed class FastAndFuriousAspect : AspectSystem<FastAndFuriousAspectComp
|
||||
var query = EntityQueryEnumerator<MovementSpeedModifierComponent>();
|
||||
while (query.MoveNext(out var ent, out var speedModifierComponent))
|
||||
{
|
||||
_movementSystem.ChangeBaseSpeed(ent, speedModifierComponent.BaseWalkSpeed + 2.5f, speedModifierComponent.BaseSprintSpeed + 4, speedModifierComponent.Acceleration);
|
||||
_movementSystem.ChangeBaseSpeed(ent, speedModifierComponent.BaseWalkSpeed,
|
||||
speedModifierComponent.BaseSprintSpeed + 3, speedModifierComponent.Acceleration);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,7 +34,8 @@ public sealed class FastAndFuriousAspect : AspectSystem<FastAndFuriousAspectComp
|
||||
var query = EntityQueryEnumerator<MovementSpeedModifierComponent>();
|
||||
while (query.MoveNext(out var ent, out var speedModifierComponent))
|
||||
{
|
||||
_movementSystem.ChangeBaseSpeed(ent, 2.5f, 4.5f, speedModifierComponent.Acceleration);
|
||||
_movementSystem.ChangeBaseSpeed(ent, speedModifierComponent.BaseWalkSpeed,
|
||||
speedModifierComponent.BaseSprintSpeed, speedModifierComponent.Acceleration);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,7 +55,8 @@ public sealed class FastAndFuriousAspect : AspectSystem<FastAndFuriousAspectComp
|
||||
if (!TryComp<MovementSpeedModifierComponent>(mob, out var speedModifierComponent))
|
||||
return;
|
||||
|
||||
_movementSystem.ChangeBaseSpeed(mob, speedModifierComponent.BaseWalkSpeed + 2.5f, speedModifierComponent.BaseSprintSpeed + 4, speedModifierComponent.Acceleration);
|
||||
_movementSystem.ChangeBaseSpeed(mob, speedModifierComponent.BaseWalkSpeed,
|
||||
speedModifierComponent.BaseSprintSpeed + 3, speedModifierComponent.Acceleration);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
31
Content.Server/White/AspectsSystem/Aspects/PresentAspect.cs
Normal file
31
Content.Server/White/AspectsSystem/Aspects/PresentAspect.cs
Normal file
@@ -0,0 +1,31 @@
|
||||
using Content.Server.GameTicking.Rules.Components;
|
||||
using Content.Server.White.AspectsSystem.Aspects.Components;
|
||||
using Content.Server.White.AspectsSystem.Base;
|
||||
using Robust.Shared.Random;
|
||||
|
||||
namespace Content.Server.White.AspectsSystem.Aspects;
|
||||
|
||||
public sealed class PresentAspect : AspectSystem<PresentAspectComponent>
|
||||
{
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
|
||||
protected override void Added(EntityUid uid, PresentAspectComponent component, GameRuleComponent gameRule, GameRuleAddedEvent args)
|
||||
{
|
||||
base.Added(uid, component, gameRule, args);
|
||||
|
||||
SpawnPresents();
|
||||
}
|
||||
|
||||
private void SpawnPresents()
|
||||
{
|
||||
var minPresents = _random.Next(70, 200);
|
||||
|
||||
for (var i = 0; i < minPresents; i++)
|
||||
{
|
||||
if (!TryFindRandomTile(out _, out _, out _, out var targetCoords))
|
||||
break;
|
||||
|
||||
EntityManager.SpawnEntity("PresentRandomUnsafe", targetCoords);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,12 +5,15 @@ using Content.Server.GameTicking.Rules.Components;
|
||||
using Content.Server.White.AspectsSystem.Aspects.Components;
|
||||
using Content.Server.White.AspectsSystem.Base;
|
||||
using Content.Server.White.Other;
|
||||
using Content.Shared.Damage;
|
||||
|
||||
namespace Content.Server.White.AspectsSystem.Aspects;
|
||||
|
||||
public sealed class WeakWallsAspect : AspectSystem<WeakWallsAspectComponent>
|
||||
{
|
||||
private const int DamageToSet = 100;
|
||||
[Dependency] private readonly DamageableSystem _damageable = default!;
|
||||
|
||||
private const float DamageMultiplier = 0.15f;
|
||||
|
||||
protected override void Started(EntityUid uid, WeakWallsAspectComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args)
|
||||
{
|
||||
@@ -19,16 +22,19 @@ public sealed class WeakWallsAspect : AspectSystem<WeakWallsAspectComponent>
|
||||
var query = EntityQueryEnumerator<WallMarkComponent>();
|
||||
while (query.MoveNext(out var ent, out _))
|
||||
{
|
||||
if (!TryComp<DestructibleComponent>(ent, out var destructible))
|
||||
if (!TryComp<DestructibleComponent>(ent, out var destructible) ||
|
||||
!TryComp<DamageableComponent>(ent, out var damageable))
|
||||
continue;
|
||||
|
||||
_damageable.SetDamageModifierSetId(ent, null, damageable);
|
||||
|
||||
var trigger = (DamageTrigger?) destructible.Thresholds
|
||||
.LastOrDefault(threshold => threshold.Trigger is DamageTrigger)?.Trigger;
|
||||
|
||||
if (trigger == null)
|
||||
continue;
|
||||
|
||||
trigger.Damage = (trigger.Damage == DamageToSet) ? trigger.Damage : DamageToSet;
|
||||
trigger.Damage = (int) (trigger.Damage * DamageMultiplier);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using Content.Server.Administration.Logs;
|
||||
using Content.Server.Atmos.EntitySystems;
|
||||
using Content.Server.Chat.Systems;
|
||||
@@ -6,11 +7,14 @@ using Content.Server.GameTicking.Rules;
|
||||
using Content.Server.GameTicking.Rules.Components;
|
||||
using Content.Server.Station.Components;
|
||||
using Content.Shared.Database;
|
||||
using Content.Shared.Physics;
|
||||
using Robust.Server.GameObjects;
|
||||
using Robust.Shared.Audio.Systems;
|
||||
using Robust.Shared.Collections;
|
||||
using Robust.Shared.Map;
|
||||
using Robust.Shared.Map.Components;
|
||||
using Robust.Shared.Physics;
|
||||
using Robust.Shared.Physics.Components;
|
||||
using Robust.Shared.Player;
|
||||
using Robust.Shared.Random;
|
||||
using Robust.Shared.Timing;
|
||||
@@ -74,7 +78,7 @@ namespace Content.Server.White.AspectsSystem.Base
|
||||
|
||||
if (aspect is { Description: not null, IsHidden: false })
|
||||
{
|
||||
_chatSystem.DispatchGlobalAnnouncement(aspect.Description, playSound: false, colorOverride: Color.LimeGreen);
|
||||
_chatSystem.DispatchGlobalAnnouncement(aspect.Description, playSound: false, colorOverride: Color.Aquamarine);
|
||||
}
|
||||
|
||||
_audio.PlayGlobal(aspect.StartAudio, Filter.Broadcast(), true);
|
||||
@@ -108,7 +112,7 @@ namespace Content.Server.White.AspectsSystem.Base
|
||||
|
||||
if (aspect is { Name: not null, IsHidden: false })
|
||||
{
|
||||
_chatSystem.DispatchGlobalAnnouncement($"Именем аспекта являлось: {aspect.Name}", playSound: false, colorOverride: Color.LimeGreen);
|
||||
_chatSystem.DispatchGlobalAnnouncement($"Именем аспекта являлось: {aspect.Name}", playSound: false, colorOverride: Color.Aquamarine);
|
||||
}
|
||||
|
||||
_audio.PlayGlobal(aspect.EndAudio, Filter.Broadcast(), true);
|
||||
@@ -175,20 +179,24 @@ namespace Content.Server.White.AspectsSystem.Base
|
||||
}
|
||||
|
||||
targetGrid = _robustRandom.Pick(possibleTargets);
|
||||
foreach (var target in possibleTargets.Where(HasComp<BecomesStationComponent>))
|
||||
{
|
||||
targetGrid = target;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!TryComp<MapGridComponent>(targetGrid, out var gridComp))
|
||||
return false;
|
||||
|
||||
var found = false;
|
||||
var (gridPos, _, gridMatrix) = _transform.GetWorldPositionRotationMatrix(targetGrid);
|
||||
var gridBounds = gridMatrix.TransformBox(gridComp.LocalAABB);
|
||||
var gridBounds = gridComp.LocalAABB.Scale(0.6f);
|
||||
|
||||
for (var i = 0; i < 10; i++)
|
||||
{
|
||||
var randomX = _robustRandom.Next((int) gridBounds.Left, (int) gridBounds.Right);
|
||||
var randomY = _robustRandom.Next((int) gridBounds.Bottom, (int) gridBounds.Top);
|
||||
|
||||
tile = new Vector2i(randomX - (int) gridPos.X, randomY - (int) gridPos.Y);
|
||||
tile = new Vector2i(randomX, randomY);
|
||||
if (_atmosphere.IsTileSpace(targetGrid, Transform(targetGrid).MapUid, tile,
|
||||
mapGridComp: gridComp)
|
||||
|| _atmosphere.IsTileAirBlocked(targetGrid, tile, mapGridComp: gridComp))
|
||||
@@ -196,6 +204,24 @@ namespace Content.Server.White.AspectsSystem.Base
|
||||
continue;
|
||||
}
|
||||
|
||||
var physQuery = GetEntityQuery<PhysicsComponent>();
|
||||
var valid = true;
|
||||
foreach (var ent in gridComp.GetAnchoredEntities(tile))
|
||||
{
|
||||
if (!physQuery.TryGetComponent(ent, out var body))
|
||||
continue;
|
||||
if (body.BodyType != BodyType.Static ||
|
||||
!body.Hard ||
|
||||
(body.CollisionLayer & (int) CollisionGroup.Impassable) == 0)
|
||||
continue;
|
||||
|
||||
valid = false;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!valid)
|
||||
continue;
|
||||
|
||||
found = true;
|
||||
targetCoords = gridComp.GridTileToLocal(tile);
|
||||
break;
|
||||
|
||||
@@ -258,7 +258,7 @@ public abstract partial class SharedBuckleSystem
|
||||
/// <summary>
|
||||
/// Remove everything attached to the strap
|
||||
/// </summary>
|
||||
private void StrapRemoveAll(StrapComponent strapComp)
|
||||
public void StrapRemoveAll(StrapComponent strapComp) // WD EDIT
|
||||
{
|
||||
foreach (var entity in strapComp.BuckledEntities.ToArray())
|
||||
{
|
||||
|
||||
@@ -228,7 +228,7 @@ namespace Content.Shared.Damage
|
||||
DamageChanged(uid, component, new DamageSpecifier());
|
||||
}
|
||||
|
||||
public void SetDamageModifierSetId(EntityUid uid, string damageModifierSetId, DamageableComponent? comp = null)
|
||||
public void SetDamageModifierSetId(EntityUid uid, string? damageModifierSetId, DamageableComponent? comp = null) // WD EDIT
|
||||
{
|
||||
if (!_damageableQuery.Resolve(uid, ref comp))
|
||||
return;
|
||||
|
||||
@@ -179,3 +179,16 @@
|
||||
startAudio:
|
||||
path: /Audio/White/Aspects/accent.ogg
|
||||
- type: ChairLeakAspect
|
||||
|
||||
- type: entity
|
||||
id: PresentAspect
|
||||
parent: BaseGameRule
|
||||
noSpawn: true
|
||||
components:
|
||||
- type: Aspect
|
||||
name: "Presents"
|
||||
description: "А вы верите в Деда Мороза?"
|
||||
weight: 2
|
||||
startAudio:
|
||||
path: /Audio/White/Aspects/accent.ogg
|
||||
- type: PresentAspect
|
||||
|
||||
@@ -5,11 +5,14 @@
|
||||
- WeaponSubMachineGunWt550
|
||||
- WeaponSubMachineGunC20r
|
||||
- WeaponSubMachineGunAtreides
|
||||
- WeaponSubMachineGunDrozd
|
||||
- WeaponShotgunBulldog
|
||||
- WeaponShotgunDoubleBarreled
|
||||
- WeaponShotgunEnforcer
|
||||
- WeaponShotgunKammerer
|
||||
- WeaponShotgunSawn
|
||||
- WeaponShotgunBlunderbuss
|
||||
- WeaponShotgunImprovisedLoaded
|
||||
- WeaponRifleAk
|
||||
- WeaponRifleM90GrenadeLauncher
|
||||
- WeaponRifleLecter
|
||||
@@ -18,9 +21,24 @@
|
||||
- WeaponRevolverMateba
|
||||
- WeaponRevolverPython
|
||||
- WeaponRevolverPirate
|
||||
- RevolverCapGunFake
|
||||
- WeaponLightMachineGunL6
|
||||
- WeaponFlareGun
|
||||
- Stunbaton
|
||||
- WeaponSniperMosin
|
||||
- Musket
|
||||
- EnergyCrossbowMini
|
||||
- WeaponLauncherRocket
|
||||
- WeaponLauncherPirateCannon
|
||||
- WeaponPistolViper
|
||||
- WeaponPistolCobra
|
||||
- WeaponPistolMk58
|
||||
- WeaponPistolFlintlock
|
||||
- WeaponLaserCannon
|
||||
- WeaponLaserCarbine
|
||||
- WeaponLaserGun
|
||||
- WeaponAdvancedLaser
|
||||
- WeaponMakeshiftLaser
|
||||
- WeaponXrayCannon
|
||||
- WeaponEgun
|
||||
|
||||
- type: nonPeacefulRoundEndItems
|
||||
id: nonPeacefulRoundEndMelee
|
||||
@@ -31,13 +49,20 @@
|
||||
- Machete
|
||||
- Claymore
|
||||
- Stunbaton
|
||||
- ClothingBackpackDuffelSyndicateC4tBundle
|
||||
- Spear
|
||||
- SpearReinforced
|
||||
- SpearPlasma
|
||||
- SpearUranium
|
||||
- ButchCleaver
|
||||
- CombatKnife
|
||||
- SurvivalKnife
|
||||
- EnergyDagger
|
||||
- EnergySword
|
||||
- EnergyDoubleSword
|
||||
- EnergyCutlass
|
||||
- Cutlass
|
||||
- UnholyHalberd
|
||||
- EldritchBlade
|
||||
- BaseBallBat
|
||||
- BloodSuckerDagger
|
||||
- Truncheon
|
||||
|
||||
Reference in New Issue
Block a user