From bd042c2dfd7d7b9cc7a40a6a3e149c52f6c7e87d Mon Sep 17 00:00:00 2001 From: xdh <xiefantasy@qq.com> Date: 星期四, 07 三月 2019 10:10:00 +0800 Subject: [PATCH] 6307 【后端】【2.0】多套装备开发单(初始装备背包格子130) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGreatMaster.py | 679 +++++++++++++++++++------------------------------------ 1 files changed, 238 insertions(+), 441 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGreatMaster.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGreatMaster.py index 2509871..aee55dc 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGreatMaster.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGreatMaster.py @@ -6,82 +6,51 @@ # ##@package Player.PlayerGreatMaster # -# @todo:大师系统 -# @author hxp -# @date 2015-2-27 -# @version 1.8 +# @todo:天赋系统 +# @author xdh +# @date 2018-9-26 +# @version 1.0 # -# @change: "2015-03-05 11:00" hxp 根据大师等级获取大师所需升级经验 -# @change: "2015-03-07 00:00" hxp 天赋buff刷属性时机修改 -# @change: "2015-03-07 04:10" ljd 保存成功系统提示 -# @change: "2015-05-28 14:00" hxp 刷属性优化 -# @change: "2015-07-29 15:20" xdh 大师改成等级开启 -# @change: "2015-08-24 14:40" zqx 增加分配x点天赋点成就 -# @change: "2016-01-26 15:00" hxp PY表支持重读 -# @change: "2016-06-02 20:00" hxp 功能开放逻辑修改 # -# 详细描述: 大师系统 +# 详细描述: 天赋系统 # #--------------------------------------------------------------------- -#"""Version = 2016-06-02 20:00""" +#"""Version = 2018-9-26 20:00""" import GameWorld -import PyMapTable import PlayerControl import IPY_GameWorld -import PlayerBillboard -import ChPyNetSendPack import DataRecordPack -import NetPackCommon -import ReadChConfig import SkillCommon import ShareDefine -import SkillShell -import BuffSkill import ChConfig -import PlayerSuccess import GameFuncComm import IpyGameDataPY +import ItemCommon +import PassiveBuffEffMng ## 大师功能是否开启 # @param curPlayer # @return def IsGreatMasterOpen(curPlayer): -# curReinCnt = curPlayer.GetReincarnationLv() # 当前转生次数 -# if curReinCnt < 3: -# return False - - if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_GreatMaster): + if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Talent): return False - return True -## 增加大师天赋点 -# @param curPlayer -# @return -def AddGreatMasterSkillPointByLV(curPlayer, addPoint): - if not addPoint: - return +def DoTalentOpen(curPlayer): + '''天赋功能开启处理天赋点 ''' + curLV = curPlayer.GetLV() + openLV = GameFuncComm.GetFuncLimitLV(ShareDefine.GameFuncID_Talent) + setTalentPoint = 0 + for lv in xrange(openLV, curLV+1): + lvIpyData = PlayerControl.GetPlayerLVIpyData(lv) + addTalentPoint = lvIpyData.GetTalentPoint() if lvIpyData else 0 + setTalentPoint += addTalentPoint curFreeSkillPoint = GetGreatMasterFreeSkillPoint(curPlayer) - #GameWorld.DebugLog("大师天赋点!curFreeSkillPoint = %s"%curFreeSkillPoint) - SetGreatMasterFreeSkillPoint(curPlayer, curFreeSkillPoint + addPoint) - Sync_GreatMasterFreeSkillPoint(curPlayer) - return - - -## 转生处理 -# @param curPlayer -# @return -def OnReincarnation(curPlayer): - #如果是满级的,则多余经验转移到大师经验 - isFullLV = curPlayer.GetLVEx() >= IpyGameDataPY.GetFuncCfg("PlayerMaxLV") # 玩家已满级 - - if not isFullLV: - return - - curTotalExp = PlayerControl.GetPlayerTotalExp(curPlayer) # 当前经验 - PlayerControl.SetPlayerTotalExp(curPlayer, 0) - AddGreatMasterExp(curPlayer, curTotalExp) + if setTalentPoint != curFreeSkillPoint: + SetGreatMasterFreeSkillPoint(curPlayer, setTalentPoint) + Sync_GreatMasterFreeSkillPoint(curPlayer) + GameWorld.Log(' 天赋功能开启处理天赋点 beforeTalentPoint=%s,setTalentPoint=%s, curLV=%s'%(curFreeSkillPoint, setTalentPoint, curLV), curPlayer.GetID()) return ## 登录处理 @@ -91,47 +60,22 @@ if not IsGreatMasterOpen(curPlayer): return - Sync_GreatMasterExp(curPlayer) Sync_GreatMasterFreeSkillPoint(curPlayer) return -## 获取当前大师经验(不算经验点的) -def GetCurGreatMasterExp(curPlayer): - return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Master_Exp, 0, ChConfig.Def_PDictType_GreatMaster) -## 设置当前大师经验(不算经验点的) -def SetCurGreatMasterExp(curPlayer, value): - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Master_Exp, value, ChConfig.Def_PDictType_GreatMaster) +## 增加大师天赋点 +# @param curPlayer +# @return +def AddGreatMasterSkillPointByLV(curPlayer, addPoint): + if not addPoint: + return + curFreeSkillPoint = GetGreatMasterFreeSkillPoint(curPlayer) + GameWorld.DebugLog("大师天赋点!curFreeSkillPoint = %s"%curFreeSkillPoint) + SetGreatMasterFreeSkillPoint(curPlayer, curFreeSkillPoint + addPoint) + Sync_GreatMasterFreeSkillPoint(curPlayer) return -## 获取当前大师经验点 -def GetGreatMasterExpPoint(curPlayer): - return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Master_ExpPoint, 0, ChConfig.Def_PDictType_GreatMaster) - -## 设置当前大师经验点 -def SetGreatMasterExpPoint(curPlayer, value): - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Master_ExpPoint, value, ChConfig.Def_PDictType_GreatMaster) - return - -## 获取当前大师总经验(包含经验点) -def GetTotalGreatMasterExp(curPlayer): - masterExp = GetCurGreatMasterExp(curPlayer) - masterExpPoint = GetGreatMasterExpPoint(curPlayer) - totalMasterExp = masterExpPoint * ChConfig.Def_PerPointValue + masterExp - return totalMasterExp - -## 设置当前大师总经验(包含经验点) -def SetTotalGreatMasterExp(curPlayer, totalExp): - curExp = totalExp % ChConfig.Def_PerPointValue - expPoint = totalExp / ChConfig.Def_PerPointValue - - # 更新大师经验、经验点 - SetCurGreatMasterExp(curPlayer, curExp) - SetGreatMasterExpPoint(curPlayer, expPoint) - #GameWorld.DebugLog("SetTotalGreatMasterExp totalExp=%s,expPoint=%s,curExp=%s" - # % (totalExp, expPoint, curExp), curPlayer.GetPlayerID()) - Sync_GreatMasterExp(curPlayer) - return ## 获取当前剩余大师技能点 def GetGreatMasterFreeSkillPoint(curPlayer): @@ -142,161 +86,12 @@ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_Master_FreeSkillPoint, value, ChConfig.Def_PDictType_GreatMaster) return -## 根据大师等级获取升级所需经验 -# @param masterLV: 大师等级 -# @return: -1-已满级; >=0升级所需经验 -def GetTotalExpByGreatMasterLV(masterLV): - masterExpTable = PyMapTable.GetPyMapTable("GreatMasterExp") - - maxMasterLV = masterExpTable.GetRecordCount() - 1 - - if masterLV >= maxMasterLV: - return -1 - - expInfoList = masterExpTable.GetRecordByIndex(masterLV) - totalExp = int(expInfoList["Exp"]) - - return totalExp - -## 增加大师等级经验 -# @param curPlayer -# @param addExp -# @return 是否成功 -def AddGreatMasterExp(curPlayer, addExp): - # 取消大师等级 - return - if not IsGreatMasterOpen(curPlayer): - return False - - #取得人物当前经验 - playerID = curPlayer.GetPlayerID() - masterLV = curPlayer.GetLV2() # 大师等级, 从0级开始 - - masterExpTable = PyMapTable.GetPyMapTable("GreatMasterExp") - - maxMasterLV = masterExpTable.GetRecordCount() - 1 - - #GameWorld.DebugLog("增加大师等级经验 addExp=%s,masterLV=%s,maxMasterLV=%s" - # % (addExp, masterLV, maxMasterLV), playerID) - - if masterLV >= maxMasterLV: - PlayerControl.NotifyCode(curPlayer, "GeRen_admin_825676") - GameWorld.DebugLog("大师等级已满级!", playerID) - return False - - curTotalMasterExp = GetTotalGreatMasterExp(curPlayer) + addExp - - # 先加再处理升级 - SetTotalGreatMasterExp(curPlayer, curTotalMasterExp) - - expInfoList = masterExpTable.GetRecordByIndex(masterLV) - needExp = int(expInfoList["Exp"]) - if needExp <= 0: - GameWorld.ErrLog("大师升级所需经验配置错误!masterLV=%s,needExp=%s" % (masterLV, needExp), playerID) - return True - - #GameWorld.DebugLog(" expInfoList=%s,needExp=%s,curTotalMasterExp=%s" - # % (str(expInfoList), needExp, curTotalMasterExp), playerID) - - isLVUP = False - while curTotalMasterExp >= needExp: - isLVUP = True - masterLV += 1 - curPlayer.SetLV2(masterLV) - curTotalMasterExp -= needExp - #GameWorld.DebugLog(" 大师等级升级needExp=%s,nextMasterLV=%s,curTotalMasterExp=%s" - # % (needExp, masterLV, curTotalMasterExp), playerID) - - # 给大师天赋点 - addSkillPoint = int(expInfoList["AddSkillPoint"]) - curFreeSkillPoint = GetGreatMasterFreeSkillPoint(curPlayer) - SetGreatMasterFreeSkillPoint(curPlayer, curFreeSkillPoint + addSkillPoint) - - # 升级流向 - DataRecordPack.DR_PlayerMasterLVChange(curPlayer, curTotalMasterExp) - - # 循环升级 - if masterLV >= maxMasterLV: - GameWorld.DebugLog(" 循环升级大师等级已满级!", playerID) - break - - expInfoList = masterExpTable.GetRecordByIndex(masterLV) - needExp = int(expInfoList["Exp"]) - if needExp <= 0: - GameWorld.DebugLog(" 循环升级下一级经验为0!masterLV=%s" % masterLV, playerID) - break - - # 升级处理 - if isLVUP: - #GameWorld.DebugLog(" 大师升级处理!", playerID) - PlayerBillboard.UpdatePlayerLVBillboard(curPlayer) - - #重刷所有属性 - PlayerControl.PlayerControl(curPlayer).RefreshAllState() - - #将血设置为最大 - curPlayer.SetHP(curPlayer.GetMaxHP()) - curPlayer.SetMP(curPlayer.GetMaxMP()) - - Sync_GreatMasterFreeSkillPoint(curPlayer) - - # 更新剩余总经验 - SetTotalGreatMasterExp(curPlayer, curTotalMasterExp) - return True - -## 同步大师经验 -# @param curPlayer -# @return -def Sync_GreatMasterExp(curPlayer): - masterExpPack = ChPyNetSendPack.tagMCGreatMasterExp() - masterExpPack.Clear() - masterExpPack.MasterExpPoint = GetGreatMasterExpPoint(curPlayer) - masterExpPack.CurMasterEXP = GetCurGreatMasterExp(curPlayer) - NetPackCommon.SendFakePack(curPlayer, masterExpPack) - return - ## 同步大师剩余天赋点 # @param curPlayer # @return def Sync_GreatMasterFreeSkillPoint(curPlayer): - #PlayerControl.NotifyPlayerDictValue(curPlayer, ChConfig.Def_PDict_Master_FreeSkillPoint) - return - -#// A5 48 兑换大师等级经验 #tagCMExchangeMasterEXP -# -#struct tagCMExchangeMasterEXP -#{ -# tagHead Head; -# BYTE Multiples; // 20亿经验倍数 -# DWORD ExtraExp; // 额外附加经验(不超过20亿) -#}; -## 兑换大师经验 -# @param index: 玩家索引 -# @param clientData: 封包结构体 -# @param tick: 时间戳 -# @return: None -def OnExchangeMasterExp(index, clientData, tick): - - curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) - - if not IsGreatMasterOpen(curPlayer): - GameWorld.ErrLog("大师功能未开启!不能兑换大师等级经验!", curPlayer.GetPlayerID()) - return - - exchangeExp = clientData.Multiples * ChConfig.Def_PerPointValue + clientData.ExtraExp - curTotalExp = PlayerControl.GetPlayerTotalExp(curPlayer) # 当前经验 - - actualExchangeExp = min(curTotalExp, exchangeExp) - - GameWorld.DebugLog("兑换大师等级经验ExchangeExp=%s" % actualExchangeExp, curPlayer.GetPlayerID()) - - if actualExchangeExp <= 0: - return - - updTotalExp = curTotalExp - actualExchangeExp - PlayerControl.SetPlayerTotalExp(curPlayer, updTotalExp) - AddGreatMasterExp(curPlayer, actualExchangeExp) + curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_TalentPoint, GetGreatMasterFreeSkillPoint(curPlayer), False) return @@ -321,172 +116,173 @@ # @param tick: 时间戳 # @return: None def OnAddMasterSkillPoint(index, clientData, tick): - curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) - - needAddSkillPointList = clientData.AddSkillPointList - - if not needAddSkillPointList: - return - - reqTotalPointSkillDict = ReadChConfig.GetEvalChConfig("ReqTotalPointSkill") - greatMasterSkillDict = ReadChConfig.GetEvalChConfig("GreatMasterSkill") - jobType = ChConfig.JOB_TYPE_DICT[curPlayer.GetJob()] - - if jobType not in greatMasterSkillDict: - return - - jobMasterSkillDict = greatMasterSkillDict[jobType] # 本职业天赋系对应技能 - reqTotalPointSkillList = reqTotalPointSkillDict.get(jobType, []) # 本职业需求总天赋点技能 - - skillTypeSeriesDict = {} # 技能对应天赋系 - skillTypeLVDict = {} # 技能对应等级 - seriesTotalPointDict = {} # 天赋系对应总技能点 - allSeriesTotalPoint = 0 # 所有天赋系总点数 - - # 汇总天赋技能所属天赋系 - for seriesType, skillTypeIDList in jobMasterSkillDict.items(): - for sTypeID in skillTypeIDList: - skillTypeSeriesDict[sTypeID] = seriesType - - skillManager = curPlayer.GetSkillManager() - - # 获取玩家目前所有技能 - for i in range(skillManager.GetSkillCount()): - playerSkill = skillManager.GetSkillByIndex(i) - if playerSkill == None: - continue - - playerSkillTypeID = playerSkill.GetSkillTypeID() - - for seriesType, skillTypeIDList in jobMasterSkillDict.items(): - if playerSkillTypeID not in skillTypeIDList: - continue - - skillLV = playerSkill.GetSkillLV() - skillTypeLVDict[playerSkillTypeID] = skillLV - seriesTotalPointDict[seriesType] = seriesTotalPointDict.get(seriesType, 0) + skillLV - allSeriesTotalPoint += skillLV - break - - isAddSkill = True - isRefreshAttr = False - buffType = IPY_GameWorld.btPassiveBuf - addPointDict = {} # 请求加点技能已执行加点数 - - GameWorld.DebugLog("【天赋加点】jobType=%s,技能对应等级=%s,天赋系对应总技能点=%s,总点数=%s" - % (jobType, skillTypeLVDict, seriesTotalPointDict, allSeriesTotalPoint)) - - while isAddSkill: - # 每次循环重置状态,直到无法再加技能才跳出 - isAddSkill = False - - for addSkill in needAddSkillPointList: - skillTypeID = addSkill.SkillID - totalAddPoint = addSkill.AddPoint - - freeSkillPoint = GetGreatMasterFreeSkillPoint(curPlayer) - if freeSkillPoint <= 0: - GameWorld.DebugLog(" 当前无剩余天赋点!") - break - - if skillTypeID not in skillTypeSeriesDict: - GameWorld.ErrLog("技能不在合法天赋系里!skillTypeID=%s" % skillTypeID) - continue - - curSeriesType = skillTypeSeriesDict[skillTypeID] - - addPoint = addPointDict.get(skillTypeID, 0) # 该技能已执行加点数 - - # 已经达到请求加的点数,不再处理 - if addPoint >= totalAddPoint: - #GameWorld.DebugLog(" 已经加到请求加的点数,不再处理!skillTypeID=%s,addPoint=%s" % (skillTypeID, addPoint)) - continue - - curSkill = skillManager.FindSkillBySkillTypeID(skillTypeID) - - # 未学习 - if not curSkill: - learnSkillLV = 1 - # 已学习 - else: - curSkillLV = curSkill.GetSkillLV() - curSkillMaxLV = curSkill.GetSkillMaxLV() - if curSkillLV >= curSkillMaxLV: - GameWorld.DebugLog(" 技能已满级!skillTypeID=%s" % (skillTypeID)) - continue - - learnSkillLV = curSkillLV + 1 - - learnSkillData = GameWorld.GetGameData().FindSkillByType(skillTypeID, learnSkillLV) - - if not learnSkillData: - GameWorld.ErrLog("找不到学习技能数据:skillTypeID=%s,skillLV=%s" % (skillTypeID, learnSkillLV)) - continue - - learnSkillID = learnSkillData.GetSkillID() - skillLearnReq = learnSkillData.GetLearnSkillReq() - skillLearnReqLV = learnSkillData.GetLearnSkillLV() - skillLearnSeriesPointReq = learnSkillData.GetLearnSkillPointReq() - - # 前置技能点数需求 - reqSkillLV = skillTypeLVDict.get(skillLearnReq, 0) - if skillLearnReq > 0 and skillTypeLVDict.get(skillLearnReq, 0) < skillLearnReqLV: - #GameWorld.DebugLog(" 前置技能加点未满足!learnSkillID=%s,[前置技能%s 当前%s点 需%s点]" - # % (learnSkillID, skillLearnReq, reqSkillLV, skillLearnReqLV)) - continue - - # 天赋系点数需求 - if skillLearnSeriesPointReq > 0: - isReqAllPoint = skillTypeID in reqTotalPointSkillList # 是否需求所有系总点数 - - # 已加总天赋点数不足 - if isReqAllPoint and allSeriesTotalPoint < skillLearnSeriesPointReq: - #GameWorld.DebugLog(" 总天赋点数不足!learnSkillID=%s,curPoint=%s,reqPoint=%s" - # % (learnSkillID, allSeriesTotalPoint, skillLearnSeriesPointReq)) - continue - - # 已加本系天赋点数不足 - curSeriesTotalPoint = seriesTotalPointDict.get(curSeriesType, 0) - if not isReqAllPoint and curSeriesTotalPoint < skillLearnSeriesPointReq: - #GameWorld.DebugLog(" 本系天赋点数不足!learnSkillID=%s,curSeriesType=%s,curPoint=%s,reqPoint=%s" - # % (learnSkillID, curSeriesType, curSeriesTotalPoint, skillLearnSeriesPointReq)) - continue - - # 可加点, 下面执行该技能加点 - skillManager.LVUpSkillBySkillTypeID(skillTypeID) - DataRecordPack.DR_LearnORUPSkill(curPlayer, skillTypeID, learnSkillLV) - - # 是被动技能要重刷属性 - #if SkillCommon.isPassiveBuffSkill(learnSkillData): - # BuffSkill.AddBuffNoRefreshState(curPlayer, buffType, learnSkillData, tick, [], curPlayer) - # isRefreshAttr = True - - isAddSkill = True - - addPointDict[skillTypeID] = addPoint + 1 - skillTypeLVDict[skillTypeID] = learnSkillLV - seriesTotalPointDict[curSeriesType] = seriesTotalPointDict.get(curSeriesType, 0) + 1 - allSeriesTotalPoint += 1 - SetGreatMasterFreeSkillPoint(curPlayer, freeSkillPoint - 1) - # 成就 - #successKey = ChConfig.Def_PDict_Success_CntValue%(ShareDefine.SuccType_TalentPoint, 0) - #curSuccess = PlayerSuccess.GetPDictValue(curPlayer, successKey) - #if curSuccess < allSeriesTotalPoint: - # PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_TalentPoint, 1) - - #GameWorld.DebugLog(" 加天赋技能 learnSkillID=%s,skillTypeID=%s,skillLV=%s,doCnt=%s,needCnt=%s" - # % (learnSkillID, skillTypeID, learnSkillLV, addPoint + 1, totalAddPoint)) - - #GameWorld.DebugLog(" isAddSkill=%s" % isAddSkill) - - if isRefreshAttr: - curControl = PlayerControl.PlayerControl(curPlayer) - #curControl.CalcPassiveBuffAttr() - curControl.RefreshPlayerAttrByBuff() - - PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_224510") - Sync_GreatMasterFreeSkillPoint(curPlayer) - return + return #现版本加点方式不同 使用03 04 玩家学习技能#tagCAddSkillPoint,此处先屏蔽 +# curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) +# +# needAddSkillPointList = clientData.AddSkillPointList +# +# if not needAddSkillPointList: +# return +# +# reqTotalPointSkillDict = ReadChConfig.GetEvalChConfig("ReqTotalPointSkill") +# greatMasterSkillDict = ReadChConfig.GetEvalChConfig("GreatMasterSkill") +# jobType = ChConfig.JOB_TYPE_DICT[curPlayer.GetJob()] +# +# if jobType not in greatMasterSkillDict: +# return +# +# jobMasterSkillDict = greatMasterSkillDict[jobType] # 本职业天赋系对应技能 +# reqTotalPointSkillList = reqTotalPointSkillDict.get(jobType, []) # 本职业需求总天赋点技能 +# +# skillTypeSeriesDict = {} # 技能对应天赋系 +# skillTypeLVDict = {} # 技能对应等级 +# seriesTotalPointDict = {} # 天赋系对应总技能点 +# allSeriesTotalPoint = 0 # 所有天赋系总点数 +# +# # 汇总天赋技能所属天赋系 +# for seriesType, skillTypeIDList in jobMasterSkillDict.items(): +# for sTypeID in skillTypeIDList: +# skillTypeSeriesDict[sTypeID] = seriesType +# +# skillManager = curPlayer.GetSkillManager() +# +# # 获取玩家目前所有技能 +# for i in range(skillManager.GetSkillCount()): +# playerSkill = skillManager.GetSkillByIndex(i) +# if playerSkill == None: +# continue +# +# playerSkillTypeID = playerSkill.GetSkillTypeID() +# +# for seriesType, skillTypeIDList in jobMasterSkillDict.items(): +# if playerSkillTypeID not in skillTypeIDList: +# continue +# +# skillLV = playerSkill.GetSkillLV() +# skillTypeLVDict[playerSkillTypeID] = skillLV +# seriesTotalPointDict[seriesType] = seriesTotalPointDict.get(seriesType, 0) + skillLV +# allSeriesTotalPoint += skillLV +# break +# +# isAddSkill = True +# isRefreshAttr = False +# buffType = IPY_GameWorld.btPassiveBuf +# addPointDict = {} # 请求加点技能已执行加点数 +# +# GameWorld.DebugLog("【天赋加点】jobType=%s,技能对应等级=%s,天赋系对应总技能点=%s,总点数=%s" +# % (jobType, skillTypeLVDict, seriesTotalPointDict, allSeriesTotalPoint)) +# +# while isAddSkill: +# # 每次循环重置状态,直到无法再加技能才跳出 +# isAddSkill = False +# +# for addSkill in needAddSkillPointList: +# skillTypeID = addSkill.SkillID +# totalAddPoint = addSkill.AddPoint +# +# freeSkillPoint = GetGreatMasterFreeSkillPoint(curPlayer) +# if freeSkillPoint <= 0: +# GameWorld.DebugLog(" 当前无剩余天赋点!") +# break +# +# if skillTypeID not in skillTypeSeriesDict: +# GameWorld.ErrLog("技能不在合法天赋系里!skillTypeID=%s" % skillTypeID) +# continue +# +# curSeriesType = skillTypeSeriesDict[skillTypeID] +# +# addPoint = addPointDict.get(skillTypeID, 0) # 该技能已执行加点数 +# +# # 已经达到请求加的点数,不再处理 +# if addPoint >= totalAddPoint: +# #GameWorld.DebugLog(" 已经加到请求加的点数,不再处理!skillTypeID=%s,addPoint=%s" % (skillTypeID, addPoint)) +# continue +# +# curSkill = skillManager.FindSkillBySkillTypeID(skillTypeID) +# +# # 未学习 +# if not curSkill: +# learnSkillLV = 1 +# # 已学习 +# else: +# curSkillLV = curSkill.GetSkillLV() +# curSkillMaxLV = curSkill.GetSkillMaxLV() +# if curSkillLV >= curSkillMaxLV: +# GameWorld.DebugLog(" 技能已满级!skillTypeID=%s" % (skillTypeID)) +# continue +# +# learnSkillLV = curSkillLV + 1 +# +# learnSkillData = GameWorld.GetGameData().FindSkillByType(skillTypeID, learnSkillLV) +# +# if not learnSkillData: +# GameWorld.ErrLog("找不到学习技能数据:skillTypeID=%s,skillLV=%s" % (skillTypeID, learnSkillLV)) +# continue +# +# learnSkillID = learnSkillData.GetSkillID() +# skillLearnReq = learnSkillData.GetLearnSkillReq() +# skillLearnReqLV = learnSkillData.GetLearnSkillLV() +# skillLearnSeriesPointReq = learnSkillData.GetLearnSkillPointReq() +# +# # 前置技能点数需求 +# reqSkillLV = skillTypeLVDict.get(skillLearnReq, 0) +# if skillLearnReq > 0 and skillTypeLVDict.get(skillLearnReq, 0) < skillLearnReqLV: +# #GameWorld.DebugLog(" 前置技能加点未满足!learnSkillID=%s,[前置技能%s 当前%s点 需%s点]" +# # % (learnSkillID, skillLearnReq, reqSkillLV, skillLearnReqLV)) +# continue +# +# # 天赋系点数需求 +# if skillLearnSeriesPointReq > 0: +# isReqAllPoint = skillTypeID in reqTotalPointSkillList # 是否需求所有系总点数 +# +# # 已加总天赋点数不足 +# if isReqAllPoint and allSeriesTotalPoint < skillLearnSeriesPointReq: +# #GameWorld.DebugLog(" 总天赋点数不足!learnSkillID=%s,curPoint=%s,reqPoint=%s" +# # % (learnSkillID, allSeriesTotalPoint, skillLearnSeriesPointReq)) +# continue +# +# # 已加本系天赋点数不足 +# curSeriesTotalPoint = seriesTotalPointDict.get(curSeriesType, 0) +# if not isReqAllPoint and curSeriesTotalPoint < skillLearnSeriesPointReq: +# #GameWorld.DebugLog(" 本系天赋点数不足!learnSkillID=%s,curSeriesType=%s,curPoint=%s,reqPoint=%s" +# # % (learnSkillID, curSeriesType, curSeriesTotalPoint, skillLearnSeriesPointReq)) +# continue +# +# # 可加点, 下面执行该技能加点 +# skillManager.LVUpSkillBySkillTypeID(skillTypeID) +# DataRecordPack.DR_LearnORUPSkill(curPlayer, skillTypeID, learnSkillLV) +# +# # 是被动技能要重刷属性 +# #if SkillCommon.isPassiveBuffSkill(learnSkillData): +# # BuffSkill.AddBuffNoRefreshState(curPlayer, buffType, learnSkillData, tick, [], curPlayer) +# # isRefreshAttr = True +# +# isAddSkill = True +# +# addPointDict[skillTypeID] = addPoint + 1 +# skillTypeLVDict[skillTypeID] = learnSkillLV +# seriesTotalPointDict[curSeriesType] = seriesTotalPointDict.get(curSeriesType, 0) + 1 +# allSeriesTotalPoint += 1 +# SetGreatMasterFreeSkillPoint(curPlayer, freeSkillPoint - 1) +# # 成就 +# #successKey = ChConfig.Def_PDict_Success_CntValue%(ShareDefine.SuccType_TalentPoint, 0) +# #curSuccess = PlayerSuccess.GetPDictValue(curPlayer, successKey) +# #if curSuccess < allSeriesTotalPoint: +# # PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_TalentPoint, 1) +# +# #GameWorld.DebugLog(" 加天赋技能 learnSkillID=%s,skillTypeID=%s,skillLV=%s,doCnt=%s,needCnt=%s" +# # % (learnSkillID, skillTypeID, learnSkillLV, addPoint + 1, totalAddPoint)) +# +# #GameWorld.DebugLog(" isAddSkill=%s" % isAddSkill) +# +# if isRefreshAttr: +# curControl = PlayerControl.PlayerControl(curPlayer) +# #curControl.CalcPassiveBuffAttr() +# curControl.RefreshPlayerAttrByBuff() +# +# PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_224510") +# Sync_GreatMasterFreeSkillPoint(curPlayer) +# return #// A5 50 重置大师天赋技能 #tagCMResetMasterSkill @@ -502,57 +298,51 @@ # @return: None def OnResetMasterSkill(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) - ResetMasterSkillCost = ReadChConfig.GetEvalChConfig("ResetMasterSkillCost") - + needItemID = IpyGameDataPY.GetFuncCfg('TalentResetBook') + costMoney = IpyGameDataPY.GetFuncCfg('TalentResetBook', 2) moneyType = IPY_GameWorld.TYPE_Price_Gold_Money - - if not PlayerControl.HaveMoney(curPlayer, moneyType, ResetMasterSkillCost): - return + itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) + hasEnough, itemList = ItemCommon.GetItem_FromPack_ByID(needItemID, itemPack, 1) + if not hasEnough: + #道具不足,扣钱 + if not PlayerControl.HaveMoney(curPlayer, moneyType, costMoney): + return if not DoResetMasterSkillPoint(curPlayer): return - - # 扣除消耗 - PlayerControl.PayMoney(curPlayer, moneyType, ResetMasterSkillCost, ChConfig.Def_Cost_ResetGreatMasterSkill) + if hasEnough: + ItemCommon.ReduceItem(curPlayer, itemPack, itemList, 1, False) + else: + PlayerControl.PayMoney(curPlayer, moneyType, costMoney, ChConfig.Def_Cost_ResetGreatMasterSkill) return ## 重置大师天赋技能 # @param curPlayer # @return: 是否成功 def DoResetMasterSkillPoint(curPlayer): - greatMasterSkillDict = ReadChConfig.GetEvalChConfig("GreatMasterSkill") - jobType = ChConfig.JOB_TYPE_DICT[curPlayer.GetJob()] - - if jobType not in greatMasterSkillDict: - return False - - jobMasterSkillDict = greatMasterSkillDict[jobType] # 本职业天赋系对应技能 - freeSkillPoint = GetGreatMasterFreeSkillPoint(curPlayer) resetPoint = 0 skillManager = curPlayer.GetSkillManager() isRefreshAttr = False - - # 汇总天赋技能所属天赋系 - for skillTypeIDList in jobMasterSkillDict.values(): + delCnt = 0 + for i in range(0, skillManager.GetSkillCount()): + dataIndex = i-delCnt + skill = skillManager.GetSkillByIndex(dataIndex) + if skill == None: + continue + skillTypeID = skill.GetSkillTypeID() + if not IpyGameDataPY.GetIpyGameDataNotLog('TalentSkill', skillTypeID): + continue + curSkillLV = skill.GetSkillLV() + # 被动技能刷属性 + if SkillCommon.isPassiveSkill(skill): + isRefreshAttr = True - for skillTypeID in skillTypeIDList: - curSkill = skillManager.FindSkillBySkillTypeID(skillTypeID) - - if not curSkill: - continue - - curSkillLV = curSkill.GetSkillLV() - - # 被动技能刷属性 - if SkillCommon.isPassiveSkill(curSkill): - isRefreshAttr = True - - resetPoint += curSkillLV - - skillManager.DeleteSkillBySkillTypeID(skillTypeID) + resetPoint += curSkillLV + skillManager.DeleteSkillBySkillTypeID(skillTypeID) + delCnt +=1 if resetPoint <= 0: GameWorld.DebugLog("不需要重置技能天赋!") @@ -561,9 +351,16 @@ SetGreatMasterFreeSkillPoint(curPlayer, freeSkillPoint + resetPoint) Sync_GreatMasterFreeSkillPoint(curPlayer) + # 重新刷新被动技能 + passiveEff = PassiveBuffEffMng.GetPassiveEffManager().InitObjPassiveEff(curPlayer) + passiveEff.RefreshPassiveSkill() + DataRecordPack.Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_ResetTalent, {'resetPoint':resetPoint}) if isRefreshAttr: - curControl = PlayerControl.PlayerControl(curPlayer) - #curControl.CalcPassiveBuffAttr() - curControl.RefreshPlayerAttrByBuff() + # 重刷被动技能 + PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEff(curPlayer) + # 重刷技能战力 + curControl = PlayerControl.PlayerControl(curPlayer) + curControl.RefreshAllSkill() + curControl.RefreshPlayerAttrState() return True -- Gitblit v1.8.0