123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736 |
- --[[
- * File name: battleAiAssistSkillEvaluate.lua
- * Version:
- * Author: sky
- * Date time: 2023-06-27 10:29:27
- * Copyright (C) 2023.
- * Description: 辅助技能AI评分
- --]]
- local battleAdapt = require "adapt.battleAdapt"
- local battleLog = require "battle.battleLog"
- local battleConst = require "battle.battleConst"
- ----------------------------------------
- -- 评分方法的匹配
- local _StAiAssistSkillMatching = {}
- local AiAssistSkillMatching =
- setmetatable(
- _StAiAssistSkillMatching,
- {
- __index = function(self, key)
- -- print(tostring(self))
- local funcName = string.format("getAiAssiSkillEvaluate%s", key)
- local func = self.funcs[funcName]
- if func then
- return func
- else
- return self.funcs.getAiAssiSkillEvaluateCommon
- end
- end
- }
- )
- ------------------------------------------------------------
- -- 评分功能
- local funcs = {}
- _StAiAssistSkillMatching.funcs = funcs
- ------------------------------------------------------------
- -- 辅助技能, AI评分类.
- local root = {}
- function root:getAiAssistSkillConfig(core, skillInfo)
- local skillConfig = battleAdapt:getSkillByID(skillInfo.skillId or 0)
- if skillConfig and skillConfig and #skillConfig.effectGroup > 0 then
- for _, effectId in ipairs(skillConfig.effectGroup) do
- local assistSkillConfig = battleAdapt:getAssistByEffectID(effectId)
- if assistSkillConfig and (assistSkillConfig.params1 and not assistSkillConfig.params1.buffId) then
- return assistSkillConfig
- end
- end
- end
- end
- function root:getAiAssistSkillEvaluate(core, actionCastle, skillInfo, params)
- local assistSkillLevel = skillInfo.newHeroAssistSkillLevel
- if not assistSkillLevel or assistSkillLevel <= 0 then
- return 0
- end
- local assistSkillConfig = self:getAiAssistSkillConfig(core, skillInfo)
- if not assistSkillConfig then
- return 0
- end
- return AiAssistSkillMatching[(skillInfo or {}).skillId or 0](
- _StAiAssistSkillMatching.funcs,
- core,
- skillInfo,
- params,
- assistSkillConfig
- )
- end
- ------------------------------------------------------------
- -- 通用评分
- function funcs:getAiAssiSkillEvaluateCommon(core, skillInfo, params, assistSkillConfig)
- local newHeroAttack = params.newHeroAttack
- return newHeroAttack * 0.65
- end
- -- 辅助技能评价 - 清茗 - 2221 范围伤害:对被攻击英雄周围9格子总共造成X倍基础战力
- -- 公式: if:对面英雄数量>0,0.25*技能色块战力*75%, else 0
- function funcs:getAiAssiSkillEvaluate2221(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {ex={damageNums=0.25}},
- local enemyHeroCount = params.enemyHeroCount -- 敌方英雄个数;
- if enemyHeroCount > 0 then
- local skillBase = skillInfo.skillBase
- return math.floor(assistSkillConfig[parValue].ex.damageNums * skillBase * 0.75)
- end
- return 0
- end
- -- 辅助技能评价 - 汤圆 - 1221 群治疗:落点周围8格的英雄总共提升X倍基础战力
- -- 公式: if:我方英雄数量>0,0.25*技能色块战力*75%, else 0
- function funcs:getAiAssiSkillEvaluate1221(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {ex={upNums=0.25}},
- local enemyHeroCount = params.enemyHeroCount -- 敌方英雄个数;
- if enemyHeroCount > 0 then
- local skillBase = skillInfo.skillBase
- return math.floor(assistSkillConfig[parValue].ex.upNums * skillBase * 0.75)
- end
- return 0
- end
- -- 辅助技能评价 - 穗穗 - 4221 迷雾加防:在迷雾内的英雄受到伤害减伤X%
- -- 公式: 英雄总战力*25%*50%
- function funcs:getAiAssiSkillEvaluate4221(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {defendPercent=10},
- local selfHeroTotalEv = params.selfHeroTotalEv
- return math.floor(assistSkillConfig[parValue].defendPercent * selfHeroTotalEv * 0.25 * 0.5)
- end
- -- 辅助技能评价 - 絮絮 - 3221 护甲强化:受到伤害降低增加到X%
- -- 公式: 生成英雄战力*5%*65%
- function funcs:getAiAssiSkillEvaluate3221(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {defendPercent=55},
- local newHeroAttack = params.newHeroAttack
- return math.floor(assistSkillConfig[parValue].defendPercent * newHeroAttack * 0.05)
- end
- -- 辅助技能评价 - 颠颠 - 2231 群伤害:对敌方最低英雄战力英雄周围9格总共造成X倍基础战力
- -- 公式: if:对面英雄数量>0,0.25*技能色块战力*75%, else 0
- function funcs:getAiAssiSkillEvaluate2231(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {ex={damageNums=0.25}},
- local enemyHeroCount = params.enemyHeroCount
- if enemyHeroCount > 0 then
- local skillBase = skillInfo.skillBase
- return math.floor(assistSkillConfig[parValue].ex.damageNums * skillBase * 0.75)
- end
- return 0
- end
- -- 辅助技能评价 - 念想 - 1231 战力提升量增加到X倍基础战力
- -- 公式: 0.25*技能色块战力*100%
- function funcs:getAiAssiSkillEvaluate1231(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {upNums=1.25},
- local skillBase = skillInfo.skillBase
- return math.floor(assistSkillConfig[parValue].upNums * skillBase * 1)
- end
- -- 辅助技能评价 - 奎 - 4231 色块额外提供X%的基础战力
- -- 公式: 0.25*技能色块战力*100%
- function funcs:getAiAssiSkillEvaluate4231(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {upNums=1.25},
- local skillBase = skillInfo.skillBase
- return math.floor(assistSkillConfig[parValue].upNums * skillBase * 1)
- end
- -- 辅助技能评价 - 眠眠 - 3231 囚禁加伤:造成X%英雄战力伤害
- -- 公式: 敌方最弱英雄战力*20%*75%
- function funcs:getAiAssiSkillEvaluate3231(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {ex={damagePercent=20}},
- -- 最弱的敌人
- local enemyHeroList = params.enemyHeroList
- local selfHeroLowestEv = 0
- if #enemyHeroList > 0 and enemyHeroList[1] then
- selfHeroLowestEv = self:getHeroEvaluate(core, enemyHeroList[1]) or 0
- end
- return math.floor(assistSkillConfig[parValue].ex.damagePercent * selfHeroLowestEv * 0.01 * 0.75)
- end
- -- 辅助技能评价 - 晴色 - 2241 额外燃烧敌人3个格子,消除时会造成基地X倍基础战力伤害
- -- 公式: 3*0.25%*技能色块战力*50%
- function funcs:getAiAssiSkillEvaluate2241(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {damageNums=1},
- local skillBase = skillInfo.skillBase
- return math.floor(assistSkillConfig[parValue].damageNums * 3 * skillBase * 0.5)
- end
- -- 辅助技能评价 - 鸢萝 - 1241 伤害加强:对基地造成伤害提升为X%
- -- 公式: if 对面英雄数量=1,13%*敌方英雄战力*50%,else 0
- function funcs:getAiAssiSkillEvaluate1241(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {ex={damagePercent=63}},
- local enemyHeroCount = params.enemyHeroCount
- if enemyHeroCount == 1 then
- local enemyHeroTotalEv = params.enemyHeroTotalEv
- return math.floor(assistSkillConfig[parValue].ex.damagePercent * 0.01 * enemyHeroTotalEv * 0.5)
- end
- return 0
- end
- -- 辅助技能评价 - 阿空 - 4241 生成强化:生成的英雄战力加强X%
- -- 公式: 0.2*技能色块战力*3*100%
- function funcs:getAiAssiSkillEvaluate4241(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {heroLiveNums=1.2},
- local skillBase = skillInfo.skillBase
- return math.floor(assistSkillConfig[parValue].heroLiveNums * skillBase * 3 * 0.2)
- end
- -- 辅助技能评价 - 象琪 - 3241 消除加强:使用主技能,该回合结束后扣除对面基地血量本回合消除色块数*X%的基础战力
- -- 公式: 13*(0.1)*技能色块战力*50%
- function funcs:getAiAssiSkillEvaluate3241(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {damageNums=0.1},
- local skillBase = skillInfo.skillBase
- return math.floor(assistSkillConfig[parValue].damageNums * 13 * skillBase * 0.5)
- end
- -- 辅助技能评价 - 绮罗 - 2251 电弧反弹:自身受到的伤害减免X%,反射伤害增加Y%
- -- 公式: 效果英雄战力*(5%)*75%+效果英雄战力*(5%)*75%
- function funcs:getAiAssiSkillEvaluate2251(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {damagePercent=55},
- local newHeroAttack = params.newHeroAttack
- return math.floor(
- (assistSkillConfig[parValue].damagePercent * newHeroAttack * 0.75) +
- (assistSkillConfig[parValue].damagePercent * newHeroAttack * 0.75)
- )
- end
- -- 辅助技能评价 - 风月 - 1251 属性窃取:下降拉取英雄的50%英雄战力,提升自己X倍的倍拉取英雄下降的英雄战力
- -- 公式: max{(敌方所有英雄战力总和-我方所有英雄战力总和),0}*(1.5*0.5-0.5)*50%
- function funcs:getAiAssiSkillEvaluate1251(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {ex={damagePercent=50,upX=1.5}},
- local enemyHeroTotalEv = params.enemyHeroTotalEv
- local selfHeroTotalEv = params.selfHeroTotalEv
- return math.floor(
- max(enemyHeroTotalEv - selfHeroTotalEv, 0) * (assistSkillConfig[parValue].ex.upX * 0.5 - 0.5) * 0.5
- )
- end
- -- 辅助技能评价 - 凛凛 - 4251 绝对领域:封锁区域内英雄buff不会触发,并造成X倍英雄基础战力伤害
- -- 公式: 1*技能色块战力*75%
- function funcs:getAiAssiSkillEvaluate4251(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {damageNums = 1},
- local skillBase = skillInfo.skillBase
- return math.floor(assistSkillConfig[parValue].damageNums * skillBase * 0.75)
- end
- -- 辅助技能评价 - 常明 - 3251 生命转化:将免疫期间主角受到的攻击值的%s转化为主角的血量恢复
- -- 公式: 预估敌方下回合伤害基地 = (max(敌方总战力-我方总战力, 0) + 5*敌方平均卡牌战力) - 我方总战力
- -- if 预估敌方下回合伤害基地>0, 预估敌方下回合伤害基地*20%*50%,else 0
- function funcs:getAiAssiSkillEvaluate3251(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {percent=20},
- local enemyHeroTotalEv = params.enemyHeroTotalEv
- local selfHeroTotalEv = params.selfHeroTotalEv
- local enemyAverageBaseAttack = params.enemyAverageBaseAttack
- local ve = (max(enemyHeroTotalEv - selfHeroTotalEv, 0) + 5 * enemyAverageBaseAttack) - selfHeroTotalEv
- if ve > 0 then
- return math.floor(assistSkillConfig[parValue].percent * 0.01 * ve * 0.5)
- end
- return 0
- end
- -- 辅助技能评价 - 花椒 - 2261 对方主角对叛变英雄的伤害减少至X%
- -- 公式: sum(敌方英雄战力*位置系数)*(50-X)%
- function funcs:getAiAssiSkillEvaluate2261(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {ex={damagePercent=40}},
- local enemyHeroTotalEv = params.enemyHeroTotalEv
- return math.floor((50 - assistSkillConfig[parValue].ex.damagePercent) * enemyHeroTotalEv * 0.01)
- end
- -- 辅助技能评价 - 小景 - 1261 分裂的伙伴英雄战力增加至X倍小景基础战力
- -- 公式: 0.5*技能色块战力*100%
- function funcs:getAiAssiSkillEvaluate1261(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {heroLiveNums=1.5},
- local skillBase = skillInfo.skillBase
- return math.floor(assistSkillConfig[parValue].heroLiveNums * skillBase * 1)
- end
- -- 辅助技能评价 - 百戏 - 4261 为自身增加1个减伤X%的盾,只抵挡1次,不可叠加
- -- 公式: 5*敌方平均卡牌战力*55%*50%
- function funcs:getAiAssiSkillEvaluate4261(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {defendPercent=55},
- local enemyAverageBaseAttack = params.enemyAverageBaseAttack
- return math.floor(5 * assistSkillConfig[parValue].defendPercent * 0.01 * enemyAverageBaseAttack * 0.5)
- end
- -- 辅助技能评价 - 疏雨 - 3261 羁绊:当英雄处于援军召唤状态下,该英雄所受到伤害的%s会被我方的召唤物分担
- -- 公式: 20%*英雄基础战力*50%
- function funcs:getAiAssiSkillEvaluate3261(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {ex={damagePercent=20}},
- local baseAttack = params.baseAttack
- return math.floor(assistSkillConfig[parValue].ex.damagePercent * 0.01 * baseAttack * 0.5)
- end
- -- 辅助技能评价 - 金羽 - 2351 主技能生效前为对方召唤X个0.5格战力的单位
- -- 公式: 1*0.5*英雄基础战力
- function funcs:getAiAssiSkillEvaluate2351(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {num=1},
- local baseAttack = params.baseAttack
- local skillBase = skillInfo.skillBase
- return math.floor(assistSkillConfig[parValue].num * baseAttack * 0.5)
- end
- -- 辅助技能评价 - 盈缺 - 1351 攻击时伤害提升X%,承受伤害增加X%
- -- 公式: 生成英雄战力*12.5%*75%
- function funcs:getAiAssiSkillEvaluate1351(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {defendPercent=-12.5},
- -- params1 = {ex={damagePercent=112.5}},
- local paramsValue = 0
- if assistSkillConfig[parValue].ex then
- paramsValue = assistSkillConfig[parValue].ex.damagePercent
- else
- paramsValue = assistSkillConfig[parValue].defendPercent
- end
- local newHeroAttack = params.newHeroAttack
- return math.floor(paramsValue * newHeroAttack * 0.75)
- end
- -- 辅助技能评价 - 无情 - 4351 增强加强:吸收队友X%加强自己Y倍吸收的战力值
- -- 公式: 除了生成英雄以外的最弱英雄*(1.1*20%-20%)*100%
- function funcs:getAiAssiSkillEvaluate4351(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {ex={damagePercent=20,upX=1.1}},
- -- 最弱的敌人
- local enemyHeroList = params.enemyHeroList
- local enemyHeroLowestEv = 0
- if #enemyHeroList > 0 and enemyHeroList[1] then
- enemyHeroLowestEv = self:getHeroEvaluate(core, enemyHeroList[1]) or 0
- end
- -- 最弱的自己人
- local selfHeroList = params.selfHeroList
- local selfHeroLowestEv = 0
- if #selfHeroList > 0 and selfHeroList[1] then
- selfHeroLowestEv = self:getHeroEvaluate(core, selfHeroList[1]) or 0
- end
- local newHeroAttack = params.newHeroAttack
- if selfHeroLowestEv == newHeroAttack then
- if #selfHeroList > 1 and selfHeroList[2] then
- selfHeroLowestEv = self:getHeroEvaluate(core, selfHeroList[2]) or 0
- end
- end
- local minHero = min(enemyHeroLowestEv, selfHeroLowestEv)
- return math.floor(
- (assistSkillConfig[parValue].ex.upX * assistSkillConfig[parValue].ex.damagePercent -
- assistSkillConfig[parValue].ex.damagePercent) *
- minHero *
- 1
- )
- end
- -- 辅助技能评价 - 小青 - 3351 灵魂吸收:吸收我方死亡的英雄战力X%
- -- 公式: 我方英雄战力(不包括新生成英雄)*20%*100%
- function funcs:getAiAssiSkillEvaluate3351(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {ex={upPercent=20}},
- local newHeroAttack = params.newHeroAttack
- local selfHeroTotalEv = params.selfHeroTotalEv
- local ev = max(selfHeroTotalEv - newHeroAttack, 0)
- return math.floor(assistSkillConfig[parValue].ex.upPercent * 0.01 * ev * 1)
- end
- -- 辅助技能评价 - 乔乔 - 2361 吸收消灭英雄的X%战力
- -- 公式: 敌方最弱英雄战力*20%*100%
- function funcs:getAiAssiSkillEvaluate2361(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {ex={percent=20}},
- local selfHeroList = params.selfHeroList
- local selfHeroLowestEv = 0
- if #selfHeroList > 0 and selfHeroList[1] then
- selfHeroLowestEv = self:getHeroEvaluate(core, selfHeroList[1]) or 0
- end
- return math.floor(assistSkillConfig[parValue].ex.percent * 0, 01 * selfHeroLowestEv * 1)
- end
- -- 辅助技能评价 - 十里 - 1361 消除加强:使用主技能,回合结束后基地血量恢复本回合消除色块数*10%的基础战力
- -- 公式: 10(消除估值)*10%*英雄基础战力*50%
- function funcs:getAiAssiSkillEvaluate1361(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {upNums=0.1},
- local baseAttack = params.baseAttack
- return math.floor(10 * assistSkillConfig[parValue].upNums * baseAttack * 0.5)
- end
- -- 辅助技能评价 - 千两 - 4361 弹弹乐:弹射数量加X,弹射威力为A%、B%、C%、D%
- -- 公式: 生成英雄战力*25%*75%
- function funcs:getAiAssiSkillEvaluate4361(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {num=2},
- local newHeroAttack = params.newHeroAttack
- return math.floor(assistSkillConfig[parValue].ex.damageNums * 0.1 * newHeroAttack * 0.75)
- end
- -- 辅助技能评价 - 一叶 - 3361 生成强化:生成的英雄战力加强X%
- -- 公式: 我方平均技能色块战力*3*65%*40%
- function funcs:getAiAssiSkillEvaluate3361(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {heroLiveNums=1.4},
- local averageBaseAttack = params.averageBaseAttack
- local averageBaseAttack = skillInfo.skillBase
- return math.floor(3 * assistSkillConfig[parValue].heroLiveNums * averageBaseAttack * 0.65)
- end
- -- 辅助技能评价 - 团团 - 2281 每炸毁一个技能,为团团提升%x技能战力的英雄战力
- -- 公式: 敌方技能数量*0.5*英雄基础战力*100%
- function funcs:getAiAssiSkillEvaluate2281(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {upNums=0.5},
- local enemyHeroCount = params.enemyHeroCount
- local baseAttack = params.baseAttack
- return math.floor(enemyHeroCount * assistSkillConfig[parValue].upNums * baseAttack * 1)
- end
- -- 辅助技能评价 - 烧麦 - 1281 持续恢复期间,随机消除X个色块生成英雄,生成新的英雄的战力为1倍技能战力
- -- 公式: 1*英雄基础战力*100%
- function funcs:getAiAssiSkillEvaluate1281(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {num=1},
- local baseAttack = params.baseAttack
- return math.floor(assistSkillConfig[parValue].num * baseAttack * 1)
- end
- -- 辅助技能评价 - 猴宝 - 4281 每转移一个技能,己方英雄战力增加%x倍英雄基础战力
- -- 公式: 敌方技能数量*0.5*英雄基础战力*100%
- function funcs:getAiAssiSkillEvaluate4281(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {upNums=0.5},
- local enemyHeroCount = params.enemyHeroCount
- local baseAttack = params.baseAttack
- return math.floor(enemyHeroCount * assistSkillConfig[parValue].upNums * baseAttack * 1)
- end
- -- 辅助技能评价 - 阿呆 - 3281 抵消对方技能效果后,获得X%的怒气值增涨
- -- 公式: 己方英雄技能平均收益*10%
- function funcs:getAiAssiSkillEvaluate3281(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {ex={upPercent=10}},
- local averageBaseAttack = params.averageBaseAttack
- return math.floor(assistSkillConfig[parValue].ex.upPercent * averageBaseAttack * 0.01)
- end
- -- 辅助技能评价 - 夜阑 - 2291 能量转化效果提升X%,若该次伤害超过该英雄的X%,则该次攻击变为一击毙命
- -- 公式: 生成英雄战力*5%*100%
- function funcs:getAiAssiSkillEvaluate2291(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {ex={percent=90}},
- local newHeroAttack = params.newHeroAttack
- return math.floor(assistSkillConfig[parValue].ex.damageNums * 0.01 * newHeroAttack * 1)
- end
- -- 辅助技能评价 - 桃桃 - 1291 加强效果增强%s
- -- 公式: 己方英雄总战力*(30-25%)*100%
- function funcs:getAiAssiSkillEvaluate1291(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {upPercent=30},
- local selfHeroTotalEv = params.selfHeroTotalEv
- return math.floor((assistSkillConfig[parValue].upPercent - 25) * 0.01 * selfHeroTotalEv * 1)
- end
- -- 辅助技能评价 - 倒倒 - 4291 每撤退一个英雄,倒倒的攻击力提升%s倍英雄基础战力
- -- 公式: count(我方英雄位置!=5)*1*英雄基础战力
- function funcs:getAiAssiSkillEvaluate4291(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {ex={upNums=1}},
- local selfHeroList = params.selfHeroList
- local newBlockXYMap = params.newBlockXYMap
- local baseAttack = params.baseAttack
- local count = 0
- for _, hero in ipairs(selfHeroList) do
- if newBlockXYMap[hero.bindBlock.id].y > 0 then
- count = count + 1
- end
- end
- return math.floor(assistSkillConfig[parValue].ex.upNums * count * baseAttack)
- end
- -- 辅助技能评价 - 咕噜 - 3291 被偷的主动技能可附带本英雄同等级的辅助技能效果
- -- 公式: 1*英雄基础战力
- function funcs:getAiAssiSkillEvaluate3291(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {assistSkillLevel=1},
- local baseAttack = params.baseAttack
- return math.floor(assistSkillConfig[parValue].assistSkillLevel * baseAttack)
- end
- -- 辅助技能评价 - 画意 - 2311 buff生成的万能色块获得增益,消除额外提升X%的基础战力
- -- 公式: 0.5*英雄基础战力
- function funcs:getAiAssiSkillEvaluate2311(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {upNums=0.5},
- local baseAttack = params.baseAttack
- return math.floor(assistSkillConfig[parValue].upNums * baseAttack)
- end
- -- 辅助技能评价 - 糯米 - 1311 破盾后,【护盾值】的s%转化为英雄自身战力
- -- 公式: 生成英雄战力*10%*100%
- function funcs:getAiAssiSkillEvaluate1311(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {ex={percent=10}},
- local newHeroAttack = params.newHeroAttack
- return math.floor(assistSkillConfig[parValue].ex.percent * 0.01 * newHeroAttack * 1)
- end
- -- 辅助技能评价 - 纤纤 - 4311 伤害加深:消除色块对敌方主角造成的伤害增加%s
- -- 公式: 4*对应技能色块战力*(110%-100%)*50%
- function funcs:getAiAssiSkillEvaluate4311(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {damagePercent=110},
- local skillBase = skillInfo.skillBase
- return math.floor(4 * (assistSkillConfig[parValue].damagePercent - 100) * 0.01 * skillBase * 0.5)
- end
- -- 辅助技能评价 - 孤梦 - 3311 被冻结的英雄受到的伤害增加50%
- -- 公式: if:敌方英雄总战力>1.5倍我方英总z战力,我方英雄总战力*50%*75%,else:敌方英雄总战力*50%*75%
- function funcs:getAiAssiSkillEvaluate3311(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {defendPercent=-50},
- local enemyHeroTotalEv = params.enemyHeroTotalEv
- local selfHeroTotalEv = params.selfHeroTotalEv
- local defendPercent = math.abs(assistSkillConfig[parValue].defendPercent)
- if enemyHeroTotalEv > (1.5 * selfHeroTotalEv) then
- return math.floor(defendPercent * 0.01 * selfHeroTotalEv * 0.75)
- else
- return math.floor(defendPercent * 0.01 * enemyHeroTotalEv * 0.75)
- end
- end
- -- 辅助技能评价 - 不酸 - 2321 单次攻击伤害增加至X%
- -- 公式: (30-25)%*4*生成英雄战力*75%
- function funcs:getAiAssiSkillEvaluate2321(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {ex={damagePercent={30, 30, 30, 30}}},
- local defendPercent = (assistSkillConfig[parValue].ex.damagePercent or {})[1] or 0
- local newHeroAttack = params.newHeroAttack
- return math.floor((defendPercent - 25) * newHeroAttack * 0.75)
- end
- -- 辅助技能评价 - 绿蛛 - 1321 伙伴牺牲的同时为自己主角恢复%s倍技能战力的血量
- -- 公式: 1*英雄基础战力*50%
- function funcs:getAiAssiSkillEvaluate1321(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {upNums=1},
- local defendPercent = assistSkillConfig[parValue].upNums
- local baseAttack = params.baseAttack
- return math.floor(defendPercent * baseAttack * 0.5)
- end
- -- 辅助技能评价 - 云中客 - 4321 缔结对方主角血量,己方主角伤害减免%s,并且接下来一回合内己方主角所受伤害同时反馈%s给对方
- -- 公式: 10*0.1*英雄基础战力
- function funcs:getAiAssiSkillEvaluate4321(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {defendPercent=10},
- local defendPercent = assistSkillConfig[parValue].defendPercent
- local baseAttack = params.baseAttack
- return math.floor(defendPercent * baseAttack * 0.1)
- end
- -- 辅助技能评价 - 酿酿 - 3321 第二次攻击的攻击比例提升s%
- -- 公式: 生成英雄战力*(60-50)%*75%
- function funcs:getAiAssiSkillEvaluate3321(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {ex={damagePercent=60}},
- local damagePercent = assistSkillConfig[parValue].ex.damagePercent
- local newHeroAttack = params.newHeroAttack
- return math.floor((damagePercent - 50) * newHeroAttack * 0.75)
- end
- -- 辅助技能评价 - 阿筝 - 2331 交换获得的英雄获得被换英雄战力的%s
- -- 公式: 我方最弱英雄*60%
- function funcs:getAiAssiSkillEvaluate2331(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {ex={percent=60}},
- local percent = assistSkillConfig[parValue].ex.percent
- -- 最弱的自己人
- local selfHeroList = params.selfHeroList
- local selfHeroLowestEv = 0
- if #selfHeroList > 0 and selfHeroList[1] then
- selfHeroLowestEv = self:getHeroEvaluate(core, selfHeroList[1]) or 0
- end
- return math.floor(percent * selfHeroLowestEv * 0.01)
- end
- -- 辅助技能评价 - 影生 - 1331 使用影生主动技能时,根据对方棋盘的技能数量提升英雄战力,每个技能提升%x被基础战力
- -- 公式: 敌方英雄技能数量*1*英雄基础战力*100%
- function funcs:getAiAssiSkillEvaluate1331(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {ex={upNums=1}},
- local upNums = assistSkillConfig[parValue].ex.upNums
- local enemyHeroCount = params.enemyHeroCount
- local baseAttack = params.baseAttack
- return math.floor(upNums * baseAttack * 1)
- end
- -- 辅助技能评价 - 江流儿 - 4331 对面虚弱期间对我方英雄造成伤害值的%s转化为主角气血恢复。
- -- 公式: (max{(敌方所有英雄战力总和-我方所有英雄战力总和),0}+5*敌方平均技能色块战力)*50%*10%*50%
- function funcs:getAiAssiSkillEvaluate4331(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {ex={percent=10}},
- local percent = assistSkillConfig[parValue].ex.percent
- local enemyHeroTotalEv = params.enemyHeroTotalEv
- local selfHeroTotalEv = params.selfHeroTotalEv
- local enemyAverageBaseAttack = params.enemyAverageBaseAttack
- local ev = (max((enemyHeroTotalEv - selfHeroTotalEv), 0) + 5 * enemyAverageBaseAttack) * 0.5 * percent * 0.5 * 0.01
- return math.floor(ev)
- end
- -- 辅助技能评价 - 烟波 - 3331 因为叛变被杀死英雄属性的%s转化为主角血量
- -- 公式: sum(我英雄战力*位置系数)*60%*50%
- -- 第一排:第二排:第三排:第四排:第五排=100%:70%:50%:30%:10%(第一排为接近中线的那排)
- function funcs:getAiAssiSkillEvaluate3331(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {ex={percent=50}},
- local percent = assistSkillConfig[parValue].ex.percent
- -- TODO: Debug 测试代码,上线前修改过来.
- local selfHeroCount = params.selfHeroCount
- local averageBaseAttack = params.averageBaseAttack
- return math.floor(percent * selfHeroCount * averageBaseAttack * 0.5)
- end
- -- 辅助技能评价 - 含光 - 2341 增加的临时护盾%s转变为装备护盾
- -- 公式: 我方全体英雄战力*50%*10%*65%
- function funcs:getAiAssiSkillEvaluate2341(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {ex={percent=10}},
- local percent = assistSkillConfig[parValue].ex.percent
- local selfHeroTotalEv = params.selfHeroTotalEv
- return math.floor(percent * 0.01 * selfHeroTotalEv * 0.5 * 0.65)
- end
- -- 辅助技能评价 - 暖阳 - 1341 增加的临时攻击力,%s转化为英雄装备武器
- -- 公式: 我方全体英雄战力*50%*10%*65%
- function funcs:getAiAssiSkillEvaluate1341(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {ex={percent=10}},
- local percent = assistSkillConfig[parValue].ex.percent
- local selfHeroTotalEv = params.selfHeroTotalEv
- return math.floor(percent * 0.01 * selfHeroTotalEv * 0.5 * 0.65)
- end
- -- 辅助技能评价 - 蹴鞠 - 4341 使用主动技能受到的伤害的%s转化为主角血量
- -- 公式: 3*英雄基础战力*50%*50%
- function funcs:getAiAssiSkillEvaluate4341(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {ex={percent=50}},
- local percent = assistSkillConfig[parValue].ex.percent
- local baseAttack = params.baseAttack
- return math.floor(3 * percent * 0.01 * baseAttack * 0.5)
- end
- -- 辅助技能评价 - 璨月 - 3341 追击伤害提升%s
- -- 公式: (55-50)%*敌方英雄数量*英雄基础战力*75%
- function funcs:getAiAssiSkillEvaluate3341(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- -- params1 = {ex={damagePercent=55}},
- local damagePercent = assistSkillConfig[parValue].ex.damagePercent
- local enemyHeroCount = params.enemyHeroCount
- local baseAttack = params.baseAttack
- return math.floor((damagePercent - 50) * enemyHeroCount * baseAttack * 0.75)
- end
- -- 辅助技能评价 - -
- -- 公式:
- function funcs:getAiAssiSkillEvaluate1002(core, skillInfo, params, assistSkillConfig)
- local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
- --
- local damagePercent = assistSkillConfig[parValue].ex.damagePercent
- local enemyHeroCount = params.enemyHeroCount
- local skillBase = skillInfo.skillBase
- return math.floor(damagePercent * skillBase * 0.75)
- end
- -- 获取英雄的战力
- function funcs:getHeroEvaluate(core, hero)
- -- local buffs = hero:getBuffByType(battleConst.BUFF_TYPE.VALUE_SHIELD)
- -- local shield = 0
- -- for _, buff in ipairs(buffs) do
- -- shield = shield + (buff.hp or 0)
- -- end
- -- return hero:getHp() + shield * 0.5
- return hero:getHp()
- end
- return root
|