Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Port/Tweak] Eshield / Е-Щит #94

Merged
merged 4 commits into from
Oct 23, 2024
Merged

[Port/Tweak] Eshield / Е-Щит #94

merged 4 commits into from
Oct 23, 2024

Conversation

Spatison
Copy link
Member

Описание PR

Порт и рефактор изменений энерго щита от авиу.


Изменения

🆑 Spatison

  • tweak: The energy shield can now be discharged / Энерго щит теперь имеет заряд

@Spatison Spatison requested a review from Remuchi October 21, 2024 16:59
@Spatison Spatison self-assigned this Oct 21, 2024
Copy link
Contributor

coderabbitai bot commented Oct 21, 2024

Walkthrough

The pull request introduces several modifications across multiple systems, primarily focusing on battery and weapon management. Key changes include the addition of the TryGetBatteryComponent method in the BatterySystem, updates to the PowerCellSystem for improved error handling, and enhancements to the GunSystem for better shooting mechanics. A new RechargeableBlockingComponent and its corresponding system are introduced, along with localization updates for user feedback. Additionally, adjustments to item costs and properties in the catalog are made, enhancing gameplay dynamics.

Changes

File Path Change Summary
Content.Server/Power/EntitySystems/BatterySystem.cs Added method TryGetBatteryComponent for retrieving battery components from entities.
Content.Server/PowerCell/PowerCellSystem.cs Changed OnBatteryExamined from private to public and updated its internal logic for component resolution.
Content.Server/Weapons/Ranged/Systems/GunSystem.cs Updated Shoot method logic and added a parameter to HitScanReflectAttemptEvent for damage processing.
Content.Server/_White/Blocking/RechargeableBlockingComponent.cs Introduced RechargeableBlockingComponent with fields for recharge delay and discharge state.
Content.Server/_White/Blocking/RechargeableBlockingSystem.cs Added RechargeableBlockingSystem with methods for managing rechargeable blocking components.
Content.Shared/Weapons/Ranged/Events/HitScanReflectAttempt.cs Modified HitScanReflectAttemptEvent to include an optional DamageSpecifier parameter.
Content.Shared/Weapons/Reflect/ReflectComponent.cs Added DamageOnReflectModifier property to ReflectComponent.
Content.Shared/Weapons/Reflect/ReflectSystem.cs Enhanced damage handling during reflections with new dependency and method parameter updates.
Content.Shared/_White/CVars.cs Introduced LogInChat configuration variable in WhiteCVars.
Resources/Locale/en-US/_white/rechargeable-blocking/rechargeable-blocking.ftl Added localization strings for discharged status and remaining charge time.
Resources/Locale/ru-RU/_white/rechargeable-blocking/rechargeable-blocking.ftl Added Russian localization strings for discharged status and remaining charge time.
Resources/Prototypes/Catalog/uplink_catalog.yml Adjusted costs, conditions, and sale limits for various items in the catalog.
Resources/Prototypes/Entities/Objects/Shields/shields.yml Added new shield entities and updated existing ones with new components and properties.

Possibly related PRs

Suggested labels

Changes: C#, Changes: YML, Status: Needs Review

Suggested reviewers

  • Remuchi

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

This pull request has conflicts, please resolve those before we can evaluate the pull request.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 8

🧹 Outside diff range and nitpick comments (12)
Resources/Locale/en-US/_white/rechargeable-blocking/rechargeable-blocking.ftl (1)

2-2: LGTM with a minor suggestion for improvement.

The localization entry for the remaining charge time is well-structured and uses appropriate color formatting. However, consider externalizing the word "seconds" to improve localization flexibility.

Consider updating the entry to use a placeholder for the time unit:

-rechargeable-blocking-remaining-time = Time left to charge: [color=green]{ $remainingTime }[/color] seconds.
+rechargeable-blocking-remaining-time = Time left to charge: [color=green]{ $remainingTime }[/color] { $timeUnit }.

This change would allow for easier localization and potential future support for different time units.

Resources/Locale/ru-RU/_white/rechargeable-blocking/rechargeable-blocking.ftl (1)

2-2: LGTM with a minor suggestion for clarity.

The localization string for the remaining charging time is well-structured and effectively uses color formatting to highlight the important information. The translation appears accurate and consistent with the English version.

Consider adding the word "оставшихся" (remaining) before "секунд" for improved clarity:

