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:
@@ -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
|
||||
Reference in New Issue
Block a user