#!/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  
 |