Skip to content

Commit

Permalink
hotfix
Browse files Browse the repository at this point in the history
  • Loading branch information
Rxup committed Oct 29, 2024
1 parent fc9af23 commit e92f013
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 44 deletions.
10 changes: 5 additions & 5 deletions Content.Client/Backmen/Surgery/SurgeryBui.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public SurgeryBui(EntityUid owner, Enum uiKey) : base(owner, uiKey)

protected override void Open()
{
Logger.Debug("Attempting to open");
//Logger.Debug("Attempting to open");
_system.OnRefresh += () =>
{
UpdateDisabledPanel();
Expand Down Expand Up @@ -67,11 +67,11 @@ protected override void Dispose(bool disposing)

private void Update(SurgeryBuiState state)
{
Logger.Debug($"Attempting to update surgerybuistate with {state}, {_player.LocalEntity}, first predicted? {_timing.IsFirstTimePredicted}, surgeryTargetComp? {_entities.TryGetComponent<SurgeryTargetComponent>(_player.LocalEntity, out var surgeryTargetComp2)} {surgeryTargetComp2?.CanOperate}");
//Logger.Debug($"Attempting to update surgerybuistate with {state}, {_player.LocalEntity}, first predicted? {_timing.IsFirstTimePredicted}, surgeryTargetComp? {_entities.TryGetComponent<SurgeryTargetComponent>(_player.LocalEntity, out var surgeryTargetComp2)} {surgeryTargetComp2?.CanOperate}");
if (!_entities.TryGetComponent<SurgeryTargetComponent>(_player.LocalEntity, out var surgeryTargetComp)
|| !surgeryTargetComp.CanOperate)
return;
Logger.Debug("Passed check");
//Logger.Debug("Passed check");
if (_window == null)
{
_window = new SurgeryWindow();
Expand Down Expand Up @@ -195,12 +195,12 @@ int GetScore(BodyPartType? partType)

if (!_window.IsOpen)
{
Logger.Debug("Attempting to open");
//Logger.Debug("Attempting to open");
_window.OpenCentered();
}
else
{
Logger.Debug("Attempting to refresh");
//Logger.Debug("Attempting to refresh");
RefreshUI();
UpdateDisabledPanel();
}
Expand Down
8 changes: 4 additions & 4 deletions Content.Server/Backmen/Surgery/SurgerySystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ protected override void RefreshUI(EntityUid body)
}

}
Logger.Debug($"Setting UI state with {surgeries}, {body} and {SurgeryUIKey.Key}");
Log.Debug($"Setting UI state with {surgeries}, {body} and {SurgeryUIKey.Key}");
_ui.SetUiState(body, SurgeryUIKey.Key, new SurgeryBuiState(surgeries));
}

Expand Down Expand Up @@ -109,10 +109,10 @@ private void OnToolAfterInteract(Entity<SurgeryToolComponent> ent, ref AfterInte
_popup.PopupEntity("You can't perform surgery on yourself!", user, user);
return;
}*/
Logger.Debug("OnToolAfterInteract passed, opening UI");
Log.Debug("OnToolAfterInteract passed, opening UI");
args.Handled = true;
_ui.OpenUi(args.Target.Value, SurgeryUIKey.Key, user);
Logger.Debug("UI opened");
Log.Debug("UI opened");
RefreshUI(args.Target.Value);
}

