MemeMayhem / ModExamples

11 stars 3 forks source link

如何限制能力卡执行能力次数问题 以及 收入结算后回调的询问 #115

Closed System2c closed 1 month ago

System2c commented 1 month ago

如题,我想实现一个能力卡,卡的效果为

属性+x,同时下一回合该属性临时增加y,一张能力卡的临时效果只能触发一次。

我运用全局变量 cntcombat_unit:GetPerkLevel(name) ,初步实现了只生效一次的功能,但是在重播战斗的过程中该临时功能又不生效了。有什么办法可以在点击重播时重置 cnt

此外,是否有在收入结算后的回调函数

System2c commented 1 month ago

临时能力的执行次数已经解决,运用了两个变量

local hasWonCnt = 0      -- 已生效能力数
local hasWonWave = 0   -- 最近一次生效回合数
combat_unit:RegisterOnBeforeCombatStartCallback(name, function(level, attack_data, caster, target)
        local cnt = combat_unit:GetPerkLevel(name)  -- 能力层数
        local wave = combat_unit.run_instance.wave  -- 当前回合数
        -- 如果 hasWonCnt 小于 cnt,说明还有临时能力没有执行生效,
        -- 按需要,只执行1次临时能力
        -- 记录执行能力的回合数,以便重播时可以执行临时能力
        if hasWonCnt < cnt or hasWonWave == wave then   
            combat_unit:ModifyAttribute("income", 1000, true)
            hasWonCnt = cnt
            hasWonWave = wave
        end
end)
GoodCrispyShark commented 1 month ago

local cnt = combat_unit:GetPerkLevel(name) -- 能力层数 **此处不需要get level,传参里的level就是level**

GoodCrispyShark commented 1 month ago

重播生效需要建立一个隐形属性来判断(用属性来代替你的变量) 战斗开始前我们会记录玩家的所有属性,重播会重置回那个状态

GoodCrispyShark commented 1 month ago

小祥的100金币换2收入能力:


    spend_for_income = function(combat_unit)
        local name = "spend_for_income"
        combat_unit:RegisterOnGoldConsumeCallback(name, function(level, consume_amount)
            local scaling_key, non_scaling_key = "income", "gold_cost"
            local gold_cost = PerkSystem:GetNonScalingPerkValue(name, non_scaling_key)
            local value = PerkSystem:GetScalingPerkValue(name, scaling_key, level)

            -- get run instance so additional perk attributes can be stored in save data to persist across saves
            local run_instance = combat_unit.run_instance

            local gold_spent = GLOBAL.hero:GetBoundedAttribute("spend_for_income") or 0
            gold_spent = gold_spent + consume_amount

            local use_animation = true

            while gold_spent >= gold_cost do
                gold_spent = gold_spent - gold_cost

                combat_unit:ModifyAttribute(scaling_key, value, use_animation)
                run_instance:ModifySavedPerkDataAttributes(scaling_key, value)
            end

            local rollover_key = "spend_for_income"
            combat_unit:SetAttribute(rollover_key, gold_spent)
            run_instance:SetSavedPerkDataAttributes(rollover_key, gold_spent)
        end)
    end,```
System2c commented 1 month ago

小祥的100金币换2收入能力:

感谢回复,还想请问有没有那种,在战斗结束后且收入结算后的回调函数?

我想实现的是每一场战斗结束后检查现有金币数,运用 RegisterOnCombatEndCallback 检查金币数量时,此时收入给的钱并未添加到金币数量中。看起来收入计算的时机还要再往后一点?

GoodCrispyShark commented 1 month ago

目前没有收入结算回调 combatend会结算收入 但是金币飞上去需要一点时间 可以考虑做成战前结算 目前小祥的金卡interest也是这么做的

System2c commented 1 month ago

好的好的,感谢