添加增强目标技能效果的技能

This commit is contained in:
997146918 2025-07-22 15:06:16 +08:00
parent aa7ceba750
commit 25f8adc0a8
8 changed files with 86 additions and 8 deletions

View File

@ -17,7 +17,8 @@ enum class ESkillEffectType: uint8
Charge UMETA(DisplayName = "充能", ToolTip = "使技能的冷却进度加快"), Charge UMETA(DisplayName = "充能", ToolTip = "使技能的冷却进度加快"),
ModifySpeed UMETA(DisplayName = "速度修改", ToolTip = "使技能冷却进度倍率进展 持续指定时间"), ModifySpeed UMETA(DisplayName = "速度修改", ToolTip = "使技能冷却进度倍率进展 持续指定时间"),
SkillEnduranceRestore UMETA(DisplayName = "技能耐久度恢复", ToolTip = "使技能耐久度恢复"), SkillEnduranceRestore UMETA(DisplayName = "技能耐久度恢复", ToolTip = "使技能耐久度恢复"),
EnHanceFishRod UMETA(DisplayName = "增强鱼竿", ToolTip = "使鱼竿上海增加"), EnhanceFishRod UMETA(DisplayName = "增强鱼竿", ToolTip = "使鱼竿上海增加"),
EnhanceSkill UMETA(DisplayName = "增强技能", ToolTip = "增强指定的技能数值")
}; };
//技能对象类型 //技能对象类型

View File

@ -7,6 +7,7 @@
#include "SkillEffects/SkillEffect_Charge.h" #include "SkillEffects/SkillEffect_Charge.h"
#include "SkillEffects/SkillEffect_Damage.h" #include "SkillEffects/SkillEffect_Damage.h"
#include "SkillEffects/SkillEffect_EnhanceFishRod.h" #include "SkillEffects/SkillEffect_EnhanceFishRod.h"
#include "SkillEffects/SkillEffect_EnhanceSkill.h"
#include "SkillEffects/SkillEffect_Heal.h" #include "SkillEffects/SkillEffect_Heal.h"
#include "SkillEffects/SkillEffect_ModifyCD.h" #include "SkillEffects/SkillEffect_ModifyCD.h"
#include "SkillEffects/SkillEffect_ModifySpeed.h" #include "SkillEffects/SkillEffect_ModifySpeed.h"
@ -43,10 +44,13 @@ void USkill::InitSkill(APawnWithSkill* owner, USkillManager* skillManager, FSkil
case ESkillEffectType::SkillEnduranceRestore: case ESkillEffectType::SkillEnduranceRestore:
skillEffect = NewObject<USkillEffect>(this, USkillEffect_SER::StaticClass()); skillEffect = NewObject<USkillEffect>(this, USkillEffect_SER::StaticClass());
break; break;
case ESkillEffectType::EnHanceFishRod: case ESkillEffectType::EnhanceFishRod:
skillEffect = NewObject<USkillEffect>(this, USkillEffect_EnhanceFishRod::StaticClass()); skillEffect = NewObject<USkillEffect>(this, USkillEffect_EnhanceFishRod::StaticClass());
break; break;
default: case ESkillEffectType::EnhanceSkill:
skillEffect = NewObject<USkillEffect>(this, USkillEffect_EnhanceSkill::StaticClass());
break;
default:
const UEnum* EnumPtr = StaticEnum<ESkillEffectType>(); const UEnum* EnumPtr = StaticEnum<ESkillEffectType>();
UE_LOG(LogTemp, Error, TEXT("没有配置 %s类型的Skill Effect"), *EnumPtr->GetNameStringByValue(static_cast<int64>(effectData.EffectType))) UE_LOG(LogTemp, Error, TEXT("没有配置 %s类型的Skill Effect"), *EnumPtr->GetNameStringByValue(static_cast<int64>(effectData.EffectType)))
} }

View File

