| | |
| | |
|
| | | # 致命一击
|
| | | def __HurtTypeHappen_Deadly(atkObj, defObj, happenState, curSkill):
|
| | | if PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, None, ChConfig.TriggerType_IsDealy):
|
| | | return True, 0, 0
|
| | | deadlyHitValue = PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(atkObj, defObj, None, ChConfig.TriggerType_IsDealy)
|
| | | if deadlyHitValue:
|
| | | return True, deadlyHitValue, 0
|
| | | return
|
| | |
|
| | | #重击定义:当触发重击时,则增加双倍暴击固定值伤害(重击与暴击互斥,优先判断重击,当重击触发时,暴击不触发)
|
| | |
| | |
|
| | | dDamChanceDef = hurtTypeResultDict[ChConfig.Def_HurtType_Parry][2] # 抵御, 大于0代表触发抵御效果
|
| | | isZhuxianHit, aZhuxianHurtPer, dZhuxianReducePer = hurtTypeResultDict[ChConfig.Def_HurtType_Zhuxian] # 诛仙一击
|
| | | isDeadlyHit = hurtTypeResultDict[ChConfig.Def_HurtType_DeadlyHit][0] # 致命一击
|
| | | isDeadlyHit, deadlyHitMultiValue, _ = hurtTypeResultDict[ChConfig.Def_HurtType_DeadlyHit] # 致命一击
|
| | |
|
| | | if PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defObj, atkObj, None, ChConfig.TriggerType_OneDamage):
|
| | | return 1, hurtType
|
| | |
| | | hurtFormula = hurtDist[hurtFormulaKey]
|
| | |
|
| | | hurtValue = int(eval(FormulaControl.GetCompileFormula(hurtFormulaKey, hurtFormula)))
|
| | |
|
| | | if isDeadlyHit:
|
| | | hurtValue *= deadlyHitMultiValue
|
| | | |
| | | if hurtType == ChConfig.Def_HurtType_Normal and atkSkillPerYinji > 0:
|
| | | return hurtValue, ChConfig.Def_HurtType_Yinji
|
| | | elif hurtType == ChConfig.Def_HurtType_Normal and SuppressValueRealmRate > 10000:
|
| | |
| | | Def_SkillFuncType_SuiteSkill, #14 套装技能
|
| | | Def_SkillFuncType_PassiveSkillWithSP, #15 可有专精的被动技能
|
| | | Def_SkillFuncType_PetOwnerSkill, #16 宠物主人技能
|
| | | ) = range(17)
|
| | | Def_SkillFuncType_17, #17 称号技能 |
| | | Def_SkillFuncType_EquipPassiveSkill, #18 装备被动技能
|
| | | ) = range(19)
|
| | |
|
| | | # 受技能效果完全影响的怪, 对应 Def_BattleRelationType_CommNoBoss
|
| | | Def_SkillAttack_NPCIsBoss = [ Def_NPCType_Ogre_Normal , #平凡小怪 0 # c++ 定义为普通NPC视野刷新
|
| | |
| | | 14 : "套装技能",
|
| | | 15 : "可有专精的被动技能",
|
| | | 16 : "灵宠主人技能",
|
| | | 17 : "称号技能",
|
| | | 18 : "装备被动技能",
|
| | | }
|
| | |
|
| | | for funcType, skillList in skillDict.items():
|
| | |
| | | return
|
| | | GameWorld.Log("加载物品数据...")
|
| | |
|
| | | PyGameData.EquipItemSkillIDList = []
|
| | | PyGameData.DailyUseCountLimitItemIDList = []
|
| | |
|
| | | gameData = GameWorld.GetGameData()
|
| | |
| | | stoneLevel = itemEff.GetEffectValue(1)
|
| | | PyGameData.g_stoneLevelIDDict[(stoneEffType, stoneLevel)] = itemID
|
| | |
|
| | | if GetIsEquip(findItemData):
|
| | | for skillIndex in xrange(findItemData.GetAddSkillCount()):
|
| | | itemSkillID = findItemData.GetAddSkill(skillIndex)
|
| | | if not itemSkillID:
|
| | | continue
|
| | | if itemSkillID not in PyGameData.EquipItemSkillIDList:
|
| | | PyGameData.EquipItemSkillIDList.append(itemSkillID)
|
| | | |
| | | if PyGameData.DailyUseCountLimitItemIDList:
|
| | | GameWorld.Log("每日有使用次数限制的物品ID列表: %s" % PyGameData.DailyUseCountLimitItemIDList)
|
| | |
|
| | | if PyGameData.EquipItemSkillIDList:
|
| | | GameWorld.Log("装备技能ID列表: %s" % PyGameData.EquipItemSkillIDList)
|
| | | |
| | | PyGameData.InitPyItem = True
|
| | | return
|
| | |
|
| | |
| | |
|
| | | InitPyItem = False # 是否加载过物品表所需要的Py数据, 每张地图只在启动时执行一次
|
| | | DailyUseCountLimitItemIDList = [] # 每日有使用个数限制的物品ID列表
|
| | | EquipItemSkillIDList = [] # 装备技能ID列表
|
| | | g_stoneLevelIDDict = {} # 宝石类型等级对应物品ID {(stoneEffType, stoneLevel):itemID, ...}
|
| | |
|
| | | g_refreshAttrBillboardFunc = [] # 刷属性后需要触发的同步排行榜函数列表
|
| | |
| | |
|
| | |
|
| | | def GetValue(attacker, defender, effect):
|
| | | return 1
|
| | | return effect.GetEffectValue(1) # 数值2为倍数
|
| | |
| | | continue
|
| | |
|
| | | if curSkill.GetFuncType() in [ChConfig.Def_SkillFuncType_FbPassiveSkill,
|
| | | ChConfig.Def_SkillFuncType_Dogz]:
|
| | | ChConfig.Def_SkillFuncType_Dogz,
|
| | | ChConfig.Def_SkillFuncType_EquipPassiveSkill]:
|
| | | # 被动技能和神兽需设置才有效
|
| | | continue
|
| | |
|
| | |
| | | if callFunc is None:
|
| | | continue
|
| | |
|
| | | curValue += callFunc(attacker, defender, effect)
|
| | | if triggerType == ChConfig.TriggerType_IsDealy:
|
| | | curValue = callFunc(attacker, defender, effect)
|
| | | else:
|
| | | curValue += callFunc(attacker, defender, effect)
|
| | | if skillTypeID not in Def_PassiveSkillValueNoCD:
|
| | | if curSkill.GetCoolDownTime():
|
| | | SkillCommon.SetSkillRemainTime(curSkill, 0, tick, attacker)
|
| | |
| | | for skillID in itemSkillIDList:
|
| | | skillsDict[skillID] = skillsDict.get(skillID, 0) + 1
|
| | |
|
| | | skillManager = gameObj.GetSkillManager()
|
| | | for skillID in PyGameData.EquipItemSkillIDList:
|
| | | hasSkill = skillManager.FindSkillBySkillTypeID(skillID)
|
| | | if skillID in skillsDict:
|
| | | if not hasSkill:
|
| | | skillManager.LVUpSkillBySkillTypeID(skillID)
|
| | | #GameWorld.DebugLog("学习装备技能: %s" % skillID, gameObj.GetPlayerID())
|
| | | else:
|
| | | if hasSkill:
|
| | | skillManager.DeleteSkillBySkillTypeID(skillID)
|
| | | #GameWorld.DebugLog("删除装备技能: %s" % skillID, gameObj.GetPlayerID())
|
| | | |
| | | return skillsDict
|
| | |
|
| | | # 默认情况下 被动不应该再触发(或加强)被动技能,会造成额外触发或者死循环
|