128 lines
4.2 KiB
Lua
Executable File
128 lines
4.2 KiB
Lua
Executable File
-- 此通用方法会加重资源消耗,改为单个
|
||
|
||
modifier_ability_power_common = class({})
|
||
|
||
local public = modifier_ability_power_common
|
||
|
||
local m_modifier_funcs=
|
||
{
|
||
MODIFIER_PROPERTY_OVERRIDE_ABILITY_SPECIAL,
|
||
MODIFIER_PROPERTY_OVERRIDE_ABILITY_SPECIAL_VALUE,
|
||
-- 有个显示bug,_Description描述中引用了值名称的不会变,单独的会变
|
||
}
|
||
|
||
-- function public:IsHidden()
|
||
-- return true
|
||
-- end
|
||
|
||
function public:IsPermanent()
|
||
return true
|
||
end
|
||
|
||
function public:RemoveOnDeath()
|
||
return false
|
||
end
|
||
|
||
function public:IsDebuff()
|
||
return false
|
||
end
|
||
|
||
function public:IsPurgable()
|
||
return false
|
||
end
|
||
|
||
function public:DeclareFunctions()
|
||
return m_modifier_funcs
|
||
end
|
||
|
||
function public:OnCreated( kv )
|
||
-- self.bDirty = true --本地时在其它函数不起作用
|
||
|
||
if IsServer() then
|
||
-- local playerId = self:GetParent():GetPlayerOwnerID()
|
||
-- CustomNetTables:SetTableValue("CustomGameInfo", "PowerAbilityValue"..tostring(playerId), GameRules.player_power_enabled[playerId])
|
||
-- print("---- is Server")
|
||
-- DeepPrintTable(GameRules.player_power_enabled[playerId])
|
||
-- else --这里可以生效,但在其它函数里失效
|
||
-- self:GetParent().PowerAbilityUpgrades = CustomNetTables:GetTableValue("CustomGameInfo", "PowerAbilityValue"..tostring(self:GetParent():GetPlayerOwnerID()))
|
||
-- print("---- not Server")
|
||
-- DeepPrintTable(self:GetParent().PowerAbilityUpgrades)
|
||
end
|
||
end
|
||
|
||
-- function public:OnCreated( kv )
|
||
-- if not IsServer() then return end
|
||
-- self:OnRefresh( kv )
|
||
-- end
|
||
|
||
-- function public:OnRefresh( kv )
|
||
-- -- 设置层数仅本地会触发,无层数设置为1层时不触发
|
||
-- -- 使用 modifier:ForceRefresh() 会双端触发
|
||
-- if not IsServer() then return end
|
||
-- end
|
||
|
||
function public:GetModifierOverrideAbilitySpecial( params )
|
||
-- 这两个必须在双端跑
|
||
|
||
if self:GetParent() == nil or params.ability == nil then
|
||
return 0
|
||
end
|
||
|
||
-- 本地取值失效,并且从NetTable取值后每次生成新的一张table,下同
|
||
-- local hUpgrades = self:GetParent().PowerAbilityUpgrades
|
||
-- if hUpgrades == nil then
|
||
-- hUpgrades = CustomNetTables:GetTableValue("CustomGameInfo", "PowerAbilityValue"..tostring(self:GetParent():GetPlayerOwnerID()))
|
||
-- print("---- hUpgrades == nil, CustomNetTables:GetTableValue")
|
||
-- print(hUpgrades)
|
||
-- end
|
||
local hUpgrades = CustomNetTables:GetTableValue("CustomGameInfo", "PowerAbilityValue"..tostring(self:GetParent():GetPlayerOwnerID()))
|
||
local szUnitName = self:GetParent():GetUnitName()
|
||
local szAbilityName = params.ability:GetAbilityName()
|
||
local szSpecialValueName = params.ability_special_value
|
||
|
||
if hUpgrades == nil or hUpgrades[szUnitName] == nil or hUpgrades[szUnitName][szAbilityName] == nil then
|
||
return 0
|
||
end
|
||
|
||
if hUpgrades[szUnitName][szAbilityName][szSpecialValueName] == nil then
|
||
return 0
|
||
end
|
||
|
||
return 1
|
||
end
|
||
|
||
function public:GetModifierOverrideAbilitySpecialValue( params )
|
||
-- 这两个必须在双端跑
|
||
|
||
local hUpgrades = CustomNetTables:GetTableValue("CustomGameInfo", "PowerAbilityValue"..tostring(self:GetParent():GetPlayerOwnerID()))
|
||
local szUnitName = self:GetParent():GetUnitName()
|
||
local szAbilityName = params.ability:GetAbilityName()
|
||
local szSpecialValueName = params.ability_special_value
|
||
local nSpecialLevel = params.ability_special_level
|
||
if hUpgrades == nil or hUpgrades[szUnitName] == nil or hUpgrades[szUnitName][szAbilityName] == nil then
|
||
return 0
|
||
end
|
||
|
||
local flBaseValue = params.ability:GetLevelSpecialValueNoOverride(szSpecialValueName, nSpecialLevel)
|
||
local SpecialValueUpgrade = hUpgrades[szUnitName][szAbilityName][szSpecialValueName]
|
||
|
||
if SpecialValueUpgrade ~= nil then
|
||
return flBaseValue + SpecialValueUpgrade
|
||
|
||
-- 本地不起作用
|
||
-- if self.bDirty == false and SpecialValueUpgrade["cached_result"] ~= nil and SpecialValueUpgrade["cached_result"][nSpecialLevel] ~= nil then
|
||
-- print("---- return cached_result")
|
||
-- return SpecialValueUpgrade["cached_result"][nSpecialLevel]
|
||
-- end
|
||
|
||
-- local flResult = flBaseValue + SpecialValueUpgrade["value"]
|
||
-- if SpecialValueUpgrade["cached_result"] == nil then
|
||
-- SpecialValueUpgrade["cached_result"] = {}
|
||
-- end
|
||
-- SpecialValueUpgrade["cached_result"][nSpecialLevel] = flResult
|
||
-- self.bDirty = false
|
||
-- return flResult
|
||
end
|
||
|
||
return flBaseValue
|
||
end |