From 0323f1602690cba6522523d968b5ed2032dccba2 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 16 九月 2025 14:37:45 +0800 Subject: [PATCH] 129 【战斗】战斗系统-服务端(李典技能;被动触发支持增加击晕概率;) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 74 ++++++++++++++++-------------------- 1 files changed, 33 insertions(+), 41 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py index 3231fc0..fc67868 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py @@ -562,7 +562,7 @@ DoBeAttackResult(turnFight, curBatObj, useSkill, True) return -def DoCombo(turnFight, curBatObj, useSkill): +def DoCombo(turnFight, atkObj, useSkill): ''' 格挡、反击、连击规则 1. 所有武将或怪物均可能产生格挡,群攻时格挡一对一判断,均可能产生格挡 @@ -586,7 +586,7 @@ tagFriendly = useSkill.GetTagFriendly() if tagFriendly: - tagObj = GetRelativeObj(turnFight, curBatObj) + tagObj = GetRelativeObj(turnFight, atkObj) else: tagObjList = useSkill.GetTagObjList() if not tagObjList: @@ -596,18 +596,31 @@ if atkBackSkill: # 可以反击,打断连击 GameWorld.DebugLog("● %s 【反击】" % TurnAttack.GetObjName(tagObj)) - OnUseSkill(turnFight, tagObj, atkBackSkill, [curBatObj], ChConfig.TurnBattleType_AtkBack) + OnUseSkill(turnFight, tagObj, atkBackSkill, [atkObj], ChConfig.TurnBattleType_AtkBack) return if not tagObj: return - if CanCombo(curBatObj, tagObj): - # 连击根据技能目标配置逻辑重新选择目标 - GameWorld.DebugLog("● %s 【连击】" % TurnAttack.GetObjName(curBatObj)) - DoHeroSpecialty(turnFight, curBatObj, ChConfig.HeroSpecialty_Combo, useSkill.GetSkillID()) - OnUseSkill(turnFight, curBatObj, useSkill, batType=ChConfig.TurnBattleType_Combo) - + comboNum = atkObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnComboNum) + aComboRate = atkObj.GetBatAttrValue(ChConfig.AttrID_ComboRate) + aComboRate += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, tagObj, ChConfig.AttrID_ComboRate, useSkill) + + dComboRateDef = tagObj.GetBatAttrValue(ChConfig.AttrID_ComboRateDef) + happenRate = eval(IpyGameDataPY.GetFuncCompileCfg("ComboCfg", 1)) + if not GameWorld.CanHappen(happenRate): + GameWorld.DebugLog("无法连击! atkID=%s,happenRate=%s,aComboRate=%s,dComboRateDef=%s,comboNum=%s" + % (atkObj.GetID(), happenRate, aComboRate, dComboRateDef, comboNum)) + return + GameWorld.DebugLog("● %s 【连击】 happenRate=%s,aComboRate=%s,dComboRateDef=%s,comboNum=%s" + % (TurnAttack.GetObjName(atkObj), happenRate, aComboRate, dComboRateDef, comboNum)) + atkObj.SetDict(ChConfig.Def_Obj_Dict_TurnComboNum, comboNum + 1) + + # 连击特长 + DoHeroSpecialty(turnFight, atkObj, ChConfig.HeroSpecialty_Combo, useSkill.GetSkillID()) + + # 连击根据技能目标配置逻辑重新选择目标 + OnUseSkill(turnFight, atkObj, useSkill, batType=ChConfig.TurnBattleType_Combo) return def __getCanAtkBackSkill(useSkill, tagObj): @@ -642,21 +655,6 @@ GameWorld.DebugLog("可以反击! tagID=%s" % tagID) return useSkill return - -def CanCombo(atkObj, defObj): - ## 可否连击 - comboNum = atkObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnComboNum) - aComboRate = atkObj.GetBatAttrValue(ChConfig.AttrID_ComboRate) - dComboRateDef = defObj.GetBatAttrValue(ChConfig.AttrID_ComboRateDef) - happenRate = eval(IpyGameDataPY.GetFuncCompileCfg("ComboCfg", 1)) - if GameWorld.CanHappen(happenRate): - GameWorld.DebugLog("可以连击! atkID=%s,happenRate=%s,aComboRate=%s,dComboRateDef=%s,comboNum=%s" - % (atkObj.GetID(), happenRate, aComboRate, dComboRateDef, comboNum)) - atkObj.SetDict(ChConfig.Def_Obj_Dict_TurnComboNum, comboNum + 1) - return True - GameWorld.DebugLog("无法连击! atkID=%s,happenRate=%s,aComboRate=%s,dComboRateDef=%s,comboNum=%s" - % (atkObj.GetID(), happenRate, aComboRate, dComboRateDef, comboNum)) - return False def DoBeAttackResult(turnFight, curObj, useSkill, isUseSkill=False): '''被攻击结果 @@ -880,9 +878,6 @@ # return enhanceSkillID = curEffect.GetEffectValue(0) checkInStateList = curEffect.GetEffectValue(1) - if checkInStateList: - if isinstance(checkInStateList, int): - checkInStateList = [checkInStateList] GameWorld.DebugLog("额外触发的技能: enhanceSkillID=%s,checkInStateList=%s" % (enhanceSkillID, checkInStateList)) tagObjList = useSkill.GetTagObjList() @@ -905,12 +900,7 @@ GameWorld.DebugLog(" 闪避的不触发: tagID=%s" % (tagID)) continue if checkInStateList: - inState = False - for state in checkInStateList: - if tagObj.IsInState(state): - inState = True - break - if not inState: + if not tagObj.CheckInState(checkInStateList): GameWorld.DebugLog(" 不在状态下不触发: tagID=%s not in state:%s" % (tagID, checkInStateList)) continue if enhanceRate and enhanceRate != ChConfig.Def_MaxRateValue and not GameWorld.CanHappen(enhanceRate, ChConfig.Def_MaxRateValue): @@ -929,11 +919,8 @@ if checkInStateList: inState = False for tagObj in tagObjList: - for state in checkInStateList: - if not state or tagObj.IsInState(state): - inState = True - break - if inState: + if tagObj.CheckInState(checkInStateList): + inState = True break if not inState: GameWorld.DebugLog(" 没有目标在状态下不触发: tagObj not in state:%s" % str(checkInStateList)) @@ -1102,7 +1089,10 @@ if isAngerSkill: aAngerSkillPer = atkObj.GetBatAttrValue(ChConfig.AttrID_AngerSkillPer) # 普技增伤 dAngerSkillPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_AngerSkillPerDef) # 普技减伤 - + + aAddSkillPer = 0 # 技能增伤 + aAddSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_SkillPer, curSkill) + # 物法增减伤 if pmType == IPY_GameWorld.ghtMag: # 法伤 aPMDamPer = atkObj.GetBatAttrValue(ChConfig.AttrID_MagDamPer) @@ -1117,6 +1107,7 @@ dNormalSkillPerDef /= 10000.0 aAngerSkillPer /= 10000.0 dAngerSkillPerDef /= 10000.0 + aAddSkillPer /= 10000.0 aPMDamPer /= 10000.0 dPMDamPerDef /= 10000.0 aSuperDamPer /= 10000.0 @@ -1124,8 +1115,8 @@ aFinalDamPer /= 10000.0 dFinalDamPerDef /= 10000.0 - GameWorld.DebugLog("伤血计算: atkID=%s,defID=%s,skillID=%s,atkSkillPer=%s,aAtk=%s,dDef=%s,dHP=%s,hurtTypes=%s" - % (atkID, defID, skillID, atkSkillPer, aAtk, dDef, dHP, hurtTypes)) + GameWorld.DebugLog("伤血计算: atkID=%s,defID=%s,skillID=%s,atkSkillPer=%s,aAtk=%s,dDef=%s,dHP=%s,hurtTypes=%s,aAddSkillPer=%s" + % (atkID, defID, skillID, atkSkillPer, aAtk, dDef, dHP, hurtTypes, aAddSkillPer)) # 持续性伤害 if isDot: @@ -1160,6 +1151,7 @@ def CanStun(turnFight, atkObj, defObj, curSkill): aStunRate = atkObj.GetBatAttrValue(ChConfig.AttrID_StunRate) + aStunRate += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_StunRate, curSkill) dStunRateDef = defObj.GetBatAttrValue(ChConfig.AttrID_StunRateDef) happenRate = eval(IpyGameDataPY.GetFuncCompileCfg("StunCfg", 1)) if not GameWorld.CanHappen(happenRate): -- Gitblit v1.8.0