Expand Down Expand Up @@ -173,7 +173,7 @@ private void OnStepAffixPartComplete(Entity<SurgeryStepAffixPartEffectComponent>
RaiseLocalEvent(targetPart.Id, ref ev);
// This is basically an equalizer, severing a part will badly damage it.
// and affixing it will heal it a bit if its not too badly damaged.
_body.TryChangeIntegrity(targetPart, targetPart.Component.Integrity - 20, false,
_body.TryChangeIntegrity(targetPart, targetPart.Component.Integrity - BodyPartComponent.IntegrityAffixPart, false,
_body.GetTargetBodyPart(targetPart.Component.PartType, targetPart.Component.Symmetry), out _);
}

Expand Down
62 changes: 37 additions & 25 deletions Content.Shared/Backmen/Surgery/Body/SharedBodySystem.Integrity.cs
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ private void InitializeBkm()

private void ProcessIntegrityTick(Entity<BodyPartComponent> entity)
{
if (entity.Comp is { Body: {} body, Integrity: > 50 and < BodyPartComponent.MaxIntegrity }
if (entity.Comp is { Body: {} body, Integrity: > BodyPartComponent.MaxIntegrity/2 and < BodyPartComponent.MaxIntegrity }
&& _queryTargeting.HasComp(body)
&& !_mobState.IsDead(body))
{
Expand Down Expand Up @@ -100,23 +100,33 @@ public override void Update(float frameTime)
/// <summary>
/// Propagates damage to the specified parts of the entity.
/// </summary>
private void ApplyPartDamage(Entity<BodyPartComponent> partEnt, DamageSpecifier damage,
BodyPartType targetType, TargetBodyPart targetPart, bool canSever, float partMultiplier)
private void ApplyPartDamage(
Entity<BodyPartComponent> partEnt,
DamageSpecifier damage,
BodyPartType targetType,
TargetBodyPart targetPart,
bool canSever,
float partMultiplier)
{
if (partEnt.Comp.Body is null)
if (
partEnt.Comp.Body is not {} body ||
!TryComp<MobStateComponent>(body, out var mobState))
return;

foreach (var (damageType, damageValue) in damage.DamageDict)
{
if (damageValue.Float() == 0
|| TryEvadeDamage(partEnt.Comp.Body.Value, GetEvadeChance(targetType)))
|| TryEvadeDamage((body, mobState), GetEvadeChance(targetType)))
continue;

float modifier = GetDamageModifier(damageType);
float partModifier = GetPartDamageModifier(targetType);
float integrityDamage = damageValue.Float() * modifier * partModifier * partMultiplier;
TryChangeIntegrity(partEnt, integrityDamage, canSever && _severingDamageTypes.Contains(damageType),
targetPart, out var severed);
var modifier = GetDamageModifier(damageType);
var partModifier = GetPartDamageModifier(targetType);
var integrityDamage = damageValue.Float() * modifier * partModifier * partMultiplier;
TryChangeIntegrity(partEnt,
integrityDamage,
canSever && _severingDamageTypes.Contains(damageType),
targetPart,
out var severed);

if (severed)
break;
Expand Down Expand Up @@ -145,13 +155,13 @@ public void TryChangeIntegrity(Entity<BodyPartComponent> partEnt,

// This will also prevent the torso from being removed.
if (partEnt.Comp.Enabled
&& partEnt.Comp.Integrity <= 15.0f)
&& partEnt.Comp.Integrity <= BodyPartComponent.CritIntegrity)
{
var ev = new BodyPartEnableChangedEvent(false);
RaiseLocalEvent(partEnt, ref ev);
}
else if (!partEnt.Comp.Enabled
&& partEnt.Comp.Integrity >= 80.0f)
&& partEnt.Comp.Integrity >= BodyPartComponent.LightIntegrity)
{
var ev = new BodyPartEnableChangedEvent(true);
RaiseLocalEvent(partEnt, ref ev);
Expand Down Expand Up @@ -292,11 +302,11 @@ public TargetIntegrity GetIntegrityThreshold(float integrity, bool severed, bool
else
return integrity switch
{
<= 10.0f => TargetIntegrity.CriticallyWounded,
<= 25.0f => TargetIntegrity.HeavilyWounded,
<= 40.0f => TargetIntegrity.ModeratelyWounded,
<= 60.0f => TargetIntegrity.SomewhatWounded,
<= 80.0f => TargetIntegrity.LightlyWounded,
<= BodyPartComponent.CritIntegrity => TargetIntegrity.CriticallyWounded,
<= BodyPartComponent.HeavyIntegrity => TargetIntegrity.HeavilyWounded,
<= BodyPartComponent.MedIntegrity => TargetIntegrity.ModeratelyWounded,
<= BodyPartComponent.SomewhatIntegrity => TargetIntegrity.SomewhatWounded,
<= BodyPartComponent.LightIntegrity => TargetIntegrity.LightlyWounded,
_ => TargetIntegrity.Healthy
};
}
Expand All @@ -317,20 +327,22 @@ public float GetEvadeChance(BodyPartType partType)
};
}

public bool CanEvadeDamage(EntityUid uid)
public bool CanEvadeDamage(Entity<MobStateComponent?> uid)
{
if (!TryComp<MobStateComponent>(uid, out var mobState)
|| !TryComp<StandingStateComponent>(uid, out var standingState)
|| _mobState.IsCritical(uid, mobState)
|| _mobState.IsDead(uid, mobState)
|| standingState.CurrentState == StandingState.Lying)
if (!Resolve(uid, ref uid.Comp))
return false;

return true;
return TryComp<StandingStateComponent>(uid, out var standingState)
&& !_mobState.IsCritical(uid, uid)
&& !_mobState.IsDead(uid, uid)
&& standingState.CurrentState != StandingState.Lying;
}

public bool TryEvadeDamage(EntityUid uid, float evadeChance)
public bool TryEvadeDamage(Entity<MobStateComponent?> uid, float evadeChance)
{
if (!Resolve(uid, ref uid.Comp))
return false;

if (!CanEvadeDamage(uid))
return false;

Expand Down
8 changes: 7 additions & 1 deletion Content.Shared/Body/Part/BodyPartComponent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,15 @@ public sealed partial class BodyPartComponent : Component, ISurgeryToolComponent
/// How much health the body part has until it pops out.
/// </summary>
[DataField, AutoNetworkedField]
public float Integrity = 70f;
public float Integrity = MaxIntegrity;

public const float MaxIntegrity = 70;
public const float LightIntegrity = 56;
public const float SomewhatIntegrity = 42;
public const float MedIntegrity = 28;
public const float HeavyIntegrity = 17.5f;
public const float CritIntegrity = 7;
public const float IntegrityAffixPart = 7;

/// <summary>
/// Whether this body part is enabled or not.
Expand Down
29 changes: 20 additions & 9 deletions Content.Shared/Body/Systems/SharedBodySystem.Body.cs
Original file line number Diff line number Diff line change
Expand Up @@ -141,20 +141,21 @@ private void OnStandAttempt(Entity<BodyComponent> ent, ref StandAttemptEvent arg

private void OnDamageChanged(Entity<BodyComponent> ent, ref DamageChangedEvent args)
{
if (!_gameTiming.IsFirstTimePredicted)
return;

DebugTools.Assert(ent.Comp is not null);
if (args.PartMultiplier == 0
|| ent.Comp is null
|| args.TargetPart is null
|| args.DamageDelta is null
|| !args.DamageIncreased
&& !args.DamageDecreased)
|| args is { DamageIncreased: false, DamageDecreased: false })
return;

var (targetType, targetSymmetry) = ConvertTargetBodyPart(args.TargetPart.Value);
Logger.Debug($"Applying damage to {ToPrettyString(ent)} with {ent.Comp} and {args} {targetType} {targetSymmetry}");
Log.Debug($"Applying damage to {ToPrettyString(ent)} with {ent.Comp} and {args} {targetType} {targetSymmetry}");
foreach (var part in GetBodyChildrenOfType(ent, targetType, ent.Comp)
.Where(part => part.Component.Symmetry == targetSymmetry))
{
if (_gameTiming.IsFirstTimePredicted)
ApplyPartDamage(part, args.DamageDelta, targetType, args.TargetPart.Value, args.CanSever, args.PartMultiplier);
}
}
Expand Down Expand Up @@ -380,18 +381,28 @@ public virtual HashSet<EntityUid> GibPart(
{
var gibs = new HashSet<EntityUid>();

_gibbingSystem.TryGibEntityWithRef(partId, partId, GibType.Gib, GibContentsOption.Drop, ref gibs,
playAudio: true, launchGibs: true, launchDirection: splatDirection, launchImpulse: GibletLaunchImpulse * splatModifier,
launchImpulseVariance: GibletLaunchImpulseVariance, launchCone: splatCone);
_gibbingSystem.TryGibEntityWithRef(
partId,
partId,
GibType.Gib,
GibContentsOption.Drop,
ref gibs,
playAudio: true,
launchGibs: true,
launchDirection: splatDirection,
launchImpulse: GibletLaunchImpulse * splatModifier,
launchImpulseVariance: GibletLaunchImpulseVariance,
launchCone: splatCone);

if (TryComp<InventoryComponent>(partId, out var inventory))
{
foreach (var item in _inventory.GetHandOrInventoryEntities(partId))
foreach (var item in _inventory.GetHandOrInventoryEntities((partId, null, inventory)))
{
SharedTransform.AttachToGridOrMap(item);
gibs.Add(item);
}
}

_audioSystem.PlayPredicted(gibSoundOverride, Transform(partId).Coordinates, null);
return gibs;
}
Expand Down

0 comments on commit e92f013

Please sign in to comment.