battleAiAssistSkillEvaluate.lua 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736
  1. --[[
  2. * File name: battleAiAssistSkillEvaluate.lua
  3. * Version:
  4. * Author: sky
  5. * Date time: 2023-06-27 10:29:27
  6. * Copyright (C) 2023.
  7. * Description: 辅助技能AI评分
  8. --]]
  9. local battleAdapt = require "adapt.battleAdapt"
  10. local battleLog = require "battle.battleLog"
  11. local battleConst = require "battle.battleConst"
  12. ----------------------------------------
  13. -- 评分方法的匹配
  14. local _StAiAssistSkillMatching = {}
  15. local AiAssistSkillMatching =
  16. setmetatable(
  17. _StAiAssistSkillMatching,
  18. {
  19. __index = function(self, key)
  20. -- print(tostring(self))
  21. local funcName = string.format("getAiAssiSkillEvaluate%s", key)
  22. local func = self.funcs[funcName]
  23. if func then
  24. return func
  25. else
  26. return self.funcs.getAiAssiSkillEvaluateCommon
  27. end
  28. end
  29. }
  30. )
  31. ------------------------------------------------------------
  32. -- 评分功能
  33. local funcs = {}
  34. _StAiAssistSkillMatching.funcs = funcs
  35. ------------------------------------------------------------
  36. -- 辅助技能, AI评分类.
  37. local root = {}
  38. function root:getAiAssistSkillConfig(core, skillInfo)
  39. local skillConfig = battleAdapt:getSkillByID(skillInfo.skillId or 0)
  40. if skillConfig and skillConfig and #skillConfig.effectGroup > 0 then
  41. for _, effectId in ipairs(skillConfig.effectGroup) do
  42. local assistSkillConfig = battleAdapt:getAssistByEffectID(effectId)
  43. if assistSkillConfig and (assistSkillConfig.params1 and not assistSkillConfig.params1.buffId) then
  44. return assistSkillConfig
  45. end
  46. end
  47. end
  48. end
  49. function root:getAiAssistSkillEvaluate(core, actionCastle, skillInfo, params)
  50. local assistSkillLevel = skillInfo.newHeroAssistSkillLevel
  51. if not assistSkillLevel or assistSkillLevel <= 0 then
  52. return 0
  53. end
  54. local assistSkillConfig = self:getAiAssistSkillConfig(core, skillInfo)
  55. if not assistSkillConfig then
  56. return 0
  57. end
  58. return AiAssistSkillMatching[(skillInfo or {}).skillId or 0](
  59. _StAiAssistSkillMatching.funcs,
  60. core,
  61. skillInfo,
  62. params,
  63. assistSkillConfig
  64. )
  65. end
  66. ------------------------------------------------------------
  67. -- 通用评分
  68. function funcs:getAiAssiSkillEvaluateCommon(core, skillInfo, params, assistSkillConfig)
  69. local newHeroAttack = params.newHeroAttack
  70. return newHeroAttack * 0.65
  71. end
  72. -- 辅助技能评价 - 清茗 - 2221 范围伤害:对被攻击英雄周围9格子总共造成X倍基础战力
  73. -- 公式: if:对面英雄数量>0,0.25*技能色块战力*75%, else 0
  74. function funcs:getAiAssiSkillEvaluate2221(core, skillInfo, params, assistSkillConfig)
  75. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  76. -- params1 = {ex={damageNums=0.25}},
  77. local enemyHeroCount = params.enemyHeroCount -- 敌方英雄个数;
  78. if enemyHeroCount > 0 then
  79. local skillBase = skillInfo.skillBase
  80. return math.floor(assistSkillConfig[parValue].ex.damageNums * skillBase * 0.75)
  81. end
  82. return 0
  83. end
  84. -- 辅助技能评价 - 汤圆 - 1221 群治疗:落点周围8格的英雄总共提升X倍基础战力
  85. -- 公式: if:我方英雄数量>0,0.25*技能色块战力*75%, else 0
  86. function funcs:getAiAssiSkillEvaluate1221(core, skillInfo, params, assistSkillConfig)
  87. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  88. -- params1 = {ex={upNums=0.25}},
  89. local enemyHeroCount = params.enemyHeroCount -- 敌方英雄个数;
  90. if enemyHeroCount > 0 then
  91. local skillBase = skillInfo.skillBase
  92. return math.floor(assistSkillConfig[parValue].ex.upNums * skillBase * 0.75)
  93. end
  94. return 0
  95. end
  96. -- 辅助技能评价 - 穗穗 - 4221 迷雾加防:在迷雾内的英雄受到伤害减伤X%
  97. -- 公式: 英雄总战力*25%*50%
  98. function funcs:getAiAssiSkillEvaluate4221(core, skillInfo, params, assistSkillConfig)
  99. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  100. -- params1 = {defendPercent=10},
  101. local selfHeroTotalEv = params.selfHeroTotalEv
  102. return math.floor(assistSkillConfig[parValue].defendPercent * selfHeroTotalEv * 0.25 * 0.5)
  103. end
  104. -- 辅助技能评价 - 絮絮 - 3221 护甲强化:受到伤害降低增加到X%
  105. -- 公式: 生成英雄战力*5%*65%
  106. function funcs:getAiAssiSkillEvaluate3221(core, skillInfo, params, assistSkillConfig)
  107. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  108. -- params1 = {defendPercent=55},
  109. local newHeroAttack = params.newHeroAttack
  110. return math.floor(assistSkillConfig[parValue].defendPercent * newHeroAttack * 0.05)
  111. end
  112. -- 辅助技能评价 - 颠颠 - 2231 群伤害:对敌方最低英雄战力英雄周围9格总共造成X倍基础战力
  113. -- 公式: if:对面英雄数量>0,0.25*技能色块战力*75%, else 0
  114. function funcs:getAiAssiSkillEvaluate2231(core, skillInfo, params, assistSkillConfig)
  115. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  116. -- params1 = {ex={damageNums=0.25}},
  117. local enemyHeroCount = params.enemyHeroCount
  118. if enemyHeroCount > 0 then
  119. local skillBase = skillInfo.skillBase
  120. return math.floor(assistSkillConfig[parValue].ex.damageNums * skillBase * 0.75)
  121. end
  122. return 0
  123. end
  124. -- 辅助技能评价 - 念想 - 1231 战力提升量增加到X倍基础战力
  125. -- 公式: 0.25*技能色块战力*100%
  126. function funcs:getAiAssiSkillEvaluate1231(core, skillInfo, params, assistSkillConfig)
  127. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  128. -- params1 = {upNums=1.25},
  129. local skillBase = skillInfo.skillBase
  130. return math.floor(assistSkillConfig[parValue].upNums * skillBase * 1)
  131. end
  132. -- 辅助技能评价 - 奎 - 4231 色块额外提供X%的基础战力
  133. -- 公式: 0.25*技能色块战力*100%
  134. function funcs:getAiAssiSkillEvaluate4231(core, skillInfo, params, assistSkillConfig)
  135. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  136. -- params1 = {upNums=1.25},
  137. local skillBase = skillInfo.skillBase
  138. return math.floor(assistSkillConfig[parValue].upNums * skillBase * 1)
  139. end
  140. -- 辅助技能评价 - 眠眠 - 3231 囚禁加伤:造成X%英雄战力伤害
  141. -- 公式: 敌方最弱英雄战力*20%*75%
  142. function funcs:getAiAssiSkillEvaluate3231(core, skillInfo, params, assistSkillConfig)
  143. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  144. -- params1 = {ex={damagePercent=20}},
  145. -- 最弱的敌人
  146. local enemyHeroList = params.enemyHeroList
  147. local selfHeroLowestEv = 0
  148. if #enemyHeroList > 0 and enemyHeroList[1] then
  149. selfHeroLowestEv = self:getHeroEvaluate(core, enemyHeroList[1]) or 0
  150. end
  151. return math.floor(assistSkillConfig[parValue].ex.damagePercent * selfHeroLowestEv * 0.01 * 0.75)
  152. end
  153. -- 辅助技能评价 - 晴色 - 2241 额外燃烧敌人3个格子,消除时会造成基地X倍基础战力伤害
  154. -- 公式: 3*0.25%*技能色块战力*50%
  155. function funcs:getAiAssiSkillEvaluate2241(core, skillInfo, params, assistSkillConfig)
  156. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  157. -- params1 = {damageNums=1},
  158. local skillBase = skillInfo.skillBase
  159. return math.floor(assistSkillConfig[parValue].damageNums * 3 * skillBase * 0.5)
  160. end
  161. -- 辅助技能评价 - 鸢萝 - 1241 伤害加强:对基地造成伤害提升为X%
  162. -- 公式: if 对面英雄数量=1,13%*敌方英雄战力*50%,else 0
  163. function funcs:getAiAssiSkillEvaluate1241(core, skillInfo, params, assistSkillConfig)
  164. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  165. -- params1 = {ex={damagePercent=63}},
  166. local enemyHeroCount = params.enemyHeroCount
  167. if enemyHeroCount == 1 then
  168. local enemyHeroTotalEv = params.enemyHeroTotalEv
  169. return math.floor(assistSkillConfig[parValue].ex.damagePercent * 0.01 * enemyHeroTotalEv * 0.5)
  170. end
  171. return 0
  172. end
  173. -- 辅助技能评价 - 阿空 - 4241 生成强化:生成的英雄战力加强X%
  174. -- 公式: 0.2*技能色块战力*3*100%
  175. function funcs:getAiAssiSkillEvaluate4241(core, skillInfo, params, assistSkillConfig)
  176. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  177. -- params1 = {heroLiveNums=1.2},
  178. local skillBase = skillInfo.skillBase
  179. return math.floor(assistSkillConfig[parValue].heroLiveNums * skillBase * 3 * 0.2)
  180. end
  181. -- 辅助技能评价 - 象琪 - 3241 消除加强:使用主技能,该回合结束后扣除对面基地血量本回合消除色块数*X%的基础战力
  182. -- 公式: 13*(0.1)*技能色块战力*50%
  183. function funcs:getAiAssiSkillEvaluate3241(core, skillInfo, params, assistSkillConfig)
  184. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  185. -- params1 = {damageNums=0.1},
  186. local skillBase = skillInfo.skillBase
  187. return math.floor(assistSkillConfig[parValue].damageNums * 13 * skillBase * 0.5)
  188. end
  189. -- 辅助技能评价 - 绮罗 - 2251 电弧反弹:自身受到的伤害减免X%,反射伤害增加Y%
  190. -- 公式: 效果英雄战力*(5%)*75%+效果英雄战力*(5%)*75%
  191. function funcs:getAiAssiSkillEvaluate2251(core, skillInfo, params, assistSkillConfig)
  192. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  193. -- params1 = {damagePercent=55},
  194. local newHeroAttack = params.newHeroAttack
  195. return math.floor(
  196. (assistSkillConfig[parValue].damagePercent * newHeroAttack * 0.75) +
  197. (assistSkillConfig[parValue].damagePercent * newHeroAttack * 0.75)
  198. )
  199. end
  200. -- 辅助技能评价 - 风月 - 1251 属性窃取:下降拉取英雄的50%英雄战力,提升自己X倍的倍拉取英雄下降的英雄战力
  201. -- 公式: max{(敌方所有英雄战力总和-我方所有英雄战力总和),0}*(1.5*0.5-0.5)*50%
  202. function funcs:getAiAssiSkillEvaluate1251(core, skillInfo, params, assistSkillConfig)
  203. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  204. -- params1 = {ex={damagePercent=50,upX=1.5}},
  205. local enemyHeroTotalEv = params.enemyHeroTotalEv
  206. local selfHeroTotalEv = params.selfHeroTotalEv
  207. return math.floor(
  208. max(enemyHeroTotalEv - selfHeroTotalEv, 0) * (assistSkillConfig[parValue].ex.upX * 0.5 - 0.5) * 0.5
  209. )
  210. end
  211. -- 辅助技能评价 - 凛凛 - 4251 绝对领域:封锁区域内英雄buff不会触发,并造成X倍英雄基础战力伤害
  212. -- 公式: 1*技能色块战力*75%
  213. function funcs:getAiAssiSkillEvaluate4251(core, skillInfo, params, assistSkillConfig)
  214. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  215. -- params1 = {damageNums = 1},
  216. local skillBase = skillInfo.skillBase
  217. return math.floor(assistSkillConfig[parValue].damageNums * skillBase * 0.75)
  218. end
  219. -- 辅助技能评价 - 常明 - 3251 生命转化:将免疫期间主角受到的攻击值的%s转化为主角的血量恢复
  220. -- 公式: 预估敌方下回合伤害基地 = (max(敌方总战力-我方总战力, 0) + 5*敌方平均卡牌战力) - 我方总战力
  221. -- if 预估敌方下回合伤害基地>0, 预估敌方下回合伤害基地*20%*50%,else 0
  222. function funcs:getAiAssiSkillEvaluate3251(core, skillInfo, params, assistSkillConfig)
  223. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  224. -- params1 = {percent=20},
  225. local enemyHeroTotalEv = params.enemyHeroTotalEv
  226. local selfHeroTotalEv = params.selfHeroTotalEv
  227. local enemyAverageBaseAttack = params.enemyAverageBaseAttack
  228. local ve = (max(enemyHeroTotalEv - selfHeroTotalEv, 0) + 5 * enemyAverageBaseAttack) - selfHeroTotalEv
  229. if ve > 0 then
  230. return math.floor(assistSkillConfig[parValue].percent * 0.01 * ve * 0.5)
  231. end
  232. return 0
  233. end
  234. -- 辅助技能评价 - 花椒 - 2261 对方主角对叛变英雄的伤害减少至X%
  235. -- 公式: sum(敌方英雄战力*位置系数)*(50-X)%
  236. function funcs:getAiAssiSkillEvaluate2261(core, skillInfo, params, assistSkillConfig)
  237. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  238. -- params1 = {ex={damagePercent=40}},
  239. local enemyHeroTotalEv = params.enemyHeroTotalEv
  240. return math.floor((50 - assistSkillConfig[parValue].ex.damagePercent) * enemyHeroTotalEv * 0.01)
  241. end
  242. -- 辅助技能评价 - 小景 - 1261 分裂的伙伴英雄战力增加至X倍小景基础战力
  243. -- 公式: 0.5*技能色块战力*100%
  244. function funcs:getAiAssiSkillEvaluate1261(core, skillInfo, params, assistSkillConfig)
  245. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  246. -- params1 = {heroLiveNums=1.5},
  247. local skillBase = skillInfo.skillBase
  248. return math.floor(assistSkillConfig[parValue].heroLiveNums * skillBase * 1)
  249. end
  250. -- 辅助技能评价 - 百戏 - 4261 为自身增加1个减伤X%的盾,只抵挡1次,不可叠加
  251. -- 公式: 5*敌方平均卡牌战力*55%*50%
  252. function funcs:getAiAssiSkillEvaluate4261(core, skillInfo, params, assistSkillConfig)
  253. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  254. -- params1 = {defendPercent=55},
  255. local enemyAverageBaseAttack = params.enemyAverageBaseAttack
  256. return math.floor(5 * assistSkillConfig[parValue].defendPercent * 0.01 * enemyAverageBaseAttack * 0.5)
  257. end
  258. -- 辅助技能评价 - 疏雨 - 3261 羁绊:当英雄处于援军召唤状态下,该英雄所受到伤害的%s会被我方的召唤物分担
  259. -- 公式: 20%*英雄基础战力*50%
  260. function funcs:getAiAssiSkillEvaluate3261(core, skillInfo, params, assistSkillConfig)
  261. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  262. -- params1 = {ex={damagePercent=20}},
  263. local baseAttack = params.baseAttack
  264. return math.floor(assistSkillConfig[parValue].ex.damagePercent * 0.01 * baseAttack * 0.5)
  265. end
  266. -- 辅助技能评价 - 金羽 - 2351 主技能生效前为对方召唤X个0.5格战力的单位
  267. -- 公式: 1*0.5*英雄基础战力
  268. function funcs:getAiAssiSkillEvaluate2351(core, skillInfo, params, assistSkillConfig)
  269. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  270. -- params1 = {num=1},
  271. local baseAttack = params.baseAttack
  272. local skillBase = skillInfo.skillBase
  273. return math.floor(assistSkillConfig[parValue].num * baseAttack * 0.5)
  274. end
  275. -- 辅助技能评价 - 盈缺 - 1351 攻击时伤害提升X%,承受伤害增加X%
  276. -- 公式: 生成英雄战力*12.5%*75%
  277. function funcs:getAiAssiSkillEvaluate1351(core, skillInfo, params, assistSkillConfig)
  278. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  279. -- params1 = {defendPercent=-12.5},
  280. -- params1 = {ex={damagePercent=112.5}},
  281. local paramsValue = 0
  282. if assistSkillConfig[parValue].ex then
  283. paramsValue = assistSkillConfig[parValue].ex.damagePercent
  284. else
  285. paramsValue = assistSkillConfig[parValue].defendPercent
  286. end
  287. local newHeroAttack = params.newHeroAttack
  288. return math.floor(paramsValue * newHeroAttack * 0.75)
  289. end
  290. -- 辅助技能评价 - 无情 - 4351 增强加强:吸收队友X%加强自己Y倍吸收的战力值
  291. -- 公式: 除了生成英雄以外的最弱英雄*(1.1*20%-20%)*100%
  292. function funcs:getAiAssiSkillEvaluate4351(core, skillInfo, params, assistSkillConfig)
  293. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  294. -- params1 = {ex={damagePercent=20,upX=1.1}},
  295. -- 最弱的敌人
  296. local enemyHeroList = params.enemyHeroList
  297. local enemyHeroLowestEv = 0
  298. if #enemyHeroList > 0 and enemyHeroList[1] then
  299. enemyHeroLowestEv = self:getHeroEvaluate(core, enemyHeroList[1]) or 0
  300. end
  301. -- 最弱的自己人
  302. local selfHeroList = params.selfHeroList
  303. local selfHeroLowestEv = 0
  304. if #selfHeroList > 0 and selfHeroList[1] then
  305. selfHeroLowestEv = self:getHeroEvaluate(core, selfHeroList[1]) or 0
  306. end
  307. local newHeroAttack = params.newHeroAttack
  308. if selfHeroLowestEv == newHeroAttack then
  309. if #selfHeroList > 1 and selfHeroList[2] then
  310. selfHeroLowestEv = self:getHeroEvaluate(core, selfHeroList[2]) or 0
  311. end
  312. end
  313. local minHero = min(enemyHeroLowestEv, selfHeroLowestEv)
  314. return math.floor(
  315. (assistSkillConfig[parValue].ex.upX * assistSkillConfig[parValue].ex.damagePercent -
  316. assistSkillConfig[parValue].ex.damagePercent) *
  317. minHero *
  318. 1
  319. )
  320. end
  321. -- 辅助技能评价 - 小青 - 3351 灵魂吸收:吸收我方死亡的英雄战力X%
  322. -- 公式: 我方英雄战力(不包括新生成英雄)*20%*100%
  323. function funcs:getAiAssiSkillEvaluate3351(core, skillInfo, params, assistSkillConfig)
  324. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  325. -- params1 = {ex={upPercent=20}},
  326. local newHeroAttack = params.newHeroAttack
  327. local selfHeroTotalEv = params.selfHeroTotalEv
  328. local ev = max(selfHeroTotalEv - newHeroAttack, 0)
  329. return math.floor(assistSkillConfig[parValue].ex.upPercent * 0.01 * ev * 1)
  330. end
  331. -- 辅助技能评价 - 乔乔 - 2361 吸收消灭英雄的X%战力
  332. -- 公式: 敌方最弱英雄战力*20%*100%
  333. function funcs:getAiAssiSkillEvaluate2361(core, skillInfo, params, assistSkillConfig)
  334. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  335. -- params1 = {ex={percent=20}},
  336. local selfHeroList = params.selfHeroList
  337. local selfHeroLowestEv = 0
  338. if #selfHeroList > 0 and selfHeroList[1] then
  339. selfHeroLowestEv = self:getHeroEvaluate(core, selfHeroList[1]) or 0
  340. end
  341. return math.floor(assistSkillConfig[parValue].ex.percent * 0, 01 * selfHeroLowestEv * 1)
  342. end
  343. -- 辅助技能评价 - 十里 - 1361 消除加强:使用主技能,回合结束后基地血量恢复本回合消除色块数*10%的基础战力
  344. -- 公式: 10(消除估值)*10%*英雄基础战力*50%
  345. function funcs:getAiAssiSkillEvaluate1361(core, skillInfo, params, assistSkillConfig)
  346. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  347. -- params1 = {upNums=0.1},
  348. local baseAttack = params.baseAttack
  349. return math.floor(10 * assistSkillConfig[parValue].upNums * baseAttack * 0.5)
  350. end
  351. -- 辅助技能评价 - 千两 - 4361 弹弹乐:弹射数量加X,弹射威力为A%、B%、C%、D%
  352. -- 公式: 生成英雄战力*25%*75%
  353. function funcs:getAiAssiSkillEvaluate4361(core, skillInfo, params, assistSkillConfig)
  354. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  355. -- params1 = {num=2},
  356. local newHeroAttack = params.newHeroAttack
  357. return math.floor(assistSkillConfig[parValue].ex.damageNums * 0.1 * newHeroAttack * 0.75)
  358. end
  359. -- 辅助技能评价 - 一叶 - 3361 生成强化:生成的英雄战力加强X%
  360. -- 公式: 我方平均技能色块战力*3*65%*40%
  361. function funcs:getAiAssiSkillEvaluate3361(core, skillInfo, params, assistSkillConfig)
  362. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  363. -- params1 = {heroLiveNums=1.4},
  364. local averageBaseAttack = params.averageBaseAttack
  365. local averageBaseAttack = skillInfo.skillBase
  366. return math.floor(3 * assistSkillConfig[parValue].heroLiveNums * averageBaseAttack * 0.65)
  367. end
  368. -- 辅助技能评价 - 团团 - 2281 每炸毁一个技能,为团团提升%x技能战力的英雄战力
  369. -- 公式: 敌方技能数量*0.5*英雄基础战力*100%
  370. function funcs:getAiAssiSkillEvaluate2281(core, skillInfo, params, assistSkillConfig)
  371. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  372. -- params1 = {upNums=0.5},
  373. local enemyHeroCount = params.enemyHeroCount
  374. local baseAttack = params.baseAttack
  375. return math.floor(enemyHeroCount * assistSkillConfig[parValue].upNums * baseAttack * 1)
  376. end
  377. -- 辅助技能评价 - 烧麦 - 1281 持续恢复期间,随机消除X个色块生成英雄,生成新的英雄的战力为1倍技能战力
  378. -- 公式: 1*英雄基础战力*100%
  379. function funcs:getAiAssiSkillEvaluate1281(core, skillInfo, params, assistSkillConfig)
  380. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  381. -- params1 = {num=1},
  382. local baseAttack = params.baseAttack
  383. return math.floor(assistSkillConfig[parValue].num * baseAttack * 1)
  384. end
  385. -- 辅助技能评价 - 猴宝 - 4281 每转移一个技能,己方英雄战力增加%x倍英雄基础战力
  386. -- 公式: 敌方技能数量*0.5*英雄基础战力*100%
  387. function funcs:getAiAssiSkillEvaluate4281(core, skillInfo, params, assistSkillConfig)
  388. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  389. -- params1 = {upNums=0.5},
  390. local enemyHeroCount = params.enemyHeroCount
  391. local baseAttack = params.baseAttack
  392. return math.floor(enemyHeroCount * assistSkillConfig[parValue].upNums * baseAttack * 1)
  393. end
  394. -- 辅助技能评价 - 阿呆 - 3281 抵消对方技能效果后,获得X%的怒气值增涨
  395. -- 公式: 己方英雄技能平均收益*10%
  396. function funcs:getAiAssiSkillEvaluate3281(core, skillInfo, params, assistSkillConfig)
  397. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  398. -- params1 = {ex={upPercent=10}},
  399. local averageBaseAttack = params.averageBaseAttack
  400. return math.floor(assistSkillConfig[parValue].ex.upPercent * averageBaseAttack * 0.01)
  401. end
  402. -- 辅助技能评价 - 夜阑 - 2291 能量转化效果提升X%,若该次伤害超过该英雄的X%,则该次攻击变为一击毙命
  403. -- 公式: 生成英雄战力*5%*100%
  404. function funcs:getAiAssiSkillEvaluate2291(core, skillInfo, params, assistSkillConfig)
  405. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  406. -- params1 = {ex={percent=90}},
  407. local newHeroAttack = params.newHeroAttack
  408. return math.floor(assistSkillConfig[parValue].ex.damageNums * 0.01 * newHeroAttack * 1)
  409. end
  410. -- 辅助技能评价 - 桃桃 - 1291 加强效果增强%s
  411. -- 公式: 己方英雄总战力*(30-25%)*100%
  412. function funcs:getAiAssiSkillEvaluate1291(core, skillInfo, params, assistSkillConfig)
  413. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  414. -- params1 = {upPercent=30},
  415. local selfHeroTotalEv = params.selfHeroTotalEv
  416. return math.floor((assistSkillConfig[parValue].upPercent - 25) * 0.01 * selfHeroTotalEv * 1)
  417. end
  418. -- 辅助技能评价 - 倒倒 - 4291 每撤退一个英雄,倒倒的攻击力提升%s倍英雄基础战力
  419. -- 公式: count(我方英雄位置!=5)*1*英雄基础战力
  420. function funcs:getAiAssiSkillEvaluate4291(core, skillInfo, params, assistSkillConfig)
  421. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  422. -- params1 = {ex={upNums=1}},
  423. local selfHeroList = params.selfHeroList
  424. local newBlockXYMap = params.newBlockXYMap
  425. local baseAttack = params.baseAttack
  426. local count = 0
  427. for _, hero in ipairs(selfHeroList) do
  428. if newBlockXYMap[hero.bindBlock.id].y > 0 then
  429. count = count + 1
  430. end
  431. end
  432. return math.floor(assistSkillConfig[parValue].ex.upNums * count * baseAttack)
  433. end
  434. -- 辅助技能评价 - 咕噜 - 3291 被偷的主动技能可附带本英雄同等级的辅助技能效果
  435. -- 公式: 1*英雄基础战力
  436. function funcs:getAiAssiSkillEvaluate3291(core, skillInfo, params, assistSkillConfig)
  437. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  438. -- params1 = {assistSkillLevel=1},
  439. local baseAttack = params.baseAttack
  440. return math.floor(assistSkillConfig[parValue].assistSkillLevel * baseAttack)
  441. end
  442. -- 辅助技能评价 - 画意 - 2311 buff生成的万能色块获得增益,消除额外提升X%的基础战力
  443. -- 公式: 0.5*英雄基础战力
  444. function funcs:getAiAssiSkillEvaluate2311(core, skillInfo, params, assistSkillConfig)
  445. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  446. -- params1 = {upNums=0.5},
  447. local baseAttack = params.baseAttack
  448. return math.floor(assistSkillConfig[parValue].upNums * baseAttack)
  449. end
  450. -- 辅助技能评价 - 糯米 - 1311 破盾后,【护盾值】的s%转化为英雄自身战力
  451. -- 公式: 生成英雄战力*10%*100%
  452. function funcs:getAiAssiSkillEvaluate1311(core, skillInfo, params, assistSkillConfig)
  453. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  454. -- params1 = {ex={percent=10}},
  455. local newHeroAttack = params.newHeroAttack
  456. return math.floor(assistSkillConfig[parValue].ex.percent * 0.01 * newHeroAttack * 1)
  457. end
  458. -- 辅助技能评价 - 纤纤 - 4311 伤害加深:消除色块对敌方主角造成的伤害增加%s
  459. -- 公式: 4*对应技能色块战力*(110%-100%)*50%
  460. function funcs:getAiAssiSkillEvaluate4311(core, skillInfo, params, assistSkillConfig)
  461. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  462. -- params1 = {damagePercent=110},
  463. local skillBase = skillInfo.skillBase
  464. return math.floor(4 * (assistSkillConfig[parValue].damagePercent - 100) * 0.01 * skillBase * 0.5)
  465. end
  466. -- 辅助技能评价 - 孤梦 - 3311 被冻结的英雄受到的伤害增加50%
  467. -- 公式: if:敌方英雄总战力>1.5倍我方英总z战力,我方英雄总战力*50%*75%,else:敌方英雄总战力*50%*75%
  468. function funcs:getAiAssiSkillEvaluate3311(core, skillInfo, params, assistSkillConfig)
  469. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  470. -- params1 = {defendPercent=-50},
  471. local enemyHeroTotalEv = params.enemyHeroTotalEv
  472. local selfHeroTotalEv = params.selfHeroTotalEv
  473. local defendPercent = math.abs(assistSkillConfig[parValue].defendPercent)
  474. if enemyHeroTotalEv > (1.5 * selfHeroTotalEv) then
  475. return math.floor(defendPercent * 0.01 * selfHeroTotalEv * 0.75)
  476. else
  477. return math.floor(defendPercent * 0.01 * enemyHeroTotalEv * 0.75)
  478. end
  479. end
  480. -- 辅助技能评价 - 不酸 - 2321 单次攻击伤害增加至X%
  481. -- 公式: (30-25)%*4*生成英雄战力*75%
  482. function funcs:getAiAssiSkillEvaluate2321(core, skillInfo, params, assistSkillConfig)
  483. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  484. -- params1 = {ex={damagePercent={30, 30, 30, 30}}},
  485. local defendPercent = (assistSkillConfig[parValue].ex.damagePercent or {})[1] or 0
  486. local newHeroAttack = params.newHeroAttack
  487. return math.floor((defendPercent - 25) * newHeroAttack * 0.75)
  488. end
  489. -- 辅助技能评价 - 绿蛛 - 1321 伙伴牺牲的同时为自己主角恢复%s倍技能战力的血量
  490. -- 公式: 1*英雄基础战力*50%
  491. function funcs:getAiAssiSkillEvaluate1321(core, skillInfo, params, assistSkillConfig)
  492. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  493. -- params1 = {upNums=1},
  494. local defendPercent = assistSkillConfig[parValue].upNums
  495. local baseAttack = params.baseAttack
  496. return math.floor(defendPercent * baseAttack * 0.5)
  497. end
  498. -- 辅助技能评价 - 云中客 - 4321 缔结对方主角血量,己方主角伤害减免%s,并且接下来一回合内己方主角所受伤害同时反馈%s给对方
  499. -- 公式: 10*0.1*英雄基础战力
  500. function funcs:getAiAssiSkillEvaluate4321(core, skillInfo, params, assistSkillConfig)
  501. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  502. -- params1 = {defendPercent=10},
  503. local defendPercent = assistSkillConfig[parValue].defendPercent
  504. local baseAttack = params.baseAttack
  505. return math.floor(defendPercent * baseAttack * 0.1)
  506. end
  507. -- 辅助技能评价 - 酿酿 - 3321 第二次攻击的攻击比例提升s%
  508. -- 公式: 生成英雄战力*(60-50)%*75%
  509. function funcs:getAiAssiSkillEvaluate3321(core, skillInfo, params, assistSkillConfig)
  510. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  511. -- params1 = {ex={damagePercent=60}},
  512. local damagePercent = assistSkillConfig[parValue].ex.damagePercent
  513. local newHeroAttack = params.newHeroAttack
  514. return math.floor((damagePercent - 50) * newHeroAttack * 0.75)
  515. end
  516. -- 辅助技能评价 - 阿筝 - 2331 交换获得的英雄获得被换英雄战力的%s
  517. -- 公式: 我方最弱英雄*60%
  518. function funcs:getAiAssiSkillEvaluate2331(core, skillInfo, params, assistSkillConfig)
  519. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  520. -- params1 = {ex={percent=60}},
  521. local percent = assistSkillConfig[parValue].ex.percent
  522. -- 最弱的自己人
  523. local selfHeroList = params.selfHeroList
  524. local selfHeroLowestEv = 0
  525. if #selfHeroList > 0 and selfHeroList[1] then
  526. selfHeroLowestEv = self:getHeroEvaluate(core, selfHeroList[1]) or 0
  527. end
  528. return math.floor(percent * selfHeroLowestEv * 0.01)
  529. end
  530. -- 辅助技能评价 - 影生 - 1331 使用影生主动技能时,根据对方棋盘的技能数量提升英雄战力,每个技能提升%x被基础战力
  531. -- 公式: 敌方英雄技能数量*1*英雄基础战力*100%
  532. function funcs:getAiAssiSkillEvaluate1331(core, skillInfo, params, assistSkillConfig)
  533. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  534. -- params1 = {ex={upNums=1}},
  535. local upNums = assistSkillConfig[parValue].ex.upNums
  536. local enemyHeroCount = params.enemyHeroCount
  537. local baseAttack = params.baseAttack
  538. return math.floor(upNums * baseAttack * 1)
  539. end
  540. -- 辅助技能评价 - 江流儿 - 4331 对面虚弱期间对我方英雄造成伤害值的%s转化为主角气血恢复。
  541. -- 公式: (max{(敌方所有英雄战力总和-我方所有英雄战力总和),0}+5*敌方平均技能色块战力)*50%*10%*50%
  542. function funcs:getAiAssiSkillEvaluate4331(core, skillInfo, params, assistSkillConfig)
  543. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  544. -- params1 = {ex={percent=10}},
  545. local percent = assistSkillConfig[parValue].ex.percent
  546. local enemyHeroTotalEv = params.enemyHeroTotalEv
  547. local selfHeroTotalEv = params.selfHeroTotalEv
  548. local enemyAverageBaseAttack = params.enemyAverageBaseAttack
  549. local ev = (max((enemyHeroTotalEv - selfHeroTotalEv), 0) + 5 * enemyAverageBaseAttack) * 0.5 * percent * 0.5 * 0.01
  550. return math.floor(ev)
  551. end
  552. -- 辅助技能评价 - 烟波 - 3331 因为叛变被杀死英雄属性的%s转化为主角血量
  553. -- 公式: sum(我英雄战力*位置系数)*60%*50%
  554. -- 第一排:第二排:第三排:第四排:第五排=100%:70%:50%:30%:10%(第一排为接近中线的那排)
  555. function funcs:getAiAssiSkillEvaluate3331(core, skillInfo, params, assistSkillConfig)
  556. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  557. -- params1 = {ex={percent=50}},
  558. local percent = assistSkillConfig[parValue].ex.percent
  559. -- TODO: Debug 测试代码,上线前修改过来.
  560. local selfHeroCount = params.selfHeroCount
  561. local averageBaseAttack = params.averageBaseAttack
  562. return math.floor(percent * selfHeroCount * averageBaseAttack * 0.5)
  563. end
  564. -- 辅助技能评价 - 含光 - 2341 增加的临时护盾%s转变为装备护盾
  565. -- 公式: 我方全体英雄战力*50%*10%*65%
  566. function funcs:getAiAssiSkillEvaluate2341(core, skillInfo, params, assistSkillConfig)
  567. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  568. -- params1 = {ex={percent=10}},
  569. local percent = assistSkillConfig[parValue].ex.percent
  570. local selfHeroTotalEv = params.selfHeroTotalEv
  571. return math.floor(percent * 0.01 * selfHeroTotalEv * 0.5 * 0.65)
  572. end
  573. -- 辅助技能评价 - 暖阳 - 1341 增加的临时攻击力,%s转化为英雄装备武器
  574. -- 公式: 我方全体英雄战力*50%*10%*65%
  575. function funcs:getAiAssiSkillEvaluate1341(core, skillInfo, params, assistSkillConfig)
  576. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  577. -- params1 = {ex={percent=10}},
  578. local percent = assistSkillConfig[parValue].ex.percent
  579. local selfHeroTotalEv = params.selfHeroTotalEv
  580. return math.floor(percent * 0.01 * selfHeroTotalEv * 0.5 * 0.65)
  581. end
  582. -- 辅助技能评价 - 蹴鞠 - 4341 使用主动技能受到的伤害的%s转化为主角血量
  583. -- 公式: 3*英雄基础战力*50%*50%
  584. function funcs:getAiAssiSkillEvaluate4341(core, skillInfo, params, assistSkillConfig)
  585. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  586. -- params1 = {ex={percent=50}},
  587. local percent = assistSkillConfig[parValue].ex.percent
  588. local baseAttack = params.baseAttack
  589. return math.floor(3 * percent * 0.01 * baseAttack * 0.5)
  590. end
  591. -- 辅助技能评价 - 璨月 - 3341 追击伤害提升%s
  592. -- 公式: (55-50)%*敌方英雄数量*英雄基础战力*75%
  593. function funcs:getAiAssiSkillEvaluate3341(core, skillInfo, params, assistSkillConfig)
  594. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  595. -- params1 = {ex={damagePercent=55}},
  596. local damagePercent = assistSkillConfig[parValue].ex.damagePercent
  597. local enemyHeroCount = params.enemyHeroCount
  598. local baseAttack = params.baseAttack
  599. return math.floor((damagePercent - 50) * enemyHeroCount * baseAttack * 0.75)
  600. end
  601. -- 辅助技能评价 - -
  602. -- 公式:
  603. function funcs:getAiAssiSkillEvaluate1002(core, skillInfo, params, assistSkillConfig)
  604. local parValue = string.format("params%s", skillInfo.newHeroAssistSkillLevel)
  605. --
  606. local damagePercent = assistSkillConfig[parValue].ex.damagePercent
  607. local enemyHeroCount = params.enemyHeroCount
  608. local skillBase = skillInfo.skillBase
  609. return math.floor(damagePercent * skillBase * 0.75)
  610. end
  611. -- 获取英雄的战力
  612. function funcs:getHeroEvaluate(core, hero)
  613. -- local buffs = hero:getBuffByType(battleConst.BUFF_TYPE.VALUE_SHIELD)
  614. -- local shield = 0
  615. -- for _, buff in ipairs(buffs) do
  616. -- shield = shield + (buff.hp or 0)
  617. -- end
  618. -- return hero:getHp() + shield * 0.5
  619. return hero:getHp()
  620. end
  621. return root