Skip to content

Conversation

@reznok
Copy link
Owner

@reznok reznok commented Feb 24, 2025

Todo: Figure out what actually all got added... it's a lot

  • Server Auth Effects/Events
  • QueuedOperations
  • A ton of bug fixing
  • More

petegilb and others added 30 commits June 17, 2024 12:10
Merge pull request #82 from reznok/dev
* Ensure Unbound attributes are replicated properly at startup.

* Additional guards on unbinding filtered tag delegates for gameplay element mapping.

* Ensure Unbound attributes are replicated properly at startup.

* Ensure the garbage check on gameplay element maps works in 5.3 and earlier.
* Ensure Unbound attributes are replicated properly at startup.

* virtualize lifecycle function so that AbilityEffect can be subclassed

* remove extra whitespace

---------

Co-authored-by: Rachel Blackman <[email protected]>
Co-authored-by: utf8 <[email protected]>
* Add UPROPERTY Categories to allow compilation as engine plugin.

* Adding Method CancelAbility, allowing ending an ability without triggering EndAbilityEvent.
Internally, FinishEndAbility Method as also been added and ensure logics (see GAS termination of an ability)

* Moving Activation tag requirement check before instantiation of the ability.

* Added Activity Blocked by ActiveAbility

* Fixing crash in HandleTaskHeartBeat.

* Change behavior for attribute ChangeCallback

- Callback OnAttributeChanged is now also called on SP/AP
- Callback is now also called when the value is affected outside for whatever reason (like by SetAttributeValueByTag)
- Support Replay
- SetAttributeValueByTag now also re-caculate the value.

Signed-off-by: Eric Rajot <[email protected]>

* BL-279 Clean before merge
- Removed Log message
- Removed irrelevant bounding

Signed-off-by: Eric Rajot <[email protected]>

* BL-279 Bug fixing and improvement for rep notify

* BL-279 Fixing Attribute notification

* BL-279 Adding Byte data type to Set Target for DW GMC Ability

* Improvement for tags, added duration

* BL-232 Progress

* BL-232 Initial work on External Effect/Ability Pending and Tag application

* BL-232 Working state.

* BL-232 Refactor and cleaning, handled now by Instanced Struct

* BL-232 Progress of the day

* Fixing a bug in remove effect.

They are now removing by specifique ID when outer removed, to ensure the list rest coherent client <-> server

* BL-232 Fixing removing effect

* BL-232 bug fixing in effect

* Bug fixing, adding accessor

* BL-232 Fix effect remove itself even is another instance is running

* Added getter

* Stability
- Fixed name space for SetTargetDataFloat,
- Fixed EEffectType of GMCAbilityEffect sharing same name than playfab
- Fixed wait for input key release with suggestion of Nas
- GetAbilityMapData now return a const ref.

For compability, you probably want to add to core redirect those lines :
```
+EnumRedirects=(OldName="/Script/GMCAbilitySystem.EEffectType",NewName="/Script/GMCAbilitySystem.EGMASEffectType")
+EnumRedirects=(OldName="/Script/GMCAbilitySystem.EEffectState",NewName="/Script/GMCAbilitySystem.EGMASEffectState")
```

* Adding possibility for effect to end an active ability

* Changing Ability Blocking way.

They are now internally stored. An Ability store itself what ability it will block, instead of other ability who will block him.

This allow to modify during execution this behavior.
For example, you may be want to stop an ability activation only during X time in your ability execution.

* Adding a nicer way to end ability

* BL-225 Grenade 100%

* Fix clang error

* Adding Attribute Dynamic Condition to effect.

* Fix crash when an active effect has been destroyed

* Module upload

* GMC Update

* Addition of levitation actor

* Crash fix

* GMC Fix for starting abilities,
Fix for stamina,
Fix for crash,
Adding speed for orb,
Adding plugin for metahuman hairs.

* Update for log

* Fix for GetActiveEffect ?

* Typo fix

* couple of misc fixes from rebasing deep worlds fork

---------

Signed-off-by: Eric Rajot <[email protected]>
Co-authored-by: Eric Rajot <[email protected]>
fix: Remove super call for SetTargetDataGameplayTag
Same patch that went into main #96
* Beginnings of general queue implementation

* Further work on bound queues.

* Convert abilities over to using the new bound operations queue.

