|  |  |  | 
|---|
|  |  |  | #还在冷却时间内无法释放 | 
|---|
|  |  |  | 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) | 
|---|
|  |  |  | #--------------------------玩家使用技能 | 
|---|
|  |  |  | #=============================================================================== | 
|---|