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
This commit is contained in:
SL1900
2025-12-03 01:00:00 +09:00
commit 5e0d58cfad
3595 changed files with 9373562 additions and 0 deletions
@@ -0,0 +1,58 @@
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
@@ -0,0 +1,95 @@
local MonsterRelevant = {}
function MonsterRelevant.CheckKillMonsterWithoutKillSpecifiedMonster(mapAchievementData, AchievementDataDic)
for _, nMonsterId in ipairs(mapAchievementData.ClientCompleteParams1) do
for nCharId, mapKillDic in pairs(AchievementDataDic.killDataDic) do
if mapKillDic:ContainsKey(nMonsterId) then
return 0
end
end
end
for _, nMonsterId in ipairs(mapAchievementData.ClientCompleteParams2) do
for nCharId, mapKillDic in pairs(AchievementDataDic.killDataDic) do
if mapKillDic:ContainsKey(nMonsterId) then
return 1
end
end
end
return 0
end
function MonsterRelevant.CheckKillMonsterWithOneAttack(mapAchievementData, AchievementDataDic)
local nTarget = mapAchievementData.ClientCompleteParams1[1]
local nTargetChar = mapAchievementData.ClientCompleteParams2[1]
for nCharId, nCount in pairs(AchievementDataDic.OnceSkillKillCountDic) do
if (#nTargetChar == 0 or 0 < table.indexof(nTargetChar, nCharId)) and nCount > nTarget then
return 1
end
end
return 0
end
function MonsterRelevant.KillMonsterClass(mapAchievementData, AchievementDataDic)
local nCount = 0
local tbTarget = mapAchievementData.ClientCompleteParams1
local tbTargetChar = mapAchievementData.ClientCompleteParams2
for nCharId, mapKillDic in pairs(AchievementDataDic.killDataDic) do
if #tbTargetChar == 0 or 0 < table.indexof(tbTargetChar, nCharId) then
for nMonsterId, nKillCount in pairs(mapKillDic) do
local mapMonsterCfg = ConfigTable.GetData("Monster", nMonsterId)
if mapMonsterCfg ~= nil and 0 < table.indexof(tbTarget, mapMonsterCfg.EpicLv) then
nCount = nCount + nKillCount
end
end
end
end
return nCount
end
function MonsterRelevant.KillMonsterWithTag(mapAchievementData, AchievementDataDic)
local nCount = 0
local nTargetChar = mapAchievementData.ClientCompleteParams1
local tbTarget = mapAchievementData.ClientCompleteParams3
if tbTarget == nil then
return 0
end
for nCharId, mapKillDic in pairs(AchievementDataDic.killDataDic) do
if #nTargetChar == 0 or 0 < table.indexof(nTargetChar, nCharId) then
for nMonsterId, nKillCount in pairs(mapKillDic) do
local mapMonsterCfg = ConfigTable.GetData("Monster", nMonsterId)
if mapMonsterCfg ~= nil then
if 0 < table.indexof(mapMonsterCfg.Tag1, tbTarget) then
nCount = nCount + nKillCount
elseif 0 < table.indexof(mapMonsterCfg.Tag2, tbTarget) then
nCount = nCount + nKillCount
elseif 0 < table.indexof(mapMonsterCfg.Tag3, tbTarget) then
nCount = nCount + nKillCount
elseif 0 < table.indexof(mapMonsterCfg.Tag4, tbTarget) then
nCount = nCount + nKillCount
elseif 0 < table.indexof(mapMonsterCfg.Tag5, tbTarget) then
nCount = nCount + nKillCount
end
end
end
end
end
return nCount
end
function MonsterRelevant.KillMonsterWithSkin(mapAchievementData, AchievementDataDic)
local nCount = 0
local tbTargetSkin = mapAchievementData.ClientCompleteParams1
if tbTargetSkin == nil then
return 0
end
for _, mapKillDic in pairs(AchievementDataDic.killDataDic) do
if 0 < #tbTargetSkin then
for nMonsterId, nKillCount in pairs(mapKillDic) do
local mapMonsterCfg = ConfigTable.GetData("Monster", nMonsterId)
if mapMonsterCfg ~= nil then
local nFAId = mapMonsterCfg.FAId
if 0 < table.indexof(tbTargetSkin, nFAId) then
nCount = nCount + nKillCount
end
end
end
end
end
return nCount
end
return MonsterRelevant
@@ -0,0 +1,70 @@
local PlayerRelevant = {}
function PlayerRelevant.CritCount(mapAchievementData, AchievementDataDic)
local ret = 0
for nCharId, nCritCount in ipairs(AchievementDataDic.CritCountData) do
if #mapAchievementData.ClientCompleteParams1 == 0 or 0 < table.indexof(mapAchievementData.ClientCompleteParams1, nCharId) then
ret = ret + nCritCount
end
end
return ret
end
function PlayerRelevant.CastSkillTypeCount(mapAchievementData, AchievementDataDic)
local nCount = 0
local tbTarget = mapAchievementData.ClientCompleteParams1
for nSkillId, nCastCount in pairs(AchievementDataDic.CastSkillData) do
local mapSkill = ConfigTable.GetData("Skill", nSkillId)
if mapSkill ~= nil and 0 < table.indexof(tbTarget, mapSkill.Type) then
nCount = nCount + nCastCount
end
end
return nCount
end
function PlayerRelevant.CastSkillCount(mapAchievementData, AchievementDataDic)
local nCount = 0
local tbTarget = mapAchievementData.ClientCompleteParams1
for nSkillId, nCastCount in pairs(AchievementDataDic.CastSkillData) do
local mapSkill = ConfigTable.GetData("Skill", nSkillId)
if mapSkill ~= nil and 0 < table.indexof(tbTarget, mapSkill.Id) then
nCount = nCount + nCastCount
end
end
return nCount
end
function PlayerRelevant.ExtremDodgeCount(mapAchievementData, AchievementDataDic)
local ret = 0
for nCharId, nPrefectDodgeCount in ipairs(AchievementDataDic.PrefectDodgeData) do
if #mapAchievementData.ClientCompleteParams1 == 0 or 0 < table.indexof(mapAchievementData.ClientCompleteParams1, nCharId) then
ret = ret + nPrefectDodgeCount
end
end
return ret
end
function PlayerRelevant.TriggerTagElement(mapAchievementData, AchievementDataDic)
local nCount = 0
local tbTarget = mapAchievementData.ClientCompleteParams1
for nMark, nTriggerCount in pairs(AchievementDataDic.MarkTriggerData) do
if 0 < table.indexof(tbTarget, nMark) then
nCount = nCount + nTriggerCount
end
end
return nCount
end
function PlayerRelevant.OneHitDamage(mapAchievementData, AchievementDataDic)
local nTarget = mapAchievementData.ClientCompleteParams1[1]
if nTarget <= AchievementDataDic.MaxDamageValue then
return 1
end
return 0
end
function PlayerRelevant.ClearLevelWithHPBelow(mapAchievementData, AchievementDataDic, bSuccess)
if not bSuccess then
return 0
end
local nTarget = mapAchievementData.ClientCompleteParams1[1]
local nCurPrec = AchievementDataDic.MainActorHpPrec * 100
if nTarget >= nCurPrec then
return 1
end
return 0
end
return PlayerRelevant
@@ -0,0 +1,31 @@
local SkillsRelevant = {}
function SkillsRelevant.KillMonsterWithoutHitBySkill(mapAchievementData, AchievementDataDic)
if mapAchievementData.ClientCompleteParams2 == nil then
return 0
end
if mapAchievementData.ClientCompleteParams1 == nil then
return 0
end
if AchievementDataDic.DamageDataDic == nil then
return 0
end
if AchievementDataDic.killDataDic == nil then
return 0
end
for _, nHitDamageId in ipairs(mapAchievementData.ClientCompleteParams2) do
for nCharId, mapDamageDic in pairs(AchievementDataDic.DamageDataDic) do
if mapDamageDic:ContainsKey(nHitDamageId) then
return 0
end
end
end
for _, nMonsterId in ipairs(mapAchievementData.ClientCompleteParams1) do
for nCharId, mapKillDic in pairs(AchievementDataDic.killDataDic) do
if mapKillDic:ContainsKey(nMonsterId) then
return 1
end
end
end
return 0
end
return SkillsRelevant