From c35e176a3b05f745600c6e60f168313d2b9e7b30 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期三, 17 九月 2025 12:00:19 +0800 Subject: [PATCH] 129 【战斗】战斗系统-服务端(司马懿技能;增加按层级结算持续buff效果5003;增加非按攻击力计算伤害支持;技能伤害增加可限制最大攻击力百分比上限配置;) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py | 119 ++++++++++------------------------------------------------- 1 files changed, 20 insertions(+), 99 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 4f4bdcb..f1d7758 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 @@ -45,15 +45,10 @@ 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 @@ -438,28 +433,6 @@ #NPC读表取 return attack.GetHurtType() -def GetAtkDistType(curObj): - ## 获取是近战还是远程,默认近战 - if curObj.GetGameObjType() != IPY_GameWorld.gotNPC: - return ChConfig.AtkDistType_Short - - playerID = curObj.GetDictByKey(ChConfig.Def_Obj_Dict_LineupPlayerID) - if not playerID: - return ChConfig.AtkDistType_Short - - heroID = curObj.GetDictByKey(ChConfig.Def_Obj_Dict_HeroID) - if heroID: - heroIpyData = IpyGameDataPY.GetIpyGameData("Hero", heroID) - if heroIpyData: - return heroIpyData.GetAtkDistType() - - npcID = curObj.GetNPCID() - npcDataEx = NPCCommon.GetNPCDataEx(npcID) - if npcDataEx: - return npcDataEx.GetAtkDistType() - - return ChConfig.AtkDistType_Short - #-------------------------------------------------------------------------- ## 设置玩家进入战斗状态 # @param defender 当前玩家(被攻击了) @@ -638,19 +611,11 @@ 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() if curTeam == None: #无队伍,添加个人伤害 @@ -716,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 @@ -730,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 @@ -741,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): @@ -858,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 @@ -906,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: @@ -2150,9 +2091,6 @@ aBurnValue = atkwargs.get('burnValue', 0) aBurnPer = atkwargs.get('burnPer', 0) hurtFormulaKey = atkwargs.get('hurtFormulaKey', None) - #if hurtFormulaKey == "Burn": - # pass - #else: hurtValue = eval(IpyGameDataPY.GetFuncCompileCfg("DOTFormula", 1)) elif not curSkill: hurtValue = eval(IpyGameDataPY.GetFuncCompileCfg("HurtFormula", 3)) @@ -2239,8 +2177,6 @@ atkObj.SetDict(ChConfig.Def_PlayerKey_LastHurtNPCObjID, defObj.GetID()) else: defObj.SetDict(ChConfig.Def_PlayerKey_LastAttackerObjID, atkObj.GetID()) - - TurnAttack.AddTurnObjHurtValue(atkObj, defObj, resultHurtType.HurtType, resultHurtType.RealHurtHP, resultHurtType.LostHP, curSkill) #if resultHurtType.RealHurtHP: # PassiveBuffEffMng.OnPassiveSkillTrigger(defObj, atkObj, None, ChConfig.TriggerType_BeHurt, tick) @@ -2335,9 +2271,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() @@ -2549,17 +2485,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 @@ -2627,10 +2552,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: @@ -2708,8 +2629,8 @@ if GameObj.GetHP(curObjDetel) > 0: return - if TurnAttack.SetTurnObjKilled(curObjDetel, atkObj): - return + #if TurnAttack.SetTurnObjKilled(curObjDetel, atkObj): + # return #---玩家处理--- if curObjDetel.GetGameObjType() == IPY_GameWorld.gotPlayer: @@ -2787,7 +2708,7 @@ srcID, srcType = 0, 0 if srcObj: srcID, srcType = srcObj.GetID(), srcObj.GetGameObjType() - turnFight = TurnAttack.GetTurnFightMgr().getNPCTurnFight(curObj.GetID()) + turnFight = TurnAttack.GetTurnFightMgr().getTurnFight(curObj.GetTFGUID()) if turnFight: clientPack = ChNetSendPack.tagObjPropertyRefreshView() clientPack.ObjID = curObj.GetID() -- Gitblit v1.8.0