* Refactor to generalize ability queue processing

* Convert effects to bound queue

* Refactor and cleanup

* A little more refactoring

* Support server-auth effects queued via GMC moves.

Note that this requires adding an SV_PreRemoteMoveExecution to your movement component, and calling into GMAS's PreRemoteMove call in that.

* Ensure that Queue-via-GMC effects work in standalone as well.

* Queue rework and cleanup finished!

* Last few tweaks to the queue setup.

* Further queue refactor and cleanup.

New queue types (ClientAuth, PredictedQueued) added.

* Add effect handles, so that PredictedQueued works right.

* Small cleanup on effect handle expiry.

* Correct desync for server-auth queue.

* Ensure we don't use the same ID if queuing two server-auth things in the same frame.

* Fix for Reznok's two-effects-in-one-frame issue.

* Correct issue with 2+ PredictedQueued operations in one tick, or 3+ ServerAuth queued.

* Fix off-by-one on server auth effect tick

* Fix a task ticking bug when multiple tasks happened in a row

* Fix:Add SourceComponent references to effect applications

* Add a bool to EffectData to preserve multiple instances of granted tags

---------

Co-authored-by: Rachel Blackman <[email protected]>
Co-authored-by: Rachel Blackman <[email protected]>
* Add UPROPERTY Categories to allow compilation as engine plugin.

* Adding Method CancelAbility, allowing ending an ability without triggering EndAbilityEvent.
Internally, FinishEndAbility Method as also been added and ensure logics (see GAS termination of an ability)

* Moving Activation tag requirement check before instantiation of the ability.

* Added pre-check function for ability, allowing to have some basic test and allow to cancel an ability if they fail,
Overridable in C++ or in Blueprint.

* Adding Precheck and Cancelling by tag

- Adding PreCheck function allowing to test logic on the start of an ability
- Adding Cancelling ability by tag.

* Added Activity Blocked by ActiveAbility

* Fixing crash in HandleTaskHeartBeat.

* Change behavior for attribute ChangeCallback

- Callback OnAttributeChanged is now also called on SP
- Callback is now also called when the value is affected outside for whatever reason (like by SetAttributeValueByTag)
- Support Replay
- SetAttributeValueByTag now also re-caculate the value.

Signed-off-by: Eric Rajot <[email protected]>

* Change behavior for attribute ChangeCallback

- Callback OnAttributeChanged is now also called on SP/AP
- Callback is now also called when the value is affected outside for whatever reason (like by SetAttributeValueByTag)
- Support Replay
- SetAttributeValueByTag now also re-caculate the value.

Signed-off-by: Eric Rajot <[email protected]>

* BL-279 Clean before merge
- Removed Log message
- Removed irrelevant bounding

Signed-off-by: Eric Rajot <[email protected]>

* BL-279 Bug fixing and improvement for rep notify

* BL-279 Fixing Attribute notification

* BL-279 Adding Byte data type to Set Target for DW GMC Ability

* Improvement for tags, added duration

* BL-232 Progress

* BL-232 Initial work on External Effect/Ability Pending and Tag application

* BL-232 Working state.

* BL-232 Refactor and cleaning, handled now by Instanced Struct

* BL-232 Progress of the day

* Fixing a bug in remove effect.

They are now removing by specifique ID when outer removed, to ensure the list rest coherent client <-> server

* BL-232 Fixing removing effect

* BL-232 bug fixing in effect

* Bug fixing, adding accessor

* BL-232 Fix effect remove itself even is another instance is running

* Added getter

* Fixed name space for SetTargetDataFloat, Fixed EEffectType of GMCAbilityEffect sharing same name than playfab, Fixed wait for input key release with suggestion of Nas

* Stability
- Fixed name space for SetTargetDataFloat,
- Fixed EEffectType of GMCAbilityEffect sharing same name than playfab
- Fixed wait for input key release with suggestion of Nas
- GetAbilityMapData now return a const ref.

For compability, you probably want to add to core redirect those lines :
```
+EnumRedirects=(OldName="/Script/GMCAbilitySystem.EEffectType",NewName="/Script/GMCAbilitySystem.EGMASEffectType")
+EnumRedirects=(OldName="/Script/GMCAbilitySystem.EEffectState",NewName="/Script/GMCAbilitySystem.EGMASEffectState")
```

* Adding possibility for effect to end an active ability

* Changing Ability Blocking way.

They are now internally stored. An Ability store itself what ability it will block, instead of other ability who will block him.

This allow to modify during execution this behavior.
For example, you may be want to stop an ability activation only during X time in your ability execution.

* Adding a nicer way to end ability

* BL-225 Grenade 100%

* Fix clang error

* Adding Attribute Dynamic Condition to effect.

* Fix crash when an active effect has been destroyed

* Module upload

* GMC Update

* Addition of levitation actor

* Crash fix

* GMC Fix for starting abilities,
Fix for stamina,
Fix for crash,
Adding speed for orb,
Adding plugin for metahuman hairs.

* Update for log

* Fix for GetActiveEffect ?

* Typo fix

* Removing unecessary log

* Beginnings of general queue implementation

* Further work on bound queues.

* Convert abilities over to using the new bound operations queue.

* Refactor to generalize ability queue processing

* Convert effects to bound queue

* Refactor and cleanup

* A little more refactoring

* Support server-auth effects queued via GMC moves.

Note that this requires adding an SV_PreRemoteMoveExecution to your movement component, and calling into GMAS's PreRemoteMove call in that.

* Ensure that Queue-via-GMC effects work in standalone as well.

* Queue rework and cleanup finished!

* Last few tweaks to the queue setup.

* Further queue refactor and cleanup.

New queue types (ClientAuth, PredictedQueued) added.

* Add effect handles, so that PredictedQueued works right.

* Small cleanup on effect handle expiry.

* Correct desync for server-auth queue.

* Fix crash BL-SERVER-B

* Ensure we don't use the same ID if queuing two server-auth things in the same frame.

* Fix for Reznok's two-effects-in-one-frame issue.

* Correct issue with 2+ PredictedQueued operations in one tick, or 3+ ServerAuth queued.

* BL-453 Adding application must have tag.

* Fix for server compile

* BL-453 - Fixing AbilityData unset from ability instanciation

* Add Todo.

* - Allowing Predicted effect in Ancilary tick.

* [TO TEST] Moving tick of Actives Effect from Ancilarity to Predicted. Should fix the chain rollback with attribute

* Fixing Crash

* Re-added BL-453 Commit : fix for AbilitytData input activation tag missing from ability instanciation

* Fixing crash in ability task data

* Added EnsureMsfgIf to easier catch miss effect for users. TODO: Add effect tag.

* BL-527 : Fixing nested tag removal in active tag.
Issue reported as #98 in Reznok branch (#98)

--------------------------------------------

Issue was GetActiveEffectByTag() was looking also for depth in tag hierarchy. Fixed by adding an optional argument (bMatchExact), this argument has been set by default to true, and can mess with project who are calling this function if they are excepting in depht.

Not ideal for retrocompability, but i prefere to enforce a good practice over the time.

---------

Signed-off-by: Eric Rajot <[email protected]>
Co-authored-by: Younes Meziane <[email protected]>
Co-authored-by: Rachel Blackman <[email protected]>
Co-authored-by: Rachel Blackman <[email protected]>
* Display selected actor's GMAS data in debugger

* Add methods to add/remove starting effects
Server Auth Events! They're like server auth effects, but for events!


* fix: merge conflict goofs

* Remove unnecessary header includes

* Keep StructUtils depdendency for older version support
e.g :
Before -> Ability.Item as blocked tag would not block Ability.Item.Use, Ability.Item.Consume but only Ability.Item
Now -> Ability.Item as blocked tag would block Ability.Item.Use, Ability.Item.Consume and Ability.Item
Aherys and others added 30 commits February 28, 2025 09:13
Check Application Must/Must Not have tags for Effects
* Add UPROPERTY Categories to allow compilation as engine plugin.

* Adding Method CancelAbility, allowing ending an ability without triggering EndAbilityEvent.
Internally, FinishEndAbility Method as also been added and ensure logics (see GAS termination of an ability)

* Moving Activation tag requirement check before instantiation of the ability.

* Added Activity Blocked by ActiveAbility

* Fixing crash in HandleTaskHeartBeat.

* Change behavior for attribute ChangeCallback

- Callback OnAttributeChanged is now also called on SP/AP
- Callback is now also called when the value is affected outside for whatever reason (like by SetAttributeValueByTag)
- Support Replay
- SetAttributeValueByTag now also re-caculate the value.

Signed-off-by: Eric Rajot <[email protected]>

* BL-279 Clean before merge
- Removed Log message
- Removed irrelevant bounding

Signed-off-by: Eric Rajot <[email protected]>

* BL-279 Bug fixing and improvement for rep notify

* BL-279 Fixing Attribute notification

* BL-279 Adding Byte data type to Set Target for DW GMC Ability

* Improvement for tags, added duration

* BL-232 Progress

* BL-232 Initial work on External Effect/Ability Pending and Tag application

* BL-232 Working state.

* BL-232 Refactor and cleaning, handled now by Instanced Struct

* BL-232 Progress of the day

* Fixing a bug in remove effect.

They are now removing by specifique ID when outer removed, to ensure the list rest coherent client <-> server

* BL-232 Fixing removing effect

* BL-232 bug fixing in effect

* Bug fixing, adding accessor

* BL-232 Fix effect remove itself even is another instance is running

* Added getter

* Stability
- Fixed name space for SetTargetDataFloat,
- Fixed EEffectType of GMCAbilityEffect sharing same name than playfab
- Fixed wait for input key release with suggestion of Nas
- GetAbilityMapData now return a const ref.

For compability, you probably want to add to core redirect those lines :
```
+EnumRedirects=(OldName="/Script/GMCAbilitySystem.EEffectType",NewName="/Script/GMCAbilitySystem.EGMASEffectType")
+EnumRedirects=(OldName="/Script/GMCAbilitySystem.EEffectState",NewName="/Script/GMCAbilitySystem.EGMASEffectState")
```

* Adding possibility for effect to end an active ability

* Changing Ability Blocking way.

They are now internally stored. An Ability store itself what ability it will block, instead of other ability who will block him.

This allow to modify during execution this behavior.
For example, you may be want to stop an ability activation only during X time in your ability execution.

* Adding a nicer way to end ability

* BL-225 Grenade 100%

* Fix clang error

* Adding Attribute Dynamic Condition to effect.

* Fix crash when an active effect has been destroyed

* Module upload

* GMC Update

* Addition of levitation actor

* Crash fix

* GMC Fix for starting abilities,
Fix for stamina,
Fix for crash,
Adding speed for orb,
Adding plugin for metahuman hairs.

* Update for log

* Fix for GetActiveEffect ?

* Typo fix

* couple of misc fixes from rebasing deep worlds fork

* Add SetTargetHit

* Revert "Merge remote-tracking branch 'upstream/dw_dev' into OMS_CustomTasks"

This reverts commit 1581283, reversing
changes made to 1fbe07a.

---------

Signed-off-by: Eric Rajot <[email protected]>
Co-authored-by: Eric Rajot <[email protected]>
Co-authored-by: Peter Gilbert <[email protected]>
… of Tags (nas) (#118)

* Parameterized Input Key Press Task (#117)

* - Added Parameterized Input Key Press Task

* 5/6

* Give the Key Task OnTick and Timeout pins

---------

Co-authored-by: NarsBars <[email protected]>
* Filter SmoothedListenServerPawn from checking tag and attributes on GenSimulationTick

* Fix typo where Unset tag change checks AddedTags instead of RemoveTags
* - Added Parameterized Input Key Press Task

* 5/6

* Update GMCAbilityComponent.cpp

* Update GMCAbility.cpp

* DefinitionTags

* query fixed for effects

* Update GMCAbility.cpp

unnecessary warning
* - Added Parameterized Input Key Press Task

* 5/6

* Update GMCAbilityComponent.cpp

* Update GMCAbility.cpp

* DefinitionTags

* query fixed for effects

* Update GMCAbility.cpp

unnecessary warning

* Remove Effects By Definition Query
* - Added Parameterized Input Key Press Task

* 5/6

* Update GMCAbilityComponent.cpp

* Update GMCAbility.cpp

* DefinitionTags

* query fixed for effects

* Update GMCAbility.cpp

unnecessary warning

* Remove Effects By Definition Query

* queries queries queries

queries for everything
* - Added Parameterized Input Key Press Task

* 5/6

* Update GMCAbilityComponent.cpp

* Update GMCAbility.cpp

* DefinitionTags

* query fixed for effects

* Update GMCAbility.cpp

unnecessary warning

* Remove Effects By Definition Query

* Effect Delegates

Effect Delegates

* Remove extra params
…cation (#122)

* - Added Parameterized Input Key Press Task

* 5/6

* Update GMCAbilityComponent.cpp

* Update GMCAbility.cpp

* DefinitionTags

* query fixed for effects

* Update GMCAbility.cpp

unnecessary warning

* Remove Effects By Definition Query

* Rotate Yaw Towards Direction Task + Unify categorization of Ability Tasks
* Add UPROPERTY Categories to allow compilation as engine plugin.

* Adding Method CancelAbility, allowing ending an ability without triggering EndAbilityEvent.
Internally, FinishEndAbility Method as also been added and ensure logics (see GAS termination of an ability)

* Moving Activation tag requirement check before instantiation of the ability.

* Added pre-check function for ability, allowing to have some basic test and allow to cancel an ability if they fail,
Overridable in C++ or in Blueprint.

* Adding Precheck and Cancelling by tag

- Adding PreCheck function allowing to test logic on the start of an ability
- Adding Cancelling ability by tag.

* Added Activity Blocked by ActiveAbility

* Fixing crash in HandleTaskHeartBeat.

* Change behavior for attribute ChangeCallback

- Callback OnAttributeChanged is now also called on SP
- Callback is now also called when the value is affected outside for whatever reason (like by SetAttributeValueByTag)
- Support Replay
- SetAttributeValueByTag now also re-caculate the value.

Signed-off-by: Eric Rajot <[email protected]>

* Change behavior for attribute ChangeCallback

- Callback OnAttributeChanged is now also called on SP/AP
- Callback is now also called when the value is affected outside for whatever reason (like by SetAttributeValueByTag)
- Support Replay
- SetAttributeValueByTag now also re-caculate the value.

Signed-off-by: Eric Rajot <[email protected]>

* BL-279 Clean before merge
- Removed Log message
- Removed irrelevant bounding

Signed-off-by: Eric Rajot <[email protected]>

* BL-279 Bug fixing and improvement for rep notify

* BL-279 Fixing Attribute notification

* BL-279 Adding Byte data type to Set Target for DW GMC Ability

* Improvement for tags, added duration

* BL-232 Progress

* BL-232 Initial work on External Effect/Ability Pending and Tag application

* BL-232 Working state.

* BL-232 Refactor and cleaning, handled now by Instanced Struct

* BL-232 Progress of the day

* Fixing a bug in remove effect.

They are now removing by specifique ID when outer removed, to ensure the list rest coherent client <-> server

* BL-232 Fixing removing effect

* BL-232 bug fixing in effect

* Bug fixing, adding accessor

* BL-232 Fix effect remove itself even is another instance is running

* Added getter

* Fixed name space for SetTargetDataFloat, Fixed EEffectType of GMCAbilityEffect sharing same name than playfab, Fixed wait for input key release with suggestion of Nas

* Stability
- Fixed name space for SetTargetDataFloat,
- Fixed EEffectType of GMCAbilityEffect sharing same name than playfab
- Fixed wait for input key release with suggestion of Nas
- GetAbilityMapData now return a const ref.

For compability, you probably want to add to core redirect those lines :
```
+EnumRedirects=(OldName="/Script/GMCAbilitySystem.EEffectType",NewName="/Script/GMCAbilitySystem.EGMASEffectType")
+EnumRedirects=(OldName="/Script/GMCAbilitySystem.EEffectState",NewName="/Script/GMCAbilitySystem.EGMASEffectState")
```

* Adding possibility for effect to end an active ability

* Changing Ability Blocking way.

They are now internally stored. An Ability store itself what ability it will block, instead of other ability who will block him.

This allow to modify during execution this behavior.
For example, you may be want to stop an ability activation only during X time in your ability execution.

* Adding a nicer way to end ability

* BL-225 Grenade 100%

* Fix clang error

* Adding Attribute Dynamic Condition to effect.

* Fix crash when an active effect has been destroyed

* Module upload

* GMC Update

* Addition of levitation actor

* Crash fix

* GMC Fix for starting abilities,
Fix for stamina,
Fix for crash,
Adding speed for orb,
Adding plugin for metahuman hairs.

* Update for log

* Fix for GetActiveEffect ?

* Typo fix

* Removing unecessary log

* Beginnings of general queue implementation

* Further work on bound queues.

* Convert abilities over to using the new bound operations queue.

* Refactor to generalize ability queue processing

* Convert effects to bound queue

* Refactor and cleanup

* A little more refactoring

* Support server-auth effects queued via GMC moves.

Note that this requires adding an SV_PreRemoteMoveExecution to your movement component, and calling into GMAS's PreRemoteMove call in that.

* Ensure that Queue-via-GMC effects work in standalone as well.

* Queue rework and cleanup finished!

* Last few tweaks to the queue setup.

* Further queue refactor and cleanup.

New queue types (ClientAuth, PredictedQueued) added.

* Add effect handles, so that PredictedQueued works right.

* Small cleanup on effect handle expiry.

* Correct desync for server-auth queue.

* Fix crash BL-SERVER-B

* Ensure we don't use the same ID if queuing two server-auth things in the same frame.

* Fix for Reznok's two-effects-in-one-frame issue.

* Correct issue with 2+ PredictedQueued operations in one tick, or 3+ ServerAuth queued.

* BL-453 Adding application must have tag.

* Fix for server compile

* BL-453 - Fixing AbilityData unset from ability instanciation

* Add Todo.

* - Allowing Predicted effect in Ancilary tick.

* [TO TEST] Moving tick of Actives Effect from Ancilarity to Predicted. Should fix the chain rollback with attribute

* Fixing Crash

* Re-added BL-453 Commit : fix for AbilitytData input activation tag missing from ability instanciation

* Fixing crash in ability task data

* Added EnsureMsfgIf to easier catch miss effect for users. TODO: Add effect tag.

* BL-527 : Fixing nested tag removal in active tag.
Issue reported as #98 in Reznok branch (#98)

--------------------------------------------

Issue was GetActiveEffectByTag() was looking also for depth in tag hierarchy. Fixed by adding an optional argument (bMatchExact), this argument has been set by default to true, and can mess with project who are calling this function if they are excepting in depht.

Not ideal for retrocompability, but i prefere to enforce a good practice over the time.

* Fixing issue, fix crash on revive, adding

* Add CancelAbilityOnEnd to effects, allowing to stop abilities when the effect End.

* Fixing : Ability blocked by tag doesn't respect hierarchy.

e.g :
Before -> Ability.Item as blocked tag would not block Ability.Item.Use, Ability.Item.Consume but only Ability.Item
Now -> Ability.Item as blocked tag would block Ability.Item.Use, Ability.Item.Consume and Ability.Item

* Adding short wrapper of out ability effect, for c++ convenience.

* Adding Remove ability by tag

* Unreachable attempt to catch. Try to understand why, how, etc etc.

* Adding Starting effect and Ending effect event for blueprint.

* Virtualised Start Effect.

* Fixing bad class accessibility

* Fix log spamming (thank me later blue)

* Add better debug message for miss queue prediction of an effect (now display the list of concerned effect)

* Display selected actor's GMAS data in debugger (#103)

* Display selected actor's GMAS data in debugger

* Add methods to add/remove starting effects

* Server auth events 5.5 (#104)

Server Auth Events! They're like server auth effects, but for events!


* fix: merge conflict goofs

* Remove unnecessary header includes

* Keep StructUtils depdendency for older version support

* Fixing missing category specifier.

* Fixing version compability with 5.4 and 5.5 for instanced struct

* - Fix for linux compile on GMC

* Fixing crash in GMC Acknowledgments.

* Fixing crash in GetAllAttributes.
---

We taking copy of bound and unbound attribute struct, but for that we was using a for loop, storing the reference of the for ranged based iterator, instead of the element itself, resulting in UB once the stack was clear. The auto-inlined by the MVSC hidded the issue (i guess ?).

* - Added timeout event on task to allow user to react to it
- Cleanup code for engine and linux compilation

* ** Input Handling Update **
- `ETriggerEvent`: Changed trigger event from `Started` to `Completed` for `AbilityInputAction` binding.
- Input magnitude check: Adjusted condition to correctly detect magnitude with `!ActionValue.GetMagnitude()`.

Signed-off-by: Aherys <[email protected]>

* **Added**
- `KismetSystemLibrary` include in `WaitForInputKeyPress.cpp` for expanded functionality.

**Updated**
- Changed input trigger event from `ETriggerEvent::Completed` to `ETriggerEvent::Started` in `WaitForInputKeyPress` task for immediate keypress detection.

Signed-off-by: Aherys <[email protected]>

* - `Rename` method `CancelAbilities` to `CancelConflictingAbilities` for clarity.
- `Enhance` documentation for `CancelConflictingAbilities` to explain its functionality, including tag-based and query-based cancellation checks.

Signed-off-by: Aherys <[email protected]>

* **GMCAbilityComponent**
- `QueueAbility`: Added `bPreventConcurrentActivation` parameter to prevent concurrent activation of the same ability.
- Implemented local checks in `QueueAbility` to reduce server load and handle ability concurrency locally.
- Updated comments and function documentation for enhanced clarity.

Signed-off-by: Aherys <[email protected]>

* **Code Cleanup**
- `GMCAbilityComponent.cpp`: Removed trailing whitespace to improve code formatting.

Signed-off-by: Aherys <[email protected]>

* **Refactored Attribute Processing System**
- Introduced `ProcessPendingModifiers` and `AddModifier` functions for centralized modifier handling in `GMCAttributes`.
- Removed redundant modifier fields (`AdditiveModifier`, `MultiplyModifier`, `DivisionModifier`) in `GMCAttributes`.
- Added `ProcessAttributes` and `PurgeModifierHistory` to `GMCAbilityComponent` for improved attribute management.
- Reworked `ApplyAbilityEffectModifier` to use streamlined attribute processing.
- Introduced attribute-related unit tests (`FAttributeUnitTest.cpp`) for validating modifier application logic.
- Updated `GMCAbilitySystem.Build.cs` to add automation dependencies for testing.

** Attribute Refactor**
- Attribute over time work now based on delta time, each tick, instead of period.
- Attribute will now respect network prediction
- Modifier have now different priority (The phase, The priority and the Operator define the order), they can be set by the user at will.
- Order of Modifier operation is now deterministic
- List of Modifier for attribute :
 - Percent (Percent of the Actual value)
 - Addition (Addition of the current value)
 - Set To base (Reset the value to the base)
 - Percent On Base Value (Apply a percentage from base value to the current value)
 - Set to Value (Direct set to a value)
- Overflow of clamp is now properly handled, including for the replay, and negate at end.
- You can now set a modifier to have as value an attribute instead of a value Usefull for cross operations between attribute.
- Todo : Ability to set dynamically by the code the base value of an attribute at initialisation
- Todo : link back with effect system and event.

* **Refactored Modifier History System**
- Introduced `FModifierHistory` for cleaner separation of bound and unbound modifiers.
- Implemented `AddMoveHistory`, `CleanMoveHistory`, and `ExtractFromMoveHistory` methods for better modifier handling.
- Updated `ProcessPendingModifiers` to directly work with the new history structure.
- Replaced `PurgeModifierHistory` and obsolete functionality in `GMCAbilityComponent`.
- Enhanced test suite in `FAttributeUnitTest.cpp` to validate new modifier operations and interactions.
- Improved code maintainability and fixed edge cases related to modifier history management.
- Large Optimisation of the memory used by AttributeHistory (0.75mb -> 0.33mb on 50k test).
- Large Optimisation of performances for move history
- Split bound and unbound queue for attribute history, added the concept of agglomeration for attribute of the same action timer
- Writing more than 100 units test to ensure attribute constitancy.

* **Refactored Attribute Modifier System**
- Updated `ProcessPendingModifiers` to return a boolean indicating attribute modification status.
- Added logic to broadcast changes for unbound attributes when modified.
- Improved `AttributeDynamicCondition` handling in `PeriodTick` for conditional modifier application.
- Removed unused/obsolete code for cleaner implementation.

* Fixing typo in comment

* **Introduced Custom Modifier System**
- Added `UGMCAttributeModifierCustom_Base` class for modular and extensible attribute calculations.
- Implemented `UGMCModifierCustom_Exponent` with four exponent calculation types (`Mapping`, `Easing`, `Custom Power`, `Saturated`).
- Updated `ProcessPendingModifiers` to support custom modifier logic via `CustomModifierClass`.
- Enhanced `UGMCAbilityEffect` with `ProcessCustomModifier` function and caching for custom modifier instances.
- Improved input validation and error logging for attribute modifiers.
- Updated `GMCAttributes` to handle conditional and dynamic calculators efficiently.

* **Refactored Effect Application and State Management**
- Adjusted `HeartbeatMaxInterval` to 1.5f for improved network resilience.
- Introduced `EGMCEffectAnswerState` enum to handle effect prediction and confirmation states (`Pending`, `Timeout`, `Validated`).
- Enhanced effect lifecycle management with `DeclareEffect` and auto-removal logic during ability end.
- Improved effect application logic, including new `ApplyAbilityEffectSafe` and `ApplyAbilityEffectShort` overloads for optional handling ability.
- Added `GetActiveEffectByHandle` and `RemoveActiveAbilityEffectByHandle` methods to enhance effect access and removal.
- Updated effect logging and validation for better debugging and readability.

* **Enhanced Debugger and Metadata Usage, Attribute Refactor Improvements**
- Added detailed client-server consistency checks and metadata enhancements to gameplay debugger categories.
- Enhanced metadata (`TitleProperty`, `AdvancedDisplay`, `EditCondition`, `DisplayAfter`) for attributes, effects, and abilities for better editor usability.
- Improved string formatting for `ToString` methods across abilities, attributes, and effects for cleaner debug logs.
- Addressed `GMCAbilityEffect` property state coherence and added validation logic in `PostEditChangeProperty`.
- Updated numerical metadata representation in attribute clamp and ability map for enhanced clarity.
- Optimized memory usage and performance in modifier history and active effect systems.
- Enhanced debugger display to show numerical summaries for attributes, effects, and abilities.

* - new attribute system
- gunflare fix
- multiple helicopter extraction

Signed-off-by: Aherys <[email protected]>

* Remove FORCEINLINE from AddModifier in GMCAttributes.h

Signed-off-by: Aherys <[email protected]>

* Remove unused ToolMenusEditor include from GMCAttributes.cpp

Signed-off-by: Aherys <[email protected]>

* - Changing the way attribute operations work with an accumulative stack, and a temporal modifier history.
- BaseValue has been renamed InitialValue
- Stack has been renamed RawValue
- Value now refere as RawValue + Sum of TemporalModifier
- Multiple operator has been added Add, AddPercentageBaseValue, AddPercentageAttribute, AddPercentageMaxClamp, AddPercentageMinClamp, AddPercentageAttributeSum, AddScaledBetween, AddClampedBetween, AddPercentageMissing.
- BlockedByOtherAbility has been added to ability to allow to define from an ability, what it block outside.
- GetAttributeRawValueByTag has been added.
- You can now define attribute initial value at initialisation of the attribute (blueprint or c++).
- Improved debugger with detection of incoherency on application, and better value/clarity
- Improved QoL for creation of effect/attributes.
- Better readibility for attribute map, and ability map.

* - Fixed Periodic effect, they now work properly with replay and negate.

* Fixing Effect type not available in blueprint.

* fix: enhance error logging for unknown modifier types in FAttribute

* feat: add new modifier type "AddPercentageOfAttributeRawValue"

- Introduced support for the new modifier type `AddPercentageOfAttributeRawValue` in `GMCAttributeModifier`.
- Updated logic to handle raw attribute values without temporal modifiers.
- Improved metadata validation and configuration for added modifier type.

* refactor: optimize active ability effect removal logic

- Replaced iteration with `FilterByPredicate` to extract effects for removal in `GMCAbilityComponent`.
- Improved code readability and performance by separating filtered effects before processing.
- Simplified logic for removing predicted effects during movement or ancillary ticks.

* refactor: simplify active effect removal logic in GMCAbilityComponent

- Replaced `FilterByPredicate` with an explicit loop and conditional checks for clarity.
- Improved readability and maintainability by iterating over `Ids` directly to collect effects for removal.

* Higher task heartbeat value.

---------

Signed-off-by: Eric Rajot <[email protected]>
Signed-off-by: Aherys <[email protected]>
Co-authored-by: Eric Rajot <[email protected]>
Co-authored-by: Younes Meziane <[email protected]>
Co-authored-by: Rachel Blackman <[email protected]>
Co-authored-by: Rachel Blackman <[email protected]>
Co-authored-by: Bean's Beans Studios <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.