Files
Endfield-Data/LuaScripts/Common/Utils/GameConditionUtils.lua
2026-01-31 21:42:01 +07:00

196 lines
8.0 KiB
Lua

local LuaGameConditionUtils = {}
local _conditionHandlers = {
[GEnums.ConditionType.CheckStatisticVal] = function(params)
local args = LuaGameConditionUtils._extractInts(params)
return GameConditionUtils.GetStatisticValueByType(args[1], args[2] or 0)
end,
[GEnums.ConditionType.CheckStatisticValSum] = function(params)
local args = LuaGameConditionUtils._extractInts(params)
local arg2 = LuaGameConditionUtils._GetIntsAtIndex(params, 2)
local ret = GameConditionUtils.CheckStatisticValSum(args[1], arg2)
return ret
end,
[GEnums.ConditionType.CheckCharSkillLevel] = function(params)
local args = LuaGameConditionUtils._extractStrings(params)
return GameConditionUtils.GetCharSkillLevel(args[1] or "", args[2] or "")
end,
[GEnums.ConditionType.CheckDungeonTypePassNum] = function(params)
local args = LuaGameConditionUtils._extractStrings(params)
return GameConditionUtils.GetDungeonTypePassNum(args[1])
end,
[GEnums.ConditionType.CheckEtherSubmitCount] = function()
return GameConditionUtils.GetEthSubmitCount()
end,
[GEnums.ConditionType.CheckFactoryBlackBoxStateNum] = function(params)
local args = LuaGameConditionUtils._extractInts(params)
return GameConditionUtils.GetFactoryBlackBoxStateNum(args[1])
end,
[GEnums.ConditionType.CheckGreaterCharLevelNum] = function(params)
local args = LuaGameConditionUtils._extractInts(params)
return GameConditionUtils.GetGreaterCharLevelNum(args[1])
end,
[GEnums.ConditionType.CheckGreaterCharStageNum] = function(params)
local args = LuaGameConditionUtils._extractInts(params)
return GameConditionUtils.GetGreaterCharStageNum(args[1])
end,
[GEnums.ConditionType.CheckGreaterSettlementLevelNum] = function(params)
local args = LuaGameConditionUtils._extractInts(params)
return GameConditionUtils.GetGreaterSettlementLevelNum(args[1])
end,
[GEnums.ConditionType.CheckGreaterWeapeonLevelNum] = function(parameters)
local args = LuaGameConditionUtils._extractInts(parameters)
return GameConditionUtils.GetGreaterWeaponLevelNum(args[1])
end,
[GEnums.ConditionType.CheckGreaterWeapeonStageNum] = function(parameters)
local args = LuaGameConditionUtils._extractInts(parameters)
return GameConditionUtils.GetGreaterWeaponStageNum(args[1])
end,
[GEnums.ConditionType.CheckPassedGameMechanicsNum] = function(params)
local args = LuaGameConditionUtils._extractStrings(params)
return GameConditionUtils.GetPassedGameMechanicsNum(args[1])
end,
[GEnums.ConditionType.CheckSettlementLevelSum] = function(params)
local args = LuaGameConditionUtils._extractStrings(params)
return GameConditionUtils.GetSettlementLevelSum(args[1])
end,
[GEnums.ConditionType.CheckUnlockGroupTechNum] = function(params)
local args = LuaGameConditionUtils._extractStrings(params)
return GameConditionUtils.GetUnlockGroupTechNum(args[1])
end,
[GEnums.ConditionType.CheckSceneCollectionNum] = function(parameters)
local levelId = parameters[CSIndex(1)] and parameters[CSIndex(1)].valueStringList[CSIndex(1)] or ""
local collectionList = {}
local paramList = parameters[CSIndex(2)].valueStringList
local labelList = {}
for i = CSIndex(1), CSIndex(paramList.Count) do
table.insert(labelList, parameters[CSIndex(2)].valueStringList[i])
end
for _, label in pairs(labelList) do
local success, cfg = Tables.collectionLabelTable:TryGetValue(label)
if success then
for i = CSIndex(1), CSIndex(cfg.list.Count) do
table.insert(collectionList, cfg.list[i].prefabId)
end
end
end
return GameConditionUtils.GetSceneCollectionNum(levelId, collectionList)
end,
[GEnums.ConditionType.CheckBitSetCount] = function(params)
local args = LuaGameConditionUtils._extractInts(params)
local key = args[1]
local ret = GameConditionUtils.CheckBitSetCount(key)
return ret
end,
[GEnums.ConditionType.CheckWorldLevel] = function(params)
local ret = GameConditionUtils.CheckWorldLevel()
return ret
end,
[GEnums.ConditionType.CheckDomainShopChannelReachLvCnt] = function(params)
local args = LuaGameConditionUtils._extractStrings(params)
local arg1 = args[1]
local arg2 = args[2]
local ret = GameConditionUtils.CheckDomainShopChannelReachLvCnt(arg1, arg2)
return ret
end,
[GEnums.ConditionType.CheckDomainDevelopmentLevel] = function(params)
local args = LuaGameConditionUtils._extractStrings(params)
local arg1 = args[1]
local ret = GameConditionUtils.CheckDomainDevelopmentLevel(arg1)
return ret
end,
[GEnums.ConditionType.MissionStateEqual] = function(params)
local args = LuaGameConditionUtils._extractStrings(params)
local arg1 = args[1]
local arg2 = tonumber(args[2])
local arg3 = tonumber(args[3])
local ret = GameConditionUtils.MissionStateEqual(arg1, arg2, arg3)
return ret
end,
[GEnums.ConditionType.CheckPassGameMechanicsId] = function(params)
local args = LuaGameConditionUtils._extractStrings(params)
local arg1 = args[1]
local ret = GameConditionUtils.CheckPassGameMechanicsId(arg1)
return ret
end,
[GEnums.ConditionType.CheckEquipTierLevelNumCharNum] = function(params)
local arg1 = LuaGameConditionUtils._GetIntsAtIndex(params, 1)[1]
local arg2 = LuaGameConditionUtils._GetIntsAtIndex(params, 2)[1]
local arg3 = LuaGameConditionUtils._GetBoolsAtIndex(params, 3)[1] or false
local ret = GameConditionUtils.CheckEquipTierLevelNumCharNum(arg1, arg2, arg3)
return ret
end,
}
function LuaGameConditionUtils.getConditionValueByParameters(conditionType, parameters)
if not GameConditionUtils.CheckClientConditionType(conditionType) then
logger.info("调用了没有实现的Condition进度 :" .. tostring(conditionType))
return false, 0
end
local handler = _conditionHandlers[conditionType]
if handler then
local ok, result = pcall(handler, parameters)
if ok then
return true, result or 0
end
end
return false, 0
end
function LuaGameConditionUtils._extractInts(parameters)
local results = {}
for i = CSIndex(1), CSIndex(parameters.Count) do
results[#results + 1] = parameters[i].valueIntList[CSIndex(1)]
end
return results
end
function LuaGameConditionUtils._extractStrings(parameters)
local results = {}
for i = CSIndex(1), CSIndex(parameters.Count) do
results[#results + 1] = parameters[i].valueStringList[CSIndex(1)]
end
return results
end
function LuaGameConditionUtils._GetIntsAtIndex(parameters, luaIndex)
local results = {}
local csIndex = CSIndex(luaIndex)
if csIndex >= 0 and csIndex < parameters.Count then
local list = parameters[csIndex].valueIntList
for i = 0, list.Count - 1 do
table.insert(results, list[i])
end
end
return results
end
function LuaGameConditionUtils._GetStringsAtIndex(parameters, luaIndex)
local results = {}
local csIndex = CSIndex(luaIndex)
if csIndex >= 0 and csIndex < parameters.Count then
local list = parameters[csIndex].valueStringList
for i = 0, list.Count - 1 do
table.insert(results, list[i])
end
end
return results
end
function LuaGameConditionUtils._GetBoolsAtIndex(parameters, luaIndex)
local results = {}
local csIndex = CSIndex(luaIndex)
if csIndex >= 0 and csIndex < parameters.Count then
local list = parameters[csIndex].valueBoolList
for i = 0, list.Count - 1 do
table.insert(results, list[i])
end
end
return results
end
_G.LuaGameConditionUtils = LuaGameConditionUtils
return LuaGameConditionUtils