#!/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 OpenServerCampaign import CrossRealmPlayer 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() def UpdatePlayerBillboardOnLeaveServer(curPlayer, isAll=False): ##ÏÂÏ߸üÐÂÍæ¼ÒÅÅÐаñ if GameWorld.IsCrossServer(): # ¿ç·þ·þÎñÆ÷²»Óøüб¾·þ°ñ return #UpdateTotalRechargeBillboard(curPlayer) UpdatePlayerLVBillboard(curPlayer) # µÈ¼¶°ñ UpdatePlayerFPTotalBillboard(curPlayer, True) # Õ½¶·Á¦°ñ UpdateHorseBillboard(curPlayer, True, False) # ×øÆï°ñ UpdatePyPetBillboard(curPlayer, True, False) # Áé³è°ñ UpdateRealmBillboard(curPlayer) # ¾³½ç°ñ if isAll: UpdateRuneTowerBillboard(curPlayer) #UpdateTJGBillboard(curPlayer, minuteExp) ÍÑ»úЧÂʿɲ»¸üРEventReport.WriteEvent_FightPower(curPlayer) return def __CanPlayerBillboardComm(curPlayer): ## Íæ¼Ò¿É·ñÉϰñͨÓüì²é if not GameWorld.IsNormalPlayer(curPlayer): return False 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=[], autoSort=False, **kwargs): ## ¸üÐÂÍæ¼ÒÅÅÐаñ #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) kwargs["value3"] = curPlayer.GetFace() kwargs["value4"] = curPlayer.GetFacePic() if bType in ShareDefine.BTValue1_OfficialRankList: value1 = curPlayer.GetOfficialRank() GameServer_UpdateBillboard(bType, playerJob, playerID, playerName, playerOpInfo, value1, value2, cmpValue, cmpValue2, cmpValue3, 0, exInfo, autoSort, **kwargs) return def GameServer_UpdateBillboard(bType, bType2, bID, bName, bName2, value1, value2, cmpValue, cmpValue2=0, cmpValue3=0, bID2=0, exInfo=[], autoSort=False, **kwargs): bData = {"Type":bType, "Type2":bType2, "ID":bID, "ID2":bID2, "Name1":bName, "Name2":bName2, "ExInfo":exInfo, "Value1":value1, "Value2":value2, "CmpValue":cmpValue, "CmpValue2":cmpValue2, "CmpValue3":cmpValue3, "autoSort":autoSort} if "value3" in kwargs: bData["Value3"] = kwargs["value3"] if "value4" in kwargs: bData["Value4"] = kwargs["value4"] if "value5" in kwargs: bData["Value5"] = kwargs["value5"] if "value6" in kwargs: bData["Value6"] = kwargs["value6"] if "value7" in kwargs: bData["Value7"] = kwargs["value7"] if "value8" in kwargs: bData["Value8"] = kwargs["value8"] if "userData" in kwargs: bData["UserData"] = kwargs["userData"] sendMsg = "%s" % (bData) GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "UpdateBillboard", sendMsg, len(sendMsg)) GameWorld.DebugLog("ͬ²½GameServerÅÅÐаñ:bType=%s,cmpValue=%s, %s" % (bType, cmpValue, sendMsg), bID) return def UpdatePlayerCrossBillboard(curPlayer, bType, groupValue1, cmpValue, cmpValue2=0, cmpValue3=0, value1=0, value2=0, groupValue2=0, **kwargs): ## ¸üÐÂÍæ¼Ò¿ç·þÅÅÐаñ #if not cmpValue and not cmpValue2 and not cmpValue3: # return #if not __CanPlayerBillboardComm(curPlayer): # return playerJob = GetBillboardJob(curPlayer) playerID = curPlayer.GetID() playerName = CrossRealmPlayer.GetCrossPlayerName(curPlayer) playerOpInfo = GetBillboardOperateInfo(curPlayer) kwargs["value3"] = curPlayer.GetFace() kwargs["value4"] = curPlayer.GetFacePic() if bType in ShareDefine.BTValue1_OfficialRankList: value1 = curPlayer.GetOfficialRank() id2 = 0 GameServer_UpdateCrossBillboard(bType, groupValue1, playerID, playerName, playerOpInfo, playerJob, value1, value2, cmpValue, cmpValue2, cmpValue3, groupValue2, id2, **kwargs) return def GameServer_UpdateCrossBillboard(bType, groupValue1, dataID, name1, name2, type2, value1, value2, cmpValue, cmpValue2=0, cmpValue3=0, groupValue2=0, id2=0, **kwargs): bData = {"Type":bType, "GroupValue1":groupValue1, "Type2":type2, "ID":dataID, "ID2":id2, "Name1":name1, "Name2":name2, "Value1":value1, "Value2":value2, "CmpValue":cmpValue, "CmpValue2":cmpValue2, "CmpValue3":cmpValue3, "GroupValue2":groupValue2} if "value3" in kwargs: bData["Value3"] = kwargs["value3"] if "value4" in kwargs: bData["Value4"] = kwargs["value4"] if "value5" in kwargs: bData["Value5"] = kwargs["value5"] if "value6" in kwargs: bData["Value6"] = kwargs["value6"] if "value7" in kwargs: bData["Value7"] = kwargs["value7"] if "value8" in kwargs: bData["Value8"] = kwargs["value8"] if "userData" in kwargs: bData["UserData"] = kwargs["userData"] sendMsg = "%s" % (bData) GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "UpdateCrossBillboard", sendMsg, len(sendMsg)) GameWorld.DebugLog("ͬ²½GameServer¿ç·þÅÅÐаñ:bType=%s,groupValue1=%s,groupValue2=%s,cmpValue=%s, %s" % (bType, groupValue1, groupValue2, cmpValue, sendMsg), dataID) return def UpdatePlayerFPTotalBillboard(curPlayer, isForceUpdate=False, isCheckRule=True): ##¸üÐÂÍæ¼Ò×ÜÕ½¶·Á¦ playerFightPower = PlayerControl.GetFightPower(curPlayer) if not __CheckFightPowerCanUpdate(curPlayer, ChConfig.Def_PDict_FightPower_Total, playerFightPower, isForceUpdate, isCheckRule, ChConfig.Def_PDict_FightPower_TotalEx): return fightPower = playerFightPower % ChConfig.Def_PerPointValue fightPowerEx = playerFightPower / ChConfig.Def_PerPointValue PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FightPower_Total, fightPower, ChConfig.Def_PDictType_FightPower) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FightPower_TotalEx, fightPowerEx, ChConfig.Def_PDictType_FightPower) familyID = curPlayer.GetFamilyID() GameWorld.DebugLog("¸üÐÂ×ÜÕ½¶·Á¦£ºplayerFightPower=%s" % (playerFightPower), curPlayer.GetPlayerID()) UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_FightPower, fightPowerEx, fightPower, exInfo=[familyID]) #EventReport.WriteEvent_FightPower(curPlayer) return def __CheckFightPowerCanUpdate(curPlayer, key, fightPower, isForceUpdate=False, isCheckRule=True, key2=None): ''' ¼ì²éÍæ¼Ò¿É·ñ¸üÐÂÕ½¶·Á¦ @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 key2 != None: historyFightPower += curPlayer.NomalDictGetProperty(key2, 0, ChConfig.Def_PDictType_FightPower) * ChConfig.Def_PerPointValue 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) if not passLV: return 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) #ÅÅÐаñÒÑʵʱ¸üУ¬¹ÊÉÏÏß²»ÔÙͬ²½ 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 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