CombatObj.lua 17 KB

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