| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382 |
- local LastAttakedByMonster = "@上次被怪物攻击的变量"
- local HurtTypeDefKeys = {
- YI_BAN = "YI_BAN",
- ZHUO_YUE = "ZHUO_YUE",
- XING_YUN = "XING_YUN",
- WU_SHI = "WU_SHI",
- SHUANG_BEI = "SHUANG_BEI",
- BAO_JI = "BAO_JI",
- ZHI_MING = "ZHI_MING",
- SAN_BEI = "SAN_BEI",
- }
- PlayerFight = {}
- local this = PlayerFight
- local FightLog = {}
- local ComboSkills = {
- [1030001] = 1
- }
- function excusefightdamage(actor, paramMapList)
- -- local magicValue = this.getAttValueWithName(actor, "wandMagicAttackPowerBonus")
- -- local mountdamagebonus = this.getAttValueWithName(actor, "mountdamagebonus")
- local selfType = getbaseinfo(actor, "mapobjecttype")
- if selfType == MapObjectType.PLAYER then
- local isQuiverDestory = APIGetInt(actor, "ZC_Quiver_Durability", 1)
- if isQuiverDestory == 1 then
- return {}
- end
- end
- local fightResults = {}
- for _, paramMap in pairs(paramMapList) do
- local skillInfo = ConfigDataManager.getTable("cfg_skill_info", "skillID", paramMap.skillid, "skillLevel", paramMap.skilllevel)
- paramMap["CfgData"] = next(skillInfo) and skillInfo[1] or {}
- local fightResultList = this.ExcuseFightDamage(actor, paramMap)
- for _, fightResult in pairs(fightResultList) do
- local next_stage = fightResult.next_stage == nil and true or
- fightResult.next_stage --是否继续往下计算(触发闪避等不继续计算)
- if next_stage == true then
- fightResult["target"] = paramMap["target"]
- local canAttack, Result = PlayerFight.Damage(actor, paramMap, fightResult) --引擎伤害计算完成后重新计算
- if canAttack then
- table.concatTable(fightResults, Result)
- end
- end
- end
- end
- if table.count(paramMapList) > 0 then
- this.AttackPassiveSkill(actor, paramMapList)
- end
- return fightResults
- end
- -- 兼容旧入口:FightDamageTypeCache
- FightDamageTypeCache = FightDamageTypeCache or {}
- function FightDamageTypeCache.Cache(...)
- return PlayerFight.Cache(...)
- end
- function FightDamageTypeCache.GetElementalHurtType(caster, key)
- return PlayerFight.GetElementalHurtType(caster, key)
- end
- function FightDamageTypeCache.GetHurtType(caster)
- return PlayerFight.GetHurtType(caster)
- end
- -- hurttype 伤害类型
- -- 101 一般攻击
- -- 102 幸运一击
- -- 103 幸运一击+无视防御
- -- 104 卓越一击
- -- 105 卓越一击+无视防御
- -- 106 无视防御
- -- 107 双倍伤害
- -- 108 攻击敌方MISS
- -- 109 反射伤害(技能伤害反射/卓越属性伤害反射)
- -- 110 掉落防护值
- -- 111 幸运一击+双倍伤害
- -- 112 幸运一击+无视防御+双倍伤害
- -- 113 卓越一击+双倍伤害
- -- 114 卓越一击+无视防御+双倍伤害
- -- 115 无视防御+双倍伤害
- -- 116 燃烧
- -- 117 中毒
- -- 118 治疗
- -- 119 回蓝
- -- 120 幸运一击+卓越一击
- -- 121 幸运一击+卓越一击+双倍伤害
- -- 122 幸运一击+卓越一击+双倍伤害+无视防御
- -- 123 幸运一击+卓越一击+无视防御
- -- 200 神圣伤害
- -- 201 黑暗伤害
- -- 202 雷电伤害
- -- 203 风暴伤害
- -- 204 神圣伤害+黑暗伤害
- -- 205 神圣伤害+雷电伤害
- -- 206 神圣伤害+风暴伤害
- -- 207 黑暗伤害+雷电伤害
- -- 208 黑暗伤害+风暴伤害
- -- 209 雷电伤害+风暴伤害
- -- 210 神圣伤害+黑暗伤害+雷电伤害
- -- 211 神圣伤害+黑暗伤害+风暴伤害
- -- 212 神圣伤害+雷电伤害+风暴伤害
- -- 213 黑暗伤害+雷电伤害+风暴伤害
- -- 214 神圣伤害+黑暗伤害+雷电伤害+风暴伤害
- -- 301 连击技伤害
- -- 401 卡牌变身伤害飘字
- function PlayerFight.Damage(actor, paramMap, fightResult)
- -- local nowTime = os.time()
- local caster = paramMap.caster --—— 攻击对象
- local target = paramMap.target --—— 受击对象
- -- local mapid = paramMap.mapid --—— 地图id
- -- local skillid = paramMap.skillid --—— 技能id
- -- local skilllevel = paramMap.skilllevel --—— 技能等级
- -- local monsterid = paramMap.monsterid --—— 受击怪物id
- local castertype = paramMap.castertype --—— 攻击者类型
- local targettype = paramMap.targettype --—— 受击者类型
- local tAddHurt = {
- addHurtNum = 0,
- addHurtPct = 0,
- }
- local casthurt = fightResult.casthurt --攻击者伤害
- local targethurt = fightResult.targethurt --受击者伤害
- local hurttype = fightResult.hurttype --伤害类型
- local repeat1 = fightResult["repeat"] --伤害次数
- -- local castershield = fightResult.castershield --攻击者扣除护盾
- -- local targetshield = fightResult.targetshield --受击者扣除护盾
- -- local targethurtshow = fightResult.targethurtshow --飘字使用的伤害
- -- local comboskill = fightResult.comboskill --是否是连击技能
- -- local target = fightResult.target --目标对象
- EquipGuard.guardHpChange(fightResult.target, targethurt)
- local extra_result = {}; --额外的飘字拆分
- -- 计算反伤
- casthurt = this.ReflexDamage(paramMap, targethurt)
- if targettype == MapObjectType.PLAYER and castertype == MapObjectType.PLAYER then
- local fightmodel = getbaseinfo(caster, "fightmodel")
- if fightmodel == 1 then
- return false, {}
- elseif fightmodel == 6 then
- local pkVal = pk.getpkvalue(target)
- if pkVal <= 0 then
- return false, {}
- end
- end
- fightResult.targethurt = targethurt --受击者伤害
- --伤害后AG和SD操作执行
- -- GameEvent.push(EventCfg.onAttackAGAndSD, paramMap, fightResult, extra_result)
- AGAndSD.onAttackAGAndSD(paramMap, fightResult, extra_result)
- if casthurt > 0 then
- casthurt = AGAndSD.onReflexDamage(paramMap, fightResult, extra_result, casthurt)
- end
- targethurt = fightResult.targethurt
- hurttype = fightResult.hurttype
- end
- --推送攻击前事件
- GameEvent.push(EventCfg.AttackDamage, paramMap, fightResult, tAddHurt)
- -- 吸血
- -- this.RecoverHP(paramMap,targethurt)
- -- fightlog(
- -- string.joinVar("目标扣血", math.floor(targethurt)) ..
- -- string.joinVar("攻击者扣血", math.floor(casthurt)) ..
- -- string.joinVar("目标扣护盾", math.floor(targetshield)) ..
- -- string.joinVar("攻击者扣护盾", math.floor(castershield)) ..
- -- string.joinVar("伤害类型", hurttype) ..
- -- string.joinVar("伤害次数", repeat1, true)
- -- )
- fightResult.casthurt = casthurt --攻击者伤害
- fightResult.targethurt = targethurt --受击者伤害
- fightResult.targethurtshow = targethurt --飘字使用的伤害
- -- if castertype == MapObjectType.PLAYER then
- -- info(FightLog, "战斗日志打印")
- -- end
- -- fightResult.castershield = castershield --攻击者者扣除护盾
- -- fightResult.targetshield = targetshield --受击者扣除护盾
- fightResult.hurttype = hurttype --伤害类型
- -- fightResult["repeat"] = repeat1 --伤害次数
- -- fightResult.comboskill = comboskill --是否是连击技能
- -- fightResult.target = target --目标对象
- local result = { fightResult }
- if #extra_result > 0 then
- table.concatTable(result, extra_result)
- end
- -- info("现伤害3",fightResult)
- return true, result
- end
- -- 被动技能
- function this.AttackPassiveSkill(actor, paramMapList)
- local selfType = getbaseinfo(actor, "mapobjecttype")
- if selfType ~= MapObjectType.PLAYER then
- return
- end
- local targetList = {}
- local skillId = paramMapList[1].skillid
- local skillLevel = paramMapList[1].skilllevel
- for _, paramMap in pairs(paramMapList) do
- table.insert(targetList, paramMap["target"])
- end
- PassiveSkill.RoleAttack(actor, targetList, skillId, skillLevel)
- end
- function this.IsSelfPet(actor, target)
- if actor == nil or target == nil then
- return false
- end
- local selfType = getbaseinfo(actor, "mapobjecttype")
- local targetType = getbaseinfo(target, "mapobjecttype")
- if selfType ~= MapObjectType.PLAYER then
- return false
- end
- if targetType ~= MapObjectType.PET then
- return false
- end
- local masterId = getbaseinfo(target, "master")
- local id = getbaseinfo(actor, "id")
- if masterId ~= id then
- return false
- end
- return true
- end
- function this.logTargetAttrInfo(targetActor)
- if targetActor == nil then
- return
- end
- local targetAttrInfo = getallattrinfo(targetActor)
- if targetAttrInfo == nil then
- return
- end
- local logText = ""
- for k, v in pairs(targetAttrInfo) do
- local attrId = tonumber(k)
- local attrValue = tonumber(v)
- if attrValue ~= 0 then
- local attrName = ConfigDataManager.getTableValue("cfg_att_info", "attribute", "id", attrId)
- if not string.isNullOrEmpty(logText) then
- logText = logText .. ","
- end
- logText = logText .. attrName .. "=" .. attrValue
- end
- end
- if not string.isNullOrEmpty(logText) then
- local name = getbaseinfo(targetActor, "rolename")
- logText = "攻击目标=" .. name .. ",目标属性【" .. logText .. "】"
- end
- fightlog(logText)
- end
- function this.ExcuseFightDamage(actor, paramMap)
- --fixme 异步问题,lua队列任务执行时,地图可能已经被销毁
- if not mapexists(actor) then
- info(actor:toString() .. "执行战斗脚本时,原地图已经被销毁")
- return this.BuildFightResult(0, 0, 0, 0, 108, 1)
- end
- this.initData(paramMap)
- fightlog("\n==========================================\n战斗日志\n==========================================")
- local caster = paramMap.caster
- local castType = paramMap.castertype
- local target = paramMap.target
- local skillid = paramMap.skillid
- -- local targetType = paramMap["targettype"]
- local isComboSkill = ComboSkills[skillid] ~= nil
- -- if castType == MapObjectType.PLAYER then
- -- local comboSkill = getrolefield(caster, "role.roleskill.comboskill")
- -- isComboSkill = tonumber(paramMap["skillid"]) == comboSkill.skillCfgId
- -- end
- if castType >= MapObjectType.PARTNER then
- fightlog("不存在的攻击者类型 " .. castType)
- local result = this.BuildFightResult(0, 0, 0, 0, 108, 1)
- return { result }
- end
- --检测没有副本次数 不对BOSS造成伤害 已经删除 有需求重新做
- if this.IsSelfPet(actor, target) then
- fightlog("攻击自己的召唤兽无效")
- local result = this.BuildFightResult(0, 0, 0, 0, 108, 1)
- return { result }
- end
- -- this.logTargetAttrInfo(target)
- -- 庇护判断
- if this.CheckBiHuBuff(paramMap) == true then
- fightlog("庇护生效,无法对玩家造成伤害")
- local result = this.BuildFightResult(0, 0, 0, 0, 108, 1)
- return { result }
- end
- -- PK值判断
- -- if this.CheckPKCanHurt(paramMap) == false then
- -- fightlog("pk值较高,无法对玩家造成伤害")
- -- local result = this.BuildFightResult(0, 0, 0, 0, 108, 1)
- -- return { result }
- -- end
- -- 攻城战是否可以攻击
- -- if not RolandSeige.CanAttackRolandWall(actor, target, castType, targetType) then
- -- local result = this.BuildFightResult(0, 0, 0, 0, 108, 1)
- -- return { result }
- -- end
- local resultList = {}
- -- 计算技能的重复伤害(伤害次数)
- local repeatl = this.getRepeatInfo(paramMap)
- for i = 1, repeatl, 1 do
- -- 计算伤害
- local hurtMin = 1
- local originDamage, hurtType = this.DamageCalculate(paramMap)
- -- -- 新手期锁血
- -- if this.noviceProtect(paramMap, originDamage) then
- -- local result = this.BuildFightResult(0, 0, 0, 0, 108, 1)
- -- return { result }
- -- end
- if originDamage <= 0 then
- if castType == MapObjectType.PLAYER then
- local level = tonumber(getbaseinfo(actor, "level"))
- hurtMin = math.max(1, math.floor(level / 10))
- end
- if isComboSkill ~= true then
- local result = this.BuildFightResult(0, hurtMin, 0, 0, hurtType, 1)
- return { result }
- end
- end
- local elementalDamage = 0
- local elementalType = nil
- if castType == MapObjectType.PLAYER or castType == MapObjectType.PET then
- -- 元素伤害
- elementalDamage, elementalType = this.ElementalHurt(paramMap)
- end
- -- 火龙附加伤害
- originDamage = this.handleHuolong(paramMap, originDamage)
- -- 副本修正伤害
- --如果元素伤害大于0 则基础伤害覆盖元素伤害 之前对方加的 明显是BUG
- -- if elementalDamage > 0 then
- -- elementalDamage = originDamage
- -- end
- local result = {}
- if isComboSkill then
- -- local skillHurt = APIGetInt(actor, "ZC_LianJiHurt")
- originDamage = (getattrinfo(caster, "strength") * 0.5 + getattrinfo(caster, "agility") * 0.5 + getattrinfo(caster, "intelligence") *0.5) *
- (1 + getattrinfo(caster, "conboAdditionalRatio")) + originDamage + hurtMin
- -- originDamage = originDamage * math.randomFloat(0.9, 1)
- result = this.BuildFightResult(0, originDamage, 0, 0, 301, 1, isComboSkill)
- end
- if not next(result) then
- result = this.BuildFightResult(0, originDamage, 0, 0, hurtType, 1, isComboSkill)
- end
- -- 命中率判断
- -- if this.CanHit(paramMap) == false then
- -- local result = this.BuildFightResult(0, 0, 0, 0, 108, 1)
- -- return { result }
- -- end
-
- if isComboSkill or this.CanHit(paramMap) then
- table.insert(resultList, result)
- if elementalDamage > 0 then
- local elementalResult = this.BuildFightResult(0, elementalDamage, 0, 0, elementalType, 1, isComboSkill)
- table.insert(resultList, elementalResult)
- end
- else
- local result = this.BuildFightResult(0, 0, 0, 0, 108, 1)
- table.insert(resultList, result)
- end
- end
- -- if paramMap.castertype == MapObjectType.PLAYER then
- -- local comboSkill = getrolefield(caster, "role.roleskill.comboskill")
- -- if tonumber(skillid) ~= comboSkill.skillCfgId then
- -- local skillHurt = 0
- -- for _, v in pairs(resultList) do
- -- skillHurt = skillHurt + v.targethurt
- -- end
- -- APISetInt(actor, "ZC_LianJiHurt", skillHurt)
- -- end
- -- end
- if paramMap.castertype == MapObjectType.PLAYER then
- local skillHurt = 0
- local count = 0
- for _, v in pairs(resultList) do
- skillHurt = skillHurt + v.targethurt
- count = count + 1
- end
- -- APISetInt(actor, "ZC_DurabilityHurt", skillHurt)
- APISetInt(actor, "ZC_DurabilityHurtCount", count)
- end
- return resultList
- end
- -- 线上秒杀加日志
- function this.LogMiaoSha(actor, target, targetType, hurt, monsterCfgId, skillId)
- if targetType == MapObjectType.MONSTER then
- local monsterType = tonumber(ConfigDataManager.getTableValue("cfg_monster", "type", "id", monsterCfgId))
- if monsterType == 2 or monsterType == 3 then
- local maxHp = getbaseinfo(target, "maxhp")
- if hurt * 2 >= maxHp then
- info(actor:toString() .. "变身对BOSS造成巨额伤害。skillId:" .. skillId .. " ;monsterCfg:" .. monsterCfgId)
- end
- end
- end
- end
- -- 攻击回血
- function this.RecoverHP(paramMap, originDamage)
- local caster = paramMap["caster"]
- local HPAttackRecover = getattrinfo(caster, "HPAttackRecover")
- local HPAttackRecoveronus = getattrinfo(caster, "HPAttackRecoveronus")
- local attackBlood = getattrinfo(caster, "attackBlood")
- local attackRecover = originDamage * attackBlood
- local hpRecover = HPAttackRecover * (1 + HPAttackRecoveronus) + attackRecover
- local currentHp = getbaseinfo(caster, "hp")
- sethp(caster, hpRecover + currentHp)
- end
- --计算反伤
- -- 163 PVP反射伤害固定值增加 pvpDamageReflexAdd
- -- 164 PVP反射伤害固定值减少 pvpDamageReflexReduce
- function this.ReflexDamage(paramMap, originDamage)
- local casterHurt = 0
- local caster = paramMap["caster"]
- local target = paramMap["target"]
- local damageReflexProbability = getattrinfo(target, "damageReflexProbability")
- local damageReflexResistanceProbability = getattrinfo(caster, "damageReflexResistanceProbability")
- local rate = damageReflexProbability - damageReflexResistanceProbability
- if this.SelectRate(rate) then
- local damageReflex = getattrinfo(target, "damageReflex")
- local pvpDamageReflexAdd = getattrinfo(target, "pvpDamageReflexAdd")
- local pvpDamageReflexReduce = getattrinfo(caster, "pvpDamageReflexReduce")
- casterHurt = originDamage * damageReflex + pvpDamageReflexAdd - pvpDamageReflexReduce
- casterHurt = math.max(0, casterHurt)
- end
- return casterHurt
- end
- --处理重复伤害次数
- function this.getRepeatInfo(paramMap)
- local valueTimes = paramMap.CfgData.valuetimes
- local repeatl = 1
- if valueTimes ~= nil or valueTimes ~= "" then
- repeatl = RandomUtil.selectKey(valueTimes)
- end
- repeatl = math.max(repeatl, 1)
- return repeatl
- end
- function this.handleHuolong(paramMap, originDamage)
- local caster = paramMap["caster"]
- local castMapObjectType = getbaseinfo(caster, "mapobjecttype")
- if castMapObjectType ~= MapObjectType.MONSTER then
- return originDamage
- end
- local monsterInfo = getmonsterinfo(caster)
- local cfgId = monsterInfo["cfgid"]
- if tonumber(cfgId) ~= MonsterConfigId.HUOLONG then
- return originDamage
- end
- local target = paramMap["target"]
- local targetMaxHp = getattrinfo(target, "maxHP")
- local costHp = targetMaxHp * 0.05
- return originDamage + costHp
- end
- function this.noviceProtect(paramMap, originDamage)
- local target = paramMap["target"]
- local targetType = paramMap["targettype"]
- if targetType ~= MapObjectType.PLAYER then
- return false
- end
- local novice = getplaydef(target, NOVICE_PROTECT)
- if not novice then
- return false
- end
- if novice then
- local currentHp = getbaseinfo(target, "hp")
- local haveHp = currentHp - (originDamage or 0)
- local stringHp = ConfigDataManager.getTableValue("cfg_global", "value", "id", "15004")
- local hp = tonumber(stringHp)
- if haveHp < hp then
- return true
- end
- end
- return false
- end
- function this.initData(paramMap)
- local caster = paramMap["caster"]
- local originType = {
- [HurtTypeDefKeys.YI_BAN] = "1",
- [HurtTypeDefKeys.ZHUO_YUE] = "0",
- [HurtTypeDefKeys.XING_YUN] = "0",
- [HurtTypeDefKeys.WU_SHI] = "0",
- [HurtTypeDefKeys.SHUANG_BEI] = "0",
- [HurtTypeDefKeys.BAO_JI] = "0",
- }
- paramMap[PlayerDefKey.PLAYER_FIGHT_HURT_TYPE] = originType
- table.clear(FightLog)
- end
- function this.GetHurtType(caster)
- -- local resultType = getplaydef(caster, PlayerDefKey.PLAYER_FIGHT_HURT_TYPE)
- -- local yiBanGongJi = resultType[HurtTypeDefKeys.YI_BAN]
- -- local zhuoYueYiJi = resultType[HurtTypeDefKeys.ZHUO_YUE]
- -- local xinYunYiJi = resultType[HurtTypeDefKeys.XING_YUN]
- -- local wuShiFangYu = resultType[HurtTypeDefKeys.WU_SHI]
- -- local shuangBeiYiJi = resultType[HurtTypeDefKeys.SHUANG_BEI]
- -- -- local baoJi = resultType[HurtTypeDefKeys.BAO_JI]
- -- local typeString = yiBanGongJi .. zhuoYueYiJi .. xinYunYiJi .. wuShiFangYu .. shuangBeiYiJi --..baoJi
- -- local hurtTypeCache = getsysvar(SystemVarConst.NORMAL_DAMAGE_TYPE_CACHE, 0)
- -- local type = hurtTypeCache[typeString]
- -- if type == nil then
- -- error(caster, caster, "获取攻击类型配置失败,结果为", typeString)
- -- type = 101
- -- end
- -- return type
- return 0
- end
- function this.GetElementalHurtType(caster, key)
- local elementalCache = getsysvar(SystemVarConst.ELEMENTAL_DAMAGE_TYPE_CACHE, 0)
- local type = elementalCache[key]
- if type == nil then
- if string.contains(key, "1") then
- error(caster, caster, "获取元素伤害类型配置失败,结果为", key)
- end
- type = 101
- end
- return type
- end
- function this.BuildFightResult(casthurt, targethurt, castershield, targetshield, hurttype, repeatl, combo)
- combo = combo or false
- local result = {}
- result["comboskill"] = combo
- result["casthurt"] = casthurt
- result["targethurt"] = targethurt
- result["castershield"] = castershield
- result["targetshield"] = targetshield
- result["hurttype"] = hurttype
- result["repeat"] = repeatl
- result["targethurtshow"] = targethurt / repeatl --飘字体用的伤害:真实伤害除以次数
- local next_stage = true
- if hurttype == 108 and targethurt == 0 then
- next_stage = false
- end
- result["next_stage"] = next_stage
- result["fightLog"] = FightLog
- return result
- end
- --计算伤害1(六条特殊属性计算)
- function this.getDamage1(actor, paramMap)
- --基础伤害
- local minDC, maxDC = this.GetDCBySkill(paramMap)
- local damage = math.randomFloat(minDC, maxDC)
- local tab = {
- { this.IsXingYunYiJi(paramMap), damage = this.XingYunDamage(paramMap, maxDC), qz = 100 }, --幸运一击
- { this.IsZhuoYueYiJi(paramMap), damage = this.ZhuoYueDamage(paramMap, damage), qz = 100 }, --卓越一击
- { this.IsShuangBeiYiJi(paramMap), damage = this.ShuangBeiYiJi(paramMap, damage), qz = 100 }, --双倍一击
- { this.IsBaoJi(paramMap), damage = this.BaoJi(paramMap, damage), qz = 100 }, --暴击
- { this.IsZhiMingYiJi(paramMap), damage = this.ZhiMingYiJi(paramMap, damage), qz = 100 }, --致命一击
- { this.IsSanBeiYiJi(paramMap), damage = this.SanBeiYiJi(paramMap, damage), qz = 100 }, --三倍一击
- }
- local tab1 = {}
- for i = 1, #tab do
- local bool = tab[i][1]
- if bool then
- table.insert(tab1, tab[i])
- end
- end
- if next(tab1) then
- local index = API.GetQZ(tab1)
- return tab1[index].damage
- else
- return damage
- end
- end
- function this.PlayerCastDamage(actor, paramMap)
- local caster = paramMap["caster"]
- local target = paramMap["target"]
- local armor = getattrinfo(target, "armor")
- local targetType = paramMap["targettype"]
- local delArmor = 0
- if targetType == MapObjectType.PLAYER then
- local armorPenetValue = getattrinfo(caster, "armorPenetValue")
- local armorPenetRate = getattrinfo(caster, "armorPenetRate")
- delArmor = armorPenetValue * (1 + armorPenetRate)
- fightlog("防御穿透=" .. delArmor)
- end
- local var
- if this.IsWuShiFangYu(paramMap) then
- fightlog("触发 无视防御")
- var = 0
- else
- var = 1
- end
- fightlog("伤害1=【IF(A六条特殊触发(幸运/卓越一击等),A随机攻击)-(B防御-(PVP防御穿透固定值*(1+PVP防御穿透加成)))/2*IF(A无视防御触发,0,1)】")
- local damage1 = this.getDamage1(actor, paramMap) - math.max(0, (armor - delArmor)) / 2 * var +
- getattrinfo(caster, "hushichuantoufangyu") -- + hushichuantoufangyu
- fightlog("伤害1:" .. damage1)
- --伤害2=伤害1 * A使用技能对应技能系数
- fightlog("伤害2=伤害1 * A使用技能对应技能系数")
-
- local powerRate = tonumber(paramMap.CfgData.powerrate) or 0
- powerRate = powerRate == '' and 0 or (powerRate / 10000)
- local damage2 = damage1 * powerRate
- fightlog("伤害2:" .. damage2)
- --伤害3=伤害2 *(1+A加点伤害加成)
- fightlog("伤害3=伤害2 *(1+A加点伤害加成")
- local addtion = this.GetJiaDianAddition(paramMap)
- local damage3 = damage2 * (1 + addtion)
- fightlog("伤害3:" .. damage3)
- -- 伤害4=伤害3+A使用技能伤害的固定值 fixedDamage
- fightlog("伤害4=伤害3+A使用技能伤害的固定值 fixedDamage")
- local fixedDamage = paramMap.CfgData.fixeddamage or 0
- fixedDamage = fixedDamage == '' and 0 or fixedDamage
- local damage4 = damage3 + fixedDamage
- local finalDamage = damage4
- -- 处于攻城战副本时,范围伤害修改 删除 有需求重新做
- -- A打B最终伤害<保底伤害时,最终伤害=保底伤害=A最大攻击力*可配置系数
- fightlog("A打B最终伤害<保底伤害时,最终伤害=保底伤害=(A最大攻击力+最小攻击力)/2*可配置系数")
- local minDC, maxDC = this.GetDCBySkill(paramMap)
- local factor = tonumber(ConfigDataManager.getTableValue("cfg_global", "value", "id", 7000)) / 10000
- local minDamage = (minDC + maxDC) / 2 * factor
- local originFinalDamage = finalDamage
- if finalDamage < minDamage then
- finalDamage = minDamage
- end
- fightlog("最终伤害:" .. originFinalDamage .. " 保底伤害:" .. minDamage)
- return finalDamage
- end
- -- 元素伤害
- function this.ElementalHurt(paramMap)
- local caster = paramMap.caster
- local target = paramMap.target
- local hurtTypeKey
- -- 圣光
- local shengGuangDamage = 0
- local HolyUnMissRate = getattrinfo(caster, "HolyUnMissRate")
- local HolyResistUnMissRate = getattrinfo(target, "HolyResistUnMissRate")
- local HolyAttack = getattrinfo(caster, "HolyAttack")
- if not this.SelectRate(math.max(0, HolyResistUnMissRate - HolyUnMissRate)) and HolyAttack > 0 then
- local HolyDamageIncreased = getattrinfo(caster, "HolyDamageIncreased")
- local HolyDamageIncreasedBonus = getattrinfo(caster, "HolyDamageIncreasedBonus")
- local HolyDamageReduction = getattrinfo(target, "HolyDamageReduction")
- local HolyDamageReductionBonus = getattrinfo(target, "HolyDamageReductionBonus")
- shengGuangDamage = HolyAttack * (1 + HolyDamageIncreasedBonus - HolyDamageReductionBonus) + HolyDamageIncreased -
- HolyDamageReduction
- shengGuangDamage = math.max(shengGuangDamage, 0)
- if shengGuangDamage > 0 then
- hurtTypeKey = "1"
- else
- hurtTypeKey = "0"
- end
- else
- hurtTypeKey = "0"
- end
- -- info("圣光伤害="..shengGuangDamage)
- -- 黑暗
- local heiAnDamage = 0
- local DarkUnMissRate = getattrinfo(caster, "DarkUnMissRate")
- local DarkResistUnMissRate = getattrinfo(target, "DarkResistUnMissRate")
- local DarkAttack = getattrinfo(caster, "DarkAttack")
- if not this.SelectRate(math.max(0, DarkResistUnMissRate - DarkUnMissRate)) and DarkAttack > 0 then
- local DarkDamageIncreased = getattrinfo(caster, "DarkDamageIncreased")
- local DarkDamageIncreasedBonus = getattrinfo(caster, "DarkDamageIncreasedBonus")
- local DarkDamageReduction = getattrinfo(target, "DarkDamageReduction")
- local DarkDamageReductionBonus = getattrinfo(target, "DarkDamageReductionBonus")
- heiAnDamage = DarkAttack * (1 + DarkDamageIncreasedBonus - DarkDamageReductionBonus) + DarkDamageIncreased -
- DarkDamageReduction
- heiAnDamage = math.max(heiAnDamage, 0)
- if heiAnDamage > 0 then
- hurtTypeKey = hurtTypeKey .. "1"
- else
- hurtTypeKey = hurtTypeKey .. "0"
- end
- else
- hurtTypeKey = hurtTypeKey .. "0"
- end
- -- 雷电
- local leiDianDamage = 0
- local ThunderUnMissRate = getattrinfo(caster, "ThunderUnMissRate")
- local ThunderResistUnMissRate = getattrinfo(target, "ThunderResistUnMissRate")
- local ThunderAttack = getattrinfo(caster, "ThunderAttack")
- if not this.SelectRate(math.max(0, ThunderResistUnMissRate - ThunderUnMissRate)) and ThunderAttack > 0 then
- local ThunderDamageIncreased = getattrinfo(caster, "ThunderDamageIncreased")
- local ThunderDamageIncreasedBonus = getattrinfo(caster, "ThunderDamageIncreasedBonus")
- local ThunderDamageReduction = getattrinfo(target, "ThunderDamageReduction")
- local ThunderDamageReductionBonus = getattrinfo(target, "ThunderDamageReductionBonus")
- leiDianDamage = ThunderAttack * (1 + ThunderDamageIncreasedBonus - ThunderDamageReductionBonus) +
- ThunderDamageIncreased - ThunderDamageReduction
- leiDianDamage = math.max(leiDianDamage, 0)
- if leiDianDamage > 0 then
- hurtTypeKey = hurtTypeKey .. "1"
- else
- hurtTypeKey = hurtTypeKey .. "0"
- end
- else
- hurtTypeKey = hurtTypeKey .. "0"
- end
- -- 风暴
- local fengBaoDmage = 0
- local StormUnMissRate = getattrinfo(caster, "StormUnMissRate")
- local StormResistUnMissRate = getattrinfo(target, "StormResistUnMissRate")
- local StormAttack = getattrinfo(caster, "StormAttack")
- if not this.SelectRate(math.max(0, StormResistUnMissRate - StormUnMissRate)) and StormAttack > 0 then
- local StormDamageIncreased = getattrinfo(caster, "StormDamageIncreased")
- local StormDamageIncreasedBonus = getattrinfo(caster, "StormDamageIncreasedBonus")
- local StormDamageReduction = getattrinfo(target, "StormDamageReduction")
- local StormDamageReductionBonus = getattrinfo(target, "StormDamageReductionBonus")
- fengBaoDmage = StormAttack * (1 + StormDamageIncreasedBonus - StormDamageReductionBonus) + StormDamageIncreased -
- StormDamageReduction
- fengBaoDmage = math.max(fengBaoDmage, 0)
- if fengBaoDmage > 0 then
- hurtTypeKey = hurtTypeKey .. "1"
- else
- hurtTypeKey = hurtTypeKey .. "0"
- end
- else
- hurtTypeKey = hurtTypeKey .. "0"
- end
- local totalDamage = shengGuangDamage + heiAnDamage + leiDianDamage + fengBaoDmage
- totalDamage = math.max(0, totalDamage)
- -- info("元素伤害="..totalDamage)
- -- 伤害类型(飘字)
- local hurtType = PlayerFight.GetElementalHurtType(caster, hurtTypeKey)
- return totalDamage, hurtType
- end
- function this.IsWuShiFangYu(paramMap)
- --A无视防御概率=A无视防御率 *(1 - B无视防御抵抗)
- local caster = paramMap["caster"]
- local target = paramMap["target"]
- local unMissRate = this.getAttValueWithName(caster, "unMissRate")
- local unMissResistanceRate = this.getAttValueWithName(target, "unMissResistanceRate")
- local probability = unMissRate * (1 - unMissResistanceRate)
- local result = this.SelectRate(probability)
- if result then
- local resultType = paramMap[PlayerDefKey.PLAYER_FIGHT_HURT_TYPE]
- resultType[HurtTypeDefKeys.YI_BAN] = "0"
- resultType[HurtTypeDefKeys.WU_SHI] = "1"
- paramMap[PlayerDefKey.PLAYER_FIGHT_HURT_TYPE] = resultType
- -- setplaydef(caster, PlayerDefKey.PLAYER_FIGHT_HURT_TYPE, resultType)
- end
- return result
- end
- function this.IsXingYunYiJi(paramMap)
- --A幸运一击触发概率=A幸运一击概率 *(1 - B幸运一击概率抵抗)
- local caster = paramMap["caster"]
- local target = paramMap["target"]
- local criticalDamageChance = getattrinfo(caster, "criticalDamageChance")
- local criticalDamageResistanceChance = getattrinfo(target, "criticalDamageResistanceChance")
- local probability = criticalDamageChance * (1 - criticalDamageResistanceChance)
- local result = this.SelectRate(probability)
- if result then
- local resultType = paramMap[PlayerDefKey.PLAYER_FIGHT_HURT_TYPE] --getplaydef(caster, PlayerDefKey.PLAYER_FIGHT_HURT_TYPE)
- resultType[HurtTypeDefKeys.YI_BAN] = "0"
- resultType[HurtTypeDefKeys.XING_YUN] = "1"
- paramMap[PlayerDefKey.PLAYER_FIGHT_HURT_TYPE] = resultType
- -- setplaydef(caster, PlayerDefKey.PLAYER_FIGHT_HURT_TYPE, resultType)
- end
- return result
- end
- function this.XingYunDamage(paramMap, damage)
- local caster = paramMap["caster"]
- local target = paramMap["target"]
- fightlog("触发 幸运一击")
- --A幸运攻击=A最大攻击 *(1+A幸运一击伤害加成 - B幸运一击伤害减少)
- local criticalDamageBonus = getattrinfo(caster, "criticalDamageBonus")
- local criticalDamageReducationBonus = getattrinfo(target, "criticalDamageReducationBonus")
- return damage * (1 + criticalDamageBonus - criticalDamageReducationBonus)
- end
- function this.IsZhuoYueYiJi(paramMap)
- --A卓越一击触发概率=A卓越一击概率*(1-B卓越一击概率抵抗)
- local caster = paramMap["caster"]
- local target = paramMap["target"]
- local excellentDamageChance = getattrinfo(caster, "excellentDamageChance")
- local excellentDamageResistanceChance = getattrinfo(target, "excellentDamageResistanceChance")
- local probability = excellentDamageChance * (1 - excellentDamageResistanceChance)
- local result = this.SelectRate(probability)
- if result then
- local resultType = paramMap[PlayerDefKey.PLAYER_FIGHT_HURT_TYPE] -- getplaydef(caster, PlayerDefKey.PLAYER_FIGHT_HURT_TYPE)
- resultType[HurtTypeDefKeys.YI_BAN] = "0"
- resultType[HurtTypeDefKeys.ZHUO_YUE] = "1"
- paramMap[PlayerDefKey.PLAYER_FIGHT_HURT_TYPE] = resultType
- -- setplaydef(caster, PlayerDefKey.PLAYER_FIGHT_HURT_TYPE, resultType)
- end
- return result
- end
- function this.ZhuoYueDamage(paramMap, damage)
- local caster = paramMap["caster"]
- local target = paramMap["target"]
- --A卓越攻击=A随机攻击 * IF(A卓越一击触发,A卓越一击伤害系数,0)*(1+A卓越一击伤害加成 - B卓越一击伤害减少)
- local coefficient
- fightlog("触发 卓越一击")
- coefficient = (tonumber(paramMap.CfgData.excellentrate) or 0) / 10000
- local excellentDamageBonus = getattrinfo(caster, "excellentDamageBonus")
- local excellentDamageReducationBonus = getattrinfo(target, "excellentDamageReducationBonus")
- return damage * coefficient * (1 + excellentDamageBonus - excellentDamageReducationBonus)
- end
- function this.IsShuangBeiYiJi(paramMap)
- --A双倍一击触发概率=A双倍一击概率 *(1 - B双倍一击概率抵抗)
- local caster = paramMap["caster"]
- local target = paramMap["target"]
- local doubleDamageChance = getattrinfo(caster, "doubleDamageChance")
- local doubleDamageResistanceChance = getattrinfo(target, "doubleDamageResistanceChance")
- local probability = doubleDamageChance * (1 - doubleDamageResistanceChance)
- local result = this.SelectRate(probability)
- if result then
- local resultType = paramMap[PlayerDefKey.PLAYER_FIGHT_HURT_TYPE] --getplaydef(caster, PlayerDefKey.PLAYER_FIGHT_HURT_TYPE)
- resultType[HurtTypeDefKeys.YI_BAN] = "0"
- resultType[HurtTypeDefKeys.SHUANG_BEI] = "1"
- paramMap[PlayerDefKey.PLAYER_FIGHT_HURT_TYPE] = resultType
- -- setplaydef(caster, PlayerDefKey.PLAYER_FIGHT_HURT_TYPE, resultType)
- end
- return result
- end
- function this.ShuangBeiYiJi(paramMap, damage)
- local caster = paramMap["caster"]
- local target = paramMap["target"]
- --A双倍攻击=A随机攻击 * IF(A双倍一击触发,1,0)*(1+A双倍一击伤害加成 - B双倍一击伤害减少)
- local coefficient = 1
- local doubleDamageBonus = getattrinfo(caster, "doubleDamageBonus")
- local doubleDamageReducationBonus = getattrinfo(target, "doubleDamageReducationBonus")
- return damage * coefficient * (1 + doubleDamageBonus - doubleDamageReducationBonus)
- end
- function this.IsBaoJi(paramMap)
- --A双倍一击触发概率=A双倍一击概率 *(1 - B双倍一击概率抵抗)
- local caster = paramMap["caster"]
- local target = paramMap["target"]
- local criticalStrikeChance = getattrinfo(caster, "criticalStrikeChance")
- local criticalStrikeResistanceChance = getattrinfo(target, "criticalStrikeResistanceChance")
- local probability = criticalStrikeChance * (1 - criticalStrikeResistanceChance)
- local result = this.SelectRate(probability)
- if result then
- local resultType = paramMap[PlayerDefKey.PLAYER_FIGHT_HURT_TYPE] --getplaydef(caster, PlayerDefKey.PLAYER_FIGHT_HURT_TYPE)
- resultType[HurtTypeDefKeys.YI_BAN] = "0"
- resultType[HurtTypeDefKeys.BAO_JI] = "1"
- paramMap[PlayerDefKey.PLAYER_FIGHT_HURT_TYPE] = resultType
- -- setplaydef(caster, PlayerDefKey.PLAYER_FIGHT_HURT_TYPE, resultType)
- end
- return result
- end
- function this.BaoJi(paramMap, damage)
- local caster = paramMap["caster"]
- local target = paramMap["target"]
- local coefficient = 1
- --A暴击=A随机攻击 * IF(A暴击触发,1,0)*(1+A暴击伤害加成 - B暴击伤害减少)
- local criticalStrikeBonus = getattrinfo(caster, "criticalStrikeBonus")
- local criticalStrikeReducationBonus = getattrinfo(target, "criticalStrikeReducationBonus")
- return damage * coefficient * (1 + criticalStrikeBonus - criticalStrikeReducationBonus)
- end
- function this.IsZhiMingYiJi(paramMap)
- --A致命一击触发概率=A致命一击概率 *(1 - B致命一击概率抵抗)
- local caster = paramMap["caster"]
- local target = paramMap["target"]
- local doubleDamageChance = getattrinfo(caster, "deadlyStrikeChance")
- local doubleDamageResistanceChance = getattrinfo(target, "deadlyStrikeResistanceChance")
- local probability = doubleDamageChance * (1 - doubleDamageResistanceChance)
- local result = this.SelectRate(probability)
- if result then
- local resultType = paramMap[PlayerDefKey.PLAYER_FIGHT_HURT_TYPE] -- getplaydef(caster, PlayerDefKey.PLAYER_FIGHT_HURT_TYPE)
- resultType[HurtTypeDefKeys.YI_BAN] = "0"
- resultType[HurtTypeDefKeys.ZHI_MING] = "1"
- paramMap[PlayerDefKey.PLAYER_FIGHT_HURT_TYPE] = resultType
- -- setplaydef(caster, PlayerDefKey.PLAYER_FIGHT_HURT_TYPE, resultType)
- end
- return result
- end
- function this.ZhiMingYiJi(paramMap, damage)
- local caster = paramMap["caster"]
- local target = paramMap["target"]
- --A致命一击=A随机攻击 * IF(A致命一击触发,1,0)*(1+A致命一击伤害加成 - B致命一击伤害减少)
- local coefficient = 1
- local deadlyStrikeBonus = getattrinfo(caster, "deadlyStrikeBonus")
- local deadlyStrikeReducationBonus = getattrinfo(target, "deadlyStrikeReducationBonus")
- return damage * coefficient * (1 + deadlyStrikeBonus - deadlyStrikeReducationBonus)
- end
- function this.IsSanBeiYiJi(paramMap)
- --A三倍一击触发概率=A三倍一击概率 *(1 - B三倍一击概率抵抗)
- local caster = paramMap["caster"]
- local target = paramMap["target"]
- local doubleDamageChance = getattrinfo(caster, "tripleDamageChance")
- local doubleDamageResistanceChance = getattrinfo(target, "tripleDamageResistanceChance")
- local probability = doubleDamageChance * (1 - doubleDamageResistanceChance)
- local result = this.SelectRate(probability)
- if result then
- local resultType = paramMap[PlayerDefKey.PLAYER_FIGHT_HURT_TYPE] -- getplaydef(caster, PlayerDefKey.PLAYER_FIGHT_HURT_TYPE)
- resultType[HurtTypeDefKeys.YI_BAN] = "0"
- resultType[HurtTypeDefKeys.SAN_BEI] = "1"
- paramMap[PlayerDefKey.PLAYER_FIGHT_HURT_TYPE] = resultType
- -- setplaydef(caster, PlayerDefKey.PLAYER_FIGHT_HURT_TYPE, resultType)
- end
- return result
- end
- function this.SanBeiYiJi(paramMap, damage)
- local caster = paramMap["caster"]
- local target = paramMap["target"]
- --A三倍攻击=A随机攻击 * IF(A三倍一击触发,1,0)*(1+A三倍一击伤害加成 - B三倍一击伤害减少)
- local coefficient = 1
- local tripleDamageReduce = getattrinfo(caster, "tripleDamageReduce")
- local tripleDamageReducationBonus = getattrinfo(target, "tripleDamageReducationBonus")
- return damage * coefficient * (1 + tripleDamageReduce - tripleDamageReducationBonus)
- end
- function this.IfAttackedMutipleMonster(paramMap)
- local caster = paramMap["caster"]
- local target = paramMap["target"]
- local castType = paramMap["castertype"]
- local targetType = paramMap["targettype"]
- if castType ~= 2 or targetType ~= 1 then
- return false
- end
- local monsterId = caster:toString()
- local lastDataList = getplaydef(target, LastAttakedByMonster)
- local nowMillis = getbaseinfo("now")
- if type(lastDataList) ~= "table" then
- setplaydef(target, LastAttakedByMonster, { monsterId, nowMillis })
- return false
- end
- local lastMonsterId = lastDataList[1]
- local lastMillis = lastDataList[2]
- local duration = nowMillis - lastMillis
- if lastMonsterId == monsterId or duration < 1000 then
- setplaydef(target, LastAttakedByMonster, { monsterId, nowMillis })
- return false
- end
- setplaydef(target, LastAttakedByMonster, { monsterId, nowMillis })
- return true
- end
- function this.GetJiaDianAddition(paramMap)
- local caster = paramMap["caster"]
-
- local injuryType = tonumber(paramMap.CfgData.injurytype) or 0
- if injuryType == 1 then
- local addtion = getattrinfo(caster, "PhysicalDamage")
- return addtion
- elseif injuryType == 2 then
- local addtion = getattrinfo(caster, "MagicDamage")
- return addtion
- elseif injuryType == 3 then
- local addtion = getattrinfo(caster, "freeAtt8")
- return addtion
- else
- local maxDC = getattrinfo(caster, "maxDC")
- local maxMC = getattrinfo(caster, "maxMC")
- local maxCurDC = getattrinfo(caster, "maximumCurseAttackPower")
- if maxDC >= maxMC and maxDC >= maxCurDC then
- local addtion = getattrinfo(caster, "PhysicalDamage")
- return addtion
- elseif maxMC >= maxDC and maxMC >= maxCurDC then
- local addtion = getattrinfo(caster, "MagicDamage")
- return addtion
- elseif maxCurDC >= maxDC and maxCurDC >= maxMC then
- local addtion = getattrinfo(caster, "freeAtt8")
- return addtion
- end
- error("不存在的伤害类型" .. injuryType .. "skillId:" .. skillId)
- return 0
- end
- end
- function this.GetDCBySkill(paramMap)
- local caster = paramMap["caster"]
- local injuryType = tonumber(paramMap.CfgData.injurytype)
- if injuryType == 1 then
- local maxDC = getattrinfo(caster, "maxDC")
- local minDC = getattrinfo(caster, "minDC")
- return minDC, maxDC
- elseif injuryType == 2 then
- local maxMC = getattrinfo(caster, "maxMC")
- local minMC = getattrinfo(caster, "minMC")
- return minMC, maxMC
- elseif injuryType == 3 then
- local maxMC = getattrinfo(caster, "maximumCurseAttackPower")
- local minMC = getattrinfo(caster, "minimumCurseAttackPower")
- return minMC, maxMC
- else
- local maxDC = getattrinfo(caster, "maxDC")
- local maxMC = getattrinfo(caster, "maxMC")
- local maxCurDC = getattrinfo(caster, "maximumCurseAttackPower")
- if maxDC >= maxMC and maxDC >= maxCurDC then
- local minDC = getattrinfo(caster, "minDC")
- return minDC, maxDC
- elseif maxMC >= maxDC and maxMC >= maxCurDC then
- local minMC = getattrinfo(caster, "minMC")
- return minMC, maxMC
- elseif maxCurDC >= maxDC and maxCurDC >= maxMC then
- local minCurDC = getattrinfo(caster, "minimumCurseAttackPower")
- return minCurDC, maxCurDC
- end
- return 0, 0
- end
- end
- function this.CanHit(paramMap)
- local caster = paramMap.caster
- local target = paramMap.target
- local hitRate
- local missRate
- if paramMap.castertype == MapObjectType.MONSTER or paramMap.targettype == MapObjectType.MONSTER then
- --pve
- -- 209011 攻击率
- hitRate = this.getAttValueWithName(caster, "hitRate")
- -- 101 PVE攻击率加成
- local pvehitRateBonus = this.getAttValueWithName(caster, "pvehitRateBonus")
- if pvehitRateBonus > 0 then
- hitRate = hitRate * (1 + pvehitRateBonus)
- end
- -- 211011 防御率
- missRate = this.getAttValueWithName(target, "missRate")
- -- -- 103 PVE防御率加成
- -- local missRateBonus = this.getAttValueWithName(target, "missRateBonus")
- -- if missRateBonus > 0 then
- -- missRate = missRate * (1 + missRateBonus)
- -- end
- else
- --pvp
- -- 152/210011 PVP攻击率
- hitRate = this.getAttValueWithName(caster, "pvpattackRate")
- -- 153 PVP攻击率加成
- local attackRateBonus = this.getAttValueWithName(caster, "attackRateBonus")
- if attackRateBonus > 0 then
- hitRate = hitRate * (1 + attackRateBonus)
- end
- -- 154 PVP防御率
- missRate = this.getAttValueWithName(target, "eraRate")
- -- 155 PVP防御率加成
- local eraRateBonus = this.getAttValueWithName(target, "eraRateBonus")
- if eraRateBonus > 0 then
- missRate = missRate * (1 + eraRateBonus)
- end
- end
- local basicMiss = 0 --getattrinfo(target, "freeAtt10")
- local probability
- if hitRate == 0 then
- probability = 0
- else
- probability = 1 - missRate / hitRate
- end
- -- if missRate + hitRate == 0 then
- -- probability = 1
- -- else
- -- probability = 1 - (1 - 1 / ((missRate - hitRate) / (missRate + hitRate) * 0.8 + 1)) - basicMiss
- -- end
- local hit = this.RandomResult(probability)
- fightlog("命中概率:" .. string.numToPercent(probability) .. " 命中结果:" .. tostring(hit))
- return hit
- end
- function this.SelectRate(probability)
- local randomNum = math.random()
- if randomNum <= probability then
- return true
- else
- return false
- end
- end
- function this.CheckPKCanHurt(paramMap)
- -- local caster = paramMap["caster"]
- -- local target = paramMap["target"]
- -- local castType = paramMap["castertype"]
- -- local targetType = paramMap["targettype"]
- -- if castType == 1 and targetType == 1 then
- -- -- PK值判断是否可以造成伤害
- -- local pkValue = tonumber(pk.getpkvalue(caster))
- -- local pkCountTableInfo = ConfigDataManager.getTable("cfg_pk_count", "pvpDamage", 1)
- -- if pkCountTableInfo and #pkCountTableInfo > 0 then
- -- local maxPkValue = 0
- -- for _, v in ipairs(pkCountTableInfo) do
- -- local nameColor = tostring(v["namecolor"])
- -- local split = string.split(nameColor, "#")
- -- local minValue = tonumber(split[1])
- -- local maxValue = tonumber(split[2])
- -- if pkValue >= minValue and pkValue <= maxValue then
- -- -- PK值在此区间内不造成伤害
- -- tipinfo(caster, "pk值较高,无法对玩家造成伤害")
- -- return false
- -- end
- -- maxPkValue = maxPkValue > maxValue and maxPkValue or maxValue
- -- end
- -- if pkValue and pkValue ~= 0 and pkValue > maxPkValue then
- -- tipinfo(caster, "pk值较高,无法对玩家造成伤害")
- -- return false
- -- end
- -- else
- -- error("pkCountTableInfo is null")
- -- end
- -- -- PK值判断end
- -- end
- return true
- end
- function this.CheckBiHuBuff(paramMap)
- local castType = paramMap.castertype
- local targetType = paramMap.targettype
- -- 受击不是玩家,不享受庇护
- if targetType ~= MapObjectType.PLAYER and targetType ~= MapObjectType.PET then
- return false
- end
- -- 攻击不是玩家,不享受庇护
- if castType ~= MapObjectType.PLAYER and castType ~= MapObjectType.PET then
- return false
- end
- -- 不享受庇护buff的地图
- -- local maps = ConfigDataManager.getTableValue("cfg_global", "value", "id", "2000004")
- -- if table.contains(string.split(maps, "#", true), paramMap.mapid) then
- -- return false
- -- end
- -- 不在0~8点,不享受庇护
- local h = TimeUtil.GetTodayHour()
- if h < 23 and h >= 8 then
- return false
- end
- local caster = paramMap.caster
- local target = paramMap.target
- -- local debuffId = ConfigDataManager.getTableValue("cfg_global", "value", "id", "2000003")
- local buffId = 104001 -- tonumber(ConfigDataManager.getTableValue("cfg_global", "value", "id", "260004")) --减少读表消耗
- -- 被击者有庇护buff,享受庇护
- if hasbuff(target, buffId) then
- messagebox(caster, "被击者有庇护buff,享受庇护")
- return true
- end
- -- local delbuff = false
- -- if hasbuff(caster, buffId) then
- -- -- delbuff = true
- -- return true
- -- end
- -- local bossType = ConfigDataManager.getTableValue("cfg_monster", "type", "id", paramMap.monsterid) --减少消耗放前端检测BOSS
- -- if targetType == MapObjectType.MONSTER and tonumber(bossType) == 3 then -- BOSS
- -- delbuff = true
- -- end
- -- if delbuff then
- -- tipinfo(caster, "庇护buff被移除,庇护失效")
- -- Buffer.HandleBiHu(caster, buffId, 1)
- -- end
- return false
- end
- function this.AfterCalcuDamage(paramMap, finalDamage)
- -- 如果攻击的怪物是秘境副本的BOSS则累加记录实时伤害
- local caster = paramMap["caster"]
- local target = paramMap["target"]
- local castType = paramMap["castertype"]
- local targetType = paramMap["targettype"]
- if castType == 1 and targetType == 2 then
- local monsterId = paramMap["monsterid"]
- -- local bossChallenge = ConfigDataManager.getTable("cfg_BOSS_challenge", "monsterType", BossType.SECRET_REALM_BOSS)
- -- for i = 1, #bossChallenge do
- -- if tonumber(monsterId) == tonumber(bossChallenge[i].monsterid) then
- -- -- 存储实时伤害
- -- SecretRealm.savePlayerHurtInfo(caster, target, finalDamage < 0 and 1 or finalDamage)
- -- end
- -- end
- if SecretRealm.isSecretRealmBoss(monsterId) then
- -- 存储实时伤害
- SecretRealm.savePlayerHurtInfo(caster, target, finalDamage < 0 and 1 or finalDamage)
- end
- -- 保存战盟boos造成伤害的玩家
- WarAlliance.savePlayerInvloveInfo(caster, target, finalDamage, monsterId)
- end
- end
- --计算对怪伤害加成 返回 monsterDamageValueAdd,monsterDamageRateAdd 固定值增伤 百分比曾伤
- function PlayerFight.getMonsterDamageAdd(actor, paramMap)
- local caster = paramMap.caster --—— 攻击对象
- local target = paramMap.target --—— 受击对象
- local castertype = getbaseinfo(caster, "mapobjecttype")
- local targettype = getbaseinfo(target, "mapobjecttype")
- local monsterDamageValueAdd = 0 --增伤固定值
- local monsterDamageRateAdd = 0 --增伤万分比(小数)
- if castertype ~= MapObjectType.PLAYER and castertype ~= MapObjectType.PET then
- fightlog("-----------------------攻击方对象不是玩家-----------------------")
- return monsterDamageValueAdd, monsterDamageRateAdd
- end
- if targettype ~= MapObjectType.MONSTER then
- fightlog("-----------------------受击对象不是怪物-----------------------")
- return monsterDamageValueAdd, monsterDamageRateAdd
- end
- local logText = "" --伤害日志
- local monsterInfo = getmonsterinfo(target)
- local monsterId = monsterInfo.cfgid
- --monsterType =1 小怪 2=黄金怪 3=boss 4=超级BOSS
- local monsterType = ConfigDataManager.getTableValue("cfg_monster", "type", "id", monsterId)
- if string.isNullOrEmpty(monsterType) then
- monsterType = "1"
- end
- monsterType = tonumber(monsterType)
- logText = logText .. "-----------------------攻击怪物-----------------------------"
- local pveshanghaizengjiaValue = getattrinfo(caster, "pveshanghaizengjiaValue") or 0
- if pveshanghaizengjiaValue > 0 then
- monsterDamageValueAdd = monsterDamageValueAdd + pveshanghaizengjiaValue
- logText = logText .. string.joinVar("104 pve伤害增加", math.floor(pveshanghaizengjiaValue))
- end
- local pveshanghaijiachengRate = getattrinfo(caster, "pveshanghaijiachengRate") or 0
- if pveshanghaijiachengRate > 0 then
- monsterDamageRateAdd = monsterDamageRateAdd + pveshanghaijiachengRate
- logText = logText .. string.joinVar("105 pve伤害加成", math.floor(pveshanghaijiachengRate))
- end
- if monsterType == 1 then
- local duixiaoguaishanghaizengjiaValue = getattrinfo(caster, "duixiaoguaishanghaizengjiaValue") or 0
- if duixiaoguaishanghaizengjiaValue > 0 then
- monsterDamageValueAdd = monsterDamageValueAdd + duixiaoguaishanghaizengjiaValue
- logText = logText .. string.joinVar("110 对小怪伤害增加", math.floor(duixiaoguaishanghaizengjiaValue))
- end
- local duixiaoguaishanghaijiachengRate = getattrinfo(caster, "duixiaoguaishanghaijiachengRate") or 0
- if duixiaoguaishanghaijiachengRate > 0 then
- monsterDamageRateAdd = monsterDamageRateAdd + duixiaoguaishanghaijiachengRate
- logText = logText .. string.joinVar("111 对小怪伤害加成", math.floor(duixiaoguaishanghaijiachengRate))
- end
- elseif monsterType == 2 then
- local duihuangjinguaishanghaizengjiaValue = getattrinfo(caster, "duihuangjinguaishanghaizengjiaValue") or 0
- if duihuangjinguaishanghaizengjiaValue > 0 then
- monsterDamageValueAdd = monsterDamageValueAdd + duihuangjinguaishanghaizengjiaValue
- logText = logText .. string.joinVar("114 对黄金怪伤害增加", math.floor(duihuangjinguaishanghaizengjiaValue))
- end
- local duihuangjinguaishanghaijiachengRate = getattrinfo(caster, "duihuangjinguaishanghaijiachengRate") or 0
- if duihuangjinguaishanghaijiachengRate > 0 then
- monsterDamageRateAdd = monsterDamageRateAdd + duihuangjinguaishanghaijiachengRate
- logText = logText .. string.joinVar("115 对黄金怪伤害加成", math.floor(duihuangjinguaishanghaijiachengRate))
- end
- elseif monsterType == 3 then
- local duibossshanghaizengjiaValue = getattrinfo(caster, "duibossshanghaizengjiaValue")
- if duibossshanghaizengjiaValue > 0 then
- monsterDamageValueAdd = monsterDamageValueAdd + duibossshanghaizengjiaValue
- logText = logText .. string.joinVar("118 对BOSS伤害增加", math.floor(duibossshanghaizengjiaValue))
- end
- local duibossshanghaijiachengRate = getattrinfo(caster, "duibossshanghaijiachengRate")
- if duibossshanghaijiachengRate > 0 then
- monsterDamageRateAdd = monsterDamageRateAdd + duibossshanghaijiachengRate
- logText = logText .. string.joinVar("119 对BOSS伤害加成", math.floor(duibossshanghaijiachengRate))
- end
- elseif monsterType == 4 then
- local duichaojibossshanghaizengjiaValue = getattrinfo(caster, "duichaojibossshanghaizengjiaValue")
- if duichaojibossshanghaizengjiaValue > 0 then
- monsterDamageValueAdd = monsterDamageValueAdd + duichaojibossshanghaizengjiaValue
- logText = logText .. string.joinVar("122 对超级BOSS伤害增加", math.floor(duichaojibossshanghaizengjiaValue))
- end
- local duichaojibossshanghaijiachengRate = getattrinfo(caster, "duichaojibossshanghaijiachengRate")
- if duichaojibossshanghaijiachengRate > 0 then
- monsterDamageRateAdd = monsterDamageRateAdd + duichaojibossshanghaijiachengRate
- logText = logText .. string.joinVar("123 对超级BOSS伤害加成", math.floor(duichaojibossshanghaijiachengRate))
- end
- end
- fightlog(
- logText ..
- string.joinVar("对怪伤害最终固定值", math.floor(monsterDamageValueAdd)) ..
- string.joinVar("对怪伤害最终万分比", math.floor(monsterDamageRateAdd))
- )
- return monsterDamageValueAdd, monsterDamageRateAdd
- end
- --计算对怪伤害减免 返回 monsterDamageValueDel,monsterDamageRateDel 固定值减伤 百分比减伤
- function PlayerFight.getMonsterDamageDel(actor, paramMap)
- local caster = paramMap.caster --—— 攻击对象
- local target = paramMap.target --—— 受击对象
- local castertype = getbaseinfo(caster, "mapobjecttype")
- local targettype = getbaseinfo(target, "mapobjecttype")
- local monsterDamageValueDel = 0 --减伤固定值
- local monsterDamageRateDel = 0 --减伤万分比(小数)
- local logText = ""
- if castertype ~= MapObjectType.MONSTER then
- fightlog("-----------------------攻击方对象不是怪物-----------------------")
- return monsterDamageValueDel, monsterDamageRateDel
- end
- if targettype ~= MapObjectType.PLAYER and targettype ~= MapObjectType.PET then
- fightlog("-----------------------受击方对象不是玩家-----------------------")
- return monsterDamageValueDel, monsterDamageRateDel
- end
- logText = logText .. "-----------------------被怪物攻击-----------------------------"
- local monsterInfo = getmonsterinfo(caster)
- local monsterId = monsterInfo.cfgid
- --monsterType =1 小怪 2=黄金怪 3=boss 4=超级BOSS
- local monsterType = ConfigDataManager.getTableValue("cfg_monster", "type", "id", monsterId)
- if string.isNullOrEmpty(monsterType) then
- monsterType = "1"
- end
- monsterType = tonumber(monsterType)
- local pveshanghaijianshaoValue = getattrinfo(target, "pveshanghaijianshaoValue") or 0
- if pveshanghaijianshaoValue > 0 then
- monsterDamageValueDel = monsterDamageValueDel + pveshanghaijianshaoValue
- logText = logText .. string.joinVar("106 pve伤害减少", math.floor(pveshanghaijianshaoValue))
- end
- -- 107 pve伤害减免 PVE伤害减免万分比 pveshanghaijianmianRate
- local pveshanghaijianmianRate = getattrinfo(target, "pveshanghaijianmianRate") or 0
- if pveshanghaijianmianRate > 0 then
- monsterDamageRateDel = monsterDamageRateDel + pveshanghaijianmianRate
- logText = logText .. string.joinVar("107 pve伤害减免", math.floor(pveshanghaijianmianRate))
- end
- if monsterType == 1 then
- local xiaoguaishanghaijianshaoValue = getattrinfo(target, "xiaoguaishanghaijianshaoValue")
- if xiaoguaishanghaijianshaoValue > 0 then
- monsterDamageValueDel = monsterDamageValueDel + xiaoguaishanghaijianshaoValue
- logText = logText .. string.joinVar("112 小怪伤害减少", math.floor(xiaoguaishanghaijianshaoValue))
- end
- local xiaoguaishanghaijianmianRate = getattrinfo(target, "xiaoguaishanghaijianmianRate")
- if xiaoguaishanghaijianmianRate > 0 then
- monsterDamageRateDel = xiaoguaishanghaijianmianRate
- logText = logText .. string.joinVar("113 小怪伤害减免", math.floor(xiaoguaishanghaijianmianRate))
- end
- elseif monsterType == 2 then
- local huangjinguaishanghaijianshaoValue = getattrinfo(target, "huangjinguaishanghaijianshaoValue")
- if huangjinguaishanghaijianshaoValue > 0 then
- monsterDamageValueDel = monsterDamageValueDel + huangjinguaishanghaijianshaoValue
- logText = logText .. string.joinVar("116 黄金怪伤害减少", math.floor(huangjinguaishanghaijianshaoValue))
- end
- local huangjinguaishanghaijianmianRate = getattrinfo(target, "huangjinguaishanghaijianmianRate")
- if huangjinguaishanghaijianmianRate > 0 then
- monsterDamageRateDel = huangjinguaishanghaijianmianRate
- logText = logText .. string.joinVar("117 黄金怪伤害减免", math.floor(huangjinguaishanghaijianmianRate))
- end
- elseif monsterType == 3 then
- local bossshanghaijianshaoValue = getattrinfo(target, "bossshanghaijianshaoValue")
- if bossshanghaijianshaoValue > 0 then
- monsterDamageValueDel = monsterDamageValueDel + bossshanghaijianshaoValue
- logText = logText .. string.joinVar("120 BOSS伤害减少", math.floor(bossshanghaijianshaoValue))
- end
- local bossshanghaijianmianRate = getattrinfo(target, "bossshanghaijianmianRate")
- if bossshanghaijianmianRate > 0 then
- monsterDamageRateDel = bossshanghaijianmianRate
- logText = logText .. string.joinVar("121 BOSS伤害减免", math.floor(bossshanghaijianmianRate))
- end
- elseif monsterType == 4 then
- local chaojibossshanghaijianshaoValue = getattrinfo(target, "chaojibossshanghaijianshaoValue")
- if chaojibossshanghaijianshaoValue > 0 then
- monsterDamageValueDel = monsterDamageValueDel + chaojibossshanghaijianshaoValue
- logText = logText .. string.joinVar("124 超级BOSS伤害减少", math.floor(chaojibossshanghaijianshaoValue))
- end
- local chaojibossshanghaijianmianRate = getattrinfo(target, "chaojibossshanghaijianmianRate")
- if chaojibossshanghaijianmianRate > 0 then
- monsterDamageRateDel = chaojibossshanghaijianmianRate
- logText = logText .. string.joinVar("125 超级BOSS伤害减免", math.floor(chaojibossshanghaijianmianRate))
- end
- end
- fightlog(
- logText ..
- string.joinVar("受怪减免最终固定值", math.floor(monsterDamageValueDel)) ..
- string.joinVar("受怪减免最终百分比", math.floor(monsterDamageRateDel))
- )
- return monsterDamageValueDel, monsterDamageRateDel
- end
- --计算PVP伤害 返回 PVPDamageValue,PVPDamageRate PVP固定值总加成-总减免 PVP百分比总加成-总减免
- function PlayerFight.getPVPDamage(actor, paramMap)
- local caster = paramMap.caster --—— 攻击对象
- local target = paramMap.target --—— 受击对象
- local castertype = getbaseinfo(caster, "mapobjecttype")
- local targettype = getbaseinfo(target, "mapobjecttype")
- local PVPDamageValue = 0 --A PVP固定值总加成-B总减免
- local PVPDamageRate = 0 --A PVP百分比总加成-B总减免
- if castertype ~= MapObjectType.PLAYER and castertype ~= MapObjectType.PET then
- fightlog("----------------PVP-------攻击方对象不是玩家-----------------------")
- return PVPDamageValue, PVPDamageRate
- end
- if targettype ~= MapObjectType.PLAYER then
- fightlog("----------------PVP-------受击对象不是玩家-----------------------")
- return PVPDamageValue, PVPDamageRate
- end
- -- 对固定职业的加减伤
- local tab = {
- [1] = {
- add = "duijianshishanghaizengjiaValue",
- del = "duijianshishanghaijianshaoValue",
- addRate = "duijianshishanghaijiachengRate",
- delRate = "duijianshishanghaijianmianRate"
- },
- [2] = {
- add = "duifashishanghaizengjiaValue",
- del = "duifashishanghaijianshaoValue",
- addRate = "duifashishanghaijiachengRate",
- delRate = "duifashishanghaijianmianRate"
- },
- [3] = {
- add = "duigongjianshoushanghaizengjiaValue",
- del = "duigongjianshoushanghaijianshaoValue",
- addRate = "duigongjianshoushanghaijiachengRate",
- delRate = "duigongjianshoushanghaijianmianRate"
- },
- [4] = {
- add = "duimojianshishanghaizengjiaValue",
- del = "duimojianshishanghaijianshaoValue",
- addRate = "duimojianshishanghaijiachengRate",
- delRate = "duimojianshishanghaijianmianRate"
- },
- [5] = {
- add = "duishengdaoshishanghaizengjiaValue",
- del = "duishengdaoshishanghaijianshaoValue",
- addRate = "duishengdaoshishanghaijiachengRate",
- delRate = "duishengdaoshishanghaijianmianRate"
- },
- [6] = {
- add = "duizhaohuanshishanghaizengjiaValue",
- del = "duizhaohuanshishanghaijianshaoValue",
- addRate = "duizhaohuanshishanghaijiachengRate",
- delRate = "duizhaohuanshishanghaijianmianRate"
- }
- }
- local casterCareer = getbaseinfo(caster, "getbasecareer")
- local targerCareer = getbaseinfo(target, "getbasecareer")
- local del = getattrinfo(target, tab[casterCareer].del) or 0
- local delRate = getattrinfo(target, tab[casterCareer].delRate) or 0
- local add = getattrinfo(caster, tab[targerCareer].add) or 0
- local addRate = getattrinfo(caster, tab[targerCareer].addRate) or 0
- PVPDamageValue = PVPDamageValue + math.max(0, add - del)
- PVPDamageRate = PVPDamageRate + math.max(0, addRate - delRate)
- -- 156 pvp伤害增加
- -- 158 pvp伤害减少
- local pvpDamageAdd = getattrinfo(caster, "pvpDamageAdd") or 0
- local pvpDamageReduce = getattrinfo(target, "pvpDamageReduce") or 0
- PVPDamageValue = PVPDamageValue + math.max(0, pvpDamageAdd - pvpDamageReduce)
- -- 157 PVP伤害加成 计算伤害3 damageBonus
- -- 159 PVP伤害减免 计算伤害3 damageReductionBonus
- local damageBonus = getattrinfo(caster, "damageBonus") or 0
- local damageReductionBonus = getattrinfo(target, "damageReductionBonus") or 0
- PVPDamageRate = PVPDamageRate + math.max(0, damageBonus - damageReductionBonus)
- -- 161 PVP出血伤害固定值
- -- 162 PVP出血伤害抵抗固定值
- local pvpBleedDamageAdd = getattrinfo(caster, "pvpBleedDamageAdd") or 0
- local pvpBleedDamageReduce = getattrinfo(target, "pvpBleedDamageReduce") or 0
- PVPDamageValue = PVPDamageValue + math.max(0, pvpBleedDamageAdd - pvpBleedDamageReduce)
- return PVPDamageValue, PVPDamageRate
- end
- --计算技能伤害 返回 SkillDamageValue,SkillDamageRate 技能固定值总加成-总减免 技能百分比总加成-总减免
- function PlayerFight.getSkillDamage(actor, paramMap)
- local caster = paramMap.caster --—— 攻击对象
- local target = paramMap.target --—— 受击对象
- local castertype = getbaseinfo(caster, "mapobjecttype")
- local targettype = getbaseinfo(target, "mapobjecttype")
- local SkillDamageValue = 0 --A 技能固定值总加成-B总减免
- local SkillDamageRate = 0 --A 技能百分比总加成-B总减免
- if castertype == MapObjectType.PLAYER and targettype == MapObjectType.PLAYER then
- --描述:
- --type 1:need无效 2:need=职业 3:need=技能名称
- --pct 1=计算百分比 0=计算固定值
- --add=增加伤害的属性英文名 del 降低伤害的属性英文名
- local tab = {
- -- 500 技能伤害增加 技能伤害绝对值 jinengshanghaizengjiaValue
- -- 502 技能伤害减少 被技能伤害减少绝对值 jinengshanghaijianshaoValue
- { add = "jinengshanghaizengjiaValue", del = "jinengshanghaijianshaoValue", type = 1, need = "", pct = 0 },
- -- 501 技能伤害加成 技能伤害万分比 jinengshanghaijiachengRate
- -- 503 技能伤害减免 被技能伤害减免万分比 jinengshanghaijianmianRate
- { add = "jinengshanghaijiachengRate", del = "jinengshanghaijianmianRate", type = 1, need = "", pct = 1 },
- -- 504 剑士技能伤害增加 剑士技能伤害绝对值 jianshijinengshanghaizengjiaValue
- -- 506 剑士技能伤害减少 被剑士技能伤害减少绝对值 jianshijinengshanghaijianshaoValue
- { add = "jianshijinengshanghaizengjiaValue", del = "jianshijinengshanghaijianshaoValue", type = 2, need = 1, pct = 0 },
- -- 508 法师技能伤害增加 法师技能伤害绝对值 fashijinengshanghaizengjiaValue
- -- 510 法师技能伤害减少 被法师技能伤害减少绝对值 fashijinengshanghaijianshaoValue
- { add = "fashijinengshanghaizengjiaValue", del = "fashijinengshanghaijianshaoValue", type = 2, need = 2, pct = 0 },
- -- 512 弓箭手技能伤害增加 弓箭手技能伤害绝对值 gongjianshoujinengshanghaizengjiaValue
- -- 514 弓箭手技能伤害减少 被弓箭手技能伤害减少绝对值 gongjianshoujinengshanghaijianshaoValue
- { add = "gongjianshoujinengshanghaizengjiaValue", del = "gongjianshoujinengshanghaijianshaoValue", type = 2, need = 3, pct = 0 },
- -- 516 魔剑士技能伤害增加 魔剑士技能伤害绝对值 mojianshijinengshanghaizengjiaValue
- -- 518 魔剑士技能伤害减少 被魔剑士技能伤害减少绝对值 mojianshijinengshanghaijianshaoValue
- { add = "mojianshijinengshanghaizengjiaValue", del = "mojianshijinengshanghaijianshaoValue", type = 2, need = 4, pct = 0 },
- -- 520 召唤师技能伤害增加 召唤师技能伤害绝对值 zhaohuanshijinengshanghaizengjiaValue
- -- 522 召唤师技能伤害减少 被召唤师技能伤害减少绝对值 zhaohuanshijinengshanghaijianshaoValue
- { add = "zhaohuanshijinengshanghaizengjiaValue", del = "zhaohuanshijinengshanghaijianshaoValue", type = 2, need = 5, pct = 0 },
- -- 524 圣导师技能伤害增加 圣导师技能伤害绝对值 shengdaoshijinengshanghaizengjiaValue
- -- 526 圣导师技能伤害减少 被圣导师技能伤害减少绝对值 shengdaoshijinengshanghaijianshaoValue
- { add = "shengdaoshijinengshanghaizengjiaValue", del = "shengdaoshijinengshanghaijianshaoValue", type = 2, need = 6, pct = 0 },
- -- 505 剑士技能伤害加成 剑士技能伤害万分比 jianshijinengshanghaijiachengRate
- -- 507 剑士技能伤害减免 被剑士技能伤害减免万分比 jianshijinengshanghaijianmianRate
- { add = "jianshijinengshanghaijiachengRate", del = "jianshijinengshanghaijianmianRate", type = 2, need = 1, pct = 1 },
- -- 509 法师技能伤害加成 法师技能伤害万分比 fashijinengshanghaijiachengRate
- -- 511 法师技能伤害减免 被法师技能伤害减免万分比 fashijinengshanghaijianmianRate
- { add = "fashijinengshanghaijiachengRate", del = "fashijinengshanghaijianmianRate", type = 2, need = 2, pct = 1 },
- -- 513 弓箭手技能伤害加成 弓箭手技能伤害万分比 gongjianshoujinengshanghaijiachengRate
- -- 515 弓箭手技能伤害减免 被弓箭手技能伤害减免万分比 gongjianshoujinengshanghaijianmianRate
- { add = "gongjianshoujinengshanghaijiachengRate", del = "gongjianshoujinengshanghaijianmianRate", type = 2, need = 3, pct = 1 },
- -- 517 魔剑士技能伤害加成 魔剑士技能伤害万分比 mojianshijinengshanghaijiachengRate
- -- 519 魔剑士技能伤害减免 被魔剑士技能伤害减免万分比 mojianshijinengshanghaijianmianRate
- { add = "mojianshijinengshanghaijiachengRate", del = "mojianshijinengshanghaijianmianRate", type = 2, need = 4, pct = 1 },
- -- 521 召唤师技能伤害加成 召唤师技能伤害万分比 zhaohuanshijinengshanghaijiachengRate
- -- 523 召唤师技能伤害减免 被召唤师技能伤害减免万分比 zhaohuanshijinengshanghaijianmianRate
- { add = "zhaohuanshijinengshanghaijiachengRate", del = "zhaohuanshijinengshanghaijianmianRate", type = 2, need = 5, pct = 1 },
- -- 525 圣导师技能伤害加成 圣导师技能伤害万分比 shengdaoshijinengshanghaijiachengRate
- -- 527 圣导师技能伤害减免 被圣导师技能伤害减免万分比 shengdaoshijinengshanghaijianmianRate
- { add = "shengdaoshijinengshanghaijiachengRate", del = "shengdaoshijinengshanghaijianmianRate", type = 2, need = 6, pct = 1 },
- -- 528 升龙击伤害增加 升龙击伤害绝对值 shenglongjishanghaizengjiaValue
- -- 530 升龙击伤害减少 被升龙击伤害减少绝对值 shenglongjishanghaijianshaoValue
- { add = "shenglongjishanghaizengjiaValue", del = "shenglongjishanghaijianshaoValue", type = 3, need = "升龙击", pct = 0 },
- -- 529 升龙击伤害加成 升龙击伤害万分比 shenglongjishanghaijiachengRate
- -- 531 升龙击伤害减免 被升龙击伤害减免万分比 shenglongjishanghaijianmianRate
- { add = "shenglongjishanghaijiachengRate", del = "shenglongjishanghaijianmianRate", type = 3, need = "升龙击", pct = 1 },
- -- 532 地裂斩伤害增加 地裂斩伤害绝对值 diliezhanshanghaizengjiaValue
- -- 534 地裂斩伤害减少 被地裂斩伤害减少绝对值 diliezhanshanghaijianshaoValue
- { add = "diliezhanshanghaizengjiaValue", del = "diliezhanshanghaijianshaoValue", type = 3, need = "地裂斩", pct = 0 },
- -- 533 地裂斩伤害加成 地裂斩伤害万分比 diliezhanshanghaijiachengRate
- -- 535 地裂斩伤害减免 被地裂斩伤害减免万分比 diliezhanshanghaijianmianRate
- { add = "diliezhanshanghaijiachengRate", del = "diliezhanshanghaijianmianRate", type = 3, need = "地裂斩", pct = 1 },
- -- 536 旋风斩伤害增加 旋风斩伤害绝对值 xuanfengzhanshanghaizengjiaValue
- -- 538 旋风斩伤害减少 被旋风斩伤害减少绝对值 xuanfengzhanshanghaijianshaoValue
- { add = "xuanfengzhanshanghaizengjiaValue", del = "xuanfengzhanshanghaijianshaoValue", type = 3, need = "旋风斩", pct = 0 },
- -- 537 旋风斩伤害加成 旋风斩伤害万分比 xuanfengzhanshanghaijiachengRate
- -- 539 旋风斩伤害减免 被旋风斩伤害减免万分比 xuanfengzhanshanghaijianmianRate
- { add = "xuanfengzhanshanghaijiachengRate", del = "xuanfengzhanshanghaijianmianRate", type = 3, need = "旋风斩", pct = 1 },
- -- 540 牙突刺伤害增加 牙突刺伤害绝对值 yatucishanghaizengjiaValue
- -- 542 牙突刺伤害减少 被牙突刺伤害减少绝对值 yatucishanghaijianshaoValue
- { add = "yatucishanghaizengjiaValue", del = "yatucishanghaijianshaoValue", type = 3, need = "牙突刺", pct = 0 },
- -- 541 牙突刺伤害加成 牙突刺伤害万分比 yatucishanghaijiachengRate
- -- 543 牙突刺伤害减免 被牙突刺伤害减免万分比 yatucishanghaijianmianRate
- { add = "yatucishanghaijiachengRate", del = "yatucishanghaijianmianRate", type = 3, need = "牙突刺", pct = 1 },
- -- 544 天地十字剑伤害增加 天地十字剑伤害绝对值 tiandishizijianshanghaizengjiaValue
- -- 546 天地十字剑伤害减少 被天地十字剑伤害减少绝对值 tiandishizijianshanghaijianshaoValue
- { add = "tiandishizijianshanghaizengjiaValue", del = "tiandishizijianshanghaijianshaoValue", type = 3, need = "天地十字剑", pct = 0 },
- -- 545 天地十字剑伤害加成 天地十字剑伤害万分比 tiandishizijianshanghaijiachengRate
- -- 547 天地十字剑伤害减免 被天地十字剑伤害减免万分比 tiandishizijianshanghaijianmianRate
- { add = "tiandishizijianshanghaijiachengRate", del = "tiandishizijianshanghaijianmianRate", type = 3, need = "天地十字剑", pct = 1 },
- -- 548 霹雳回旋斩伤害增加 霹雳回旋斩伤害绝对值 pilihuixuanzhanshanghaizengjiaValue
- -- 550 霹雳回旋斩伤害减少 被霹雳回旋斩伤害减少绝对值 pilihuixuanzhanshanghaijianshaoValue
- { add = "pilihuixuanzhanshanghaizengjiaValue", del = "pilihuixuanzhanshanghaijianshaoValue", type = 3, need = "霹雳回旋斩", pct = 0 },
- -- 549 霹雳回旋斩伤害加成 霹雳回旋斩伤害万分比 pilihuixuanzhanshanghaijiachengRate
- -- 551 霹雳回旋斩伤害减免 被霹雳回旋斩伤害减免万分比 pilihuixuanzhanshanghaijianmianRate
- { add = "pilihuixuanzhanshanghaijiachengRate", del = "pilihuixuanzhanshanghaijianmianRate", type = 3, need = "霹雳回旋斩", pct = 1 },
- -- 552 袭风刺伤害增加 袭风刺伤害绝对值 xifengcishanghaizengjiaValue
- -- 554 袭风刺伤害减少 被袭风刺伤害减少绝对值 xifengcishanghaijianshaoValue
- { add = "xifengcishanghaizengjiaValue", del = "xifengcishanghaijianshaoValue", type = 3, need = "袭风刺", pct = 0 },
- -- 553 袭风刺伤害加成 袭风刺伤害万分比 xifengcishanghaijiachengRate
- -- 555 袭风刺伤害减免 被袭风刺伤害减免万分比 xifengcishanghaijianmianRate
- { add = "xifengcishanghaijiachengRate", del = "xifengcishanghaijianmianRate", type = 3, need = "袭风刺", pct = 1 },
- -- 556 雷霆裂闪伤害增加 雷霆裂闪伤害绝对值 leitinglieshanshanghaizengjiaValue
- -- 558 雷霆裂闪伤害减少 被雷霆裂闪伤害减少绝对值 leitinglieshanshanghaijianshaoValue
- { add = "leitinglieshanshanghaizengjiaValue", del = "leitinglieshanshanghaijianshaoValue", type = 3, need = "雷霆裂闪", pct = 0 },
- -- 557 雷霆裂闪伤害加成 雷霆裂闪伤害万分比 leitinglieshanshanghaijiachengRate
- -- 559 雷霆裂闪伤害减免 被雷霆裂闪伤害减免万分比 leitinglieshanshanghaijianmianRate
- { add = "leitinglieshanshanghaijiachengRate", del = "leitinglieshanshanghaijianmianRate", type = 3, need = "雷霆裂闪", pct = 1 },
- -- 560 致命一击伤害增加 致命一击伤害绝对值 zhimingyijishanghaizengjiaValue
- -- 562 致命一击伤害减少 被致命一击伤害减少绝对值 zhimingyijishanghaijianshaoValue
- { add = "zhimingyijishanghaizengjiaValue", del = "zhimingyijishanghaijianshaoValue", type = 3, need = "致命一击", pct = 0 },
- -- 561 致命一击伤害加成 致命一击伤害万分比 zhimingyijishanghaijiachengRate
- -- 563 致命一击伤害减免 被致命一击伤害减免万分比 zhimingyijishanghaijianmianRate
- { add = "zhimingyijishanghaijiachengRate", del = "zhimingyijishanghaijianmianRate", type = 3, need = "致命一击", pct = 1 },
- -- 564 山崩地裂伤害增加 山崩地裂伤害绝对值 shanbengdilieshanghaizengjiaValue
- -- 566 山崩地裂伤害减少 被山崩地裂伤害减少绝对值 shanbengdilieshanghaijianshaoValue
- { add = "shanbengdilieshanghaizengjiaValue", del = "shanbengdilieshanghaijianshaoValue", type = 3, need = "山崩地裂", pct = 0 },
- -- 565 山崩地裂伤害加成 山崩地裂伤害万分比 shanbengdilieshanghaijiachengRate
- -- 567 山崩地裂伤害减免 被山崩地裂伤害减免万分比 shanbengdilieshanghaijianmianRate
- { add = "shanbengdilieshanghaijiachengRate", del = "shanbengdilieshanghaijianmianRate", type = 3, need = "山崩地裂", pct = 1 },
- -- 568 能量球伤害增加 能量球伤害绝对值 nengliangqiushanghaizengjiaValue
- -- 570 能量球伤害减少 被能量球伤害减少绝对值 nengliangqiushanghaijianshaoValue
- { add = "nengliangqiushanghaizengjiaValue", del = "nengliangqiushanghaijianshaoValue", type = 3, need = "能量球", pct = 0 },
- -- 569 能量球伤害加成 能量球伤害万分比 nengliangqiushanghaijiachengRate
- -- 571 能量球伤害减免 被能量球伤害减免万分比 nengliangqiushanghaijianmianRate
- { add = "nengliangqiushanghaijiachengRate", del = "nengliangqiushanghaijianmianRate", type = 3, need = "能量球", pct = 1 },
- -- 572 火球伤害增加 火球伤害绝对值 huoqiushanghaizengjiaValue
- -- 574 火球伤害减少 被火球伤害减少绝对值 huoqiushanghaijianshaoValue
- { add = "huoqiushanghaizengjiaValue", del = "huoqiushanghaijianshaoValue", type = 3, need = "火球", pct = 0 },
- -- 573 火球伤害加成 火球伤害万分比 huoqiushanghaijiachengRate
- -- 575 火球伤害减免 被火球伤害减免万分比 huoqiushanghaijianmianRate
- { add = "huoqiushanghaijiachengRate", del = "huoqiushanghaijianmianRate", type = 3, need = "火球", pct = 1 },
- -- 576 真空波伤害增加 真空波伤害绝对值 zhenkongboshanghaizengjiaValue
- -- 578 真空波伤害减少 被真空波伤害减少绝对值 zhenkongboshanghaijianshaoValue
- { add = "zhenkongboshanghaizengjiaValue", del = "zhenkongboshanghaijianshaoValue", type = 3, need = "真空波", pct = 0 },
- -- 577 真空波伤害加成 真空波伤害万分比 zhenkongboshanghaijiachengRate
- -- 579 真空波伤害减免 被真空波伤害减免万分比 zhenkongboshanghaijianmianRate
- { add = "zhenkongboshanghaijiachengRate", del = "zhenkongboshanghaijianmianRate", type = 3, need = "真空波", pct = 1 },
- -- 580 掌心雷伤害增加 掌心雷伤害绝对值 zhangxinleishanghaizengjiaValue
- -- 582 掌心雷伤害减少 被掌心雷伤害减少绝对值 zhangxinleishanghaijianshaoValue
- { add = "zhangxinleishanghaizengjiaValue", del = "zhangxinleishanghaijianshaoValue", type = 3, need = "掌心雷", pct = 0 },
- -- 581 掌心雷伤害加成 掌心雷伤害万分比 zhangxinleishanghaijiachengRate
- -- 583 掌心雷伤害减免 被掌心雷伤害减免万分比 zhangxinleishanghaijianmianRate
- { add = "zhangxinleishanghaijiachengRate", del = "zhangxinleishanghaijianmianRate", type = 3, need = "掌心雷", pct = 1 },
- -- 584 龙卷风伤害增加 龙卷风伤害绝对值 longjuanfengshanghaizengjiaValue
- -- 586 龙卷风伤害减少 被龙卷风伤害减少绝对值 longjuanfengshanghaijianshaoValue
- { add = "longjuanfengshanghaizengjiaValue", del = "longjuanfengshanghaijianshaoValue", type = 3, need = "龙卷风", pct = 0 },
- -- 585 龙卷风伤害加成 龙卷风伤害万分比 longjuanfengshanghaijiachengRate
- -- 587 龙卷风伤害减免 被龙卷风伤害减免万分比 longjuanfengshanghaijianmianRate
- { add = "longjuanfengshanghaijiachengRate", del = "longjuanfengshanghaijianmianRate", type = 3, need = "龙卷风", pct = 1 },
- -- 588 陨石伤害增加 陨石伤害绝对值 yunshishanghaizengjiaValue
- -- 590 陨石伤害减少 被陨石伤害减少绝对值 yunshishanghaijianshaoValue
- { add = "yunshishanghaizengjiaValue", del = "yunshishanghaijianshaoValue", type = 3, need = "陨石", pct = 0 },
- -- 589 陨石伤害加成 陨石伤害万分比 yunshishanghaijiachengRate
- -- 591 陨石伤害减免 被陨石伤害减免万分比 yunshishanghaijianmianRate
- { add = "yunshishanghaijiachengRate", del = "yunshishanghaijianmianRate", type = 3, need = "陨石", pct = 1 },
- -- 592 火龙伤害增加 火龙伤害绝对值 huolongshanghaizengjiaValue
- -- 594 火龙伤害减少 被火龙伤害减少绝对值 huolongshanghaijianshaoValue
- { add = "huolongshanghaizengjiaValue", del = "huolongshanghaijianshaoValue", type = 3, need = "火龙", pct = 0 },
- -- 593 火龙伤害加成 火龙伤害万分比 huolongshanghaijiachengRate
- -- 595 火龙伤害减免 被火龙伤害减免万分比 huolongshanghaijianmianRate
- { add = "huolongshanghaijiachengRate", del = "huolongshanghaijianmianRate", type = 3, need = "火龙", pct = 1 },
- -- 596 黑龙波伤害增加 黑龙波伤害绝对值 heilongboshanghaizengjiaValue
- -- 598 黑龙波伤害减少 被黑龙波伤害减少绝对值 heilongboshanghaijianshaoValue
- { add = "heilongboshanghaizengjiaValue", del = "heilongboshanghaijianshaoValue", type = 3, need = "黑龙波", pct = 0 },
- -- 597 黑龙波伤害加成 黑龙波伤害万分比 heilongboshanghaijiachengRate
- -- 599 黑龙波伤害减免 被黑龙波伤害减免万分比 heilongboshanghaijianmianRate
- { add = "heilongboshanghaijiachengRate", del = "heilongboshanghaijianmianRate", type = 3, need = "黑龙波", pct = 1 },
- -- 600 毁灭烈焰伤害增加 毁灭烈焰伤害绝对值 huimielieyanshanghaizengjiaValue
- -- 602 毁灭烈焰伤害减少 被毁灭烈焰伤害减少绝对值 huimielieyanshanghaijianshaoValue
- { add = "huimielieyanshanghaizengjiaValue", del = "huimielieyanshanghaijianshaoValue", type = 3, need = "毁灭烈焰", pct = 0 },
- -- 601 毁灭烈焰伤害加成 毁灭烈焰伤害万分比 huimielieyanshanghaijiachengRate
- -- 603 毁灭烈焰伤害减免 被毁灭烈焰伤害减免万分比 huimielieyanshanghaijianmianRate
- { add = "huimielieyanshanghaijiachengRate", del = "huimielieyanshanghaijianmianRate", type = 3, need = "毁灭烈焰", pct = 1 },
- -- 604 暴风雪术伤害增加 暴风雪术伤害绝对值 baofengxueshushanghaizengjiaValue
- -- 606 暴风雪术伤害减少 被暴风雪术伤害减少绝对值 baofengxueshushanghaijianshaoValue
- { add = "baofengxueshushanghaizengjiaValue", del = "baofengxueshushanghaijianshaoValue", type = 3, need = "暴风雪术", pct = 0 },
- -- 605 暴风雪术伤害加成 暴风雪术伤害万分比 baofengxueshushanghaijiachengRate
- -- 607 暴风雪术伤害减免 被暴风雪术伤害减免万分比 baofengxueshushanghaijianmianRate
- { add = "baofengxueshushanghaijiachengRate", del = "baofengxueshushanghaijianmianRate", type = 3, need = "暴风雪术", pct = 1 },
- -- 608 地狱火伤害增加 地狱火伤害绝对值 diyuhuoshanghaizengjiaValue
- -- 610 地狱火伤害减少 被地狱火伤害减少绝对值 diyuhuoshanghaijianshaoValue
- { add = "diyuhuoshanghaizengjiaValue", del = "diyuhuoshanghaijianshaoValue", type = 3, need = "地狱火", pct = 0 },
- -- 609 地狱火伤害加成 地狱火伤害万分比 diyuhuoshanghaijiachengRate
- -- 611 地狱火伤害减免 被地狱火伤害减免万分比 diyuhuoshanghaijianmianRate
- { add = "diyuhuoshanghaijiachengRate", del = "diyuhuoshanghaijianmianRate", type = 3, need = "地狱火", pct = 1 },
- -- 612 爆炎伤害增加 爆炎伤害绝对值 baoyanshanghaizengjiaValue
- -- 614 爆炎伤害减少 被爆炎伤害减少绝对值 baoyanshanghaijianshaoValue
- { add = "baoyanshanghaizengjiaValue", del = "baoyanshanghaijianshaoValue", type = 3, need = "爆炎", pct = 0 },
- -- 613 爆炎伤害加成 爆炎伤害万分比 baoyanshanghaijiachengRate
- -- 615 爆炎伤害减免 被爆炎伤害减免万分比 baoyanshanghaijianmianRate
- { add = "baoyanshanghaijiachengRate", del = "baoyanshanghaijianmianRate", type = 3, need = "爆炎", pct = 1 },
- -- 616 冰封伤害增加 冰封伤害绝对值 bingfengshanghaizengjiaValue
- -- 618 冰封伤害减少 被冰封伤害减少绝对值 bingfengshanghaijianshaoValue
- { add = "bingfengshanghaizengjiaValue", del = "bingfengshanghaijianshaoValue", type = 3, need = "冰封", pct = 0 },
- -- 617 冰封伤害加成 冰封伤害万分比 bingfengshanghaijiachengRate
- -- 619 冰封伤害减免 被冰封伤害减免万分比 bingfengshanghaijianmianRate
- { add = "bingfengshanghaijiachengRate", del = "bingfengshanghaijianmianRate", type = 3, need = "冰封", pct = 1 },
- -- 620 毒咒伤害增加 毒咒伤害绝对值 duzhoushanghaizengjiaValue
- -- 622 毒咒伤害减少 被毒咒伤害减少绝对值 duzhoushanghaijianshaoValue
- { add = "duzhoushanghaizengjiaValue", del = "duzhoushanghaijianshaoValue", type = 3, need = "毒咒", pct = 0 },
- -- 621 毒咒伤害加成 毒咒伤害万分比 duzhoushanghaijiachengRate
- -- 623 毒咒伤害减免 被毒咒伤害减免万分比 duzhoushanghaijianmianRate
- { add = "duzhoushanghaijiachengRate", del = "duzhoushanghaijianmianRate", type = 3, need = "毒咒", pct = 1 },
- -- 624 极光伤害增加 极光伤害绝对值 jiguangshanghaizengjiaValue
- -- 626 极光伤害减少 被极光伤害减少绝对值 jiguangshanghaijianshaoValue
- { add = "jiguangshanghaizengjiaValue", del = "jiguangshanghaizengjiaValue", type = 3, need = "极光", pct = 0 },
- -- 625 极光伤害加成 极光伤害万分比 jiguangshanghaijiachengRate
- -- 627 极光伤害减免 被极光伤害减免万分比 jiguangshanghaijianmianRate
- { add = "jiguangshanghaijiachengRate", del = "jiguangshanghaijianmianRate", type = 3, need = "极光", pct = 1 },
- -- 628 穿透箭伤害增加 穿透箭伤害绝对值 chuantoujianshanghaizengjiaValue
- -- 630 穿透箭伤害减少 被穿透箭伤害减少绝对值 chuantoujianshanghaijianshaoValue
- { add = "chuantoujianshanghaizengjiaValue", del = "chuantoujianshanghaijianshaoValue", type = 3, need = "穿透箭", pct = 0 },
- -- 629 穿透箭伤害加成 穿透箭伤害万分比 chuantoujianshanghaijiachengRate
- -- 631 穿透箭伤害减免 被穿透箭伤害减免万分比 chuantoujianshanghaijianmianRate
- { add = "chuantoujianshanghaijiachengRate", del = "chuantoujianshanghaijianmianRate", type = 3, need = "穿透箭", pct = 1 },
- -- 632 多重箭伤害增加 多重箭伤害绝对值 duochongjianshanghaizengjiaValue
- -- 634 多重箭伤害减少 被多重箭伤害减少绝对值 duochongjianshanghaijianshaoValue
- { add = "duochongjianshanghaizengjiaValue", del = "duochongjianshanghaijianshaoValue", type = 3, need = "多重箭", pct = 0 },
- -- 633 多重箭伤害加成 多重箭伤害万分比 duochongjianshanghaijiachengRate
- -- 635 多重箭伤害减免 被多重箭伤害减免万分比 duochongjianshanghaijianmianRate
- { add = "duochongjianshanghaijiachengRate", del = "duochongjianshanghaijianmianRate", type = 3, need = "多重箭", pct = 1 },
- -- 636 冰封箭伤害增加 冰封箭伤害绝对值 bingfengjianshanghaizengjiaValue
- -- 638 冰封箭伤害减少 被冰封箭伤害减少绝对值 bingfengjianshanghaijianshaoValue
- { add = "bingfengjianshanghaizengjiaValue", del = "bingfengjianshanghaijianshaoValue", type = 3, need = "冰封箭", pct = 0 },
- -- 637 冰封箭伤害加成 冰封箭伤害万分比 bingfengjianshanghaijiachengRate
- -- 639 冰封箭伤害减免 被冰封箭伤害减免万分比 bingfengjianshanghaijianmianRate
- { add = "bingfengjianshanghaijiachengRate", del = "bingfengjianshanghaijianmianRate", type = 3, need = "冰封箭", pct = 1 },
- -- 640 五重箭伤害增加 五重箭伤害绝对值 wuchongjianshanghaizengjiaValue
- -- 642 五重箭伤害减少 被五重箭伤害减少绝对值 wuchongjianshanghaijianshaoValue
- { add = "wuchongjianshanghaizengjiaValue", del = "wuchongjianshanghaijianshaoValue", type = 3, need = "五重箭", pct = 0 },
- -- 641 五重箭伤害加成 五重箭伤害万分比 wuchongjianshanghaijiachengRate
- -- 643 五重箭伤害减免 被五重箭伤害减免万分比 wuchongjianshanghaijianmianRate
- { add = "wuchongjianshanghaijiachengRate", del = "wuchongjianshanghaijianmianRate", type = 3, need = "五重箭", pct = 1 },
- }
- local casterCareer = getbaseinfo(caster, "getbasecareer")
- local targerCareer = getbaseinfo(target, "getbasecareer")
- local name = paramMap.CfgData.name
- for i = 1, #tab do
- local type = tab[i].type
- local need = tab[i].need
- local pct = tab[i].pct
- local add = 0
- local del = 0
- if type == 1 then
- add = getattrinfo(caster, tab[i].add)
- del = getattrinfo(target, tab[i].del)
- elseif type == 2 then
- if targerCareer == need then
- add = getattrinfo(caster, tab[i].add)
- end
- if casterCareer == need then
- del = getattrinfo(target, tab[i].del)
- end
- elseif type == 3 then
- if name ~= "" then
- if string.find(name, need) then
- add = getattrinfo(caster, tab[i].add)
- del = getattrinfo(target, tab[i].del)
- end
- end
- end
- if pct == 0 then
- SkillDamageValue = SkillDamageValue + math.max(0, add - del)
- else
- SkillDamageRate = SkillDamageRate + math.max(0, add - del)
- end
- end
- -- 160 PVP伤害吸收 计算伤害3 absorbDamageToPlayers
- local absorbDamageToPlayers = getattrinfo(target, "absorbDamageToPlayers")
- if absorbDamageToPlayers > 0 then
- SkillDamageRate = math.max(0, SkillDamageRate - absorbDamageToPlayers)
- end
- end
- return SkillDamageValue, SkillDamageRate
- end
- function fightlog(desc)
- table.insert(FightLog, desc .. "\n")
- end
- -- 服务器启动调用,缓存表数据
- function this.Cache()
- local normalCache = {}
- local elementalCache = {}
- local tableList = ConfigDataManager.getList("cfg_damage_number")
- for index, valueMap in ipairs(tableList) do
- local id = valueMap["id"]
- local attributeA = valueMap["attributea"]
- local attributeB = valueMap["attributeb"]
- local attributeC = valueMap["attributec"]
- local attributeD = valueMap["attributed"]
- local attributeE = valueMap["attributee"]
- local keyString = attributeA .. attributeB .. attributeC .. attributeD .. attributeE
- if string.contains(keyString, "1") then
- if normalCache[keyString] ~= nil then
- gameDebug.assertPrint(false, "cfg_damage_number缓存战斗飘字类型重复,id:" .. id .. ";key:" .. keyString)
- end
- normalCache[keyString] = id
- end
- -- 元素伤害
- local attributeF = valueMap["attributef"]
- local attributeG = valueMap["attributeg"]
- local attributeH = valueMap["attributeh"]
- local attributeI = valueMap["attributei"]
- local elementalKey = attributeF .. attributeG .. attributeH .. attributeI
- if string.contains(elementalKey, "1") then
- if elementalCache[elementalKey] ~= nil then
- gameDebug.assertPrint(false, "cfg_damage_number缓存元素战斗飘字类型重复,id:" .. ";key:" .. elementalKey)
- end
- elementalCache[elementalKey] = id
- end
- end
- setsysvar(SystemVarConst.NORMAL_DAMAGE_TYPE_CACHE, normalCache)
- setsysvar(SystemVarConst.ELEMENTAL_DAMAGE_TYPE_CACHE, elementalCache)
- end
- ---------------------------------------------------------------------------------------------------------------
- function this.DamageCalculate(paramMap)
- local minAtt, maxAtt = this.getMaxAndMinDamage(paramMap) -- 最大\最小攻击力
- fightlog("-----------------------基础攻击力: " .. minAtt .. "~" .. maxAtt .. "-----------------------")
- -- 配置技能攻击力
- local peizhiSkillDamage = this.getPeiZhiSkillDamage(paramMap)
- minAtt = minAtt + peizhiSkillDamage
- maxAtt = maxAtt + peizhiSkillDamage
- -- 技能攻击力
- local skillDamage = this.getSkillDamage(paramMap)
- minAtt = minAtt + skillDamage
- maxAtt = maxAtt + skillDamage
- -- 攻击力加成
- local damageRate = this.getDamageRate(paramMap)
- minAtt = minAtt + damageRate
- maxAtt = maxAtt + damageRate
- -- 攻击力加成Buff
- local damageRate = this.getDamageBuff(paramMap)
- minAtt = minAtt + damageRate
- maxAtt = maxAtt + damageRate
- local damage = 0
- local hurtTypeTable = { 0, 0, 0, 0, 0 }
- -- 幸运一击
- if this.isLuckyAttack(paramMap) == true then
- damage = this.luckyAttackDamage(paramMap, maxAtt)
- hurtTypeTable[3] = 1
- else
- damage = math.random(math.ceil(minAtt), math.ceil(maxAtt))
- end
- fightlog("----------------------计算伤害: " .. damage .. "-----------------------")
- fightlog("----------------------计算伤害: " .. damage .. "-----------------------")
- -- 双倍伤害
- local isDouble = this.isDoubleAttack(paramMap)
- if isDouble == true then
- hurtTypeTable[5] = 1
- end
- --无视防御
- if this.isUnMissAttack(paramMap) == false then
- damage = this.unMissAttackDamage(paramMap, damage, false, isDouble)
- else
- damage = this.unMissAttackDamage(paramMap, damage, true, isDouble)
- hurtTypeTable[4] = 1
- end
- --翅膀 坐骑 buff
- damage = this.petAndMountAttackDamage(paramMap, damage)
- --减伤
- damage = this.delAttackDamage(paramMap, damage)
- --盾牌
- damage = this.shieldAttackDamage(paramMap, damage)
- --吸收
- damage = this.reductionAttackDamage(paramMap, damage)
- --真实伤害
- damage = this.realAttackDamage(paramMap, damage)
- -- 卓越一击
- if this.isExcellentAttack(paramMap) == true then
- damage = this.excellentAttackDamage(paramMap, damage)
- hurtTypeTable[2] = 1
- end
- --怪物保底伤害
- local castertype = getbaseinfo(paramMap.caster, "mapobjecttype")
- if castertype == MapObjectType.MONSTER then
- local monInfo = getmonsterinfo(paramMap.caster)
- local monsterConfig = monInfo.cfgid
- local guaranteedDamage = ConfigDataManager.getTableValue("cfg_monster", "guaranteedDamage", "id", monsterConfig)
- if string.isNullOrEmpty(guaranteedDamage) then
- guaranteedDamage = "0"
- end
- damage = math.max(tonumber(guaranteedDamage) or 0, damage)
- end
- --怪物最大伤害
- local targettype = getbaseinfo(paramMap.target, "mapobjecttype")
- if targettype == MapObjectType.MONSTER then
- local monInfo = getmonsterinfo(paramMap.target)
- local monsterConfig = monInfo.cfgid
- local MaxDamage = ConfigDataManager.getTableValue("cfg_monster", "MaxDamage", "id", monsterConfig)
- if not string.isNullOrEmpty(MaxDamage) then
- damage = math.min(tonumber(MaxDamage) or 0, damage)
- end
- end
- -- 伤害字体
- local typeString = ""
- for _, value in pairs(hurtTypeTable) do
- typeString = typeString .. value
- end
- local hurtTypeCache = getsysvar(SystemVarConst.NORMAL_DAMAGE_TYPE_CACHE, 0)
- local type = hurtTypeCache[typeString] or 101
- fightlog("-----------------------计算伤害: " .. damage .. "-----------------------")
- return damage, type
- end
- -- 获取最大最小攻击力
- function this.getMaxAndMinDamage(paramMap)
- local skillId = paramMap.skillid
- local skillLevel = paramMap.skilllevel
- local skillInfo = ConfigDataManager.getById("cfg_skill", skillId)
- if not next(skillInfo) then
- return 0, 0
- end
- local powerSource = string.isNullOrEmpty(skillInfo.powersource) and 0 or tonumber(skillInfo.powersource)
- local caster = paramMap.caster --—— 攻击对象
- local petid = getbaseinfo(caster, "configid")
- if petid == 60000612 then
- local min = this.getAttValueWithName(caster, "skyhawksMinimumAttackPower")
- local max = this.getAttValueWithName(caster, "skyhawksMaximumAttackPower")
- return min, max
- end
- if powerSource == 1 then
- return this.getAttValueWithName(caster, "minDC"), this.getAttValueWithName(caster, "maxDC")
- end
- if powerSource == 2 then
- return this.getAttValueWithName(caster, "minMC"), this.getAttValueWithName(caster, "maxMC")
- end
- if powerSource == 3 then
- local min = this.getAttValueWithName(caster, "minimumCurseAttackPower") +
- this.getAttValueWithName(caster, "minMC")
- local max = this.getAttValueWithName(caster, "maximumCurseAttackPower") +
- this.getAttValueWithName(caster, "maxMC")
- return min, max
- end
- local maxDC = this.getAttValueWithName(caster, "maxDC")
- local maxMC = this.getAttValueWithName(caster, "maxMC")
- local maxCurDC = this.getAttValueWithName(caster, "maximumCurseAttackPower")
- if maxDC >= maxMC and maxDC >= maxCurDC then
- return this.getAttValueWithName(caster, "minDC"), maxDC
- elseif maxMC >= maxDC and maxMC >= maxCurDC then
- return this.getAttValueWithName(caster, "minMC"), maxMC
- elseif maxCurDC >= maxDC and maxCurDC >= maxMC then
- return this.getAttValueWithName(caster, "minimumCurseAttackPower"), maxCurDC
- end
- return 0, 0
- end
- -- 获取配置技能的攻击力
- function this.getPeiZhiSkillDamage(paramMap)
- local caster = paramMap.caster --—— 攻击对象
- local skillPower = tonumber(paramMap.CfgData.skillpower) or 0
- local skillattpower = paramMap.CfgData.skillattpower
-
- if not string.isNullOrEmpty(skillattpower) then
- local caster = paramMap.caster --—— 攻击对象
- local attInfos = string.putIntIntMap({}, skillattpower, "#", "|")
- for key, value in pairs(attInfos) do
- local currentValue = this.getAttValueWithId(caster, key)
- skillPower = skillPower + math.ceil(currentValue / value)
- end
- end
- -- local skillDamage = this.getAttValueWithName(caster, "skillDamage")
- -- skillPower = skillPower * (1 + skillDamage)
- fightlog("-----------------------配置技能攻击力: " .. skillPower .. "-----------------------")
- return skillPower
- end
- -- 获取技能的攻击力
- function this.getSkillDamage(paramMap)
- local caster = paramMap.caster --—— 攻击对象
- local isPVP = this.getIsPVP(paramMap)
- local damage = this.getAttValueWithName(caster, "skillDamageAdd")
- if isPVP == true then
- damage = damage + this.getAttValueWithName(caster, "pvpskillattackadd")
- else
- damage = damage + this.getAttValueWithName(caster, "skillDamageAdd")
- end
- fightlog("-----------------------技能攻击力: " .. damage .. "-----------------------")
- return damage
- end
- -- 是否是PVP
- function this.getIsPVP(paramMap)
- local caster = paramMap.caster --—— 攻击对象
- local target = paramMap.target --—— 受击对象
- local castertype = getbaseinfo(caster, "mapobjecttype")
- local targettype = getbaseinfo(target, "mapobjecttype")
- local isPVP = true
- if castertype == MapObjectType.MONSTER or targettype == MapObjectType.MONSTER then
- isPVP = false
- end
- return isPVP
- end
- -- 获取攻击力加成
- function this.getDamageRate(paramMap)
- local caster = paramMap.caster --—— 攻击对象
- local isPVP = this.getIsPVP(paramMap)
- local AtkUpPercent = this.getAttValueWithName(caster, "AtkUpPercent")
- if isPVP == true then
- AtkUpPercent = AtkUpPercent + this.getAttValueWithName(caster, "pvpattackadd")
- else
- AtkUpPercent = AtkUpPercent + this.getAttValueWithName(caster, "pveattackadd")
- end
- fightlog("-----------------------攻击力加成: " .. AtkUpPercent .. "-----------------------")
- return AtkUpPercent
- end
- -- 获取攻击力加成Buff
- function this.getDamageBuff(paramMap)
- local caster = paramMap.caster --—— 攻击对象
- local AtkUpPercent = this.getAttValueWithName(caster, "AtkUpBuff")
- return AtkUpPercent
- end
- -- 是否触发幸运一击
- function this.isLuckyAttack(paramMap)
- local caster = paramMap.caster --—— 攻击对象
- local target = paramMap.target --—— 受击对象
- local criticalDamageChance = this.getAttValueWithName(caster, "criticalDamageChance")
- local criticalDamageResistanceChance = this.getAttValueWithName(target, "criticalDamageResistanceChance")
- local probability = criticalDamageChance * (1 - criticalDamageResistanceChance)
- local result = this.RandomResult(probability)
- fightlog("-----------------------是否触发幸运一击: " .. (result == true and 1 or 0) .. "-----------------------")
- return result
- end
- -- 幸运一击的攻击力
- function this.luckyAttackDamage(paramMap, maxAtt)
- local caster = paramMap.caster --—— 攻击对象
- local target = paramMap.target --—— 受击对象
- local criticalDamageAdd = this.getAttValueWithName(caster, "criticalDamageAdd")
- local criticalDamageReduce = this.getAttValueWithName(target, "criticalDamageReduce")
- local criticalDamageBonus = this.getAttValueWithName(caster, "criticalDamageBonus")
- local criticalDamageReducationBonus = this.getAttValueWithName(target, "criticalDamageReducationBonus")
- local result = (maxAtt + criticalDamageAdd - criticalDamageReduce) *
- (1 + criticalDamageBonus - criticalDamageReducationBonus)
- fightlog("-----------------------幸运一击伤害: " .. result .. "-----------------------")
- return result
- end
- -- 是否触发卓越一击
- function this.isExcellentAttack(paramMap)
- local caster = paramMap.caster --—— 攻击对象
- local target = paramMap.target --—— 受击对象
- local excellentDamageChance = this.getAttValueWithName(caster, "excellentDamageChance")
- local excellentDamageResistanceChance = this.getAttValueWithName(target, "excellentDamageResistanceChance")
- local probability = excellentDamageChance * (1 - excellentDamageResistanceChance)
- local result = this.RandomResult(probability)
- fightlog("-----------------------是否触发卓越一击: " .. (result == true and 1 or 0) .. "-----------------------")
- return result
- end
- -- 卓越一击的攻击力
- function this.excellentAttackDamage(paramMap, damage)
- local excellentRate = (tonumber(paramMap.CfgData.excellentrate) or 0) / 10000
- local caster = paramMap.caster --—— 攻击对象
- local target = paramMap.target --—— 受击对象
- local excellentDamageAdd = this.getAttValueWithName(caster, "excellentDamageAdd")
- local excellentDamageReduce = this.getAttValueWithName(target, "excellentDamageReduce")
- local excellentDamageBonus = this.getAttValueWithName(caster, "excellentDamageBonus")
- local excellentDamageReducationBonus = this.getAttValueWithName(target, "excellentDamageReducationBonus")
- local result = (damage + excellentDamageAdd - excellentDamageReduce) *
- (1 + excellentDamageBonus + excellentRate - excellentDamageReducationBonus)
- fightlog("-----------------------卓越一击伤害: " .. result .. "-----------------------")
- return result
- end
- -- 是否触发双倍伤害
- function this.isDoubleAttack(paramMap)
- local caster = paramMap.caster
- local target = paramMap.target
- local doubleDamageChance = this.getAttValueWithName(caster, "doubleDamageChance")
- local doubleDamageResistanceChance = this.getAttValueWithName(target, "doubleDamageResistanceChance")
- local probability = doubleDamageChance * (1 - doubleDamageResistanceChance)
- local result = this.RandomResult(probability)
- fightlog("-----------------------是否触发双倍伤害: " .. (result == true and 1 or 0) .. "-----------------------")
- return result
- end
- -- 是否触发无视防御
- function this.isUnMissAttack(paramMap)
- local caster = paramMap.caster --—— 攻击对象
- local target = paramMap.target --—— 受击对象
- local unMissRate = this.getAttValueWithName(caster, "unMissRate") -- 无视防御的概率, 万分之
- local resistUnMissRate = this.getAttValueWithName(target, "resistUnMissRate") -- 抵抗无视防御几率 万分之
- local probability = unMissRate * (1 - resistUnMissRate)
- local result = this.RandomResult(probability)
- fightlog("-----------------------是否触发无视防御: " .. (result == true and 1 or 0) .. "-----------------------")
- return result
- end
- -- 无视防御的攻击力
- function this.unMissAttackDamage(paramMap, damage, isUnMiss, isDouble)
- local caster = paramMap.caster --—— 攻击对象
- local target = paramMap.target --—— 受击对象
- local ignoringIncreasedDefenseDamage = this.getAttValueWithName(caster, "ignoringIncreasedDefenseDamage")
- local result = damage + ignoringIncreasedDefenseDamage
- local isPVP = this.getIsPVP(paramMap)
- if isPVP == true then
- result = result + this.getAttValueWithName(caster, "pvpdamageadda")
- else
- result = result + this.getAttValueWithName(caster, "pveDamageAdd")
- end
- fightlog("-----------------------判定PVP伤害增加后的伤害: " .. result .. "-----------------------")
- if isUnMiss == false then
- result = result - this.getAttValueWithName(target, "armor")
- if isPVP == true then
- result = result - this.getAttValueWithName(caster, "pvparmor")
- else
- result = result - this.getAttValueWithName(caster, "pvearmor")
- end
- fightlog("-----------------------判定防御后的伤害: " .. result .. "-----------------------")
- end
- if result < 0 then
- result = 0
- end
- local powerRate = tonumber(paramMap.CfgData.powerrate) or 0 -- 技能威力 万分之
- local skillDamage = this.getAttValueWithName(caster, "skillDamage")
- result = (powerRate / 10000 + skillDamage) * result
- fightlog("-----------------------判定skill后的伤害: " .. result .. "-----------------------")
- if isDouble == true then
- local doubleDamageBonus = this.getAttValueWithName(caster, "doubleDamageBonus") --双倍伤害加成 万分之
- local doubleDamageReducationBonus = this.getAttValueWithName(target, "doubleDamageReducationBonus") -- 双倍伤害减免 万分之
- local doubleDamageAdd = this.getAttValueWithName(caster, "doubleDamageAdd") -- 双倍伤害增加 固定数值
- local doubleDamageReduce = this.getAttValueWithName(target, "doubleDamageReduce") -- 双倍伤害减少 固定数值
- result = result * (2 + doubleDamageBonus - doubleDamageReducationBonus) + doubleDamageAdd - doubleDamageReduce
- fightlog("-----------------------判定双倍伤害后的伤害: " .. result .. "-----------------------")
- end
- return result
- end
- -- 翅膀 坐骑 buff
- function this.petAndMountAttackDamage(paramMap, damage)
- local caster = paramMap.caster --—— 攻击对象
- local mountdamagebonus = this.getAttValueWithName(caster, "mountdamagebonus") -- 坐骑伤害提升 万分比
- local wingdamagebonus = this.getAttValueWithName(caster, "wingdamagebonus") -- 翅膀伤害提升 万分比
- local buffdamagebonus = this.getAttValueWithName(caster, "buffdamagebonus") -- buff伤害提升 万分比
- local damageRate = this.getAttValueWithName(caster, "damageRate") -- 伤害提升 万分比
- local result = (1 + mountdamagebonus + wingdamagebonus + buffdamagebonus + damageRate) * damage
- fightlog("----------------------判定翅膀、坐骑后的伤害: " .. result .. "-----------------------")
- return result
- end
- -- 减伤
- function this.delAttackDamage(paramMap, damage)
- local caster = paramMap.caster --—— 攻击对象
- local target = paramMap.target --—— 受击对象
- local fixedDamageAdd = this.getAttValueWithName(caster, "fixedDamageAdd") --- 固定伤害增加
- local fixedDamageReduce = this.getAttValueWithName(target, "fixedDamageReduce") --- 固定伤害减少
- local result = damage + fixedDamageAdd - fixedDamageReduce
- if result < 0 then result = 0 end
- local isPVP = this.getIsPVP(paramMap)
- if isPVP == true then
- result = result - this.getAttValueWithName(target, "pvpDamageReduce") --- pvp伤害减少
- else
- result = result - this.getAttValueWithName(caster, "pveDamageReduce") --- pve伤害减少
- end
- if result < 0 then result = 0 end
- local damageRateDecrement = this.getAttValueWithName(target, "damageRateDecrement") --- 伤害减免, 百分比
- result = result * (1 - damageRateDecrement)
- fightlog("----------------------判定减伤后的伤害: " .. result .. "-----------------------")
- return result
- end
- -- 盾牌
- function this.shieldAttackDamage(paramMap, damage)
- local target = paramMap.target --—— 受击对象
- local shielddamagebonus = this.getAttValueWithName(target, "shielddamagebonus") -- 盾牌减伤 百分比
- local result = (1 - shielddamagebonus) * damage
- fightlog("----------------------判定盾牌减伤后的伤害: " .. result .. "-----------------------")
- return result
- end
- -- 吸收
- function this.reductionAttackDamage(paramMap, damage)
- local target = paramMap.target --—— 受击对象
- local mountdamagereduction = 1 - this.getAttValueWithName(target, "mountdamagereduction")
- local wingdamagereduction = 1 - this.getAttValueWithName(target, "wingdamagereduction")
- local buffdamagereduction = 1 - this.getAttValueWithName(target, "buffdamagereduction")
- local guarddamagereduction = 1 - this.getAttValueWithName(target, "guarddamagereduction")
- local damageAbsorb = 1 - this.getAttValueWithName(target, "damageAbsorb")
- local result = mountdamagereduction * wingdamagereduction * buffdamagereduction * guarddamagereduction * damageAbsorb *
- damage
- fightlog("----------------------判定吸收后的伤害: " .. result .. "-----------------------")
- return result
- end
- -- 真实伤害
- function this.realAttackDamage(paramMap, damage)
- local caster = paramMap.caster --—— 攻击对象
- local target = paramMap.target --—— 受击对象
- local isPVP = this.getIsPVP(paramMap)
- local result = damage
- if isPVP == true then
- local truedamagebonus = this.getAttValueWithName(caster, "truedamagebonus")
- local truedamagereductionpercentbonus = this.getAttValueWithName(target, "truedamagereductionpercentbonus")
- result = result * (1 + truedamagebonus - truedamagereductionpercentbonus)
- result = result + this.getAttValueWithName(caster, "pvptruedamage") -- PVP真实伤害 固定数值
- result = result - this.getAttValueWithName(target, "pvptruedamagepercent") -- PVP真伤减免 固定数值
- else
- result = result + this.getAttValueWithName(caster, "pvetruedamagereduction") -- PVE真实伤害 固定数值
- result = result - this.getAttValueWithName(target, "pvetruedamagereductionpercent") -- PVE真伤减免 固定数值
- end
- fightlog("----------------------判定真实伤害后的伤害: " .. result .. "-----------------------")
- return result
- end
- function this.getAttValueWithName(target, attName)
- return (getattrinfo(target, attName) or 0)
- end
- function this.getAttValueWithId(target, attId)
- local attName = attrid2name(attId) or ""
- return this.getAttValueWithName(target, attName)
- end
- -- [0,1)
- function this.RandomResult(probability)
- local randomNum = math.random()
- return randomNum <= probability
- end
- ---玩家战斗触发
- function PlayerFight.AttackTrigger(actor, fightRet)
- this.UpdateFightTask(actor, fightRet)
- end
- ---更新战斗相关任务
- function this.UpdateFightTask(actor, fightRet)
- local taskCfgList = ConfigDataManager.getTable("cfg_task_target", "taskgoaltype", TaskTargetType.HURT_MAP_MONSTER)
- if table.isNullOrEmpty(taskCfgList) then
- return
- end
- local targetHurt = tonumber(fightRet["targethurt"])
- local mapCfgId = tonumber(fightRet["mapcfgid"])
- local targetCfgId = tonumber(fightRet["targetcfgid"])
- local flush = false
- for _, taskCfg in pairs(taskCfgList) do
- local monsterLimit = tonumber(taskCfg["taskgoalparam"])
- local mapLimit = tonumber(taskCfg["taskgoalparam2"])
- if targetCfgId == monsterLimit and mapCfgId == mapLimit then
- flush = true
- break
- end
- end
- -- 触发刷新任务
- if flush then
- local taskParam = {
- monsterid = targetCfgId,
- mapid = mapCfgId,
- hurt = targetHurt
- }
- -- 触发任务目标
- TaskHandler.TriggerTaskGoal(actor, TaskTargetType.HURT_MAP_MONSTER, taskParam)
- end
- end
|