5e0d58cfad
EN: 1.2.0.60 CN: 1.2.0.61 JP: 1.2.0.63 KR: 1.2.0.67
59 lines
3.1 KiB
Lua
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
|