#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package Player.PlayerPrestigeSys # # @todo:¾ôλϵͳ/ÉÙÄê¾³½ç # @author hxp # @date 2017-7-21 # @version 1.0 # # ÏêϸÃèÊö: ¾ôλϵͳ/ÉÙÄê¾³½ç # #------------------------------------------------------------------------------- #"""Version = 2017-10-10 14:30""" #------------------------------------------------------------------------------- import ItemCommon import GameFuncComm import PlayerControl import ChPyNetSendPack import NetPackCommon import IPY_GameWorld import IpyGameDataPY import ShareDefine import GameWorld import ChConfig import PlayerSuccess import ChEquip import PlayerBillboard import PlayerTongTianLing import PassiveBuffEffMng import EventShell import DataRecordPack import SkillCommon import time #------------------------------------------------------------------------------ # ¶É½ÙÌõ¼þ¼Ç¼λ¶¨Òå ( RealmLVUpAward_LV, # µÈ¼¶ RealmLVUpAward_PassMap, # ¹ý¹Ø¹Ø¿¨ RealmLVUpAward_TreeLV, # ÏÉÊ÷µÈ¼¶ RealmLVUpAward_CutTreeCnt, # ¿³Ê÷´ÎÊý ) = range(4) def DoOfficialOpen(curPlayer): #¹¦ÄÜ¿ªÆô # curRealmLV = curPlayer.GetOfficialRank() # if not curRealmLV: # DoRealmLVUpLogic(curPlayer) return True def OnLogin(curPlayer): SyncRealmFBState(curPlayer) UpdateRealmExp(curPlayer, False) NotifyRealmExpInfo(curPlayer) return def GetRealmIpyData(realmLV): return IpyGameDataPY.GetIpyGameData("Realm", realmLV) #// A5 24 ¿ªÆô¶É½Ù #tagCMOpenRealmFB # #struct tagCMOpenRealmFB #{ # tagHead Head; #}; def OpenRealmFB(index, clientData, tick): return def GetXXZLAward(curPlayer, taskID): ## ÁìÈ¡ÐÞÏÉ֮·½±Àø awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmXXZLAward) if awardState&pow(2, taskID): GameWorld.DebugLog("ÒÑÁìÈ¡¹ý¾³½çÐÞÏÉ֮·¸Ã½±Àø, taskID=%s" % taskID, curPlayer.GetPlayerID()) return ipyData = IpyGameDataPY.GetIpyGameData("RealmXXZL", taskID) if not ipyData: return taskType = ipyData.GetTaskType() needValue = ipyData.GetNeedValue() curValue= 0 #1. µÃµ½ XXX·¨±¦£¬ ËùÐèֵΪ·¨±¦ID if taskType == 1: magicWeaponID = needValue if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MagicWeaponLV % magicWeaponID) >= 1: curValue = needValue #2. ͨ¹ØÌìÐÇËþX²ã elif taskType == 2: curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_SkyTowerFloor) #3. »÷ɱÊÀ½çBOSSXÖ» elif taskType == 3: curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Boss_KillCntTotal % ShareDefine.Def_Boss_Func_World) #4. »îÔ¾ÐÞÁ¶X´Î elif taskType == 4: curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ActivityCountTotal) #5. »÷ɱ¸öÈËBOSS£ºxxx£¬ËùÐè֮Ϊ¸öÈËboss±í¶ÔÓ¦Ïß·id elif taskType == 5: mapID = ChConfig.Def_FBMapID_PersonalBoss lineID = needValue if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, False, [mapID]): curValue = needValue #6. ͨ¹Ø×ÚÃÅÊÔÁ¶x´Î elif taskType == 6: curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_EnterFbCntTotal % ChConfig.Def_FBMapID_MunekadoTrial) #7. »ñµÃXµãÁé¸ùµã elif taskType == 7: curValue = PlayerControl.GetTotalLingGenPoint(curPlayer) if curValue < needValue: GameWorld.DebugLog("¾³½çÐÞÏÉ֮·µ±Ç°ÈÎÎñËùÐèÖµ²»Âú×㣬ÎÞ·¨Áì½±, taskID=%s,taskType=%s,curValue=%s < %s" % (taskID, taskType, curValue, needValue), curPlayer.GetPlayerID()) return awardItemList = ipyData.GetAwardItemList() if not ItemCommon.GiveAwardItem(curPlayer, awardItemList): return updAwardState = awardState|pow(2, taskID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmXXZLAward, updAwardState) GameWorld.DebugLog("ÁìÈ¡¾³½çÐÞÏÉ֮·½±Àø, awardID=%s,updAwardState=%s" % (taskID, updAwardState), curPlayer.GetPlayerID()) SyncRealmFBState(curPlayer) return def SyncRealmFBState(curPlayer): #֪ͨ¿Í»§¶Ë¶É½Ù¸±±¾ÊÇ·ñ¿ªÆô #if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Official): # return sendPack = ChPyNetSendPack.tagMCSyncRealmInfo() sendPack.IsPass = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmFBIsOpen) sendPack.XXZLAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmXXZLAward) sendPack.RealmLVUpAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmLVUpAwardState) sendPack.RealmLVUpCutTreeCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmLVUpCutTreeCnt) NetPackCommon.SendFakePack(curPlayer, sendPack) return ## ¼ÆËã¾ôλÊôÐÔ # @param curPlayer Íæ¼Ò # @param allAttrList ÊôÐÔÁбí # @return None def CalcOfficialRankAttr(curPlayer): if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Official): return curRealmLV = curPlayer.GetOfficialRank() realmIpyData = GetRealmIpyData(curRealmLV) if not realmIpyData: return addAttrIDList, addAttrValueList = realmIpyData.GetAddAttrType(), realmIpyData.GetAddAttrNum() allAttrList = [{} for i in range(4)] for i, attrID in enumerate(addAttrIDList): PlayerControl.CalcAttrDict_Type(attrID, addAttrValueList[i], allAttrList) # ±£´æ¼ÆËãÖµ PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Prestige, allAttrList) return ## ÖØË¢ËùÓÐÊôÐÔ # @param curPlayer # @param isForceRefresh:Ç¿ÖÆË¢ÐÂÅÅÐаñ # @return Ö¸¶¨Êý¾Ý def RefreshOfficialAttr(curPlayer): CalcOfficialRankAttr(curPlayer) PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState() return def AddRealmLVUpCutTreeCnt(curPlayer, addCnt): curRealmLV = curPlayer.GetOfficialRank() realmIpyData = GetRealmIpyData(curRealmLV) if not realmIpyData: return NeedCutTreeCnt = realmIpyData.GetNeedCutTreeCnt() if not NeedCutTreeCnt: return curTreeCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmLVUpCutTreeCnt) if curTreeCnt >= NeedCutTreeCnt: return updCutTreeCnt = min(curTreeCnt + addCnt, NeedCutTreeCnt) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmLVUpCutTreeCnt, updCutTreeCnt) SyncRealmFBState(curPlayer) return def GetRealmLVUpTaskAward(curPlayer, awardIndex): ## ÁìÈ¡¾³½ç¶É½ÙÈÎÎñÌõ¼þ½±Àø awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmLVUpAwardState) if awardState&pow(2, awardIndex): GameWorld.DebugLog("¾³½ç¶É½ÙÌõ¼þÁì½±£¬ÒÑÁìÈ¡¹ý! awardIndex=%s" % awardIndex, curPlayer.GetPlayerID()) return curRealmLV = curPlayer.GetOfficialRank() realmIpyData = GetRealmIpyData(curRealmLV) if not realmIpyData: return awardItemInfo = None if awardIndex == RealmLVUpAward_LV: playerLV = curPlayer.GetLV() NeedLV = realmIpyData.GetNeedLV() if playerLV < NeedLV: GameWorld.DebugLog('¾³½ç¶É½ÙÌõ¼þÁì½±£¬µÈ¼¶²»×ã! curRealmLV=%s,playerLV=%s < %s' % (curRealmLV, playerLV, NeedLV)) return awardItemInfo = realmIpyData.GetLVAwardItem() elif awardIndex == RealmLVUpAward_PassMap: NeedPassMap = realmIpyData.GetNeedPassMap() if not NeedPassMap or len(NeedPassMap) != 2: return mapID, lineID = NeedPassMap grade = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, False, [mapID]) if not grade: GameWorld.DebugLog('¾³½ç¶É½ÙÌõ¼þÁì½±£¬¸±±¾Î´¹ý¹Ø! curRealmLV=%s,mapID=%s,lineID=%s' % (curRealmLV, mapID, lineID)) return awardItemInfo = realmIpyData.GetPassMapAwardItem() elif awardIndex == RealmLVUpAward_TreeLV: NeedTreeLV = realmIpyData.GetNeedTreeLV() if not NeedTreeLV: return treeLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLV) if treeLV < NeedTreeLV: GameWorld.DebugLog('¾³½ç¶É½ÙÌõ¼þÁì½±£¬ÏÉÊ÷µÈ¼¶²»×ã! curRealmLV=%s,treeLV=%s < %s' % (curRealmLV, treeLV, NeedTreeLV)) return awardItemInfo = realmIpyData.GetTreeLVAwardItem() elif awardIndex == RealmLVUpAward_CutTreeCnt: NeedCutTreeCnt = realmIpyData.GetNeedCutTreeCnt() if not NeedCutTreeCnt: return cutTreeCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmLVUpCutTreeCnt) if cutTreeCnt < NeedCutTreeCnt: GameWorld.DebugLog('¾³½ç¶É½ÙÌõ¼þÁì½±£¬¿³Ê÷´ÎÊý²»×ã! curRealmLV=%s,cutTreeCnt=%s < %s' % (curRealmLV, cutTreeCnt, NeedCutTreeCnt)) return awardItemInfo = realmIpyData.GetCutTreeAwardItem() else: return if not awardItemInfo or len(awardItemInfo) != 2: return itemID, itemCount = awardItemInfo if not ItemCommon.GiveAwardItem(curPlayer, [[itemID, itemCount, 0]]): return updAwardState = awardState|pow(2, awardIndex) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmLVUpAwardState, updAwardState) GameWorld.DebugLog("¾³½ç¶É½ÙÌõ¼þÁì½±OK! curRealmLV=%s,awardIndex=%s,updAwardState=%s" % (curRealmLV, awardIndex, updAwardState), curPlayer.GetPlayerID()) SyncRealmFBState(curPlayer) return #// A5 23 ÌáÉý¾³½çµÈ¼¶ # tagCMRealmLVUp # #struct tagCMRealmLVUp #{ # tagHead Head; #}; def DoRealmLVUp(index, clientData, tick): #Éý¼¶¾³½ç curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) curRealmLV = curPlayer.GetOfficialRank() realmIpyData = GetRealmIpyData(curRealmLV) if not realmIpyData: GameWorld.ErrLog("ûÓиþ³½çµÈ¼¶Êý¾Ý! Lv=%s" % curRealmLV) return if realmIpyData.GetBossID(): canLvUp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmFBIsOpen) == 1 if not canLvUp: GameWorld.DebugLog(' ¸±±¾Î´¹ý¹Ø£¬²»ÄÜÉý¼¶¾³½ç') return awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmLVUpAwardState) #µÈ¼¶ÅÐ¶Ï - ±ØÒªÌõ¼þ playerLV = curPlayer.GetLV() if not awardState&pow(2, RealmLVUpAward_LV): GameWorld.DebugLog('µÈ¼¶Ìõ¼þ½±ÀøÎ´ÁìÈ¡£¬²»ÄÜÉý¼¶¾³½ç! curRealmLV=%s' % (curRealmLV)) return totalExpNeed = PlayerControl.GetTotalExpByPlayerLv(playerLV) totalExp = PlayerControl.GetPlayerTotalExp(curPlayer) if totalExp < totalExpNeed: GameWorld.DebugLog('µÈ¼¶Ìõ¼þ¾­ÑéδÂú£¬²»ÄÜÉý¼¶¾³½ç! curRealmLV=%s,playerLV=%s,totalExp=%s < %s' % (curRealmLV, playerLV, totalExp, totalExpNeed)) return #¸±±¾¹ý¹ØÅÐ¶Ï NeedPassMap = realmIpyData.GetNeedPassMap() if NeedPassMap: if not awardState&pow(2, RealmLVUpAward_PassMap): GameWorld.DebugLog('¹ý¹ØÌõ¼þ½±ÀøÎ´ÁìÈ¡£¬²»ÄÜÉý¼¶¾³½ç! curRealmLV=%s' % (curRealmLV)) return #ÏÉÊ÷µÈ¼¶ÅÐ¶Ï NeedTreeLV = realmIpyData.GetNeedTreeLV() if NeedTreeLV: if not awardState&pow(2, RealmLVUpAward_TreeLV): GameWorld.DebugLog('ÏÉÊ÷µÈ¼¶Ìõ¼þ½±ÀøÎ´ÁìÈ¡£¬²»ÄÜÉý¼¶¾³½ç! curRealmLV=%s' % (curRealmLV)) return #¿³Ê÷´ÎÊýÅÐ¶Ï NeedCutTreeCnt = realmIpyData.GetNeedCutTreeCnt() if NeedCutTreeCnt: if not awardState&pow(2, RealmLVUpAward_CutTreeCnt): GameWorld.DebugLog('¿³Ê÷´ÎÊýÌõ¼þ½±ÀøÎ´ÁìÈ¡£¬²»ÄÜÉý¼¶¾³½ç! curRealmLV=%s' % (curRealmLV)) return DoRealmLVUpLogic(curPlayer) return # ÌáÉý1¼¶¾³½ç¼Óµã def __DoRealmLVUpAddPoint(curPlayer): if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_AddPoint): # 먦Æôǰ²»¿É¼Óµã£¬ÒòΪDoAddPointOpen»áÒ»´ÎÐÔ²¹Æë£¬±ÜÃâÒâÍâÇé¿ö¶à¼ÓÁ˵ãÊý return curFreePoint = curPlayer.GetFreePoint() addPoint = IpyGameDataPY.GetFuncCfg("LVUPAddPoint", 3) if addPoint != 0: setFreePoint = curFreePoint + addPoint DataRecordPack.DR_Freepoint(curPlayer, "RealmLVUp", addPoint) curPlayer.SetFreePoint(setFreePoint) return def DoRealmLVUpLogic(curPlayer, needSys=True): curRealmLV = curPlayer.GetOfficialRank() nextRealmLv = curRealmLV + 1 GameWorld.DebugLog(' Éý¼¶¾³½çnextRealmLv=%s' % nextRealmLv) nextRealmIpyData = GetRealmIpyData(nextRealmLv) if not nextRealmIpyData: return curPlayer.SetOfficialRank(nextRealmLv) # ÌáÉý1¼¶¾³½ç¼Óµã __DoRealmLVUpAddPoint(curPlayer) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmFBIsOpen, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmLVUpAwardState, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmLVUpCutTreeCnt, 0) PlayerControl.PlayerControl(curPlayer).PlayerLvUp() if needSys: addBuffID = nextRealmIpyData.GetBuffID() if addBuffID: PlayerControl.WorldNotify(0, 'BigRealmUpSuccess', [curPlayer.GetName(), curPlayer.GetID(), nextRealmLv, IpyGameDataPY.GetFuncCfg('RadioExpRealm')]) msgStr = str(addBuffID) GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'RealmUpAddBuff', msgStr, len(msgStr)) else: PlayerControl.WorldNotify(0, 'RealmUpSuccess', [curPlayer.GetName(), curPlayer.GetID(), nextRealmLv]) if SkillCommon.GivePlayerSkillByJobSkill(curPlayer, nextRealmIpyData.GetLearnSkillIDInfo()): PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEffSet(curPlayer) addFreePoint = nextRealmIpyData.GetAddFreePoint() if addFreePoint: updFreePoint = curPlayer.GetFreePoint() + addFreePoint curPlayer.SetFreePoint(updFreePoint) GameWorld.DebugLog(" addFreePoint=%s,updFreePoint=%s" % (addFreePoint, updFreePoint)) RefreshOfficialAttr(curPlayer) GameFuncComm.DoFuncOpenLogic(curPlayer) SyncRealmFBState(curPlayer) #¸üÐÂÐÞΪËÙÂÊ UpdateRealmExp(curPlayer, False, True) NotifyRealmExpInfo(curPlayer) #¾³½çÌáÉý³É¾Í PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_RealmlvUp, nextRealmLv) PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_RealmUp, 1) #¸üÐÂÅÅÐаñ PlayerBillboard.UpdateRealmBillboard(curPlayer) # ¼Ç¼¿ª·þ»î¶¯ #OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_RealmLV, nextRealmLv) EventShell.EventRespons_RealmUp(curPlayer, nextRealmLv) #Á÷Ïò DataRecordPack.DR_RealmLVUp(curPlayer, nextRealmLv) return True def DologicDujieFBPass(curPlayer, realmLV, star): #¶É½Ùͨ¹ýºó´¦Àí realmIpyData = GetRealmIpyData(realmLV) if not realmIpyData: return #DoRealmLVUpLogic(curPlayer) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmFBIsOpen, 1) SyncRealmFBState(curPlayer) return #// A5 21 ¾³½çÐÞΪ³ØÌáÈ¡ #tagCMTakeOutRealmExp # #struct tagCMTakeOutRealmExp #{ # tagHead Head; #}; def OnTakeOutRealmExp(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) playerID = curPlayer.GetID() curTotalRealmExp = UpdateRealmExp(curPlayer, False) if curTotalRealmExp <= 0: GameWorld.DebugLog('¾³½çÐÞΪ³ØÌáÈ¡ ûÓо­Ñé¿ÉÌáÈ¡', playerID) return playerControl = PlayerControl.PlayerControl(curPlayer) playerControl.AddExp(curTotalRealmExp) PlayerControl.NotifyCode(curPlayer, 'TakeOutRealmExp', [curTotalRealmExp]) # PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpBeginTime, int(time.time())) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExp, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpPoint, 0) NotifyRealmExpInfo(curPlayer) return def UpdateRealmExp(curPlayer, isNotify=True, isRealmLVUP=False): ##¸üо³½çÐÞΪ³Ø curRealmLV = curPlayer.GetOfficialRank() ipyData = GetRealmIpyData(curRealmLV) if not ipyData: return 0 if not ipyData.GetExpRate(): return 0 curTime = int(time.time()) beginTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBeginTime) if not beginTime: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpBeginTime, curTime) return 0 if isRealmLVUP: ipyData = GetRealmIpyData(curRealmLV-1) curRealmExp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExp) curRealmExpPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpPoint) curTotalExp = curRealmExpPoint * ChConfig.Def_PerPointValue + curRealmExp if curTotalExp >= ipyData.GetExpLimit(): return curTotalExp passSeconds = curTime - beginTime if passSeconds <= 0: return curTotalExp perRealmExpTime = IpyGameDataPY.GetFuncCfg('RealmExpTime') curExpRate = ipyData.GetExpRate() #buffÔö¼ÓµÄ¶îÍâ¾­Ñé buffRemainTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBuffRemainTime) buffAddRate = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBuffAddRate) buffTime = min(buffRemainTime, passSeconds) addExp = buffTime /perRealmExpTime*(curExpRate*(ShareDefine.Def_MaxRateValue + buffAddRate)/ShareDefine.Def_MaxRateValue) + (passSeconds-buffTime)/perRealmExpTime*curExpRate #addExp = passSeconds / perRealmExpTime * curExpRate if addExp <= 0: return curTotalExp PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpBeginTime, curTime) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpBuffRemainTime, buffRemainTime - buffTime) updTotalExp = min(curTotalExp + addExp, ipyData.GetExpLimit()) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExp, updTotalExp % ChConfig.Def_PerPointValue) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpPoint, updTotalExp / ChConfig.Def_PerPointValue) #֪ͨ if isNotify: NotifyRealmExpInfo(curPlayer) return updTotalExp def AddRealmExpBuffTime(curPlayer, addTime, addRate): ##Ôö¼Ó»áÁ鵤BUFFʱ¼ä UpdateRealmExp(curPlayer, False) remainTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBuffRemainTime) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpBuffRemainTime, remainTime + addTime) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmExpBuffAddRate, addRate) NotifyRealmExpInfo(curPlayer) return def NotifyRealmExpInfo(curPlayer): ##֪ͨÐÞΪ³ØÐÅÏ¢ sendPack = ChPyNetSendPack.tagMCRealmExpInfo() sendPack.BeginTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBeginTime) sendPack.BuffTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBuffRemainTime) sendPack.BuffAddRate = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpBuffAddRate) sendPack.CurExp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExp) sendPack.CurExpPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmExpPoint) NetPackCommon.SendFakePack(curPlayer, sendPack) return