ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
@@ -41,7 +41,7 @@
import GameMap
import collections
import PassiveBuffEffMng
import EffGetSet
import ChEquip
import SkillShell
import FBCommon
import IpyGameDataPY
@@ -258,7 +258,7 @@
    #还在冷却时间内无法释放
    if SkillCommon.RefreshSkillRemainTime(playerSkill, tick) != 0:
        PlayerControl.NotifyCode(curPlayer, "UseSkillCDLimit")
        #PlayerControl.NotifyCode(curPlayer, "UseSkillCDLimit")
        #AttackFailNotify(curPlayer, curSkill, ChConfig.SkillFail_CD)
        playerSkill.Sync_Skill()
        return False
@@ -579,6 +579,18 @@
    
    return True
def IsNPCSkillResist(curNPC):
    ## NPC是否技能抵抗,对应技能表中伤害类型HurtType为3的技能,即对boss无效的技能
    if curNPC.GetCurAction() == IPY_GameWorld.laNPCSkillWarning:
        #GameWorld.DebugLog("预警状态下默认抵抗")
        return True
    bossIpyData = IpyGameDataPY.GetIpyGameDataNotLog("BOSSInfo", curNPC.GetNPCID())
    if bossIpyData and bossIpyData.GetSkillResist():
        return True
    return False
##是否召唤兽对主人使用技能
# @param curNPC NPC实例
@@ -1905,10 +1917,10 @@
    if not CheckLearnSkillCondition(curPlayer, upSkill):
        return False
    
    #坐骑技能学习判断
    if upSkill.GetFuncType() == ChConfig.Def_SkillFuncType_HorseSkill:
        if not PlayerHorse.CheckLearnHorseSkill(curPlayer, curSkillTypeID):
            return False
#    #坐骑技能学习判断
#    if upSkill.GetFuncType() == ChConfig.Def_SkillFuncType_HorseSkill:
#        if not PlayerHorse.CheckLearnHorseSkill(curPlayer, curSkillTypeID):
#            return False
    #天赋技学习点数判断
    if upSkill.GetFuncType() == ChConfig.Def_SkillFuncType_GiftSkill:
        if not PlayerGreatMaster.GetGreatMasterFreeSkillPoint(curPlayer):
@@ -2133,7 +2145,8 @@
            GameWorld.DebugLog('更换专精 不成功 selectSkillID=%s'%selectSkillID)
            return
        
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SkillElementID % mainSkillID, selectSkillID)
        UpdateElementSkillSelect(curPlayer, mainSkillID, selectSkillID)
        #ChEquip.ChangeEquipfacadeByLingGen(curPlayer)
        if curElementSkillID and curElementSkillID != selectSkillID:
            #原技能删除
            skillManager.DeleteSkillBySkillTypeID(curElementSkillID)
@@ -2147,6 +2160,40 @@
        curControl.RefreshPlayerAttrState()
       
    NotifyElementSkillInfo(curPlayer, mainSkillID, selectSkillID if updSelectSkillLV != activeSkillLV else 0)
    return
def UpdateElementSkillSelect(curPlayer, mainSkillID, selectSkillID):
    ## 更新专精技能选择, selectSkillID 可能被重置为0
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SkillElementID % mainSkillID, selectSkillID)
    #GameWorld.DebugLog("更新专精技能选择  mainSkillID=%s, selectSkillID=%s" % (mainSkillID, selectSkillID))
    # 以下额外更新选择的专精技能对应编号,用于表现其他玩家不同专精技能特效用
    mainSkillList = IpyGameDataPY.GetFuncEvalCfg("SkillActTypeIdSort", curPlayer.GetJob())
    if mainSkillID not in mainSkillList:
        return
    mainSkillIndex = mainSkillList.index(mainSkillID)
    if mainSkillIndex < ShareDefine.Def_PDictDigitCnt:
        exAttrValue = curPlayer.GetExAttr7()
        exAttrIndex = mainSkillIndex
    else:
        exAttrValue = curPlayer.GetExAttr8()
        exAttrIndex = mainSkillIndex - ShareDefine.Def_PDictDigitCnt
    elementSkillNum = 0
    if selectSkillID:
        ipyData = IpyGameDataPY.GetIpyGameData('SkillElement', selectSkillID)
        if ipyData:
            elementSkillNum = ipyData.GetElementSkillNum()
    updExAttrValue = GameWorld.ChangeDataByDigitPlace(exAttrValue, exAttrIndex, elementSkillNum)
    #GameWorld.DebugLog("    exAttrValue=%s,exAttrIndex=%s,elementSkillNum=%s,updExAttrValue=%s"
    #                   % (exAttrValue, exAttrIndex, elementSkillNum, updExAttrValue))
    # 需要广播周围玩家
    if mainSkillIndex < ShareDefine.Def_PDictDigitCnt:
        curPlayer.SetExAttr7(updExAttrValue, True)
    else:
        curPlayer.SetExAttr8(updExAttrValue, True)
    return
def RefreshElementSkill(curPlayer, skillTypeID, isChangeLV=True):
@@ -2191,7 +2238,8 @@
        if updSkillLV == 0:#重置为未选状态
            ipyData = IpyGameDataPY.GetIpyGameData('SkillElement', skillTypeID)
            mainSkillID = ipyData.GetMainSkillID()
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SkillElementID % mainSkillID, 0)
            UpdateElementSkillSelect(curPlayer, mainSkillID, 0)
            #ChEquip.ChangeEquipfacadeByLingGen(curPlayer)
            isNotify = True
    else:
        for _ in xrange(updSkillLV-curSkillLV):
@@ -3749,11 +3797,11 @@
        
        # 当技能类型为被动技能并且tag字段为0,则此技能为媒介用于触发技能 SkillEnhance1 SkillEnhance2
        skill1 = GameWorld.GetGameData().GetSkillBySkillID(curSkill.GetSkillEnhance1())
        if skill1:
        if skill1 and GameWorld.CanHappen(skill1.GetHappenRate(), ChConfig.Def_MaxRateValue):
            result = True if UsePassiveTriggerSkill(attacker, skill1, target, tick, True) else result
            
        skill2 = GameWorld.GetGameData().GetSkillBySkillID(curSkill.GetSkillEnhance2())
        if skill2:
        if skill2 and GameWorld.CanHappen(skill2.GetHappenRate(), ChConfig.Def_MaxRateValue):
            result = True if UsePassiveTriggerSkill(attacker, skill2, target, tick, True) else result
        
        SkillCommon.SetSkillRemainTime(curSkill, PlayerControl.GetReduceSkillCDPer(attacker), tick, attacker)