-rechargeable-blocking-remaining-time = Осталось времени для зарядки: [color=green]{ $remainingTime }[/color] секунд.
+rechargeable-blocking-remaining-time = Осталось времени для зарядки: [color=green]{ $remainingTime }[/color] оставшихся секунд.

This change would make the sentence more grammatically correct and clearer in Russian.

Content.Shared/Weapons/Ranged/Events/HitScanReflectAttempt.cs (1)

12-13: LGTM: Added Damage parameter to HitScanReflectAttemptEvent

The addition of the DamageSpecifier? Damage parameter to the HitScanReflectAttemptEvent record struct is a good improvement. It allows for including damage information in the event, which can be useful for more detailed hit scan reflection handling.

Consider adding a brief XML documentation comment for the new Damage parameter to improve code clarity:

/// <param name="Damage">Optional damage specification for the hit scan.</param>
Content.Shared/_White/CVars.cs (1)

Line range hint 43-48: LGTM! Consider adding a brief comment for clarity.

The addition of the LogInChat CVar is well-structured and follows the existing patterns in the file. The flags used (CLIENT, ARCHIVE, REPLICATED) are appropriate for a client-side setting that can be saved and updated by the server.

Consider adding a brief comment explaining the purpose of this CVar, for example:

/// <summary>
/// Determines whether chat-related actions should be logged.
/// </summary>
public static readonly CVarDef<bool> LogInChat =
    CVarDef.Create("white.log_in_chat", true, CVar.CLIENT | CVar.ARCHIVE | CVar.REPLICATED);

This would improve code documentation and make it easier for other developers to understand the CVar's purpose.

Content.Server/PowerCell/PowerCellSystem.cs (1)

Line range hint 234-243: LGTM! Consider adding XML documentation.

The changes to OnBatteryExamined look good. Making it public allows for more flexibility, which aligns with the PR objectives. The use of Resolve is consistent with the codebase style.

Consider adding XML documentation to the method, especially since it's now public:

/// <summary>
/// Examines the battery component and adds charge information to the examination text.
/// </summary>
/// <param name="uid">The entity UID.</param>
/// <param name="component">The battery component, if any.</param>
/// <param name="args">The examination event arguments.</param>
public void OnBatteryExamined(EntityUid uid, BatteryComponent? component, ExaminedEvent args)
Content.Server/Power/EntitySystems/BatterySystem.cs (2)

9-9: LGTM! Consider removing the comment.

The addition of the SharedContainerSystem dependency is correct and necessary for the new functionality. The using statement is appropriately added.

Consider removing the "// WD EDIT" comment as it's not necessary and may clutter the code.

Also applies to: 17-18


205-231: LGTM! Consider some minor improvements.

The TryGetBatteryComponent method is well-implemented and aligns with the PR objectives. It correctly handles both direct entity components and contained batteries.

  1. Consider removing the "// WD EDIT START" and "// WD EDIT END" comments.
  2. For better readability, you could simplify the null check on line 225:
    return batteryUid != null && TryComp(batteryUid, out battery);
  3. Consider adding XML documentation comments to describe the method's purpose and parameters.
Resources/Prototypes/Entities/Objects/Shields/shields.yml (3)

368-378: Excellent enhancements to the EnergyShield entity!

The changes significantly improve the functionality and realism of the energy shield. The addition of a battery system with self-recharging capability, along with the rechargeable blocking mechanism, adds depth to the gameplay. The adjustments to light and reflection properties also enhance the shield's visual and functional aspects.

Consider adding a comment explaining the predictable: false setting in the ItemToggle component, as it might affect client-side behavior in multiplayer scenarios.

Also applies to: 414-415, 418-419, 443-452


Line range hint 1-1000: Balanced adjustments to various shield entities

The minor changes to several shield entities (WoodenBuckler, MakeshiftShield, MirrorShield, and TelescopicShield) appear to be part of a broader balancing effort. These adjustments to damage thresholds, destruction behaviors, and blocking modifiers help maintain game balance while differentiating the shields' characteristics.

Consider adding a comment in the file or updating the documentation to explain the reasoning behind these balancing changes. This would be helpful for future maintenance and understanding of the game's design decisions.


Line range hint 1-1000: Overall improvement to shield mechanics and game balance

The changes in this file significantly enhance the shield mechanics, particularly with the introduction of the rechargeable energy shield system. The balancing adjustments to various shield types contribute to a more diverse and engaging gameplay experience. These modifications align well with the PR objectives of porting and refactoring the energy shield changes from the Aviu project.

