| | |
| | |
|
| | | #技能攻击最大数量
|
| | | hurtCount = SkillCommon.GetSkillArea_Atk_Count(curPlayer, curSkill)
|
| | | if len(hurtList) > hurtCount:
|
| | | # 客户端目标过多
|
| | | return False
|
| | | #===========================================================================
|
| | | # if len(hurtList) > hurtCount:
|
| | | # # 客户端目标过多
|
| | | # return False
|
| | | #===========================================================================
|
| | |
|
| | | # mapType = GameWorld.GetMap().GetMapFBType()
|
| | | # 野外小怪或者其他指定的怪为了更及时的打击感,由客户端计算
|
| | |
| | | #{
|
| | | # tagHead Head;
|
| | | # DWORD SkillTypeID; // 专精技能ID
|
| | | # BYTE DoType; // 0-激活升级 1-使用
|
| | | #};
|
| | | def OnSelectSkillElement(index, clientData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | |
| | | if not mainSkill:
|
| | | GameWorld.DebugLog('主技能未学习,无法选专精mainSkillID=%s'%mainSkillID)
|
| | | return
|
| | | doType = clientData.DoType
|
| | | curElementSkillID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SkillElementID % mainSkillID)
|
| | | activeSkillLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SkillElementLV % selectSkillID)
|
| | | #先判断是否可升级
|
| | | updSelectSkillLV = activeSkillLV
|
| | | nextSkill = GameWorld.GetGameData().FindSkillByType(selectSkillID, activeSkillLV + 1)
|
| | | if nextSkill:
|
| | | if CheckLearnSkillNeedAttr(curPlayer, nextSkill):
|
| | | updSelectSkillLV = activeSkillLV + 1
|
| | | skillElementType = GetSkillElementType(nextSkill)
|
| | | isChangeSkill = False #是否变更生效的技能
|
| | | if updSelectSkillLV != activeSkillLV:
|
| | | updSelectSkillLV = activeSkillLV
|
| | | #先判断是否可升级
|
| | | if doType is 0:
|
| | | nextSkill = GameWorld.GetGameData().FindSkillByType(selectSkillID, activeSkillLV + 1)
|
| | | if not nextSkill:
|
| | | return
|
| | |
|
| | | if not CheckLearnSkillNeedAttr(curPlayer, nextSkill):
|
| | | return
|
| | | updSelectSkillLV = activeSkillLV + 1
|
| | | skillElementType = GetSkillElementType(nextSkill)
|
| | |
|
| | | #可升级则激活升一级
|
| | | EventShell.EventRespons_ElementSkill(curPlayer, mainSkillID, skillElementType, updSelectSkillLV)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SkillElementLV % selectSkillID, updSelectSkillLV)
|
| | | if curElementSkillID == selectSkillID:
|
| | | if not curElementSkillID or curElementSkillID == selectSkillID:
|
| | | #正在使用的专精技能,则立即生效
|
| | | isChangeSkill = True
|
| | | elif selectSkillID != curElementSkillID:
|
| | | else: # 使用
|
| | | if not activeSkillLV:
|
| | | #未激活不能使用
|
| | | return
|
| | | if selectSkillID == curElementSkillID:
|
| | | return
|
| | | isChangeSkill = True
|
| | | |
| | | |
| | | if isChangeSkill:
|
| | | #更换专精
|
| | | if not RefreshElementSkill(curPlayer, selectSkillID):
|
| | | if not RefreshElementSkill(curPlayer, selectSkillID)[1]:
|
| | | GameWorld.DebugLog('更换专精 不成功 selectSkillID=%s'%selectSkillID)
|
| | | return
|
| | |
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SkillElementID % mainSkillID, selectSkillID)
|
| | | if curElementSkillID:
|
| | | if curElementSkillID != selectSkillID:
|
| | | #原技能删除
|
| | | skillManager.DeleteSkillBySkillTypeID(curElementSkillID)
|
| | | if curElementSkillID and curElementSkillID != selectSkillID:
|
| | | #原技能删除
|
| | | skillManager.DeleteSkillBySkillTypeID(curElementSkillID)
|
| | |
|
| | |
|
| | | # 重刷被动技能
|
| | |
| | |
|
| | | 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, elementType=0):
|