| | |
| | | # @param hurtList 是g_skillHurtList
|
| | | def AddHurt(tagObj, hurtList, hurtType, hurtValue):
|
| | | tagObjType = tagObj.GetGameObjType()
|
| | | |
| | | #if tagObjType == IPY_GameWorld.gotPlayer:
|
| | | if not hasattr(tagObj, "GetHPEx"):
|
| | | # 目标是玩家则超过xx亿部分为0,玩家暂无开放接口
|
| | | hurtList.AddHurt(tagObjType, tagObj.GetID(), hurtType, hurtValue, tagObj.GetHP(), 0)
|
| | | else:
|
| | | hurtList.AddHurt(tagObjType, tagObj.GetID(), hurtType, hurtValue, tagObj.GetHP(), tagObj.GetHPEx())
|
| | | hurtList.AddHurt(tagObjType, tagObj.GetID(), hurtType, hurtValue % ShareDefine.Def_PerPointValue, |
| | | hurtValue / ShareDefine.Def_PerPointValue, tagObj.GetHP(), tagObj.GetHPEx())
|
| | | return
|
| | |
|
| | | # 伤血列表累积记录,超DWORD特殊缩减处理
|
| | | def AddHurtValue(defender, attackID, attackHurtType, value):
|
| | | defendHurtList = defender.GetPlayerHurtList()
|
| | | if not hasattr(defender, "GetMaxHPEx"):
|
| | | defendHurtList.AddHurtValue(attackID, attackHurtType, value)
|
| | | return
|
| | | |
| | | #总血量有超过DWORD的情况
|
| | | value = NPCCommon.FixValueByValueEx(defender.GetMaxHPEx(), value)
|
| | | defendHurtList.AddHurtValue(attackID, attackHurtType, value)
|
| | | |
| | | defendHurtList.AddHurtValue(attackID, attackHurtType, value % ShareDefine.Def_PerPointValue, value / ShareDefine.Def_PerPointValue)
|
| | | return
|
| | |
|
| | | def AddTeamPlayerHurtValue(defender, teamID, playerID, value):
|
| | | # 添加队伍成员对NPC伤血累计
|
| | | if not teamID:
|
| | |
| | | return
|
| | |
|
| | | #已经死亡了,不变色
|
| | | if curPlayer.GetHP() <= 0:
|
| | | if GameObj.GetHP(curPlayer) <= 0:
|
| | | return
|
| | |
|
| | | curPlayerNameColor = curPlayer.GetPlayerNameColor()
|
| | |
| | | # @remarks 玩家角色及宠物、召唤兽之间产生的伤害都算PVP伤害;
|
| | | # 另反伤及持续掉血buff也算, 但反伤及buff仅计算玩家之间
|
| | | def OnPVPDamage(curPlayer, damageValue, tagPlayer, damageMsg):
|
| | | #GameWorld.DebugLog("%s curPlayerID(%sLVEX:%s)=%s,tagPlayerID(%sLVEX:%s)=%s,damageValue=%s" |
| | | # % (damageMsg, curPlayer.GetAccID(), curPlayer.GetLVEx(), curPlayer.GetPlayerID(), |
| | | # tagPlayer.GetAccID(), tagPlayer.GetLVEx(), tagPlayer.GetPlayerID(), damageValue))
|
| | | FBLogic.OnPVPDamage(curPlayer, damageValue, tagPlayer)
|
| | | return
|
| | |
|
| | |
| | | #GameWorld.DebugLog("按比例更新战力值信息: fightPowerMin=%s,fightPowerMax=%s,everyFightPower=%s"
|
| | | # % (fightPowerMin, fightPowerMax, everyFightPower))
|
| | |
|
| | | effFightPower = curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_TimeLostHPFightPower)
|
| | | effFightPower = curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_TimeLostHPFightPower) \
|
| | | + curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_TimeLostHPFightPowerEx) * ChConfig.Def_PerPointValue
|
| | | effPlayerCount = curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_TimeLostHPPlayerCount)
|
| | | refreshPlayerCountTick = curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_TimeLostHPPlayerCountTick)
|
| | | if not refreshPlayerCountTick or tick - refreshPlayerCountTick >= 3000:
|
| | |
| | | effPlayerCount += 1
|
| | | if fightPowerMin:
|
| | | seePlayer = GameWorld.GetObj(seeObj.GetID(), seeObjType)
|
| | | fightPowerTotal += (0 if not seePlayer else seePlayer.GetFightPower())
|
| | | fightPowerTotal += (0 if not seePlayer else PlayerControl.GetFightPower(seePlayer))
|
| | |
|
| | | effPlayerCount = max(effPlayerCount, 1)
|
| | |
|
| | |
| | | if maxPlayerCount and effPlayerCount > maxPlayerCount:
|
| | | effPlayerCount = maxPlayerCount
|
| | |
|
| | | curNPC.SetDict(ChConfig.Def_NPC_Dict_TimeLostHPFightPower, effFightPower)
|
| | | curNPC.SetDict(ChConfig.Def_NPC_Dict_TimeLostHPFightPower, effFightPower % ChConfig.Def_PerPointValue)
|
| | | curNPC.SetDict(ChConfig.Def_NPC_Dict_TimeLostHPFightPowerEx, effFightPower / ChConfig.Def_PerPointValue)
|
| | | curNPC.SetDict(ChConfig.Def_NPC_Dict_TimeLostHPPlayerCount, effPlayerCount)
|
| | | #GameWorld.DebugLog("刷新影响人数: effPlayerCount=%s,effFightPower=%s" % (effPlayerCount, effFightPower))
|
| | |
|
| | |
| | | reducePer = PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(defObj, atkObj, None, ChConfig.TriggerType_ReduceHurtHPPer)
|
| | |
|
| | | # 被攻击被动技能特殊减免 受到单次伤害超过生命上限10%时候,减免50%伤害,CD10秒
|
| | | defObj.SetDict(ChConfig.Def_PlayerKey_curHurtValue, hurtValue)
|
| | | defObj.SetDict(ChConfig.Def_PlayerKey_curHurtValue, hurtValue % ShareDefine.Def_PerPointValue)
|
| | | defObj.SetDict(ChConfig.Def_PlayerKey_curHurtValueEx, hurtValue / ShareDefine.Def_PerPointValue)
|
| | | reducePer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_ReduceHurtHPPer)
|
| | | hurtValue = int(hurtValue*(max(ChConfig.Def_MaxRateValue - reducePer, 0))*1.0/ChConfig.Def_MaxRateValue)
|
| | |
|
| | |
| | | # 血盾支持多个同时存在, 反弹也会被吸收
|
| | | def CalcBloodShield(atkObj, defObj, hurtValue):
|
| | | # 伤害值用于血盾抵消
|
| | | defObj.SetDict(ChConfig.Def_PlayerKey_BloodShiledHurt, hurtValue)
|
| | | GameObj.SetBloodShiledHurt(defObj, hurtValue)
|
| | |
|
| | | PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(defObj, atkObj, None, ChConfig.TriggerType_BloodShield)
|
| | |
|
| | | return defObj.GetDictByKey(ChConfig.Def_PlayerKey_BloodShiledHurt)
|
| | | return GameObj.GetBloodShiledHurt(defObj)
|
| | |
|
| | |
|
| | | # 计算攻击伤害
|
| | |
| | | suppressReMaxHP = 0 if not suppressLVIpyData else suppressLVIpyData.GetReMaxHP()
|
| | | suppressNPCFightPower = NPCCommon.GetSuppressFightPower(atkObj)
|
| | | if suppressNPCFightPower:
|
| | | suppressFightPower = max(0, suppressNPCFightPower - defObj.GetFightPower())
|
| | | suppressFightPower = max(0, suppressNPCFightPower - PlayerControl.GetFightPower(defObj))
|
| | |
|
| | | mustHit = False
|
| | | helpBattleFormatKey = ""
|
| | |
| | | aFinalHurt += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackAddFinalValue)
|
| | |
|
| | | aOnlyFinalHurt = PlayerControl.GetOnlyFinalHurt(atkObj) # 额外固定伤害
|
| | | aFightPower = atkObj.GetFightPower()
|
| | | aFightPower = PlayerControl.GetFightPower(atkObj)
|
| | |
|
| | |
|
| | |
|
| | |
| | | dDamagePerPVPReduce += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_DamageReducePVP)
|
| | | dFinalHurtReduce = PlayerControl.GetFinalHurtReduce(defObj) # 最终固定伤害减少
|
| | | dBeHurtPer = PlayerControl.GetBeHurtPer(defObj) # 加深受到伤害百分比
|
| | | dFightPower = defObj.GetFightPower()
|
| | | dFightPower = PlayerControl.GetFightPower(defObj)
|
| | | dFinalHurtReducePer = PlayerControl.GetFinalHurtReducePer(defObj)
|
| | | dFinalHurtReducePer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, curSkill, ChConfig.TriggerType_dFinalHurtReducePer)
|
| | |
|
| | |
| | | hurtValue = int(eval(FormulaControl.GetCompileFormula(hurtFormulaKey, hurtFormula)))
|
| | | if isDeadlyHit:
|
| | | hurtValue *= deadlyHitMultiValue
|
| | | hurtValue = min(max(hurtValue, 0), ChConfig.Def_UpperLimit_DWord)
|
| | | #hurtValue = min(max(hurtValue, 0), ChConfig.Def_UpperLimit_DWord)
|
| | |
|
| | | if hurtType == ChConfig.Def_HurtType_Normal and atkSkillPerYinji > 0:
|
| | | return hurtValue, ChConfig.Def_HurtType_Yinji
|
| | |
| | |
|
| | | if atkObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
|
| | | # 记录最后一次伤害值
|
| | | atkObj.SetDict(ChConfig.Def_PlayerKey_LastHurtValue, resultHurtType.RealHurtHP)
|
| | | GameObj.SetLastHurtValue(atkObj, resultHurtType.RealHurtHP)
|
| | | if defObj.GetGameObjType() == IPY_GameWorld.gotNPC:
|
| | | atkObj.SetDict(ChConfig.Def_PlayerKey_LastHurtNPCObjID, defObj.GetID())
|
| | | else:
|
| | |
| | | else:
|
| | | GameObj.SetHP(atkObj, remainHP)
|
| | | #广播血量
|
| | | #atkObj.Notify_HPEx()
|
| | | #atkObj.Notify_HP()
|
| | |
|
| | | elif atkObjType == IPY_GameWorld.gotPlayer:
|
| | | GameObj.SetHP(atkObj, remainHP, False)
|
| | |
| | | attackPrestige = PlayerControl.GetPrestige(curPlayer) # 攻击者威望
|
| | | attackNotoriety = curPlayer.GetInfamyValue() # 攻击者恶名值
|
| | | attackPkValue = curPlayer.GetPKValue() # 攻击者pk值
|
| | | attackFightPower = curPlayer.GetFightPower() # 攻击者战斗力
|
| | | attackFightPower = PlayerControl.GetFightPower(curPlayer) # 攻击者战斗力
|
| | |
|
| | | defendLV = defender.GetLV() # 防守者等级
|
| | | defendPrestige = PlayerControl.GetPrestige(defender) # 防守者威望
|
| | | defendNotoriety = defender.GetInfamyValue() # 防守者恶名值
|
| | | defendPkValue = defender.GetPKValue() # 防守者pk值
|
| | | defendFightPower = defender.GetFightPower() # 防守者战斗力
|
| | | defendFightPower = PlayerControl.GetFightPower(defender) # 防守者战斗力
|
| | |
|
| | | # #今日杀人获得威望值
|
| | | # prestigeByDay = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_KillPlayerAddPrestige)
|
| | |
| | | srcID, srcType = 0, 0
|
| | | if srcObj:
|
| | | srcID, srcType = srcObj.GetID(), srcObj.GetGameObjType()
|
| | | HPEx = 0 if not hasattr(curObj, "GetHPEx") else curObj.GetHPEx()
|
| | | curObj.ChangeHPView(skillID, min(changeHP, ChConfig.Def_UpperLimit_DWord), changType, srcID, srcType, curObj.GetHP(), HPEx)
|
| | | curObj.ChangeHPView(skillID, changeHP % ShareDefine.Def_PerPointValue, changeHP / ShareDefine.Def_PerPointValue, |
| | | changType, srcID, srcType, curObj.GetHP(), curObj.GetHPEx())
|
| | | return |