CombatObj.lua 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650
  1. --战斗对象相关
  2. -- init 初始化对象
  3. -- setInitAttr 设置默认属性
  4. local RoleDefine = require("role.RoleDefine")
  5. local RoleAttr = require("role.RoleAttr")
  6. local CombatDefine = require("combat.CombatDefine")
  7. local CombatBuff = require("combat.CombatBuff")
  8. local BeSkill = require("combat.BeSkill")
  9. local CombatImpl = require("combat.CombatImpl")
  10. objs = objs or {} -- [pos]->obj
  11. helps = helps or {}
  12. side2AddTimes = {}
  13. -- 初始化
  14. function initAfterStart()
  15. for pos = 1, CombatDefine.COMBAT_HERO_ALL_CNT do
  16. local attr = {} -- 最终属性
  17. RoleAttr.initCombatAttr(attr)
  18. local initAttr = {} -- 默认属性
  19. RoleAttr.initCombatAttr(initAttr)
  20. local sysAttr = {} -- 战前附加系统属性(比如地牢,被动技能)
  21. RoleAttr.initCombatAttr(sysAttr)
  22. local bufferAttr = {}
  23. RoleAttr.initCombatAttr(bufferAttr)
  24. local bufferAttr2 = {}
  25. local obj = {}
  26. objs[pos] = obj
  27. obj.pos = pos -- 站位位置
  28. obj.helpType = CombatDefine.HELP_TYPE0 -- 辅助对象类型 武将/魔兽
  29. obj.side = pos > CombatDefine.COMBAT_HERO_CNT and CombatDefine.DEFEND_SIDE or CombatDefine.ATTACK_SIDE -- 进攻方/防守方
  30. obj.backupPos = nil --
  31. obj.beBackup = nil --
  32. obj.id = nil -- 对象ID
  33. obj.type = nil -- 对象类型
  34. obj.quality = nil -- 品质
  35. obj.hp = nil -- 当前HP
  36. obj.mp = nil -- 当前MP
  37. obj.initHp = nil
  38. obj.initMp = nil
  39. obj.job = nil -- 职业类型
  40. obj.body = nil -- 模型
  41. obj.dietime = nil -- 死亡时间
  42. obj.dieSkill = nil
  43. obj.dieAtkCnt = nil
  44. obj.camp = nil
  45. obj.sex = nil
  46. obj.attr = attr
  47. obj.initAttr = initAttr
  48. obj.sysAttr = sysAttr
  49. obj.bufferAttr = bufferAttr
  50. obj.bufferAttr2 = bufferAttr2
  51. obj.buffer = {[0] = 0} -- obj身上的buff集合,buff[0]表示buff数量
  52. obj.bufferCmd = {} --控制类buffer
  53. obj.skillList = nil
  54. obj.beSkillList = nil
  55. obj.paramData = {}
  56. obj.result = {0,0,0,0} --战斗中输出和治疗 承受伤害 出手回合数 汇总
  57. obj.combatResult = {0,0,{},0,{}} --每次攻击造成的伤害和治疗
  58. obj.extraCombatRecord = nil --战斗中额外统计的数据
  59. obj.delayAddBuffer = nil
  60. obj.normalTarget = nil
  61. end
  62. for pos = 1,CombatDefine.COMBAT_HELP_ALL_CNT do
  63. local help = {}
  64. local attr = {} -- 最终属性
  65. RoleAttr.initCombatAttr(attr)
  66. help.attr = attr
  67. helps[pos + CombatDefine.COMBAT_HERO_ALL_CNT] = help
  68. help.pos = pos + CombatDefine.COMBAT_HERO_ALL_CNT
  69. help.helpType = pos%CombatDefine.COMBAT_HELP_CNT
  70. help.id = nil
  71. help.side = pos > CombatDefine.COMBAT_HELP_CNT and CombatDefine.DEFEND_SIDE or CombatDefine.ATTACK_SIDE
  72. help.skillList = nil
  73. help.beSkillList = nil
  74. help.lv = 0
  75. help.head = 0
  76. help.body = 0
  77. help.quality = 0
  78. help.result = {0,0,0,0} --战斗中输出和治疗 承受伤害 出手回合数 汇总
  79. help.combatResult = {0,0,{},0,{}} --每次攻击受到的伤害和治疗
  80. help.extraCombatRecord = nil --战斗中额外统计的数据
  81. help.isPet = help.helpType == 1
  82. end
  83. end
  84. function getObjByPos(pos)
  85. if pos <= CombatDefine.COMBAT_HERO_ALL_CNT then
  86. return objs[pos]
  87. else
  88. return helps[pos]
  89. end
  90. end
  91. function init(obj)
  92. obj.id = nil
  93. obj.type = nil
  94. obj.quality = nil
  95. obj.hp = nil
  96. obj.initHp = nil
  97. obj.initMp = nil
  98. obj.job = nil
  99. obj.body = nil
  100. obj.beSkillList = nil
  101. obj.skillList = nil
  102. obj.delayAddBuffer = nil
  103. obj.backupPos = nil
  104. obj.beBackup = nil
  105. obj.dietime = nil
  106. obj.dieSkill = nil
  107. obj.dieAtkCnt = nil
  108. obj.camp = nil
  109. obj.sex = nil
  110. obj.normalTarget = nil
  111. obj.notSkillBaoJi = nil
  112. obj.notBaoJi = nil
  113. for k in pairs(obj.buffer) do
  114. obj.buffer[k] = nil
  115. end
  116. obj.buffer[0] = 0
  117. for k,v in pairs(obj.bufferCmd) do
  118. obj.bufferCmd[k] = nil
  119. end
  120. for k,v in pairs(obj.paramData) do
  121. obj.paramData[k] = nil
  122. end
  123. for k in pairs(obj.bufferAttr2) do
  124. obj.bufferAttr2[k] = nil
  125. end
  126. obj.result[1] = 0
  127. obj.result[2] = 0
  128. obj.result[3] = 0
  129. obj.result[4] = 0
  130. obj.combatResult[1] = 0
  131. obj.combatResult[2] = 0
  132. for k in pairs(obj.combatResult[3]) do
  133. obj.combatResult[3][k] = nil
  134. end
  135. for k in pairs(obj.combatResult[5]) do
  136. obj.combatResult[5][k] = nil
  137. end
  138. obj.extraCombatRecord = nil
  139. RoleAttr.initCombatAttr(obj.attr)
  140. RoleAttr.initCombatAttr(obj.initAttr)
  141. RoleAttr.initCombatAttr(obj.sysAttr)
  142. RoleAttr.initCombatAttr(obj.bufferAttr)
  143. end
  144. --辅助对象相关
  145. function initHelp(help)
  146. help.id = nil
  147. help.skillList = nil
  148. help.beSkillList = nil
  149. help.lv = 0
  150. help.quality = 0
  151. help.head = 0
  152. help.body = 0
  153. help.icon = 0
  154. help.result[1] = 0
  155. help.result[2] = 0
  156. help.result[3] = 0
  157. help.result[4] = 0
  158. help.combatResult[1] = 0
  159. help.combatResult[2] = 0
  160. for k in pairs(help.combatResult[3]) do
  161. help.combatResult[3][k] = nil
  162. end
  163. for k in pairs(help.combatResult[5]) do
  164. help.combatResult[5][k] = nil
  165. end
  166. help.extraCombatRecord = nil
  167. RoleAttr.initCombatAttr(help.attr)
  168. end
  169. function setInitAttr(obj, attr)
  170. local initAttr = obj.initAttr
  171. for key in pairs(initAttr) do
  172. initAttr[key] = attr[key] or 0
  173. end
  174. calcAttr(obj)
  175. end
  176. NO_LIMIT_KEY = {
  177. [RoleDefine.ATK_RATE] = 1,
  178. [RoleDefine.DEF_RATE] = 1,
  179. [RoleDefine.HP_ADD_RATE] = 1,
  180. [RoleDefine.ZAOCHENG_HP_ADD_RATE] = 1,
  181. }
  182. local function checkLimit(attr)
  183. for k in pairs(attr) do
  184. if not NO_LIMIT_KEY[k] then
  185. attr[k] = attr[k] < 0 and 0 or attr[k]
  186. end
  187. end
  188. end
  189. local function calcFinalAttr(attr)
  190. attr[RoleDefine.ATK] = attr[RoleDefine.ATK] * (1 + attr[RoleDefine.ATK_RATE]/10000)
  191. attr[RoleDefine.SPEED] = attr[RoleDefine.SPEED] * (1 + attr[RoleDefine.SPEED_RATE]/10000)
  192. end
  193. function calcAttr(obj)
  194. RoleAttr.initCombatAttr(obj.attr)
  195. local attr = obj.attr
  196. local initAttr = obj.initAttr
  197. local sysAttr = obj.sysAttr
  198. local bufferAttr= obj.bufferAttr
  199. local bufferAttr2 = obj.bufferAttr2
  200. for key, val in pairs(initAttr) do
  201. attr[key] = val
  202. end
  203. for key ,val in pairs(bufferAttr) do
  204. attr[key] = attr[key] + val
  205. end
  206. for k ,v in pairs(bufferAttr2) do
  207. for key,val in pairs(v) do
  208. attr[key] = attr[key] + val
  209. end
  210. end
  211. for key ,val in pairs(sysAttr) do
  212. attr[key] = attr[key] + val
  213. end
  214. calcFinalAttr(attr)
  215. checkLimit(attr)
  216. if attr[RoleDefine.HP_RATE] > 0 and not side2AddTimes[obj.pos] then
  217. obj.hp = getHpMax(obj)
  218. side2AddTimes[obj.pos] = true
  219. end
  220. end
  221. function getHpMax(obj)
  222. if not obj then return end
  223. if not obj.attr then return end
  224. local hpMax = obj.attr[RoleDefine.HP]
  225. hpMax = math.ceil(hpMax * (1 + obj.attr[RoleDefine.HP_RATE]/10000))
  226. return hpMax
  227. end
  228. function onHpCB(obj,d, attackPos,skillID)
  229. if d == 0 then return end
  230. if obj.hp <= 0 then
  231. BeSkill.onDie(obj, d, attackPos)
  232. obj.dietime = os.time()
  233. obj.dieSkill = skillID
  234. obj.dieAtkCnt = CombatImpl.totalAtkCnt
  235. CombatBuff.onExtraCombatRecord(attackPos,1,"kill")
  236. else
  237. BeSkill.onHp(obj, d, attackPos)
  238. end
  239. if d < 0 then
  240. updateValue(obj, RoleDefine.RATE_COMBAT_NOW, -d)
  241. end
  242. end
  243. --获取伤害抵减
  244. local function getDijianHurtRate(obj)
  245. local rate = 0
  246. rate = rate + getValue(obj,RoleDefine.FANSHE_ZHUANGJIA)
  247. return rate
  248. end
  249. local function beforeUpdateHp(obj,sum)
  250. if BeSkill.beforeUpdateHp(obj,sum) then
  251. return
  252. end
  253. if CombatBuff.beforeUpdateHp(obj,sum) then
  254. return
  255. end
  256. --世界boss模式 不掉血量
  257. if CombatImpl.fightMode[1] == CombatDefine.FIGHT_MODE3 and obj.type == CombatDefine.COMBAT_OBJ_TYPE3 then
  258. return
  259. end
  260. return true
  261. end
  262. --血量改变类型
  263. SKILL_HP_TYPE = 1
  264. EXTRA_HP_TYPE = 2
  265. BUFFER_HP_TYPE = 3
  266. function updateHp(obj, value,isRevive,delayCB, attackPos,type)
  267. if obj.helpType ~= CombatDefine.HELP_TYPE0 then
  268. return 0
  269. end
  270. if obj.hp <= 0 and not isRevive then
  271. return 0
  272. end
  273. -- 加血变成减血
  274. if value > 0 then
  275. value = BeSkill.beforeMinusHp(obj, value)
  276. end
  277. --反射装甲buff对技能,额外伤害的抵减
  278. local dijianHurt = 0
  279. local dijianHurtRate = getDijianHurtRate(obj)
  280. if value < 0 and dijianHurtRate > 0 then
  281. if type == SKILL_HP_TYPE or type == EXTRA_HP_TYPE then
  282. dijianHurt = value * dijianHurtRate/10000
  283. value = value - dijianHurt
  284. end
  285. end
  286. if value == 0 then
  287. value = 1
  288. elseif value < 0 then
  289. value = math.floor(value)
  290. else
  291. value = math.ceil(value )
  292. end
  293. if type == SKILL_HP_TYPE then
  294. value = CombatBuff.checkBaohu(obj,value)
  295. end
  296. local sum = obj.hp + value
  297. -- 护盾值检测
  298. if value < 0 then
  299. local huDunValue = CombatBuff.getBuffHuDun(obj)
  300. if huDunValue > 0 then
  301. if huDunValue >= (-value) then
  302. sum = sum + (-value)
  303. CombatBuff.updateHuDun(obj, value)
  304. else
  305. sum = sum + huDunValue
  306. CombatBuff.updateHuDun(obj, -huDunValue)
  307. end
  308. end
  309. end
  310. local hpMax = getHpMax(obj)
  311. if sum > hpMax then
  312. sum = hpMax
  313. end
  314. local d = sum - obj.hp
  315. if d < 0 then
  316. local hurt = -d
  317. if hurt > obj.hp then
  318. hurt = obj.hp
  319. end
  320. d = -hurt
  321. end
  322. if sum < 0 then
  323. sum = 0
  324. end
  325. local ret = beforeUpdateHp(obj,sum)
  326. if ret then
  327. obj.hp = sum
  328. end
  329. if not delayCB then
  330. onHpCB(obj,d, attackPos)
  331. end
  332. --[[ if attackPos > 12 or obj.pos > 12 then
  333. print(" moshou hurt ", d , obj.pos ,attackPos)
  334. end
  335. ]]--
  336. if attackPos and d < 0 then
  337. CombatImpl.setObjBearResult(obj, d)
  338. end
  339. if isRevive == true and d > 0 then
  340. CombatImpl.setObjResult(obj.pos, d)
  341. elseif attackPos then
  342. CombatImpl.setObjResult(attackPos, d)
  343. end
  344. if d > 0 then
  345. obj.combatResult[2] = obj.combatResult[2] + d
  346. else
  347. obj.combatResult[1] = obj.combatResult[1] + d
  348. end
  349. if attackPos then
  350. obj.combatResult[3][attackPos] = obj.combatResult[3][attackPos] or {}
  351. if dijianHurt > 0 then
  352. obj.combatResult[3][attackPos][2] = obj.combatResult[3][attackPos][2] or 0
  353. obj.combatResult[3][attackPos][2] = obj.combatResult[3][attackPos][2] + dijianHurt
  354. elseif dijianHurt < 0 then
  355. obj.combatResult[3][attackPos][1] = obj.combatResult[3][attackPos][1] or 0
  356. obj.combatResult[3][attackPos][1] = obj.combatResult[3][attackPos][1] + dijianHurt
  357. end
  358. local attacker = CombatImpl.objList[attackPos]
  359. if attacker and d < 0 then
  360. attacker.combatResult[4] = attacker.combatResult[4] + d
  361. attacker.combatResult[5] = attacker.combatResult[5] or {}
  362. attacker.combatResult[5][obj.pos] = d
  363. if type == EXTRA_HP_TYPE then
  364. updateValue(attacker, RoleDefine.HURT_COMBAT_NOW, -d)
  365. end
  366. end
  367. end
  368. return d,value
  369. end
  370. function updateMp(obj, value)
  371. value = math.floor(value + 0.5)
  372. local sum = obj.mp + value
  373. sum = sum < 0 and 0 or sum
  374. local d = sum - obj.mp
  375. obj.mp = sum
  376. return d
  377. end
  378. function getValue(obj,key)
  379. if obj.isPet then
  380. return 0
  381. end
  382. if key == RoleDefine.SUB_HP_COMBAT then
  383. local hpNow = obj.hp or 0
  384. local hpMax = getHpMax(obj) or 0
  385. if hpMax <= 0 then
  386. print(string.format("战斗数据错误, obj.id: %d, obj.pos: %d", obj.id, obj.pos))
  387. return 0
  388. end
  389. local res = hpNow / hpMax
  390. res = math.floor(res * 10000) --取到小数点后四位,再转成整数
  391. return res
  392. else
  393. return obj.attr[key] or 0
  394. end
  395. end
  396. function setValue(obj,key,value)
  397. obj.attr[key] = value
  398. end
  399. function updateValue(obj,key,value)
  400. obj.attr[key] = obj.attr[key] or 0
  401. obj.attr[key] = obj.attr[key] + value
  402. end
  403. function getJobHurtRate(attacker,defender)
  404. local attr = attacker.attr
  405. --职业相关伤害加成
  406. local extraHurtRate = 0
  407. if defender.job == CombatDefine.JOB_TYPE1 then
  408. extraHurtRate = extraHurtRate + attr[RoleDefine.JOB_HURT_RATE1]
  409. elseif defender.job == CombatDefine.JOB_TYPE2 then
  410. extraHurtRate = extraHurtRate + attr[RoleDefine.JOB_HURT_RATE2]
  411. elseif defender.job == CombatDefine.JOB_TYPE3 then
  412. extraHurtRate = extraHurtRate + attr[RoleDefine.JOB_HURT_RATE3]
  413. elseif defender.job == CombatDefine.JOB_TYPE4 then
  414. extraHurtRate = extraHurtRate + attr[RoleDefine.JOB_HURT_RATE4]
  415. elseif defender.job == CombatDefine.JOB_TYPE5 then
  416. extraHurtRate = extraHurtRate + attr[RoleDefine.JOB_HURT_RATE5]
  417. end
  418. -- 物理/魔法伤害加成
  419. if attacker.hurtType == CombatDefine.PHY_HURT_TYPE then
  420. extraHurtRate = extraHurtRate + (attr[RoleDefine.PHY_HURT_ADD_RATE] or 0)
  421. extraHurtRate = extraHurtRate + (defender.attr[RoleDefine.AT_PHY_HURT_ADD_RATE] or 0)
  422. elseif attacker.hurtType == CombatDefine.MAGIC_HURT_TYPE then
  423. extraHurtRate = extraHurtRate + (attr[RoleDefine.MAGIC_HURT_ADD_RATE] or 0)
  424. extraHurtRate = extraHurtRate + (defender.attr[RoleDefine.AT_MAGIC_HURT_ADD_RATE] or 0)
  425. end
  426. return extraHurtRate
  427. end
  428. function getStatusHurtRate(attacker,defender)
  429. local status = CombatBuff.getStatus(defender)
  430. local attr = attacker.attr
  431. --状态相关伤害加成
  432. local extraHurtRate = 0
  433. if status["xuanyun"] then
  434. extraHurtRate = extraHurtRate + attr[RoleDefine.STATUS_HURT_RATE1]
  435. end
  436. if status["shihua"] then
  437. extraHurtRate = extraHurtRate + attr[RoleDefine.STATUS_HURT_RATE2]
  438. end
  439. if status["bingdong"] then
  440. extraHurtRate = extraHurtRate + attr[RoleDefine.STATUS_HURT_RATE3]
  441. end
  442. if status["jinmo"] then
  443. extraHurtRate = extraHurtRate + attr[RoleDefine.STATUS_HURT_RATE4]
  444. end
  445. if status["ranshao"] then
  446. extraHurtRate = extraHurtRate + attr[RoleDefine.STATUS_HURT_RATE5]
  447. end
  448. if status["liuxue"] then
  449. extraHurtRate = extraHurtRate + attr[RoleDefine.STATUS_HURT_RATE6]
  450. end
  451. if status["liuxue2"] then
  452. extraHurtRate = extraHurtRate + attr[RoleDefine.STATUS_HURT_RATE6]
  453. end
  454. if status["zhongdu"] then
  455. extraHurtRate = extraHurtRate + attr[RoleDefine.STATUS_HURT_RATE7]
  456. end
  457. return extraHurtRate
  458. end
  459. function getStatusBaoji(attacker,defender)
  460. local status = CombatBuff.getStatus(defender)
  461. local attr = attacker.attr
  462. --状态相关暴击率增加
  463. local baoji = 0
  464. if status["xuanyun"] then
  465. baoji = baoji + attr[RoleDefine.STATUS_BAOJI_RATE1]
  466. end
  467. if status["shihua"] then
  468. baoji = baoji + attr[RoleDefine.STATUS_BAOJI_RATE2]
  469. end
  470. if status["bingdong"] then
  471. baoji = baoji + attr[RoleDefine.STATUS_BAOJI_RATE3]
  472. end
  473. if status["jinmo"] then
  474. baoji = baoji + attr[RoleDefine.STATUS_BAOJI_RATE4]
  475. end
  476. if status["ranshao"] then
  477. baoji = baoji + attr[RoleDefine.STATUS_BAOJI_RATE5]
  478. end
  479. if status["ranshao1"] then
  480. baoji = baoji + attr[RoleDefine.STATUS_BAOJI_RATE5]
  481. end
  482. if status["liuxue"] then
  483. baoji = baoji + attr[RoleDefine.STATUS_BAOJI_RATE6]
  484. end
  485. if status["liuxue2"] then
  486. baoji = baoji + attr[RoleDefine.STATUS_BAOJI_RATE6]
  487. end
  488. if status["zhongdu"] then
  489. baoji = baoji + attr[RoleDefine.STATUS_BAOJI_RATE7]
  490. end
  491. if status["jiansu"] then
  492. baoji = baoji + attr[RoleDefine.STATUS_BAOJI_RATE8]
  493. end
  494. return baoji
  495. end
  496. function getStatusBaojiHurtRate(attacker,defender)
  497. local status = CombatBuff.getStatus(defender)
  498. local attr = attacker.attr
  499. --状态相关暴击率增加
  500. local baoji = 0
  501. if status["xuanyun"] then
  502. baoji = baoji + attr[RoleDefine.STATUS_BAOJI_HURT_RATE1]
  503. elseif status["shihua"] then
  504. baoji = baoji + attr[RoleDefine.STATUS_BAOJI_HURT_RATE2]
  505. elseif status["bingdong"] then
  506. baoji = baoji + attr[RoleDefine.STATUS_BAOJI_HURT_RATE3]
  507. elseif status["jinmo"] then
  508. baoji = baoji + attr[RoleDefine.STATUS_BAOJI_HURT_RATE4]
  509. elseif status["ranshao"] then
  510. baoji = baoji + attr[RoleDefine.STATUS_BAOJI_HURT_RATE5]
  511. elseif status["ranshao1"] then
  512. baoji = baoji + attr[RoleDefine.STATUS_BAOJI_HURT_RATE5]
  513. elseif status["liuxue"] then
  514. baoji = baoji + attr[RoleDefine.STATUS_BAOJI_HURT_RATE6]
  515. elseif status["liuxue2"] then
  516. baoji = baoji + attr[RoleDefine.STATUS_BAOJI_HURT_RATE6]
  517. elseif status["zhongdu"] then
  518. baoji = baoji + attr[RoleDefine.STATUS_BAOJI_HURT_RATE7]
  519. elseif status["jiansu"] then
  520. baoji = baoji + attr[RoleDefine.STATUS_BAOJI_HURT_RATE8]
  521. end
  522. return baoji
  523. end
  524. function getJobJianshangRate(attacker,defender)
  525. local job = attacker.job
  526. local attr = defender.attr
  527. local jianshangRate = 0
  528. --职业相关伤害加成
  529. if job == CombatDefine.JOB_TYPE1 then
  530. jianshangRate = jianshangRate + attr[RoleDefine.JOB_JIANSHANG_RATE1]
  531. elseif job == CombatDefine.JOB_TYPE2 then
  532. jianshangRate = jianshangRate + attr[RoleDefine.JOB_JIANSHANG_RATE2]
  533. elseif job == CombatDefine.JOB_TYPE3 then
  534. jianshangRate = jianshangRate + attr[RoleDefine.JOB_JIANSHANG_RATE3]
  535. elseif job == CombatDefine.JOB_TYPE4 then
  536. jianshangRate = jianshangRate + attr[RoleDefine.JOB_JIANSHANG_RATE4]
  537. elseif job == CombatDefine.JOB_TYPE5 then
  538. jianshangRate = jianshangRate + attr[RoleDefine.JOB_JIANSHANG_RATE5]
  539. end
  540. return jianshangRate
  541. end
  542. function getCampJianshangRate(attacker,defender)
  543. local camp = attacker.camp
  544. local attr = defender.attr
  545. local jianshangRate = 0
  546. --阵营相关减伤
  547. if camp == CombatDefine.CAMP_TYPE1 then
  548. jianshangRate = jianshangRate + attr[RoleDefine.CAMP_JIANSHANG_RATE1]
  549. elseif camp == CombatDefine.CAMP_TYPE2 then
  550. jianshangRate = jianshangRate + attr[RoleDefine.CAMP_JIANSHANG_RATE2]
  551. elseif camp == CombatDefine.CAMP_TYPE3 then
  552. jianshangRate = jianshangRate + attr[RoleDefine.CAMP_JIANSHANG_RATE3]
  553. elseif camp == CombatDefine.CAMP_TYPE4 then
  554. jianshangRate = jianshangRate + attr[RoleDefine.CAMP_JIANSHANG_RATE4]
  555. elseif camp == CombatDefine.CAMP_TYPE5 then
  556. jianshangRate = jianshangRate + attr[RoleDefine.CAMP_JIANSHANG_RATE5]
  557. end
  558. return jianshangRate
  559. end
  560. function getCampHurtRate(attacker,defender)
  561. local attr = attacker.attr
  562. --阵营相关伤害加成
  563. local extraHurtRate = 0
  564. if defender.camp == CombatDefine.CAMP_TYPE1 then
  565. extraHurtRate = extraHurtRate + attr[RoleDefine.CAMP_HURT_RATE1]
  566. elseif defender.camp == CombatDefine.CAMP_TYPE2 then
  567. extraHurtRate = extraHurtRate + attr[RoleDefine.CAMP_HURT_RATE2]
  568. elseif defender.camp == CombatDefine.CAMP_TYPE3 then
  569. extraHurtRate = extraHurtRate + attr[RoleDefine.CAMP_HURT_RATE3]
  570. elseif defender.camp == CombatDefine.CAMP_TYPE4 then
  571. extraHurtRate = extraHurtRate + attr[RoleDefine.CAMP_HURT_RATE4]
  572. elseif defender.camp == CombatDefine.CAMP_TYPE5 then
  573. extraHurtRate = extraHurtRate + attr[RoleDefine.CAMP_HURT_RATE5]
  574. end
  575. return extraHurtRate
  576. end