| | |
| | |
|
| | | #技能攻击最大数量
|
| | | hurtCount = SkillCommon.GetSkillArea_Atk_Count(curPlayer, curSkill)
|
| | | if len(hurtList) > hurtCount:
|
| | | # 客户端目标过多
|
| | | return False
|
| | | #===========================================================================
|
| | | # if len(hurtList) > hurtCount:
|
| | | # # 客户端目标过多
|
| | | # return False
|
| | | #===========================================================================
|
| | |
|
| | | # mapType = GameWorld.GetMap().GetMapFBType()
|
| | | # 野外小怪或者其他指定的怪为了更及时的打击感,由客户端计算
|
| | |
| | |
|
| | | ## 获取技能升级属性需求 rutrun attrID, attrvalue
|
| | | def GetSkillUpNeedAttr(stateSkillLV):return stateSkillLV /100000, stateSkillLV%100000
|
| | | ## 获取技能专精类型
|
| | | def GetSkillElementType(curSkill): return curSkill.GetStateSkillLV() /100000
|
| | |
|
| | | #// A5 16 选择技能五行专精 #tagCMSelectSkillElement
|
| | | #
|
| | |
| | | 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:
|
| | | #正在使用的专精技能,则立即生效
|
| | |
| | |
|
| | | if isChangeSkill:
|
| | | #更换专精
|
| | | if not RefreshElementSkill(curPlayer, selectSkillID):
|
| | | if not RefreshElementSkill(curPlayer, selectSkillID)[1]:
|
| | | GameWorld.DebugLog('更换专精 不成功 selectSkillID=%s'%selectSkillID)
|
| | | return
|
| | |
|
| | |
| | |
|
| | | 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),
|
| | |
| | | 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):
|
| | |
| | | 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):
|
| | | #加点、丹药、境界、洗点 会影响灵根点
|
| | |
| | | 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:
|
| | | # 重刷被动技能
|
| | |
| | | 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()):
|
| | |
| | | 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
|