Consider creating a separate configuration file for shield balance parameters. This would make it easier to fine-tune game balance in the future without modifying entity definitions directly.

Content.Server/_White/Blocking/RechargeableBlockingSystem.cs (1)

64-64: Update localization key for accurate user feedback

The localization key "stunbaton-component-low-charge" is used, which references a stun baton. Since this is the RechargeableBlockingComponent, it would be more appropriate to use a specific localization key to provide accurate and context-specific messages to the user.

Consider changing the localization string to:

-_popup.PopupEntity(Loc.GetString("stunbaton-component-low-charge"), args.User ?? uid);
+_popup.PopupEntity(Loc.GetString("rechargeable-blocking-component-low-charge"), args.User ?? uid);

And ensure that "rechargeable-blocking-component-low-charge" is defined in the localization files with the appropriate message.

Content.Shared/Weapons/Reflect/ReflectSystem.cs (1)

171-171: Update method documentation to reflect new parameter damage.

The method TryReflectHitscan now includes the DamageSpecifier? damage parameter. Ensure that any documentation or XML comments for this method are updated to include the new parameter and explain its purpose.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 9131814 and 4c8c58f.

📒 Files selected for processing (13)
  • Content.Server/Power/EntitySystems/BatterySystem.cs (3 hunks)
  • Content.Server/PowerCell/PowerCellSystem.cs (1 hunks)
  • Content.Server/Weapons/Ranged/Systems/GunSystem.cs (1 hunks)
  • Content.Server/_White/Blocking/RechargeableBlockingComponent.cs (1 hunks)
  • Content.Server/_White/Blocking/RechargeableBlockingSystem.cs (1 hunks)
  • Content.Shared/Weapons/Ranged/Events/HitScanReflectAttempt.cs (2 hunks)
  • Content.Shared/Weapons/Reflect/ReflectComponent.cs (1 hunks)
  • Content.Shared/Weapons/Reflect/ReflectSystem.cs (7 hunks)
  • Content.Shared/_White/CVars.cs (1 hunks)
  • Resources/Locale/en-US/_white/rechargeable-blocking/rechargeable-blocking.ftl (1 hunks)
  • Resources/Locale/ru-RU/_white/rechargeable-blocking/rechargeable-blocking.ftl (1 hunks)
  • Resources/Prototypes/Catalog/uplink_catalog.yml (1 hunks)
  • Resources/Prototypes/Entities/Objects/Shields/shields.yml (3 hunks)
🧰 Additional context used
🔇 Additional comments (19)
Resources/Locale/en-US/_white/rechargeable-blocking/rechargeable-blocking.ftl (1)

1-1: LGTM: Clear and well-formatted localization entry.

The localization entry for the discharged state is concise and uses appropriate color formatting for emphasis.

Resources/Locale/ru-RU/_white/rechargeable-blocking/rechargeable-blocking.ftl (1)

1-1: LGTM: Clear and well-formatted localization string.

The localization string for the discharged state is concise, clear, and effectively uses color formatting to emphasize the important information. The translation appears accurate and consistent with the English version.

Content.Server/_White/Blocking/RechargeableBlockingComponent.cs (2)

1-3: LGTM: Namespace and component registration are correct.

The namespace Content.Server._White.Blocking is well-structured, and the [RegisterComponent] attribute is correctly used to register the component in the game's component system.


4-5: LGTM: Component class definition is well-structured.

The RechargeableBlockingComponent class is correctly defined as a public sealed partial class inheriting from Component. This structure provides good performance, encapsulation, and flexibility for code organization.

Content.Shared/Weapons/Ranged/Events/HitScanReflectAttempt.cs (2)

2-2: LGTM: Import added for DamageSpecifier

The added import for Content.Shared.Damage is necessary and consistent with the changes made to the HitScanReflectAttemptEvent record struct.


Line range hint 1-13: Summary: Enhanced HitScanReflectAttemptEvent with damage information

The changes to this file improve the HitScanReflectAttemptEvent by adding the capability to include damage information. This enhancement aligns well with the PR objectives of porting and refactoring energy shield changes. The modification maintains backward compatibility and provides more flexibility in handling hit scan reflections.

These changes, combined with the updates to the GunSystem mentioned in the AI summary, should allow for more sophisticated interactions between weapons, shields, and damage systems.

Content.Shared/Weapons/Reflect/ReflectComponent.cs (1)

35-39: 🛠️ Refactor suggestion

