初始化提交

This commit is contained in:
2025-07-09 01:08:35 +08:00
parent d3296791cf
commit 62e0f56c60
618 changed files with 173543 additions and 0 deletions

View File

@ -0,0 +1,27 @@
local Ability = {}
local GetGameplayTag = require("GamePlay.Utils").GetGameplayTag
local AbilitySystemBlueprintLibrary = import("AbilitySystemBlueprintLibrary")
function Ability:K2_ActivateAbilityFromEvent(_)
local RoleUtils = require("GamePlay.Utils.RoleUtils")
local owner = self:GetOwningActorFromActorInfo()
local asc = AbilitySystemBlueprintLibrary.GetAbilitySystemComponent(owner)
local increase_handle = asc:MakeOutgoingSpec(
self.DefaultEffectConfig, 1, asc:MakeEffectContext()
)
AbilitySystemBlueprintLibrary.AssignTagSetByCallerMagnitude(
increase_handle, GetGameplayTag("Change.Role.MoveSpeed"), self.SpeedIncrease
)
asc:BP_ApplyGameplayEffectSpecToSelf(increase_handle)
RoleUtils.ChangeHunger(owner, -100)
end
-- function Ability:K2_OnEndAbility(bWasCancelled)
-- print(bWasCancelled, "Ability:K2_OnEndAbility")
-- end
return Class(nil, nil, Ability)

View File

@ -0,0 +1,29 @@
local EatFoodAbility = {}
local Utils = require("GamePlay.Utils")
local RoleUtils = require("GamePlay.Utils.RoleUtils")
local function HandleHealthChange(role, effects)
local tag = Utils.GetGameplayTag("Change.Role.Health")
local value = effects:Get(tag)
if value ~= nil then
RoleUtils.ChangeHealth(role, value)
end
end
local function HandleHungerChange(role, effects)
local tag = Utils.GetGameplayTag("Change.Role.Hunger")
local value = effects:Get(tag)
if value ~= nil then
RoleUtils.ChangeHunger(role, value)
end
end
function EatFoodAbility:K2_ActivateAbilityFromEvent(EventData)
local item_config = Utils.GetItemConfigByID(math.floor(EventData.EventMagnitude))
local owner = self:GetOwningActorFromActorInfo()
HandleHealthChange(owner, item_config.GameplayEffects)
HandleHungerChange(owner, item_config.GameplayEffects)
self:K2_EndAbility()
end
return Class(nil, nil, EatFoodAbility)

View File

@ -0,0 +1,94 @@
local Ability = {}
local EBusyRoleState = import("EBusyRoleState")
local ERoleMoveDirection = import("ERoleMoveDirection")
local EBusyAnimationPhase = import("EBusyAnimationPhase")
local KismetSystemLibrary = import("KismetSystemLibrary")
local AbilitySystemBlueprintLibrary = import("AbilitySystemBlueprintLibrary")
local GetGameplayTag = require("GamePlay.Utils").GetGameplayTag
local item_pick_tag = "Change.LevelItem.Health"
local role_pick_cost_health_tag = "Change.Role.Health"
local role_pick_cost_hunger_tag = "Change.Role.Hunger"
local function GetSelfPickConsume(item_id)
end
function Ability:ctor()
self.target = nil
self.pick_phase = nil
self.delay_timer = nil
self.event_data = nil
end
function Ability:K2_ActivateAbilityFromEvent(EventData)
print("Pick Ability:K2_ActivateAbility")
self.pick_phase = EBusyAnimationPhase.PrepareCast
self:ProcessAbilityPhase()
self.event_data = EventData
self.target = EventData.Target
end
function Ability:K2_OnEndAbility()
local owner = self:GetOwningActorFromActorInfo()
if self.target:IsAlive() then
owner:TryActiveAbility("Ability.Role.Pick", self.event_data)
else
owner.proxy.state = EBusyRoleState.PickFinished
owner:UpdateRoleState()
end
end
function Ability:ProcessAbilityPhase()
local owner = self:GetOwningActorFromActorInfo()
local Animation = owner["RoleAnimation"]
Animation:PlayPickAnimation("Tree", Animation:GetMoveDirection(), self.pick_phase, 1.0)
if self.delay_timer ~= nil then
KismetSystemLibrary.K2_ClearTimerHandle(self, self.delay_timer)
end
if self.pick_phase == EBusyAnimationPhase.PrepareCast then
local delegate = slua.createDelegate(function()
self.pick_phase = EBusyAnimationPhase.Casting
self:ProcessAbilityPhase()
end)
self.delay_timer = KismetSystemLibrary.K2_SetTimerDelegate(delegate, 0.5, false, true, 0, 0)
elseif self.pick_phase == EBusyAnimationPhase.Casting then
self.pick_phase = EBusyAnimationPhase.PostCast
self:ProcessAbilityPhase()
self:ApplayEffect(owner.RoleAbility)
else
local delegate = slua.createDelegate(function()
self:K2_EndAbility()
end)
self.delay_timer = KismetSystemLibrary.K2_SetTimerDelegate(delegate, 0.2, false, true, 0, 0)
end
end
function Ability:ApplayEffect(asc)
local RoleUtils = require("GamePlay.Utils.RoleUtils")
local owner = self:GetOwningActorFromActorInfo()
-- 物品的采集效果
local item_asc = AbilitySystemBlueprintLibrary.GetAbilitySystemComponent(self.target)
local pick_handle = asc:MakeOutgoingSpec(
self.AbilityEffectConfigs:Get("LevelItem"), 1, asc:MakeEffectContext()
)
AbilitySystemBlueprintLibrary.AssignTagSetByCallerMagnitude(
pick_handle, GetGameplayTag(item_pick_tag), -owner.RoleConfig.PickEffect
)
-- 自己的消耗
RoleUtils.ChangeHunger(owner,-self.target.LevelItemConfig.PickHungerCost)
asc:BP_ApplyGameplayEffectSpecToTarget(pick_handle, item_asc)
end
return Class(nil, nil, Ability)

