From d6b66729f30c2f65223f2761afefffdc7b265c25 Mon Sep 17 00:00:00 2001 From: vurtne14 Date: Mon, 29 Dec 2025 18:46:10 +0800 Subject: [PATCH] 1 --- .../Framework/Manager/ServerConfigManager.lua | 2 + .../Modules/Battle/Logic/Misc/BattleUtil.lua | 1267 +++++++++-------- .../Modules/Battle/Logic/Role/RoleLogic.lua | 513 +++---- .../~Lua/Modules/Login/LoginPanel.lua | 14 +- .../Modules/MonsterCamp/GodsWayTowerPanel.lua | 3 + .../~Lua/Modules/Setting/SettingInfo.lua | 6 + .../~Lua/Modules/Setting/SettingPanel.lua | 1 + .../~Lua/Modules/Story/StoryManager.lua | 68 +- 8 files changed, 967 insertions(+), 907 deletions(-) diff --git a/Assets/ManagedResources/~Lua/Framework/Manager/ServerConfigManager.lua b/Assets/ManagedResources/~Lua/Framework/Manager/ServerConfigManager.lua index 02b8c63829..d9dcef28e6 100644 --- a/Assets/ManagedResources/~Lua/Framework/Manager/ServerConfigManager.lua +++ b/Assets/ManagedResources/~Lua/Framework/Manager/ServerConfigManager.lua @@ -25,6 +25,8 @@ ServerConfigManager.SettingConfig = { IS_NO_NOTICE = "IS_NO_NOTICE", -- 是否禁用公告 INNER_WEB_CONTROL = "INNER_WEB_CONTROL", -- 是否使用内置浏览器 IS_NULL = "IS_NULL", -- 使用C#判断物体是否销毁 + SHOW_EMAIL_SETTING = "SHOW_EMAIL_SETTING", -- 设置显示反馈邮箱 + SHOW_EMAIL_LOGIN = "SHOW_EMAIL_LOGIN", -- 登录显示反馈邮箱 } diff --git a/Assets/ManagedResources/~Lua/Modules/Battle/Logic/Misc/BattleUtil.lua b/Assets/ManagedResources/~Lua/Modules/Battle/Logic/Misc/BattleUtil.lua index 7fba015370..ce4f538e0f 100644 --- a/Assets/ManagedResources/~Lua/Modules/Battle/Logic/Misc/BattleUtil.lua +++ b/Assets/ManagedResources/~Lua/Modules/Battle/Logic/Misc/BattleUtil.lua @@ -41,7 +41,7 @@ end function BattleUtil.FP_Mul(...) local f = 1 - for i, v in ipairs{...} do + for i, v in ipairs { ... } do f = floor(f * v * 100000 + 0.5) / 100000 end return f @@ -61,6 +61,7 @@ function BattleUtil.ChooseFRow(arr) end) return tempArr end + -- 选择后排 function BattleUtil.ChooseBRow(arr) local tempArr = {} @@ -74,6 +75,7 @@ function BattleUtil.ChooseBRow(arr) end) return tempArr end + -- 选择一列(col == 0 表示第三列哦) function BattleUtil.ChooseCol(arr, col) local tempArr = {} @@ -90,7 +92,7 @@ end -- 选择两列 function BattleUtil.ChooseTowCol(arr) - local teamArr={} + local teamArr = {} --第一列 local oneArr = {} for _, role in ipairs(arr) do @@ -98,7 +100,7 @@ function BattleUtil.ChooseTowCol(arr) table.insert(oneArr, role) end end - local one=#oneArr + local one = #oneArr --第二列 local twoArr = {} for _, role in ipairs(arr) do @@ -106,72 +108,71 @@ function BattleUtil.ChooseTowCol(arr) table.insert(twoArr, role) end end - local two=#twoArr - --第三列 - local threeArr = {} - for _, role in ipairs(arr) do - if role.position % 3 == 0 then - table.insert(threeArr, role) - end - end - local three=#threeArr - --如果每列人数相同,就选前两列 - if one==two and two==three then + local two = #twoArr + --第三列 + local threeArr = {} + for _, role in ipairs(arr) do + if role.position % 3 == 0 then + table.insert(threeArr, role) + end + end + local three = #threeArr + --如果每列人数相同,就选前两列 + if one == two and two == three then for key, value in pairs(oneArr) do - table.insert(teamArr,value) + table.insert(teamArr, value) end for key, value in pairs(twoArr) do - table.insert(teamArr,value) - end - else ---如果第一列数量>第二列数量就把第一列选入 -if one>two then - if one>0 then - for key, value in pairs(oneArr) do - table.insert(teamArr,value) - end - end - --如果第二列数量>=第三列数量就把第二列选入 - if two>=three then - if two>0 then - for key, value in pairs(twoArr) do - table.insert(teamArr,value) - end + table.insert(teamArr, value) end else - --如果第三列数量>第二列数量就把第三列选入 - if three>0 then - for key, value in pairs(threeArr) do - table.insert(teamArr,value) + --如果第一列数量>第二列数量就把第一列选入 + if one > two then + if one > 0 then + for key, value in pairs(oneArr) do + table.insert(teamArr, value) + end + end + --如果第二列数量>=第三列数量就把第二列选入 + if two >= three then + if two > 0 then + for key, value in pairs(twoArr) do + table.insert(teamArr, value) + end + end + else + --如果第三列数量>第二列数量就把第三列选入 + if three > 0 then + for key, value in pairs(threeArr) do + table.insert(teamArr, value) + end + end + end + else + --如果第二列数量>第一列数量就把第二列选入 + if two > 0 then + for key, value in pairs(twoArr) do + table.insert(teamArr, value) + end + end + --如果第一列数量>第三列数量就把第一列选入 + if one >= three then + if one > 0 then + for key, value in pairs(oneArr) do + table.insert(teamArr, value) + end + end + else + --如果第三列数量>第一列数量就把第三列选入 + if three > 0 then + for key, value in pairs(threeArr) do + table.insert(teamArr, value) + end + end end end end - else - --如果第二列数量>第一列数量就把第二列选入 - if two>0 then - for key, value in pairs(twoArr) do - table.insert(teamArr,value) - end - end - --如果第一列数量>第三列数量就把第一列选入 - if one>=three then - if one>0 then - for key, value in pairs(oneArr) do - table.insert(teamArr,value) - end - end - else - --如果第三列数量>第一列数量就把第三列选入 - if three>0 then - for key, value in pairs(threeArr) do - table.insert(teamArr,value) - end - end - end - end - end - table.sort(teamArr, function(a, b) return a.position < b.position @@ -188,6 +189,7 @@ function BattleUtil.SortByProp(arr, prop, sort) end) return arr end + -- 按百分比血量排序 function BattleUtil.SortByHpFactor(arr, sort) BattleUtil.Sort(arr, function(a, b) @@ -204,14 +206,14 @@ function BattleUtil.SortByHpFactorAndHp(arr, sort) local r1 = a:GetRoleData(RoleDataName.Hp) / a:GetRoleData(RoleDataName.MaxHp) local r2 = b:GetRoleData(RoleDataName.Hp) / b:GetRoleData(RoleDataName.MaxHp) if sort == 1 then - if r1==r2 then - return a:GetRoleData(RoleDataName.Hp) r2 - end + return r1 > r2 + end else - if r1==r2 then - return a:GetRoleData(RoleDataName.Hp)b.position - else - return a.position b.position + else + return a.position < b.position end - end) + end) return arr end @@ -249,20 +251,20 @@ function BattleUtil.SortByRage(arr, sort) BattleUtil.Sort(arr, function(a, b) local r1 = a.Rage local r2 = b.Rage - if sort == 1 then - if r1==r2 then - return a.position>b.position + if sort == 1 then + if r1 == r2 then + return a.position > b.position else - return r1 > r2 - end - else - if r1==r2 then - return a.position>b.position + return r1 > r2 + end + else + if r1 == r2 then + return a.position > b.position else - return r1 < r2 - end + return r1 < r2 + end end - end) + end) return arr end @@ -270,17 +272,17 @@ end function BattleUtil.GetMaxTargetNum(chooseId) local chooseType = floor(chooseId / 100000) % 10 local chooseLimit = floor(chooseId / 10000) % 10 - local chooseWeight = floor(chooseId / 100) % 100 + local chooseWeight = floor(chooseId / 100) % 100 local sort = floor(chooseId / 10) % 10 local num = chooseId % 10 - -- + -- if chooseType == 3 or chooseType == 4 then return 1 else if num == 0 then if chooseLimit == 0 then - if chooseWeight == 7 then + if chooseWeight == 7 then return 4 elseif chooseLimit == 8 then return 1 @@ -298,32 +300,31 @@ function BattleUtil.GetMaxTargetNum(chooseId) end end - -function BattleUtil.GetSkillData(skillId,skinId) - local skillConfig=ConfigManager.TryGetConfigData(ConfigName.SkillLogicConfig,skillId) +function BattleUtil.GetSkillData(skillId, skinId) + local skillConfig = ConfigManager.TryGetConfigData(ConfigName.SkillLogicConfig, skillId) if not skillId or not skillConfig then return end - local skill = {skillId} + local skill = { skillId } --skill = {skillId, 命中时间, 持续时间, 伤害次数, {目标id1, 效果1, 效果2, ...},{目标id2, 效果3, 效果4, ...}, ...} --效果 = {效果类型id, 效果参数1, 效果参数2, ...} local target = skillConfig.Target local effectList = skillConfig.Effect local effectArgsList = skillConfig.EffectValue - + local eid = BattleUtil.GetCombatIdBySkin(skillId, skinId or 0) - local EffectCombat = ConfigManager.TryGetConfigData(ConfigName.CombatControl,eid) + local EffectCombat = ConfigManager.TryGetConfigData(ConfigName.CombatControl, eid) skill[1] = skillId - skill[2] = EffectCombat.KeyFrame/1000 - skill[3] = EffectCombat.SkillDuration/1000 + skill[2] = EffectCombat.KeyFrame / 1000 + skill[3] = EffectCombat.SkillDuration / 1000 skill[4] = EffectCombat.SkillNumber local index = 1 for i = 1, #effectList do - local effectGroup = { target[i][1] } -- 效果目标 + local effectGroup = { target[i][1] } -- 效果目标 for j = 1, #effectList[i] do - local effect = { effectList[i][j] } -- 效果Id + local effect = { effectList[i][j] } -- 效果Id for k = 1, #effectArgsList[index] do effect[k + 1] = effectArgsList[index][k] -- 效果参数 end @@ -337,101 +338,101 @@ end -- 获取技能表现id function BattleUtil.GetCombatIdBySkin(skillId, skinId) - local skillConfig=ConfigManager.TryGetConfigData(ConfigName.SkillLogicConfig,skillId) + local skillConfig = ConfigManager.TryGetConfigData(ConfigName.SkillLogicConfig, skillId) local effectIds = skillConfig.SkillDisplay - local eid=0 + local eid = 0 local skin = skinId or 0 if effectIds then for i = 1, #effectIds do if effectIds[i][1] == skin then - eid=effectIds[i][2] + eid = effectIds[i][2] end end end - if eid==0 then - eid=effectIds[1][2] + if eid == 0 then + eid = effectIds[1][2] end return eid end --- -function BattleUtil.ChooseTarget(role, chooseId,queryType) +-- +function BattleUtil.ChooseTarget(role, chooseId, queryType) local chooseType = floor(chooseId / 100000) % 10 local chooseLimit = floor(chooseId / 10000) % 10 - local chooseWeight = floor(chooseId / 100) % 100 + local chooseWeight = floor(chooseId / 100) % 100 local sort = floor(chooseId / 10) % 10 local num = chooseId % 10 local arr -- 选择类型 if chooseType == 1 then - if queryType and queryType==1 then - arr = RoleManager.QueryNoDead(function (r) return r.camp == role.camp end) + if queryType and queryType == 1 then + arr = RoleManager.QueryNoDead(function(r) return r.camp == role.camp end) else - arr = RoleManager.Query(function (r) return r.camp == role.camp end) + arr = RoleManager.Query(function(r) return r.camp == role.camp end) end elseif chooseType == 2 then - if role.lockTarget and not role.lockTarget:IsRealDead() and not role.lockTarget.isExile then --嘲讽时对单个敌军生效 - return {role.lockTarget} + if role.lockTarget and not role.lockTarget:IsRealDead() and not role.lockTarget.isExile then --嘲讽时对单个敌军生效 + return { role.lockTarget } end - arr = RoleManager.Query(function (r) return r.camp ~= role.camp end) + arr = RoleManager.Query(function(r) return r.camp ~= role.camp end) elseif chooseType == 3 then if role.ctrl_blind then --致盲时自身变随机友军 - arr = RoleManager.Query(function (r) return r.camp == role.camp end) + arr = RoleManager.Query(function(r) return r.camp == role.camp end) BattleUtil.RandomList(arr) - return {arr[1]} + return { arr[1] } end - return {role} + return { role } elseif chooseType == 4 then if role.lockTarget and not role.lockTarget:IsRealDead() and not role.lockTarget.isExile then --嘲讽时对仇恨目标生效 - return {role.lockTarget} + return { role.lockTarget } end if role.ctrl_blind then --致盲时仇恨目标变随机 - arr = RoleManager.Query(function (r) return r.camp ~= role.camp end) + arr = RoleManager.Query(function(r) return r.camp ~= role.camp end) BattleUtil.RandomList(arr) - return {arr[1]} + return { arr[1] } end - return {RoleManager.GetAggro(role)} + return { RoleManager.GetAggro(role) } elseif chooseType == 5 then --神兵对应的英雄 - local weaponer=RoleManager.GetRoleByCampAndPos(role.camp,role.position) - return {weaponer} + local weaponer = RoleManager.GetRoleByCampAndPos(role.camp, role.position) + return { weaponer } else arr = RoleManager.Query() end - + --选择范围 - if chooseLimit == 0 then --选择全体不做任何操作 - elseif chooseLimit == 1 then-- 前排 + if chooseLimit == 0 then --选择全体不做任何操作 + elseif chooseLimit == 1 then -- 前排 local tempArr = BattleUtil.ChooseFRow(arr) - if #tempArr == 0 then -- 没有选择后排 + if #tempArr == 0 then -- 没有选择后排 tempArr = BattleUtil.ChooseBRow(arr) end arr = tempArr - elseif chooseLimit == 2 then-- 后排 + elseif chooseLimit == 2 then -- 后排 local tempArr = BattleUtil.ChooseBRow(arr) - if #tempArr == 0 then -- 没有选择前排 + if #tempArr == 0 then -- 没有选择前排 tempArr = BattleUtil.ChooseFRow(arr) end arr = tempArr - elseif chooseLimit == 3 then-- 对列 - local target=RoleManager.GetAggro(role) + elseif chooseLimit == 3 then -- 对列 + local target = RoleManager.GetAggro(role) if target then - local myCol = target.position % 3 - local tempArr = BattleUtil.ChooseCol(arr, myCol) - if #tempArr == 0 then -- 对列没有人,按顺序找到有人得列 - for i = 1, 3 do - local col = i % 3 -- 0 表示第三列嗷 - tempArr = BattleUtil.ChooseCol(arr, col) - if #tempArr ~= 0 then - break + local myCol = target.position % 3 + local tempArr = BattleUtil.ChooseCol(arr, myCol) + if #tempArr == 0 then -- 对列没有人,按顺序找到有人得列 + for i = 1, 3 do + local col = i % 3 -- 0 表示第三列嗷 + tempArr = BattleUtil.ChooseCol(arr, col) + if #tempArr ~= 0 then + break + end end end - end - arr = tempArr - end + arr = tempArr + end elseif chooseLimit == 4 then -- 处于灼烧状态 local tempArr = {} for i = 1, #arr do - if BattleLogic.BuffMgr:HasBuff(arr[i], BuffName.DOT, function (buff) return buff.damageType == DotType.Burn end,role,1) then + if BattleLogic.BuffMgr:HasBuff(arr[i], BuffName.DOT, function(buff) return buff.damageType == DotType.Burn end, role, 1) then table.insert(tempArr, arr[i]) end end @@ -445,8 +446,8 @@ function BattleUtil.ChooseTarget(role, chooseId,queryType) end arr = tempArr elseif chooseLimit == 6 then --两纵排单位 - local tempArr=BattleUtil.ChooseTowCol(arr) - arr=tempArr + local tempArr = BattleUtil.ChooseTowCol(arr) + arr = tempArr elseif chooseLimit == 7 then --佛阵营 local tempArr = {} for i = 1, #arr do @@ -460,96 +461,96 @@ function BattleUtil.ChooseTarget(role, chooseId,queryType) -- 选择条件 if chooseWeight == 0 or role.ctrl_blind then --致盲时排序无效 BattleUtil.RandomList(arr) - elseif chooseWeight == 1 then -- 生命值 - if sort~=0 then + elseif chooseWeight == 1 then -- 生命值 + if sort ~= 0 then BattleUtil.SortByProp(arr, RoleDataName.Hp, sort) end elseif chooseWeight == 2 then -- 血量百分比(不含不灭) BattleUtil.SortByHpFactor(arr, sort) --选血量百分比最低的 不选择有不灭的,如果伤害要选有不灭的 需处理 BattleUtil.RemoveNoDeadRole(arr) - elseif chooseWeight == 3 then -- 攻击力 + elseif chooseWeight == 3 then -- 攻击力 BattleUtil.SortByProp(arr, RoleDataName.Attack, sort) - elseif chooseWeight == 4 then -- 防御 + elseif chooseWeight == 4 then -- 防御 BattleUtil.SortByProp(arr, RoleDataName.PhysicalDefence, sort) - elseif chooseWeight == 5 then -- 护甲 + elseif chooseWeight == 5 then -- 护甲 BattleUtil.SortByProp(arr, RoleDataName.PhysicalDefence, sort) - elseif chooseWeight == 6 then -- 魔抗 + elseif chooseWeight == 6 then -- 魔抗 BattleUtil.SortByProp(arr, RoleDataName.MagicDefence, sort) - elseif chooseWeight == 7 then -- 对位及其相邻目标 + elseif chooseWeight == 7 then -- 对位及其相邻目标 arr = RoleManager.GetNeighbor(role, chooseType) - elseif chooseWeight == 8 then -- 对位 - if num==1 then - arr=RoleManager.GetAggroHero(role,arr) + elseif chooseWeight == 8 then -- 对位 + if num == 1 then + arr = RoleManager.GetAggroHero(role, arr) else arr = RoleManager.GetArrAggroList(role, arr) - end - -- elseif chooseWeight == 9 then -- 展位距离 - -- BattleUtil.Sort(arr, function(a, b) - -- local r1 = math.abs(role.position - a.position) * 10 + a.position - -- local r2 = math.abs(role.position - b.position) * 10 + b.position - -- if sort == 1 then return r1 > r2 else return r1 < r2 end - -- end) - elseif chooseWeight ==9 then --攻击最高且没被放逐过 - local list=role.exileTargets + end + -- elseif chooseWeight == 9 then -- 展位距离 + -- BattleUtil.Sort(arr, function(a, b) + -- local r1 = math.abs(role.position - a.position) * 10 + a.position + -- local r2 = math.abs(role.position - b.position) * 10 + b.position + -- if sort == 1 then return r1 > r2 else return r1 < r2 end + -- end) + elseif chooseWeight == 9 then --攻击最高且没被放逐过 + local list = role.exileTargets local tempArr = {} - local team = RoleManager.Query(function (r) return r.camp ~= role.camp end) + local team = RoleManager.Query(function(r) return r.camp ~= role.camp end) if list then for key, value in pairs(team) do - if not value:IsRealDead() and not BattleUtil.ChecklistIsContainValue(role.exileTargets,value) then + if not value:IsRealDead() and not BattleUtil.ChecklistIsContainValue(role.exileTargets, value) then --return arr[i] - table.insert(tempArr,value) + table.insert(tempArr, value) end end end - BattleUtil.SortByProp(tempArr,RoleDataName.Attack,sort) - arr=tempArr - elseif chooseWeight ==10 then --剩余血量百分比低于25%且生命绝对值最小 - return {BattleUtil.GetHpPctLessThanPctHero(arr,0.25)} - elseif chooseWeight ==11 then --剩余血量百分比低于32%且生命绝对值最小 - return {BattleUtil.GetHpPctLessThanPctHero(arr,0.32)} - elseif chooseWeight ==12 then --剩余血量百分比低于40%且生命绝对值最小 - return {BattleUtil.GetHpPctLessThanPctHero(arr,0.40)} - elseif chooseWeight ==13 then --剩余血量百分比低于50%且生命绝对值最小 - return {BattleUtil.GetHpPctLessThanPctHero(arr,0.50)} - elseif chooseWeight ==14 then --我方战位最靠前的单位 的对位及相邻 - local list=nil - list=RoleManager.Query(function (r) return r.camp == role.camp end) - if list and #list>0 then - arr=RoleManager.GetNeighbor(list[1], chooseType) + BattleUtil.SortByProp(tempArr, RoleDataName.Attack, sort) + arr = tempArr + elseif chooseWeight == 10 then --剩余血量百分比低于25%且生命绝对值最小 + return { BattleUtil.GetHpPctLessThanPctHero(arr, 0.25) } + elseif chooseWeight == 11 then --剩余血量百分比低于32%且生命绝对值最小 + return { BattleUtil.GetHpPctLessThanPctHero(arr, 0.32) } + elseif chooseWeight == 12 then --剩余血量百分比低于40%且生命绝对值最小 + return { BattleUtil.GetHpPctLessThanPctHero(arr, 0.40) } + elseif chooseWeight == 13 then --剩余血量百分比低于50%且生命绝对值最小 + return { BattleUtil.GetHpPctLessThanPctHero(arr, 0.50) } + elseif chooseWeight == 14 then --我方战位最靠前的单位 的对位及相邻 + local list = nil + list = RoleManager.Query(function(r) return r.camp == role.camp end) + if list and #list > 0 then + arr = RoleManager.GetNeighbor(list[1], chooseType) end - elseif chooseWeight ==15 then --我方阵亡 + elseif chooseWeight == 15 then --我方阵亡 --BattleUtil.WaitForTrigger(BattleLogic.GameDeltaTime,function() - local aaa=RoleManager.GetDeadRole(role.camp) - if aaa~=nil then - --LogError(aaa.position) - end - if aaa then - aaa.isRealDead=false - arr={} - table.insert(arr,aaa) - BattleUtil.SortByPos(arr, sort) - return {arr[1]} - end + local aaa = RoleManager.GetDeadRole(role.camp) + if aaa ~= nil then + --LogError(aaa.position) + end + if aaa then + aaa.isRealDead = false + arr = {} + table.insert(arr, aaa) + BattleUtil.SortByPos(arr, sort) + return { arr[1] } + end --end) - elseif chooseWeight ==16 then --(血量百分比 含不灭) + elseif chooseWeight == 16 then --(血量百分比 含不灭) BattleUtil.SortByHpFactor(arr, sort) - elseif chooseWeight ==17 then --怒气 - if sort~=0 then + elseif chooseWeight == 17 then --怒气 + if sort ~= 0 then --BattleUtil.SortByProp(arr, RoleDataName.Hp, sort) BattleUtil.SortByRage(arr, sort) end - elseif chooseWeight ==18 then --剩余血量百分比低于30%且生命绝对值最小 - return {BattleUtil.GetHpPctLessThanPctHero(arr,0.30)} - elseif chooseWeight ==19 then --剩余血量百分比低于35%且生命绝对值最小 - return {BattleUtil.GetHpPctLessThanPctHero(arr,0.35)} - elseif chooseWeight ==20 then --剩余血量百分比低于35%且生命绝对值最小 - return {BattleUtil.GetHpPctLessThanPctHero(arr,0.45)} + elseif chooseWeight == 18 then --剩余血量百分比低于30%且生命绝对值最小 + return { BattleUtil.GetHpPctLessThanPctHero(arr, 0.30) } + elseif chooseWeight == 19 then --剩余血量百分比低于35%且生命绝对值最小 + return { BattleUtil.GetHpPctLessThanPctHero(arr, 0.35) } + elseif chooseWeight == 20 then --剩余血量百分比低于35%且生命绝对值最小 + return { BattleUtil.GetHpPctLessThanPctHero(arr, 0.45) } end local finalArr = {} if num == 0 then finalArr = arr - else + else for i = 1, num do if arr[i] then table.insert(finalArr, arr[i]) @@ -558,27 +559,28 @@ function BattleUtil.ChooseTarget(role, chooseId,queryType) end -- table.sort(finalArr, function(a, b) - -- return a.position < b.position + -- return a.position < b.position -- end) return finalArr end + --获取生命百分比少于指定百分比且生命置最少 -function BattleUtil.GetHpPctLessThanPctHero(arr,pct) - local hp=0 - local hero=nil +function BattleUtil.GetHpPctLessThanPctHero(arr, pct) + local hp = 0 + local hero = nil for i = 1, #arr do - local aaa=arr[i] - local curHp=aaa:GetRoleData(RoleDataName.Hp) - local r1 = curHp /aaa:GetRoleData(RoleDataName.MaxHp) - if r1= 0 then if defRole:GetRoleData(RoleDataName.Hp) <= 0 and not defRole:IsDead() then defRole:SetDead(damage) - defRole.Event:DispatchEvent(BattleEventName.RoleDead, atkRole,skill) - atkRole.Event:DispatchEvent(BattleEventName.RoleKill, defRole,skill) + defRole.Event:DispatchEvent(BattleEventName.RoleDead, atkRole, skill) + atkRole.Event:DispatchEvent(BattleEventName.RoleKill, defRole, skill) BattleLogic.Event:DispatchEvent(BattleEventName.BattleRoleDead, defRole, atkRole) - atkRole.Event:DispatchEvent(BattleEventName.Seckill, defRole,damage,nil,finalDmg) + atkRole.Event:DispatchEvent(BattleEventName.Seckill, defRole, damage, nil, finalDmg) defRole.Event:DispatchEvent(BattleEventName.BeSeckill, atkRole) BattleLogic.Event:DispatchEvent(BattleEventName.Seckill, atkRole, defRole) end atkRole.Event:DispatchEvent(BattleEventName.RoleDamage, defRole, damage, false, finalDmg, 0, false, skill) defRole.Event:DispatchEvent(BattleEventName.RoleBeDamaged, atkRole, damage, false, finalDmg, 0, false, skill) - BattleLogic.Event:DispatchEvent(BattleEventName.RoleDamage, atkRole, defRole, damage, false, finalDmg, 0, false, skill) - BattleLogic.Event:DispatchEvent(BattleEventName.RoleBeDamaged, defRole, atkRole, damage, false, finalDmg, 0, false, skill) + BattleLogic.Event:DispatchEvent(BattleEventName.RoleDamage, atkRole, defRole, damage, false, finalDmg, 0, false, + skill) + BattleLogic.Event:DispatchEvent(BattleEventName.RoleBeDamaged, defRole, atkRole, damage, false, finalDmg, 0, + false, skill) if skill then atkRole.Event:DispatchEvent(BattleEventName.RoleHit, defRole, damage, nil, finalDmg, nil, skill) defRole.Event:DispatchEvent(BattleEventName.RoleBeHit, atkRole, damage, nil, finalDmg, nil, skill) @@ -698,13 +701,13 @@ end function BattleUtil.SeckillHP(skill, atkRole, defRole, pro) -- 灵兽无效 if defRole.type == BattleUnitType.Monster or defRole.type == BattleUnitType.Player or defRole.type == BattleUnitType.Weapon then - return + return end - local damage = floor(BattleUtil.FP_Mul(defRole:GetRoleData(RoleDataName.MaxHp),pro)) - local realDamage=damage - local damagingFunc = function(dmgDeduction) - realDamage = dmgDeduction - damage=realDamage + local damage = floor(BattleUtil.FP_Mul(defRole:GetRoleData(RoleDataName.MaxHp), pro)) + local realDamage = damage + local damagingFunc = function(dmgDeduction) + realDamage = dmgDeduction + damage = realDamage end defRole.Event:DispatchEvent(BattleEventName.CheckFalseNoDead, damagingFunc, atkRole, realDamage, skill) local finalDmg = defRole.data:SubValue(RoleDataName.Hp, damage) @@ -712,16 +715,18 @@ function BattleUtil.SeckillHP(skill, atkRole, defRole, pro) if defRole:GetRoleData(RoleDataName.Hp) <= 0 and not defRole:IsDead() then defRole:SetDead(damage) defRole.Event:DispatchEvent(BattleEventName.RoleDead, atkRole) - atkRole.Event:DispatchEvent(BattleEventName.RoleKill, defRole,skill) + atkRole.Event:DispatchEvent(BattleEventName.RoleKill, defRole, skill) BattleLogic.Event:DispatchEvent(BattleEventName.BattleRoleDead, defRole, atkRole) - atkRole.Event:DispatchEvent(BattleEventName.Seckill, defRole,damage,nil,finalDmg) + atkRole.Event:DispatchEvent(BattleEventName.Seckill, defRole, damage, nil, finalDmg) defRole.Event:DispatchEvent(BattleEventName.BeSeckill, atkRole) BattleLogic.Event:DispatchEvent(BattleEventName.Seckill, atkRole, defRole) end atkRole.Event:DispatchEvent(BattleEventName.RoleDamage, defRole, damage, false, finalDmg, 0, false, skill) defRole.Event:DispatchEvent(BattleEventName.RoleBeDamaged, atkRole, damage, false, finalDmg, 0, false, skill) - BattleLogic.Event:DispatchEvent(BattleEventName.RoleDamage, atkRole, defRole, damage, false, finalDmg, 0, false, skill) - BattleLogic.Event:DispatchEvent(BattleEventName.RoleBeDamaged, defRole, atkRole, damage, false, finalDmg, 0, false, skill) + BattleLogic.Event:DispatchEvent(BattleEventName.RoleDamage, atkRole, defRole, damage, false, finalDmg, 0, false, + skill) + BattleLogic.Event:DispatchEvent(BattleEventName.RoleBeDamaged, defRole, atkRole, damage, false, finalDmg, 0, + false, skill) if skill then atkRole.Event:DispatchEvent(BattleEventName.RoleHit, defRole, damage, nil, finalDmg, nil, skill) defRole.Event:DispatchEvent(BattleEventName.RoleBeHit, atkRole, damage, nil, finalDmg, nil, skill) @@ -732,13 +737,14 @@ function BattleUtil.SeckillHP(skill, atkRole, defRole, pro) end -- 计算真实伤害 -function BattleUtil.ApplyDamage(skill, atkRole, defRole, damage, bCrit, damageType, dotType,isDirect) - if defRole==nil then - return +function BattleUtil.ApplyDamage(skill, atkRole, defRole, damage, bCrit, damageType, dotType, isDirect) + LogError("vvvvvvvvvvvvvvvvvvvvv" .. damage) + if defRole == nil then + return end -- 灵兽无效 if defRole.type == BattleUnitType.Monster or defRole.type == BattleUnitType.Player or defRole.type == BattleUnitType.Weapon then - return + return end bCrit = bCrit or false @@ -746,43 +752,49 @@ function BattleUtil.ApplyDamage(skill, atkRole, defRole, damage, bCrit, damageTy -- 计算护盾减伤 - damage = BattleUtil.CalShield(atkRole, defRole, damage,skill) + damage = BattleUtil.CalShield(atkRole, defRole, damage, skill) --加入被动效果 - local damagingFunc = function(dmgDeduction) - damage = damage - dmgDeduction + local damagingFunc = function(dmgDeduction) + damage = damage - dmgDeduction end - atkRole.Event:DispatchEvent(BattleEventName.PassiveDamaging, damagingFunc, defRole, damage, skill, dotType, bCrit,damageType, dotType,isDirect) + atkRole.Event:DispatchEvent(BattleEventName.PassiveDamaging, damagingFunc, defRole, damage, skill, dotType, bCrit, + damageType, dotType, isDirect) defRole.Event:DispatchEvent(BattleEventName.PassiveBeDamaging, damagingFunc, atkRole, damage, skill, dotType, bCrit) - BattleLogic.Event:DispatchEvent(BattleEventName.PassiveDamaging, damagingFunc, atkRole, defRole, damage, skill, dotType, bCrit,damageType, dotType,isDirect) + BattleLogic.Event:DispatchEvent(BattleEventName.PassiveDamaging, damagingFunc, atkRole, defRole, damage, skill, + dotType, bCrit, damageType, dotType, isDirect) -- 造成的最终伤害 - local damagingFunc = function(dmgDeduction) - damage = damage - dmgDeduction + local damagingFunc = function(dmgDeduction) + damage = damage - dmgDeduction end - atkRole.Event:DispatchEvent(BattleEventName.FinalDamage, damagingFunc, defRole, damage, skill, dotType, bCrit, damageType) - defRole.Event:DispatchEvent(BattleEventName.FinalBeDamage, damagingFunc, atkRole, damage, skill, dotType, bCrit, damageType) - defRole.Event:DispatchEvent(BattleEventName.FinalBeDamageEnd, damagingFunc, atkRole, damage, skill, dotType, bCrit, damageType,isDirect) - BattleLogic.Event:DispatchEvent(BattleEventName.FinalDamage, damagingFunc, atkRole, defRole, damage, skill, dotType, bCrit, damageType) + atkRole.Event:DispatchEvent(BattleEventName.FinalDamage, damagingFunc, defRole, damage, skill, dotType, bCrit, + damageType) + defRole.Event:DispatchEvent(BattleEventName.FinalBeDamage, damagingFunc, atkRole, damage, skill, dotType, bCrit, + damageType) + defRole.Event:DispatchEvent(BattleEventName.FinalBeDamageEnd, damagingFunc, atkRole, damage, skill, dotType, bCrit, + damageType, isDirect) + BattleLogic.Event:DispatchEvent(BattleEventName.FinalDamage, damagingFunc, atkRole, defRole, damage, skill, dotType, + bCrit, damageType) - -- - return BattleUtil.FinalDamage(skill, atkRole, defRole, damage, bCrit, damageType, dotType,isDirect) + -- + return BattleUtil.FinalDamage(skill, atkRole, defRole, damage, bCrit, damageType, dotType, isDirect) end -- 计算真实伤害(没有被动增伤) -function BattleUtil.ApplyDamageNoPassive(skill, atkRole, defRole, damage, bCrit, damageType, dotType,isDirect) +function BattleUtil.ApplyDamageNoPassive(skill, atkRole, defRole, damage, bCrit, damageType, dotType, isDirect) -- 灵兽无效 if defRole.type == BattleUnitType.Monster or defRole.type == BattleUnitType.Player then - return + return end -- 计算护盾减伤 - damage = BattleUtil.CalShield(atkRole, defRole, damage,skill) + damage = BattleUtil.CalShield(atkRole, defRole, damage, skill) -- 造成的最终伤害 local damagingFunc = function(dmgDeduction) --不计算增伤只计算减伤 - if dmgDeduction<0 then - return - end - damage = damage - dmgDeduction + if dmgDeduction < 0 then + return + end + damage = damage - dmgDeduction end --atkRole.Event:DispatchEvent(BattleEventName.PassiveDamaging, damagingFunc, defRole, damage, skill, dotType, bCrit,damageType, dotType,isDirect) @@ -791,55 +803,59 @@ function BattleUtil.ApplyDamageNoPassive(skill, atkRole, defRole, damage, bCrit, --atkRole.Event:DispatchEvent(BattleEventName.FinalDamage, damagingFunc, defRole, damage, skill, dotType, bCrit, damageType) - defRole.Event:DispatchEvent(BattleEventName.FinalBeDamage, damagingFunc, atkRole, damage, skill, dotType, bCrit, damageType) - defRole.Event:DispatchEvent(BattleEventName.FinalBeDamageEnd, damagingFunc, atkRole, damage, skill, dotType, bCrit, damageType,isDirect) + defRole.Event:DispatchEvent(BattleEventName.FinalBeDamage, damagingFunc, atkRole, damage, skill, dotType, bCrit, + damageType) + defRole.Event:DispatchEvent(BattleEventName.FinalBeDamageEnd, damagingFunc, atkRole, damage, skill, dotType, bCrit, + damageType, isDirect) --BattleLogic.Event:DispatchEvent(BattleEventName.FinalDamage, damagingFunc, atkRole, defRole, damage, skill, dotType, bCrit, damageType) - -- - -- return BattleUtil.FinalDamage(skill, atkRole, defRole, damage, bCrit, damageType, dotType,isDirect) + -- + -- return BattleUtil.FinalDamage(skill, atkRole, defRole, damage, bCrit, damageType, dotType,isDirect) if damage < 0 then damage = 0 end - - if skill and skill.type==BattleSkillType.Special then - skill.owner.superSkillDamage=damage + + if skill and skill.type == BattleSkillType.Special then + skill.owner.superSkillDamage = damage end --计算血量防护 - local realDamage=damage + local realDamage = damage --血量防护只会防直接伤害 也能防护间接伤害 2023/01/11 if defRole.bloodShield then - realDamage=math.abs(defRole.bloodShield:CountBloodValue(damage,atkRole)) - -- damage=realDamage + realDamage = math.abs(defRole.bloodShield:CountBloodValue(damage, atkRole)) + -- damage=realDamage end --检测历战之躯 -- 造成的最终伤害 - local damagingFunc = function(dmgDeduction) - realDamage = realDamage - dmgDeduction - damage=realDamage + local damagingFunc = function(dmgDeduction) + realDamage = realDamage - dmgDeduction + damage = realDamage end - defRole.Event:DispatchEvent(BattleEventName.CheckLiZhanZhiQu, damagingFunc, atkRole, realDamage, skill, dotType, bCrit, damageType,isDirect) - local isImmune=BattleUtil.CheckDamageIsImmune(atkRole,defRole) + defRole.Event:DispatchEvent(BattleEventName.CheckLiZhanZhiQu, damagingFunc, atkRole, realDamage, skill, dotType, + bCrit, damageType, isDirect) + local isImmune = BattleUtil.CheckDamageIsImmune(atkRole, defRole) if isImmune then - realDamage=0 - damage=0 + realDamage = 0 + damage = 0 end - --御甲过滤后的伤害只会处理扣血 by: wangzhenxing shihongyi 2021/09/27 - --检测伪不灭 - local damagingFunc = function(dmgDeduction) - realDamage = dmgDeduction - damage=realDamage + --御甲过滤后的伤害只会处理扣血 by: wangzhenxing shihongyi 2021/09/27 + --检测伪不灭 + local damagingFunc = function(dmgDeduction) + realDamage = dmgDeduction + damage = realDamage end - defRole.Event:DispatchEvent(BattleEventName.CheckFalseNoDead, damagingFunc, atkRole, realDamage, skill, dotType, bCrit, damageType,isDirect) + defRole.Event:DispatchEvent(BattleEventName.CheckFalseNoDead, damagingFunc, atkRole, realDamage, skill, dotType, + bCrit, damageType, isDirect) - local isToDied=false + local isToDied = false --检测时空猪八戒格挡致死伤害 - local checkDamageShift = function(isDead) - isToDied=isDead + local checkDamageShift = function(isDead) + isToDied = isDead end - BattleLogic.Event:DispatchEvent(BattleEventName.CheckDamShift, checkDamageShift, atkRole, realDamage, defRole,skill) + BattleLogic.Event:DispatchEvent(BattleEventName.CheckDamShift, checkDamageShift, atkRole, realDamage, defRole, skill) --格挡成功 if isToDied then return end - local finalDmg = defRole.data:SubValue(RoleDataName.Hp,realDamage) + local finalDmg = defRole.data:SubValue(RoleDataName.Hp, realDamage) if finalDmg >= 0 then if defRole:GetRoleData(RoleDataName.Hp) <= 0 and not defRole:IsDead() then defRole:SetDead(damage) @@ -849,7 +865,8 @@ function BattleUtil.ApplyDamageNoPassive(skill, atkRole, defRole, damage, bCrit, end --atkRole.Event:DispatchEvent(BattleEventName.RoleDamage, defRole, damage, bCrit, finalDmg, damageType, dotType, skill) - defRole.Event:DispatchEvent(BattleEventName.RoleBeDamaged, atkRole, damage, bCrit, finalDmg, damageType, dotType, skill,isImmune) + defRole.Event:DispatchEvent(BattleEventName.RoleBeDamaged, atkRole, damage, bCrit, finalDmg, damageType, dotType, + skill, isImmune) --BattleLogic.Event:DispatchEvent(BattleEventName.RoleDamage, atkRole, defRole, damage, bCrit, finalDmg, damageType, dotType, skill) --BattleLogic.Event:DispatchEvent(BattleEventName.RoleBeDamaged, defRole, atkRole, damage, bCrit, finalDmg, damageType, dotType, skill) if bCrit then @@ -858,19 +875,21 @@ function BattleUtil.ApplyDamageNoPassive(skill, atkRole, defRole, damage, bCrit, end if skill then --atkRole.Event:DispatchEvent(BattleEventName.RoleHit, defRole, damage, bCrit, finalDmg, damageType, skill,isDirect) - defRole.Event:DispatchEvent(BattleEventName.RoleBeHit, atkRole, damage, bCrit, finalDmg, damageType, skill,isDirect) + defRole.Event:DispatchEvent(BattleEventName.RoleBeHit, atkRole, damage, bCrit, finalDmg, damageType, skill, + isDirect) --如果目标是主燃烧目标 or 目标身上有燃烧效果 - if atkRole.curMainTarget==defRole or BattleLogic.BuffMgr:HasBuff(defRole, BuffName.DOT,function(buff) return buff.damageType == 1 end) then - --atkRole.Event:DispatchEvent(BattleEventName.HitRoleInBurn,skill,defRole) + if atkRole.curMainTarget == defRole or BattleLogic.BuffMgr:HasBuff(defRole, BuffName.DOT, function(buff) return + buff.damageType == 1 end) then + --atkRole.Event:DispatchEvent(BattleEventName.HitRoleInBurn,skill,defRole) end end --如果不是技能带的伤害,并且是直接伤害就,,,,, --用于处理不触发特性并且是直接伤害的伤害 isDirect 暂时先为bool值,后期可根据需求做修改扩展 by:王振兴 2020/10/12 16:18 if isDirect and not skill then --atkRole.Event:DispatchEvent(BattleEventName.RoleHit, defRole, damage, bCrit, finalDmg, damageType, skill,isDirect) - defRole.Event:DispatchEvent(BattleEventName.RoleBeHit, atkRole, damage, bCrit, finalDmg, damageType, skill,isDirect) + defRole.Event:DispatchEvent(BattleEventName.RoleBeHit, atkRole, damage, bCrit, finalDmg, damageType, skill, + isDirect) end - end -- 战斗记录用 @@ -888,47 +907,47 @@ function BattleUtil.ApplyDamageNoPassive(skill, atkRole, defRole, damage, bCrit, return damage end - - - -- 怒气计算 -function BattleUtil.CalRage(caster, target, value, countType,isBorrow) - if target==nil then +function BattleUtil.CalRage(caster, target, value, countType, isBorrow) + if target == nil then return end -- 角色身上有无敌盾,不扣除怒气 by:wangzhenxing 2020/08/10 14:56 - if (countType==3 or countType==4) -- 降怒 - and (target.isImmuneReduceRage -- 免疫降怒 或者 有无敌盾 - or BattleLogic.BuffMgr:HasBuff(target, BuffName.Shield, function (buff) return buff.shieldType and buff.shieldType == ShieldTypeName.AllReduce end)) + if (countType == 3 or countType == 4) -- 降怒 + and (target.isImmuneReduceRage -- 免疫降怒 或者 有无敌盾 + or BattleLogic.BuffMgr:HasBuff(target, BuffName.Shield, function(buff) return buff.shieldType and + buff.shieldType == ShieldTypeName.AllReduce end)) then return end - if (countType==1 or countType==2) and target.isSuppress and caster~=target then + if (countType == 1 or countType == 2) and target.isSuppress and caster ~= target then return end - local lastRage=target.Rage + local lastRage = target.Rage --如果每回合减的怒气超过了每回合上限就不再减怒 - if (countType==3 or countType==4) and target.RoundMaxSubRage~=0 and target.RoundMaxSubRage<=target.AllSubRage then - return + if (countType == 3 or countType == 4) and target.RoundMaxSubRage ~= 0 and target.RoundMaxSubRage <= target.AllSubRage then + return end --这个减的怒气+已经间的怒气> 怒气限制 - if (countType==3 or countType==4) and target.RoundMaxSubRage~=0 and value+target.AllSubRage>target.RoundMaxSubRage then - value=target.RoundMaxSubRage-target.AllSubRage + if (countType == 3 or countType == 4) and target.RoundMaxSubRage ~= 0 and value + target.AllSubRage > target.RoundMaxSubRage then + value = target.RoundMaxSubRage - target.AllSubRage end - local changeRage=function(num) - value=num + local changeRage = function(num) + value = num end - BattleLogic.Event:DispatchEvent(BattleEventName.ChangeRoleRage,changeRage,caster,target,value,countType) + BattleLogic.Event:DispatchEvent(BattleEventName.ChangeRoleRage, changeRage, caster, target, value, countType) -- 操作怒气 local deltaRage = target:AddRage(value, countType) - if (countType==3 or countType==4) and target.RoundMaxSubRage~=0 then - target.AllSubRage=target.AllSubRage-deltaRage + if (countType == 3 or countType == 4) and target.RoundMaxSubRage ~= 0 then + target.AllSubRage = target.AllSubRage - deltaRage end - if value==0 then - return + if value == 0 then + return end - caster.Event:DispatchEvent(BattleEventName.RecordRageChange, caster, target, deltaRage,countType,value,lastRage,isBorrow) - BattleLogic.Event:DispatchEvent(BattleEventName.RecordRageChange, caster, target, deltaRage,countType,value,lastRage,isBorrow) + caster.Event:DispatchEvent(BattleEventName.RecordRageChange, caster, target, deltaRage, countType, value, lastRage, + isBorrow) + BattleLogic.Event:DispatchEvent(BattleEventName.RecordRageChange, caster, target, deltaRage, countType, value, + lastRage, isBorrow) -- 用于记录统计 BattleLogic.Event:DispatchEvent(BattleEventName.RecordRage, caster, target, deltaRage) end @@ -936,122 +955,131 @@ end --检测是否有是金翅大鹏有不灭效果 function BattleUtil.CheckIsNoDead(target) if target then - return target.isHaveNoDead or BattleLogic.BuffMgr:HasBuff(target,BuffName.NoDead) + return target.isHaveNoDead or BattleLogic.BuffMgr:HasBuff(target, BuffName.NoDead) end return false end - --检测列表是否包含值 - function BattleUtil.ChecklistIsContainValue(_list,_value) +function BattleUtil.ChecklistIsContainValue(_list, _value) if _list and _value then for key, value in pairs(_list) do - if value ==_value then + if value == _value then return true end - end + end end return false end -- 根据id获取额外技能 function BattleUtil.GetExtraSkillbyId(id) - if id==1 then + if id == 1 then return ExtraReleaseSkill.skill1 - elseif id==2 then + elseif id == 2 then return ExtraReleaseSkill.skill2 - elseif id==3 then + elseif id == 3 then return ExtraReleaseSkill.skill3 - elseif id==4 then + elseif id == 4 then return ExtraReleaseSkill.skill4 - elseif id==5 then + elseif id == 5 then return ExtraReleaseSkill.skill5 - elseif id==6 then + elseif id == 6 then return ExtraReleaseSkill.skill6 end end -function BattleUtil.FinalDamage(skill, atkRole, defRole, damage, bCrit, damageType, dotType,isDirect) +function BattleUtil.FinalDamage(skill, atkRole, defRole, damage, bCrit, damageType, dotType, isDirect) -- 灵兽无效 if defRole.type == BattleUnitType.Monster or defRole.type == BattleUnitType.Player or defRole.type == BattleUnitType.Weapon then - return + return end if damage < 0 then damage = 0 end - - if skill and skill.type==BattleSkillType.Special then - skill.owner.superSkillDamage=damage + + if skill and skill.type == BattleSkillType.Special then + skill.owner.superSkillDamage = damage end --计算血量防护 - local realDamage=damage + local realDamage = damage --血量防护只会防直接伤害 也能防护间接伤害 2023/01/11 - if defRole.bloodShield then - realDamage=math.abs(defRole.bloodShield:CountBloodValue(damage,atkRole)) - -- damage=realDamage + if defRole.bloodShield then + realDamage = math.abs(defRole.bloodShield:CountBloodValue(damage, atkRole)) + -- damage=realDamage end --检测历战之躯 -- 造成的最终伤害 - local damagingFunc = function(dmgDeduction) - realDamage = realDamage - dmgDeduction - damage=realDamage + local damagingFunc = function(dmgDeduction) + realDamage = realDamage - dmgDeduction + damage = realDamage end - defRole.Event:DispatchEvent(BattleEventName.CheckLiZhanZhiQu, damagingFunc, atkRole, realDamage, skill, dotType, bCrit, damageType,isDirect) - local isImmune=BattleUtil.CheckDamageIsImmune(atkRole,defRole) + defRole.Event:DispatchEvent(BattleEventName.CheckLiZhanZhiQu, damagingFunc, atkRole, realDamage, skill, dotType, + bCrit, damageType, isDirect) + local isImmune = BattleUtil.CheckDamageIsImmune(atkRole, defRole) if isImmune then - realDamage=0 - damage=0 + realDamage = 0 + damage = 0 end --检测伪不灭 - local damagingFunc = function(dmgDeduction) - realDamage = dmgDeduction - damage=realDamage + local damagingFunc = function(dmgDeduction) + realDamage = dmgDeduction + damage = realDamage end - defRole.Event:DispatchEvent(BattleEventName.CheckFalseNoDead, damagingFunc, atkRole, realDamage, skill, dotType, bCrit, damageType,isDirect) - - local isToDied=false + defRole.Event:DispatchEvent(BattleEventName.CheckFalseNoDead, damagingFunc, atkRole, realDamage, skill, dotType, + bCrit, damageType, isDirect) + + local isToDied = false --检测时空猪八戒格挡致死伤害 - local checkDamageShift = function(isDead) - isToDied=isDead + local checkDamageShift = function(isDead) + isToDied = isDead end - BattleLogic.Event:DispatchEvent(BattleEventName.CheckDamShift, checkDamageShift, atkRole, realDamage, defRole,skill) + BattleLogic.Event:DispatchEvent(BattleEventName.CheckDamShift, checkDamageShift, atkRole, realDamage, defRole, skill) --格挡成功 if isToDied then return end - - --御甲过滤后的伤害只会处理扣血 by: wangzhenxing shihongyi 2021/09/27 - local finalDmg = defRole.data:SubValue(RoleDataName.Hp,realDamage) + + --御甲过滤后的伤害只会处理扣血 by: wangzhenxing shihongyi 2021/09/27 + local finalDmg = defRole.data:SubValue(RoleDataName.Hp, realDamage) if finalDmg >= 0 then if defRole:GetRoleData(RoleDataName.Hp) <= 0 and not defRole:IsDead() then defRole:SetDead(damage) defRole.Event:DispatchEvent(BattleEventName.RoleDead, atkRole) - atkRole.Event:DispatchEvent(BattleEventName.RoleKill, defRole,skill) - BattleLogic.Event:DispatchEvent(BattleEventName.BattleRoleDead, defRole, atkRole,skill,dotType) + atkRole.Event:DispatchEvent(BattleEventName.RoleKill, defRole, skill) + BattleLogic.Event:DispatchEvent(BattleEventName.BattleRoleDead, defRole, atkRole, skill, dotType) end - atkRole.Event:DispatchEvent(BattleEventName.RoleDamage, defRole, damage, bCrit, finalDmg, damageType, dotType, skill) - defRole.Event:DispatchEvent(BattleEventName.RoleBeDamaged, atkRole, damage, bCrit, finalDmg, damageType, dotType, skill,isImmune) - BattleLogic.Event:DispatchEvent(BattleEventName.RoleDamage, atkRole, defRole, damage, bCrit, finalDmg, damageType, dotType, skill) - BattleLogic.Event:DispatchEvent(BattleEventName.RoleBeDamaged, defRole, atkRole, damage, bCrit, finalDmg, damageType, dotType, skill) + atkRole.Event:DispatchEvent(BattleEventName.RoleDamage, defRole, damage, bCrit, finalDmg, damageType, dotType, + skill) + defRole.Event:DispatchEvent(BattleEventName.RoleBeDamaged, atkRole, damage, bCrit, finalDmg, damageType, dotType, + skill, isImmune) + BattleLogic.Event:DispatchEvent(BattleEventName.RoleDamage, atkRole, defRole, damage, bCrit, finalDmg, damageType, + dotType, skill) + BattleLogic.Event:DispatchEvent(BattleEventName.RoleBeDamaged, defRole, atkRole, damage, bCrit, finalDmg, + damageType, dotType, skill) if bCrit then atkRole.Event:DispatchEvent(BattleEventName.RoleCrit, defRole, damage, bCrit, finalDmg, damageType, skill) defRole.Event:DispatchEvent(BattleEventName.RoleBeCrit, atkRole, damage, bCrit, finalDmg, damageType, skill) end if skill then - atkRole.Event:DispatchEvent(BattleEventName.RoleHit, defRole, damage, bCrit, finalDmg, damageType, skill,isDirect) - defRole.Event:DispatchEvent(BattleEventName.RoleBeHit, atkRole, damage, bCrit, finalDmg, damageType, skill,isDirect) + atkRole.Event:DispatchEvent(BattleEventName.RoleHit, defRole, damage, bCrit, finalDmg, damageType, skill, + isDirect) + defRole.Event:DispatchEvent(BattleEventName.RoleBeHit, atkRole, damage, bCrit, finalDmg, damageType, skill, + isDirect) --如果目标是主燃烧目标 or 目标身上有燃烧效果 - if atkRole.curMainTarget==defRole or BattleLogic.BuffMgr:HasBuff(defRole, BuffName.DOT,function(buff) return buff.damageType == 1 end) then - atkRole.Event:DispatchEvent(BattleEventName.HitRoleInBurn,skill,defRole) + if atkRole.curMainTarget == defRole or BattleLogic.BuffMgr:HasBuff(defRole, BuffName.DOT, function(buff) return + buff.damageType == 1 end) then + atkRole.Event:DispatchEvent(BattleEventName.HitRoleInBurn, skill, defRole) end end --如果不是技能带的伤害,并且是直接伤害就,,,,, --用于处理不触发特性并且是直接伤害的伤害 isDirect 暂时先为bool值,后期可根据需求做修改扩展 by:王振兴 2020/10/12 16:18 if isDirect and not skill then - atkRole.Event:DispatchEvent(BattleEventName.RoleHit, defRole, damage, bCrit, finalDmg, damageType, skill,isDirect) - defRole.Event:DispatchEvent(BattleEventName.RoleBeHit, atkRole, damage, bCrit, finalDmg, damageType, skill,isDirect) + atkRole.Event:DispatchEvent(BattleEventName.RoleHit, defRole, damage, bCrit, finalDmg, damageType, skill, + isDirect) + defRole.Event:DispatchEvent(BattleEventName.RoleBeHit, atkRole, damage, bCrit, finalDmg, damageType, skill, + isDirect) end - end -- 战斗记录用 @@ -1071,93 +1099,103 @@ function BattleUtil.FinalDamage(skill, atkRole, defRole, damage, bCrit, damageTy end --计算盾的最终伤害 -function BattleUtil.FinalDamageCountShield(skill, atkRole, defRole, damage, bCrit, damageType, dotType,isDirect) +function BattleUtil.FinalDamageCountShield(skill, atkRole, defRole, damage, bCrit, damageType, dotType, isDirect) -- 灵兽无效 if defRole.type == BattleUnitType.Monster or defRole.type == BattleUnitType.Player then - return + return end -- 计算无敌盾减伤 - damage = BattleUtil.CalAllReduceShield(atkRole, defRole, damage,skill) - + damage = BattleUtil.CalAllReduceShield(atkRole, defRole, damage, skill) + if damage < 0 then damage = 0 end --计算主角增伤 - if atkRole.type==BattleUnitType.Monster and atkRole.isPlayer then - damage=floor(damage*(1+atkRole:GetRoleData(RoleDataName.DamageBocusFactor))) + if atkRole.type == BattleUnitType.Monster and atkRole.isPlayer then + damage = floor(damage * (1 + atkRole:GetRoleData(RoleDataName.DamageBocusFactor))) end - if skill and skill.type==BattleSkillType.Special then - skill.owner.superSkillDamage=damage + if skill and skill.type == BattleSkillType.Special then + skill.owner.superSkillDamage = damage end --计算血量防护 - local realDamage=damage + local realDamage = damage --血量防护只会防直接伤害 也能防护间接伤害 2023/01/11 if defRole.bloodShield then - realDamage=math.abs(defRole.bloodShield:CountBloodValue(damage,atkRole)) - -- damage=realDamage + realDamage = math.abs(defRole.bloodShield:CountBloodValue(damage, atkRole)) + -- damage=realDamage end --检测历战之躯 -- 造成的最终伤害 - local damagingFunc = function(dmgDeduction) - realDamage = realDamage - dmgDeduction - damage=realDamage + local damagingFunc = function(dmgDeduction) + realDamage = realDamage - dmgDeduction + damage = realDamage end - defRole.Event:DispatchEvent(BattleEventName.CheckLiZhanZhiQu, damagingFunc, atkRole, realDamage, skill, dotType, bCrit, damageType,isDirect) + defRole.Event:DispatchEvent(BattleEventName.CheckLiZhanZhiQu, damagingFunc, atkRole, realDamage, skill, dotType, + bCrit, damageType, isDirect) --LogError("最后扣除伤害=="..realDamage) - --御甲过滤后的伤害只会处理扣血 by: wangzhenxing shihongyi 2021/09/27 - local isImmune=BattleUtil.CheckDamageIsImmune(atkRole,defRole) + --御甲过滤后的伤害只会处理扣血 by: wangzhenxing shihongyi 2021/09/27 + local isImmune = BattleUtil.CheckDamageIsImmune(atkRole, defRole) if isImmune then - realDamage=0 - damage=0 + realDamage = 0 + damage = 0 end - --检测伪不灭 - local damagingFunc = function(dmgDeduction) - realDamage = dmgDeduction - damage=realDamage + --检测伪不灭 + local damagingFunc = function(dmgDeduction) + realDamage = dmgDeduction + damage = realDamage end - defRole.Event:DispatchEvent(BattleEventName.CheckFalseNoDead, damagingFunc, atkRole, realDamage, skill, dotType, bCrit, damageType,isDirect) + defRole.Event:DispatchEvent(BattleEventName.CheckFalseNoDead, damagingFunc, atkRole, realDamage, skill, dotType, + bCrit, damageType, isDirect) - local isToDied=false + local isToDied = false --检测时空猪八戒格挡致死伤害 - local checkDamageShift = function(isDead) - isToDied=isDead + local checkDamageShift = function(isDead) + isToDied = isDead end - BattleLogic.Event:DispatchEvent(BattleEventName.CheckDamShift, checkDamageShift, atkRole, realDamage, defRole,skill) + BattleLogic.Event:DispatchEvent(BattleEventName.CheckDamShift, checkDamageShift, atkRole, realDamage, defRole, skill) --格挡成功 if isToDied then return end - local finalDmg = defRole.data:SubValue(RoleDataName.Hp,realDamage) + local finalDmg = defRole.data:SubValue(RoleDataName.Hp, realDamage) if finalDmg >= 0 then if defRole:GetRoleData(RoleDataName.Hp) <= 0 and not defRole:IsDead() then defRole:SetDead(damage) defRole.Event:DispatchEvent(BattleEventName.RoleDead, atkRole) - atkRole.Event:DispatchEvent(BattleEventName.RoleKill, defRole,skill) - BattleLogic.Event:DispatchEvent(BattleEventName.BattleRoleDead, defRole, atkRole,skill,dotType) + atkRole.Event:DispatchEvent(BattleEventName.RoleKill, defRole, skill) + BattleLogic.Event:DispatchEvent(BattleEventName.BattleRoleDead, defRole, atkRole, skill, dotType) end - atkRole.Event:DispatchEvent(BattleEventName.RoleDamage, defRole, damage, bCrit, finalDmg, damageType, dotType, skill) - defRole.Event:DispatchEvent(BattleEventName.RoleBeDamaged, atkRole, damage, bCrit, finalDmg, damageType, dotType, skill,isImmune) - BattleLogic.Event:DispatchEvent(BattleEventName.RoleDamage, atkRole, defRole, damage, bCrit, finalDmg, damageType, dotType, skill) - BattleLogic.Event:DispatchEvent(BattleEventName.RoleBeDamaged, defRole, atkRole, damage, bCrit, finalDmg, damageType, dotType, skill) + atkRole.Event:DispatchEvent(BattleEventName.RoleDamage, defRole, damage, bCrit, finalDmg, damageType, dotType, + skill) + defRole.Event:DispatchEvent(BattleEventName.RoleBeDamaged, atkRole, damage, bCrit, finalDmg, damageType, dotType, + skill, isImmune) + BattleLogic.Event:DispatchEvent(BattleEventName.RoleDamage, atkRole, defRole, damage, bCrit, finalDmg, damageType, + dotType, skill) + BattleLogic.Event:DispatchEvent(BattleEventName.RoleBeDamaged, defRole, atkRole, damage, bCrit, finalDmg, + damageType, dotType, skill) if bCrit then atkRole.Event:DispatchEvent(BattleEventName.RoleCrit, defRole, damage, bCrit, finalDmg, damageType, skill) defRole.Event:DispatchEvent(BattleEventName.RoleBeCrit, atkRole, damage, bCrit, finalDmg, damageType, skill) end if skill then - atkRole.Event:DispatchEvent(BattleEventName.RoleHit, defRole, damage, bCrit, finalDmg, damageType, skill,isDirect) - defRole.Event:DispatchEvent(BattleEventName.RoleBeHit, atkRole, damage, bCrit, finalDmg, damageType, skill,isDirect) + atkRole.Event:DispatchEvent(BattleEventName.RoleHit, defRole, damage, bCrit, finalDmg, damageType, skill, + isDirect) + defRole.Event:DispatchEvent(BattleEventName.RoleBeHit, atkRole, damage, bCrit, finalDmg, damageType, skill, + isDirect) --如果目标是主燃烧目标 or 目标身上有燃烧效果 - if atkRole.curMainTarget==defRole or BattleLogic.BuffMgr:HasBuff(defRole, BuffName.DOT,function(buff) return buff.damageType == 1 end) then - atkRole.Event:DispatchEvent(BattleEventName.HitRoleInBurn,skill,defRole) + if atkRole.curMainTarget == defRole or BattleLogic.BuffMgr:HasBuff(defRole, BuffName.DOT, function(buff) return + buff.damageType == 1 end) then + atkRole.Event:DispatchEvent(BattleEventName.HitRoleInBurn, skill, defRole) end end --如果不是技能带的伤害,并且是直接伤害就,,,,, --用于处理不触发特性并且是直接伤害的伤害 isDirect 暂时先为bool值,后期可根据需求做修改扩展 by:王振兴 2020/10/12 16:18 if isDirect and not skill then - atkRole.Event:DispatchEvent(BattleEventName.RoleHit, defRole, damage, bCrit, finalDmg, damageType, skill,isDirect) - defRole.Event:DispatchEvent(BattleEventName.RoleBeHit, atkRole, damage, bCrit, finalDmg, damageType, skill,isDirect) + atkRole.Event:DispatchEvent(BattleEventName.RoleHit, defRole, damage, bCrit, finalDmg, damageType, skill, + isDirect) + defRole.Event:DispatchEvent(BattleEventName.RoleBeHit, atkRole, damage, bCrit, finalDmg, damageType, skill, + isDirect) end - end -- 战斗记录用 @@ -1172,65 +1210,65 @@ function BattleUtil.FinalDamageCountShield(skill, atkRole, defRole, damage, bCri "damage", damage, "dotType", tostring(dotType) ) - + return finalDmg end --检测伤害是否免疫 -function BattleUtil.CheckDamageIsImmune(atkRole,defRole) - local isImmune=false +function BattleUtil.CheckDamageIsImmune(atkRole, defRole) + local isImmune = false - local GetIsImmune=function(isTrue) - isImmune=isTrue + local GetIsImmune = function(isTrue) + isImmune = isTrue end - defRole.Event:DispatchEvent(BattleEventName.CheckDamageIsImmune,GetIsImmune,atkRole,defRole) + defRole.Event:DispatchEvent(BattleEventName.CheckDamageIsImmune, GetIsImmune, atkRole, defRole) return isImmune end - --执行完整的命中,伤害,暴击计算,返回命中,暴击 --skill造成伤害的技能 atkRole攻击者 defRole受击者 damageType伤害类型 baseFactor伤害系数 ignoreDef无视防御参数 dotType是持续伤害类型 function BattleUtil.CalDamage(skill, atkRole, defRole, damageType, baseFactor, ignoreDef, dotType) -- 灵兽无效 if defRole.type == BattleUnitType.Monster or defRole.type == BattleUnitType.Player then - return + return end -- 是否暴击: 暴击率 = 自身暴击率 - 对方抗暴率 local bCrit = false local critRandom = Random.Range01() --特殊处理 白骨精附加的普攻不会必定暴击 - local mustCrit=atkRole.mustCrit - if atkRole.roleId==10091 and skill and skill.type==BattleSkillType.Normal and skill.isAdd then - mustCrit=false + local mustCrit = atkRole.mustCrit + if atkRole.roleId == 10091 and skill and skill.type == BattleSkillType.Normal and skill.isAdd then + mustCrit = false end - local addCrit=0 - local isMustHit=false + local addCrit = 0 + local isMustHit = false -- 计算被动对暴击概率的影响 - local critFunc = function(df, dt,hit) + local critFunc = function(df, dt, hit) addCrit = BattleUtil.CountValue(addCrit, df, dt) isMustHit = hit end - BattleLogic.Event:DispatchEvent(BattleEventName.TemporaryChangeCrit,critFunc,atkRole,defRole,skill) - local critCondition = clamp(atkRole:GetRoleData(RoleDataName.Crit)+addCrit - defRole:GetRoleData(RoleDataName.Tenacity), 0, 1) + BattleLogic.Event:DispatchEvent(BattleEventName.TemporaryChangeCrit, critFunc, atkRole, defRole, skill) + local critCondition = clamp( + atkRole:GetRoleData(RoleDataName.Crit) + addCrit - defRole:GetRoleData(RoleDataName.Tenacity), 0, 1) bCrit = critRandom <= critCondition --处理达摩神魂被动必定命中 - if not bCrit or addCrit==0 then - isMustHit=false + if not bCrit or addCrit == 0 then + isMustHit = false end - - bCrit =mustCrit or bCrit or defRole.isFlagCrit == true -- 必定暴击 - + + bCrit = mustCrit or bCrit or defRole.isFlagCrit == true -- 必定暴击 + -- 判断是否命中 if not isMustHit then - if (skill and not skill:CheckTargetIsHit(defRole) and atkRole.type==BattleUnitType.Role) then + if (skill and not skill:CheckTargetIsHit(defRole) and atkRole.type == BattleUnitType.Role) then BattleLogic.Event:DispatchEvent(BattleEventName.HitMiss, atkRole, defRole, skill) atkRole.Event:DispatchEvent(BattleEventName.HitMiss, defRole, skill) defRole.Event:DispatchEvent(BattleEventName.BeHitMiss, atkRole, skill) return 0 end end - + -- 如果是队伍技能,计算真实伤害,则damageType为伤害值 if atkRole.isTeam and not defRole:IsDead() then return BattleUtil.ApplyDamage(skill, atkRole, defRole, damageType), false @@ -1251,46 +1289,47 @@ function BattleUtil.CalDamage(skill, atkRole, defRole, damageType, baseFactor, i defence = defRole:GetRoleData(RoleDataName.MagicDefence) end --检测增伤buff加成 - local buffAddAttack=0 - local list=BattleLogic.BuffMgr:GetBuff(atkRole,function(buff) - return buff.type==BuffName.AddAttack and buff.atkType==damageType + local buffAddAttack = 0 + local list = BattleLogic.BuffMgr:GetBuff(atkRole, function(buff) + return buff.type == BuffName.AddAttack and buff.atkType == damageType end) for key, value in pairs(list) do - buffAddAttack=BattleUtil.CountValue(buffAddAttack,value.value1,value.ct) + buffAddAttack = BattleUtil.CountValue(buffAddAttack, value.value1, value.ct) end - baseFactor=baseFactor+buffAddAttack + baseFactor = baseFactor + buffAddAttack --处理神印追加技能伤害按比例减少 - if skill and skill.AttactScale and skill.AttactScale~=0 then - baseFactor=baseFactor*skill.AttactScale + if skill and skill.AttactScale and skill.AttactScale ~= 0 then + baseFactor = baseFactor * skill.AttactScale end - if ignoreDef==nil then - ignoreDef=0 + if ignoreDef == nil then + ignoreDef = 0 end -- 攻击力 - local attack = atkRole:GetRoleData(RoleDataName.Attack)+atkRole.addAttack - local ignoreFunc=function(v1,ct) - ignoreDef=BattleUtil.CountValue(ignoreDef,v1,ct) + LogError("ffffffffffffffffff"..RoleDataName.Attack) + local attack = atkRole:GetRoleData(RoleDataName.Attack) + atkRole.addAttack + local ignoreFunc = function(v1, ct) + ignoreDef = BattleUtil.CountValue(ignoreDef, v1, ct) end - atkRole.Event:DispatchEvent(BattleEventName.PassiveChangeIgnoreDef,ignoreFunc) + atkRole.Event:DispatchEvent(BattleEventName.PassiveChangeIgnoreDef, ignoreFunc) -- 无视防御系数 ignoreDef = 1 - (ignoreDef or 0) - -- 基础伤害 = 攻击力 - 防御力 - baseDamage = max(attack - BattleUtil.FP_Mul(2,defence, ignoreDef), 0) + -- 基础伤害 = 攻击力 - 防御力 + baseDamage = max(attack - BattleUtil.FP_Mul(2, defence, ignoreDef), 0) - local defDMGRef=defRole:GetRoleData(RoleDataName.DamageReduceFactor) - local changeDefDMGFac=function(v1,ct) - if ct== CountTypeName.Sub and defDMGRef==0 then - return + local defDMGRef = defRole:GetRoleData(RoleDataName.DamageReduceFactor) + local changeDefDMGFac = function(v1, ct) + if ct == CountTypeName.Sub and defDMGRef == 0 then + return end - defDMGRef=BattleUtil.CountValue(defDMGRef,v1,ct) + defDMGRef = BattleUtil.CountValue(defDMGRef, v1, ct) end - atkRole.Event:DispatchEvent(BattleEventName.PassiveChangeDefDMGReFac,changeDefDMGFac) - if defDMGRef<0 then - defDMGRef=0 + atkRole.Event:DispatchEvent(BattleEventName.PassiveChangeDefDMGReFac, changeDefDMGFac) + if defDMGRef < 0 then + defDMGRef = 0 end -- 基础伤害增加系数 local addDamageFactor = 1 + atkRole:GetRoleData(RoleDataName.DamageBocusFactor) - defDMGRef - + -- 计算暴伤害系数 local critDamageFactor = 1 local critDamageReduceFactor = 0 -- 暴击伤害减免 @@ -1298,46 +1337,52 @@ function BattleUtil.CalDamage(skill, atkRole, defRole, damageType, baseFactor, i if bCrit then --加入被动效果 触发暴击被动 local cl = {} - local onCritDamageReduceFactor = function(v, ct) + local onCritDamageReduceFactor = function(v, ct) if v then - table.insert(cl, {v, ct}) + table.insert(cl, { v, ct }) end end - atkRole.Event:DispatchEvent(BattleEventName.CritDamageReduceFactor, onCritDamageReduceFactor, atkRole, defRole,skill) - defRole.Event:DispatchEvent(BattleEventName.CritDamageReduceFactor, onCritDamageReduceFactor, atkRole, defRole,skill) - BattleLogic.Event:DispatchEvent(BattleEventName.CritDamageReduceFactor, onCritDamageReduceFactor, atkRole, defRole,skill) + atkRole.Event:DispatchEvent(BattleEventName.CritDamageReduceFactor, onCritDamageReduceFactor, atkRole, defRole, + skill) + defRole.Event:DispatchEvent(BattleEventName.CritDamageReduceFactor, onCritDamageReduceFactor, atkRole, defRole, + skill) + BattleLogic.Event:DispatchEvent(BattleEventName.CritDamageReduceFactor, onCritDamageReduceFactor, atkRole, + defRole, skill) critDamageReduceFactor = max(BattleUtil.CountChangeList(critDamageReduceFactor, cl), 0) - - local critDamageAddFactor=0 + + local critDamageAddFactor = 0 --加入被动效果 触发暴击被动 local cl2 = {} - local onCritDamageAddFactor = function(v, ct) + local onCritDamageAddFactor = function(v, ct) if v then - table.insert(cl2, {v, ct}) + table.insert(cl2, { v, ct }) end end - atkRole.Event:DispatchEvent(BattleEventName.PassiveAddCritDamageFactor, onCritDamageAddFactor, atkRole, defRole,skill) + atkRole.Event:DispatchEvent(BattleEventName.PassiveAddCritDamageFactor, onCritDamageAddFactor, atkRole, defRole, + skill) critDamageAddFactor = max(BattleUtil.CountChangeList(critDamageAddFactor, cl2), 0) -- 计算额外暴击伤害 - critDamageFactor = 1.3 + atkRole:GetRoleData(RoleDataName.CritDamageBonus) - defRole:GetRoleData(RoleDataName.CritDamageReduce)+critDamageAddFactor - critDamageReduceFactor + critDamageFactor = 1.3 + atkRole:GetRoleData(RoleDataName.CritDamageBonus) - + defRole:GetRoleData(RoleDataName.CritDamageReduce) + critDamageAddFactor - critDamageReduceFactor --加入被动效果 触发暴击被动 废弃不用 -- local critFunc = function(critEx) critDamageFactor = critEx end -- atkRole.Event:DispatchEvent(BattleEventName.PassiveCriting, critFunc,skill) end -- 计算克制伤害系数 - local MieKangFactor = 1 - if BattleLogic.GetIsPvP() and atkRole.type == BattleUnitType.Role and defRole.type == BattleUnitType.Role then - MieKangFactor=MieKangFactor + atkRole:GetRoleData(BattleMieProp[defRole.element]) - defRole:GetRoleData(BattleKangProp[atkRole.element]) + local MieKangFactor = 1 + if BattleLogic.GetIsPvP() and atkRole.type == BattleUnitType.Role and defRole.type == BattleUnitType.Role then + MieKangFactor = MieKangFactor + atkRole:GetRoleData(BattleMieProp[defRole.element]) - + defRole:GetRoleData(BattleKangProp[atkRole.element]) end - - + + -- 公式伤害 = 基础伤害 * 基础伤害系数 * 增伤系数 * 爆伤系数 * 克制伤害系数 local fixDamage = floor(BattleUtil.FP_Mul(baseDamage, baseFactor, addDamageFactor, critDamageFactor, MieKangFactor)) -- 公式计算完成 local damageFunc = function(damage) fixDamage = damage end - atkRole.Event:DispatchEvent(BattleEventName.RoleDamageAfter, defRole, damageFunc, fixDamage,skill) + atkRole.Event:DispatchEvent(BattleEventName.RoleDamageAfter, defRole, damageFunc, fixDamage, skill) defRole.Event:DispatchEvent(BattleEventName.RoleBeDamagedAfter, atkRole, damageFunc, fixDamage) fixDamage = max(floor(attack * 0.1), fixDamage) @@ -1349,88 +1394,85 @@ function BattleUtil.CalDamage(skill, atkRole, defRole, damageType, baseFactor, i return finalDmg, bCrit end -function BattleUtil.CalTreat(castRole, targetRole, value, baseFactor,skill) - if targetRole==nil then - return +function BattleUtil.CalTreat(castRole, targetRole, value, baseFactor, skill) + if targetRole == nil then + return end -- 灵兽无效 - if targetRole.type == BattleUnitType.Monster or targetRole.type == BattleUnitType.Player or targetRole.type == BattleUnitType.Weapon then - return + if targetRole.type == BattleUnitType.Monster or targetRole.type == BattleUnitType.Player or targetRole.type == BattleUnitType.Weapon then + return end - BattleLogic.Event:DispatchEvent(BattleEventName.DisposeRoleCtrl_noheal, castRole,targetRole) + BattleLogic.Event:DispatchEvent(BattleEventName.DisposeRoleCtrl_noheal, castRole, targetRole) if targetRole.ctrl_noheal or targetRole:IsDead() then --禁疗和死亡无法加血 --禁疗并且没有死亡的单位显示血量+0 不走后面代码,防止触发后面的被动 by:王振兴 2021/1/27 if targetRole.ctrl_noheal and not targetRole:IsDead() then - targetRole.Event:DispatchEvent(BattleEventName.RoleBeTreated, castRole, 0, 0) + targetRole.Event:DispatchEvent(BattleEventName.RoleBeTreated, castRole, 0, 0) end return end - local mustCrit=castRole.mustCrit + local mustCrit = castRole.mustCrit -- 是否暴击: 暴击率 = 自身暴击率 - 对方抗暴率 local bCrit = false local critRandom = Random.Range01() local critCondition = castRole:GetRoleData(RoleDataName.Crit) bCrit = critRandom <= critCondition - bCrit =mustCrit or bCrit or targetRole.isFlagCrit == true -- 必定暴击 - -- 计算暴伤害系数 + bCrit = mustCrit or bCrit or targetRole.isFlagCrit == true -- 必定暴击 + -- 计算暴伤害系数 local critDamageFactor = 1 --计算暴击 if bCrit then --伤害有个+1.3 不知道干什么用的就给去了 by:wangxhenxing 2020/10/10 18:46 critDamageFactor = 1.3 + castRole:GetRoleData(RoleDataName.CritDamageBonus) - end + end -- 基础伤害增加系数 local addDamageFactor = 1 + castRole:GetRoleData(RoleDataName.DamageBocusFactor) targetRole.Event:DispatchEvent(BattleEventName.RoleBeHealed, castRole) - BattleUtil.ApplyTreat(castRole, targetRole, value, baseFactor,critDamageFactor,addDamageFactor,skill) + BattleUtil.ApplyTreat(castRole, targetRole, value, baseFactor, critDamageFactor, addDamageFactor, skill) end --没有暴击得治疗 -function BattleUtil.CalTreatNoCrit(castRole, targetRole, value, baseFactor,skill) - if targetRole==nil then - return +function BattleUtil.CalTreatNoCrit(castRole, targetRole, value, baseFactor, skill) + if targetRole == nil then + return end -- 灵兽无效 - if targetRole==nil then - return + if targetRole == nil then + return end if targetRole.type == BattleUnitType.Monster or targetRole.type == BattleUnitType.Player then - return + return end - BattleLogic.Event:DispatchEvent(BattleEventName.DisposeRoleCtrl_noheal, castRole,targetRole) + BattleLogic.Event:DispatchEvent(BattleEventName.DisposeRoleCtrl_noheal, castRole, targetRole) if targetRole.ctrl_noheal or targetRole:IsDead() then --禁疗和死亡无法加血 --禁疗并且没有死亡的单位显示血量+0 不走后面代码,防止触发后面的被动 by:王振兴 2021/1/27 if targetRole.ctrl_noheal and not targetRole:IsDead() then - targetRole.Event:DispatchEvent(BattleEventName.RoleBeTreated, castRole, 0, 0) + targetRole.Event:DispatchEvent(BattleEventName.RoleBeTreated, castRole, 0, 0) end return end - - -- 计算暴伤害系数 + + -- 计算暴伤害系数 local critDamageFactor = 1 - + -- 基础伤害增加系数 local addDamageFactor = 1 + castRole:GetRoleData(RoleDataName.DamageBocusFactor) targetRole.Event:DispatchEvent(BattleEventName.RoleBeHealed, castRole) - BattleUtil.ApplyTreat(castRole, targetRole, value, baseFactor,critDamageFactor,addDamageFactor,skill) + BattleUtil.ApplyTreat(castRole, targetRole, value, baseFactor, critDamageFactor, addDamageFactor, skill) end - - - -function BattleUtil.FinalTreat(castRole, targetRole, value, baseFactor,skill) - if targetRole==nil then - return +function BattleUtil.FinalTreat(castRole, targetRole, value, baseFactor, skill) + if targetRole == nil then + return end -- 灵兽无效 if targetRole.type == BattleUnitType.Monster or targetRole.type == BattleUnitType.Player then - return + return end - BattleLogic.Event:DispatchEvent(BattleEventName.DisposeRoleCtrl_noheal, castRole,targetRole) + BattleLogic.Event:DispatchEvent(BattleEventName.DisposeRoleCtrl_noheal, castRole, targetRole) if targetRole.ctrl_noheal or targetRole:IsDead() then --禁疗和死亡无法加血 --禁疗并且没有死亡的单位显示血量+0 不走后面代码,防止触发后面的被动 by:王振兴 2021/1/27 if targetRole.ctrl_noheal and not targetRole:IsDead() then - targetRole.Event:DispatchEvent(BattleEventName.RoleBeTreated, castRole, 0, 0) + targetRole.Event:DispatchEvent(BattleEventName.RoleBeTreated, castRole, 0, 0) end return end @@ -1443,21 +1485,21 @@ function BattleUtil.FinalTreat(castRole, targetRole, value, baseFactor,skill) --baseTreat = BattleUtil.CountChangeList(baseTreat, cl) -- 取整 local baseTreat = floor(baseTreat + 0.5) - local isVoid=false - local treatVoidFunc=function(_void) - isVoid=_void + local isVoid = false + local treatVoidFunc = function(_void) + isVoid = _void end - targetRole.Event:DispatchEvent(BattleEventName.CheckTreatVoid,treatVoidFunc,baseTreat,castRole) + targetRole.Event:DispatchEvent(BattleEventName.CheckTreatVoid, treatVoidFunc, baseTreat, castRole) if isVoid then - return + return end local treat = min(baseTreat, maxHp - hp) if treat > 0 then targetRole.data:AddValue(RoleDataName.Hp, treat) end - - castRole.Event:DispatchEvent(BattleEventName.RoleTreat, targetRole, treat, baseTreat,skill) - targetRole.Event:DispatchEvent(BattleEventName.RoleBeTreated, castRole, treat, baseTreat,skill) + + castRole.Event:DispatchEvent(BattleEventName.RoleTreat, targetRole, treat, baseTreat, skill) + targetRole.Event:DispatchEvent(BattleEventName.RoleBeTreated, castRole, treat, baseTreat, skill) --添加发送到battleLogic的治疗消息,用于计算总的战斗伤害值 BattleLogic.Event:DispatchEvent(BattleEventName.RoleBeTreated, castRole, treat, baseTreat) -- 战斗记录用 @@ -1472,30 +1514,29 @@ function BattleUtil.FinalTreat(castRole, targetRole, value, baseFactor,skill) ) end - -function BattleUtil.ApplyTreat(castRole, targetRole, value, baseFactor,critDamageFactor,addDamageFactor,skill) - if targetRole==nil then - return +function BattleUtil.ApplyTreat(castRole, targetRole, value, baseFactor, critDamageFactor, addDamageFactor, skill) + if targetRole == nil then + return end -- 灵兽无效 if targetRole.type == BattleUnitType.Monster then - return + return end - if addDamageFactor==nil then - addDamageFactor=1 + if addDamageFactor == nil then + addDamageFactor = 1 end - BattleLogic.Event:DispatchEvent(BattleEventName.DisposeRoleCtrl_noheal, castRole,targetRole) + BattleLogic.Event:DispatchEvent(BattleEventName.DisposeRoleCtrl_noheal, castRole, targetRole) if targetRole.ctrl_noheal or targetRole:IsDead() then --禁疗和死亡无法加血 - --禁疗并且没有死亡的单位显示血量+0 不走后面代码,防止触发后面的被动 by:王振兴 2021/1/27 - if targetRole.ctrl_noheal and not targetRole:IsDead() then + --禁疗并且没有死亡的单位显示血量+0 不走后面代码,防止触发后面的被动 by:王振兴 2021/1/27 + if targetRole.ctrl_noheal and not targetRole:IsDead() then targetRole.Event:DispatchEvent(BattleEventName.RoleBeTreated, castRole, 0, 0) - end + end return end baseFactor = baseFactor or 1 --处理神印追加的技能 - if skill and skill.AttactScale and skill.AttactScale~=0 then - baseFactor=baseFactor*skill.AttactScale + if skill and skill.AttactScale and skill.AttactScale ~= 0 then + baseFactor = baseFactor * skill.AttactScale end critDamageFactor = critDamageFactor or 1 local maxHp = targetRole:GetRoleData(RoleDataName.MaxHp) @@ -1505,20 +1546,20 @@ function BattleUtil.ApplyTreat(castRole, targetRole, value, baseFactor,critDamag local treatFactorFunc = function(df, dt) baseFactor = BattleUtil.CountValue(baseFactor, df, dt) end - castRole.Event:DispatchEvent(BattleEventName.PassiveTreatingFactor, treatFactorFunc, targetRole,skill) + castRole.Event:DispatchEvent(BattleEventName.PassiveTreatingFactor, treatFactorFunc, targetRole, skill) targetRole.Event:DispatchEvent(BattleEventName.PassiveBeTreatedFactor, treatFactorFunc, castRole) - BattleLogic.Event:DispatchEvent(BattleEventName.PassiveTreatingFactor,treatFactorFunc,targetRole,skill) + BattleLogic.Event:DispatchEvent(BattleEventName.PassiveTreatingFactor, treatFactorFunc, targetRole, skill) local factor = castRole.isTeam and 1 or castRole:GetRoleData(RoleDataName.TreatFacter) --释放者为team则不计算治疗加成属性 - if factor==0 then - factor=1 + if factor == 0 then + factor = 1 end local factor2 = targetRole:GetRoleData(RoleDataName.CureFacter) - local baseTreat = BattleUtil.FP_Mul(value, baseFactor, factor, factor2,critDamageFactor,addDamageFactor) + local baseTreat = BattleUtil.FP_Mul(value, baseFactor, factor, factor2, critDamageFactor, addDamageFactor) --加入被动效果 local cl = {} local function treatingFunc(v, ct) if v then - table.insert(cl, {v, ct}) + table.insert(cl, { v, ct }) end end -- local treatingFunc = function(exFactor) baseTreat = floor(baseTreat * (exFactor + 1) + 0.5) end @@ -1528,20 +1569,20 @@ function BattleUtil.ApplyTreat(castRole, targetRole, value, baseFactor,critDamag -- 取整 local baseTreat = floor(baseTreat + 0.5) - local isVoid=false - local treatVoidFunc=function(_void) - isVoid=_void + local isVoid = false + local treatVoidFunc = function(_void) + isVoid = _void end - targetRole.Event:DispatchEvent(BattleEventName.CheckTreatVoid,treatVoidFunc,baseTreat,castRole) + targetRole.Event:DispatchEvent(BattleEventName.CheckTreatVoid, treatVoidFunc, baseTreat, castRole) if isVoid then - return + return end local treat = min(baseTreat, maxHp - hp) if treat > 0 then targetRole.data:AddValue(RoleDataName.Hp, treat) end - castRole.Event:DispatchEvent(BattleEventName.RoleTreat, targetRole, treat, baseTreat,skill) - targetRole.Event:DispatchEvent(BattleEventName.RoleBeTreated, castRole, treat, baseTreat,skill) + castRole.Event:DispatchEvent(BattleEventName.RoleTreat, targetRole, treat, baseTreat, skill) + targetRole.Event:DispatchEvent(BattleEventName.RoleBeTreated, castRole, treat, baseTreat, skill) --添加发送到battleLogic的治疗消息,用于计算总的战斗伤害值 BattleLogic.Event:DispatchEvent(BattleEventName.RoleBeTreated, castRole, treat, baseTreat) -- 战斗记录用 @@ -1554,56 +1595,53 @@ function BattleUtil.ApplyTreat(castRole, targetRole, value, baseFactor,critDamag "tpos", targetRole.position, "value", value ) - BattleLogic.AddRoundTriggerTime() + BattleLogic.AddRoundTriggerTime() end - - -- 检测命中 -function BattleUtil.CheckIsHit(atkRole, defRole,skill) +function BattleUtil.CheckIsHit(atkRole, defRole, skill) -- 是否命中: 命中 = 自身命中率 - 对方闪避率 local isHit = false local mustHit = atkRole.mustHit --特殊处理 白骨精附加的普攻不会必定暴击 - if atkRole.roleId==10091 and skill and skill.type==BattleSkillType.Normal and skill.isAdd then - mustHit=false + if atkRole.roleId == 10091 and skill and skill.type == BattleSkillType.Normal and skill.isAdd then + mustHit = false end local hitRandom = Random.Range01() - local addHit=0 - local addHitFunc=function(v1,ct) - addHit=BattleUtil.CountValue(addHit,v1,ct) + local addHit = 0 + local addHitFunc = function(v1, ct) + addHit = BattleUtil.CountValue(addHit, v1, ct) end - BattleLogic.Event:DispatchEvent(BattleEventName.PassiveChangeRoleHit,addHitFunc,atkRole,defRole) - local hitCondition = clamp(atkRole:GetRoleData(RoleDataName.Hit)+addHit - defRole:GetRoleData(RoleDataName.Dodge), 0, 1) + BattleLogic.Event:DispatchEvent(BattleEventName.PassiveChangeRoleHit, addHitFunc, atkRole, defRole) + local hitCondition = clamp(atkRole:GetRoleData(RoleDataName.Hit) + addHit - defRole:GetRoleData(RoleDataName.Dodge), + 0, 1) isHit = hitRandom <= hitCondition - return mustHit or defRole.beMustHit or isHit + return mustHit or defRole.beMustHit or isHit end - -function BattleUtil.AddBlood(target,value) +function BattleUtil.AddBlood(target, value) if not target.isBanBlood then if target.bloodShield then --BattleLogic.WaitForTrigger(BattleLogic.GameDeltaTime*2,function() - target.bloodShield:AddValue(value) + target.bloodShield:AddValue(value) --end) else - local buff=Buff.Create(target, BuffName.Blood,0,value) + local buff = Buff.Create(target, BuffName.Blood, 0, value) target:AddBuff(buff) - target.bloodShield=buff + target.bloodShield = buff target.bloodShield:AddValue(value) --target.bloodShield:star end else target.Event:DispatchEvent(BattleEventName.ShowHintText, BattleArtFontType.Blood) - end + end BattleLogic.AddRoundTriggerTime() end - --获取table的长度 -function BattleUtil.LengthOfTable(table) +function BattleUtil.LengthOfTable(table) if not table then - return 0 + return 0 end local length = 0 for i, v in pairs(table) do @@ -1620,48 +1658,46 @@ function BattleUtil.RandomAction(rand, action) return false end --- -function BattleUtil.RandomControl(rand, ctrl, caster, target, round,skill) - +-- +function BattleUtil.RandomControl(rand, ctrl, caster, target, round, skill) local cl = {} local function _CallBack(v, ct) if v then - table.insert(cl, {v, ct}) + table.insert(cl, { v, ct }) end end - caster.Event:DispatchEvent(BattleEventName.PassiveRandomControl, _CallBack, ctrl, target,rand) + caster.Event:DispatchEvent(BattleEventName.PassiveRandomControl, _CallBack, ctrl, target, rand) target.Event:DispatchEvent(BattleEventName.PassiveBeRandomControl, _CallBack, ctrl, target) - BattleLogic.Event:DispatchEvent(BattleEventName.PassiveBeRandomControl, _CallBack, ctrl,caster,target) + BattleLogic.Event:DispatchEvent(BattleEventName.PassiveBeRandomControl, _CallBack, ctrl, caster, target) rand = BattleUtil.CountChangeList(rand, cl) - local list=BattleLogic.BuffMgr:GetBuff(target,function(buff) - return buff.type==BuffName.BreakArmor and buff.signType==4 + local list = BattleLogic.BuffMgr:GetBuff(target, function(buff) + return buff.type == BuffName.BreakArmor and buff.signType == 4 end) for key, value in pairs(list) do - rand=BattleUtil.CountValue(rand,value.signValue2,value.signValue1) + rand = BattleUtil.CountValue(rand, value.signValue2, value.signValue1) end local buff = Buff.Create(caster, BuffName.Control, round, ctrl) - local isAdd=BattleUtil.RandomAction(rand, function() + local isAdd = BattleUtil.RandomAction(rand, function() target:AddBuff(buff) end) if not isAdd then - buff.target=target - BattleLogic.Event:DispatchEvent(BattleEventName.RoleAddBuffFail,buff) + buff.target = target + BattleLogic.Event:DispatchEvent(BattleEventName.RoleAddBuffFail, buff) end - BattleLogic.Event:DispatchEvent(BattleEventName.RoleAddCtrlBuff,buff,isAdd,caster,target,skill) + BattleLogic.Event:DispatchEvent(BattleEventName.RoleAddCtrlBuff, buff, isAdd, caster, target, skill) return isAdd end --- -function BattleUtil.RandomDot(rand, dot, caster, target, round, interval, damage,skill) - +-- +function BattleUtil.RandomDot(rand, dot, caster, target, round, interval, damage, skill) local cl = {} local dcl = {} local function _CallBack(v, ct, dv, dct) if v then - table.insert(cl, {v, ct}) + table.insert(cl, { v, ct }) end if dv then - table.insert(dcl, {dv, dct}) + table.insert(dcl, { dv, dct }) end end caster.Event:DispatchEvent(BattleEventName.PassiveRandomDot, _CallBack, dot) @@ -1671,17 +1707,16 @@ function BattleUtil.RandomDot(rand, dot, caster, target, round, interval, damage return BattleUtil.RandomAction(rand, function() local buff = Buff.Create(caster, BuffName.DOT, round, interval, dot, damage) - buff.skill=skill + buff.skill = skill buff.isRealDamage = true target:AddBuff(buff) end) end - function BattleUtil.RandomList(arr) if #arr <= 1 then return end local index - for i=#arr, 1, -1 do + for i = #arr, 1, -1 do index = Random.RangeInt(1, i) arr[i], arr[index] = arr[index], arr[i] end @@ -1689,10 +1724,10 @@ end function BattleUtil.Sort(arr, comp) if #arr <= 1 then return arr end - for i=1, #arr do - for j = #arr, i+1, -1 do - if comp(arr[j-1], arr[j]) then - arr[j-1], arr[j] = arr[j], arr[j-1] + for i = 1, #arr do + for j = #arr, i + 1, -1 do + if comp(arr[j - 1], arr[j]) then + arr[j - 1], arr[j] = arr[j], arr[j - 1] end end end @@ -1728,7 +1763,7 @@ end -- 计算数值 function BattleUtil.CountValue(v1, v2, ct) local v = v1 - if ct == 1 then --加算 + if ct == 1 then --加算 v = v + v2 elseif ct == 2 then --乘加算(百分比属性加算) v = v * (1 + v2) @@ -1789,11 +1824,10 @@ end -- 检测技能伤害治疗加乘 function BattleUtil.CheckSkillDamageHeal(f, caster, target) - local cl = {} local function _CallBack(v, ct) if v then - table.insert(cl, {v, ct}) + table.insert(cl, { v, ct }) end end caster.Event:DispatchEvent(BattleEventName.PassiveSkillDamageHeal, _CallBack) @@ -1805,18 +1839,17 @@ end -- 检测技能伤害治疗加乘 function BattleUtil.CheckSeckill(bf, kf, caster, target) - local bcl = {} local kcl = {} local function _CallBack(bv, bct, kv, kct) if bv and bct then - table.insert(bcl, {bv, bct}) + table.insert(bcl, { bv, bct }) end if kv and kct then - table.insert(kcl, {kv, kct}) + table.insert(kcl, { kv, kct }) end end - caster.Event:DispatchEvent(BattleEventName.PassiveSeckill, _CallBack,target) + caster.Event:DispatchEvent(BattleEventName.PassiveSeckill, _CallBack, target) target.Event:DispatchEvent(BattleEventName.PassiveBeSeckill, _CallBack) bf = BattleUtil.CountChangeList(bf, bcl) kf = BattleUtil.CountChangeList(kf, kcl) @@ -1824,7 +1857,6 @@ function BattleUtil.CheckSeckill(bf, kf, caster, target) return bf, kf end - -- 获取位置类型 -- 1 前排 -- 2 后排 @@ -1839,16 +1871,15 @@ end -- 根据位置类型获取数据 function BattleUtil.GetRoleListByPosType(camp, posType) if posType == 1 then - return RoleManager.Query(function (r) return r.camp == camp and r.position <= 3 end) + return RoleManager.Query(function(r) return r.camp == camp and r.position <= 3 end) elseif posType == 2 then - return RoleManager.Query(function (r) return r.camp == camp and r.position > 3 end) + return RoleManager.Query(function(r) return r.camp == camp and r.position > 3 end) end end - -- 通用增加属性的方法 function BattleUtil.AddProp(role, prop, value, ct) - if ct == 1 then --加算 + if ct == 1 then --加算 role.data:AddValue(BattlePropList[prop], value) elseif ct == 2 then --乘加算(百分比属性加算) role.data:AddPencentValue(BattlePropList[prop], value) @@ -1881,13 +1912,11 @@ function BattleUtil.CompareValue(v1, v2, comType) return true end -function BattleUtil.IsUserDataNull( userData) - +function BattleUtil.IsUserDataNull(userData) if (userData == nil) then -- 如果 userdata 是 nil,则为空 return true else - local metatable = getmetatable(userData) - return metatable == "null_userdata_metatable" -- 否则检查元表 + local metatable = getmetatable(userData) + return metatable == "null_userdata_metatable" -- 否则检查元表 end - -end \ No newline at end of file +end diff --git a/Assets/ManagedResources/~Lua/Modules/Battle/Logic/Role/RoleLogic.lua b/Assets/ManagedResources/~Lua/Modules/Battle/Logic/Role/RoleLogic.lua index c737bfd3ab..1c86202765 100644 --- a/Assets/ManagedResources/~Lua/Modules/Battle/Logic/Role/RoleLogic.lua +++ b/Assets/ManagedResources/~Lua/Modules/Battle/Logic/Role/RoleLogic.lua @@ -9,12 +9,25 @@ local max = math.max local min = math.min function RoleLogic.New() - local instance = {uid=0,roleData=0,data=RoleData.New(),camp=0,name=0,aiIndex=1,position=0,sp=0,spPass=0, - shield=BattleList.New(), - exCalDmgList=BattleList.New(), - proTranList=BattleList.New(), - buffFilter=BattleList.New(), - Event = BattleEvent:New(),passiveList={},isDead=false,IsDebug=false} + local instance = { + uid = 0, + roleData = 0, + data = RoleData.New(), + camp = 0, + name = 0, + aiIndex = 1, + position = 0, + sp = 0, + spPass = 0, + shield = BattleList.New(), + exCalDmgList = BattleList.New(), + proTranList = BattleList.New(), + buffFilter = BattleList.New(), + Event = BattleEvent:New(), + passiveList = {}, + isDead = false, + IsDebug = false + } setmetatable(instance, RoleLogic) return instance end @@ -24,157 +37,157 @@ function RoleLogic:Init(uid, data, position) self.uid = uid self.position = position self.roleData = data - self.roleId=data.roleId + self.roleId = data.roleId self.data:Init(self, data.property) self.isDead = self:GetRoleData(RoleDataName.Hp) <= 0 self.isRealDead = self.isDead - self.killDamage = 0 --致死伤害 + self.killDamage = 0 --致死伤害 self.deadRage = 0 self.teamDamage = data.teamDamage --最高战斗力 - self.superSkillDamage = 0 --技能伤害 - self.killRole=nil --击杀英雄 - self.camp = data.camp --阵营 0:我方 1:敌方 + self.superSkillDamage = 0 --技能伤害 + self.killRole = nil --击杀英雄 + self.camp = data.camp --阵营 0:我方 1:敌方 self.name = data.name self.element = data.element self.professionId = data.professionId - self.job=data.job + self.job = data.job self.star = data.star or 1 -- LogError("英雄uid".. self.roleId .." " .. self.star) - self.shield:Clear() --护盾列表 + self.shield:Clear() --护盾列表 self.exCalDmgList:Clear() --额外计算伤害列表 - self.buffFilter:Clear() --buff屏蔽列表 - self.proTranList:Clear() --属性转换列表 + self.buffFilter:Clear() --buff屏蔽列表 + self.proTranList:Clear() --属性转换列表 self.isHaveNoDead = false --是否有不灭 self.Event:ClearEvent() self.skill = data.skill if self.skill then - self.skill[1] = tonumber(self.skill[1]) + self.skill[1] = tonumber(self.skill[1]) else - self.skill={} + self.skill = {} self.skill[1] = 0 end - + self.superSkill = data.superSkill if self.superSkill then self.superSkill[1] = tonumber(self.superSkill[1]) else - self.superSkill={} + self.superSkill = {} self.superSkill[1] = 0 end self.superSkill[1] = tonumber(self.superSkill[1]) --首次读条时间=速度/(20*(等级+10) self.sp = 0 - local time = self:GetRoleData(RoleDataName.Speed)/(20*(self:GetRoleData(RoleDataName.Level)+10)) - self.spPass = floor( BattleUtil.ErrorCorrection(time) * BattleLogic.GameFrameRate) + local time = self:GetRoleData(RoleDataName.Speed) / (20 * (self:GetRoleData(RoleDataName.Level) + 10)) + self.spPass = floor(BattleUtil.ErrorCorrection(time) * BattleLogic.GameFrameRate) -- 初始化怒气值(默认2) self.Rage = 2 - self.RageGrow = 2 -- 普通技能怒气成长 - self.SuperSkillRage = 4 -- 技能需要释放的怒气值,默认为4 - self.NoRageRate = 0 -- 不消耗怒气值的概率 - self.isImmuneReduceRage=false --是否免疫减怒 + self.RageGrow = 2 -- 普通技能怒气成长 + self.SuperSkillRage = 4 -- 技能需要释放的怒气值,默认为4 + self.NoRageRate = 0 -- 不消耗怒气值的概率 + self.isImmuneReduceRage = false --是否免疫减怒 self.aiOrder = data.ai self.aiIndex = 1 self.aiTempCount = 0 - self.RoundMaxSubRage=0 --每回合最多减少怒气 - self.AllSubRage =0 -- 每回合减少的怒气 + self.RoundMaxSubRage = 0 --每回合最多减少怒气 + self.AllSubRage = 0 -- 每回合减少的怒气 self.IsDebug = false self.enemyType = EnemyType.normal - self.lockTarget = nil --嘲讽 - self.ctrl_lock = false --是否被嘲讽 - self.ctrl_dizzy = false --眩晕 不能释放所有技能 - self.ctrl_slient = false --沉默 只能1技能 - self.ctrl_palsy = false --麻痹 只能2技能 - self.ctrl_noheal = false --禁疗 - self.ctrl_blind = false --致盲 - self.ctrl_chaos = false --混乱 - self.deadFilter = true -- 控制死亡,置为false则角色暂时无法死亡 + self.lockTarget = nil --嘲讽 + self.ctrl_lock = false --是否被嘲讽 + self.ctrl_dizzy = false --眩晕 不能释放所有技能 + self.ctrl_slient = false --沉默 只能1技能 + self.ctrl_palsy = false --麻痹 只能2技能 + self.ctrl_noheal = false --禁疗 + self.ctrl_blind = false --致盲 + self.ctrl_chaos = false --混乱 + self.deadFilter = true -- 控制死亡,置为false则角色暂时无法死亡 self.isSuppress = false self.notAction = false --无法行动 - self.isExile = false --是否放逐 - self.reliveFilter = true -- 控制复活的标志位,置为false角色将不再享受复活效果 + self.isExile = false --是否放逐 + self.reliveFilter = true -- 控制复活的标志位,置为false角色将不再享受复活效果 self.reliveHPF = 1 self.reliveCaster = nil self.bloodShield = nil - self.IsCanAddSkill = true -- 是否可以追加技能 - self.mustHit=false --必定命中 - self.beMustHit=false --必定被命中 - self.mustCrit=false --必定暴击 - self.isBanBlood=false --是否禁止上御甲 + self.IsCanAddSkill = true -- 是否可以追加技能 + self.mustHit = false --必定命中 + self.beMustHit = false --必定被命中 + self.mustCrit = false --必定暴击 + self.isBanBlood = false --是否禁止上御甲 self.isImmuneAllReduceShield = false --免疫敌方无敌盾(敌方无敌盾对自己无效) - self.ignoreShara = false --忽略敌方分摊 + self.ignoreShara = false --忽略敌方分摊 self.type = BattleUnitType.Role - self.addAttack=0 --添加的攻击 - self.isNormalAttackAddRage=true --普攻是否回复怒气 - self.curMainTarget=nil --当前主目标 - self.isAllBurn = false --是否视敌方全体为燃烧 - self.sunTime = 0 --顺风次数 + self.addAttack = 0 --添加的攻击 + self.isNormalAttackAddRage = true --普攻是否回复怒气 + self.curMainTarget = nil --当前主目标 + self.isAllBurn = false --是否视敌方全体为燃烧 + self.sunTime = 0 --顺风次数 self.sunMaxTime = 0 - self.niTime = 0 --逆风次数 + self.niTime = 0 --逆风次数 self.niMaxTime = 0 - self.suppressTime = 0 --被压制的次数 + self.suppressTime = 0 --被压制的次数 self.passiveList = {} if data.passivity and #data.passivity > 0 then - --排序363类型的排在前面 - table.sort(data.passivity,function(a,b) - if a[3]==b[3] then - return a[1] < b[1] - else - if a[3]==363 then - return true + --排序363类型的排在前面 + table.sort(data.passivity, function(a, b) + if a[3] == b[3] then + return a[1] < b[1] + else + if a[3] == 363 then + return true + end + if b[3] == 363 then + return false + end end - if b[3]==363 then - return false - end - end - - return a[1] < b[1] - end) - local coverPass={} + + return a[1] < b[1] + end) + local coverPass = {} for i = 1, #data.passivity do - local v = data.passivity[i] + local v = data.passivity[i] local passivityId = tonumber(v[1]) - local judge=v[2] + local judge = v[2] local id = tonumber(v[3]) local args = {} for j = 4, #v do - args[j-3] = v[j] + args[j - 3] = v[j] end --如果时363类型得被动就存起来 - if id==363 then + if id == 363 then if coverPass[args[1]] then - table.insert(coverPass[args[1]],args) + table.insert(coverPass[args[1]], args) else - coverPass[args[1]]={} - table.insert(coverPass[args[1]],args) + coverPass[args[1]] = {} + table.insert(coverPass[args[1]], args) end else - --如果有363修改的被动就修改 - if coverPass[passivityId] then - local list=coverPass[passivityId] - for i = 1, #list do - local coverArgs=list[i] - local len=floor((#coverArgs-1)/2) - for i = 1, len do - local id=0 - if #coverArgs>i+i then - id=coverArgs[i+i] - end - local value=0 - if #coverArgs>=i+i+1 then - value=coverArgs[i+i+1] - end - if id~=0 and #args>=id and args[id] then - args[id]=value + --如果有363修改的被动就修改 + if coverPass[passivityId] then + local list = coverPass[passivityId] + for i = 1, #list do + local coverArgs = list[i] + local len = floor((#coverArgs - 1) / 2) + for i = 1, len do + local id = 0 + if #coverArgs > i + i then + id = coverArgs[i + i] + end + local value = 0 + if #coverArgs >= i + i + 1 then + value = coverArgs[i + i + 1] + end + if id ~= 0 and #args >= id and args[id] then + args[id] = value + end end end - end - end + end end if BattleUtil.Passivity[id] then - BattleUtil.Passivity[id](self, args,passivityId,judge) + BattleUtil.Passivity[id](self, args, passivityId, judge) BattleLogManager.Log( "Add Passive", "id", tostring(id), @@ -184,30 +197,30 @@ function RoleLogic:Init(uid, data, position) "judge", tostring(judge) ) -- 加入被动列表 - table.insert(self.passiveList, {id, args,passivityId}) + table.insert(self.passiveList, { id, args, passivityId }) end end end - -- 初始怒气值放在被动之后计算,使被动对初始怒气的影响生效 - self.Rage = self.Rage + self:GetRoleData(RoleDataName.InitRage)-- 当前怒气值 - + -- 初始怒气值放在被动之后计算,使被动对初始怒气的影响生效 + self.Rage = self.Rage + self:GetRoleData(RoleDataName.InitRage) -- 当前怒气值 end -- 根据被动id添加被动 function RoleLogic:AddPassiveById(id) - local config=ConfigManager.GetConfigData(ConfigName.PassiveSkillLogicConfig,id) + local config = ConfigManager.GetConfigData(ConfigName.PassiveSkillLogicConfig, id) if not config then - return + return end - local value=config.Value + local value = config.Value if not value then - return + return end -- 被动生效 - BattleUtil.Passivity[config.Type](self,value,id,config.Judge) + BattleUtil.Passivity[config.Type](self, value, id, config.Judge) -- 加入被动列表 - table.insert(self.passiveList, {id, value,id,config.judge}) + table.insert(self.passiveList, { id, value, id, config.judge }) end + -- 添加一个被动技能 function RoleLogic:AddPassive(id, args, isRepeat) --判断是否可以叠加 @@ -215,17 +228,17 @@ function RoleLogic:AddPassive(id, args, isRepeat) -- 不可以叠加, 如果重复则不再加入 for _, pst in ipairs(self.passiveList) do if pst[1] == id then - return + return end end end -- 被动生效 BattleUtil.Passivity[id](self, args) -- 加入被动列表 - table.insert(self.passiveList, {id, args}) + table.insert(self.passiveList, { id, args }) end --- +-- function RoleLogic:CanCastSkill() return self.sp >= self.spPass and not self.IsDebug end @@ -233,12 +246,12 @@ end --检测是否有某被动类型 function RoleLogic:CheckHavePassive(id) if self.passiveList then - for index, value in ipairs(self.passiveList) do - if value and value[1] and value[1]==id then - return true - end - end - return false + for index, value in ipairs(self.passiveList) do + if value and value[1] and value[1] == id then + return true + end + end + return false end return false end @@ -246,12 +259,12 @@ end --检测是否有某被动 function RoleLogic:CheckHavePassiveId(id) if self.passiveList then - for index, value in ipairs(self.passiveList) do - if value and value[3] and value[3]==id then - return true - end - end - return false + for index, value in ipairs(self.passiveList) do + if value and value[3] and value[3] == id then + return true + end + end + return false end return false end @@ -270,7 +283,7 @@ function RoleLogic:AddSkillCD(value, type) local cdTotal = self.spPass local delta = 0 - if type == 1 then --加算 + if type == 1 then --加算 delta = floor(value * BattleLogic.GameFrameRate) elseif type == 2 then --乘加算(百分比属性加算) delta = floor(value * cdTotal) @@ -282,7 +295,7 @@ function RoleLogic:AddSkillCD(value, type) if delta > 0 then --加cd加cd最大值 self.spPass = self.spPass + delta - else --减cd减cd当前值 + else --减cd减cd当前值 delta = -delta self.sp = min(self.sp + delta, self.spPass) end @@ -291,7 +304,7 @@ end -- 改变怒气值 function RoleLogic:AddRage(value, type) local delta = 0 - if type == 1 then --加算 + if type == 1 then --加算 delta = value elseif type == 2 then --乘加算(百分比属性加算) delta = floor(value * self.SuperSkillRage) @@ -300,7 +313,7 @@ function RoleLogic:AddRage(value, type) elseif type == 4 then --乘减算(百分比属性减算) delta = -floor(value * self.SuperSkillRage) end - self.Event:DispatchEvent(BattleEventName.RoleRageChange, delta,self.Rage) + self.Event:DispatchEvent(BattleEventName.RoleRageChange, delta, self.Rage) --怒气值不可为负值 self.Rage = max(self.Rage + delta, 0) @@ -309,12 +322,15 @@ end function RoleLogic:GetRoleData(property) local tarPro = self.data:GetData(property) + if property == 4 then + LogError("bbbbbbbbbbbbbbbbbbb" .. tarPro) + end local item - for i=1, self.proTranList.size do + for i = 1, self.proTranList.size do item = self.proTranList.buffer[i] if item.proName == property then local value - if item.changeType == 1 then --加算 + if item.changeType == 1 then --加算 value = item.tranFactor elseif item.changeType == 2 then --乘加算(百分比属性加算) value = BattleUtil.ErrorCorrection(self.data:GetData(item.tranProName) * item.tranFactor) @@ -332,16 +348,17 @@ end --proA替换的属性,factor系数,proB被替换的属性, duration持续时间 --读取proB属性时,得到的值为proB + proA * factor function RoleLogic:AddPropertyTransfer(proA, factor, proB, ct, duration) - local proTran = {proName = proB, tranProName = proA, tranFactor = factor, changeType = ct} + local proTran = { proName = proB, tranProName = proA, tranFactor = factor, changeType = ct } self.proTranList:Add(proTran) local index = self.proTranList.size if duration then - BattleLogic.WaitForTrigger(duration, function () + BattleLogic.WaitForTrigger(duration, function() self:RemovePropertyTransfer(index, proTran) end) end return index, proTran end + -- 删除临时属性 function RoleLogic:RemovePropertyTransfer(index, tran) if index <= self.proTranList.size and tran == self.proTranList.buffer[index] then @@ -350,27 +367,26 @@ function RoleLogic:RemovePropertyTransfer(index, tran) end -- 是否为指定id,指定星级的英雄 by:王振兴 2020/07/29 -function RoleLogic:IsAssignHeroAndHeroStar(id,star) - if self.roleId==id and self.star==star then +function RoleLogic:IsAssignHeroAndHeroStar(id, star) + if self.roleId == id and self.star == star then return true end return false end - -function RoleLogic:AddBuff(buff,_ignorePro) +function RoleLogic:AddBuff(buff, _ignorePro) if self:IsRealDead() then BattleLogic.BuffMgr:PutBuff(buff) return end - local isBan=false + local isBan = false local function banCallBack(_isBan) - isBan=_isBan + isBan = _isBan end - BattleLogic.Event:DispatchEvent(BattleEventName.RoleAddBuffCheckBan,banCallBack,self,buff) + BattleLogic.Event:DispatchEvent(BattleEventName.RoleAddBuffCheckBan, banCallBack, self, buff) if isBan then self.Event:DispatchEvent(BattleEventName.ShowHintText, BattleArtFontType.Blood) - return + return end -- buff的miss率 local missF = 0 @@ -378,7 +394,7 @@ function RoleLogic:AddBuff(buff,_ignorePro) local cl = {} local function _CallBack(v, ct) if v then - table.insert(cl, {v, ct}) + table.insert(cl, { v, ct }) end end BattleLogic.Event:DispatchEvent(BattleEventName.RoleAddBuffMiss, _CallBack, self, buff) @@ -389,31 +405,30 @@ function RoleLogic:AddBuff(buff,_ignorePro) "missF", missF) -- 如果概率为0 或者没有miss if missF == 0 or not BattleUtil.RandomAction(missF, function() BattleLogic.BuffMgr:PutBuff(buff) end) then - --概率忽略免疫 - local ignoreProb=0 + local ignoreProb = 0 if _ignorePro then - ignoreProb=_ignorePro + ignoreProb = _ignorePro end - local changeIgnore=function(v1,ct) - ignoreProb=BattleUtil.CountValue(ignoreProb,v1,ct) + local changeIgnore = function(v1, ct) + ignoreProb = BattleUtil.CountValue(ignoreProb, v1, ct) end - buff.caster.Event:DispatchEvent(BattleEventName.PassiveChangeIgnoreImmuneValue,changeIgnore,buff) - local isIgnor=BattleUtil.RandomAction(ignoreProb,function()end) + buff.caster.Event:DispatchEvent(BattleEventName.PassiveChangeIgnoreImmuneValue, changeIgnore, buff) + local isIgnor = BattleUtil.RandomAction(ignoreProb, function() end) if not isIgnor then - for i=1, self.buffFilter.size do - local isImm,immCaster=self.buffFilter.buffer[i](buff,self) + for i = 1, self.buffFilter.size do + local isImm, immCaster = self.buffFilter.buffer[i](buff, self) if isImm then BattleLogManager.Log( "Buff Filter", - "camp", buff.caster.camp, - "position", buff.caster.position, - "id", buff.id, + "camp", buff.caster.camp, + "position", buff.caster.position, + "id", buff.id, "type", buff.type) BattleLogic.BuffMgr:PutBuff(buff) self.Event:DispatchEvent(BattleEventName.ShowHintText, BattleArtFontType.Immune) - BattleLogic.Event:DispatchEvent(BattleEventName.ImmuneDebuffSuccess,buff,self,immCaster) - BattleLogic.Event:DispatchEvent(BattleEventName.RoleAddBuffFail,buff,self) + BattleLogic.Event:DispatchEvent(BattleEventName.ImmuneDebuffSuccess, buff, self, immCaster) + BattleLogic.Event:DispatchEvent(BattleEventName.RoleAddBuffFail, buff, self) return end end @@ -422,29 +437,28 @@ function RoleLogic:AddBuff(buff,_ignorePro) BattleLogic.AddRoundTriggerTime() end end - -function RoleLogic:Dispose() - -end +function RoleLogic:Dispose() + +end -- 判断角色是否可以释放技能 function RoleLogic:IsAvailable(skill) if skill and skill.effectCaster then - --放技能前判断是否有目标,没有就不会放技能,直接执行技能回调 by 王振兴 2021/09/17 + --放技能前判断是否有目标,没有就不会放技能,直接执行技能回调 by 王振兴 2021/09/17 --为解决攻击目标只剩被放逐的单位导致我方不放技能扣除怒气 skill.effectCaster:ChooseTarget() - local targets=BattleUtil.LengthOfTable(skill.effectCaster:GetDirectTargetsNoExile()) - if targets==0 then - return false + local targets = BattleUtil.LengthOfTable(skill.effectCaster:GetDirectTargetsNoExile()) + if targets == 0 then + return false end end if self.isExile then - return false + return false end --角色没有真正死亡 在 被眩晕/沉默的 情况下 任然能释放死亡技能 --(self.ctrl_dizzy or self.ctrl_slient) and - if self:IsDead() and skill and skill.type==BattleSkillType.DeadSkill then + if self:IsDead() and skill and skill.type == BattleSkillType.DeadSkill then return true end -- 眩晕 -- 死亡 @@ -467,23 +481,21 @@ end -- 释放技能 function RoleLogic:SkillCast(skill, func) - local _CastDone = function() - if func then - func() + if func then + func() end end -- 角色不可用直接结束技能释放 if not skill or not self:IsAvailable(skill) then - self.Event:DispatchEvent(BattleEventName.ActionOperateAngerAfter,self) + self.Event:DispatchEvent(BattleEventName.ActionOperateAngerAfter, self) _CastDone() return end - self.Event:DispatchEvent(BattleEventName.ActionOperateAngerBefore,self) + self.Event:DispatchEvent(BattleEventName.ActionOperateAngerBefore, self) -- 没有麻痹,释放普通攻击 - if (skill.type == BattleSkillType.Normal or skill.type ==BattleSkillType.ChaosNormal) and not self.ctrl_palsy then - + if (skill.type == BattleSkillType.Normal or skill.type == BattleSkillType.ChaosNormal) and not self.ctrl_palsy then local function _CheckRage() -- 后成长怒气 判断普攻是否会回复怒气 if skill.isRage and self.isNormalAttackAddRage then @@ -493,23 +505,23 @@ function RoleLogic:SkillCast(skill, func) grow = finalGrow end self.Event:DispatchEvent(BattleEventName.RoleRageGrow, grow, _RageGrowPassivity) - -- + -- self.Rage = self.Rage + grow end -- 释放完成 - self.Event:DispatchEvent(BattleEventName.ActionOperateAngerAfter,self) + self.Event:DispatchEvent(BattleEventName.ActionOperateAngerAfter, self) _CastDone() end -- 释放普技 skill:Cast(_CheckRage) - -- 没有沉默,释放大技能 - elseif (skill.type == BattleSkillType.Special or skill.type==BattleSkillType.Extra or skill.type==BattleSkillType.DeadSkill) and (not self.ctrl_slient or skill.type==BattleSkillType.DeadSkill) then + -- 没有沉默,释放大技能 + elseif (skill.type == BattleSkillType.Special or skill.type == BattleSkillType.Extra or skill.type == BattleSkillType.DeadSkill) and (not self.ctrl_slient or skill.type == BattleSkillType.DeadSkill) then -- 先消耗怒气 if skill.isRage then if self.Rage < self.SuperSkillRage then -- 怒气值不足不能释放技能 - self.Event:DispatchEvent(BattleEventName.ActionOperateAngerAfter,self) + self.Event:DispatchEvent(BattleEventName.ActionOperateAngerAfter, self) _CastDone() return end @@ -520,61 +532,59 @@ function RoleLogic:SkillCast(skill, func) noRageRate = noRageRate + rate costRage = costRage + cost end - self.Event:DispatchEvent(BattleEventName.RoleRageCost, costRage, noRageRate, _RageCostPassivity,skill) + self.Event:DispatchEvent(BattleEventName.RoleRageCost, costRage, noRageRate, _RageCostPassivity, skill) -- 计算消耗怒气的概率,并消耗怒气 local costRate = 1 - noRageRate costRate = costRate > 1 and 1 or costRate costRate = costRate < 0 and 0 or costRate - skill.costRage=0 + skill.costRage = 0 BattleUtil.RandomAction(costRate, function() self.Rage = self.Rage - costRage - self.Event:DispatchEvent(BattleEventName.SkillCastCostRageEnd,costRage) - skill.costRage=costRage + self.Event:DispatchEvent(BattleEventName.SkillCastCostRageEnd, costRage) + skill.costRage = costRage end) end - self.Event:DispatchEvent(BattleEventName.ActionOperateAngerAfter,self) - + self.Event:DispatchEvent(BattleEventName.ActionOperateAngerAfter, self) + -- 释放绝技 skill:Cast(_CastDone) - -- 没有符合条件的技能直接进入下一个技能检测 + -- 没有符合条件的技能直接进入下一个技能检测 else - self.Event:DispatchEvent(BattleEventName.ActionOperateAngerAfter,self) + self.Event:DispatchEvent(BattleEventName.ActionOperateAngerAfter, self) _CastDone() end - end - -- 加入一个技能 -- type 加入的技能类型 -- targets 指定目标 -- isAdd 是否是追加技能 -- isRage 是否正常操作怒气值 -function RoleLogic:AddSkill(type, isRage, isAdd, targets,isTrigger,isLoop) - if not self.IsCanAddSkill and isAdd then return end +function RoleLogic:AddSkill(type, isRage, isAdd, targets, isTrigger, isLoop) + if not self.IsCanAddSkill and isAdd then return end local effectData = type == BattleSkillType.Normal and self.skill or self.superSkill --角色被混乱后 - local isTriggerJudge=true - if isTrigger~=nil then - isTriggerJudge=isTrigger + local isTriggerJudge = true + if isTrigger ~= nil then + isTriggerJudge = isTrigger end if self.ctrl_chaos then - type=BattleSkillType.ChaosNormal + type = BattleSkillType.ChaosNormal --混乱普攻使用普攻特效 - effectData={self.skill[1],self.skill[2],self.skill[3],self.skill[4],{100001,{1,1,1}}} - isTriggerJudge=false + effectData = { self.skill[1], self.skill[2], self.skill[3], self.skill[4], { 100001, { 1, 1, 1 } } } + isTriggerJudge = false end if self.ctrl_lock then - type=BattleSkillType.ChaosNormal + type = BattleSkillType.ChaosNormal --嘲讽普攻使用普攻特效 - effectData={self.skill[1],self.skill[2],self.skill[3],self.skill[4],{200221,{1,1,1}}} - isTriggerJudge=false + effectData = { self.skill[1], self.skill[2], self.skill[3], self.skill[4], { 200221, { 1, 1, 1 } } } + isTriggerJudge = false end - SkillManager.AddSkill(self, effectData, type, targets, isAdd, isRage,isTriggerJudge,isLoop) - -- + SkillManager.AddSkill(self, effectData, type, targets, isAdd, isRage, isTriggerJudge, isLoop) + -- end -- 加入一个技能 @@ -582,90 +592,89 @@ end -- targets 指定目标 -- isAdd 是否是追加技能 -- isRage 是否正常操作怒气值 -function RoleLogic:AddSuperSkill(isRage, isAdd, targets,isTrigger,isLoop,scale) - if not self.IsCanAddSkill and isAdd then return end +function RoleLogic:AddSuperSkill(isRage, isAdd, targets, isTrigger, isLoop, scale) + if not self.IsCanAddSkill and isAdd then return end local effectData = self.superSkill --角色被混乱后 - local isTriggerJudge=true - if isTrigger~=nil then - isTriggerJudge=isTrigger + local isTriggerJudge = true + if isTrigger ~= nil then + isTriggerJudge = isTrigger end - local type=BattleSkillType.Special + local type = BattleSkillType.Special if self.ctrl_chaos then - type=BattleSkillType.ChaosNormal + type = BattleSkillType.ChaosNormal --混乱普攻使用普攻特效 - effectData={self.skill[1],self.skill[2],self.skill[3],self.skill[4],{100001,{1,1,1}}} - isTriggerJudge=false + effectData = { self.skill[1], self.skill[2], self.skill[3], self.skill[4], { 100001, { 1, 1, 1 } } } + isTriggerJudge = false end if self.ctrl_lock then - type=BattleSkillType.ChaosNormal + type = BattleSkillType.ChaosNormal --嘲讽普攻使用普攻特效 - effectData={self.skill[1],self.skill[2],self.skill[3],self.skill[4],{200221,{1,1,1}}} - isTriggerJudge=false + effectData = { self.skill[1], self.skill[2], self.skill[3], self.skill[4], { 200221, { 1, 1, 1 } } } + isTriggerJudge = false end - local skill=SkillManager.AddSkill(self, effectData, type, targets, isAdd, isRage,isTriggerJudge,isLoop) - skill.AttactScale=scale - -- + local skill = SkillManager.AddSkill(self, effectData, type, targets, isAdd, isRage, isTriggerJudge, isLoop) + skill.AttactScale = scale + -- end --加入额外技能,用于额外释放技能 by:王振兴 -function RoleLogic:InsertExtraSkill(id,type) - local effectData=BattleUtil.GetExtraSkillbyId(id) - effectData[1]=self.superSkill[1] - effectData[2]=self.superSkill[2] - effectData[3]=self.superSkill[3] - effectData[4]=self.superSkill[4] - -- local effectData2={role.,role.superSkill[2],role.superSkill[3],role.superSkill[4],{targets,{1,f1,f2}}} +function RoleLogic:InsertExtraSkill(id, type) + local effectData = BattleUtil.GetExtraSkillbyId(id) + effectData[1] = self.superSkill[1] + effectData[2] = self.superSkill[2] + effectData[3] = self.superSkill[3] + effectData[4] = self.superSkill[4] + -- local effectData2={role.,role.superSkill[2],role.superSkill[3],role.superSkill[4],{targets,{1,f1,f2}}} if effectData then - local skillType=BattleSkillType.Extra + local skillType = BattleSkillType.Extra --如果type为1则按绝技处理,不为1的话按额外技能处理(额外技能因为被动判断会判断是否是绝技类型,所以不会触发) - local isTrigger=true - if type==1 then - skillType=BattleSkillType.Special + local isTrigger = true + if type == 1 then + skillType = BattleSkillType.Special else - isTrigger=false + isTrigger = false end --和老史,佳琦确认果 附加技能算绝技 被沉默无法释放 可以套娃 递归触发 by:王振兴 - local insertSkill=SkillManager.InsertSkill(self, effectData, skillType, nil, true, false,isTrigger) + local insertSkill = SkillManager.InsertSkill(self, effectData, skillType, nil, true, false, isTrigger) return insertSkill end end - -- 插入一个技能 function RoleLogic:InsertSkill(type, isRage, isAdd, targets) if not self.IsCanAddSkill and isAdd then return end local effectData = type == BattleSkillType.Normal and self.skill or self.superSkill SkillManager.InsertSkill(self, effectData, type, targets, isAdd, isRage) end + -- 设置是否可以追加技能 function RoleLogic:SetIsCanAddSkill(isCan) self.IsCanAddSkill = isCan end - -- 正常触发技能 -function RoleLogic:CastSkill(func) +function RoleLogic:CastSkill(func) -- 设置轮转方法 -- SkillManager.SetTurnRoundFunc(func) if not self:IsAvailable() then - return + return end --如果当前怒气不足以释放绝技 - if self.Rage= self.SuperSkillRage then -- 释放大技能 self:AddSkill(BattleSkillType.Special, true, false, nil) - return + return end -- 没有麻痹 释放普通技能 if not self.ctrl_palsy then self:AddSkill(BattleSkillType.Normal, true, false, nil) - return + return end end @@ -674,18 +683,17 @@ end -- targets 追加技能的目标 nil则自动选择目标 -- func 追加技能释放完成回调 function RoleLogic:ForceCastSkill(type, targets, func) - -- 清除技能控制 - self.ctrl_dizzy = false --眩晕 不能释放技能 - self.ctrl_slient = false --沉默 只能1技能 - self.ctrl_palsy = false --麻痹 只能2技能 + self.ctrl_dizzy = false --眩晕 不能释放技能 + self.ctrl_slient = false --沉默 只能1技能 + self.ctrl_palsy = false --麻痹 只能2技能 -- 设置轮转方法 SkillManager.SetTurnRoundFunc(func) -- 释放技能 if type == 1 and self.skill then self:AddSkill(BattleSkillType.Normal, true, false, nil) - elseif type == 2 and self.superSkill then + elseif type == 2 and self.superSkill then if self.Rage < self.SuperSkillRage then self.Rage = self.SuperSkillRage end @@ -693,11 +701,10 @@ function RoleLogic:ForceCastSkill(type, targets, func) end end - -- 判断是否可以去死了 function RoleLogic:IsCanDead() -- 暂时不能死 - if not self.deadFilter then + if not self.deadFilter then return false end -- 还有我的技能没有释放,不能死啊 @@ -709,10 +716,10 @@ end -- 真的去死 function RoleLogic:GoDead() - if self:IsCanDead() then - self.isRealDead = true + if self:IsCanDead() then + self.isRealDead = true self.Rage = 0 - self.curMainTarget=nil + self.curMainTarget = nil BattleLogic.BuffMgr:ClearBuff(self) self.Event:DispatchEvent(BattleEventName.RoleRealDead, self) BattleLogic.Event:DispatchEvent(BattleEventName.RoleRealDead, self) @@ -725,21 +732,23 @@ end function RoleLogic:SetDeadFilter(filter) self.deadFilter = filter end + -- 要死了 -function RoleLogic:SetDead(damage) +function RoleLogic:SetDead(damage) self.isDead = true - self.killDamage=damage - self.deadRage=self.Rage - RoleManager.AddDeadRole(self) + self.killDamage = damage + self.deadRage = self.Rage + RoleManager.AddDeadRole(self) end + -- 判断是否死亡 function RoleLogic:IsDead() return self.isDead end -function RoleLogic:IsRealDead() - return self.isRealDead -end +function RoleLogic:IsRealDead() + return self.isRealDead +end -- 是否可以复活 function RoleLogic:IsCanRelive() @@ -751,6 +760,7 @@ function RoleLogic:IsCanRelive() end return true end + -- 复活吧, 真的去世后才能复活 function RoleLogic:Relive() if self:IsCanRelive() then @@ -763,17 +773,19 @@ function RoleLogic:Relive() -- 发送复活事件 self.Event:DispatchEvent(BattleEventName.RoleRelive, self) --BattleLogic.Event:DispatchEvent(BattleEventName.RoleRelive, self) - self.reliveCaster.Event:DispatchEvent(BattleEventName.ReliveRole,self) + self.reliveCaster.Event:DispatchEvent(BattleEventName.ReliveRole, self) -- 复活的血量算做加血 BattleLogic.Event:DispatchEvent(BattleEventName.RecordTreat, self.reliveCaster or self, self, reHp) return true end return false end + -- 设置是否可以死亡 function RoleLogic:SetReliveFilter(filter) self.reliveFilter = filter end + --,hpf 复活时拥有的血量的百分比 function RoleLogic:SetRelive(hpf, caster) -- 判断是否可以复活 @@ -795,7 +807,6 @@ function RoleLogic:SetRelive(hpf, caster) return false end - function RoleLogic:Update() -end \ No newline at end of file +end diff --git a/Assets/ManagedResources/~Lua/Modules/Login/LoginPanel.lua b/Assets/ManagedResources/~Lua/Modules/Login/LoginPanel.lua index f4c931fd5f..fa5d0389c5 100644 --- a/Assets/ManagedResources/~Lua/Modules/Login/LoginPanel.lua +++ b/Assets/ManagedResources/~Lua/Modules/Login/LoginPanel.lua @@ -54,7 +54,12 @@ function this:InitComponent() this.btnAgeTip:SetActive(IsUserProtoActive) this.btnAgeTipPosition = this.btnAgeTip:GetComponent("RectTransform").localPosition this.btnNotice:SetActive(IsShowNotice) - + --反馈邮箱 + this.fankui = Util.GetGameObject(this.loginPart, "fankui") + if this.fankui then + local fankuiText = this.fankui:GetComponent("Text") + fankuiText.text = ServerConfigManager.GetSettingValue(ServerConfigManager.SettingConfig.SHOW_EMAIL_LOGIN) or "" + end ---selectServerPart this.serverSelectPart = Util.GetGameObject(this.loginPart, "serverSelect") @@ -180,7 +185,7 @@ function this:BindEvent() "complete_change_server", roleCreateTime = "server_name_after|" .. tostring(this.serverList[index].server_id .. - "|server_name_before|" .. tostring(PlayerManager.serverInfo.server_id)) + "|server_name_before|" .. tostring(PlayerManager.serverInfo.server_id)) }) LogError("server_name_before:" .. PlayerManager.serverInfo.name) LogError("server_name_after:" .. tostring(this.serverList[index].name)) @@ -234,7 +239,7 @@ function this:BindEvent() end) Util.AddClick(this.beianBtn, function() - OpenWeb("https://beian.miit.gov.cn/#/home") + OpenWeb("https://beian.miit.gov.cn/#/Integrated/index") end) Util.AddClick(this.ConfirmBtn, function() local confirm = PlayerPrefs.GetInt("IHaveConfirmProtos") @@ -757,7 +762,8 @@ function this.ExecuteLoading() "|server_id|" .. tostring(PlayerManager.serverInfo .server_id) }) - LogError("**************************server_name|" ..tostring(PlayerManager.serverInfo.name) .."|server_id|" .. tostring(PlayerManager.serverInfo.server_id)) + LogError("**************************server_name|" .. + tostring(PlayerManager.serverInfo.name) .. "|server_id|" .. tostring(PlayerManager.serverInfo.server_id)) end, --太初密卷 --[[[49] =]] function() NetManager.CrossYuXuLunDaoGetInfoRequest(2, LoadingPanel.OnStep) end, --玉虚论道红点 --[[[50] =]] function() NetManager.GetLikeableDataRequest(LoadingPanel.OnStep) end, --好感度 diff --git a/Assets/ManagedResources/~Lua/Modules/MonsterCamp/GodsWayTowerPanel.lua b/Assets/ManagedResources/~Lua/Modules/MonsterCamp/GodsWayTowerPanel.lua index 8b2b7e9270..d43de27c60 100644 --- a/Assets/ManagedResources/~Lua/Modules/MonsterCamp/GodsWayTowerPanel.lua +++ b/Assets/ManagedResources/~Lua/Modules/MonsterCamp/GodsWayTowerPanel.lua @@ -231,11 +231,14 @@ function GodsWayTowerPanel:OnShow() curId = ActivityGiftManager.GetActivityIdByType(ActivityTypeDef.godsWayTowerTreasure_two) this.becomeAGodText1.gameObject:SetActive(true) this.becomeAGodText.gameObject:SetActive(false) + this.btnRank.gameObject:SetActive(true) elseif curType == 2 then curId = ActivityGiftManager.GetActivityIdByType(ActivityTypeDef.godsWayTowerTreasure_three) this.becomeAGodText1.gameObject:SetActive(true) this.becomeAGodText.gameObject:SetActive(false) + this.btnRank.gameObject:SetActive(true) else + this.btnRank.gameObject:SetActive(false) curId = 0 this.becomeAGodText1.gameObject:SetActive(false) this.becomeAGodText.gameObject:SetActive(true) diff --git a/Assets/ManagedResources/~Lua/Modules/Setting/SettingInfo.lua b/Assets/ManagedResources/~Lua/Modules/Setting/SettingInfo.lua index 7d6093dd7a..b1409a67e7 100644 --- a/Assets/ManagedResources/~Lua/Modules/Setting/SettingInfo.lua +++ b/Assets/ManagedResources/~Lua/Modules/Setting/SettingInfo.lua @@ -15,6 +15,12 @@ function SettingInfo:InitComponent(gameObject, rootPanel) this.head = Util.GetGameObject(gameObject, "playerInfo/head") this.headpos = Util.GetGameObject(gameObject, "playerInfo/head/pos") this.headRedpot = Util.GetGameObject(gameObject, "playerInfo/head/redpot") + --反馈邮箱 + this.fankui = Util.GetGameObject(gameObject, "other/fankui") + if this.fankui then + local fankuiText = this.fankui:GetComponent("Text") + fankuiText.text = ServerConfigManager.GetSettingValue(ServerConfigManager.SettingConfig.SHOW_EMAIL_SETTING) or "" + end this.name = Util.GetGameObject(gameObject, "playerInfo/name/Text") this.btnChangeName = Util.GetGameObject(gameObject, "playerInfo/name/Image/btn") diff --git a/Assets/ManagedResources/~Lua/Modules/Setting/SettingPanel.lua b/Assets/ManagedResources/~Lua/Modules/Setting/SettingPanel.lua index 72efce25ea..0a04bcd126 100644 --- a/Assets/ManagedResources/~Lua/Modules/Setting/SettingPanel.lua +++ b/Assets/ManagedResources/~Lua/Modules/Setting/SettingPanel.lua @@ -36,6 +36,7 @@ function SettingPanel:InitComponent() this.settingPlayerBg = Util.GetGameObject(self.transform, "layout/settingPlayerBgImage") this.settingPlayerBg:SetActive(true) + --预设赋值 this.layout = Util.GetGameObject(self.transform, "layout") for i = 1, #this.contents do diff --git a/Assets/ManagedResources/~Lua/Modules/Story/StoryManager.lua b/Assets/ManagedResources/~Lua/Modules/Story/StoryManager.lua index 13e1e6cc7e..ca5c5b95f5 100644 --- a/Assets/ManagedResources/~Lua/Modules/Story/StoryManager.lua +++ b/Assets/ManagedResources/~Lua/Modules/Story/StoryManager.lua @@ -17,7 +17,7 @@ local lastLive2d this.boyRes = "live2d_npc_boy" --- 女主立绘 -this.bitchRes = "live2d_npc_girl" +this.bitchRes = "live2d_npc_girl" function this.Initialize() @@ -32,7 +32,7 @@ function this.EventTrigger(eventId, callBack) return end - + local showType = chapterDataConfig[eventId].ShowType local showValues = GetLanguageStrById(chapterDataConfig[eventId].ShowValues) local options = chapterDataConfig[eventId].Option @@ -41,7 +41,7 @@ function this.EventTrigger(eventId, callBack) -- LogError("showtype "..showType.." showvalue "..showValues) -- 如果是第一次打开,则打开开幕界面 if showType == 11 then -- 对话界面 - if callBack then + if callBack then UIManager.OpenPanel(UIName.StoryDialoguePanel, eventId, false, callBack) else UIManager.OpenPanel(UIName.StoryDialoguePanel, eventId, false) @@ -63,9 +63,6 @@ function this.EventTrigger(eventId, callBack) local panel = UIManager.OpenPanel(UIName.GuideBattlePanel, testFightData, function() StoryManager.StoryJumpType(options[3], nil, callBack) end, options[2]) - - - elseif showType == 15 then -- 播放转场特效 SwitchPanel.PlayTransEffect(function() this.StoryJumpType(options[1], nil, callBack) @@ -86,10 +83,10 @@ function this.DialogueTrigger(eventId, callback) end local showType = chapterDataConfig[eventId].ShowType - + --- 对话弹窗 - if showType == 13 then - if callback then + if showType == 13 then + if callback then UIManager.OpenPanel(UIName.DialoguePopup, eventId, callback) else UIManager.OpenPanel(UIName.DialoguePopup, eventId) @@ -102,14 +99,14 @@ end function this.StoryJumpType(optionId, panel, callBack) local jumpType = chapterOptionData[optionId].JumpType if jumpType then - if jumpType == 4 then -- 关闭所有界面,结束对话 + if jumpType == 4 then -- 关闭所有界面,结束对话 if panel then panel:ClosePanel() end if UIManager.IsOpen(UIName.StoryDialoguePanel) then UIManager.ClosePanel(UIName.StoryDialoguePanel) end - -- + -- if callBack then callBack() end @@ -126,27 +123,25 @@ function this.StoryJumpType(optionId, panel, callBack) if UIManager.IsOpen(UIName.StoryDialoguePanel) then UIManager.ClosePanel(UIName.StoryDialoguePanel) end - elseif jumpType == 1 then -- 继续对话,往下跳转 local nextEventId = chapterOptionData[optionId].JumpTypeValues local nextEventShowType = chapterDataConfig[nextEventId].ShowType if nextEventShowType ~= 13 then this.EventTrigger(nextEventId, callBack) else - - this.DialogueTrigger(nextEventId,callBack) + this.DialogueTrigger(nextEventId, callBack) end end end end - -- 返回当前关卡的标题 function this.GetTitle() local str = "" str = chapterTitleData[this.curAreaID].Title return str end + -- ============================= 人物对话控制 =================================== -- -- 加载人物立绘并设置初始状态, 是否需要加载一次立绘 function this.InitLive2dState(setId, resPath, live2dRoot, effectRoot, isNeedLoad, dialoguePanel) @@ -163,27 +158,33 @@ function this.SetLive2dState(setData, isNeedLoad, resPath, live2dRoot, effectRoo ClearChild(live2dRoot) -- 立绘的位置大小 local scale = 0 - local position = Vector3.New(0,0,0) + local position = Vector3.New(0, 0, 0) - if resPath == this.bitchRes then + if resPath == this.bitchRes then setData = dialogueSetData[5402] - -- position = Vector3.New(0, -250, 0) + -- position = Vector3.New(0, -250, 0) -- scale = 0.5 end if not setData then return end scale = setData.Scale - position = Vector3(setData.Position[1], setData.Position[2], 0) + position = Vector3(setData.Position[1], setData.Position[2], 0) -- 设置立绘最终大小位置 local go - if not resPath or resPath == "" then Log(Language[12880]) return end + if not resPath or resPath == "" then + Log(Language[12880]) + return + end go = poolManager:LoadLive(resPath, live2dRoot.transform, Vector3.one * scale, position) - if not go then Log(Language[12881]) return end + if not go then + Log(Language[12881]) + return + end lastLive2d = go -- 是否播放入场动画 local isPlay = true - if isNeedLoad then + if isNeedLoad then isPlay = setData.isSkipShow == 1 local shakeTime = setData.ShakeTime local shakeDis = setData.ShakeScale @@ -192,20 +193,20 @@ function this.SetLive2dState(setData, isNeedLoad, resPath, live2dRoot, effectRoo this.InitAnim(go) - if isPlay and isNeedShake then -- 震动,入场动画 - PlayUIAnim(live2dRoot, function () - this.SetShake(go, shakeTime, shakeDis[1], shakeDis[2], function () + if isPlay and isNeedShake then -- 震动,入场动画 + PlayUIAnim(live2dRoot, function() + this.SetShake(go, shakeTime, shakeDis[1], shakeDis[2], function() this.SetLive2dAnim(go, ainIndex, 0, setData, effectRoot, dialoguePanel) Log("振动入场动画") end) end) elseif isPlay and not isNeedShake then -- 入场动画无震动 - PlayUIAnim(live2dRoot, function () + PlayUIAnim(live2dRoot, function() this.SetLive2dAnim(go, ainIndex, 0, setData, effectRoot, dialoguePanel) Log("入场动画") end) elseif not isPlay and isNeedShake then -- 震动无入场动画 - this.SetShake(go, shakeTime, shakeDis[1], shakeDis[2], function () + this.SetShake(go, shakeTime, shakeDis[1], shakeDis[2], function() this.SetLive2dAnim(go, ainIndex, 0, setData, effectRoot, dialoguePanel) Log("振动") end) @@ -272,10 +273,9 @@ function this.PlayEffect(setData, effectRoot, dialoguePanel) local img = Util.GetGameObject(effect, "kuang") img.transform.localRotation = Vector4.New(0, dir, 0, 1) else - effect.transform.localRotation = Vector4.New(0, dir, 0, 1) end - effect:GetComponent("RectTransform").anchoredPosition = pos + effect:GetComponent("RectTransform").anchoredPosition = pos -- 设置特效层级 Util.AddParticleSortLayer(effectRoot, dialoguePanel.sortingOrder + preLayer) @@ -293,12 +293,11 @@ function this.SetShake(object, timeScale, dx, dy, callBack) dy = 10 end object:GetComponent("RectTransform"):DOShakeAnchorPos(timeScale, Vector2.New(dx, dy), - 500, 90, true, true):OnComplete(function () + 500, 90, true, true):OnComplete(function() if callBack then callBack() end end) end - -- 设置立绘动作 function this.SetLive2dAnim(object, ainIndex, delayTime, setData, effectRoot, dialoguePanel) -- 木有立绘资源 @@ -312,7 +311,10 @@ function this.SetLive2dAnim(object, ainIndex, delayTime, setData, effectRoot, di [4] = "touch", } if not delayTime then delayTime = 0 end - if not skeletonAnim then Log(Language[12882]) return end + if not skeletonAnim then + Log(Language[12882]) + return + end if animName[ainIndex] and ainIndex > 1 then -- idel状态不做处理 skeletonAnim.AnimationState:SetAnimation(delayTime, animName[ainIndex], false) @@ -345,4 +347,4 @@ function this.UnLoadEffect(resName, res) poolManager:UnLoadAsset(resName, res, PoolManager.AssetType.GameObject) end -return this \ No newline at end of file +return this