| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| ##@package Player.PlayerBillboard  | 
| #  | 
| # @todo:ÅÅÐаñ  | 
| # @author hxp  | 
| # @date 2018-03-06  | 
| # @version 1.0  | 
| #  | 
| # ÏêϸÃèÊö: ÅÅÐаñ  | 
| #  | 
| #-------------------------------------------------------------------------------  | 
| #"""Version = 2018-03-06 11:00"""  | 
| #-------------------------------------------------------------------------------  | 
|   | 
| import ShareDefine  | 
| import GameWorld  | 
| import ChConfig  | 
| import PlayerControl  | 
| import ReadChConfig  | 
| import OpenServerCampaign  | 
| import MixServerCampaign  | 
| import PlayerSuccess  | 
| import GameFuncComm  | 
| import EventReport  | 
|   | 
| def DoBillboardOpen(curPlayer):  | 
|     ## ÅÅÐаñ¿ªÆôʱÐèÒª´¦ÀíµÄ  | 
|     UpdatePlayerBillboardOnLeaveServer(curPlayer, True) # Ö÷¶¯Í¬²½Ò»´Î°ñµ¥  | 
|     OpenServerCampaign.DoBillboardOpen(curPlayer) # Í¬²½¿ª·þ»î¶¯°ñµ¥  | 
|     return  | 
|   | 
| def GetBillboardOperateInfo(curPlayer):  | 
|     # ÅÅÐаñÖÐËù±£´æµÄÔËÓªÉÌÏà¹ØÐÅÏ¢  | 
|     platform = curPlayer.GetAccID()  | 
|     if platform in ["tencent"]:  | 
|         return curPlayer.GetOperateInfo()  | 
|     return platform  | 
|   | 
| def GetBillboardJob(curPlayer): return curPlayer.GetJob() + PlayerControl.GetJobRank(curPlayer) * 10   #¸öλÊÇjob Ê®Î»°ÙλÊÇjobrank  | 
|   | 
| def UpdatePlayerBillboardOnLeaveServer(curPlayer, isAll=False):  | 
|     ##ÏÂÏ߸üÐÂÍæ¼ÒÅÅÐаñ  | 
|     #UpdateTotalRechargeBillboard(curPlayer)  | 
|       | 
|     UpdatePlayerLVBillboard(curPlayer) # µÈ¼¶°ñ  | 
|     UpdatePlayerFPTotalBillboard(curPlayer, True) # Õ½¶·Á¦°ñ  | 
|     UpdateHorseBillboard(curPlayer, True, False) # ×øÆï°ñ  | 
|     UpdatePyPetBillboard(curPlayer, True, False) # Áé³è°ñ  | 
|     UpdateRealmBillboard(curPlayer) # ¾³½ç°ñ  | 
|       | 
|     if isAll:  | 
|         UpdateRuneTowerBillboard(curPlayer)  | 
|         #UpdateTJGBillboard(curPlayer, minuteExp) ÍÑ»úЧÂʿɲ»¸üР | 
|           | 
|     return  | 
|   | 
| def __CanPlayerBillboardComm(curPlayer):  | 
|     ## Íæ¼Ò¿É·ñÉϰñͨÓüì²é  | 
|     if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Billboard):  | 
|         GameWorld.DebugLog("ÅÅÐаñ먦Æô,ÎÞ·¨Éϰñ!curLV=%s" % (curPlayer.GetLV()), curPlayer.GetPlayerID())  | 
|         return False  | 
|       | 
|     return True  | 
|   | 
| def UpdatePlayerBillboard(curPlayer, bType, cmpValue, cmpValue2=0, cmpValue3=0, value1=0, value2=0, exInfo=[]):  | 
|     ## ¸üÐÂÍæ¼ÒÅÅÐаñ  | 
|       | 
|     #if not cmpValue and not cmpValue2 and not cmpValue3:  | 
|     #    return  | 
|       | 
|     if not __CanPlayerBillboardComm(curPlayer):  | 
|         return  | 
|       | 
|     playerJob = GetBillboardJob(curPlayer)  | 
|     playerID = curPlayer.GetID()  | 
|     playerName = curPlayer.GetName()  | 
|     playerOpInfo = GetBillboardOperateInfo(curPlayer)  | 
|     if bType in ShareDefine.BTValue1_OfficialRankList:  | 
|         value1 = curPlayer.GetOfficialRank()  | 
|     GameServer_UpdateBillboard(bType, playerJob, playerID, playerName, playerOpInfo,  | 
|                                value1, value2, cmpValue, cmpValue2, cmpValue3, 0, exInfo)  | 
|     return  | 
|   | 
| def GameServer_UpdateBillboard(bType, bType2, bID, bName, bName2, value1, value2, cmpValue, cmpValue2=0, cmpValue3=0, bID2=0, exInfo=[]):  | 
|     sendMsg = "%s" % ({"Type":bType, "Type2":bType2, "ID":bID, "ID2":bID2, "Name1":bName, "Name2":bName2, "ExInfo":exInfo,  | 
|                        "Value1":value1, "Value2":value2, "CmpValue":cmpValue, "CmpValue2":cmpValue2, "CmpValue3":cmpValue3})   | 
|     GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "UpdateBillboard", sendMsg, len(sendMsg))  | 
|     GameWorld.DebugLog("ͬ²½GameServerÅÅÐаñ:bType=%s,%s" % (bType, sendMsg))  | 
|     return  | 
|   | 
| def UpdatePlayerFPTotalBillboard(curPlayer, isForceUpdate=False, isCheckRule=True):  | 
|     ##¸üÐÂÍæ¼Ò×ÜÕ½¶·Á¦  | 
|       | 
|     playerFightPower = curPlayer.GetFightPower()  | 
|     if not __CheckFightPowerCanUpdate(curPlayer, ChConfig.Def_PDict_FightPower_Total, playerFightPower, isForceUpdate, isCheckRule):  | 
|         return  | 
|       | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FightPower_Total, playerFightPower,  | 
|                                        ChConfig.Def_PDictType_FightPower)  | 
|     familyID = curPlayer.GetFamilyID()  | 
|     GameWorld.DebugLog("¸üÐÂ×ÜÕ½¶·Á¦£ºplayerFightPower=%s" % (playerFightPower), curPlayer.GetPlayerID())  | 
|       | 
|     UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_FightPower, playerFightPower, exInfo=[familyID])  | 
|     EventReport.WriteEvent_FightPower(curPlayer)  | 
|     return  | 
|   | 
| def __CheckFightPowerCanUpdate(curPlayer, key, fightPower, isForceUpdate=False, isCheckRule=True):  | 
|     ''' ¼ì²éÍæ¼Ò¿É·ñ¸üÐÂÕ½¶·Á¦  | 
|     @param curPlayer Íæ¼ÒʵÀý  | 
|     @param key Õ½¶·Á¦ÀàÐͶÔÓ¦key  | 
|     @param fightPower µ±Ç°Õ½¶·Á¦  | 
|     @param isForceUpdate ÊÇ·ñÇ¿ÖÆ¸üУ¨ÈôÉèÖÃÇ¿ÖÆ¸üУ¬ÔÚijЩDZ¹æÔòÏÂÒ²²»Ò»¶¨ÄÜÇ¿ÖÆ¸üУ¬ÈçGMµÈ£©  | 
|     @param isCheckRule ÊÇ·ñ¼ì²éÕ½Á¦·¶Î§¸üвîÖµ  | 
|     @return True-¿É¸üР  | 
|     '''  | 
|     if fightPower <= 0:  | 
|         return False  | 
|       | 
|     historyFightPower = curPlayer.NomalDictGetProperty(key, 0, ChConfig.Def_PDictType_FightPower)  | 
|       | 
|     if not __CanPlayerBillboardComm(curPlayer):  | 
|         return False  | 
|       | 
|     if isForceUpdate:  | 
|         GameWorld.DebugLog("Õ½¶·Á¦¸üмì²é£ºÇ¿ÖƸüРkey=%s,fightPower=%s,history=%s"   | 
|                            % (key, fightPower, historyFightPower), curPlayer.GetPlayerID())  | 
|         return True  | 
|       | 
|     if fightPower == historyFightPower:  | 
|         GameWorld.DebugLog("Õ½¶·Á¦¸üмì²é£ºÓëÉÏ´ÎÏàͬ£¬Ä¬Èϲ»¸üРkey=%s,fightPower=%s,history=%s"   | 
|                            % (key, fightPower, historyFightPower), curPlayer.GetPlayerID())  | 
|         return False  | 
|       | 
|     return True  | 
|   | 
| def __GetUpdFightPower(curPlayer, key, fightPower):  | 
|     ##»ñÈ¡¸üÐÂÅÅÐаñµÄÕ½Á¦  | 
|     #Ôݶ¨¸üÐÂʵ¼ÊÕ½Á¦  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, key, fightPower, ChConfig.Def_PDictType_FightPower)  | 
|     return fightPower  | 
|   | 
| def UpdateHorseBillboard(curPlayer, isForceUpdate=False, isUpdateTotal=True):  | 
|     ##¸üÐÂÍæ¼Ò×øÆïÅÅÐаñ  | 
|       | 
|     HorseFightPower = PlayerControl.GetMFPFightPower(curPlayer, ShareDefine.Def_MFPType_Horse)  | 
|     if not __CheckFightPowerCanUpdate(curPlayer, ChConfig.Def_PDict_FightPower_Horse,  | 
|                                       HorseFightPower, isForceUpdate):  | 
|         return  | 
|       | 
|     HorseFightPower = __GetUpdFightPower(curPlayer, ChConfig.Def_PDict_FightPower_Horse, HorseFightPower)  | 
|       | 
|     UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_FightPower_Horse, HorseFightPower)  | 
|       | 
|     if isUpdateTotal:  | 
|         UpdatePlayerFPTotalBillboard(curPlayer, isForceUpdate)  | 
|     return  | 
|   | 
| def UpdatePyPetBillboard(curPlayer, isForceUpdate=False, isUpdateTotal=True):  | 
|     ## ¸üгèÎïÅÅÐаñ  | 
|     petMaxAtk = PlayerControl.GetPetMaxAtk(curPlayer)  | 
|     if not petMaxAtk:  | 
|         return  | 
|     UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_FightPower_Pet, petMaxAtk)   | 
|          | 
|     if isUpdateTotal:  | 
|         UpdatePlayerFPTotalBillboard(curPlayer, isForceUpdate)  | 
|     return  | 
|   | 
| def UpdatePlayerLVBillboard(curPlayer, isForceUpdate=True):  | 
|     ##¸üÐÂÍæ¼ÒµÈ¼¶ÅÅÐаñ  | 
|     UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_LV, curPlayer.GetLV())  | 
|     return  | 
|   | 
| def UpdateRuneTowerBillboard(curPlayer):  | 
|     ##¸üÐÂÍæ¼Ò·ûÓ¡ËþÅÅÐаñ  | 
|     passLV = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TrialTower_PassLV)  | 
|     UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_TrialTower, passLV)   | 
|     return  | 
|   | 
| def UpdateTJGBillboard(curPlayer, minuteExp):  | 
|     ##ÍÑ»úЧÂʰñ  | 
|     if not minuteExp:  | 
|         return  | 
|     expPoint = minuteExp / ChConfig.Def_PerPointValue  | 
|     exp = minuteExp % ChConfig.Def_PerPointValue  | 
|     UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_OffLineEfficient, expPoint, exp)  | 
|     return  | 
|   | 
| def UpdateRealmBillboard(curPlayer):  | 
|     ##¾³½ç°ñ  | 
|     if not curPlayer.GetOfficialRank():  | 
|         return  | 
|     UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_Realm, curPlayer.GetOfficialRank())  | 
|     return  | 
|   | 
|   | 
| ###################################### ÒÔÏ´úÂëÔÝʱûÓã¬ÐÞ¸ÄʱÔÙÕûºÏ ################################################  | 
|   | 
| ##Íæ¼ÒµÇ¼ÅÅÐд¦Àí  | 
| # @param curPlayer Íæ¼ÒʵÀý  | 
| # @return   | 
| def BillboardOnLogin(curPlayer):  | 
|     # ÉÏÏßĬÈÏͬ²½ÅÅÐаñ  | 
|     UpdatePlayerBillboardOnLeaveServer(curPlayer) #ÅÅÐаñÒÑʵʱ¸üУ¬¹ÊÉÏÏß²»ÔÙͬ²½  | 
|       | 
|     curSign = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ClearBillboardSign)  | 
|       | 
|     playerSign = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ReUpdBillboardSign)  | 
|       | 
|     if playerSign == curSign:  | 
|         GameWorld.DebugLog("Íæ¼ÒµÇ¼¼ì²éÊÇ·ñÖØÐÂͬ²½ÅÅÐаñ£¡±ê¼ÇÏàͬ²»Í¬²½curSign=%s" % curSign)  | 
|         return  | 
|       | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ReUpdBillboardSign, curSign)  | 
|     GameWorld.DebugLog("Íæ¼ÒµÇÂ¼ÖØÐÂͬ²½ÅÅÐаñ£¡¸üÐÂͬ²½±ê¼ÇlastSign=%s,curSign=%s" % (playerSign, curSign))  | 
|           | 
|     # Èç¹ûÊǺϷþ³äÖµ»î¶¯¼Ç¼ʱ»ú£¬Ôòͬ²½Ò»´ÎÅÅÐаñ  | 
|     mixServerRechargeType = ShareDefine.Def_MixCampaign_Type_RechargeRank  | 
|     if MixServerCampaign.IsNeedSaveMixServerCampaignRecordData(mixServerRechargeType):  | 
|         mixRecordDataType = ShareDefine.Def_MixCampaign_Type_RechargeCnt  | 
|         mixRecordDataKey = ChConfig.Def_PDict_MixServerCampaign_RecordData % mixRecordDataType  | 
|         mixRecordData = curPlayer.NomalDictGetProperty(mixRecordDataKey, 0, ChConfig.Def_PDictType_OpenServerCampaign)  | 
|         UpdateMixServerRechargeRankBillboard(curPlayer, mixRecordData)  | 
|     else:  | 
|         GameWorld.DebugLog("·ÇºÏ·þ³äÖµ»î¶¯¼Ç¼ʱ»ú£¬²»Í¬²½£¡")  | 
|           | 
|     # ÌػݳäÖµÅÅÐÐ  | 
|     gameWorld = GameWorld.GetGameWorld()  | 
|     actionNumKey = ShareDefine.Def_Notify_WorldKey_DayAction_RechargeRank  | 
|     actionNum = gameWorld.GetGameWorldDictByKey(actionNumKey)  | 
|     if actionNum:  | 
|         curTotalGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TeHui_RechargeRankTotalGold, 0,  | 
|                                                       ChConfig.Def_PDictType_TeHuiAction)  | 
|         curTotalGold = max(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TeHui_RechargeRankTotalGoldEx, 0,  | 
|                                                           ChConfig.Def_PDictType_TeHuiAction), curTotalGold)  | 
|         actionID = gameWorld.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_DayAction_ID % actionNumKey)  | 
|         UpdateRechargeRankBillboard(curPlayer, actionID, actionNum, curTotalGold)  | 
|     else:  | 
|         GameWorld.DebugLog("·ÇÌØ»Ý³äÖµÅÅÐлʱ»ú£¬²»Í¬²½£¡")  | 
|       | 
|     GameWorld.DebugLog("Íæ¼ÒµÇÂ¼ÖØÐÂͬ²½ÅÅÐаñ£¡OK!")  | 
|     return  | 
|   | 
| ##ºÏ·þÊ×´ÎÉÏÏßÇ¿ÖÆ¸üÐÂÒ»´ÎÅÅÐаñ  | 
| # @param curPlayer Íæ¼ÒʵÀý  | 
| # @param lastMixServerDay ºÏ·þʱµÄ¿ª·þÌì  | 
| # @return  | 
| def UpdBillboardOnMixServerFirstLogin(curPlayer, lastMixServerDay):  | 
|       | 
|     updBillboardDay = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MSFirstLogin_UpdBillboard)  | 
|       | 
|     if lastMixServerDay == updBillboardDay:  | 
|         GameWorld.DebugLog("ºÏ·þÊ×µÇͬ²½ÅÅÐаñÒÑ´¦Àí¹ý£¡lastMixServerDay=%s,updBillboardDay=%s"   | 
|                            % (lastMixServerDay, updBillboardDay))  | 
|         return  | 
|       | 
|     GameWorld.DebugLog("ºÏ·þÊ×µÇͬ²½ÅÅÐаñ...")  | 
|     UpdatePlayerBillboardOnLeaveServer(curPlayer)  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MSFirstLogin_UpdBillboard, lastMixServerDay)  | 
|     GameWorld.DebugLog("    ºÏ·þÊ×µÇͬ²½ÅÅÐаñOK£¡£¡£¡")  | 
|     return  | 
|   | 
| ## ¸üе±Ç°ïÚ³µÐÅÏ¢  | 
| #  @param playerID: Íæ¼ÒID  | 
| #  @param playerName: Íæ¼ÒÃû×Ö  | 
| #  @param playerOpInfo: Íæ¼Òƽ̨ÐÅÏ¢  | 
| #  @param playerLV: Íæ¼ÒµÈ¼¶  | 
| #  @param truckLV: ïÚ³µµÈ¼¶  | 
| #  @param truckMapID: ïÚ³µËùÔÚµØÍ¼ID  | 
| #  @return:   | 
| def UpdateBillboardPlayerTruck(playerID, playerName, playerOpInfo, playerLV, truckLV, truckMapID):  | 
|       | 
|     #µ±truckMapIDΪ0ʱ±íʾÔÚÅÅÐÐÔÚɾ³ý¸ÃïÚ³µµÄ¼Ç¼  | 
|       | 
|     #[Íæ¼ÒID, Íæ¼ÒÃû×Ö, Íæ¼ÒµÈ¼¶, ïÚ³µµÈ¼¶, ïÚ³µÎ»ÖÃ]  | 
|     cmdList = [playerID, playerName, playerOpInfo, playerLV, truckLV, truckMapID]  | 
|     GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "UpdateBillboardPlayerTruck",  | 
|                                                               '%s' % (cmdList), len(str(cmdList)))  | 
|     return  | 
|   | 
| ## ¸üгäÖµÅÅÐÐÌØ»ÝÅÅÐаñ  | 
| #  @param playerID: Íæ¼ÒID  | 
| #  @return:   | 
| def UpdateRechargeRankBillboard(curPlayer, actionID, actionNum, updateGold):  | 
| #    if GameWorld.IsGM(curPlayer):  | 
| #        #GM²»Éϰñ  | 
| #        return  | 
|        | 
|     #ÅÅÐаñÐèÒªÊý¾Ý[Íæ¼ÒID, Íæ¼ÒÃû×Ö, Íæ¼ÒÖ°Òµ, »÷ɱÊý]  | 
|     playerID = curPlayer.GetID()  | 
|     playerName = curPlayer.GetName()  | 
|     playerOpInfo = curPlayer.GetOperateInfo()  | 
|     playerJob = curPlayer.GetJob()  | 
|     playerLV = curPlayer.GetLV()  | 
|     familyName = curPlayer.GetFamilyName()  | 
|     GameWorld.DebugLog("¸üÐÂÌØ»Ý³äÖµÅÅÐаñ: actionID=%s,actionNum=%s,updateGold=%s"   | 
|                        % (actionID, actionNum, updateGold), curPlayer.GetPlayerID())  | 
|     sendMsg = '%s' % ([playerID, playerName, playerOpInfo, playerJob, playerLV, familyName, actionID, actionNum, updateGold])   | 
|     GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'UpdRechargeRankBillboard', \  | 
|             sendMsg, len(sendMsg))  | 
|     return  | 
|   | 
| ## ¸üÐÂÏû·ÑÅÅÐÐÌØ»ÝÅÅÐаñ  | 
| #  @param playerID: Íæ¼ÒID  | 
| #  @return:   | 
| def UpdateCostRankBillboard(curPlayer, actionID, actionNum, updateGold):  | 
| #    if GameWorld.IsGM(curPlayer):  | 
| #        #GM²»Éϰñ  | 
| #        return  | 
|        | 
|     #ÅÅÐаñÐèÒªÊý¾Ý[Íæ¼ÒID, Íæ¼ÒÃû×Ö, Íæ¼ÒÖ°Òµ, »÷ɱÊý]  | 
|     playerID = curPlayer.GetID()  | 
|     playerName = curPlayer.GetName()  | 
|     playerOpInfo = curPlayer.GetOperateInfo()  | 
|     playerJob = curPlayer.GetJob()  | 
|     playerLV = curPlayer.GetLV()  | 
|     familyName = curPlayer.GetFamilyName()  | 
|     GameWorld.DebugLog("¸üÐÂÌØ»ÝÏû·ÑÅÅÐаñ: actionID=%s,actionNum=%s,updateGold=%s"   | 
|                        % (actionID, actionNum, updateGold), curPlayer.GetPlayerID())  | 
|     sendMsg = '%s' % ([playerID, playerName, playerOpInfo, playerJob, playerLV, familyName, actionID, actionNum, updateGold])   | 
|     GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'UpdCostRankBillboard', \  | 
|             sendMsg, len(sendMsg))  | 
|     return  | 
|   | 
| ## ¸üкϷþÀۼƳäÖµ»î¶¯ÅÅÐаñ  | 
| #  @param playerID: Íæ¼ÒID  | 
| #  @return:   | 
| def UpdateMixServerRechargeRankBillboard(curPlayer, value):  | 
| #    if GameWorld.IsGM(curPlayer):  | 
| #        #GM²»Éϰñ  | 
| #        return  | 
|       | 
|     mixServerRechargeBillLimit = ReadChConfig.GetEvalChConfig("MixServerRechargeBillLimit")  | 
|     GameWorld.DebugLog("    ¸üкϷþÀۼƳäÖµ»î¶¯ÅÅÐаñ value=%s,limit=%s"   | 
|                        % (value, mixServerRechargeBillLimit), curPlayer.GetPlayerID())  | 
|     # Î´´ïµ½ÉϰñÌõ¼þ  | 
|     if value < mixServerRechargeBillLimit:  | 
|         return  | 
|       | 
|     #ÅÅÐаñÐèÒªÊý¾Ý[Íæ¼ÒID, Íæ¼ÒÃû×Ö, Íæ¼ÒÖ°Òµ, »÷ɱÊý]  | 
|     playerID = curPlayer.GetID()  | 
|     playerName = curPlayer.GetName()  | 
|     playerOpInfo = curPlayer.GetOperateInfo()  | 
|     playerJob = curPlayer.GetJob()  | 
|     fightPower = curPlayer.GetFightPower()  | 
|     familyName = curPlayer.GetFamilyName()  | 
|     sendMsg = '%s' % ([playerID, playerName, playerOpInfo, playerJob, fightPower, familyName, value])   | 
|     GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'UpdMSRechargeRankBillboard', \  | 
|             sendMsg, len(sendMsg))  | 
|     return  | 
|       | 
| ##¸üÐÂÍæ¼Ò³äÖµÅÅÐаñ  | 
| # @param curPlayer Íæ¼ÒʵÀý  | 
| # @return ÈÎÎñʵÀý  | 
| # @remarks   | 
| def UpdateTotalRechargeBillboard(curPlayer):  | 
| #    if GameWorld.IsGM(curPlayer):  | 
| #        #GM²»Éϰñ  | 
| #        return  | 
|     totalChangeCoinPoint = curPlayer.GetChangeCoinPointTotal()  | 
|        | 
|     #ÅÅÐаñÐèÒªÊý¾Ý[Íæ¼ÒID, Íæ¼ÒÃû×Ö, Íæ¼ÒÖ°Òµ, Íæ¼ÒµÈ¼¶]  | 
|     playerID = curPlayer.GetID()  | 
|     playerName = curPlayer.GetName()  | 
|     playerOpInfo = curPlayer.GetOperateInfo()  | 
|     playerJob = curPlayer.GetJob()  | 
|     playerLV = curPlayer.GetLV()  | 
|       | 
|     sendMsg = '%s' % ([playerID, playerName, playerOpInfo, playerJob, playerLV, totalChangeCoinPoint])   | 
|     GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'UpdateTotalRechargeBillboard', \  | 
|             sendMsg, len(sendMsg))  | 
|     return  | 
|   | 
| ## ¸üкϷþÕ½ÃË»÷ɱboss»î¶¯ÅÅÐаñ  | 
| #  @param playerID: Íæ¼ÒID  | 
| #  @return:   | 
| def UpdateMixServerFamilyKillBossBillboard(curPlayer, value):  | 
|     familyID = curPlayer.GetFamilyID()  | 
|     if not familyID:  | 
|         return  | 
|     #ÅÅÐаñÐèÒªÊý¾Ý[Íæ¼ÒID]  | 
|     playerID = curPlayer.GetID()  | 
| #    playerName = curPlayer.GetName()  | 
| #    playerOpInfo = curPlayer.GetOperateInfo()  | 
| #    playerJob = curPlayer.GetJob()  | 
| #    fightPower = curPlayer.GetFightPower()  | 
| #    familyName = curPlayer.GetFamilyName()  | 
|     sendMsg = '%s' % ([value])  | 
|     GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(playerID, 0, 0, 'UpdMSFamilyKillBossBillboard', \  | 
|             sendMsg, len(sendMsg))  | 
|     return  |