View File

@ -0,0 +1,26 @@
local Ability = {}
local GetGameplayTag = require("GamePlay.Utils").GetGameplayTag
local BlueprintGameplayTagLibrary = import("BlueprintGameplayTagLibrary")
local AbilitySystemBlueprintLibrary = import("AbilitySystemBlueprintLibrary")
function Ability:K2_ActivateAbilityFromEvent(EventData)
local tag = EventData.tag
local value = EventData.EventMagnitude
local asc = AbilitySystemBlueprintLibrary.GetAbilitySystemComponent(self.target)
if tag == "Recover.Role.Health" then
local spec_handle = asc:MakeOutgoingSpec(
self.AbilityEffectConfigs:Get("Role"), 1, asc:MakeEffectContext()
)
AbilitySystemBlueprintLibrary.AssignTagSetByCallerMagnitude(
spec_handle, GetGameplayTag("Change.Role.Health"), value
)
asc:BP_ApplyGameplayEffectSpecToSelf(spec_handle)
end
end
return Class(nil, nil, Ability)

View File

@ -0,0 +1,71 @@
local Ability = {}
local Reactive = require("Core.Reactive")
local GetGameplayTag = require("GamePlay.Utils").GetGameplayTag
local AbilitySystemBlueprintLibrary = import("AbilitySystemBlueprintLibrary")
local hunger_consume_tag_name = "Buff.RoleConsume.Hunger"
local health_consume_tag_name = "Buff.RoleConsume.Health"
function Ability:K2_ActivateAbilityFromEvent(_)
print("Role Consume Ability:K2_ActivateAbility")
if self.hunger_watcher ~= nil then
self.hunger_watcher:Destroy()
end
self.hunger_watcher = Reactive.Watcher(function() self:ConsumeWatcher() end)
end
function Ability:ConsumeWatcher()
local owner = self:GetOwningActorFromActorInfo()
local asc = owner["RoleAbility"]
if owner.LuaRoleAttribute.Hunger > 0 then
if not asc:IsGameplayCueActive(GetGameplayTag(hunger_consume_tag_name)) then
self:ApplyHungerConsume(asc)
end
if asc:IsGameplayCueActive(GetGameplayTag(health_consume_tag_name)) then
if self.health_consume_handle ~= nil then
asc:RemoveActiveGameplayEffect(self.health_consume_handle, -1)
end
self.health_consume_handle = nil
end
elseif owner.LuaRoleAttribute.Hunger <= 0 then
if not asc:IsGameplayCueActive(GetGameplayTag(health_consume_tag_name)) then
self:ApplyHealthConsume(asc)
end
if asc:IsGameplayCueActive(GetGameplayTag(hunger_consume_tag_name)) then
if self.hunger_consume_handle ~= nil then
asc:RemoveActiveGameplayEffect(self.hunger_consume_handle, -1)
end
self.hunger_consume_handle = nil
owner.LuaRoleAttribute.Hunger = 0
end
end
end
function Ability:ApplyConsumeEffect(asc, effect_tag_name, value)
local spec_handle = asc:MakeOutgoingSpec(
self.EffectConfigs:Get(GetGameplayTag(effect_tag_name)),
1, asc:MakeEffectContext()
)
AbilitySystemBlueprintLibrary.AssignTagSetByCallerMagnitude(
spec_handle, GetGameplayTag(effect_tag_name), value
)
return asc:BP_ApplyGameplayEffectSpecToSelf(spec_handle)
end
function Ability:ApplyHungerConsume(asc)
local owner = asc:GetOwner()
local consume_speed_peer_second = owner.RoleConfig.HungerConsumeSpeed
self.hunger_consume_handle = self:ApplyConsumeEffect(
asc, hunger_consume_tag_name, -consume_speed_peer_second / 10
)
end
function Ability:ApplyHealthConsume(asc)
local owner = asc:GetOwner()
local consume_speed_peer_second = owner.RoleConfig.HungerConsumeSpeed
self.health_consume_handle = self:ApplyConsumeEffect(
asc, health_consume_tag_name, -consume_speed_peer_second/10
)
end
return Class(nil, nil, Ability)