|  |  | 
 |  |  |     # 助战神兽技能
 | 
 |  |  |     GetPassiveEffManager().RegistPassiveEffDogz(curPlayer)
 | 
 |  |  | 
 | 
 |  |  |     GetPassiveEffManager().RegistSuperEquipSkillDict(curPlayer)
 | 
 |  |  | 
 | 
 |  |  | #-被动逻辑处理--------------------------------------------------------------------------------------------------
 | 
 |  |  | ##离开地图处理
 | 
 |  |  | # @param curPlayer 玩家实例
 | 
 |  |  | 
 |  |  |              4073:ChConfig.TriggerType_BuffHurtCnt, # 当持续buff伤害第X次时触发技能 69
 | 
 |  |  |              4074:ChConfig.TriggerType_BounceHP,   # 反弹伤害固定值14, 记录值
 | 
 |  |  |              4075:ChConfig.TriggerType_4074PerValue,   # 增加4074的反弹比例
 | 
 |  |  |              4076:ChConfig.TriggerType_dFinalHurtReducePer, # 防守方的最终伤害减少百分比 71  | 
 |  |  |              4077:ChConfig.TriggerType_AttackAddFinalPer, # 增加最终伤害百分比 59
 | 
 |  |  |              4078:ChConfig.TriggerType_AttackOver,  # 攻击(对敌技能)后被动技能被触发 4
 | 
 |  |  |              4079:ChConfig.TriggerType_IsDealy,  # 是否触发致命一击 72
 | 
 |  |  |              4080:ChConfig.TriggerType_BounceHPPer, # 反弹伤害百分比值17,
 | 
 |  |  |              }
 | 
 |  |  |     return tdict.get(effectID, -1) 
 | 
 |  |  |     #===========================================================================
 | 
 |  |  | 
 |  |  |         self.AffectSkillDict = {}    # 被动技能 {(触发模式, 被影响的技能ID):[被动技能ID,效果]
 | 
 |  |  |         self.AffectPassiveSkillSetDict = {}    # 被动技能装备 {(触发模式, 被影响的技能ID):[被动技能ID,效果]
 | 
 |  |  |         self.AffectDogzSkillDict = {}   # 神兽助战技能
 | 
 |  |  |         self.AffectSuperEquipSkillDict = {}   # 特殊装备持有技能,相同技能不重复,数值增长性衰减, 触发使用
 | 
 |  |  |         self.AffectSuperEquipEffectCntDict = {}  # 特殊装备技能效果对应的已计算后的数值,直接调用
 | 
 |  |  |     
 | 
 |  |  |     #记录会影响其他技能或者被动触发释放技能的BUFF
 | 
 |  |  |     def AddBuffInfoByEffect(self, effect, skillID):
 | 
 |  |  | 
 |  |  |                 self.AffectDogzSkillDict[key].append((skillTypeID, effectID))
 | 
 |  |  |         
 | 
 |  |  |         return self.AffectDogzSkillDict
 | 
 |  |  |      | 
 |  |  |      | 
 |  |  |     # 重刷特殊装备技能
 | 
 |  |  |     def RefreshSuperEquipSkillDict(self):
 | 
 |  |  |         self.AffectSuperEquipSkillDict = {}
 | 
 |  |  |         self.AffectSuperEquipEffectCntDict = {}
 | 
 |  |  |         skillsDict = FindSuperEquipSkills(self.gameObj)
 | 
 |  |  |          | 
 |  |  |         for skillID, value in skillsDict.items():
 | 
 |  |  |             curSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID)
 | 
 |  |  |             if not curSkill:
 | 
 |  |  |                 continue
 | 
 |  |  |             if not SkillCommon.isPassiveTriggerSkill(curSkill):
 | 
 |  |  |                 continue
 | 
 |  |  |              | 
 |  |  |             skillTypeID = curSkill.GetSkillTypeID()
 | 
 |  |  |              | 
 |  |  |             connSkillID = SkillShell.GetConnectSkillID(curSkill)    # 关联技能ID, 0代表不限技能
 | 
 |  |  |             for i in xrange(curSkill.GetEffectCount()):
 | 
 |  |  |                 curEffect = curSkill.GetEffect(i)
 | 
 |  |  |                 effectID = curEffect.GetEffectID()
 | 
 |  |  |                 if effectID == 0:
 | 
 |  |  |                     continue
 | 
 |  |  |                  | 
 |  |  |                 triggerType = GetTriggerTypeByEffectID(effectID)
 | 
 |  |  |                 if triggerType == -1:
 | 
 |  |  |                     continue
 | 
 |  |  |                  | 
 |  |  |                 key = (triggerType,connSkillID)
 | 
 |  |  |                 if key not in self.AffectSuperEquipSkillDict:
 | 
 |  |  |                     self.AffectSuperEquipSkillDict[key] = []
 | 
 |  |  |                      | 
 |  |  |                 self.AffectSuperEquipSkillDict[key].append((skillTypeID, effectID))
 | 
 |  |  |                 # 效果叠加根据技能个数会衰减 = 1-pow((1-初始值),相同技能个数)
 | 
 |  |  |                 self.AffectSuperEquipEffectCntDict[effectID] = 1 - pow((1 - curEffect.GetEffectValue(0)),value)
 | 
 |  |  |          | 
 |  |  |         GameWorld.DebugLog("RefreshSuperEquipSkillDict %s-%s"%(self.AffectSuperEquipSkillDict, self.AffectSuperEquipEffectCntDict))
 | 
 |  |  |          | 
 |  |  |         return self.AffectSuperEquipSkillDict
 | 
 |  |  |     
 | 
 |  |  |     
 | 
 |  |  |     # 重刷可装备的被动技能
 | 
 |  |  | 
 |  |  |         skillList.extend(self.AffectSkillDict.get((triggerType, connSkillID), []))
 | 
 |  |  |         skillList.extend(self.AffectPassiveSkillSetDict.get((triggerType, connSkillID), []))
 | 
 |  |  |         skillList.extend(self.AffectDogzSkillDict.get((triggerType, connSkillID), []))
 | 
 |  |  |         skillList.extend(self.AffectSuperEquipSkillDict.get((triggerType, connSkillID), []))
 | 
 |  |  |          | 
 |  |  |         if connSkillID != 0 and connSkillID != ChConfig.Def_SkillID_Somersault:
 | 
 |  |  |             skillList.extend(self.AffectSkillDict.get((triggerType, 0), []))
 | 
 |  |  |             skillList.extend(self.AffectPassiveSkillSetDict.get((triggerType, 0), []))
 | 
 |  |  |             skillList.extend(self.AffectDogzSkillDict.get((triggerType, 0), []))
 | 
 |  |  |             skillList.extend(self.AffectSuperEquipSkillDict.get((triggerType, 0), []))
 | 
 |  |  |         return skillList
 | 
 |  |  |         
 | 
 |  |  | #所有obj的被动效果管理
 | 
 |  |  | 
 |  |  |             self.AddPassiveEff(gameObj, passiveEff)
 | 
 |  |  |         else:
 | 
 |  |  |             passiveEff.RefreshDogzBattleSkill()
 | 
 |  |  |         return
 | 
 |  |  |          | 
 |  |  |          | 
 |  |  |          | 
 |  |  |     # 人物需同步注册装备技能,技能目前为可触发的被动类,若有定义冲突则可用功能类型划分
 | 
 |  |  |     def RegistSuperEquipSkillDict(self, gameObj):
 | 
 |  |  |         passiveEff = self.GetPassiveEff(gameObj)
 | 
 |  |  |         if not passiveEff:
 | 
 |  |  |             # 强制刷新所有被动技能
 | 
 |  |  |             passiveEff = PassiveEff(gameObj)
 | 
 |  |  |             if not passiveEff.RefreshSuperEquipSkillDict():
 | 
 |  |  |                 return
 | 
 |  |  |             self.AddPassiveEff(gameObj, passiveEff)
 | 
 |  |  |         else:
 | 
 |  |  |             passiveEff.RefreshSuperEquipSkillDict()
 | 
 |  |  |         return
 | 
 |  |  |         
 | 
 |  |  |         
 | 
 |  |  | 
 |  |  |         skills.append(curSkill)
 | 
 |  |  |         
 | 
 |  |  |     return skills
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | # 遍历身上装备技能以及各自个数,装备技能不需要学习
 | 
 |  |  | # 保证不同的装备技能不会有相同的效果, 效果数值的衰减是根据相同技能个数计算而不是效果个数 1-pow((1-初始值),相同技能个数)
 | 
 |  |  | def FindSuperEquipSkills(gameObj):
 | 
 |  |  |     skillsDict = {}
 | 
 |  |  |     if gameObj.GetGameObjType() != IPY_GameWorld.gotPlayer:
 | 
 |  |  |         return skillsDict
 | 
 |  |  |      | 
 |  |  |     equipPack = gameObj.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
 | 
 |  |  |     for i in xrange(equipPack.GetCount()):
 | 
 |  |  |         curEquip = equipPack.GetAt(i)
 | 
 |  |  |          | 
 |  |  |         if not curEquip or curEquip.IsEmpty():
 | 
 |  |  |             continue
 | 
 |  |  |          | 
 |  |  |         if curEquip.GetAddSkill(0) == 0:
 | 
 |  |  |             #无技能
 | 
 |  |  |             continue
 | 
 |  |  |          | 
 |  |  |         for j in xrange(curEquip.GetAddSkillCount()):
 | 
 |  |  |             skillID = curEquip.GetAddSkill(j)
 | 
 |  |  |             if skillID == 0:
 | 
 |  |  |                 break
 | 
 |  |  |              | 
 |  |  |             skillsDict[skillID] = skillsDict.get(skillID, 0) + 1   | 
 |  |  |              | 
 |  |  |     return skillsDict
 |