#!/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 ItemControler import FBCommon import GameFuncComm import PlayerControl import ChPyNetSendPack import NetPackCommon import IpyGameDataPY import ShareDefine import GameWorld import ChConfig import PlayerSuccess import PlayerBillboard import PlayerTongTianLing import PlayerGubao #------------------------------------------------------------------------------ # ¶É½ÙÈÎÎñÀàÐÍ RealmTaskTypeList = ( RealmTaskType_LV, # µÈ¼¶ 1 RealmTaskType_PassMap, # ¹ý¹Ø¹Ø¿¨ 2 RealmTaskType_UseXiantao, # ÏûºÄÕ½´¸ 3 ) = range(1, 1 + 3) # ÐèÒª¼Ç¼ÈÎÎñÖµµÄÈÎÎñÀàÐÍÁбí NeedTaskValueTypeList = [RealmTaskType_UseXiantao] def DoOfficialOpen(curPlayer): #¹¦ÄÜ¿ªÆô # curRealmLV = curPlayer.GetOfficialRank() # if not curRealmLV: # DoRealmLVUpLogic(curPlayer) return True def OnLogin(curPlayer): SyncRealmInfo(curPlayer, isAll=True) if not curPlayer.GetOfficialRank(): curPlayer.SetOfficialRank(1) return def GetRealmIpyData(realmLV): return IpyGameDataPY.GetIpyGameData("Realm", realmLV) def SyncRealmInfo(curPlayer, taskIDList=None, isAll=False): sendPack = ChPyNetSendPack.tagMCSyncRealmInfo() sendPack.TaskAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskAwardState) sendPack.TaskValueList = [] if isAll and taskIDList == None: taskIDList = [] curRealmLV = curPlayer.GetOfficialRank() taskIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("RealmLVUPTask", curRealmLV) if taskIpyDataList: for taskIpyData in taskIpyDataList: if taskIpyData.GetTaskType() in NeedTaskValueTypeList: taskIDList.append(taskIpyData.GetTaskID()) if taskIDList: for taskID in taskIDList: task = ChPyNetSendPack.tagMCSyncRealmTask() task.TaskID = taskID task.TaskValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskValue % taskID) sendPack.TaskValueList.append(task) sendPack.TaskValueCount = len(sendPack.TaskValueList) NetPackCommon.SendFakePack(curPlayer, sendPack) return 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 def RefreshOfficialAttr(curPlayer): CalcOfficialRankAttr(curPlayer) PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState() return def AddRealmTaskValue(curPlayer, taskType, addValue): ## Ôö¼Ó¾³½çÈÎÎñÖµ if taskType not in NeedTaskValueTypeList: return if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Official): return realmLV = curPlayer.GetOfficialRank() taskIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("RealmLVUPTask", realmLV) if not taskIpyDataList: return syncTaskIDList = [] for taskIpyData in taskIpyDataList: if taskType != taskIpyData.GetTaskType(): continue taskID = taskIpyData.GetTaskID() needValue = GetRealmTaskNeedValue(taskIpyData.GetNeedValueList(), 0) curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskValue % taskID) if curValue >= needValue: continue syncTaskIDList.append(taskID) updValue = min(curValue + addValue, needValue) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmTaskValue % taskID, updValue) GameWorld.DebugLog("¸üо³½çÈÎÎñÖµ: realmLV=%s,taskType=%s,taskID=%s,updValue=%s,curValue=%s,addValue=%s" % (realmLV, taskType, taskID, updValue, curValue, addValue), curPlayer.GetPlayerID()) if syncTaskIDList: SyncRealmInfo(curPlayer, taskIDList=syncTaskIDList) return def GetRealmTaskNeedValue(needValueList, index): return needValueList[index] if len(needValueList) > index else 0 def GetRealmLVUpTaskAward(curPlayer, taskID): ## ÁìÈ¡¾³½ç¶É½ÙÈÎÎñÌõ¼þ½±Àø playerID = curPlayer.GetPlayerID() realmLV = curPlayer.GetOfficialRank() awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskAwardState) if awardState&pow(2, taskID): GameWorld.DebugLog("¾³½çÈÎÎñÁì½±£¬ÒÑÁìÈ¡¹ý! realmLV=%s,taskID=%s" % (realmLV, taskID), playerID) return taskIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("RealmLVUPTask", realmLV) if not taskIpyDataList: return taskIpyData = None for tIpyData in taskIpyDataList: if taskID != tIpyData.GetTaskID(): continue taskIpyData = tIpyData break if not taskIpyData: GameWorld.DebugLog("ûÓиþ³½çÈÎÎñ! realmLV=%s,taskID=%s" % (realmLV, taskID), playerID) return taskType = taskIpyData.GetTaskType() needValueList = taskIpyData.GetNeedValueList() needValueA = GetRealmTaskNeedValue(needValueList, 0) awardItemList = taskIpyData.GetAwardItemList() # Íæ¼ÒµÈ¼¶ if taskType == RealmTaskType_LV: playerLV = curPlayer.GetLV() if playerLV < needValueA: GameWorld.DebugLog('¾³½çÈÎÎñÁì½±£¬µÈ¼¶²»×ã! realmLV=%s,taskID=%s,taskType=%s,playerLV=%s < %s' % (realmLV, taskID, taskType, playerLV, needValueA), playerID) return # ¹ý¹Ø¸±±¾ elif taskType == RealmTaskType_PassMap: mapID = needValueA lineID = GetRealmTaskNeedValue(needValueList, 1) if not FBCommon.IsFBPass(curPlayer, mapID, lineID): GameWorld.DebugLog('¾³½çÈÎÎñÁì½±£¬Î´¹ý¹Ø! realmLV=%s,taskID=%s,taskType=%s,mapID=%s,lineID=%s' % (realmLV, taskID, taskType, mapID, lineID), playerID) return # ¸ù¾Ý¼Ç¼ÈÎÎñ½ø¶ÈÖµ elif taskType in NeedTaskValueTypeList: curValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskValue % taskID) if curValue < needValueA: GameWorld.DebugLog('¾³½çÈÎÎñÁì½±£¬Ìõ¼þ²»×ã! realmLV=%s,taskID=%s,taskType=%s,curValue=%s < %s' % (realmLV, taskID, taskType, curValue, needValueA), playerID) return else: return ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["RealmTask", False, {}]) updAwardState = awardState|pow(2, taskID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmTaskAwardState, updAwardState) GameWorld.DebugLog("¾³½ç¶É½ÙÁì½±OK! realmLV=%s,taskID=%s,updAwardState=%s" % (realmLV, taskID, updAwardState), playerID) SyncRealmInfo(curPlayer) return def CheckRealmTaskFinishAll(curPlayer): ## ¼ì²é¾³½çÈÎÎñÊÇ·ñÒÑÈ«²¿Íê³É realmLV = curPlayer.GetOfficialRank() taskIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("RealmLVUPTask", realmLV) if not taskIpyDataList: GameWorld.DebugLog("ûÓо³½çÈÎÎñËãδÍê³É! realmLV=%s" % (realmLV), curPlayer.GetPlayerID()) return awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskAwardState) for taskIpyData in taskIpyDataList: taskID = taskIpyData.GetTaskID() if not awardState&pow(2, taskID): GameWorld.DebugLog("¾³½çÈÎÎñδÍê³ÉÁì½±! realmLV=%s,taskID=%s" % (realmLV, taskID), curPlayer.GetPlayerID()) return return True #// 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 not CheckRealmTaskFinishAll(curPlayer): return DoRealmLVUpLogic(curPlayer) 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) PlayerGubao.DoGubaoAddFreePoint(curPlayer) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmTaskAwardState, 0) syncTaskIDList = [] taskIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("RealmLVUPTask", nextRealmLv) if taskIpyDataList: for taskIpyData in taskIpyDataList: taskID = taskIpyData.GetTaskID() if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmTaskValue % taskID): PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmTaskValue % taskID, 0) syncTaskIDList.append(taskID) PlayerControl.PlayerControl(curPlayer).PlayerLvUp() if needSys: PlayerControl.WorldNotify(0, 'RealmUpSuccess', [curPlayer.GetName(), curPlayer.GetID(), nextRealmLv]) RefreshOfficialAttr(curPlayer) GameFuncComm.DoFuncOpenLogic(curPlayer) SyncRealmInfo(curPlayer, taskIDList=syncTaskIDList) #¾³½çÌáÉý³É¾Í 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) return True