#!/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 PlayerTask import FBCommon 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 if not FBCommon.IsFBPass(curPlayer, mapID, lineID): 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) PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_RealmLV) #Á÷Ïò 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