Enhance documentation and initialization for the new DamageOnReflectModifier field.

While the addition of this field aligns with the PR objectives for tweaking the energy shield, there are a few suggestions to improve its implementation:

  1. Add XML documentation to clarify the purpose, usage, and any constraints of this modifier. This will help other developers understand how to use it correctly.

  2. Consider initializing the field with a default value (e.g., 1.0f for no modification) to prevent potential issues if it's not set explicitly.

  3. The field name could be more specific. Consider a name like ReflectedDamageModifier or DamageModifierOnReflect to more clearly indicate its purpose.

Here's a suggested implementation incorporating these changes:

/// <summary>
/// Modifies the damage of reflected projectiles or hitscan attacks.
/// A value of 1.0 means no change, less than 1.0 reduces damage, greater than 1.0 increases damage.
/// </summary>
[DataField, AutoNetworkedField]
public float ReflectedDamageModifier = 1.0f;

To ensure this change doesn't conflict with existing logic, let's check for any current usage:

✅ Verification successful

Verified the usage of DamageOnReflectModifier and recommend initializing it with a default value.

The DamageOnReflectModifier is actively used in ReflectSystem.cs to adjust damage values. Currently, it lacks a default initialization, which defaults to 0.0f and may unintentionally negate damage if not explicitly set.

  1. Initialize with a Default Value: Set DamageOnReflectModifier to 1.0f to ensure no damage alteration by default.
  2. Enhance Documentation: Provide XML comments to clarify its purpose and usage.
  3. Naming Consistency: Consider renaming to ReflectedDamageModifier for better clarity.
/// <summary>
/// Modifies the damage of reflected projectiles or hitscan attacks.
/// A value of 1.0 means no change, less than 1.0 reduces damage, greater than 1.0 increases damage.
/// </summary>
[DataField, AutoNetworkedField]
public float ReflectedDamageModifier = 1.0f;
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for any existing references to DamageOnReflectModifier
rg "DamageOnReflectModifier"

Length of output: 658

Content.Server/Power/EntitySystems/BatterySystem.cs (2)

120-120: LGTM! Consistent use of ref for events.

The addition of ref for ChargerUpdateStatusEvent is correct and consistent with the coding style used elsewhere in the file.


Line range hint 1-233: Overall, the changes to BatterySystem.cs are well-implemented and align with the PR objectives.

The new TryGetBatteryComponent method enhances the system's functionality, allowing for more flexible battery component retrieval. The changes are consistent with the existing codebase and improve the energy shield functionality as intended.

Consider addressing the minor suggestions in the previous comments to further improve code readability and maintainability.

Resources/Prototypes/Entities/Objects/Shields/shields.yml (2)

Line range hint 1-1000: Improved effectiveness of RiotLaserShield against heat damage

The changes to the RiotLaserShield entity enhance its performance against heat-based attacks. The reduced coefficients for both passive and active blocking, along with the addition of a flat reduction for heat damage, make this shield more specialized and effective in its intended role.


Line range hint 1-1000: Enhanced protection of RiotBulletShield against ballistic attacks

The modifications to the RiotBulletShield entity significantly improve its performance against blunt and piercing damage. The reduced coefficients for both passive and active blocking, coupled with the increased flat reduction, make this shield more effective in its specialized role of protecting against bullets and other ballistic threats.

Resources/Prototypes/Catalog/uplink_catalog.yml (2)

Line range hint 1453-1463: Cost adjustment approved.

The increase in cost for UplinkHristovAmmo from 5 to 6 Telecrystals is a minor change, likely for balance purposes.


Line range hint 1453-1463: LGTM! Consider verifying the balance impact.

The changes to the UplinkEshield listing look good. The reduced cost, added sale limit, and purchase restriction for non-NukeOps users could impact gameplay balance.

To ensure these changes don't negatively impact game balance, please run the following script:

✅ Verification successful

All changes to UplinkEshield have been verified and are consistent with existing balance adjustments.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the usage and impact of UplinkEshield in the game

# Test: Check for references to UplinkEshield in other game files
echo "Checking for UplinkEshield references:"
rg "UplinkEshield" --type yaml --type cs

# Test: Look for balance-related comments or code near UplinkEshield mentions
echo "Checking for balance-related code near UplinkEshield:"
rg -C 5 "UplinkEshield.*balance" --type yaml --type cs

