Files
SL1900 5e0d58cfad Initial version - 1.2.0.60
EN: 1.2.0.60
CN: 1.2.0.61
JP: 1.2.0.63
KR: 1.2.0.67
2025-12-03 01:00:00 +09:00

59 lines
3.1 KiB
Lua

local AchievementChecker = {}
local MonsterRelevant = require("Game.Adventure.AchievementCheck.MonsterRelevant")
local SkillsRelevant = require("Game.Adventure.AchievementCheck.SkillsRelevant")
local PlayerRelevant = require("Game.Adventure.AchievementCheck.PlayerRelevant")
AchievementChecker.BattleAchievementCheckFunction = {
[GameEnum.questCompleteCondClient.KillMonsterWithoutHitBySkill] = SkillsRelevant.KillMonsterWithoutHitBySkill,
[GameEnum.questCompleteCondClient.KillMonsterWithoutKillSpecifiedMonster] = MonsterRelevant.CheckKillMonsterWithoutKillSpecifiedMonster,
[GameEnum.questCompleteCondClient.KillMonsterWithOneAttack] = MonsterRelevant.CheckKillMonsterWithOneAttack,
[GameEnum.questCompleteCondClient.CritCount] = PlayerRelevant.CritCount,
[GameEnum.questCompleteCondClient.CastSkillTypeCount] = PlayerRelevant.CastSkillTypeCount,
[GameEnum.questCompleteCondClient.CastSkillCount] = PlayerRelevant.CastSkillCount,
[GameEnum.questCompleteCondClient.ExtremDodgeCount] = PlayerRelevant.ExtremDodgeCount,
[GameEnum.questCompleteCondClient.KillMonsterClass] = MonsterRelevant.KillMonsterClass,
[GameEnum.questCompleteCondClient.TriggerTagElement] = PlayerRelevant.TriggerTagElement,
[GameEnum.questCompleteCondClient.OneHitDamage] = PlayerRelevant.OneHitDamage,
[GameEnum.questCompleteCondClient.ClearLevelWithHPBelow] = PlayerRelevant.ClearLevelWithHPBelow,
[GameEnum.questCompleteCondClient.KillMonsterWithTag] = MonsterRelevant.KillMonsterWithTag,
[GameEnum.questCompleteCondClient.KillMonsterWithSkin] = MonsterRelevant.KillMonsterWithSkin
}
function AchievementChecker:CheckBattleAchievement(tbAchievementId, tbRet, bBattleSuccess)
local battleData = NovaAPI.GetAchievementData()
if battleData == nil then
printError("成就战斗数据null")
return
end
for _, nAchievementId in ipairs(tbAchievementId) do
local mapAchievementData = ConfigTable.GetData("Achievement", nAchievementId)
if mapAchievementData == nil then
printError("成就数据不存在:" .. nAchievementId)
return
end
if mapAchievementData.CompleteCondClient > 999 then
local bHasValue, nCount = battleData.specialBattleData:TryGetValue(mapAchievementData.CompleteCondClient)
print("Check Special Battle Achievement:" .. nAchievementId .. " Type:" .. mapAchievementData.CompleteCondClient)
if bHasValue and 0 < nCount then
print("Add Special Battle Achievement:" .. nAchievementId .. " Type:" .. mapAchievementData.CompleteCondClient .. " Count:" .. nCount)
table.insert(tbRet, {
Data = {nCount, nAchievementId},
Id = GameEnum.eventTypes.eClient
})
end
else
if self.BattleAchievementCheckFunction[mapAchievementData.CompleteCondClient] == nil then
printError("成就检测方法未绑定:" .. mapAchievementData.CompleteCondClient)
return
end
local nCount = self.BattleAchievementCheckFunction[mapAchievementData.CompleteCondClient](mapAchievementData, battleData, bBattleSuccess)
if 0 < nCount then
print(string.format("成就%d完成", nAchievementId))
table.insert(tbRet, {
Data = {nCount, nAchievementId},
Id = GameEnum.eventTypes.eClient
})
end
end
end
end
return AchievementChecker