From dae842ad6e4a43d66255251e3ca60880af8d08bb Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 09 十月 2025 16:26:25 +0800
Subject: [PATCH] 242 【福利内容】每日签到-服务端
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py | 166 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 164 insertions(+), 2 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
index 24321a0..243507f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
@@ -17,9 +17,171 @@
import GameWorld
import PassiveTrigger
+import ChConfig
GameWorld.ImportAll("Script\\Skill\\", "PassiveTrigger")
-
def RefreshPassive(batObj):
- return
\ No newline at end of file
+ ''' 刷新被动效果,一般可能存在于技能或buff中
+ '''
+ passiveEffMgr = batObj.GetPassiveEffManager()
+ skillEffInfo = passiveEffMgr.RefreshSkillPassiveEffect()
+ buffEffInfo = passiveEffMgr.RefreshBuffPassiveEffect()
+ skillEffInfo and GameWorld.DebugLog(" 被动技能效果: %s" % skillEffInfo)
+ buffEffInfo and GameWorld.DebugLog(" 被动Buff效果: %s" % buffEffInfo)
+ return
+
+def OnTriggerPassiveEffect(turnFight, batObj, triggerWay, tagObj=None, connSkill=None, connSkillTypeID=0, connBuff=None, **kwargs):
+ ''' 触发被动效果,可能触发技能、buff,需根据优先级触发
+ '''
+ passiveEffMgr = batObj.GetPassiveEffManager()
+ effInfoList = passiveEffMgr.GetPassiveEffByTrigger(triggerWay, connSkill, connSkillTypeID, connBuff)
+ if not effInfoList:
+ return
+ # [["skill/buff", skillID/buffID, effIDList], ...]
+ tagID = tagObj.GetID() if tagObj else 0
+ GameWorld.DebugLog("触发被动: triggerWay=%s,objID=%s,tagID=%s,%s" % (triggerWay, batObj.GetID(), tagID, effInfoList))
+ for effInfo in effInfoList:
+ sign = effInfo[0]
+ if sign == "skill":
+ skillID, effIDList = effInfo[1:]
+ __doTriggerPassiveEffectBySkill(turnFight, batObj, tagObj, triggerWay, skillID, effIDList, connSkill, connBuff, **kwargs)
+
+ elif sign == "buff":
+ buffID, effIDList = effInfo[1:]
+ __doTriggerPassiveEffectByBuff(turnFight, batObj, tagObj, triggerWay, buffID, effIDList, connSkill, connBuff, **kwargs)
+
+ return
+
+def __doTriggerPassiveEffectBySkill(turnFight, batObj, tagObj, triggerWay, skillID, effIDList, connSkill=None, connBuff=None, **kwargs):
+ skillMgr = batObj.GetSkillManager()
+ effSkill = skillMgr.FindSkillByID(skillID)
+ if not effSkill and connSkill and connSkill.GetSkillID() == skillID:
+ effSkill = connSkill
+ if not effSkill:
+ return
+
+ for effID in effIDList:
+ curEffect = effSkill.GetEffectByID(effID, triggerWay)
+ if not curEffect:
+ continue
+ DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs)
+
+ return
+
+def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff=None, **kwargs):
+ effID = curEffect.GetEffectID()
+ if not effID:
+ return
+ pyName = "PassiveEff_%s" % effID
+ callFunc = GameWorld.GetExecFunc(PassiveTrigger, "%s.%s" % (pyName, "DoSkillEffectLogic"))
+ if not callFunc:
+ return
+ callFunc(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs)
+ return
+
+def __doTriggerPassiveEffectByBuff(turnFight, batObj, tagObj, triggerWay, buffID, effIDList, connSkill=None, connBuff=None, **kwargs):
+ buffMgr = batObj.GetBuffManager()
+ effBuff = buffMgr.GetBuff(buffID)
+ if not effBuff and connBuff and connBuff.GetBuffID() == buffID:
+ effBuff = connBuff
+ if not effBuff:
+ return
+ skillData = effBuff.GetSkillData()
+
+ for effID in effIDList:
+ curEffect = skillData.GetEffectByID(effID, triggerWay)
+ if not curEffect:
+ continue
+ DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill, connBuff, **kwargs)
+
+ return
+
+def DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill, connBuff, **kwargs):
+ effID = curEffect.GetEffectID()
+ if not effID:
+ return
+ pyName = "PassiveEff_%s" % effID
+ callFunc = GameWorld.GetExecFunc(PassiveTrigger, "%s.%s" % (pyName, "DoBuffEffectLogic"))
+ if not callFunc:
+ return
+ callFunc(turnFight, batObj, tagObj, effBuff, curEffect, connSkill, connBuff, **kwargs)
+ return
+
+def GetTriggerEffectValue(turnFight, atkObj, defObj, calcEffID, connSkill=None, connSkillTypeID=0, **kwargs):
+ ''' 获取触发被动的值,一般用于某种条件下才会产生的值,如xx情况下属性变化 或 xx情况下是否发生什么
+ @param calcEffID: 需要统计的效果ID,可以是属性ID或者其他自定义效果ID
+ @return: 触发的值,0-没有触发或本身触发的值为0;非0-触发的具体值
+ '''
+
+ triggerWay = ChConfig.TriggerWay_CalcEffValue
+ passiveEffMgr = atkObj.GetPassiveEffManager()
+ effInfoList = passiveEffMgr.GetPassiveEffByTrigger("%s_%s" % (triggerWay, calcEffID), connSkill, connSkillTypeID)
+ if not effInfoList:
+ return 0
+
+ curValue = 0
+ skillMgr = atkObj.GetSkillManager()
+ buffMgr = atkObj.GetBuffManager()
+ # [["skill/buff", skillID/buffID, effIDList], ...]
+ tagID = defObj.GetID() if defObj else 0
+ for effInfo in effInfoList:
+ sign = effInfo[0]
+ if sign == "skill":
+ skillID, effIDList = effInfo[1:]
+ effSkill = skillMgr.FindSkillByID(skillID)
+ if not effSkill and connSkill and connSkill.GetSkillID() == skillID:
+ effSkill = connSkill
+ effBuff = None
+ elif sign == "buff":
+ buffID, effIDList = effInfo[1:]
+ effBuff = buffMgr.GetBuff(buffID)
+ if not effBuff:
+ continue
+ effSkill = effBuff.GetSkillData()
+ else:
+ continue
+
+ if not effSkill:
+ continue
+
+ for effID in effIDList:
+ effect = effSkill.GetEffectByID(effID, triggerWay)
+ if not effect:
+ continue
+ effID = effect.GetEffectID()
+ if not effID or effID != calcEffID:
+ continue
+
+ if effID in ChConfig.AttrIDList:
+ pyName = "PassiveEff_Attr"
+ else:
+ pyName = "PassiveEff_%s" % effID
+
+ callFunc = GameWorld.GetExecFunc(PassiveTrigger, "%s.%s" % (pyName, "GetHappenValue"))
+ if not callFunc:
+ continue
+ value = callFunc(atkObj, defObj, effect, effSkill, effBuff, **kwargs)
+ if value is None:
+ continue
+
+ if effID in ChConfig.PassiveEffHappenValueList:
+ if value:
+ GameWorld.DebugLog("统计被动效果值: calcEffID=%s,objID=%s,tagID=%s,%s,curValue=%s" % (calcEffID, atkObj.GetID(), tagID, effInfoList, value))
+ return value
+ elif effID in ChConfig.PassiveEffValueMaxList:
+ curValue = max(curValue, value) # 取最大值
+ elif effID in ChConfig.PassiveEffValueMinList:
+ if not curValue:
+ curValue = value
+ elif value > 0:
+ curValue = min(curValue, value) # 取最小值
+ else:
+ curValue += value
+ #if skillTypeID not in Def_PassiveSkillValueNoCD:
+ # if curSkill.GetCoolDownTime():
+ # SkillCommon.SetSkillRemainTime(curSkill, 0, tick, attacker)
+
+ GameWorld.DebugLog("统计被动效果值: calcEffID=%s,objID=%s,tagID=%s,%s,curValue=%s" % (calcEffID, atkObj.GetID(), tagID, effInfoList, curValue))
+ return curValue
+
--
Gitblit v1.8.0