#!/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 import PlayerTask import PlayerOnline #------------------------------------------------------------------------------ # ¶É½ÙÈÎÎñÀàÐÍ RealmTaskTypeList = ( RealmTaskType_LV, # µÈ¼¶ 1 RealmTaskType_MainLevel, # Ö÷Ï߹ؿ¨ 2 RealmTaskType_UseXiantao, # ÏûºÄÕ½´¸ 3 RealmTaskType_TreeLV, # ÏÉÊ÷µÈ¼¶ 4 ) = range(1, 1 + 4) # ÐèÒª¼Ç¼ÈÎÎñÖµµÄÈÎÎñÀàÐÍÁбí NeedTaskValueTypeList = [RealmTaskType_UseXiantao] def OnLogin(curPlayer): SyncRealmInfo(curPlayer, isAll=True) if ChConfig.Def_InitOfficialRank > 0 and not curPlayer.GetOfficialRank(): curPlayer.SetOfficialRank(ChConfig.Def_InitOfficialRank) 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() playerID = curPlayer.GetPlayerID() attrDict = {} for i, attrID in enumerate(addAttrIDList): attrDict[attrID] = attrDict.get(attrID, 0) + addAttrValueList[i] GameWorld.DebugLog("¹ÙÖ°ÊôÐÔ: %s" % attrDict, playerID) PlayerOnline.GetOnlinePlayer(curPlayer).SetCalcAttr(ChConfig.Def_CalcAttr_Realm, attrDict) return def RefreshOfficialAttr(curPlayer): CalcOfficialRankAttr(curPlayer) PlayerOnline.GetOnlinePlayer(curPlayer).RefreshRoleAttr() 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_MainLevel: mapID = ChConfig.Def_FBMapID_Main lineID = needValueA 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 == RealmTaskType_TreeLV: treeLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLV) if treeLV < needValueA: GameWorld.DebugLog('¾³½çÈÎÎñÁì½±£¬ÏÉÊ÷ÔÚ×£¸£µÈ¼¶²»×ã! realmLV=%s,taskID=%s,taskType=%s,treeLV=%s < %s' % (realmLV, taskID, taskType, treeLV, needValueA), 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) PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_RealmLV) #¸üÐÂÅÅÐаñ PlayerBillboard.UpdateRealmBillboard(curPlayer) # ¼Ç¼¿ª·þ»î¶¯ #OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_RealmLV, nextRealmLv) return True