# Test: Check for any NukeOpsUplink tag usage
echo "Checking for NukeOpsUplink tag usage:"
rg "NukeOpsUplink" --type yaml --type cs

Length of output: 2908


Script:

#!/bin/bash
# Description: Further verify balance implications related to UplinkEshield

# Test: Search for balance-related terms in the codebase
echo "Searching for balance-related terms in the codebase:"
rg "balance|balancing|adjust_balance|game_balance" --type yaml --type cs

# Test: Check for Telecrystal cost modifications in other listings
echo "Checking for Telecrystal cost modifications in other listings:"
rg "Telecrystal" --type yaml --type cs | rg -i "cost"

# Test: Verify if saleLimit is enforced programmatically
echo "Verifying enforcement of saleLimit for UplinkEshield:"
rg -C 5 "saleLimit: 1" --type yaml --type cs

Length of output: 35561

Content.Server/_White/Blocking/RechargeableBlockingSystem.cs (1)

82-90: ⚠️ Potential issue

Clarify charge thresholds in CheckCharge method

The logic in CheckCharge sets component.Discharged to true when battery.CurrentCharge < 1, and sets it to false when battery.CurrentCharge > component.RechargeDelay. This leaves a range where battery.CurrentCharge is between 1 and component.RechargeDelay, during which component.Discharged remains true.

Consider adjusting the logic to handle this range appropriately. If the component should be active when there is sufficient charge, you might modify the code as follows:

-if (battery.CurrentCharge < 1)
+if (battery.CurrentCharge <= 0)
 {
     component.Discharged = true;
     _itemToggle.TryDeactivate(uid, predicted: false);
 }

-if (battery.CurrentCharge > component.RechargeDelay)
+else if (battery.CurrentCharge >= component.RechargeDelay)
 {
     component.Discharged = false;
 }

This ensures that component.Discharged is set to false when the charge level is equal to or exceeds the required delay, and only set to true when the charge is depleted.

Content.Shared/Weapons/Reflect/ReflectSystem.cs (4)

128-134: Verify multiplication of DamageSpecifier by a float.

Ensure that DamageSpecifier supports multiplication by a float (reflect.DamageOnReflectModifier). If not, you may need to implement a method to scale the damage values appropriately.

Consider defining a method to multiply each damage type within DamageSpecifier by the modifier. For example:

private DamageSpecifier ScaleDamage(DamageSpecifier damage, float modifier)
{
    var scaledDamage = new DamageSpecifier();
    foreach (var (type, amount) in damage.DamageDict)
    {
        scaledDamage.DamageDict[type] = amount * modifier;
    }
    return scaledDamage;
}

Then apply the scaled damage:

 if (reflect.DamageOnReflectModifier != 0)
 {
+    if (projectileComp.Damage != null)
+    {
+        var scaledDamage = ScaleDamage(projectileComp.Damage, reflect.DamageOnReflectModifier);
        _damageable.TryChangeDamage(reflector, scaledDamage,
            projectileComp.IgnoreResistances, origin: projectileComp.Shooter);
+    }
 }

158-158: Confirm passing uid for both user and reflector is intended.

In the TryReflectHitscan method call, uid is passed for both user and reflector. Verify that this is the intended behavior and that it does not introduce any unintended side effects.


39-39: LGTM!

The addition of the DamageableSystem dependency is appropriate and necessary for applying damage within the reflect logic.


189-191: ⚠️ Potential issue

Check for null damage before applying damage to the reflector.

While there is a null check for damage, ensure that damage is not null when multiplying by reflect.DamageOnReflectModifier to prevent potential exceptions.

Also, similar to the earlier comment, verify that multiplying a DamageSpecifier by a float operates as intended.

Content.Server/Weapons/Ranged/Systems/GunSystem.cs (1)

213-213: ⚠️ Potential issue

Ensure all event handlers for HitScanReflectAttemptEvent handle the new Damage parameter

The addition of hitscan.Damage to the HitScanReflectAttemptEvent constructor means that any existing event handlers listening for this event need to be updated to accept and properly process the new Damage parameter. This is crucial to prevent runtime exceptions and ensure that damage reflection behaves as intended.

Run the following script to locate all event handlers for HitScanReflectAttemptEvent and verify they have been updated:

@Remuchi Remuchi merged commit d5d5278 into master Oct 23, 2024
10 checks passed
@Remuchi Remuchi deleted the eshield branch October 23, 2024 10:23
Spatison pushed a commit that referenced this pull request Oct 23, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants