diff --git a/Content/Input/Actions/IA_Dash.uasset b/Content/Input/Actions/IA_Dash.uasset new file mode 100644 index 0000000..804bbf6 Binary files /dev/null and b/Content/Input/Actions/IA_Dash.uasset differ diff --git a/Content/Input/IMC_Default.uasset b/Content/Input/IMC_Default.uasset index 4dddf94..9aecfd6 100644 Binary files a/Content/Input/IMC_Default.uasset and b/Content/Input/IMC_Default.uasset differ diff --git a/Content/ZMMO/Data/Abilities/DT_Abilities.uasset b/Content/ZMMO/Data/Abilities/DT_Abilities.uasset new file mode 100644 index 0000000..ebe2a46 Binary files /dev/null and b/Content/ZMMO/Data/Abilities/DT_Abilities.uasset differ diff --git a/Content/ZMMO/GAS/Abilities/BP_GA_Dash.uasset b/Content/ZMMO/GAS/Abilities/BP_GA_Dash.uasset new file mode 100644 index 0000000..ae6e91d Binary files /dev/null and b/Content/ZMMO/GAS/Abilities/BP_GA_Dash.uasset differ diff --git a/Source/ZMMO/Game/Entity/ZeusCharacter.cpp b/Source/ZMMO/Game/Entity/ZeusCharacter.cpp index 8752dd6..11943f2 100644 --- a/Source/ZMMO/Game/Entity/ZeusCharacter.cpp +++ b/Source/ZMMO/Game/Entity/ZeusCharacter.cpp @@ -17,6 +17,8 @@ #include "Subsystems/WorldSubsystem.h" #include "UObject/ConstructorHelpers.h" #include "ZMMO.h" +#include "GameplayTagContainer.h" +#include "GameplayTagsManager.h" #include "ZeusGASComponent.h" #include "ZeusPlayerState.h" #include "ZeusWorldSubsystem.h" @@ -101,11 +103,14 @@ AZeusCharacter::AZeusCharacter() TEXT("/Game/Input/Actions/IA_MouseLook.IA_MouseLook")); static ConstructorHelpers::FObjectFinder JumpActionAsset( TEXT("/Game/Input/Actions/IA_Jump.IA_Jump")); + static ConstructorHelpers::FObjectFinder DashActionAsset( + TEXT("/Game/Input/Actions/IA_Dash.IA_Dash")); if (MoveActionAsset.Succeeded()) { MoveAction = MoveActionAsset.Object; } if (LookActionAsset.Succeeded()) { LookAction = LookActionAsset.Object; } if (MouseLookActionAsset.Succeeded()) { MouseLookAction = MouseLookActionAsset.Object; } if (JumpActionAsset.Succeeded()) { JumpAction = JumpActionAsset.Object; } + if (DashActionAsset.Succeeded()) { DashAction = DashActionAsset.Object; } } void AZeusCharacter::BeginPlay() @@ -166,6 +171,11 @@ void AZeusCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputCompo EnhancedInputComponent->BindAction(LookAction, ETriggerEvent::Triggered, this, &AZeusCharacter::Look); EnhancedInputComponent->BindAction(MouseLookAction, ETriggerEvent::Triggered, this, &AZeusCharacter::Look); + + if (DashAction) + { + EnhancedInputComponent->BindAction(DashAction, ETriggerEvent::Triggered, this, &AZeusCharacter::OnDashTriggered); + } } else { @@ -203,6 +213,40 @@ void AZeusCharacter::OnJumpReleased() DoJumpEnd(); } +void AZeusCharacter::OnDashTriggered() +{ + // Resolve UZeusGASComponent do PlayerState. Component vive la' via + // AZeusPlayerState Component Registry (config-driven). Sem el, ASC ausente + // e RequestActivateAbilityByTag falha — log warning. + const APlayerState* PS = GetPlayerState(); + if (!PS) + { + UE_LOG(LogZeusPlayer, Warning, TEXT("OnDashTriggered: PlayerState nullptr — ignorado")); + return; + } + UZeusGASComponent* Comp = PS->FindComponentByClass(); + if (!Comp) + { + UE_LOG(LogZeusPlayer, Warning, TEXT("OnDashTriggered: UZeusGASComponent nao achado")); + return; + } + + // Tag canonica casa com row do DT + JSON do server. Hash FNV calculado + // dentro do componente (RequestActivateAbilityByTag). + const FGameplayTag DashTag = UGameplayTagsManager::Get().RequestGameplayTag( + FName(TEXT("Zeus.Ability.Movement.Dash"))); + if (!DashTag.IsValid()) + { + UE_LOG(LogZeusPlayer, Warning, + TEXT("OnDashTriggered: tag Zeus.Ability.Movement.Dash nao registrada no cliente")); + return; + } + + const bool bSent = Comp->RequestActivateAbilityByTag(DashTag); + UE_LOG(LogZeusPlayer, Log, TEXT("OnDashTriggered -> RequestActivateAbilityByTag = %s"), + bSent ? TEXT("OK (C_ABILITY_TRY_ACTIVATE enviado)") : TEXT("FALHOU")); +} + void AZeusCharacter::DoMove(const float Right, const float Forward) { PendingMoveRight = FMath::Clamp(Right, -1.0f, 1.0f); diff --git a/Source/ZMMO/Game/Entity/ZeusCharacter.h b/Source/ZMMO/Game/Entity/ZeusCharacter.h index 3589812..c9b5c57 100644 --- a/Source/ZMMO/Game/Entity/ZeusCharacter.h +++ b/Source/ZMMO/Game/Entity/ZeusCharacter.h @@ -62,6 +62,11 @@ protected: UPROPERTY(EditAnywhere, Category = "Input") UInputAction* MouseLookAction; + /// IA_Dash — dispara C_ABILITY_TRY_ACTIVATE pra Zeus.Ability.Movement.Dash + /// via UZeusGASComponent. Bind padrao no IMC_Default: LeftShift -> Pressed. + UPROPERTY(EditAnywhere, Category = "Input") + UInputAction* DashAction; + /** Cadencia de envio dos pacotes `C_INPUT_AXIS` (Hz). */ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Zeus|Networking", meta = (ClampMin = "1", ClampMax = "120")) int32 InputSendRateHz = 30; @@ -104,6 +109,11 @@ protected: void OnJumpPressed(); void OnJumpReleased(); + /// IA_Dash Triggered -> resolve UZeusGASComponent do PlayerState e chama + /// RequestActivateAbilityByTag("Zeus.Ability.Movement.Dash"). Server valida + /// + responde S_ABILITY_ACTIVATED (HP/SP atualizado, montage roda local). + void OnDashTriggered(); + public: /** Wrappers expostos a Blueprint (UI / mobile / automation). */ UFUNCTION(BlueprintCallable, Category = "Input")