PlayerFight.lua 64 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426
  1. --[[
  2. 1.该脚本所有本地方法末尾均需要加PF,防止与事件接口冲突
  3. 2.攻击者和被攻击者的类型:1-玩家;2-怪物;3-宠物
  4. ]] -- 攻击事件的入口
  5. -- function excusefightdamage(actor, paramMapList)
  6. -- local fightResults = {}
  7. -- for _, paramMap in pairs(paramMapList) do
  8. -- local fightResult = excusefightdamage0(actor, paramMap)
  9. -- table.insert(fightResults, fightResult)
  10. -- end
  11. -- return fightResults
  12. -- end
  13. PlayerFight = {}
  14. local this = {}
  15. function excusefightdamage0(actor, paramMap)
  16. LoadGlobalDataPF(paramMap)
  17. local castType = paramMap["castertype"]
  18. local targetType = paramMap["targettype"]
  19. if castType == 1 and targetType == 2 then
  20. PlayerAtkMonsterPF(paramMap) -- 玩家攻击怪物
  21. elseif castType == 1 and targetType == 1 then
  22. PlayerAtkPlayerPF(paramMap) -- 玩家攻击玩家
  23. elseif castType == 2 and targetType == 1 then
  24. MonsterAtkPlayerPF(paramMap) -- 怪物攻击玩家
  25. elseif castType == 2 and targetType == 3 then
  26. MonsterAtkPlayerPF(paramMap) -- 怪物攻击宠物,走玩家攻击怪物
  27. elseif castType == 3 and targetType == 2 then
  28. PlayerAtkMonsterPF(paramMap) -- 宠物攻击怪物,走玩家攻击怪物
  29. elseif castType == 1 and targetType == 3 then
  30. PlayerAtkPlayerPF(paramMap) -- 玩家攻击宠物,走玩家攻击玩家
  31. elseif castType == 3 and targetType == 1 then
  32. PlayerAtkPlayerPF(paramMap) -- 宠物攻击玩家,走玩家攻击攻击玩家
  33. end
  34. local pf_globalData = getplaydef(actor, "@pf_globalData")
  35. local result = pf_globalData["result"]
  36. return result
  37. end
  38. -- 初始化全局数据
  39. function LoadGlobalDataPF(paramMap)
  40. local skillId = paramMap["skillid"]
  41. local globalTable = {}
  42. local skillPower = tonumber(ConfigDataManager.getTableValue("cfg_skill_info", "skillPower", "skillID", skillId))
  43. if skillPower == nil then
  44. error("战斗脚本技能攻击力配置错误,skillId:" .. skillId)
  45. skillPower = 0
  46. end
  47. local result = {}
  48. result["target"] = paramMap["target"]
  49. result["casthurt"] = 0
  50. result["targethurt"] = 0
  51. result["castershield"] = 0
  52. result["targetshield"] = 0
  53. result["hurttype"] = 108
  54. result["repeat"] = 1
  55. globalTable["caster"] = paramMap["caster"]
  56. globalTable["target"] = paramMap["target"]
  57. globalTable["mapId"] = paramMap["mapId"]
  58. globalTable["castType"] = paramMap["castertype"]
  59. globalTable["targetType"] = paramMap["targettype"]
  60. globalTable["skillLevel"] = paramMap["skilllevel"]
  61. globalTable["skillId"] = paramMap["skillid"]
  62. globalTable["skillPower"] = skillPower
  63. globalTable["yiBanGongJi"] = "1" -- 一般攻击
  64. globalTable["zhuoYueYiJi"] = "0" -- 卓越一击
  65. globalTable["xinYunYiJi"] = "0" -- 幸运一击
  66. globalTable["wuShiFangYu"] = "0" -- 无视防御
  67. globalTable["shuangBeiYiJi"] = "0" -- 双倍一击
  68. globalTable["result"] = result
  69. setplaydef(paramMap["caster"], "@pf_globalData", globalTable)
  70. end
  71. -- 玩家攻击玩家
  72. function PlayerAtkPlayerPF(paramMap)
  73. local caster = paramMap["caster"]
  74. -- PK值判断是否可以造成伤害
  75. local pkValue = tonumber(pk.getpkvalue(caster))
  76. local pkCountTableInfo = ConfigDataManager.getTable("cfg_pk_count", "pvpDamage", 1)
  77. if pkCountTableInfo and #pkCountTableInfo > 0 then
  78. local maxPkValue = 0
  79. for _, v in ipairs(pkCountTableInfo) do
  80. local nameColor = tostring(v["namecolor"])
  81. local split = string.split(nameColor, "#")
  82. local minValue = tonumber(split[1])
  83. local maxValue = tonumber(split[2])
  84. if pkValue >= minValue and pkValue <= maxValue then
  85. -- PK值在此区间内不造成伤害
  86. tipinfo(caster, "pk值较高,无法对玩家造成伤害")
  87. return
  88. end
  89. maxPkValue = maxPkValue > maxValue and maxPkValue or maxValue
  90. end
  91. if pkValue and pkValue ~= 0 and pkValue > maxPkValue then
  92. tipinfo(caster, "pk值较高,无法对玩家造成伤害")
  93. return
  94. end
  95. else
  96. error("pkCountTableInfo is null")
  97. end
  98. -- PK值判断end
  99. local target = paramMap["target"]
  100. local skillId = paramMap["skillid"]
  101. local playerDC = GetAtkPowerPF(caster, skillId)
  102. local g_minDC = playerDC[1]
  103. local g_maxDC = playerDC[2]
  104. setplaydef(caster, "@pf_g_minDC", g_minDC)
  105. setplaydef(caster, "@pf_g_maxDC", g_maxDC)
  106. local configValue = ConfigDataManager.getTableValue("cfg_global", "value", "id", 200)
  107. local split = string.split(configValue, "|")
  108. local diff = tonumber(split[1])
  109. local rate = tonumber(split[2])
  110. local hitRate = getattrinfo(caster, "hitRate")
  111. local missRate = getattrinfo(target, "missRate")
  112. local hitRand = rand(0, hitRate)
  113. local chaZhi = hitRand - missRate
  114. if chaZhi < 0 then
  115. chaZhi = abs(chaZhi)
  116. if chaZhi <= diff then
  117. local randomFloat = math.random()
  118. if rate < randomFloat then
  119. MissPF(paramMap)
  120. return
  121. end
  122. else
  123. MissPF(paramMap)
  124. return
  125. end
  126. end
  127. -- 获取玩家普攻技能id
  128. local group = ConfigDataManager.getTableValue("cfg_skill", "group", "id", skillId)
  129. local basicDamage
  130. if tonumber(group) == 4 then
  131. basicDamage = PlayerNormalAttackPF(paramMap)
  132. else
  133. basicDamage = SkillAttackPF(paramMap)
  134. end
  135. -- todo 最终伤害
  136. local damageRateDecrement = getattrinfo(target, "damageRateDecrement")
  137. local skillDamageAdd = getattrinfo(caster, "skillDamageAdd")
  138. local damageIncreaseRate = getattrinfo(caster, "damageIncreaseRate")
  139. local pveDamageAdd = getattrinfo(caster, "pveDamageAdd")
  140. local finalDamage = basicDamage * (1 + damageIncreaseRate) * (1 + pveDamageAdd) * (1 - damageRateDecrement) +
  141. skillDamageAdd
  142. HurtSetMent(finalDamage, paramMap)
  143. end
  144. -- 怪物攻击玩家
  145. function MonsterAtkPlayerPF(paramMap)
  146. local caster = paramMap["caster"]
  147. local target = paramMap["target"]
  148. local g_minDC = getattrinfo(caster, "minDC")
  149. local g_maxDC = getattrinfo(caster, "maxDC")
  150. setplaydef(caster, "@pf_g_minDC", g_minDC)
  151. setplaydef(caster, "@pf_g_maxDC", g_maxDC)
  152. local configValue = ConfigDataManager.getTableValue("cfg_global", "value", "id", 200)
  153. local split = string.split(configValue, "|")
  154. local diff = tonumber(split[1])
  155. local rate = tonumber(split[2])
  156. local hitRate = getattrinfo(caster, "hitRate")
  157. local missRate = getattrinfo(target, "missRate")
  158. local hitRand = rand(0, hitRate)
  159. local chaZhi = hitRand - missRate
  160. if chaZhi < 0 then
  161. chaZhi = abs(chaZhi)
  162. if chaZhi <= diff then
  163. local randomFloat = math.random()
  164. if rate < randomFloat then
  165. MissPF(paramMap)
  166. return
  167. end
  168. else
  169. MissPF(paramMap)
  170. return
  171. end
  172. end
  173. -- 获取怪物普攻技能id
  174. local basicSkillId = GetMonsterBasicSkill(caster)
  175. local basicDamage
  176. if skillId == basicSkillId then
  177. basicDamage = MonsterNormalAttackPF(paramMap)
  178. else
  179. basicDamage = MonsterSkillAttackPF(paramMap)
  180. end
  181. -- 最终伤害
  182. local damageRateDecrement = getattrinfo(target, "damageRateDecrement")
  183. local finalDamage = basicDamage * (1 - damageRateDecrement)
  184. HurtSetMent(finalDamage, paramMap)
  185. end
  186. -- 怪物普通攻击
  187. function MonsterNormalAttackPF(paramMap)
  188. local caster = paramMap["caster"]
  189. local target = paramMap["target"]
  190. local g_minDC = getplaydef(caster, "@pf_g_minDC")
  191. local g_maxDC = getplaydef(caster, "@pf_g_maxDC")
  192. -- 基础伤害=(怪物最小攻击力~怪物最大攻击力)-(人物防御力/2)
  193. local armor = getattrinfo(target, "armor")
  194. return rand(g_minDC, g_maxDC) - armor / 2
  195. end
  196. -- 怪物技能攻击
  197. function MonsterSkillAttackPF(paramMap)
  198. local caster = paramMap["caster"]
  199. local target = paramMap["target"]
  200. local g_minDC = getplaydef(caster, "@pf_g_minDC")
  201. local g_maxDC = getplaydef(caster, "@pf_g_maxDC")
  202. local pf_globalData = getplaydef(caster, "@pf_globalData")
  203. local skillPower = pf_globalData["skillPower"]
  204. -- 基础伤害=(怪物最小攻击力~怪物最大攻击力)+怪物技能攻击力-(人物防御力/2)
  205. local armor = getattrinfo(target, "armor")
  206. return rand(g_minDC, g_maxDC) - armor / 2 + skillPower
  207. end
  208. -- 获取怪物普攻技能id
  209. function GetMonsterBasicSkill(caster)
  210. local monCfgId = getbaseinfo(caster, "castermonsterid")
  211. return ConfigDataManager.getTableValue("cfg_monster", "monsterGeneralAttack", "id", monCfgId)
  212. end
  213. -- 玩家攻击怪物
  214. function PlayerAtkMonsterPF(paramMap)
  215. local caster = paramMap["caster"]
  216. local target = paramMap["target"]
  217. local skillId = paramMap["skillid"]
  218. local playerDC = GetAtkPowerPF(caster, skillId)
  219. local g_minDC = playerDC[1]
  220. local g_maxDC = playerDC[2]
  221. setplaydef(caster, "@pf_g_minDC", g_minDC)
  222. setplaydef(caster, "@pf_g_maxDC", g_maxDC)
  223. local configValue = ConfigDataManager.getTableValue("cfg_global", "value", "id", 200)
  224. local split = string.split(configValue, "|")
  225. local diff = tonumber(split[1])
  226. local rate = tonumber(split[2])
  227. local hitRate = getattrinfo(caster, "hitRate")
  228. local missRate = getattrinfo(target, "missRate")
  229. local hitRand = rand(0, hitRate)
  230. local chaZhi = hitRand - missRate
  231. if chaZhi < 0 then
  232. chaZhi = abs(chaZhi)
  233. if chaZhi <= diff then
  234. local randomFloat = math.random()
  235. if rate < randomFloat then
  236. MissPF(paramMap)
  237. return
  238. end
  239. else
  240. MissPF(paramMap)
  241. return
  242. end
  243. end
  244. -- 获取玩家普攻技能id
  245. local group = ConfigDataManager.getTableValue("cfg_skill", "group", "id", skillId)
  246. local basicDamage
  247. if tonumber(group) == 4 then
  248. basicDamage = PlayerNormalAttackPF(paramMap)
  249. else
  250. basicDamage = SkillAttackPF(paramMap)
  251. print("伤害", basicDamage)
  252. end
  253. -- todo 最终伤害加成
  254. local skillDamageAdd = getattrinfo(caster, "skillDamageAdd")
  255. local damageIncreaseRate = getattrinfo(caster, "damageIncreaseRate")
  256. local pveDamageAdd = getattrinfo(caster, "pveDamageAdd")
  257. local finalDamage = basicDamage * (1 + damageIncreaseRate) * (1 + pveDamageAdd) + skillDamageAdd
  258. -- 如果攻击的怪物是秘境副本的BOSS则累加记录实时伤害
  259. local castType = paramMap["castertype"]
  260. local targetType = paramMap["targettype"]
  261. if castType == 1 and targetType == 2 then
  262. local monsterId = paramMap["monsterid"]
  263. local bossChallenge = ConfigDataManager.getTable("cfg_BOSS_challenge", "monsterType", BossType.SECRET_REALM_BOSS)
  264. for i = 1, #bossChallenge do
  265. if tonumber(monsterId) == tonumber(bossChallenge[i].monsterid) then
  266. -- 存储实时伤害
  267. SecretRealm.savePlayerHurtInfo(caster, target, finalDamage < 0 and 1 or finalDamage)
  268. end
  269. end
  270. end
  271. HurtSetMent(finalDamage, paramMap)
  272. end
  273. -- 伤害结算
  274. function HurtSetMent(damage, paramMap)
  275. local caster = paramMap["caster"]
  276. local target = paramMap["target"]
  277. local hurttype = GetHurtType(paramMap)
  278. if damage <= 0 then
  279. damage = 1
  280. end
  281. -- 伤害反射
  282. local casterDamage, absCasterShield = HurtReflect(damage, paramMap)
  283. -- 韧性
  284. damage = CalcuResilience(damage, caster, target, paramMap)
  285. -- 计算受击方护盾值
  286. local absTargetShield = 0
  287. damage, absTargetShield = CalcuShield(damage, caster, target, paramMap)
  288. -- 设置返回值
  289. SetResult(casterDamage, damage, absCasterShield, absTargetShield, hurttype, 1, paramMap)
  290. end
  291. -- 设置返回值
  292. function SetResult(casthurt, targethurt, castershield, targetshield, hurttype, repeatl, paramMap)
  293. local caster = paramMap["caster"]
  294. local pf_globalData = getplaydef(caster, "@pf_globalData")
  295. local result = pf_globalData["result"]
  296. result["casthurt"] = casthurt
  297. result["targethurt"] = targethurt
  298. result["castershield"] = castershield
  299. result["targetshield"] = targetshield
  300. result["hurttype"] = hurttype
  301. result["repeat"] = repeatl
  302. setplaydef(caster, "@pf_globalData", pf_globalData)
  303. end
  304. -- 伤害反射
  305. function HurtReflect(damage, paramMap)
  306. local caster = paramMap["caster"]
  307. local target = paramMap["target"]
  308. local damageReflex = getattrinfo(target, "damageReflex")
  309. local reflectDamageReductionAndIncrease = getattrinfo(caster, "reflectDamageReductionAndIncrease")
  310. local damageRateDecrement = getattrinfo(caster, "damageRateDecrement")
  311. damage = damage * damageReflex * (1 - reflectDamageReductionAndIncrease) * (1 - damageRateDecrement)
  312. damage = CalcuResilience(damage, target, caster, paramMap)
  313. local absCasterShield = 0
  314. damage, absCasterShield = CalcuShield(damage, target, caster, paramMap)
  315. return damage, absCasterShield
  316. end
  317. -- 计算韧性
  318. function CalcuResilience(damage, caster, target, paramMap)
  319. local castType = paramMap["castertype"]
  320. local targetType = paramMap["targettype"]
  321. if castType ~= 1 or targetType ~= 1 then
  322. return damage
  323. end
  324. local casterRes = getattrinfo(caster, "equipmentResilienceIndex")
  325. local targetRes = getattrinfo(target, "equipmentResilienceIndex")
  326. if casterRes >= targetRes then
  327. return damage
  328. end
  329. return damage * (100 - (targetRes - casterRes)) / 100
  330. end
  331. -- 计算护盾值
  332. function CalcuShield(damage, casterActor, targetActor, paramMap)
  333. local castType = paramMap["castertype"]
  334. local targetType = paramMap["targettype"]
  335. if castType ~= 1 or targetType ~= 1 then
  336. return damage, 0
  337. end
  338. local shield = getattrinfo(targetActor, "shield")
  339. local sdAdd = getattrinfo(targetActor, "sdAdd")
  340. local shieldParry = getattrinfo(targetActor, "shieldParry")
  341. local shieldParryfall = getattrinfo(casterActor, "shieldParryfall")
  342. -- 护盾抵抗百分比
  343. local rate = min(0, shieldParry - shieldParryfall)
  344. local resDamage = damage * rate
  345. if resDamage > shield + sdAdd then
  346. damage = damage * (1 - rate) + resDamage - shield - sdAdd
  347. return damage, shield
  348. end
  349. return damage * (1 - rate), resDamage
  350. end
  351. -- 获取伤害类型
  352. function GetHurtType(paramMap)
  353. local caster = paramMap["caster"]
  354. local pf_globalData = getplaydef(caster, "@pf_globalData")
  355. local yiBanGongJi = pf_globalData["yiBanGongJi"]
  356. local zhuoYueYiJi = pf_globalData["zhuoYueYiJi"]
  357. local xinYunYiJi = pf_globalData["xinYunYiJi"]
  358. local wuShiFangYu = pf_globalData["wuShiFangYu"]
  359. local shuangBeiYiJi = pf_globalData["shuangBeiYiJi"]
  360. local typeString = yiBanGongJi .. zhuoYueYiJi .. xinYunYiJi .. wuShiFangYu .. shuangBeiYiJi
  361. print(typeString)
  362. local hurtTypeCache = getsysvar(SystemVarConst.NORMAL_DAMAGE_TYPE_CACHE)
  363. local type = hurtTypeCache[typeString]
  364. if type == nil then
  365. print("获取攻击概率类型失败")
  366. type = 101
  367. end
  368. return type
  369. end
  370. -- 技能攻击
  371. -- 技能攻击的计算公式分为物理系和魔法系
  372. function SkillAttackPF(paramMap)
  373. local skillId = paramMap["skillid"]
  374. local damage = 0
  375. local injury_type = tonumber(ConfigDataManager.getTableValue("cfg_skill_info", "injuryType", "skillID", skillId))
  376. if injury_type == 1 then
  377. damage = WuliXiSkillPF(paramMap)
  378. elseif injury_type == 2 then
  379. damage = MoFaXiSkillPF(paramMap)
  380. elseif injury_type == 3 then
  381. damage = ZuZhouXiSkillPF(paramMap)
  382. else
  383. error("不存在的伤害类型")
  384. end
  385. return damage
  386. end
  387. -- 诅咒攻击
  388. function ZuZhouXiSkillPF(paramMap)
  389. local retDamage = 0
  390. if IsShuangBeiYiJiPF(paramMap) then
  391. retDamage = ShuangBeiYiJi1325(paramMap)
  392. elseif IsWuShiFangYuPF(paramMap) then
  393. retDamage = WuShiFangYu1324(paramMap)
  394. elseif IsZhuoYueYiJiPF(paramMap) then
  395. retDamage = ZhuoYueYiJi1323(paramMap)
  396. elseif IsXingYunYiJiPF(paramMap) then
  397. retDamage = XinYunYiJi1322(paramMap)
  398. else
  399. retDamage = YiBanGongJi1321(paramMap)
  400. end
  401. return retDamage
  402. end
  403. ---------------------------获取技能属性加成---------------------------
  404. function GetSkillAttributeDamage(paramMap)
  405. local caster = paramMap["caster"]
  406. local skillid = paramMap["skillid"]
  407. local skillLevel = paramMap["skilllevel"]
  408. local attributeDamage = ConfigDataManager.getTableValue("cfg_skill_info", "attributeDamage", "skillID", skillid, "skillLevel",
  409. skillLevel)
  410. if not attributeDamage or attributeDamage == 0 or attributeDamage == "" then
  411. return nil
  412. end
  413. local allAttributeDamage = string.split(attributeDamage, "|")
  414. local index = math.random(1, #allAttributeDamage)
  415. local attributeDamageString = allAttributeDamage[index]
  416. local attributeDamageLocal = string.split(attributeDamageString, "#")
  417. local attId = tonumber(attributeDamageLocal[1])
  418. local attName = attrid2name(caster, attId)
  419. local attValue = getattrinfo(caster, attName)
  420. local attInfo = {attValue, tonumber(attributeDamageLocal[2])}
  421. return attInfo
  422. end
  423. ---------------------------玩家攻击怪物(1)诅咒系(3)技能攻击(2)双倍一击(5)---------------------------
  424. function ShuangBeiYiJi1325(paramMap)
  425. local caster = paramMap["caster"]
  426. local target = paramMap["target"]
  427. local retDamage = 0
  428. local doubleDamageBonus = getattrinfo(caster, "doubleDamageBonus")
  429. if IsWuShiFangYuPF(paramMap) then
  430. local ignore_defense_damage = WuShiFangYu1324(paramMap)
  431. retDamage = ignore_defense_damage * (1 + doubleDamageBonus)
  432. elseif IsZhuoYueYiJiPF(paramMap) then
  433. local zhuo_yue_damage = ZhuoYueYiJi1323(paramMap)
  434. retDamage = zhuo_yue_damage * (1 + doubleDamageBonus)
  435. elseif IsXingYunYiJiPF(paramMap) then
  436. local lucky_damage = XinYunYiJi1322(paramMap)
  437. retDamage = lucky_damage * (1 + doubleDamageBonus)
  438. else
  439. local normal_damage = YiBanGongJi1321(paramMap)
  440. retDamage = normal_damage * (1 + doubleDamageBonus)
  441. end
  442. return retDamage
  443. end
  444. ---------------------------玩家攻击怪物(1)诅咒系(3)技能攻击(2)卓越一击(3)---------------------------
  445. function ZhuoYueYiJi1323(paramMap)
  446. local caster = paramMap["caster"]
  447. local target = paramMap["target"]
  448. -- 基础伤害={[(人物最大诅咒攻击力+技能攻击力)*(100%+召唤书诅咒攻击提升加成系数)-(怪物防御力/2)]+技能攻击力增加具体数值}*卓越一击攻击力加成系数+卓越一击攻击力加成具体数值
  449. local maxDC = getplaydef(caster, "@pf_g_maxDC")
  450. local pf_globalData = getplaydef(caster, "@pf_globalData")
  451. local skillPower = pf_globalData["skillPower"]
  452. local armor = getattrinfo(target, "armor")
  453. local increaseLevelMaxHp = getattrinfo(caster, "increaseLevelMaxHp")
  454. local skillDamageAdd = getattrinfo(caster, "skillDamageAdd")
  455. local excellentDamageBonus = getattrinfo(caster, "excellentDamageBonus")
  456. local excellentDamageAdd = getattrinfo(caster, "excellentDamageAdd")
  457. local attAdd = GetSkillAttributeDamage(paramMap)
  458. if not attAdd then
  459. return ((maxDC + skillPower) * (increaseLevelMaxHp + 1) + skillDamageAdd - armor / 2) *
  460. (1 + excellentDamageBonus) + excellentDamageAdd
  461. end
  462. return ((maxDC + (skillPower + attAdd[1]) * (1 + attAdd[2] / 10000)) * (increaseLevelMaxHp + 1) + skillDamageAdd -
  463. armor / 2) * (1 + excellentDamageBonus) + excellentDamageAdd
  464. end
  465. ---------------------------玩家攻击怪物(1)诅咒系(3)技能攻击(2)卓越一击(3)---------------------------
  466. function XinYunYiJi1322(paramMap)
  467. local caster = paramMap["caster"]
  468. local target = paramMap["target"]
  469. -- 基础伤害={[(人物最大诅咒攻击力+技能攻击力)*(100%+召唤书诅咒攻击提升加成系数)-(怪物防御力/2)]+技能攻击力增加具体数值}*卓越一击攻击力加成系数+卓越一击攻击力加成具体数值
  470. local maxDC = getplaydef(caster, "@pf_g_maxDC")
  471. local pf_globalData = getplaydef(caster, "@pf_globalData")
  472. local skillPower = pf_globalData["skillPower"]
  473. local armor = getattrinfo(target, "armor")
  474. local increaseLevelMaxHp = getattrinfo(caster, "increaseLevelMaxHp")
  475. local skillDamageAdd = getattrinfo(caster, "skillDamageAdd")
  476. local criticalDamageBonus = getattrinfo(caster, "criticalDamageBonus")
  477. local criticalDamageAdd = getattrinfo(caster, "criticalDamageAdd")
  478. local attAdd = GetSkillAttributeDamage(paramMap)
  479. if not attAdd then
  480. return ((maxDC + skillPower) * (increaseLevelMaxHp + 1) + skillDamageAdd - armor / 2) *
  481. (1 + criticalDamageBonus) + criticalDamageAdd
  482. end
  483. return ((maxDC + (skillPower + attAdd[1]) * (1 + attAdd[2] / 10000)) * (increaseLevelMaxHp + 1) + skillDamageAdd -
  484. armor / 2) * (1 + criticalDamageBonus) + criticalDamageAdd
  485. end
  486. ---------------------------玩家攻击怪物(1)诅咒系(3)技能攻击(2)一般攻击(1)---------------------------
  487. function YiBanGongJi1321(paramMap)
  488. local caster = paramMap["caster"]
  489. local target = paramMap["target"]
  490. -- 一般攻击:基础伤害=[(人物最小诅咒攻击力~人物最大诅咒攻击力+技能攻击力)*(100%+召唤书诅咒攻击提升加成系数)-(怪物防御力/2)]+技能攻击力增加具体数值
  491. local maxDC = getplaydef(caster, "@pf_g_maxDC")
  492. local minDC = getplaydef(caster, "@pf_g_minDC")
  493. local pf_globalData = getplaydef(caster, "@pf_globalData")
  494. local skillPower = pf_globalData["skillPower"]
  495. local armor = getattrinfo(target, "armor")
  496. local increaseLevelMaxHp = getattrinfo(caster, "increaseLevelMaxHp")
  497. local skillDamageAdd = getattrinfo(caster, "skillDamageAdd")
  498. local attAdd = GetSkillAttributeDamage(paramMap)
  499. if not attAdd then
  500. return ((rand(minDC, maxDC) + skillPower) * (increaseLevelMaxHp + 1) + skillDamageAdd - armor / 2)
  501. end
  502. return ((rand(minDC, maxDC) + (skillPower + attAdd[1]) * (1 + attAdd[2] / 10000)) * (increaseLevelMaxHp + 1) +
  503. skillDamageAdd - armor / 2)
  504. end
  505. ---------------------------玩家攻击怪物(1)诅咒系(3)技能攻击(2)无视防御攻击(4)---------------------------
  506. function WuShiFangYu1324(paramMap)
  507. local caster = paramMap["caster"]
  508. local target = paramMap["target"]
  509. local retDamage = 0
  510. local ignoringIncreasedDefenseDamage = getattrinfo(caster, "ignoringIncreasedDefenseDamage")
  511. if IsZhuoYueYiJiPF() then
  512. local zhuo_yue_damage = ZhuoYueYiJi13243(paramMap)
  513. retDamage = zhuo_yue_damage * (1 + ignoringIncreasedDefenseDamage)
  514. elseif IsXingYunYiJiPF() then
  515. local lucky_damage = XinYunYiJi13242(paramMap)
  516. retDamage = lucky_damage * (1 + ignoringIncreasedDefenseDamage)
  517. else
  518. local normal_damage = YiBanGongJi13241(paramMap)
  519. retDamage = normal_damage * (1 + ignoringIncreasedDefenseDamage)
  520. end
  521. return retDamage
  522. end
  523. ---------------------------玩家攻击怪物(1)诅咒系(3)技能攻击(2)无视防御(4)卓越一击(3)---------------------------
  524. function ZhuoYueYiJi13243(paramMap)
  525. local caster = paramMap["caster"]
  526. local target = paramMap["target"]
  527. -- ;基础伤害=【{[(人物最大诅咒攻击力+技能攻击力)*(100%+召唤书诅咒攻击提升加成系数)]+技能攻击力增加具体数值}*卓越一击攻击力加成系数+卓越一击攻击力加成具体数值】
  528. local maxDC = getplaydef(caster, "@pf_g_maxDC")
  529. local pf_globalData = getplaydef(caster, "@pf_globalData")
  530. local skillPower = pf_globalData["skillPower"]
  531. local increaseLevelMaxHp = getattrinfo(caster, "increaseLevelMaxHp")
  532. local skillDamageAdd = getattrinfo(caster, "skillDamageAdd")
  533. local excellentDamageBonus = getattrinfo(caster, "excellentDamageBonus")
  534. local excellentDamageAdd = getattrinfo(caster, "excellentDamageAdd")
  535. local attAdd = GetSkillAttributeDamage(paramMap)
  536. if not attAdd then
  537. return ((maxDC + skillPower) * (increaseLevelMaxHp + 1) + skillDamageAdd) * (1 + excellentDamageBonus) +
  538. excellentDamageAdd
  539. end
  540. return ((maxDC + (skillPower + attAdd[1]) * (1 + attAdd[2] / 10000)) * (increaseLevelMaxHp + 1) + skillDamageAdd) *
  541. (1 + excellentDamageBonus) + excellentDamageAdd
  542. end
  543. ---------------------------玩家攻击怪物(1)诅咒系(3)技能攻击(2)无视防御(4)幸运一击(2)---------------------------
  544. function XinYunYiJi13242(paramMap)
  545. local caster = paramMap["caster"]
  546. local target = paramMap["target"]
  547. -- 基础伤害=【{[(人物最大诅咒攻击力+技能攻击力)*(100%+召唤书诅咒攻击提升加成系数)]+技能攻击力增加具体数值}*幸运一击攻击力加成系数+幸运一击攻击力加成具体数值】
  548. local maxDC = getplaydef(caster, "@pf_g_maxDC")
  549. local pf_globalData = getplaydef(caster, "@pf_globalData")
  550. local skillPower = pf_globalData["skillPower"]
  551. local increaseLevelMaxHp = getattrinfo(caster, "increaseLevelMaxHp")
  552. local skillDamageAdd = getattrinfo(caster, "skillDamageAdd")
  553. local criticalDamageBonus = getattrinfo(caster, "criticalDamageBonus")
  554. local criticalDamageAdd = getattrinfo(caster, "criticalDamageAdd")
  555. local attAdd = GetSkillAttributeDamage(paramMap)
  556. if not attAdd then
  557. return ((maxDC + skillPower) * (increaseLevelMaxHp + 1) + skillDamageAdd) * (1 + criticalDamageBonus) +
  558. criticalDamageAdd
  559. end
  560. return ((maxDC + (skillPower + attAdd[1]) * (1 + attAdd[2] / 10000)) * (increaseLevelMaxHp + 1) + skillDamageAdd) *
  561. (1 + criticalDamageBonus) + criticalDamageAdd
  562. end
  563. ---------------------------玩家攻击怪物(1)诅咒系(3)技能攻击(2)一般攻击(1)---------------------------
  564. function YiBanGongJi13241(paramMap)
  565. local caster = paramMap["caster"]
  566. local target = paramMap["target"]
  567. -- 一般攻击:基础伤害=[(人物最小诅咒攻击力~人物最大诅咒攻击力+技能攻击力)*(100%+召唤书诅咒攻击提升加成系数)-(怪物防御力/2)]+技能攻击力增加具体数值
  568. local maxDC = getplaydef(caster, "@pf_g_maxDC")
  569. local minDC = getplaydef(caster, "@pf_g_minDC")
  570. local pf_globalData = getplaydef(caster, "@pf_globalData")
  571. local skillPower = pf_globalData["skillPower"]
  572. local armor = getattrinfo(target, "armor")
  573. local increaseLevelMaxHp = getattrinfo(caster, "increaseLevelMaxHp")
  574. local skillDamageAdd = getattrinfo(caster, "skillDamageAdd")
  575. local attAdd = GetSkillAttributeDamage(paramMap)
  576. if not attAdd then
  577. return (rand(minDC, maxDC) + skillPower) * (increaseLevelMaxHp + 1) + skillDamageAdd - armor / 2
  578. end
  579. return (rand(minDC, maxDC) + (skillPower + attAdd[1]) * (1 + attAdd[2] / 10000)) * (increaseLevelMaxHp + 1) +
  580. skillDamageAdd - armor / 2
  581. end
  582. -- 魔法系技能攻击
  583. function MoFaXiSkillPF(paramMap)
  584. local retDamage = 0
  585. if IsShuangBeiYiJiPF(paramMap) then
  586. retDamage = ShuangBeiYiJi1225(paramMap)
  587. elseif IsWuShiFangYuPF(paramMap) then
  588. retDamage = WuShiFangYu1224()
  589. elseif IsZhuoYueYiJiPF(paramMap) then
  590. retDamage = ZhuoYueYiJi1223(paramMap)
  591. elseif IsXingYunYiJiPF(paramMap) then
  592. retDamage = XinYunYiJi1222(paramMap)
  593. else
  594. retDamage = YiBanGongJi1221(paramMap)
  595. end
  596. return retDamage
  597. end
  598. ---------------------------玩家攻击怪物(1)魔法系(2)技能攻击(2)双倍一击(5)---------------------------
  599. function ShuangBeiYiJi1225(paramMap)
  600. local caster = paramMap["caster"]
  601. local target = paramMap["target"]
  602. local retDamage = 0
  603. local doubleDamageBonus = getattrinfo(caster, "doubleDamageBonus")
  604. if IsWuShiFangYuPF(paramMap) then
  605. local ignore_defense_damage = WuShiFangYu1224(paramMap)
  606. retDamage = ignore_defense_damage * (1 + doubleDamageBonus)
  607. elseif IsZhuoYueYiJiPF(paramMap) then
  608. local zhuo_yue_damage = ZhuoYueYiJi1223(paramMap)
  609. retDamage = zhuo_yue_damage * (1 + doubleDamageBonus)
  610. elseif IsXingYunYiJiPF(paramMap) then
  611. local lucky_damage = XinYunYiJi1222(paramMap)
  612. retDamage = lucky_damage * (1 + doubleDamageBonus)
  613. else
  614. local normal_damage = YiBanGongJi1221(paramMap)
  615. retDamage = normal_damage * (1 + doubleDamageBonus)
  616. end
  617. return retDamage
  618. end
  619. ---------------------------玩家攻击怪物(1)魔法系(2)技能攻击(2)一般攻击(1)---------------------------
  620. function YiBanGongJi1221(paramMap)
  621. local caster = paramMap["caster"]
  622. local target = paramMap["target"]
  623. -- ;基础伤害=[(人物最小魔法攻击力~人物最大魔法攻击力+技能攻击力)*(100%+法杖魔攻加成系数)-(对方防御力/2)]+技能攻击力增加具体数值
  624. local maxDC = getplaydef(caster, "@pf_g_maxDC")
  625. local minDC = getplaydef(caster, "@pf_g_minDC")
  626. local pf_globalData = getplaydef(caster, "@pf_globalData")
  627. local skillPower = pf_globalData["skillPower"]
  628. local armor = getattrinfo(target, "armor")
  629. local wandMagicAttackPowerBonus = getattrinfo(caster, "wandMagicAttackPowerBonus")
  630. local skillDamageAdd = getattrinfo(caster, "skillDamageAdd")
  631. local attAdd = GetSkillAttributeDamage(paramMap)
  632. if not attAdd then
  633. return ((rand(minDC, maxDC) + skillPower) * (wandMagicAttackPowerBonus + 1) + skillDamageAdd - armor / 2)
  634. end
  635. return
  636. ((rand(minDC, maxDC) + (skillPower + attAdd[1]) * (1 + attAdd[2] / 10000)) * (wandMagicAttackPowerBonus + 1) +
  637. skillDamageAdd - armor / 2)
  638. end
  639. ---------------------------玩家攻击怪物(1)魔法系(2)技能攻击(2)幸运一击(2)---------------------------
  640. function XinYunYiJi1222(paramMap)
  641. local caster = paramMap["caster"]
  642. local target = paramMap["target"]
  643. -- 基础伤害={[(人物最大魔法攻击力+技能攻击力)*(100%+法杖魔攻加成系数)-(对方防御力/2)]+技能攻击力增加具体数值}*幸运一击攻击力加成系数+幸运一击攻击力加成具体数值
  644. local maxDC = getplaydef(caster, "@pf_g_maxDC")
  645. local pf_globalData = getplaydef(caster, "@pf_globalData")
  646. local skillPower = pf_globalData["skillPower"]
  647. local armor = getattrinfo(target, "armor")
  648. local wandMagicAttackPowerBonus = getattrinfo(caster, "wandMagicAttackPowerBonus")
  649. local skillDamageAdd = getattrinfo(caster, "skillDamageAdd")
  650. local criticalDamageBonus = getattrinfo(caster, "criticalDamageBonus")
  651. local criticalDamageAdd = getattrinfo(caster, "criticalDamageAdd")
  652. local attAdd = GetSkillAttributeDamage(paramMap)
  653. if not attAdd then
  654. return ((maxDC + skillPower) * (wandMagicAttackPowerBonus + 1) + skillDamageAdd - armor / 2) *
  655. (1 + criticalDamageBonus) + criticalDamageAdd
  656. end
  657. return ((maxDC + (skillPower + attAdd[1]) * (1 + attAdd[2] / 10000)) * (wandMagicAttackPowerBonus + 1) +
  658. skillDamageAdd - armor / 2) * (1 + criticalDamageBonus) + criticalDamageAdd
  659. end
  660. ---------------------------玩家攻击怪物(1)魔法系(2)技能攻击(2)卓越一击(3)---------------------------
  661. function ZhuoYueYiJi1223(paramMap)
  662. local caster = paramMap["caster"]
  663. local target = paramMap["target"]
  664. -- 基础伤害={[(人物最大魔法攻击力+技能攻击力)*(100%+法杖魔攻加成系数)-(怪物防御力/2)]+技能攻击力增加具体数值}*卓越一击攻击力加成系数+卓越一击攻击力加成具体数值
  665. local maxDC = getplaydef(caster, "@pf_g_maxDC")
  666. local pf_globalData = getplaydef(caster, "@pf_globalData")
  667. local skillPower = pf_globalData["skillPower"]
  668. local armor = getattrinfo(target, "armor")
  669. local wandMagicAttackPowerBonus = getattrinfo(caster, "wandMagicAttackPowerBonus")
  670. local skillDamageAdd = getattrinfo(caster, "skillDamageAdd")
  671. local excellentDamageBonus = getattrinfo(caster, "excellentDamageBonus")
  672. local excellentDamageAdd = getattrinfo(caster, "excellentDamageAdd")
  673. local attAdd = GetSkillAttributeDamage(paramMap)
  674. if not attAdd then
  675. return ((maxDC + skillPower) * (wandMagicAttackPowerBonus + 1) + skillDamageAdd - armor / 2) *
  676. (1 + excellentDamageBonus) + excellentDamageAdd
  677. end
  678. return ((maxDC + (skillPower + attAdd[1]) * (1 + attAdd[2] / 10000)) * (wandMagicAttackPowerBonus + 1) +
  679. skillDamageAdd - armor / 2) * (1 + excellentDamageBonus) + excellentDamageAdd
  680. end
  681. ---------------------------玩家攻击怪物(1)魔法系(2)技能攻击(2)无视防御攻击(4)---------------------------
  682. function WuShiFangYu1224(paramMap)
  683. local caster = paramMap["caster"]
  684. local target = paramMap["target"]
  685. local retDamage = 0
  686. local ignoringIncreasedDefenseDamage = getattrinfo(caster, "ignoringIncreasedDefenseDamage")
  687. if IsZhuoYueYiJiPF(paramMap) then
  688. local zhuo_yue_damage = ZhuoYueYiJi12243(paramMap)
  689. retDamage = zhuo_yue_damage * (1 + ignoringIncreasedDefenseDamage)
  690. elseif IsXingYunYiJiPF(paramMap) then
  691. local lucky_damage = XinYunYiJi12242(paramMap)
  692. retDamage = lucky_damage * (1 + ignoringIncreasedDefenseDamage)
  693. else
  694. local normal_damage = YiBanGongJi12241(paramMap)
  695. retDamage = normal_damage * (1 + ignoringIncreasedDefenseDamage)
  696. end
  697. return retDamage
  698. end
  699. ---------------------------玩家攻击怪物(1)魔法系(2)技能攻击(2)无视防御(4)卓越一击(3)---------------------------
  700. function ZhuoYueYiJi12243(paramMap)
  701. local caster = paramMap["caster"]
  702. local target = paramMap["target"]
  703. -- 基础伤害=【{[(人物最大魔法攻击力+技能攻击力)*(100%+法杖魔攻加成系数)]+技能攻击力增加具体数值}*卓越一击攻击力加成系数+卓越一击攻击力加成具体数值】
  704. local maxDC = getplaydef(caster, "@pf_g_maxDC")
  705. local pf_globalData = getplaydef(caster, "@pf_globalData")
  706. local skillPower = pf_globalData["skillPower"]
  707. local wandMagicAttackPowerBonus = getattrinfo(caster, "wandMagicAttackPowerBonus")
  708. local skillDamageAdd = getattrinfo(caster, "skillDamageAdd")
  709. local excellentDamageBonus = getattrinfo(caster, "excellentDamageBonus")
  710. local excellentDamageAdd = getattrinfo(caster, "excellentDamageAdd")
  711. local attAdd = GetSkillAttributeDamage(paramMap)
  712. if not attAdd then
  713. return ((maxDC + skillPower) * (wandMagicAttackPowerBonus + 1) + skillDamageAdd) * (1 + excellentDamageBonus) +
  714. excellentDamageAdd
  715. end
  716. return ((maxDC + (skillPower + attAdd[1]) * (1 + attAdd[2] / 10000)) * (wandMagicAttackPowerBonus + 1) +
  717. skillDamageAdd) * (1 + excellentDamageBonus) + excellentDamageAdd
  718. end
  719. ---------------------------玩家攻击怪物(1)魔法系(2)技能攻击(2)无视防御(4)幸运一击(2)---------------------------
  720. function XinYunYiJi12242(paramMap)
  721. local caster = paramMap["caster"]
  722. local target = paramMap["target"]
  723. -- 基础伤害=【{[(人物最大魔法攻击力+技能攻击力)*(100%+法杖魔攻加成系数)]+技能攻击力增加具体数值}*幸运一击攻击力加成系数+幸运一击攻击力加成具体数值】
  724. local maxDC = getplaydef(caster, "@pf_g_maxDC")
  725. local pf_globalData = getplaydef(caster, "@pf_globalData")
  726. local skillPower = pf_globalData["skillPower"]
  727. local wandMagicAttackPowerBonus = getattrinfo(caster, "wandMagicAttackPowerBonus")
  728. local skillDamageAdd = getattrinfo(caster, "skillDamageAdd")
  729. local criticalDamageBonus = getattrinfo(caster, "criticalDamageBonus")
  730. local criticalDamageAdd = getattrinfo(caster, "criticalDamageAdd")
  731. local attAdd = GetSkillAttributeDamage(paramMap)
  732. if not attAdd then
  733. return ((maxDC + skillPower) * (wandMagicAttackPowerBonus + 1) + skillDamageAdd) * (1 + criticalDamageBonus) +
  734. criticalDamageAdd
  735. end
  736. return ((maxDC + (skillPower + attAdd[1]) * (1 + attAdd[2] / 10000)) * (wandMagicAttackPowerBonus + 1) +
  737. skillDamageAdd) * (1 + criticalDamageBonus) + criticalDamageAdd
  738. end
  739. ---------------------------玩家攻击怪物(1)魔法系(2)技能攻击(2)无视防御(4)一般攻击(1)---------------------------
  740. function YiBanGongJi12241(paramMap)
  741. local caster = paramMap["caster"]
  742. local target = paramMap["target"]
  743. -- 基础伤害={[(人物最小魔法攻击力~人物最大魔法攻击力+技能攻击力)*(100%+法杖魔攻加成系数)]+技能攻击力增加具体数值}
  744. local maxDC = getplaydef(caster, "@pf_g_maxDC")
  745. local minDC = getplaydef(caster, "@pf_g_minDC")
  746. local pf_globalData = getplaydef(caster, "@pf_globalData")
  747. local skillPower = pf_globalData["skillPower"]
  748. local wandMagicAttackPowerBonus = getattrinfo(caster, "wandMagicAttackPowerBonus")
  749. local skillDamageAdd = getattrinfo(caster, "skillDamageAdd")
  750. local attAdd = GetSkillAttributeDamage(paramMap)
  751. if not attAdd then
  752. return (rand(minDC, maxDC) + skillPower) * (1 + wandMagicAttackPowerBonus) + skillDamageAdd
  753. end
  754. return (rand(minDC, maxDC) + (skillPower + attAdd[1]) * (1 + attAdd[2] / 10000)) * (1 + wandMagicAttackPowerBonus) +
  755. skillDamageAdd
  756. end
  757. -- 物理系技能攻击
  758. function WuliXiSkillPF(paramMap)
  759. local retDamage = 0
  760. if IsShuangBeiYiJiPF(paramMap) then
  761. retDamage = ShuangBeiYiJi1125(paramMap)
  762. elseif IsWuShiFangYuPF(paramMap) then
  763. retDamage = WuShiFangYu1124(paramMap)
  764. elseif IsZhuoYueYiJiPF(paramMap) then
  765. retDamage = ZhuoYueYiJi1123(paramMap)
  766. elseif IsXingYunYiJiPF(paramMap) then
  767. retDamage = XinYunYiJi1122(paramMap)
  768. else
  769. retDamage = YiBanGongJi1121(paramMap)
  770. end
  771. return retDamage
  772. end
  773. --------------------------玩家攻击怪物(1)物理系(1)技能攻击(2)双倍一击(5)---------------------------
  774. function ShuangBeiYiJi1125(paramMap)
  775. local caster = paramMap["caster"]
  776. local target = paramMap["target"]
  777. local retDamage = 0
  778. local doubleDamageBonus = getattrinfo(caster, "doubleDamageBonus")
  779. if IsWuShiFangYuPF(paramMap) then
  780. local ignore_defense_damage = WuShiFangYu1124(paramMap)
  781. retDamage = ignore_defense_damage * (1 + doubleDamageBonus)
  782. elseif IsZhuoYueYiJiPF(paramMap) then
  783. local zhuo_yue_damage = ZhuoYueYiJi1123(paramMap)
  784. retDamage = zhuo_yue_damage * (1 + doubleDamageBonus)
  785. elseif IsXingYunYiJiPF(paramMap) then
  786. local lucky_damage = XinYunYiJi1122(paramMap)
  787. retDamage = lucky_damage * (1 + doubleDamageBonus)
  788. else
  789. local normal_damage = YiBanGongJi1121(paramMap)
  790. retDamage = normal_damage * (1 + doubleDamageBonus)
  791. end
  792. return retDamage
  793. end
  794. ---------------------------玩家攻击怪物(1)物理系(1)技能攻击(2)一般攻击(1)---------------------------
  795. function YiBanGongJi1121(paramMap)
  796. local caster = paramMap["caster"]
  797. local target = paramMap["target"]
  798. -- 基础伤害=[(人物最小攻击力~人物最大攻击力)+技能攻击力-(怪物防御力/2)]*技能攻击力系数+技能攻击力增加具体数值
  799. local maxDC = getplaydef(caster, "@pf_g_maxDC")
  800. local minDC = getplaydef(caster, "@pf_g_minDC")
  801. local armor = getattrinfo(target, "armor")
  802. local pf_globalData = getplaydef(caster, "@pf_globalData")
  803. local skillPower = pf_globalData["skillPower"]
  804. local skillDamage = getattrinfo(caster, "skillDamage")
  805. local skillDamageAdd = getattrinfo(caster, "skillDamageAdd")
  806. local attAdd = GetSkillAttributeDamage(paramMap)
  807. if not attAdd then
  808. return (rand(minDC, maxDC) + skillPower - (armor / 2)) * (1 + skillDamage) + skillDamageAdd
  809. end
  810. return (rand(minDC, maxDC) + (skillPower + attAdd[1]) * (1 + attAdd[2] / 10000) - (armor / 2)) * (1 + skillDamage) +
  811. skillDamageAdd
  812. end
  813. ---------------------------玩家攻击怪物(1)物理系(1)技能攻击(2)幸运一击(2)---------------------------
  814. function XinYunYiJi1122(paramMap)
  815. local caster = paramMap["caster"]
  816. local target = paramMap["target"]
  817. -- 基础伤害={[(人物最大攻击力+技能攻击力)-(怪物防御力/2)]*技能攻击力系数+技能攻击力增加具体数值}*幸运一击攻击力加成系数+幸运一击攻击力加成具体数值
  818. local maxDC = getplaydef(caster, "@pf_g_maxDC")
  819. local armor = getattrinfo(target, "armor")
  820. local pf_globalData = getplaydef(caster, "@pf_globalData")
  821. local skillPower = pf_globalData["skillPower"]
  822. local skillDamage = getattrinfo(caster, "skillDamage")
  823. local skillDamageAdd = getattrinfo(caster, "skillDamageAdd")
  824. local criticalDamageBonus = getattrinfo(caster, "criticalDamageBonus")
  825. local criticalDamageAdd = getattrinfo(caster, "criticalDamageAdd")
  826. local attAdd = GetSkillAttributeDamage(paramMap)
  827. if not attAdd then
  828. return ((maxDC + skillPower - armor / 2) * (skillDamage + 1) + skillDamageAdd) * (1 + criticalDamageBonus) +
  829. criticalDamageAdd
  830. end
  831. return ((maxDC + (skillPower + attAdd[1]) * (1 + attAdd[2] / 10000) - armor / 2) * (skillDamage + 1) +
  832. skillDamageAdd) * (1 + criticalDamageBonus) + criticalDamageAdd
  833. end
  834. ---------------------------玩家攻击怪物(1)物理系(1)技能攻击(2)卓越一击(3)---------------------------
  835. function ZhuoYueYiJi1123(paramMap)
  836. local caster = paramMap["caster"]
  837. local target = paramMap["target"]
  838. -- 基础伤害={[(人物最大攻击力+技能攻击力)-(怪物防御力/2)]*技能攻击力系数+技能攻击力增加具体数值}*卓越一击攻击力加成系数+卓越一击攻击力加成具体数值
  839. local maxDC = getplaydef(caster, "@pf_g_maxDC")
  840. local armor = getattrinfo(target, "armor")
  841. local pf_globalData = getplaydef(caster, "@pf_globalData")
  842. local skillPower = pf_globalData["skillPower"]
  843. local skillDamage = getattrinfo(caster, "skillDamage")
  844. local skillDamageAdd = getattrinfo(caster, "skillDamageAdd")
  845. local excellentDamageBonus = getattrinfo(caster, "excellentDamageBonus")
  846. local excellentDamageAdd = getattrinfo(caster, "excellentDamageAdd")
  847. local attAdd = GetSkillAttributeDamage(paramMap)
  848. if not attAdd then
  849. return ((maxDC + skillPower - armor / 2) * (skillDamage + 1) + skillDamageAdd) * (1 + excellentDamageBonus) +
  850. excellentDamageAdd
  851. end
  852. return ((maxDC + (skillPower + attAdd[1]) * (1 + attAdd[2] / 10000) - armor / 2) * (skillDamage + 1) +
  853. skillDamageAdd) * (1 + excellentDamageBonus) + excellentDamageAdd
  854. end
  855. ---------------------------玩家攻击怪物(1)物理系(1)技能攻击(2)无视防御攻击(4)---------------------------
  856. function WuShiFangYu1124(paramMap)
  857. local caster = paramMap["caster"]
  858. local target = paramMap["target"]
  859. local retDamage = 0
  860. local ignoringIncreasedDefenseDamage = getattrinfo(caster, "ignoringIncreasedDefenseDamage")
  861. if IsZhuoYueYiJiPF(paramMap) then
  862. local zhuo_yue_damage = ZhuoYueYiJi11243(paramMap)
  863. retDamage = zhuo_yue_damage * (1 + ignoringIncreasedDefenseDamage)
  864. elseif IsXingYunYiJiPF(paramMap) then
  865. local lucky_damage = XinYunYiJi11242(paramMap)
  866. retDamage = lucky_damage * (1 + ignoringIncreasedDefenseDamage)
  867. else
  868. local normal_damage = YiBanGongJi11241(paramMap)
  869. retDamage = normal_damage * (1 + ignoringIncreasedDefenseDamage)
  870. end
  871. return retDamage
  872. end
  873. ---------------------------玩家攻击怪物(1)物理系(1)技能攻击(2)无视防御(4)一般攻击(1)---------------------------
  874. function YiBanGongJi11241(paramMap)
  875. local caster = paramMap["caster"]
  876. local target = paramMap["target"]
  877. -- 基础伤害={[(人物最小攻击力~人物最大攻击力)+技能攻击力]*技能攻击力系数+技能攻击力增加具体数值}
  878. local maxDC = getplaydef(caster, "@pf_g_maxDC")
  879. local minDC = getplaydef(caster, "@pf_g_minDC")
  880. local pf_globalData = getplaydef(caster, "@pf_globalData")
  881. local skillPower = pf_globalData["skillPower"]
  882. local armor = getattrinfo(target, "armor")
  883. local skillDamage = getattrinfo(caster, "skillDamage")
  884. local skillDamageAdd = getattrinfo(caster, "skillDamageAdd")
  885. local attAdd = GetSkillAttributeDamage(paramMap)
  886. if not attAdd then
  887. return (rand(minDC, maxDC) + skillPower) * (1 + skillDamage) + skillDamageAdd
  888. end
  889. return (rand(minDC, maxDC) + (skillPower + attAdd[1]) * (1 + attAdd[2] / 10000)) * (1 + skillDamage) +
  890. skillDamageAdd
  891. end
  892. ---------------------------玩家攻击怪物(1)物理系(1)技能攻击(2)无视防御(4)幸运一击(2)---------------------------
  893. function XinYunYiJi11242(paramMap)
  894. local caster = paramMap["caster"]
  895. local target = paramMap["target"]
  896. -- 基础伤害={[(人物最大攻击力+技能攻击力)*技能攻击力系数+技能攻击力增加具体数值]*幸运一击攻击力加成系数+幸运一击攻击力加成具体数值}
  897. local maxDC = getplaydef(caster, "@pf_g_maxDC")
  898. local pf_globalData = getplaydef(caster, "@pf_globalData")
  899. local skillPower = pf_globalData["skillPower"]
  900. local skillDamage = getattrinfo(caster, "skillDamage")
  901. local skillDamageAdd = getattrinfo(caster, "skillDamageAdd")
  902. local criticalDamageBonus = getattrinfo(caster, "criticalDamageBonus")
  903. local criticalDamageAdd = getattrinfo(caster, "criticalDamageAdd")
  904. local attAdd = GetSkillAttributeDamage(paramMap)
  905. if not attAdd then
  906. return ((maxDC + skillPower) * (skillDamage + 1) + skillDamageAdd) * (1 + criticalDamageBonus) +
  907. criticalDamageAdd
  908. end
  909. return ((maxDC + (skillPower + attAdd[1]) * (1 + attAdd[2] / 10000)) * (skillDamage + 1) + skillDamageAdd) *
  910. (1 + criticalDamageBonus) + criticalDamageAdd
  911. end
  912. ---------------------------玩家攻击怪物(1)物理系(1)技能攻击(2)无视防御(4)卓越一击(3)---------------------------
  913. function ZhuoYueYiJi11243(paramMap)
  914. local caster = paramMap["caster"]
  915. local target = paramMap["target"]
  916. -- 基础伤害={[(人物最大攻击力+技能攻击力)*技能攻击力系数+技能攻击力增加具体数值]*卓越一击攻击力加成系数+卓越一击攻击力加成具体数值
  917. local maxDC = getplaydef(caster, "@pf_g_maxDC")
  918. local pf_globalData = getplaydef(caster, "@pf_globalData")
  919. local skillPower = pf_globalData["skillPower"]
  920. local skillDamage = getattrinfo(caster, "skillDamage")
  921. local skillDamageAdd = getattrinfo(caster, "skillDamageAdd")
  922. local excellentDamageBonus = getattrinfo(caster, "excellentDamageBonus")
  923. local excellentDamageAdd = getattrinfo(caster, "excellentDamageAdd")
  924. local attAdd = GetSkillAttributeDamage(paramMap)
  925. if not attAdd then
  926. return ((maxDC + skillPower) * (skillDamage + 1) + skillDamageAdd) * (1 + excellentDamageBonus) +
  927. excellentDamageAdd
  928. end
  929. return ((maxDC + (skillPower + attAdd[1]) * (1 + attAdd[2] / 10000)) * (skillDamage + 1) + skillDamageAdd) *
  930. (1 + excellentDamageBonus) + excellentDamageAdd
  931. end
  932. -- 玩家普通攻击
  933. function PlayerNormalAttackPF(paramMap)
  934. local retDamage = 0
  935. if IsShuangBeiYiJiPF(paramMap) then
  936. retDamage = ShuangBeiYiJi1115(paramMap)
  937. elseif IsWuShiFangYuPF(paramMap) then
  938. retDamage = WuShiFangYu11154(paramMap)
  939. elseif IsZhuoYueYiJiPF(paramMap) then
  940. retDamage = ZhuoYueYiJi1113(paramMap)
  941. elseif IsXingYunYiJiPF(paramMap) then
  942. retDamage = XinYunYiJi1112(paramMap)
  943. else
  944. retDamage = YiBanGongJi1111(paramMap)
  945. end
  946. return retDamage
  947. end
  948. ---------------------------玩家攻击怪物(1)物理系(1)普通攻击(1)双倍一击(5)---------------------------
  949. function ShuangBeiYiJi1115(paramMap)
  950. local caster = paramMap["caster"]
  951. local target = paramMap["target"]
  952. local retDamage = 0
  953. local doubleDamageBonus = getattrinfo(caster, "doubleDamageBonus")
  954. if IsWuShiFangYuPF(paramMap) then
  955. local ignore_defense_damage = WuShiFangYu11154(paramMap)
  956. retDamage = ignore_defense_damage * (1 + doubleDamageBonus)
  957. elseif IsZhuoYueYiJiPF(paramMap) then
  958. local zhuo_yue_damage = ZhuoYueYiJi1113(paramMap)
  959. retDamage = zhuo_yue_damage * (1 + doubleDamageBonus)
  960. elseif IsXingYunYiJiPF(paramMap) then
  961. local lucky_damage = XinYunYiJi1112(paramMap)
  962. retDamage = lucky_damage * (1 + doubleDamageBonus)
  963. else
  964. local normal_damage = YiBanGongJi1111(paramMap)
  965. retDamage = normal_damage * (1 + doubleDamageBonus)
  966. end
  967. return retDamage
  968. end
  969. ---------------------------玩家攻击怪物(1)物理系(1)普通攻击(1)一般攻击(1)---------------------------
  970. function YiBanGongJi1111(paramMap)
  971. local caster = paramMap["caster"]
  972. local target = paramMap["target"]
  973. -- 基础伤害=(人物最小攻击力~人物最大攻击力)-(怪物防御力/2)
  974. local maxDC = getplaydef(caster, "@pf_g_maxDC")
  975. local minDC = getplaydef(caster, "@pf_g_minDC")
  976. local armor = getattrinfo(target, "armor")
  977. return rand(minDC, maxDC) - armor / 2
  978. end
  979. --------------------------玩家攻击怪物(1)物理系(1)普通攻击(1)幸运一击(2)---------------------------
  980. function XinYunYiJi1112(paramMap)
  981. local caster = paramMap["caster"]
  982. local target = paramMap["target"]
  983. -- 基础伤害=[人物最大攻击力-(怪物防御力/2)]*幸运一击攻击力加成系数+幸运一击攻击力加成具体数值
  984. local maxDC = getplaydef(caster, "@pf_g_maxDC")
  985. local armor = getattrinfo(target, "armor")
  986. local criticalDamageBonus = getattrinfo(caster, "criticalDamageBonus")
  987. local criticalDamageAdd = getattrinfo(caster, "criticalDamageAdd")
  988. return (maxDC - armor / 2) * (criticalDamageBonus + 1) + criticalDamageAdd
  989. end
  990. --------------------------玩家攻击怪物(1)物理系(1)普通攻击(1)卓越一击(3)---------------------------
  991. function ZhuoYueYiJi1113(paramMap)
  992. local caster = paramMap["caster"]
  993. local target = paramMap["target"]
  994. -- 基础伤害=[人物最大攻击力-(怪物防御力/2)]*卓越一击攻击力加成系数+卓越一击攻击力加成具体数值
  995. local maxDC = getplaydef(caster, "@pf_g_maxDC")
  996. local armor = getattrinfo(target, "armor")
  997. local excellentDamageBonus = getattrinfo(caster, "excellentDamageBonus")
  998. local excellentDamageAdd = getattrinfo(caster, "excellentDamageAdd")
  999. return (maxDC - armor / 2) * (excellentDamageBonus + 1) + excellentDamageAdd
  1000. end
  1001. ---------------------------玩家攻击怪物(1)物理系(1)普通攻击(1)双倍一击(5)无视防御攻击(4)---------------------------
  1002. function WuShiFangYu11154(paramMap)
  1003. local caster = paramMap["caster"]
  1004. local target = paramMap["target"]
  1005. local retDamage = 0
  1006. local ignoringIncreasedDefenseDamage = getattrinfo(caster, "ignoringIncreasedDefenseDamage")
  1007. if IsZhuoYueYiJiPF(paramMap) then
  1008. local zhuo_yue_damage = ZhuoYueYiJi11143(paramMap)
  1009. retDamage = zhuo_yue_damage * (1 + ignoringIncreasedDefenseDamage)
  1010. elseif IsXingYunYiJiPF(paramMap) then
  1011. local lucky_damage = XinYunYiJi11142(paramMap)
  1012. retDamage = lucky_damage * (1 + ignoringIncreasedDefenseDamage)
  1013. else
  1014. local normal_damage = YiBanGongJi11141(paramMap)
  1015. retDamage = normal_damage * (1 + ignoringIncreasedDefenseDamage)
  1016. end
  1017. return retDamage
  1018. end
  1019. ---------------------------玩家攻击怪物(1)物理系(1)普通攻击(1)无视防御(4)一般攻击(1)---------------------------
  1020. function YiBanGongJi11141(paramMap)
  1021. local caster = paramMap["caster"]
  1022. local target = paramMap["target"]
  1023. local maxDC = getplaydef(caster, "@pf_g_maxDC")
  1024. local minDC = getplaydef(caster, "@pf_g_minDC")
  1025. -- 基础伤害=(人物最小攻击力~人物最大攻击力)
  1026. return rand(minDC, maxDC)
  1027. end
  1028. ---------------------------玩家攻击怪物(1)物理系(1)普通攻击(1)无视防御(4)幸运一击(2)---------------------------
  1029. function XinYunYiJi11142(paramMap)
  1030. local caster = paramMap["caster"]
  1031. local target = paramMap["target"]
  1032. -- 基础伤害=(人物最大攻击力*幸运一击攻击力加成系数+幸运一击攻击力加成具体数值)
  1033. local maxDC = getplaydef(caster, "@pf_g_maxDC")
  1034. local criticalDamageBonus = getattrinfo(caster, "criticalDamageBonus")
  1035. local criticalDamageAdd = getattrinfo(caster, "criticalDamageAdd")
  1036. return maxDC * (criticalDamageBonus + 1) + criticalDamageAdd
  1037. end
  1038. ---------------------------玩家攻击怪物(1)物理系(1)普通攻击(1)无视防御(4)卓越一击(3)---------------------------
  1039. function ZhuoYueYiJi11143(paramMap)
  1040. local caster = paramMap["caster"]
  1041. local target = paramMap["target"]
  1042. -- 基础伤害=(人物最大攻击力*卓越一击攻击力加成系数+卓越一击攻击力加成具体数值)
  1043. local maxDC = getplaydef(caster, "@pf_g_maxDC")
  1044. local excellentDamageBonus = getattrinfo(caster, "excellentDamageBonus")
  1045. local excellentDamageAdd = getattrinfo(caster, "excellentDamageAdd")
  1046. return maxDC * (excellentDamageBonus + 1) + excellentDamageAdd
  1047. end
  1048. -- 攻击miss
  1049. function MissPF(paramMap)
  1050. local caster = paramMap["caster"]
  1051. local pf_globalData = getplaydef(caster, "@pf_globalData")
  1052. local result = pf_globalData["result"]
  1053. result["casthurt"] = 0
  1054. result["targethurt"] = 0
  1055. result["castershield"] = 0
  1056. result["targetshield"] = 0
  1057. result["hurttype"] = 108
  1058. result["repeat"] = 1
  1059. setplaydef(caster, "@pf_globalData", pf_globalData)
  1060. end
  1061. -- 获取技能攻击力
  1062. function GetAtkPowerPF(actor, skillId)
  1063. local injuryType = tonumber(ConfigDataManager.getTableValue("cfg_skill_info", "injuryType", "skillID", skillId))
  1064. local minDC = getattrinfo(actor, "minDC")
  1065. local maxDC = getattrinfo(actor, "maxDC")
  1066. local career = tonumber(getbaseinfo(actor, "getbasecareer"))
  1067. if injuryType == 1 then
  1068. -- 物理攻击
  1069. if career == 1 then
  1070. -- 战士
  1071. local weaponList = GetWeaponListPF(actor)
  1072. local weaponType = GetWeaponTypePF(actor, weaponList)
  1073. if weaponType == 1 then
  1074. return ZhanShiChuLi1BaWuQiPF(actor, weaponList)
  1075. elseif weaponType == 2 then
  1076. return ZhanShiChuLi2BaWuQiPF(actor, weaponList)
  1077. end
  1078. end
  1079. elseif injuryType == 2 then
  1080. -- 魔法攻击
  1081. return MoFaDCPF(actor)
  1082. elseif injuryType == 3 then
  1083. -- 诅咒攻击
  1084. return ZuZhouDCPF(actor)
  1085. end
  1086. local ret = {minDC, maxDC}
  1087. return ret
  1088. end
  1089. -- 诅咒系攻击力计算
  1090. function ZuZhouDCPF(actor)
  1091. local pf_globalData = getplaydef(actor, "@pf_globalData")
  1092. local skillId = pf_globalData["skillId"]
  1093. local skillLevel = pf_globalData["skillLevel"]
  1094. local minZC = getattrinfo(actor, "minimumCurseAttackPower")
  1095. local maxZC = getattrinfo(actor, "maximumCurseAttackPower")
  1096. local skillPower
  1097. if skillId > 0 and skillLevel > 0 then
  1098. skillPower = ConfigDataManager.getTableValue('cfg_skill_info', 'skillpower', 'skillid', skillId, 'skilllevel', skillLevel)
  1099. skillPower = tonumber(skillPower)
  1100. skillPower = skillPower or 0
  1101. end
  1102. local levelMC = getattrinfo(actor, "levelmc")
  1103. -- 计算卓越魔法攻击力
  1104. local zhuoYueMoFaDC = getattrinfo(actor, "levelmc") + getattrinfo(actor, "attackIncreaseMc")
  1105. local enchantmentCurseAttackPowerBonus = getattrinfo(actor, "enchantmentCurseAttackPowerBonus")
  1106. local curseStaffAttackPowerBonus = getattrinfo(actor, "curseStaffAttackPowerBonus")
  1107. local retMinMC = (minZC + skillPower + levelMC / 20) * (1 + zhuoYueMoFaDC * 0.02) *
  1108. (1 + enchantmentCurseAttackPowerBonus / 100) * (1 + curseStaffAttackPowerBonus / 100)
  1109. local retMaxMC = (maxZC + skillPower + levelMC / 20) * (1 + zhuoYueMoFaDC * 0.02) *
  1110. (1 + enchantmentCurseAttackPowerBonus / 100) * (1 + curseStaffAttackPowerBonus / 100)
  1111. local ret = {retMinMC, retMaxMC}
  1112. return ret
  1113. end
  1114. -- 魔法系攻击力计算
  1115. function MoFaDCPF(actor)
  1116. local pf_globalData = getplaydef(actor, "@pf_globalData")
  1117. local skillId = pf_globalData["skillId"]
  1118. local skillLevel = pf_globalData["skillLevel"]
  1119. local minMC = getattrinfo(actor, "minMC")
  1120. local maxMC = getattrinfo(actor, "maxMC")
  1121. local skillPower
  1122. if skillId > 0 and skillLevel > 0 then
  1123. skillPower = ConfigDataManager.getTableValue('cfg_skill_info', 'skillpower', 'skillid', skillId, 'skilllevel', skillLevel)
  1124. skillPower = tonumber(skillPower)
  1125. skillPower = skillPower or 0
  1126. end
  1127. local magicAttackPowerValue = getattrinfo(actor, "magicattackpowervalue")
  1128. local levelMC = getattrinfo(actor, "levelmc")
  1129. -- 计算卓越魔法攻击力
  1130. local zhuoYueMoFaDC = getattrinfo(actor, "levelmc") + getattrinfo(actor, "attackIncreaseMc")
  1131. local enchantmentCurseAttackPowerBonus = getattrinfo(actor, "enchantmentCurseAttackPowerBonus")
  1132. local wandMagicAttackPowerBonus = getattrinfo(actor, "wandMagicAttackPowerBonus")
  1133. local retMinMC = (minMC + skillPower + magicAttackPowerValue + levelMC / 20) * (1 + zhuoYueMoFaDC * 0.02) *
  1134. (1 + enchantmentCurseAttackPowerBonus / 100) * (1 + wandMagicAttackPowerBonus / 100)
  1135. local retMaxMC = (maxMC + skillPower + magicAttackPowerValue + levelMC / 20) * (1 + zhuoYueMoFaDC * 0.02) *
  1136. (1 + enchantmentCurseAttackPowerBonus / 100) * (1 + wandMagicAttackPowerBonus / 100)
  1137. local ret = {retMinMC, retMaxMC}
  1138. return ret
  1139. end
  1140. -- 战士_处理1把武器或者盾牌
  1141. function ZhanShiChuLi1BaWuQiPF(actor, weaponList)
  1142. local weapon = weaponList[1]
  1143. local basicAttr = weapon["basicattr"]
  1144. local minDCId = attrname2id("minDC")
  1145. local maxDCId = attrname2id("maxDC")
  1146. local minDC = getattrinfo(actor, "minDC")
  1147. local maxDC = getattrinfo(actor, "maxDC")
  1148. local weaponMinDC = FindAttrValuePF(basicAttr, minDCId)
  1149. local weaponMaxDC = FindAttrValuePF(basicAttr, maxDCId)
  1150. local levelDC = getattrinfo(actor, "levelDc")
  1151. local powerValue = getattrinfo(actor, "levelDc")
  1152. local attackBonusDC = getattrinfo(actor, "attackBonusDc")
  1153. local zhuoYueDC = CalcuZhuoYueDCPF(actor)
  1154. local retMinDC = (minDC + weaponMinDC + levelDC / 20 + powerValue) * (1 + zhuoYueDC * 0.02) *
  1155. (1 + attackBonusDC / 100)
  1156. local retMaxDC = (maxDC + weaponMaxDC + levelDC / 20 + powerValue) * (1 + zhuoYueDC * 0.02) *
  1157. (1 + attackBonusDC / 100)
  1158. local ret = {retMinDC, retMaxDC}
  1159. return ret
  1160. end
  1161. -- 战士_处理2把单手武器
  1162. function ZhanShiChuLi2BaWuQiPF(actor, weaponList)
  1163. local left = weaponList[1]
  1164. local right = weaponList[2]
  1165. local leftBasicAttr = left["basicattr"]
  1166. local rightBasicAttr = right["basicattr"]
  1167. local minDCId = attrname2id("minDC")
  1168. local maxDCId = attrname2id("maxDC")
  1169. local minDC = getattrinfo(actor, "minDC")
  1170. local maxDC = getattrinfo(actor, "maxDC")
  1171. local leftMinDC = FindAttrValuePF(leftBasicAttr, minDCId)
  1172. local leftMaxDC = FindAttrValuePF(leftBasicAttr, maxDCId)
  1173. local rightMinDC = FindAttrValuePF(rightBasicAttr, minDCId)
  1174. local rightMaxDC = FindAttrValuePF(rightBasicAttr, maxDC)
  1175. local levelDC = getattrinfo(actor, "levelDc")
  1176. local powerValue = getattrinfo(actor, "levelDc")
  1177. local attackBonusDC = getattrinfo(actor, "attackBonusDc")
  1178. local zhuoYueDC = CalcuZhuoYueDCPF(actor)
  1179. local retMinDC = (minDC * 2 + leftMinDC + rightMinDC + levelDC / 20 * 2 + powerValue * 2) * (1 + zhuoYueDC * 0.02) *
  1180. (1 + attackBonusDC / 100) * 0.55
  1181. local retMaxDC = (maxDC * 2 + leftMaxDC + rightMaxDC + levelDC / 20 * 2 + powerValue * 2) * (1 + zhuoYueDC * 0.02) *
  1182. (1 + attackBonusDC / 100) * 0.55
  1183. local ret = {retMinDC, retMaxDC}
  1184. return ret
  1185. end
  1186. -- 计算卓越攻击力
  1187. function CalcuZhuoYueDCPF(actor)
  1188. local value = getattrinfo(actor, "levelDc") + getattrinfo(actor, "attackBonusDc")
  1189. end
  1190. function FindAttrValuePF(attrList, attrId)
  1191. if #attrList <= 0 then
  1192. return 0
  1193. end
  1194. for index, attrMap in ipairs(attrList) do
  1195. local id = tonumber(attrMap["attrid"])
  1196. local value = tonumber(attrMap["value"])
  1197. if id == attrId then
  1198. return value
  1199. end
  1200. end
  1201. return 0
  1202. end
  1203. -- 获取武器列表
  1204. function GetWeaponListPF(actor)
  1205. local retData = {}
  1206. local allEquipInfo = getputonequipinfo(actor)
  1207. for index, equipInfo in ipairs(allEquipInfo) do
  1208. local cfgId = equipInfo["cfgid"]
  1209. local strPart = tonumber(ConfigDataManager.getTableValue('cfg_item', 'strpart', 'id', cfgId))
  1210. if strPart == 1 or strPart == 2 or strPart == 3 then
  1211. table.insert(retData, equipInfo)
  1212. end
  1213. end
  1214. return retData
  1215. end
  1216. function GetWeaponTypePF(actor, weaponList)
  1217. local ret = 0
  1218. local count = #weaponList
  1219. if count == 1 then
  1220. ret = 1
  1221. elseif count == 2 then
  1222. local weapon1 = weaponList[1]
  1223. local weapon2 = weaponList[2]
  1224. local weapon1CfgId = weapon1["cfgid"]
  1225. local weapon2CfgId = weapon2["cfgid"]
  1226. local ok1 = IsZhuFuShouWeapon(weapon1CfgId)
  1227. local ok2 = IsZhuFuShouWeapon(weapon2CfgId)
  1228. if ok1 == 1 or ok2 == 1 then
  1229. return 2
  1230. else
  1231. return 1
  1232. end
  1233. end
  1234. end
  1235. -- 是否是主副手武器
  1236. function IsZhuFuShouWeapon(cfg_id)
  1237. local type = tonumber(ConfigDataManager.getTableValue('cfg_item', 'type', 'id', cfg_id))
  1238. local sub_type = tonumber(ConfigDataManager.getTableValue('cfg_item', 'subtype', 'id', cfg_id))
  1239. if type == 1 and sub_type == 3 then
  1240. return 1
  1241. else
  1242. return 0
  1243. end
  1244. end
  1245. function IsShuangBeiYiJiPF(paramMap)
  1246. local caster = paramMap["caster"]
  1247. local target = paramMap["target"]
  1248. local doubleDamageChance = getattrinfo(caster, "doubleDamageChance")
  1249. local doubleDamageResistanceChance = getattrinfo(target, "doubleDamageResistanceChance")
  1250. local chance = max(0, doubleDamageChance - doubleDamageResistanceChance)
  1251. local randomFloat = math.random()
  1252. local pf_globalData = getplaydef(caster, "@pf_globalData")
  1253. if chance > randomFloat then
  1254. pf_globalData["shuangBeiYiJi"] = "1"
  1255. pf_globalData["yiBanGongJi"] = "0"
  1256. setplaydef(caster, "@pf_globalData", pf_globalData)
  1257. return true
  1258. else
  1259. return false
  1260. end
  1261. end
  1262. function IsWuShiFangYuPF(paramMap)
  1263. local caster = paramMap["caster"]
  1264. local target = paramMap["target"]
  1265. local unMissRate = getattrinfo(caster, "unMissRate")
  1266. local unMissResistanceRate = getattrinfo(target, "unMissResistanceRate")
  1267. local chance = max(0, unMissRate - unMissResistanceRate)
  1268. local randomFloat = math.random()
  1269. local pf_globalData = getplaydef(caster, "@pf_globalData")
  1270. if chance > randomFloat then
  1271. pf_globalData["wuShiFangYu"] = "1"
  1272. pf_globalData["yiBanGongJi"] = "0"
  1273. setplaydef(caster, "@pf_globalData", pf_globalData)
  1274. return true
  1275. else
  1276. return false
  1277. end
  1278. end
  1279. function IsZhuoYueYiJiPF(paramMap)
  1280. local caster = paramMap["caster"]
  1281. local target = paramMap["target"]
  1282. local excellentDamageChance = getattrinfo(caster, "excellentDamageChance")
  1283. local excellentDamageResistanceChance = getattrinfo(target, "excellentDamageResistanceChance")
  1284. local chance = max(0, excellentDamageChance - excellentDamageResistanceChance)
  1285. local randomFloat = math.random()
  1286. local pf_globalData = getplaydef(caster, "@pf_globalData")
  1287. if chance > randomFloat then
  1288. pf_globalData["zhuoYueYiJi"] = "1"
  1289. pf_globalData["yiBanGongJi"] = "0"
  1290. setplaydef(caster, "@pf_globalData", pf_globalData)
  1291. return true
  1292. else
  1293. return false
  1294. end
  1295. end
  1296. function IsXingYunYiJiPF(paramMap)
  1297. local caster = paramMap["caster"]
  1298. local target = paramMap["target"]
  1299. local criticalDamageChance = getattrinfo(caster, "criticalDamageChance")
  1300. local criticalDamageResistanceChance = getattrinfo(target, "criticalDamageResistanceChance")
  1301. local chance = max(0, criticalDamageChance - criticalDamageResistanceChance)
  1302. local randomFloat = math.random()
  1303. local pf_globalData = getplaydef(caster, "@pf_globalData")
  1304. if chance > randomFloat then
  1305. pf_globalData["xinYunYiJi"] = "1"
  1306. pf_globalData["yiBanGongJi"] = "0"
  1307. setplaydef(caster, "@pf_globalData", pf_globalData)
  1308. return true
  1309. else
  1310. return false
  1311. end
  1312. end
  1313. ---玩家战斗触发
  1314. function PlayerFight.AttackTrigger(actor,fightRet)
  1315. this.UpdateFightTask(actor,fightRet)
  1316. end
  1317. ---更新战斗相关任务
  1318. function this.UpdateFightTask(actor,fightRet)
  1319. local taskCfgList = ConfigDataManager.getTable("cfg_task_target", "taskgoaltype",TaskTargetType.HURT_MAP_MONSTER)
  1320. if table.isNullOrEmpty(taskCfgList) then
  1321. return
  1322. end
  1323. local targetHurt = tonumber(fightRet["targethurt"])
  1324. local mapCfgId = tonumber(fightRet["mapcfgid"])
  1325. local targetCfgId = tonumber(fightRet["targetcfgid"])
  1326. local flush = false
  1327. for _, taskCfg in pairs(taskCfgList) do
  1328. local monsterLimit = tonumber(taskCfg["taskgoalparam"])
  1329. local mapLimit = tonumber(taskCfg["taskgoalparam2"])
  1330. if targetCfgId == monsterLimit and mapCfgId == mapLimit then
  1331. flush = true
  1332. break
  1333. end
  1334. end
  1335. -- 触发刷新任务
  1336. if flush then
  1337. local taskParam = {
  1338. monsterid = targetCfgId,
  1339. mapid = mapCfgId,
  1340. hurt = targetHurt
  1341. }
  1342. -- 触发任务目标
  1343. TaskHandler.TriggerTaskGoal(actor, TaskTargetType.HURT_MAP_MONSTER, taskParam)
  1344. end
  1345. end