hch
2019-05-17 6fcf3513ccde191e067c8dfd8279cccedf95eb77
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
@@ -126,9 +126,11 @@
    
    #技能攻击最大数量
    hurtCount = SkillCommon.GetSkillArea_Atk_Count(curPlayer, curSkill)
    if len(hurtList) > hurtCount:
        # 客户端目标过多
        return False
    #===========================================================================
    # if len(hurtList) > hurtCount:
    #    # 客户端目标过多
    #    return False
    #===========================================================================
    
#    mapType = GameWorld.GetMap().GetMapFBType()
    # 野外小怪或者其他指定的怪为了更及时的打击感,由客户端计算
@@ -2060,6 +2062,8 @@
## 获取技能升级属性需求 rutrun attrID, attrvalue
def GetSkillUpNeedAttr(stateSkillLV):return stateSkillLV /100000, stateSkillLV%100000
## 获取技能专精类型
def GetSkillElementType(curSkill): return curSkill.GetStateSkillLV() /100000
#// A5 16 选择技能五行专精 #tagCMSelectSkillElement
#
@@ -2092,10 +2096,11 @@
    if nextSkill:
        if CheckLearnSkillNeedAttr(curPlayer, nextSkill):
            updSelectSkillLV = activeSkillLV + 1
            skillElementType = GetSkillElementType(nextSkill)
    isChangeSkill = False #是否变更生效的技能
    if updSelectSkillLV != activeSkillLV:
        #可升级则激活升一级
        EventShell.EventRespons_ElementSkill(curPlayer, mainSkillID, updSelectSkillLV)
        EventShell.EventRespons_ElementSkill(curPlayer, mainSkillID, skillElementType, updSelectSkillLV)
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SkillElementLV % selectSkillID, updSelectSkillLV)
        if curElementSkillID == selectSkillID:
            #正在使用的专精技能,则立即生效
@@ -2105,7 +2110,7 @@
        
    if isChangeSkill:
        #更换专精
        if not RefreshElementSkill(curPlayer, selectSkillID):
        if not RefreshElementSkill(curPlayer, selectSkillID)[1]:
            GameWorld.DebugLog('更换专精 不成功 selectSkillID=%s'%selectSkillID)
            return
        
@@ -2128,9 +2133,10 @@
def RefreshElementSkill(curPlayer, skillTypeID, isChangeLV=True):
    ##更新专精技能生效的等级
    isNotify, hasChangeLV = False, False
    __InitElementSkillInfo()
    if skillTypeID not in PyGameData.g_elemntSkillDict:
        return
        return isNotify, hasChangeLV
    baseAttrDict = {
                            ShareDefine.Def_Effect_Metal:PlayerControl.GetMetal(curPlayer),
                            ShareDefine.Def_Effect_Wood:PlayerControl.GetWood(curPlayer),
@@ -2150,15 +2156,16 @@
            break
    if activeSkillLV > updSkillLV:
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SkillElementLV % skillTypeID, updSkillLV)
        isNotify = True
    updSkillLV = min(updSkillLV, activeSkillLV) #不可超过激活的等级
    skillManager = curPlayer.GetSkillManager()
    curSkill = skillManager.FindSkillBySkillTypeID(skillTypeID)
    curSkillLV = curSkill.GetSkillLV() if curSkill else 0
    #GameWorld.DebugLog('更新专精技能生效的等级 skillTypeID=%s,curSkillLV=%s,activeSkillLV=%s,updSkillLV=%s'%(skillTypeID, curSkillLV, activeSkillLV, updSkillLV))
    if not isChangeLV:
        return
        return isNotify, hasChangeLV
    if updSkillLV == curSkillLV:
        return
        return isNotify, hasChangeLV
    elif updSkillLV < curSkillLV:
        skillManager.DeleteSkillBySkillTypeID(skillTypeID)
        for _ in xrange(updSkillLV):
@@ -2167,10 +2174,11 @@
            ipyData = IpyGameDataPY.GetIpyGameData('SkillElement', skillTypeID)
            mainSkillID = ipyData.GetMainSkillID()
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SkillElementID % mainSkillID, 0)
            isNotify = True
    else:
        for _ in xrange(updSkillLV-curSkillLV):
            skillManager.LVUpSkillBySkillTypeID(skillTypeID)
    return True
    return isNotify, True
def RefreshElementSkillByAttr(curPlayer, attrIDList):
    #加点、丹药、境界、洗点 会影响灵根点
@@ -2195,9 +2203,12 @@
            needRefreshSkillIDDict[curElementSkillID] = curSelectSkillID == curElementSkillID
    
    #GameWorld.DebugLog('属性点变更 刷新专精attrIDList=%s,needRefreshSkillIDList=%s'%(attrIDList,needRefreshSkillIDList))
    isRefresh = False
    needNotify, isRefresh = False, False
    for skillID, isChangeLV in needRefreshSkillIDDict.items():
        if RefreshElementSkill(curPlayer, skillID, isChangeLV):
        isNotify, hasChangeLV = RefreshElementSkill(curPlayer, skillID, isChangeLV)
        if isNotify:
            needNotify = True
        if hasChangeLV:
            isRefresh = True
    if isRefresh:
        # 重刷被动技能
@@ -2206,11 +2217,14 @@
        curControl = PlayerControl.PlayerControl(curPlayer)
        curControl.RefreshAllSkill()
        curControl.RefreshPlayerAttrState()
    NotifyElementSkillInfo(curPlayer)
    if needNotify:
        NotifyElementSkillInfo(curPlayer)
    return
def GetElementSkillCnt(curPlayer, mainSkillIDList, activeLV):
def GetElementSkillCnt(curPlayer, mainSkillIDList, activeLV, elementType=0):
    ##获取已选择的专精技能数量
    # @param elementType: 专精类型,对应灵根ID
    gameData = GameWorld.GetGameData()
    cnt = 0
    skillManager = curPlayer.GetSkillManager()
    for i in xrange(skillManager.GetSkillCount()):
@@ -2223,6 +2237,10 @@
            continue
        for ipyData in ipyDataList:
            elementSkillID = ipyData.GetElementSkillID()
            if elementType:
                elementSkillData = gameData.GetSkillBySkillID(elementSkillID)
                if GetSkillElementType(elementSkillData) != elementType:
                    continue
            curActiveLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SkillElementLV % elementSkillID)
            if curActiveLV >= activeLV:
                cnt += 1