|  |  |  | 
|---|
|  |  |  | #还在冷却时间内无法释放 | 
|---|
|  |  |  | if SkillCommon.RefreshSkillRemainTime(playerSkill, tick) != 0: | 
|---|
|  |  |  | PlayerControl.NotifyCode(curPlayer, "UseSkillCDLimit") | 
|---|
|  |  |  | AttackFailNotify(curPlayer, curSkill, ChConfig.SkillFail_CD) | 
|---|
|  |  |  | #AttackFailNotify(curPlayer, curSkill, ChConfig.SkillFail_CD) | 
|---|
|  |  |  | playerSkill.Sync_Skill() | 
|---|
|  |  |  | return False | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #5:检查玩家的魔法值是否够用这个技能 | 
|---|
|  |  |  | 
|---|
|  |  |  | # @return 返回值真, 检查通过 | 
|---|
|  |  |  | # @remarks 自定义函数, NPC使用有对象技能 | 
|---|
|  |  |  | def NPCUseSkillTag(curNPC, curTag, curSkill, tick): | 
|---|
|  |  |  | skillTag = GetSkillAffectTag(curSkill) | 
|---|
|  |  |  | if skillTag == ChConfig.Def_UseSkillTag_AppointNPC: | 
|---|
|  |  |  | # 指定释放的NPCID 和 Def_UseSkillTag_AppointNPC 搭配使用 | 
|---|
|  |  |  | curTag = GetAppointNPCBySkillEffect(curSkill) | 
|---|
|  |  |  | if not curTag: | 
|---|
|  |  |  | return False | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if not NPCCanUseSkillTag(curNPC, curTag, curSkill, tick): | 
|---|
|  |  |  | return False | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | curNPC.SetDict(ChConfig.Def_NPC_Dict_AtkMovePosY, 0) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return result | 
|---|
|  |  |  |  | 
|---|
|  |  |  | # 指定释放的NPCID 和 Def_UseSkillTag_AppointNPC 搭配使用 | 
|---|
|  |  |  | def GetAppointNPCBySkillEffect(curSkill): | 
|---|
|  |  |  | npcID = 0 | 
|---|
|  |  |  | effectID = ChConfig.Def_Skill_Effect_AppointNPC | 
|---|
|  |  |  | for i in xrange(0, curSkill.GetEffectCount()): | 
|---|
|  |  |  | curEffect = curSkill.GetEffect(i) | 
|---|
|  |  |  | curEffectID = curEffect.GetEffectID() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if not curEffectID: | 
|---|
|  |  |  | #策划有可能中途删除,不用return | 
|---|
|  |  |  | continue | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #不是需要的效果 | 
|---|
|  |  |  | if curEffectID != effectID: | 
|---|
|  |  |  | continue | 
|---|
|  |  |  |  | 
|---|
|  |  |  | npcID = curEffect.GetEffectValue(0) | 
|---|
|  |  |  | break | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if not npcID: | 
|---|
|  |  |  | return None | 
|---|
|  |  |  | return GameWorld.FindNPCByNPCID(npcID) | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | # 计算NPC技能位移坐标,预警和非预警都可以用 | 
|---|
|  |  |  | 
|---|
|  |  |  | # @return 返回值真, 检查通过 | 
|---|
|  |  |  | def NPCCanUseSkillTag(curNPC, curTag, curSkill, tick): | 
|---|
|  |  |  | skillTag = GetSkillAffectTag(curSkill) | 
|---|
|  |  |  | if skillTag == ChConfig.Def_UseSkillTag_AppointNPC: | 
|---|
|  |  |  | return True | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #---对象判定--- | 
|---|
|  |  |  | if IsToPetOwnerSkill(curNPC, skillTag): | 
|---|
|  |  |  | return True | 
|---|
|  |  |  | 
|---|
|  |  |  | Def_Attack_DelayTick = 5000 | 
|---|
|  |  |  | # tick 误差过大则过滤 | 
|---|
|  |  |  | if abs(clientTick - tick) > Def_Attack_DelayTick: | 
|---|
|  |  |  | curPlayer.Sync_ClientTick() | 
|---|
|  |  |  | GameWorld.DebugLog("tick 误差过大则过滤 > 5000") | 
|---|
|  |  |  | return False | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | def AttackFailNotify(curPlayer, curSkill, reason=0): | 
|---|
|  |  |  | sendPack = ChPyNetSendPack.tagMCAttackFail() | 
|---|
|  |  |  | sendPack.SkillID = curSkill.GetSkillID() | 
|---|
|  |  |  | sendPack.Reason = reason | 
|---|
|  |  |  | NetPackCommon.SendFakePack(curPlayer, sendPack) | 
|---|
|  |  |  | #--------------------------玩家使用技能 | 
|---|
|  |  |  | #=============================================================================== | 
|---|
|  |  |  | 
|---|
|  |  |  | buffState.DeleteEffectByIndex(i) | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | # 通过技能ID列表删除buff对应的效果ID | 
|---|
|  |  |  | # 通过技能ID列表删除buff对应的效果ID, 死亡调用 | 
|---|
|  |  |  | def ClearBuffEffectBySkillIDList(curObj, buffState, skillIDList): | 
|---|
|  |  |  |  | 
|---|
|  |  |  | effectIndexList = [] | 
|---|
|  |  |  | 
|---|
|  |  |  | if curEffectID == 0: | 
|---|
|  |  |  | continue | 
|---|
|  |  |  |  | 
|---|
|  |  |  | # [技能ID, 来源对象ID,对象类型] | 
|---|
|  |  |  | if [buffState.GetEffectFromSkillID(i), | 
|---|
|  |  |  | buffState.GetEffectOwnerID(i), | 
|---|
|  |  |  | buffState.GetEffectOwnerType(i)] not in skillIDList: | 
|---|
|  |  |  | #======================================================================= | 
|---|
|  |  |  | # # [技能ID, 来源对象ID,对象类型] | 
|---|
|  |  |  | # if [buffState.GetEffectFromSkillID(i), | 
|---|
|  |  |  | #    buffState.GetEffectOwnerID(i), | 
|---|
|  |  |  | #    buffState.GetEffectOwnerType(i)] not in skillIDList: | 
|---|
|  |  |  | #    continue | 
|---|
|  |  |  | #======================================================================= | 
|---|
|  |  |  | # 改成只判断技能ID | 
|---|
|  |  |  | if buffState.GetEffectFromSkillID(i) not in skillIDList: | 
|---|
|  |  |  | continue | 
|---|
|  |  |  |  | 
|---|
|  |  |  | effectIndexList.append(i) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | # 倒序删除 | 
|---|
|  |  |  | 
|---|
|  |  |  | OperControlManager.SetObjActState(curObj, buffSkill) | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | # 非属性技能算属性 特殊处理 | 
|---|
|  |  |  | # 法宝SP技能 如1-4级为增加属性,第5级为伤害效果,第6-10级就要包含属性和伤害效果 | 
|---|
|  |  |  | def CalcFabaoSPSkillAttr(curPlayer, curPlayerSkill, allAttrList): | 
|---|
|  |  |  | if curPlayerSkill.GetFuncType() != ChConfig.Def_SkillFuncType_FbSPSkill: | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | value = GetMaxHPAttrValue(curPlayerSkill) | 
|---|
|  |  |  | if value == 0: | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  | PlayerControl.CalcAttrDict_Type(ShareDefine.Def_Effect_MaxHP, value, allAttrList) | 
|---|
|  |  |  | return | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | # 计算属性类技能的属性,同buff层不算战力 | 
|---|
|  |  |  | def CalcPassiveAttr_Effect(curPlayer, allAttrList): | 
|---|
|  |  |  | skillManager = curPlayer.GetSkillManager() | 
|---|
|  |  |  | 
|---|
|  |  |  | if curPlayerSkill == None: | 
|---|
|  |  |  | continue | 
|---|
|  |  |  |  | 
|---|
|  |  |  | CalcFabaoSPSkillAttr(curPlayer, curPlayerSkill, allAttrList) | 
|---|
|  |  |  | if not SkillCommon.isPassiveAttr(curPlayerSkill): | 
|---|
|  |  |  | continue | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | def GetUpLVCostItemNum(curSkill): | 
|---|
|  |  |  | return curSkill.GetExAttr5() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | # 技能特殊增加属性配置,目前只支持生命,潜力技能专用 | 
|---|
|  |  |  | def GetMaxHPAttrValue(curSkill): | 
|---|
|  |  |  | return curSkill.GetMP() | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ##获得当前技能升级消耗的真气值 | 
|---|
|  |  |  | # @param curSkill 当前技能技能 | 
|---|