From 4e3d1ff7e0b98fc18b0b6e63e449f3d7577c0ba6 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 05 十一月 2025 11:16:31 +0800
Subject: [PATCH] 16 卡牌服务端(功能开启增加开服天条件支持;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py | 922 +++++++++++++++------------------------------------------
1 files changed, 242 insertions(+), 680 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
index 30e0d4d..ece7992 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
@@ -30,39 +30,27 @@
import IPY_GameWorld
import PlayerControl
import NPCCommon
-#import ItemControler
import SkillCommon
-import EffGetSet
import FBLogic
-import EventShell
import ReadChConfig
import PetControl
import GameMap
-import PlayerTruck
-#import PlayerPrestigeSys
-import PlayerFamily
-#import BossHurtMng
import PassiveBuffEffMng
-import PlayerSuccess
import GameFuncComm
import ShareDefine
import SkillShell
-import PlayerVip
import FormulaControl
import IpyGameDataPY
import PyGameData
import GameObj
import BuffSkill
import PlayerState
-import MirrorAttack
import ChPyNetSendPack
-import NPCHurtManager
import NetPackCommon
-import FamilyRobBoss
import FBCommon
import ChNPC
-import BossHurtMng
-import NPCHurtMgr
+import ChNetSendPack
+import TurnAttack
import datetime
import math
@@ -216,49 +204,6 @@
curTagPlayer.GameServer_AddEnemy(curPlayer.GetID(), curPlayer.GetName())
return
-
-## 当玩家杀死镖车的时候触发
-# @param curPlayer 杀人者
-# @param defender 被杀者
-# @param tick 当前时间
-# @return None
-# @remarks 函数详细说明.
-def OnPlayerKillTruck(curPlayer, curTruck, tick):
-
- if curPlayer == None or curTruck == None:
- return
-
- #区域
- curPlayerAreaType = GameMap.GetAreaTypeByMapPos(curPlayer.GetPosX(), curPlayer.GetPosY())
- truckAreaType = GameMap.GetAreaTypeByMapPos(curTruck.GetPosX(), curTruck.GetPosY())
-
- #自由区域,合法,返回True
- if curPlayerAreaType == IPY_GameWorld.gatFreePK or truckAreaType == IPY_GameWorld.gatFreePK:
- return
-
- #家族区域,PK不是同一家族的玩家或其宠物,合法,返回True
- if curPlayerAreaType == IPY_GameWorld.gatFamilyPK or truckAreaType == IPY_GameWorld.gatFamilyPK:
- return
-
- #已经死亡了,不变色
- if GameObj.GetHP(curPlayer) <= 0:
- return
-
- curPlayerNameColor = curPlayer.GetPlayerNameColor()
- #自己如果不是白名就不变色
- if curPlayerNameColor != IPY_GameWorld.pncNormal:
- return
-
- curTruckNameColor = PlayerTruck.GetTruckNameColor(curTruck)
- if curTruckNameColor != IPY_GameWorld.pncNormal:
- #目标玩家不是白名就不变色
- return
-
- #灰名(9)
- #SkillCommon.AddBuffBySkillType(curPlayer , ChConfig.Def_SkillID_Gray , tick)
- return
-
-
## 当玩家杀死玩家的时候触发
# @param curPlayer 杀人者
# @param defender 被杀者
@@ -268,12 +213,6 @@
def OnPlayerKillPlayer(curPlayer, defender, tick):
PlayerState.SetPKStateTick(curPlayer, tick)
-
- #触发击杀玩家事件
- EventShell.EventResponse_OnKillEnemy(curPlayer, defender)
-
- #触发被杀事件
- EventShell.EventResponse_OnEnemyKill(defender, curPlayer)
#通知
PlayerControl.NotifyCode(defender, "PK_lhs_318691", [curPlayer.GetName()])
@@ -429,15 +368,6 @@
AddHurtValue(defender, attacker.GetPlayerID(), ChConfig.Def_NPCHurtTypePlayer, 1)
return
-## 被攻击者被动buff触发
-# @param curTagPlayer 被攻击者
-# @param tick 当前时间
-# @param isSuperHit 暴击
-# @return None
-# @remarks 函数详细说明.
-def DefenderSpringBuff(curTagPlayer, tick, isSuperHit=False):
- return
-
#---------------------------------------------------------------------
def GetBattleRelationType(attacker, defender):
@@ -486,59 +416,23 @@
# @return 攻击类型 如 IPY_GameWorld.ghtPhy
# @remarks 获取攻击类型
def GetBattleType(attack, attackUseSkill):
- # GetHurtType用法改成 pvp pve标识
- return IPY_GameWorld.ghtPhy
-# #---技能攻击, 读表获取攻击类型---
-# if attackUseSkill != None:
-# return attackUseSkill.GetHurtType()
-#
-# #---普通攻击---
-#
-# #玩家算普通攻击
-# if attack.GetGameObjType() == IPY_GameWorld.gotPlayer:
-# return IPY_GameWorld.ghtPhy
-#
-# #NPC读表取
-# return attack.GetHurtType()
-
-## 输入基础数值,返回增强后的值 - 技能加强
-# @param value 基础值
-# @param skill 技能
-# @return 增强后的值
-# @remarks 函数详细说明.
-def GetEnhanceValue(value, skill):
- per = skill.GetEffect(0).GetEffectValue(0)
- eff = skill.GetEffect(0).GetEffectValue(1)
- #GameWorld.Log("被动 -> 自身属性,技能ID = %s,技能增强 = %s,附加 = %s , 基础值 = %s"%(skill.GetSkillName(),per,eff,value))
- return max(value * per / ChConfig.Def_MaxRateValue + eff , 1)
-
-## 输入基础数值,返回增强后的值 (LV)- 效果加强
-# @param value 基础值
-# @param eff 效果
-# @return 增强后的值
-# @remarks 函数详细说明.
-def GetEnhanceValue_Eff(value, eff):
- per = eff.GetEffectValue(0)
- eff = eff.GetEffectValue(1)
- #GameWorld.Log("value = %s,per = %s,erf = %s"%(value,per,eff))
- return max(value * per / ChConfig.Def_MaxRateValue + eff , 1)
-
-## 输入基础效果值,(玩家索引) -> 技能增强
-# @param curPlayer 当前玩家
-# @param curEffect 当前效果
-# @return 增强后的值
-# @remarks 函数详细说明.
-def GetEnhanceIndexValue_Eff(curPlayer, curEffect):
- index = curEffect.GetEffectValue(0)
- skillPer = curEffect.GetEffectValue(1)
- effect = curEffect.GetEffectValue(2)
- maxValue = EffGetSet.GetValueByEffIndex(curPlayer, index)
- #GameWorld.Log("-----%s,%s,%s,%s"%(index,skillPer,effect,maxValue))
+ # GetHurtType 个位数用法改成 pvp pve标识,十位数-物攻法攻 IPY_GameWorld.ghtPhy = 1
+ #---技能攻击, 读表获取攻击类型---
+ if attackUseSkill != None:
+ ght = attackUseSkill.GetHurtType() / 10
+ if ght == IPY_GameWorld.ghtMag: # 做配置兼容用,优先验证法伤,否则默认物伤
+ return IPY_GameWorld.ghtMag
+ return IPY_GameWorld.ghtPhy
- if maxValue == None:
- return 0
+ #---普通攻击---
+
+ #玩家算普通攻击
+ if attack.GetGameObjType() == IPY_GameWorld.gotPlayer:
+ return IPY_GameWorld.ghtPhy
- return max(maxValue * skillPer / ChConfig.Def_MaxRateValue + effect , 1)
+ #NPC读表取
+ return attack.GetHurtType()
+
#--------------------------------------------------------------------------
## 设置玩家进入战斗状态
# @param defender 当前玩家(被攻击了)
@@ -717,24 +611,13 @@
curObjType = curObj.GetGameObjType()
if curObjType == IPY_GameWorld.gotPlayer:
- #BossHurtMng.BossAddPlayerInHurtList(curObj, curTagObj, hurtHP)
- FamilyRobBoss.OnPlayerHurtFamilyOwnerBoss(curObj, curTagObj, hurtHP)
if curTagObj.GetGameObjType() == IPY_GameWorld.gotNPC:
FBLogic.DoFB_Player_HurtNPC(curObj, curTagObj, hurtHP)
if GameObj.GetHP(curTagObj) == 0:
curTagObj.SetDict(ChConfig.Def_PlayerKey_LastHurt, curObj.GetPlayerID())
- if NPCHurtManager.AddHurtValue(curObj, curTagObj, hurtHP, isBounce):
- return
-
- if NPCHurtMgr.AddHurtValue(curObj, curTagObj, hurtHP, isBounce):
- return
-
curTeam = curObj.GetTeam()
-
- #2012-04-23 jiang 攻击镖车只算个人伤害
- if curTagObj.GetGameObjType() == IPY_GameWorld.gotNPC and \
- curTagObj.GetGameNPCObjType() == IPY_GameWorld.gnotTruck or curTeam == None:
+ if curTeam == None:
#无队伍,添加个人伤害
AddHurtValue(curTagObj, curObj.GetPlayerID(), ChConfig.Def_NPCHurtTypePlayer, hurtHP)
return True
@@ -798,10 +681,6 @@
#if not CheckAttackNPCByCnt(attacker, defender):
# return False
- #击杀次数判断
- if not NPCHurtManager.IsAssistPlayer(attacker.GetPlayerID(), defender) and not CheckKillNPCByCnt(attacker, defender):
- return False
-
#仙盟归属NPC判断
if not CheckCanAttackFamilyOwnerNPC(attacker, defender):
return False
@@ -812,10 +691,6 @@
#if not CheckAttackNPCByCnt(defender, attacker, False):
# return False
- #击杀次数判断
- if not CheckKillNPCByCnt(defender, attacker, False) and not NPCHurtManager.IsAssistPlayer(defender.GetPlayerID(), attacker):
- return False
-
#仙盟归属NPC判断
if not CheckCanAttackFamilyOwnerNPC(defender, attacker, False):
return False
@@ -823,11 +698,11 @@
# NPC打NPC
elif atkObjType == IPY_GameWorld.gotNPC and defObjType == IPY_GameWorld.gotNPC:
if PetControl.IsPet(attacker) or attacker.GetGameNPCObjType()== IPY_GameWorld.gnotSummon:
- #击杀次数判断
- if not CheckKillNPCByCnt(attacker, defender, False):
- ownerPlayer = GetAttackPlayer(attacker)[0]
- if ownerPlayer and not NPCHurtManager.IsAssistPlayer(ownerPlayer.GetPlayerID(), defender):
- return False
+ ##击杀次数判断
+ #if not CheckKillNPCByCnt(attacker, defender, False):
+ # ownerPlayer = GetAttackPlayer(attacker)[0]
+ # if ownerPlayer and not NPCHurtManager.IsAssistPlayer(ownerPlayer.GetPlayerID(), defender):
+ # return False
#仙盟归属NPC判断
if not CheckCanAttackFamilyOwnerNPC(attacker, defender, False):
@@ -940,28 +815,15 @@
if not GameFuncComm.GetFuncCanUse(atkPlayer, funcID):
PlayerControl.NotifyCode(atkPlayer, funcSysMark)
return
- canKillCnt = BossHurtMng.GetCanKillBossCnt(atkPlayer, index)[0]
-
- if canKillCnt <= 0:
- #if BossHurtMng.GetPlayerBossHurt(atkPlayer, defender):
- # GameWorld.DebugLog("攻击过该boss可继续攻击")
- # return True
- #次数不足
- # 实际攻击者类型None则需要提示玩家
- if npcObjType is None:
- if isNotify:
- sysMark = IpyGameDataPY.GetFuncEvalCfg('KillBossCntLimit', 3, {}).get(index, '')
- PlayerControl.NotifyCode(atkPlayer, sysMark)
- return False
-
- npcDataEx = NPCCommon.GetNPCDataEx(npcID)
- if npcDataEx and npcDataEx.GetFightPowerLackAtkLimit():
- if npcDataEx.GetSuppressFightPower() > PlayerControl.GetFightPower(atkPlayer):
- if isNotify:
- PlayerControl.NotifyCode(atkPlayer, "BossFightPowerHint")
- #GameWorld.DebugLog("战力不足,无法攻击boss! npcID=%s,SuppressFightPower=%s > playerFightPower=%s"
- # % (npcID, npcDataEx.GetSuppressFightPower(), PlayerControl.GetFightPower(atkPlayer)))
- return False
+
+ #npcDataEx = NPCCommon.GetNPCDataPy(npcID)
+ #if npcDataEx and npcDataEx.GetFightPowerLackAtkLimit():
+ # if npcDataEx.GetSuppressFightPower() > PlayerControl.GetFightPower(atkPlayer):
+ # if isNotify:
+ # PlayerControl.NotifyCode(atkPlayer, "BossFightPowerHint")
+ # #GameWorld.DebugLog("战力不足,无法攻击boss! npcID=%s,SuppressFightPower=%s > playerFightPower=%s"
+ # # % (npcID, npcDataEx.GetSuppressFightPower(), PlayerControl.GetFightPower(atkPlayer)))
+ # return False
return True
@@ -988,9 +850,6 @@
hasAttackCnt = atkPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WorldBoss_HurtCnt, 0)
if hasAttackCnt >= limitCnt:
- #if BossHurtMng.GetPlayerBossHurt(atkPlayer, defender):
- # GameWorld.DebugLog("攻击过该boss可继续攻击")
- # return True
#次数不足
# 实际攻击者类型None则需要提示玩家
if npcObjType is None:
@@ -1205,18 +1064,20 @@
# @return True or False
# @remarks 函数详细说明.
def CheckNPCAttackDist(curNPC, curTag, skill):
- #获取距离
- dist = GameWorld.GetDist(curNPC.GetPosX(), curNPC.GetPosY(),
- curTag.GetPosX(), curTag.GetPosY())
- #普通攻击
- if skill == None:
- if dist > curNPC.GetAtkDist():
- return
- #技能攻击
- elif dist > skill.GetAtkDist():
- return
-
+ #卡牌暂不限制
return True
+# #获取距离
+# dist = GameWorld.GetDist(curNPC.GetPosX(), curNPC.GetPosY(),
+# curTag.GetPosX(), curTag.GetPosY())
+# #普通攻击
+# if skill == None:
+# if dist > curNPC.GetAtkDist():
+# return
+# #技能攻击
+# elif dist > skill.GetAtkDist():
+# return
+#
+# return True
## 检查被攻击后,特殊Buff消失
# @param curTagPlayer 被攻击方
@@ -1345,34 +1206,35 @@
hurtType = ChConfig.Def_HurtType_Normal
# 伤害类型结果信息, 默认值{伤害类型:[是否触发, 伤害计算值, 触发时防守方的伤害减免值], ...}
hurtTypeResultDict = {
- ChConfig.Def_HurtType_LuckyHit:[False, 0, 0],
+ #ChConfig.Def_HurtType_LuckyHit:[False, 0, 0],
ChConfig.Def_HurtType_SuperHit:[False, 0, 0],
ChConfig.Def_HurtType_Parry:[False, 0, 0],
- ChConfig.Def_HurtType_Zhuxian:[False, 0, 0],
- ChConfig.Def_HurtType_DeadlyHit:[False, 0, 0],
+ #ChConfig.Def_HurtType_Zhuxian:[False, 0, 0],
+ #ChConfig.Def_HurtType_DeadlyHit:[False, 0, 0],
ChConfig.Def_HurtType_ThumpHit:[False, 0, 0],
}
- calcTypeList = []
- if atkObjType == IPY_GameWorld.gotPlayer:
- calcTypeList += [ChConfig.Def_HurtType_LuckyHit, ChConfig.Def_HurtType_SuperHit,
- ChConfig.Def_HurtType_Zhuxian, ChConfig.Def_HurtType_DeadlyHit,
- ChConfig.Def_HurtType_ThumpHit]
- if defObjType == IPY_GameWorld.gotPlayer:
- calcTypeList += [ChConfig.Def_HurtType_Parry]
- # 暂时只计算玩家
+ #calcTypeList = []
+ #if atkObjType == IPY_GameWorld.gotPlayer:
+ # calcTypeList += [ChConfig.Def_HurtType_LuckyHit, ChConfig.Def_HurtType_SuperHit,
+ # ChConfig.Def_HurtType_Zhuxian, ChConfig.Def_HurtType_DeadlyHit,
+ # ChConfig.Def_HurtType_ThumpHit]
+ #if defObjType == IPY_GameWorld.gotPlayer:
+ # calcTypeList += [ChConfig.Def_HurtType_Parry]
+ calcTypeList = [ChConfig.Def_HurtType_SuperHit, ChConfig.Def_HurtType_Parry]
if not calcTypeList:
return hurtType, hurtTypeResultDict
- # 优先级列表, 互斥列表
- priorityList, mutexList = ReadChConfig.GetEvalChConfig("CalcHurtTypeInfo")
+ # 优先级列表
+ priorityList = [ChConfig.Def_HurtType_Parry, ChConfig.Def_HurtType_SuperHit]
+ mutexList = [] # 互斥列表
happenFunc = {
- ChConfig.Def_HurtType_LuckyHit:__HurtTypeHappen_LuckyHit,
+ #ChConfig.Def_HurtType_LuckyHit:__HurtTypeHappen_LuckyHit,
ChConfig.Def_HurtType_SuperHit:__HurtTypeHappen_SuperHit,
ChConfig.Def_HurtType_Parry:__HurtTypeHappen_Parry,
#ChConfig.Def_HurtType_Zhuxian:__HurtTypeHappen_Zhuxian,
- ChConfig.Def_HurtType_DeadlyHit:__HurtTypeHappen_Deadly,
- ChConfig.Def_HurtType_ThumpHit:__HurtTypeHappen_ThumpHit,
+ #ChConfig.Def_HurtType_DeadlyHit:__HurtTypeHappen_Deadly,
+ #ChConfig.Def_HurtType_ThumpHit:__HurtTypeHappen_ThumpHit,
}
hadCheckList = [] # 已经处理过的伤害类型列表
@@ -1410,35 +1272,16 @@
return hurtType, hurtTypeResultDict
-
-def __HurtTypeHappen_LuckyHit(atkObj, defObj, happenState, curSkill):
- ''' 判断伤害类型是否发生 - 会心一击
- @return: 是否触发, 触发时伤害计算固定值, 触发时防守方的伤害减免固定值
- '''
- if IsHappenStateByType(happenState, ChConfig.Def_Skill_HappenState_LuckyHit):
- return True, atkObj.GetLuckyHitVal(), PlayerControl.GetLuckyHitReduce(defObj)
-
- aLuckyHitRate = atkObj.GetLuckyHitRate()
- dLuckyHitRateReduce = PlayerControl.GetLuckyHitRateReduce(defObj)
-
-
- atkLuckyHitRate = eval(ReadChConfig.GetChConfig("CalcLuckyHitRate"))
- if atkLuckyHitRate <= 0:
- return
- if GameWorld.CanHappen(atkLuckyHitRate):
- return True, atkObj.GetLuckyHitVal(), PlayerControl.GetLuckyHitReduce(defObj)
- return
-
def __HurtTypeHappen_SuperHit(atkObj, defObj, happenState, curSkill):
''' 判断伤害类型是否发生 - 暴击
@return: 是否触发, 触发时伤害计算固定值, 触发时防守方的伤害减免固定值
'''
if IsHappenStateByType(happenState, ChConfig.Def_Skill_HappenState_SuperHit):
- return True, atkObj.GetSuperHit(), PlayerControl.GetSuperHitReduce(defObj)
+ return True, atkObj.GetSuperHit(), GameObj.GetSuperHitReduce(defObj)
aSuperHitRate = atkObj.GetSuperHitRate()
- dSuperHitRateReduce = PlayerControl.GetSuperHitRateReduce(defObj)
+ dSuperHitRateReduce = GameObj.GetSuperHitRateReduce(defObj)
superHitRate = eval(ReadChConfig.GetChConfig("CalcSuperHitRate"))
superHitRate += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill,
ChConfig.TriggerType_Buff_AddSuperHitRate)
@@ -1447,29 +1290,19 @@
if superHitRate <= 0:
return
if GameWorld.CanHappen(superHitRate):
- return True, atkObj.GetSuperHit(), PlayerControl.GetSuperHitReduce(defObj)
+ return True, atkObj.GetSuperHit(), GameObj.GetSuperHitReduce(defObj)
return
def __HurtTypeHappen_Parry(atkObj, defObj, happenState, curSkill):
''' 判断伤害类型是否发生 - 防守方抵御
@return: 是否触发, 触发时伤害计算值, 触发时防守方的伤害减免值
'''
- chanceDefPer = PlayerControl.GetDamChanceDef(defObj)
- if not chanceDefPer:
- return
- if GameWorld.CanHappen(ChConfig.Def_ChanceDefRate):
- return True, 0, chanceDefPer
- return
-
-#def __HurtTypeHappen_Zhuxian(atkObj, defObj, happenState, curSkill):
-# """诛仙一击"""
-# rate = PlayerControl.GetZhuXianRate(atkObj)
-# if not rate:
+# chanceDefPer = PlayerControl.GetDamChanceDef(defObj)
+# if not chanceDefPer:
# return
-#
-# if GameWorld.CanHappen(rate):
-# return True, PlayerControl.GetZhuXianHurtPer(atkObj), 0
-# return
+# if GameWorld.CanHappen(ChConfig.Def_ChanceDefRate):
+# return True, 0, chanceDefPer
+ return
# 致命一击
def __HurtTypeHappen_Deadly(atkObj, defObj, happenState, curSkill):
@@ -1482,7 +1315,7 @@
def __HurtTypeHappen_ThumpHit(atkObj, defObj, happenState, curSkill):
if IsHappenStateByType(happenState, ChConfig.Def_Skill_HappenState_ThumpHit):
- return True, int(atkObj.GetSuperHit()*1.5), PlayerControl.GetSuperHitReduce(defObj)
+ return True, int(atkObj.GetSuperHit()*1.5), GameObj.GetSuperHitReduce(defObj)
thumpHitRate = 0
thumpHitRate += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill,
@@ -1492,7 +1325,7 @@
if thumpHitRate <= 0:
return
if GameWorld.CanHappen(thumpHitRate):
- return True, atkObj.GetSuperHit()*2, PlayerControl.GetSuperHitReduce(defObj)
+ return True, atkObj.GetSuperHit()*2, GameObj.GetSuperHitReduce(defObj)
return
@@ -1514,21 +1347,21 @@
if defObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
reducePer = SkillCommon.GetSkillReducePerByID(defObj, skillTypeID)
- #根据防守方职业 计算攻击方伤害加成
- if defObj.GetJob() in [ShareDefine.PlayerJob_Warrior, ShareDefine.PlayerJob_Knight]:
- addPer += PlayerControl.GetJobAHurtAddPer(atkObj)
- elif defObj.GetJob() in [ShareDefine.PlayerJob_Wizard, ShareDefine.PlayerJob_ForceUser]:
- addPer += PlayerControl.GetJobBHurtAddPer(atkObj)
- elif defObj.GetJob() in [ShareDefine.PlayerJob_Assassin, ShareDefine.PlayerJob_BowMaster]:
- addPer += PlayerControl.GetJobCHurtAddPer(atkObj)
-
- #根据攻击方职业 计算防守方伤害减免
- if atkObj.GetJob() in [ShareDefine.PlayerJob_Warrior, ShareDefine.PlayerJob_Knight]:
- reducePer += PlayerControl.GetJobAAtkReducePer(defObj)
- elif atkObj.GetJob() in [ShareDefine.PlayerJob_Wizard, ShareDefine.PlayerJob_ForceUser]:
- reducePer += PlayerControl.GetJobBAtkReducePer(defObj)
- elif atkObj.GetJob() in [ShareDefine.PlayerJob_Assassin, ShareDefine.PlayerJob_BowMaster]:
- reducePer += PlayerControl.GetJobCAtkReducePer(defObj)
+# #根据防守方职业 计算攻击方伤害加成
+# if defObj.GetJob() in [ShareDefine.PlayerJob_Warrior, ShareDefine.PlayerJob_Knight]:
+# addPer += PlayerControl.GetJobAHurtAddPer(atkObj)
+# elif defObj.GetJob() in [ShareDefine.PlayerJob_Wizard, ShareDefine.PlayerJob_ForceUser]:
+# addPer += PlayerControl.GetJobBHurtAddPer(atkObj)
+# elif defObj.GetJob() in [ShareDefine.PlayerJob_Assassin, ShareDefine.PlayerJob_BowMaster]:
+# addPer += PlayerControl.GetJobCHurtAddPer(atkObj)
+#
+# #根据攻击方职业 计算防守方伤害减免
+# if atkObj.GetJob() in [ShareDefine.PlayerJob_Warrior, ShareDefine.PlayerJob_Knight]:
+# reducePer += PlayerControl.GetJobAAtkReducePer(defObj)
+# elif atkObj.GetJob() in [ShareDefine.PlayerJob_Wizard, ShareDefine.PlayerJob_ForceUser]:
+# reducePer += PlayerControl.GetJobBAtkReducePer(defObj)
+# elif atkObj.GetJob() in [ShareDefine.PlayerJob_Assassin, ShareDefine.PlayerJob_BowMaster]:
+# reducePer += PlayerControl.GetJobCAtkReducePer(defObj)
if addPer or reducePer:
addSkillPer = addPer - reducePer
@@ -1651,25 +1484,7 @@
# 攻击时防守方神兵护盾的处理
def CalcAtkProDef(atkObj, defObj, hurtValue, curSkill, tick):
- if defObj.GetGameObjType() != IPY_GameWorld.gotPlayer:
- return hurtValue
-
- if not CheckIsPlayerOnwer(atkObj):
- return hurtValue
-
- curProDef = PlayerControl.GetProDef(defObj)
- if not curProDef:
- return hurtValue
-
- absortValue = min(PlayerControl.GetProDefAbsorb(defObj)*hurtValue/ChConfig.Def_MaxRateValue, curProDef)
-
- PlayerControl.SetProDef(defObj, curProDef - absortValue)
-
- # 被动技能触发
- defObj.SetDict(ChConfig.Def_PlayerKey_GodWeaponBeforeProDef, curProDef)
- PassiveBuffEffMng.OnPassiveSkillTrigger(defObj, atkObj, None, ChConfig.TriggerType_ProDefValue, tick)
- return hurtValue - absortValue
-
+ return hurtValue
# 设置玩家一次主动型攻击中的第一个防御者
def SetFirstDefender(attacker, defObj, curSkill):
@@ -1677,7 +1492,7 @@
return
if curSkill and curSkill.GetFuncType() not in [ChConfig.Def_SkillFuncType_FbSkill,
- ChConfig.Def_SkillFuncType_NormalAttack]:
+ ChConfig.Def_SkillFuncType_TurnNormaSkill]:
return
if attacker.GetDictByKey(ChConfig.Def_PlayerKey_FirstDefender):
@@ -1791,10 +1606,6 @@
#设置宠物剩余血量
PetControl.SetPetHP(defObj, remainHP)
- elif defObj.GetGameNPCObjType() == IPY_GameWorld.gnotTruck:
- remainHP = max(PlayerTruck.GetTruckDestroyMinHP(defObj), remainHP)
- GameObj.SetHP(defObj, remainHP)
-
elif defObj.GetType() == ChConfig.ntHelpBattleRobot:
remainHP = min(dHP, max(GameObj.GetMaxHP(defObj)/2, remainHP)) # 助战机器人剩余血量不能少于一半
GameObj.SetHP(defObj, remainHP)
@@ -1852,20 +1663,20 @@
fightPowerMax = ipyData.GetFightPowerMax()
everyFightPower = ipyData.GetEveryFightPower()
everyFightPowerLostHPEx = ipyData.GetEveryFightPowerLostHPEx()
- if fightPowerMinByLV and fightPowerMin:
- npcLV = NPCCommon.GetNPCLV(curNPC)
- playerCurLVIpyData = PlayerControl.GetPlayerLVIpyData(npcLV)
- if not playerCurLVIpyData:
- return
- ReFightPower = playerCurLVIpyData.GetReFightPower() # 战斗力
- reRate = ReFightPower / float(fightPowerMin)
- #GameWorld.DebugLog("标准战力需要取等级表: fightPowerMin=%s,fightPowerMax=%s,everyFightPower=%s,npcLV=%s,ReFightPower=%s,reRate=%s"
- # % (fightPowerMin, fightPowerMax, everyFightPower, npcLV, ReFightPower, reRate))
- fightPowerMin = ReFightPower
- fightPowerMax = int(fightPowerMax * reRate)
- everyFightPower = int(everyFightPower * reRate)
- #GameWorld.DebugLog("按比例更新战力值信息: fightPowerMin=%s,fightPowerMax=%s,everyFightPower=%s"
- # % (fightPowerMin, fightPowerMax, everyFightPower))
+ #if fightPowerMinByLV and fightPowerMin:
+ # npcLV = NPCCommon.GetNPCLV(curNPC)
+ # playerCurLVIpyData = PlayerControl.GetPlayerLVIpyData(npcLV)
+ # if not playerCurLVIpyData:
+ # return
+ # ReFightPower = playerCurLVIpyData.GetReFightPower() # 战斗力
+ # reRate = ReFightPower / float(fightPowerMin)
+ # #GameWorld.DebugLog("标准战力需要取等级表: fightPowerMin=%s,fightPowerMax=%s,everyFightPower=%s,npcLV=%s,ReFightPower=%s,reRate=%s"
+ # # % (fightPowerMin, fightPowerMax, everyFightPower, npcLV, ReFightPower, reRate))
+ # fightPowerMin = ReFightPower
+ # fightPowerMax = int(fightPowerMax * reRate)
+ # everyFightPower = int(everyFightPower * reRate)
+ # #GameWorld.DebugLog("按比例更新战力值信息: fightPowerMin=%s,fightPowerMax=%s,everyFightPower=%s"
+ # # % (fightPowerMin, fightPowerMax, everyFightPower))
effFightPower = curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_TimeLostHPFightPower) \
+ curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_TimeLostHPFightPowerEx) * ChConfig.Def_PerPointValue
@@ -2029,9 +1840,6 @@
# 计算攻击伤害
# maxHurt参数用于模拟计算最大伤害,防范客户端攻击伤害过高
def CalcHurtHP(atkObj, defObj, curSkill, atkSkillValue, atkSkillPer, tick, happenState=None, **atkwargs):
- # 翻滚闪避特殊处理
- if tick - defObj.GetDictByKey(ChConfig.Def_PlayerKey_SomersaultTime) < 500:
- return 0, ChConfig.Def_HurtType_Miss
multiValue = 1 # 伤害倍值
summonAtkPer = 1 # 召唤继承提高基础攻击力,取表
@@ -2049,106 +1857,61 @@
atkObjType = atkObj.GetGameObjType()
defObjType = defObj.GetGameObjType()
-
- aRealmLV, dRealmLV = GetPVERealmLVs(atkObj, defObj, atkObjType, defObjType) # 获取境界
- if defObjType == IPY_GameWorld.gotNPC and ChConfig.IsGameBoss(defObj) and dRealmLV > aRealmLV:
- aRealmIpyData = IpyGameDataPY.GetIpyGameDataNotLog("Realm", aRealmLV)
- dRealmIpyData = IpyGameDataPY.GetIpyGameDataNotLog("Realm", dRealmLV)
- aRealmLVLarge = aRealmIpyData.GetLvLarge() if aRealmIpyData else 0
- dRealmLVLarge = dRealmIpyData.GetLvLarge() if dRealmIpyData else 0
- if dRealmLVLarge > aRealmLVLarge:
- if atkObjType == IPY_GameWorld.gotPlayer:
- GameWorld.DebugLog("BossRealmHint%s-%s"%(dRealmLV, aRealmLV))
- PlayerControl.NotifyCode(atkObj, 'BossRealmHint', [dRealmLVLarge])
-
- # 攻击高境界的BOSS 伤害固定为1
- return 1, ChConfig.Def_HurtType_Normal
-
+
atkType = GetBattleType(atkObj, curSkill)
happenState = happenState if happenState else SkillShell.GetHappenState(curSkill)
happenState += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_HappenState)
-
- aLV = atkObj.GetLV() # 攻击方等级
- dLV = defObj.GetLV() # 防守方等级
-
- aHit = atkObj.GetHit()
- if curSkill and atkObjType == IPY_GameWorld.gotPlayer and curSkill.GetFuncType() != ChConfig.Def_SkillFuncType_NormalAttack:
- aHit = aHit*IpyGameDataPY.GetFuncCfg("FightHappenRate", 2)
-
- aHitSuccessRate = PlayerControl.GetHitSucessRate(atkObj) if atkObjType == IPY_GameWorld.gotPlayer else ChConfig.Def_MaxRateValue
- aHitSuccessRate += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_HitSuccess)
- dMiss = defObj.GetMiss()
+
+ atkID = atkObj.GetID()
+ defID = defObj.GetID()
+ #aLV = atkObj.GetLV() # 攻击方等级
+ #dLV = defObj.GetLV() # 防守方等级
+
+ aHit = GameObj.GetMissDefRate(atkObj)#atkObj.GetHit() # 抗闪避率 - 命中
+ #aHitSuccessRate = PlayerControl.GetHitSucessRate(atkObj) if atkObjType == IPY_GameWorld.gotPlayer else ChConfig.Def_MaxRateValue
+ #aHitSuccessRate += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_HitSuccess)
+ dMiss = GameObj.GetMissRate(defObj)#defObj.GetMiss()
dMiss += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_MissPer)
- dMissSuccessRate = PlayerControl.GetMissSucessRate(defObj) if defObjType == IPY_GameWorld.gotPlayer else 0
- dMissSuccessRate += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_MissSuccessPer)
+ #dMissSuccessRate = PlayerControl.GetMissSucessRate(defObj) if defObjType == IPY_GameWorld.gotPlayer else 0
+ #dMissSuccessRate += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_MissSuccessPer)
skillID = curSkill.GetSkillID() if curSkill else 0
-
atkIsBoss = 0 # 攻击方是否boss
- suppressValueLV = 0 # 等级最终压制值, 由压制规则及相关参数计算得出,可作为伤害公式计算参数使用
- suppressValueFP = 0 # 战力最终压制值, 由压制规则及相关参数计算得出,可作为伤害公式计算参数使用
- suppressLV, suppressFightPower = 0, 0 # 压制等级差、战力差
- suppressReMaxHP = 0 # NPC压制等级生命值, 等级表中NPC等级对应的数据, 压制等级差大于0时才有值
- suppressNPCFightPower = 0 # 压制NPC战力
- fbFightPower, fbBaseHurt = 0, 0 # 副本战力, 副本保底伤害
- #当攻击方为NPC,防守方为玩家时,计算压制等级 及 压制战力
- if atkObjType == IPY_GameWorld.gotNPC and defObjType == IPY_GameWorld.gotPlayer:
-
- if curSkill and curSkill.GetFuncType() == ChConfig.Def_SkillFuncType_RealmSuppress:
- # 境界压制技能不对高等级境界玩家产生攻击
- aRealmLV, dRealmLV = GetPVERealmLVs(atkObj, defObj, atkObjType, defObjType)
- if aRealmLV <= dRealmLV:
- return 0, ChConfig.Def_HurtType_Immune # 免疫
-
- atkIsBoss = 1 if ChConfig.IsGameBoss(atkObj) else 0
- if NPCCommon.GetIsLVSuppress(atkObj):
- suppressLV = max(0, aLV - dLV)
- if suppressLV:
- suppressLVIpyData = PlayerControl.GetPlayerLVIpyData(aLV)
- suppressReMaxHP = 0 if not suppressLVIpyData else suppressLVIpyData.GetReMaxHP()
- suppressNPCFightPower = NPCCommon.GetSuppressFightPower(atkObj)
- if suppressNPCFightPower:
- suppressFightPower = max(0, suppressNPCFightPower - PlayerControl.GetFightPower(defObj))
-
- mustHit = False
- helpBattleFormatKey = ""
- if atkObjType == IPY_GameWorld.gotNPC and atkObj.GetType() == ChConfig.ntHelpBattleRobot:
- mustHit = True
- suppressNPCFightPower = NPCCommon.GetSuppressFightPower(atkObj)
- fbFightPower = GameWorld.GetGameFB().GetGameFBDictByKey(ChConfig.FBPD_HelpBattleFBFightPower)
- fbBaseHurt = GameWorld.GetGameFB().GetGameFBDictByKey(ChConfig.FBPD_HelpBattleFBBaseHurt)
- helpBattleFormatKey = "HelpRobot_Atk"
- if defObjType == IPY_GameWorld.gotNPC and defObj.GetType() == ChConfig.ntHelpBattleRobot:
- mustHit = True
- suppressNPCFightPower = NPCCommon.GetSuppressFightPower(defObj)
- fbFightPower = GameWorld.GetGameFB().GetGameFBDictByKey(ChConfig.FBPD_HelpBattleFBFightPower)
- fbBaseHurt = GameWorld.GetGameFB().GetGameFBDictByKey(ChConfig.FBPD_HelpBattleFBBaseHurt)
- helpBattleFormatKey = "HelpRobot_Def"
-
- #命中公式 攻击方类型不同,公式不同
- hitFormula = ReadChConfig.GetChConfig('CalcCanHit')
+ angerOverflow = 0 # 怒气溢出值
+ turnFightPosInfo = atkObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnFightPosInfo)
+ mustHit = False
+ if SkillCommon.isAngerSkill(curSkill):
+ mustHit = True
+ GameWorld.DebugLog(" XP必命中")
+ angerOverflow = max(GameObj.GetXP(atkObj) - IpyGameDataPY.GetFuncCfg("AngerXP", 2), 0)
+
+ if not mustHit:
+ if IsHappenStateByType(happenState, ChConfig.Def_Skill_HappenState_HitOn):
+ mustHit = True
+ GameWorld.DebugLog(" 技能必命中: skillID=%s" % skillID)
+
+ pow = math.pow
+ #命中公式 攻击方类型不同,公式不同
if not mustHit and not PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill,
ChConfig.TriggerType_Buff_MustBeHit):
# 技能对指定BOSS无效果的返回MISS
- if defObjType == IPY_GameWorld.gotNPC and defObj.GetIsBoss() not in ChConfig.Def_SkillAttack_NPCIsBoss \
- and SkillCommon.GetSkillBattleType(curSkill) == ChConfig.Def_BattleRelationType_CommNoBoss and SkillShell.IsNPCSkillResist(defObj):
- return 0, ChConfig.Def_HurtType_Miss
+ #if defObjType == IPY_GameWorld.gotNPC and defObj.GetIsBoss() not in ChConfig.Def_SkillAttack_NPCIsBoss \
+ #and SkillCommon.GetSkillBattleType(curSkill) == ChConfig.Def_BattleRelationType_CommNoBoss and SkillShell.IsNPCSkillResist(defObj):
+ # return 0, ChConfig.Def_HurtType_Miss
#攻击方处于嘲讽,防守方处于免疫嘲讽者攻击则miss
- if GameObj.GetPyPlayerState(atkObj, ChConfig.Def_PlayerState_Sneer) and \
- GameObj.GetPyPlayerState(defObj, ChConfig.Def_PlayerState_MissSneerAtk):
+ #if GameObj.GetPyPlayerState(atkObj, ChConfig.Def_PlayerState_Sneer) and \
+ #GameObj.GetPyPlayerState(defObj, ChConfig.Def_PlayerState_MissSneerAtk):
+ # return 0, ChConfig.Def_HurtType_Miss
+
+ missNum = defObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnMissNum)
+ missRate = eval(IpyGameDataPY.GetFuncCompileCfg("MissCfg", 1))
+ if GameWorld.CanHappen(missRate):
return 0, ChConfig.Def_HurtType_Miss
- #添加是否必命中
- if not IsHappenStateByType(happenState, ChConfig.Def_Skill_HappenState_HitOn) \
- and eval(hitFormula) < 0:
- return 0, ChConfig.Def_HurtType_Miss
-
-
hurtType, hurtTypeResultDict = CalcHurtTypeResult(atkObj, defObj, atkObjType, defObjType, happenState, curSkill)
#GameWorld.DebugLog("GetHurtHP hurtType=%s, hurtTypeResultDict=%s" % (hurtType, hurtTypeResultDict))
- isLuckyHit, aLuckyHit, dLuckyHitReduce = hurtTypeResultDict[ChConfig.Def_HurtType_LuckyHit] # 幸运一击
# 重击和暴击互斥,并且使用同一个参数
isSuperHit, aSuperHit, dSuperHitReduce = hurtTypeResultDict[ChConfig.Def_HurtType_ThumpHit]
@@ -2168,30 +1931,24 @@
aSuperHit = aSuperHit*(thumpPer + ChConfig.Def_MaxRateValue)/ChConfig.Def_MaxRateValue
dDamChanceDef = hurtTypeResultDict[ChConfig.Def_HurtType_Parry][2] # 抵御, 大于0代表触发抵御效果
- isZhuxianHit, aZhuxianHurtPer, dZhuxianReducePer = hurtTypeResultDict[ChConfig.Def_HurtType_Zhuxian] # 诛仙一击
- isDeadlyHit, deadlyHitMultiValue, _ = hurtTypeResultDict[ChConfig.Def_HurtType_DeadlyHit] # 致命一击
-
+ #isZhuxianHit, aZhuxianHurtPer, dZhuxianReducePer = hurtTypeResultDict[ChConfig.Def_HurtType_Zhuxian] # 诛仙一击
+ #isDeadlyHit, deadlyHitMultiValue, _ = hurtTypeResultDict[ChConfig.Def_HurtType_DeadlyHit] # 致命一击
+
if PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_OneDamage):
return 1, hurtType
-
- wReFightPower = 0
- worldLV = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv)
- if worldLV:
- wLVIpyData = PlayerControl.GetPlayerLVIpyData(worldLV)
- wReFightPower = 0 if not wLVIpyData else wLVIpyData.GetReFightPower() # 当前世界等级参考战力
# 改变技能伤害
atkSkillPer, atkSkillValue = ChangeSkillHurt(atkObj, defObj, curSkill, atkSkillPer, atkSkillValue)
atkSkillPer = ChangeSkillHurtPer(atkObj, defObj, curSkill, atkSkillPer)
# --- 新增普通攻击的数值和技能攻击的数值,根据类型各自计算
- if atkObjType == IPY_GameWorld.gotPlayer:
- if not curSkill or curSkill.GetFuncType() == ChConfig.Def_SkillFuncType_NormalAttack:
- atkSkillPer += PlayerControl.GetNormalHurtPer(atkObj)
- atkSkillValue += PlayerControl.GetNormalHurt(atkObj)
- elif curSkill.GetFuncType() in [ChConfig.Def_SkillFuncType_FbSkill, ChConfig.Def_SkillFuncType_FbPassiveSkill]:
- atkSkillPer += PlayerControl.GetFabaoHurtPer(atkObj)
- atkSkillValue += PlayerControl.GetFabaoHurt(atkObj)
+ #if atkObjType == IPY_GameWorld.gotPlayer:
+ # if not curSkill or curSkill.GetFuncType() == ChConfig.Def_SkillFuncType_TurnNormaSkill:
+ # atkSkillPer += PlayerControl.GetNormalHurtPer(atkObj)
+ # atkSkillValue += PlayerControl.GetNormalHurt(atkObj)
+ # elif curSkill.GetFuncType() in [ChConfig.Def_SkillFuncType_FbSkill, ChConfig.Def_SkillFuncType_FbPassiveSkill]:
+ # atkSkillPer += PlayerControl.GetFabaoHurtPer(atkObj)
+ # atkSkillValue += PlayerControl.GetFabaoHurt(atkObj)
atkSkillValue += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_SkillValue)
atkSkillValue += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_SkillValue)
@@ -2213,56 +1970,47 @@
PassiveBuffEffMng.OnPassiveBuffTrigger(atkObj, defObj, curSkill, ChConfig.TriggerType_SuperHitSubLayer, tick)
elif hurtType == ChConfig.Def_HurtType_ThumpHit:
atkSkillValue += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_ThumpSkillValue)
-
- if isLuckyHit:
- # 会心一击时增加会心伤害固定值
- aLuckyHit += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_LuckyHit)
- aLuckyHit -= PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(defObj, atkObj, curSkill, ChConfig.TriggerType_BeLuckyHitSubPer)
- aLuckyHit = max(aLuckyHit, 0)
-
+
#参与运算的数值
rand = random.random() #种子数 0~1
#------- 攻击方
- aMinAtk = atkObj.GetMinAtk() * summonAtkPer # 攻击方最小攻击
- aMaxAtk = atkObj.GetMaxAtk() * summonAtkPer # 攻击方最大攻击
+ #aMinAtk = atkObj.GetMinAtk() * summonAtkPer # 攻击方最小攻击
+ aAtk = atkObj.GetMaxAtk() * summonAtkPer # 攻击方最大攻击
aIceAtk = atkObj.GetIceAtk() # 冰攻, 元素真伤, 玩家及NPC通用
aIceAtk += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AddIceAtk)
#------- 防守方
- dMinAtk = defObj.GetMinAtk() # 防守方最小攻击
- dMaxAtk = defObj.GetMaxAtk() # 防守方最大攻击
+ #dMinAtk = defObj.GetMinAtk() # 防守方最小攻击
+ #dAtk = defObj.GetMaxAtk() # 防守方最大攻击
dDef = defObj.GetDef() # 防守方防御力
- dHP = GameObj.GetHP(defObj) # 防守方当前血量
- dMaxHP = GameObj.GetMaxHP(defObj) # 防守方最大血量
+ #dHP = GameObj.GetHP(defObj) # 防守方当前血量
+ #dMaxHP = GameObj.GetMaxHP(defObj) # 防守方最大血量
dIceDef = defObj.GetIceDef() # 冰防, 元素真防, 玩家及NPC通用
# 攻击方
+ aNormalAtkPer = 0
+ aFinalHurtPer = GameObj.GetFinalHurtPer(atkObj) # 最外层伤害加成, 可能为负值
+ aFinalHurtPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackAddFinalPer)
if atkObjType == IPY_GameWorld.gotPlayer:
aIgnoreDefRate = atkObj.GetIgnoreDefRate() # 无视防御比率
aSkillAtkRate = atkObj.GetSkillAtkRate() # 技能攻击力加成
- aDamagePVP = PlayerControl.GetDamagePVP(atkObj) # PVP固定伤害
- aDamagePVE = PlayerControl.GetDamagePVE(atkObj) # PVE固定伤害
+ aDamagePVP = 0 #PlayerControl.GetDamagePVP(atkObj) # PVP固定伤害
+ aDamagePVE = 0 #PlayerControl.GetDamagePVE(atkObj) # PVE固定伤害
- aNPCHurtAddPer = PlayerControl.GetNPCHurtAddPer(atkObj) # PVE伤害加成
- aDamagePerPVP = PlayerControl.GetDamagePerPVP(atkObj) # 外层PVP伤害加成
+ aNPCHurtAddPer = 0 #PlayerControl.GetNPCHurtAddPer(atkObj) # PVE伤害加成
+ aDamagePerPVP = 0 #PlayerControl.GetDamagePerPVP(atkObj) # 外层PVP伤害加成
aDamagePerPVP += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AddPVPDamagePer)
- aFinalHurtPer = PlayerControl.GetFinalHurtPer(atkObj) # 最外层伤害加成, 可能为负值
- aFinalHurtPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackAddFinalPer)
- aFinalHurt = PlayerControl.GetFinalHurt(atkObj) # 最终固定伤害
+ aFinalHurt = 0#PlayerControl.GetFinalHurt(atkObj) # 最终固定伤害
# 被动增加最终伤害
aFinalHurt += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackAddFinalValue)
aFinalHurt += PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_AttackAddFinalValue)
- aOnlyFinalHurt = PlayerControl.GetOnlyFinalHurt(atkObj) # 额外固定伤害
+ aOnlyFinalHurt = 0 #PlayerControl.GetOnlyFinalHurt(atkObj) # 额外固定伤害
aFightPower = PlayerControl.GetFightPower(atkObj)
-
-
-
else:
aIgnoreDefRate = 0 # 无视防御比率
- aFinalHurtPer = GameObj.GetPetDamPer(atkObj) # 最外层伤害加成, 可能为负值
aSkillAtkRate = NPCCommon.GetSkillAtkRate(atkObj) # 技能攻击力加成
if atkObjType == IPY_GameWorld.gotNPC and atkObj.GetGameNPCObjType() == IPY_GameWorld.gnotPet:
aSkillAtkRate += atkObj.GetSkillAtkRate()
@@ -2272,21 +2020,23 @@
aDamagePVP = 0 # PVP固定伤害
aDamagePVE = 0 # PVE固定伤害
aFinalHurt = NPCCommon.GetFinalHurt(atkObj) # 最终固定伤害
+ aOnlyFinalHurt = 0 # 额外固定伤害
aFightPower = NPCCommon.GetSuppressFightPower(atkObj)
#防守方的类型
+ dNormalAtkDefPer = 0
+ dFinalHurtReducePer = GameObj.GetFinalHurtReducePer(defObj)
+ dFinalHurtReducePer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, curSkill, ChConfig.TriggerType_dFinalHurtReducePer)
if defObjType == IPY_GameWorld.gotPlayer:
- dIgnoreDefRateReduce = PlayerControl.GetIgnoreDefRateReduce(defObj) # 无视防御比率抗性
- dSkillAtkRateReduce = PlayerControl.GetSkillAtkRateReduce(defObj) # 技能攻击力减少
- dDamagePVPReduce = PlayerControl.GetDamagePVPReduce(defObj) # PVP固定减伤
+ dIgnoreDefRateReduce = 0 #PlayerControl.GetIgnoreDefRateReduce(defObj) # 无视防御比率抗性
+ dSkillAtkRateReduce = 0 #PlayerControl.GetSkillAtkRateReduce(defObj) # 技能攻击力减少
+ dDamagePVPReduce = 0 #PlayerControl.GetDamagePVPReduce(defObj) # PVP固定减伤
#dDamReduce += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_DamageReduce)
- dDamagePerPVPReduce = PlayerControl.GetDamagePerPVPReduce(defObj) # 外层PVP减伤
+ dDamagePerPVPReduce = 0 #PlayerControl.GetDamagePerPVPReduce(defObj) # 外层PVP减伤
dDamagePerPVPReduce += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_DamageReducePVP)
- dFinalHurtReduce = PlayerControl.GetFinalHurtReduce(defObj) # 最终固定伤害减少
- dBeHurtPer = PlayerControl.GetBeHurtPer(defObj) # 加深受到伤害百分比
+ dFinalHurtReduce = 0 #PlayerControl.GetFinalHurtReduce(defObj) # 最终固定伤害减少
+ dBeHurtPer = 0#PlayerControl.GetBeHurtPer(defObj) # 加深受到伤害百分比
dFightPower = PlayerControl.GetFightPower(defObj)
- dFinalHurtReducePer = PlayerControl.GetFinalHurtReducePer(defObj)
- dFinalHurtReducePer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, curSkill, ChConfig.TriggerType_dFinalHurtReducePer)
else:
dIgnoreDefRateReduce = 0 # 无视防御比率抗性
@@ -2296,108 +2046,52 @@
dFinalHurtReduce = 0 # 最终固定伤害减少
dBeHurtPer = 0
dFightPower = NPCCommon.GetSuppressFightPower(defObj)
- dFinalHurtReducePer = 0 # 最终伤害减少百分比 默认0
- #攻击字典 { 攻击类型 : '公式' }
- mapID = FBCommon.GetRecordMapID(GameWorld.GetMap().GetMapID())
- hurtDist = ReadChConfig.GetEvalChConfig('CalcAttackValue')
-
- if suppressLV:
- suppressFormulaKeyLV = "SuppressValueLV_%s" % (atkIsBoss)
- if suppressFormulaKeyLV in hurtDist:
- suppressLVFormula = hurtDist[suppressFormulaKeyLV]
- suppressValueLV = eval(FormulaControl.GetCompileFormula(suppressFormulaKeyLV, suppressLVFormula))
-
- if suppressFightPower:
- suppressFormulaKeyFP = "SuppressValueFP_%s" % (atkIsBoss)
- if suppressFormulaKeyFP in hurtDist:
- suppressFPFormula = hurtDist[suppressFormulaKeyFP]
- suppressValueFP = eval(FormulaControl.GetCompileFormula(suppressFormulaKeyFP, suppressFPFormula))
+ aPMHurtPer = 0 # 物法增伤
+ dPMHurtReduce = 0 # 物法减伤
+ if atkType == IPY_GameWorld.ghtMag: # 法伤
+ pass
+ else: # 物伤
+ pass
- # 境界压制规则
- # 1. 其中一方无境界等级则无效, 如普通NPC
- # 2. 宠物和召唤兽(如水元素)有效, 取主人
- # 3. 玩家地境界低于BOSS则伤害固定为1 (在函数入口处已处理)
- # 4. 其他情况统一境界压制 境界差*2%
- if aRealmLV == 0 or dRealmLV == 0:
- SuppressValueRealmRate = 10000
- else:
- suppressRealmRateMapKey = "SuppressValueRealm_%s" % mapID
- if suppressRealmRateMapKey not in hurtDist:
- suppressRealmRateMapKey = "SuppressValueRealm"
- SuppressValueRealmRate = int(eval(FormulaControl.GetCompileFormula(suppressRealmRateMapKey, hurtDist[suppressRealmRateMapKey])))
-
- # 骑宠争夺最终伤害衰减
- if defObjType == IPY_GameWorld.gotNPC and FamilyRobBoss.IsHorsePetRobBoss(defObj.GetNPCID()):
- ownerPlayer, npcObjType = GetAttackPlayer(atkObj)
-
- if ownerPlayer:
- findBuff = SkillCommon.FindBuffByID(ownerPlayer, ChConfig.Def_SkillID_HorsePetRobBossKillCntBuff)[0]
- if findBuff:
- reduceFinalHurtPer = findBuff.GetSkill().GetEffect(0).GetEffectValue(0)
- aFinalHurtPer -= reduceFinalHurtPer
+ # 所有万分率参数统一除10000.0
+ atkSkillPer /= 10000.0
+ aNormalAtkPer /= 10000.0
+ dNormalAtkDefPer /= 10000.0
+ aFinalHurtPer /= 10000.0
+ dFinalHurtReducePer /= 10000.0
- # 仙盟boss最终伤害加成
- if atkObjType == IPY_GameWorld.gotPlayer and mapID == ChConfig.Def_FBMapID_FamilyBossMap:
- aFinalHurtPer += PlayerControl.GetFamilyBossHurtPer(atkObj)
-
- if atkObjType == IPY_GameWorld.gotPlayer and defObjType == IPY_GameWorld.gotNPC and ChConfig.IsGameBoss(defObj):
- killBossCntLimitDict = IpyGameDataPY.GetFuncEvalCfg('KillBossCntLimit')
- limitIndex = GameWorld.GetDictValueByKey(killBossCntLimitDict, defObj.GetNPCID())
- if limitIndex != None:
- aFinalHurtPer += PlayerControl.GetBossFinalHurtPer(atkObj)
-
- atkStateMark = GetObjAtkStateMark(atkObj)
- defStateMark = GetObjAtkStateMark(defObj)
- hurtFormulaKey = "%sV%s_%s" % (atkStateMark, defStateMark, atkType)
+ #PVP PVE 之后再扩展
+ #atkStateMark = GetObjAtkStateMark(atkObj)
+ #defStateMark = GetObjAtkStateMark(defObj)
- suppressLVGroup = 0 # NPC压制等级组编号
- mapHurtKey = "%s_%s" % (hurtFormulaKey, mapID)
- if mapHurtKey in hurtDist:
- hurtFormulaKey = mapHurtKey
- elif atkStateMark == "E" and defStateMark == "P":
- suppressLVGroup = NPCCommon.GetIsLVSuppress(atkObj)
- elif atkStateMark == "P" and defStateMark == "E":
- suppressLVGroup = NPCCommon.GetIsLVSuppress(defObj)
-
- if suppressLVGroup:
- suppressLVHurtKey = "%s_%s" % (hurtFormulaKey, suppressLVGroup)
- if suppressLVHurtKey in hurtDist:
- hurtFormulaKey = suppressLVHurtKey
+ GameWorld.DebugLog("伤血计算: atkID=%s,defID=%s,skillID=%s,atkSkillPer=%s,aAtk=%s,dDef=%s,dHP=%s"
+ % (atkID, defID, skillID, atkSkillPer, aAtk, dDef, GameObj.GetHP(defObj)))
- # 助战机器人特殊伤血key
- if helpBattleFormatKey:
- hurtFormulaKey = helpBattleFormatKey
-
- if hurtFormulaKey not in hurtDist:
- GameWorld.ErrLog("CalcAttackValue.txt 伤害公式未配置, key=%s" % (hurtFormulaKey))
- return 0, ChConfig.Def_HurtType_Miss
-
- if atkwargs.get('hurtFormulaKey', None):
- # 指定公式
+ if "hurtFormulaKey" in atkwargs:
aBurnValue = atkwargs.get('burnValue', 0)
aBurnPer = atkwargs.get('burnPer', 0)
hurtFormulaKey = atkwargs.get('hurtFormulaKey', None)
-
- hurtFormula = hurtDist[hurtFormulaKey]
-
- hurtValue = int(eval(FormulaControl.GetCompileFormula(hurtFormulaKey, hurtFormula)))
- if isDeadlyHit:
- hurtValue *= deadlyHitMultiValue
-
- if atkObjType == IPY_GameWorld.gotPlayer and defObjType == IPY_GameWorld.gotNPC and mapID == ChConfig.Def_FBMapID_CrossBattlefield:
- multiValue = FBLogic.GetFBPlayerHurtNPCMultiValue(atkObj, defObj)
+ hurtValue = eval(IpyGameDataPY.GetFuncCompileCfg("DOTFormula", 1))
+ elif not curSkill:
+ hurtValue = eval(IpyGameDataPY.GetFuncCompileCfg("HurtFormula", 3))
+ GameWorld.DebugLog(" 普攻伤害=%s" % (hurtValue))
+ elif SkillCommon.isTurnNormalSkill(curSkill):
+ hurtValue = eval(IpyGameDataPY.GetFuncCompileCfg("HurtFormula", 1))
+ GameWorld.DebugLog(" 普攻技能伤害=%s" % (hurtValue))
+ elif SkillCommon.isAngerSkill(curSkill):
+ hurtValue = eval(IpyGameDataPY.GetFuncCompileCfg("HurtFormula", 2))
+ GameWorld.DebugLog(" 怒气技能伤害=%s" % (hurtValue))
+ else:
+ hurtValue = eval(IpyGameDataPY.GetFuncCompileCfg("HurtFormula", 4))
+ GameWorld.DebugLog(" 其他伤害=%s" % (hurtValue))
if multiValue != 1:
hurtValue = int(hurtValue * multiValue)
-
- #hurtValue = min(max(hurtValue, 0), ChConfig.Def_UpperLimit_DWord)
+ hurtValue = int(hurtValue)
if hurtType == ChConfig.Def_HurtType_Normal and atkSkillPerYinji > 0:
return hurtValue, ChConfig.Def_HurtType_Yinji
- elif hurtType == ChConfig.Def_HurtType_Normal and SuppressValueRealmRate > 10000:
- # 存在压制
- return hurtValue, ChConfig.Def_HurtType_RealmSupress
return hurtValue, hurtType
@@ -2464,6 +2158,10 @@
atkObj.SetDict(ChConfig.Def_PlayerKey_LastHurtNPCObjID, defObj.GetID())
else:
defObj.SetDict(ChConfig.Def_PlayerKey_LastAttackerObjID, atkObj.GetID())
+
+ #if resultHurtType.RealHurtHP:
+ # PassiveBuffEffMng.OnPassiveSkillTrigger(defObj, atkObj, None, ChConfig.TriggerType_BeHurt, tick)
+
return
@@ -2474,6 +2172,8 @@
return "P"
if objType == IPY_GameWorld.gotNPC:
+ if obj.GetDictByKey(ChConfig.Def_Obj_Dict_LineupPlayerID):
+ return "P"
if obj.GetType() == ChConfig.ntRobot:
return "Robot"
if obj.GetType() == ChConfig.ntHelpBattleRobot:
@@ -2552,9 +2252,9 @@
# GameWorld.DebugLog("不能攻击,不反弹")
# return
#杀怪次数判断
- if not CheckKillNPCByCnt(defObj, atkObj, False) and not NPCHurtManager.IsAssistPlayer(defObj.GetPlayerID(), atkObj):
- #GameWorld.DebugLog("不能攻击,不反弹")
- return
+ #if not CheckKillNPCByCnt(defObj, atkObj, False) and not NPCHurtManager.IsAssistPlayer(defObj.GetPlayerID(), atkObj):
+ # #GameWorld.DebugLog("不能攻击,不反弹")
+ # return
#没有反弹退出
defObj_DamageBackRate = defObj.GetDamageBackRate()
@@ -2623,10 +2323,10 @@
suckHP += atkObj.GetKillBackHP()
# 攻击吸血
- atkBackHP = PlayerControl.GetAtkBackHPPer(atkObj)
- if defObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
- #PVP 攻击回血
- atkBackHP += PlayerControl.GetPVPAtkBackHP(atkObj)
+ atkBackHP = 0 #PlayerControl.GetAtkBackHPPer(atkObj)
+ #if defObj.GetGameObjType() == IPY_GameWorld.gotPlayer:
+ # #PVP 攻击回血
+ # atkBackHP += PlayerControl.GetPVPAtkBackHP(atkObj)
# 百分比吸血
atkBackHPPer = PassiveBuffEffMng.GetValueByPassiveBuffTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_Buff_SuckBloodPer)
atkBackHPPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, curSkill, ChConfig.TriggerType_Buff_SuckBloodPer)
@@ -2649,39 +2349,6 @@
ChangeHPView(atkObj, None, 0, suckHP, ChConfig.Def_HurtTYpe_Recovery)
return
-## 攻击者回蓝逻辑
-# @param atkObj 攻击者
-# @param defObj 防守者
-# @return None
-def CalcSuckMagic(atkObj, defObj, hurtValue):
-
- if atkObj.GetGameObjType() != IPY_GameWorld.gotPlayer:
- return
-
- tick = GameWorld.GetGameWorld().GetTick()
- if tick - atkObj.GetTickByType(ChConfig.TYPE_Player_Tick_SuckMagic) \
- < ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_SuckMagic]:
- return
-
- atkObj.SetTickByType(ChConfig.TYPE_Player_Tick_SuckMagic, tick)
-
- suckMP = 0
-
- # 杀怪回蓝
- if defObj.GetGameObjType() == IPY_GameWorld.gotNPC and GameObj.GetHP(defObj) <= 0:
- suckMP += atkObj.GetKillBackMP()
-
- # 攻击吸蓝
- atkBackMPPer = PlayerControl.GetAtkBackMPPer(atkObj)
- if atkBackMPPer > 0:
- suckMP += int(hurtValue * atkBackMPPer / float(ChConfig.Def_MaxRateValue))
-
- if suckMP <= 0:
- return
-
- atkObj.SetMP(min(atkObj.GetMaxMP(), atkObj.GetMP() + suckMP))
- return
-
#---------------------------------------------------------------------
## 获得目标是否死亡
# @param taget 目标Obj
@@ -2697,10 +2364,6 @@
return (taget.GetPlayerAction() == IPY_GameWorld.paDie)
elif tagetType == IPY_GameWorld.gotNPC:
- if taget.GetGameNPCObjType() == IPY_GameWorld.gnotTruck:
- #镖车判定是否可以攻击( 损坏的镖车是无敌的 GetCanAttack = 0 )
- return (not taget.GetCanAttack())
-
return (taget.GetCurAction() == IPY_GameWorld.laNPCDie)
GameWorld.Log('###GetIsDead = %s ' % (tagetType))
@@ -2803,17 +2466,6 @@
'''
#关系有3层,无-友好-敌人
- #镜像PK下,无视PK区域、PK模式等,仅验证双方是否同一阵营
- curBattleID = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MirrorBattleID)
- tagBattleID = tagPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MirrorBattleID)
- if curBattleID and curBattleID == tagBattleID:
- battle = MirrorAttack.GetMirrorBattleByID(curBattleID)
- if battle.batState != ChConfig.Def_MirrorBatState_Fight:
- return ChConfig.Type_Relation_None, ChConfig.Def_PASysMessage_None
- if curPlayer.GetFaction() != tagPlayer.GetFaction():
- return ChConfig.Type_Relation_Enemy , ChConfig.Def_PASysMessage_None
- return ChConfig.Type_Relation_Friend, ChConfig.Def_PASysMessage_None
-
#判断是否可释放(增/减)技能或普攻
if CheckPlayersRelationInFB_IsNone(curPlayer, tagPlayer):
return ChConfig.Type_Relation_None, ChConfig.Def_PASysMessage_None
@@ -2881,10 +2533,6 @@
elif curPlayerAttackMode == IPY_GameWorld.amAll:
pass
- # 协助关系不可攻击
- if NPCHurtManager.IsAssistRelation(curPlayer, tagPlayer):
- return ChConfig.Type_Relation_Friend, ChConfig.Def_PASysMessage_NotAttackTeam
-
# 以下为所属区域的一些特殊处理
#普通区
if curPlayerAreaType == IPY_GameWorld.gatNormal:
@@ -2901,67 +2549,6 @@
#敌人关系,可PK,可加减益buff
return ChConfig.Type_Relation_Enemy , ChConfig.Def_PASysMessage_None
-
-#def GetPeaceBuff(curPlayer):
-# return SkillCommon.FindBuffByID(curPlayer, ChConfig.Def_SkillID_Peace)[0]
-
-## 获取玩家和镖车的关系
-# @param curPlayer: 攻击方实例
-# @param curTagTruck: 镖车实例
-# @return: 可否攻击
-def GetPlayerAndTruckRelation(curPlayer, curTagTruck):
-
- if curPlayer == None or curTagTruck == None:
- return ChConfig.Type_Relation_None, ChConfig.Def_PASysMessage_None
-
- #攻击方玩家区域
- curPlayerAreaType = GameMap.GetAreaTypeByMapPos(curPlayer.GetPosX(), curPlayer.GetPosY())
-
- #镖车所在区域
- truckAreaType = GameMap.GetAreaTypeByMapPos(curTagTruck.GetPosX(), curTagTruck.GetPosY())
-
- #攻击方或镖车在安全区
- if curPlayerAreaType == IPY_GameWorld.gatSafe or truckAreaType == IPY_GameWorld.gatSafe:
- return ChConfig.Type_Relation_None, ChConfig.Def_PASysMessage_IsSafeArea
-
- #攻守双方不在同一区域,不可PK,不可加增益buff
- if curPlayerAreaType != truckAreaType:
- return ChConfig.Type_Relation_None, ChConfig.Def_PASysMessage_CurAreaNotPK
-
- curTagPlayer = NPCCommon.GetSummonNPCOwner(IPY_GameWorld.gotPlayer, curTagTruck)
- if curTagPlayer:
- if curPlayer.GetID() == curTagPlayer.GetID():
- #不能攻击自己的镖车
- return ChConfig.Type_Relation_None, ChConfig.Def_PASysMessage_None
-
- if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Truck):
- #Truck_hgg_31379:功能未开启,不能攻击镖车
- PlayerControl.NotifyCode(curPlayer, "Truck_hgg_31379", [GameFuncComm.GetFuncLimitLV(ShareDefine.GameFuncID_Truck)])
- return ChConfig.Type_Relation_None, ChConfig.Def_PASysMessage_None
-
- curTruckOTeamID = PlayerTruck.GetTruckTeamID(curTagTruck)
- curTruckFamilyID = PlayerTruck.GetTruckFamilyID(curTagTruck)
- curTruckNameColor = PlayerTruck.GetTruckNameColor(curTagTruck)
-
- #普通区域
- if curPlayerAreaType == IPY_GameWorld.gatNormal:
- #和平模式
- if curPlayer.GetAttackMode() == IPY_GameWorld.amPeace :
- #如镖车主人不是红名也不是黄名,则给系统提示:不可攻击
- if curTruckNameColor not in [IPY_GameWorld.pncGray, IPY_GameWorld.pncRed]:
- return ChConfig.Type_Relation_Friend , ChConfig.Def_PASysMessage_CurAreaNotPK
-
- curPlayerTeamID = curPlayer.GetTeamID() # 攻击方队伍ID
- curPlayerFamilyID = curPlayer.GetFamilyID() # 攻击方家族ID
- if curPlayerTeamID and curTruckOTeamID and curTruckOTeamID == curPlayerTeamID:
- #攻击方和镖车主人同队伍
- return ChConfig.Type_Relation_Friend , ChConfig.Def_PASysMessage_NotAttackTeam
-
- if curTruckFamilyID and curPlayerFamilyID and curTruckFamilyID == curPlayerFamilyID:
- #攻击方和镖车主人同家族
- return ChConfig.Type_Relation_Friend , ChConfig.Def_PASysMessage_NotAttackFamily
-
- return ChConfig.Type_Relation_Enemy, ChConfig.Def_PASysMessage_None
def IsPKProtectTime():
## 是否是PK保护时间段
@@ -3023,6 +2610,9 @@
if GameObj.GetHP(curObjDetel) > 0:
return
+ #if TurnAttack.SetTurnObjKilled(curObjDetel, atkObj):
+ # return
+
#---玩家处理---
if curObjDetel.GetGameObjType() == IPY_GameWorld.gotPlayer:
playerControl = PlayerControl.PlayerControl(curObjDetel)
@@ -3055,64 +2645,21 @@
return
attackLV = curPlayer.GetLV() # 攻击者等级
- attackPrestige = PlayerControl.GetPrestige(curPlayer) # 攻击者威望
+ attackPrestige = 0 #PlayerControl.GetPrestige(curPlayer) # 攻击者威望
attackNotoriety = curPlayer.GetInfamyValue() # 攻击者恶名值
attackPkValue = curPlayer.GetPKValue() # 攻击者pk值
attackFightPower = PlayerControl.GetFightPower(curPlayer) # 攻击者战斗力
defendLV = defender.GetLV() # 防守者等级
- defendPrestige = PlayerControl.GetPrestige(defender) # 防守者威望
+ defendPrestige = 0 #PlayerControl.GetPrestige(defender) # 防守者威望
defendNotoriety = defender.GetInfamyValue() # 防守者恶名值
defendPkValue = defender.GetPKValue() # 防守者pk值
defendFightPower = PlayerControl.GetFightPower(defender) # 防守者战斗力
-
-# #今日杀人获得威望值
-# prestigeByDay = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_KillPlayerAddPrestige)
-#
-# addPrestige = int(eval(ReadChConfig.GetChConfig("KillPlayerPrestige")))
-# if addPrestige > 0:
-# maxPrestigeByDay = ReadChConfig.GetEvalChConfig("KillPlayerMaxPrestigeByDay")
-# if prestigeByDay < maxPrestigeByDay:
-# #没超过每日杀人获得威望最大值, 给予威望
-# addPrestige = min(addPrestige, maxPrestigeByDay - prestigeByDay)
-# PlayerPrestigeSys.AddPrestigeOffcialLV(curPlayer, addPrestige, ChConfig.Def_AddPrestige_Kill)
-# PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_KillPlayerAddPrestige, prestigeByDay + addPrestige)
-# else:
-# #GeRen_wll_0:今日获得威望已达上限
-# PlayerControl.NotifyCode(curPlayer, "PK_liubo_372238")
-#
-# elif addPrestige < 0:
-# GameWorld.ErrLog("KillPlayerPrestige计算结果:%s" % addPrestige)
#恶名值
curPlayer.SetInfamyValue(min(attackNotoriety + ChConfig.Def_KillValue_Notoriety,
ChConfig.Def_UpperLimit_DWord))
- #活跃度
-# activeByDay = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_KillPlayerAddActive)
-# addActiveValue = int(eval(ReadChConfig.GetChConfig("KillPlayerFamilyAvtive")))
-# if addActiveValue > 0 and curPlayer.GetFamilyID() != 0:
-# maxAvtiveByDay = ReadChConfig.GetEvalChConfig("KillPlayerMaxAvtiveByDay")
-# if activeByDay < maxAvtiveByDay:
-# addActiveValue = min(addActiveValue, maxAvtiveByDay - activeByDay)
-# PlayerFamily.AddPlayerFamilyActiveValue(curPlayer, addActiveValue, True, \
-# PlayerFamily.Def_AddFAVReason_KillPlayer)
-# PlayerControl.NotifyCode(curPlayer, "GeRen_admin_425673", [addActiveValue])
-# PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_KillPlayerAddActive, activeByDay + addActiveValue)
-# else:
-# PlayerControl.NotifyCode(curPlayer, "PK_liubo_161795")
-#
-# elif addActiveValue < 0:
-# GameWorld.ErrLog("KillPlayerFamilyAvtive计算结果:%s" % addActiveValue)
-
- #---防守者
- #威望值
-# lostPrestige = int(eval(ReadChConfig.GetChConfig("BeKilledPlayerPrestige")))
-# if lostPrestige > 0:
-# PlayerPrestigeSys.SubPrestigeOffcialLV(defender, lostPrestige, ChConfig.Def_SubPrestige_BeKilled)
-# elif lostPrestige < 0:
-# GameWorld.ErrLog("BeKilledPlayerPrestige计算结果:%s" % lostPrestige)
-
#恶名值
defender.SetInfamyValue(max(defendNotoriety - ChConfig.Def_BeKilledValue_Notoriety, 0))
return
@@ -3142,6 +2689,21 @@
srcID, srcType = 0, 0
if srcObj:
srcID, srcType = srcObj.GetID(), srcObj.GetGameObjType()
+ turnFight = TurnAttack.GetTurnFightMgr().getTurnFight(curObj.GetTFGUID())
+ if turnFight:
+ clientPack = ChNetSendPack.tagObjPropertyRefreshView()
+ clientPack.ObjID = curObj.GetID()
+ clientPack.ObjType = curObj.GetGameObjType()
+ clientPack.SkillID = skillID
+ clientPack.DiffValue = changeHP % ShareDefine.Def_PerPointValue
+ clientPack.DiffValueEx = changeHP / ShareDefine.Def_PerPointValue
+ clientPack.AttackType = changType
+ clientPack.SrcObjID = srcID
+ clientPack.SrcObjType = srcType
+ clientPack.HP = curObj.GetHP()
+ clientPack.HPEx = curObj.GetHPEx()
+ turnFight.addBatPack(clientPack)
+ return
curObj.ChangeHPView(skillID, changeHP % ShareDefine.Def_PerPointValue, changeHP / ShareDefine.Def_PerPointValue,
changType, srcID, srcType, curObj.GetHP(), curObj.GetHPEx())
return
\ No newline at end of file
--
Gitblit v1.8.0