#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
#-------------------------------------------------------------------------------
|
#
|
##@package Player.PlayerGreatMaster
|
#
|
# @todo:´óʦϵͳ
|
# @author hxp
|
# @date 2015-2-27
|
# @version 1.8
|
#
|
# @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"""
|
|
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
|
|
## ´óʦ¹¦ÄÜÊÇ·ñ¿ªÆô
|
# @param curPlayer
|
# @return
|
def IsGreatMasterOpen(curPlayer):
|
# curReinCnt = curPlayer.GetReincarnationLv() # µ±Ç°×ªÉú´ÎÊý
|
# if curReinCnt < 3:
|
# return False
|
|
if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_GreatMaster):
|
return False
|
|
return True
|
|
## Ôö¼Ó´óʦÌ츳µã
|
# @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
|
|
|
## תÉú´¦Àí
|
# @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)
|
return
|
|
## µÇ¼´¦Àí
|
# @param curPlayer
|
# @return
|
def MasterOnLogin(curPlayer):
|
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)
|
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):
|
return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Master_FreeSkillPoint, 0, ChConfig.Def_PDictType_GreatMaster)
|
|
## ÉèÖõ±Ç°Ê£Óà´óʦ¼¼Äܵã
|
def SetGreatMasterFreeSkillPoint(curPlayer, value):
|
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)
|
return
|
|
|
#// A5 49 ´óʦÌ츳¼¼Äܼӵã #tagCMAddMasterSkillPoint
|
#
|
#struct tagCMMasterSkillPoint
|
#{
|
# tagHead Head;
|
# DWORD SkillID; // Ì츳¼¼ÄÜID
|
# BYTE AddPoint; // ¼ÓµÄµãÊý
|
#};
|
#
|
#struct tagCMAddMasterSkillPoint
|
#{
|
# tagHead Head;
|
# BYTE SkillCnt; // ±ä¸ü¼¼ÄܸöÊý
|
# tagCMMasterSkillPoint AddSkillPointList[SkillCnt]; // ¼ÓµÄ¼¼ÄܵãÊýÁбí
|
#};
|
## ´óʦÌ츳¼¼Äܼӵã
|
# @param index: Íæ¼ÒË÷Òý
|
# @param clientData: ·â°ü½á¹¹Ìå
|
# @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)
|
|
# ÊDZ»¶¯¼¼ÄÜÒªÖØË¢ÊôÐÔ
|
#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
|
#
|
#struct tagCMResetMasterSkill
|
#{
|
# tagHead Head;
|
#};
|
## ÖØÖôóʦÌ츳¼¼ÄÜ
|
# @param index: Íæ¼ÒË÷Òý
|
# @param clientData: ·â°ü½á¹¹Ìå
|
# @param tick: ʱ¼ä´Á
|
# @return: None
|
def OnResetMasterSkill(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
ResetMasterSkillCost = ReadChConfig.GetEvalChConfig("ResetMasterSkillCost")
|
|
moneyType = IPY_GameWorld.TYPE_Price_Gold_Money
|
|
if not PlayerControl.HaveMoney(curPlayer, moneyType, ResetMasterSkillCost):
|
return
|
|
if not DoResetMasterSkillPoint(curPlayer):
|
return
|
|
# ¿Û³ýÏûºÄ
|
PlayerControl.PayMoney(curPlayer, moneyType, ResetMasterSkillCost, 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():
|
|
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)
|
|
if resetPoint <= 0:
|
GameWorld.DebugLog("²»ÐèÒªÖØÖü¼ÄÜÌ츳£¡")
|
return False
|
|
SetGreatMasterFreeSkillPoint(curPlayer, freeSkillPoint + resetPoint)
|
Sync_GreatMasterFreeSkillPoint(curPlayer)
|
|
if isRefreshAttr:
|
curControl = PlayerControl.PlayerControl(curPlayer)
|
#curControl.CalcPassiveBuffAttr()
|
curControl.RefreshPlayerAttrByBuff()
|
return True
|
|