@ -28,6 +28,11 @@ public:
class APawnWithSkill* GetOwner(); class APawnWithSkill* GetOwner();
FSkillData& GetSkillData(); FSkillData& GetSkillData();
TArray<USkillEffect*> GetAllSkillEffects()
{
return SkillEffects;
}
FIntPoint GetBagPos(); FIntPoint GetBagPos();
void SetSkillData( FSkillData SkillData); void SetSkillData( FSkillData SkillData);
UFUNCTION(BlueprintCallable) UFUNCTION(BlueprintCallable)

View File

@ -23,7 +23,10 @@ public:
UFUNCTION(BlueprintPure) UFUNCTION(BlueprintPure)
virtual FString GetSkillEffectDes(); virtual FString GetSkillEffectDes();
FSkillEffectData& GetEffectData()
{
return effectData;
}
private: private:
void GetEffectTargetsByTargetType(const FSkillContext& context, TArray<UObject*>& result); void GetEffectTargetsByTargetType(const FSkillContext& context, TArray<UObject*>& result);
protected: protected:

View File

@ -9,13 +9,27 @@
void USkillEffect_EnhanceFishRod::Execute(const FSkillContext& context) void USkillEffect_EnhanceFishRod::Execute(const FSkillContext& context)
{ {
Super::Execute(context); Super::Execute(context);
APawnWithSkill* OwnerPawn = context.OwnerSkill->GetOwner(); TArray<UObject*> targets = GetApplyTargets(context);
if (OwnerPawn->GetComponentByClass(UFishingRodComponent::StaticClass()) != NULL) for (auto target: targets)
{ {
UFishingRodComponent* rod = Cast<UFishingRodComponent>(OwnerPawn->GetComponentByClass(UFishingRodComponent::StaticClass())); if (!target->GetClass()->IsChildOf(APawnWithSkill::StaticClass()))
rod->AddFishRodDamage( (int32)(effectData.EffectValue)); {
UE_LOG(LogTemp, Error, TEXT("skill %s apply target is not a pawn with fish rod"), *(OwnerSkill->GetSkillName()));
}
else
{
//修改技能的冷却时间
APawnWithSkill* OwnerPawn = Cast<APawnWithSkill>(target);
if (OwnerPawn->GetComponentByClass(UFishingRodComponent::StaticClass()) != NULL)
{
UFishingRodComponent* rod = Cast<UFishingRodComponent>(OwnerPawn->GetComponentByClass(UFishingRodComponent::StaticClass()));
rod->AddFishRodDamage( (int32)(effectData.EffectValue));
}
}
} }
} }
FString USkillEffect_EnhanceFishRod::GetSkillEffectDes() FString USkillEffect_EnhanceFishRod::GetSkillEffectDes()

View File

@ -0,0 +1,32 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "SkillEffect_EnhanceSkill.h"
#include "ProjectFish/Skill/Skill.h"
void USkillEffect_EnhanceSkill::Execute(const FSkillContext& context)
{
Super::Execute(context);
TArray<UObject*> targets = GetApplyTargets(context);
for (auto target: targets)
{
if (!target->GetClass()->IsChildOf(USkill::StaticClass()))
{
UE_LOG(LogTemp, Error, TEXT("skill %s apply target is not a skill"), *(OwnerSkill->GetSkillName()));
}
else
{
//修改技能的冷却时间
USkill* targetSkill = Cast<USkill>(target);
for (auto skilleffect: targetSkill->GetAllSkillEffects())
{
skilleffect->GetEffectData().EffectValue +=(int32)(effectData.EffectValue)*(skilleffect->GetEffectData().EffectValue/FMath::Abs(skilleffect->GetEffectData().EffectValue));
}
}
}
}
FString USkillEffect_EnhanceSkill::GetSkillEffectDes()
{
return FString::Printf(TEXT("增强目标技能 %d点"), (int32)(effectData.EffectValue));
}

View File

@ -0,0 +1,19 @@
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "ProjectFish/Skill/SkillEffect.h"
#include "SkillEffect_EnhanceSkill.generated.h"
/**
*
*/
UCLASS()
class PROJECTFISH_API USkillEffect_EnhanceSkill : public USkillEffect
{
GENERATED_BODY()
public:
void Execute(const FSkillContext& context) override;
FString GetSkillEffectDes() override;
};