From ac98391b1102b1c07aa71dbab56f232db74273ec Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期四, 18 九月 2025 11:51:20 +0800 Subject: [PATCH] 121 【武将】武将系统-服务端(计算主公官职属性;) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 68 +++++++++++++++++++++++---------- 1 files changed, 47 insertions(+), 21 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 25b07f3..4470358 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py @@ -76,9 +76,16 @@ # 可扩展其他目标选择,如复活技能没有死亡单位时则使用另外的效果 return + objID = curBatObj.GetID() + oneActionUseCnt = turnFight.GetOneActionUseSkillCnt(objID) + if oneActionUseCnt >= 20: + GameWorld.ErrLog("单次行动累计使用技能达到上限! objID=%s,oneActionUseCnt=%s" % (objID, oneActionUseCnt), turnFight.playerID) + return + oneActionUseCnt = turnFight.SetOneActionUseSkillCnt(objID, oneActionUseCnt + 1) + bySkillID = bySkill.GetSkillID() if bySkill else 0 - GameWorld.DebugLog("使用技能: curID=%s,skillID=%s,tagCnt=%s,batType=%s,bySkillID=%s,HP:%s/%s" - % (curBatObj.GetID(), skillID, len(tagObjList), batType, bySkillID, curBatObj.GetHP(), curBatObj.GetMaxHP())) + GameWorld.DebugLog("●使用技能: curID=%s,skillID=%s,tagCnt=%s,batType=%s,bySkillID=%s,HP:%s/%s,oneActionUseCnt=%s" + % (objID, skillID, len(tagObjList), batType, bySkillID, curBatObj.GetHP(), curBatObj.GetMaxHP(), oneActionUseCnt)) # 以下为技能可以使用的处理,之后的逻辑默认技能使用成功 poolMgr = ObjPool.GetPoolMgr() @@ -86,18 +93,28 @@ if isinstance(useSkill, IpyGameDataPY.IPY_Skill): usePoolSkill = True # 统一使用 BattleObj.PySkill - useSkill = poolMgr.acquire(BattleObj.PySkill, useSkill) + useSkill = poolMgr.acquire(BattleObj.PySkill, useSkill, objID) useSkill.ResetUseRec() useSkill.SetTagObjList(tagObjList) useSkill.SetBatType(batType) useSkill.SetBySkill(bySkill) + isTurnNormalSkill = SkillCommon.isTurnNormalSkill(useSkill) + if isTurnNormalSkill: + # 普攻追击时强制重新开始算连击 + useSkill.ComboCheckStart(batType == ChConfig.TurnBattleType_Pursue) + curBatObj.ClearSkillTempAttr() + tagIDList = [] for tagObj in tagObjList: + tagIDList.append(tagObj.GetID()) tagObj.ClearSkillTempAttr() - objID = curBatObj.GetID() + # 有功能分类的技能都认为是主技能 + if useSkill.GetFuncType(): + curBatObj.SetMainTagIDList(tagIDList) + useTag = "" #这个技能是Buff @@ -126,8 +143,10 @@ turnFight.addBatPack(clientPack) # 处理反击 或 连击 - DoCombo(turnFight, curBatObj, useSkill) - + if isTurnNormalSkill: + if not DoCombo(turnFight, curBatObj, useSkill): + useSkill.ComboInterrupt() + # 最后重置、回收对象 useSkill.ResetUseRec() if usePoolSkill: @@ -448,7 +467,7 @@ skillID = useSkill.GetSkillID() for tagBatObj in useSkill.GetTagObjList(): - cureHP = CalcCureHP(curBatObj, tagBatObj, useSkill, largeNum=True) + cureHP = CalcCureHP(turnFight, curBatObj, tagBatObj, useSkill, largeNum=True) if cureHP <= 0: continue @@ -580,8 +599,7 @@ 纵排: 优先前面的单位 ''' - if not SkillCommon.isTurnNormalSkill(useSkill): - #GameWorld.DebugLog("非普攻不处理反击连击") + if not useSkill.ComboEnable(): return tagFriendly = useSkill.GetTagFriendly() @@ -602,7 +620,7 @@ if not tagObj: return - comboNum = atkObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnComboNum) + comboNum = useSkill.GetComboNum() aComboRate = atkObj.GetBatAttrValue(ChConfig.AttrID_ComboRate) aComboRate += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, tagObj, ChConfig.AttrID_ComboRate, useSkill) @@ -614,14 +632,14 @@ 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) + useSkill.SetComboNum(comboNum + 1) # 连击特长 DoHeroSpecialty(turnFight, atkObj, ChConfig.HeroSpecialty_Combo, useSkill.GetSkillID()) # 连击根据技能目标配置逻辑重新选择目标 OnUseSkill(turnFight, atkObj, useSkill, batType=ChConfig.TurnBattleType_Combo) - return + return True def __getCanAtkBackSkill(useSkill, tagObj): ## 获取是否可反击及反击技能 @@ -757,6 +775,12 @@ TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_AttackOverDirect, tagObj, connSkill=useSkill) TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAttackedDirect, curObj, connSkill=useSkill) + if killObjList: + tagObj = killObjList[0] + TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_KillOneObj, tagObj, connSkill=useSkill) + for tagObj in killObjList: + TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_KillTagObj, tagObj, connSkill=useSkill) + return def __doCostZhanchui(turnFight, curBatObj, useSkill): @@ -858,7 +882,7 @@ continue effID = curEffect.GetEffectID() - GameWorld.DebugLog("执行额外技能效果: %s, triggerWay=%s,missObjIDList=%s" % (effID, triggerWay, missObjIDList)) + GameWorld.DebugLog("◆执行额外技能效果: %s, triggerWay=%s,missObjIDList=%s" % (effID, triggerWay, missObjIDList)) if effID == 5010: # 额外技能效果 __doUseEnhanceSkill(turnFight, curObj, useSkill, curEffect, missObjIDList) @@ -866,7 +890,6 @@ for tagObj in useSkill.GetTagObjList(): tagID = tagObj.GetID() - GameWorld.DebugLog(" tagID=%s" % (tagID)) if tagID in missObjIDList: # 闪避了不触发 continue @@ -1046,11 +1069,11 @@ if isTurnNormalSkill and not mustHit: aMissRateDef = atkObj.GetBatAttrValue(ChConfig.AttrID_MissRateDef) #atkObj.GetHit() # 抗闪避率 - 命中 dMissRate = defObj.GetBatAttrValue(ChConfig.AttrID_MissRate) # 闪避率 - missNum = defObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnMissNum) + missNum = curSkill.GetTagMissNum(defID) missRate = eval(IpyGameDataPY.GetFuncCompileCfg("MissCfg", 1)) if GameWorld.CanHappen(missRate): GameWorld.DebugLog("闪避了! missRate=%s,dMissRate=%s,aMissRateDef=%s,missNum=%s" % (missRate, dMissRate, aMissRateDef, missNum)) - defObj.SetDict(ChConfig.Def_Obj_Dict_TurnMissNum, missRate + 1) + curSkill.SetTagMissNum(defID, missRate + 1) return 0, pow(2, ChConfig.HurtType_Miss) hurtTypes = pow(2, ChConfig.HurtType_Normal) @@ -1087,6 +1110,8 @@ dHP = defObj.GetHP() dDef = 0 if ignoreDef else defObj.GetDef() # 防守方防御力 + + atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPer, curSkill) aFinalDamPer = atkObj.GetBatAttrValue(ChConfig.AttrID_FinalDamPer) # 最终加成 dFinalDamPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_FinalDamPerDef) # 最终减伤 @@ -1195,6 +1220,7 @@ #被控制无法格挡 return False + defID = defObj.GetID() # 格挡印记 buffMgr = defObj.GetBuffManager() parryYJBuff = buffMgr.FindBuffByState(ChConfig.BatObjState_ParryYJ) @@ -1205,11 +1231,11 @@ aParryRateDef = atkObj.GetBatAttrValue(ChConfig.AttrID_ParryRateDef) dParryRate = defObj.GetBatAttrValue(ChConfig.AttrID_ParryRate) - parryNum = defObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnParryNum) + parryNum = curSkill.GetTagParryNum(defID) happenRate = eval(IpyGameDataPY.GetFuncCompileCfg("ParryCfg", 1)) if GameWorld.CanHappen(happenRate): GameWorld.DebugLog("格挡了: happenRate=%s,aParryRateDef=%s,dParryRate=%s,parryNum=%s" % (happenRate, aParryRateDef, dParryRate, parryNum)) - defObj.SetDict(ChConfig.Def_Obj_Dict_TurnParryNum, parryNum + 1) + curSkill.SetTagParryNum(defID, parryNum + 1) return True return False @@ -1313,7 +1339,7 @@ TurnAttack.AddTurnObjCureHP(atkObj, atkObj, suckHP, cureHP) return -def CalcCureHP(userObj, tagObj, curSkill, largeNum=False): +def CalcCureHP(turnFight, userObj, tagObj, curSkill, largeNum=False): ''' 计算治疗值 ''' cureType = curSkill.GetCalcType() @@ -1322,7 +1348,7 @@ cureBaseValue = GetCalcBaseValue(cureType, userObj, tagObj) - #skillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(userObj, None, curSkill, ChConfig.TriggerType_AddHP) + skillPer += TurnPassive.GetTriggerEffectValue(turnFight, userObj, tagObj, ChConfig.PassiveEff_AddSkillPer, curSkill) # 回合制 curePer = 0 # 治疗加成 @@ -1383,7 +1409,7 @@ tagObjList = [defObj] poolMgr = ObjPool.GetPoolMgr() - useSkill = poolMgr.acquire(BattleObj.PySkill, skillIpyData) + useSkill = poolMgr.acquire(BattleObj.PySkill, skillIpyData, atkID) useSkill.SetTagObjList(tagObjList) useSkill.ClearHurtObj() hurtObj = useSkill.AddHurtObj(defID) -- Gitblit v1.8.0