#!/usr/bin/python # -*- coding: GBK -*- # # ##@package PlayerDienstgrad.py # # @todo: Íæ¼Ò³ÆºÅ¹ÜÀí # @author: alee # @date: 2017-07-26 22£º00 # @version 1.0 # ÏêϸÃèÊö: # @change: 2017-10-18 21:00 alee ²ß»®ÐèÇóÈ¥³ýµãÁÁ³ÆºÅÂß¼­ #------------------------------------------------------------------------------ """Version = 2017-07-26 22£º00""" #------------------------------------------------------------------------------ #µ¼Èë import GameWorld import PlayerControl import IPY_GameWorld import ChConfig import ReadChConfig import IpyGameDataPY import SkillCommon import SkillShell import PassiveBuffEffMng import DataRecordPack import CrossPlayerData import GameFuncComm import ShareDefine import ChPyNetSendPack import NetPackCommon import ItemCommon import time #------------------------------------------------------------- #####ͨ¹ýPlayer¶ÔÏó½Ó¿Ú##### ## ²éÕÒÍæ¼ÒÖ¸¶¨³ÆºÅ # @param curPlayer # @param dienstgradID ³ÆºÅID # @return ³ÆºÅʵÀý def PlayerGetDienstgrad(curPlayer, dienstgradID): if curPlayer == None: #Íæ¼Ò²»ÔÚÏß return None curDienstgradMgr = curPlayer.GetDienstgradManager() curDienstgrad = curDienstgradMgr.GetDienstgrad(dienstgradID) return curDienstgrad def GetDienstgradData(dienstgradID): return IpyGameDataPY.GetIpyGameData('Dienstgrad', dienstgradID) def PlayerDelAddDienstgrad(curPlayer, delDienstgradIDList, addDienstgradIDList): ## Íæ¼Òɾ³ý³ÆºÅµÄͬʱ£¬Ôö¼Ó³ÆºÅ£¬Ò»°ãÓÃÓڳƺŻ¥³âµÄÔöɾ±ä¸üͬ²½´¦Àí if not delDienstgradIDList and not addDienstgradIDList: return isRefresh = False for dienstgradID in delDienstgradIDList: if PlayerDelDienstgrad(curPlayer, dienstgradID, isRefreshAttr=False): isRefresh = True for dienstgradID in addDienstgradIDList: if PlayerAddDienstgrad(curPlayer, dienstgradID, isDelRepeat=False, isRefreshAttr=False): isRefresh = True #ÖØÐÂˢнÇÉ«ÊôÐÔ if isRefresh: CalcAllDienstgradAttr(curPlayer) playerControl = PlayerControl.PlayerControl(curPlayer) playerControl.RefreshPlayerAttrState() return isRefresh ## Ìí¼ÓÍæ¼Ò³ÆºÅ # @param curPlayer # @param dienstgradID ³ÆºÅID # @param isDelRepeat ÊÇ·ñɾ³ýÖØ¸´³ÆºÅ # @return ÊÇ·ñÌí¼Ó³É¹¦ def PlayerAddDienstgrad(curPlayer, dienstgradID, isDelRepeat=True, isRefreshAttr=True, expireTime=0): if dienstgradID <= 0: return False #²éϵͳ±íÊý¾Ý curDienstgradData = GetDienstgradData(dienstgradID) if curDienstgradData == None: return False curDienstgradMgr = curPlayer.GetDienstgradManager() #curOldGradID = curDienstgradMgr.GetCurGradID() #ÖØ¸´Ìí¼Ó³ÆºÅ, ÏÞʱµÄÐèҪɾ³ýÖØÉèË¢ÐÂʱ¼ä curDienstgrad = curDienstgradMgr.GetDienstgrad(dienstgradID) if curDienstgrad: if isDelRepeat: curDienstgradMgr.DeleteDienstgrad(dienstgradID) else: return True #¼ì²é»¥³âµÄ³ÆºÅÀàÐÍ # curType = curDienstgradData.GetType() # ExcludeDienstgradType = ReadChConfig.GetEvalChConfig("ExcludeDienstgradType") # if curType in ExcludeDienstgradType: # #»¥³âµÄ³ÆºÅÀàÐÍ ÐèҪɾµôͬÀàÐͳƺŠ# curTypeIDList = IpyGameDataPY.DienstgradData.GetTypeIDList(curType) # for id in curTypeIDList: # if id == dienstgradID: # continue # curDienstgrad = curDienstgradMgr.GetDienstgrad(id) # if curDienstgrad == None: # #Íæ¼Ò³ÆºÅ²»´æÔÚ # continue # #Èç¹ûµ±Ç°×°±¸³ÆºÅ±»É¾£¬ÐèÒª¹ã²¥ # if curOldGradID == id: # PlayerTakeOffDienstgrad(curPlayer) # # curDienstgradMgr.DeleteDienstgrad(id) # #֪ͨ³ÆºÅɾ³ý # curDienstgradMgr.Sync_PlayerDelDienstgrad(id) #Ìí¼Ó³ÆºÅ curDienstgrad = curDienstgradMgr.AddDienstgrad(dienstgradID) if expireTime != 0: curDienstgrad.SetExpireTime(expireTime) curDienstgradMgr.Sync_PlayerGetDienstgrad(dienstgradID) # ѧϰ¼¼ÄÜ skillList = curDienstgradData.GetSkills() for skillID in skillList: __GiveSkill(curPlayer, skillID) CrossPlayerData.OnDienstgradChange(curPlayer, dienstgradID, 1) if dienstgradID == IpyGameDataPY.GetFuncCfg("TitleAddPoint"): __DoTitleAddPoint(curPlayer) #ÖØÐÂˢнÇÉ«ÊôÐÔ if isRefreshAttr: CalcAllDienstgradAttr(curPlayer) playerControl = PlayerControl.PlayerControl(curPlayer) playerControl.RefreshPlayerAttrState() return True # »ñµÃ³ÆºÅ¼Óµã def __DoTitleAddPoint(curPlayer): if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_AddPoint): # 먦Æôǰ²»¿É¼Óµã£¬ÒòΪDoAddPointOpen»áÒ»´ÎÐÔ²¹Æë£¬±ÜÃâÒâÍâÇé¿ö¶à¼ÓÁ˵ãÊý return addPointDict = IpyGameDataPY.GetFuncEvalCfg("LVUPAddPoint", 1, {}) titleAddPoint = PlayerControl.GetTitleAddExtraPoint(curPlayer) if titleAddPoint <=0: return curLV = curPlayer.GetLV() addFreePoint = 0 for rangLVs, point in addPointDict.items(): if curLV < rangLVs[0]: continue addFreePoint += titleAddPoint * (min(curLV, rangLVs[1]) - rangLVs[0] + 1) freePoint = curPlayer.GetFreePoint() updFreePoint = freePoint + addFreePoint curPlayer.SetFreePoint(updFreePoint) GameWorld.DebugLog("»ñµÃ³ÆºÅÔö¼Ó×ÔÓÉÊôÐÔµã: freePoint=%s,addFreePoint=%s,curLV=%s,updFreePoint=%s" % (freePoint, addFreePoint, curLV, updFreePoint)) return # ´Ó³ÆºÅ»ñµÃ¼¼ÄÜ def __GiveSkill(curPlayer, skillResID): skillData = GameWorld.GetGameData().FindSkillByType(skillResID, 1) if skillData == None: GameWorld.DebugLog("__GiveSkill() hasn't find skill(%s)" % skillResID) return if not SkillCommon.CheckSkillJob(curPlayer, skillData): return if not SkillShell.CheckLearnSkillCondition(curPlayer, skillData): GameWorld.DebugLog("__GiveSkill() learn skill(%s) condition isn't enough" % skillResID) return skillManager = curPlayer.GetSkillManager() if skillManager.FindSkillBySkillTypeID(skillResID): GameWorld.DebugLog("__GiveSkill() have learned skill(%s)" % skillResID) return skillManager.LVUpSkillBySkillTypeID(skillResID) PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEff(curPlayer, skillResID) PlayerControl.PlayerControl(curPlayer).RefreshSkillFightPowerEx(skillResID, 0) return # ³ÆºÅ¹ýÆÚɾ³ý¼¼ÄÜ def __DelSkill(curPlayer, curDienstgradData): # ѧϰ¼¼ÄÜ skillList = curDienstgradData.GetSkills() isDel = False for skillResID in skillList: skillManager = curPlayer.GetSkillManager() if not skillManager.FindSkillBySkillTypeID(skillResID): continue skillManager.DeleteSkillBySkillTypeID(skillResID) isDel = True if not isDel: return # ÖØË¢±»¶¯¼¼ÄÜ PassiveBuffEffMng.GetPassiveEffManager().RegistPassiveEff(curPlayer) # ÖØË¢¼¼ÄÜÕ½Á¦ PlayerControl.PlayerControl(curPlayer).RefreshAllSkill() return ## ɾ³ýÍæ¼Ò³ÆºÅ # @param curPlayer # @param dienstgradID ³ÆºÅID # @return None def PlayerDelDienstgrad(curPlayer, dienstgradID, isRefreshAttr=True, notifyMail=""): if curPlayer == None: #Íæ¼Ò²»ÔÚÏß return if dienstgradID <= 0: return curDienstgradMgr = curPlayer.GetDienstgradManager() curDienstgrad = curDienstgradMgr.GetDienstgrad(dienstgradID) if curDienstgrad == None: #Íæ¼Ò³ÆºÅ²»´æÔÚ return #Èç¹ûµ±Ç°×°±¸³ÆºÅ±»É¾£¬ÐèÒª¹ã²¥ if curDienstgradMgr.GetCurGradID() == dienstgradID: PlayerTakeOffDienstgrad(curPlayer) #=========================================================================== # if curDienstgradMgr.GetUseGradID() == dienstgradID: # UnUseDienstgrad(curPlayer) #=========================================================================== PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TitleStar % dienstgradID, 0) curDienstgradMgr.DeleteDienstgrad(dienstgradID) #֪ͨ³ÆºÅɾ³ý curDienstgradMgr.Sync_PlayerDelDienstgrad(dienstgradID) curDienstgradData = GetDienstgradData(dienstgradID) if curDienstgradData: # ɾ³ý¶ÔÓ¦¼¼ÄÜ __DelSkill(curPlayer, curDienstgradData) DataRecordPack.Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_Title, {'dienstgradID':dienstgradID}) CrossPlayerData.OnDienstgradChange(curPlayer, dienstgradID, 0) #ÖØÐÂˢнÇÉ«ÊôÐÔ if isRefreshAttr: CalcAllDienstgradAttr(curPlayer) playerControl = PlayerControl.PlayerControl(curPlayer) playerControl.RefreshPlayerAttrState() if notifyMail != "": PlayerControl.SendMailByKey(notifyMail, [curPlayer.GetPlayerID()], [], [dienstgradID, dienstgradID]) return True ## ´©×ÅÍæ¼Ò³ÆºÅ # @param curPlayer # @param dienstgradID ³ÆºÅID # @return None def PlayerFitOnDienstgrad(curPlayer, dienstgradID): curDienstgradMgr = curPlayer.GetDienstgradManager() curDienstgrad = curDienstgradMgr.GetDienstgrad(dienstgradID) if curDienstgrad == None: #Íæ¼Ò³ÆºÅ²»´æÔÚ return curOldGradID = curDienstgradMgr.GetCurGradID() if curOldGradID == dienstgradID: #ÒÑ×°±¸¸Ã³ÆºÅ return curDienstgradMgr.SetCurGradID(dienstgradID) curDienstgradMgr.Notify_PlayerChangeDienstgrad(dienstgradID) return ## жÏÂÍæ¼Ò³ÆºÅ # @param curPlayer # @return None def PlayerTakeOffDienstgrad(curPlayer): curDienstgradMgr = curPlayer.GetDienstgradManager() curOldGradID = curDienstgradMgr.GetCurGradID() if curOldGradID == 0: return curDienstgradMgr.SetCurGradID(0) curDienstgradMgr.Notify_PlayerChangeDienstgrad(0) return ## ²»Ê¹Óã¨Åå´÷£©³ÆºÅ£¬ÓÃÓÚ¼¤»îÊôÐÔ£¬²»ÏÔʾ³¡¾°ÖÐ # @param curPlayer # @return None def UnUseDienstgrad(curPlayer): curDienstgradMgr = curPlayer.GetDienstgradManager() curOldGradID = curDienstgradMgr.GetUseGradID() if curOldGradID == 0: return False curDienstgradMgr.SetUseGradID(0) return True ## ʹÓã¨Åå´÷£©³ÆºÅ£¬ÓÃÓÚ¼¤»îÊôÐÔ£¬ ²»ÏÔʾ³¡¾°ÖÐ # @param curPlayer # @param dienstgradID ³ÆºÅID # @return None def UseDienstgrad(curPlayer, dienstgradID): curDienstgradMgr = curPlayer.GetDienstgradManager() curDienstgrad = curDienstgradMgr.GetDienstgrad(dienstgradID) if curDienstgrad == None: #Íæ¼Ò³ÆºÅ²»´æÔÚ return False curOldGradID = curDienstgradMgr.GetUseGradID() if curOldGradID == dienstgradID: #ÒÑ×°±¸¸Ã³ÆºÅ return False curDienstgradMgr.SetUseGradID(dienstgradID) return True #------------------------------------------------------------- #####ͨ¹ýindexÍæ¼ÒË÷Òý½Ó¿Ú##### ## ²éÕÒÍæ¼ÒÖ¸¶¨³ÆºÅ # @param index Íæ¼ÒË÷Òý # @param dienstgradID ³ÆºÅID # @return ³ÆºÅʵÀý def GetDienstgrad(index, dienstgradID): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) return PlayerGetDienstgrad(curPlayer, dienstgradID) ## Ìí¼ÓÍæ¼Ò³ÆºÅ # @param index Íæ¼ÒË÷Òý # @param dienstgradID ³ÆºÅID # @return ÊÇ·ñÌí¼Ó³É¹¦ def AddDienstgrad(index, dienstgradID): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) return PlayerAddDienstgrad(curPlayer, dienstgradID) ## ɾ³ýÍæ¼Ò³ÆºÅ # @param index Íæ¼ÒË÷Òý # @param dienstgradID ³ÆºÅID # @return None def DelDienstgrad(index, dienstgradID): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) PlayerDelDienstgrad(curPlayer, dienstgradID) ## ´©×ÅÍæ¼Ò³ÆºÅ # @param index Íæ¼ÒË÷Òý # @param dienstgradID ³ÆºÅID # @return None def FitOnDienstgrad(index, dienstgradID): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) PlayerFitOnDienstgrad(curPlayer, dienstgradID) ## жÏÂÍæ¼Ò³ÆºÅ # @param index Íæ¼ÒË÷Òý # @return None def TakeOffDienstgrad(index): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) PlayerTakeOffDienstgrad(curPlayer) return #------------------------------------------------------------- #####·â°ü´¦Àí##### ##//03 35 Ö÷½ÇÍ·ÏÎË¢ÐÂ#tagCPlayerDienstgradRefresh # @param index Íæ¼ÒË÷Òý # @param tick # @return None def OnCPlayerDienstgradRefresh(index, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) if curPlayer == None: #Íæ¼Ò²»ÔÚÏß return Sync_AllDienstgradOnLogin(curPlayer) return def Sync_AllDienstgradOnLogin(curPlayer): curDienstgradMgr = curPlayer.GetDienstgradManager() curDienstgradMgr.Sync_AllDienstgrad() curDienstgradMgr.Notify_PlayerChangeDienstgrad(curDienstgradMgr.GetCurGradID()) SyncTitleStarInfo(curPlayer) return #=============================================================================== # //B2 01 ʹÓóƺÅ(ÓÐÊôÐÔ²»ÏÔʾ³¡¾°ÖÐ) #tagPyCMUseDienstgrad # # struct tagPyCMUseDienstgrad # { # tagHead Head; # DWORD GradID; //Í·ÏÎID # BYTE State; //ʹÓÃ״̬ 0È¡ÏûʹÓà 1ʹÓà עÒâ0307°üΪ´©´÷³¡¾°ÖÐÏÔʾ # }; #=============================================================================== def UseDienstgradPack(index, clientData, tick): #=========================================================================== # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) # curGradID = clientData.GradID # curGradState = clientData.State # # result = False # if curGradID == 0: # result = UnUseDienstgrad(curPlayer) # else: # if curGradState: # result = UseDienstgrad(curPlayer, curGradID) # else: # result = UnUseDienstgrad(curPlayer) # # if result: # CalcAllDienstgradAttr(curPlayer) # playerControl = PlayerControl.PlayerControl(curPlayer) # playerControl.RefreshPlayerAttrState() #=========================================================================== return ##//03 37 Ö÷½ÇװжͷÏÎ#tagCPlayerChangeDienstgrad # @param index Íæ¼ÒË÷Òý # @param tick # @return None def OnCPlayerChangeDienstgrad(index, tick): sendPack = IPY_GameWorld.IPY_CPlayerChangeDienstgrad() #//Í·ÏÎID curGradID = sendPack.GetGradID() #//×°±¸×´Ì¬ 0δװ±¸1ÒÑ×°±¸ curGradState = sendPack.GetState() if curGradID == 0: TakeOffDienstgrad(index) return if curGradState: FitOnDienstgrad(index, curGradID) else: TakeOffDienstgrad(index) #// A5 36 ³ÆºÅÉýÐÇ #tagCMTitleStarUp # #struct tagCMTitleStarUp #{ # tagHead Head; # DWORD TitleID; //³ÆºÅID #}; def OnTitleStarUp(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) playerID = curPlayer.GetPlayerID() titleID = clientData.TitleID curStar = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TitleStar % titleID) nextStar = curStar + 1 nextIpyData = IpyGameDataPY.GetIpyGameData("TitleStarUp", titleID, nextStar) if not nextIpyData: GameWorld.DebugLog("³ÆºÅ²»´æÔÚ¸ÃÐǼ¶£¬ÎÞ·¨ÉýÐÇ. titleID=%s,curStar=%s" % (titleID, curStar), playerID) return needItemList = nextIpyData.GetStarUpNeedItemList() if not needItemList: return itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needItemList, itemPack) if lackItemDict: GameWorld.DebugLog("³ÆºÅÉýÐÇËùÐèÎïÆ·²»×㣡 titleID=%s,nextStar=%s,needItemList=%s,lackItemDict=%s" % (titleID, nextStar, needItemList, lackItemDict), playerID) return ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "TitleStarUp") PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TitleStar % titleID, nextStar) GameWorld.DebugLog("³ÆºÅÉýÐÇ. titleID=%s,curStar=%s,nextStar=%s" % (titleID, curStar, nextStar), playerID) CalcAllDienstgradAttr(curPlayer) playerControl = PlayerControl.PlayerControl(curPlayer) playerControl.RefreshPlayerAttrState() SyncTitleStarInfo(curPlayer, titleID) return def GMSetTitleStar(curPlayer, titleID, setValue=None): ## GMÉèÖÃÐǼ¶ curDienstgradMgr = curPlayer.GetDienstgradManager() curDienstgrad = curDienstgradMgr.GetDienstgrad(titleID) if curDienstgrad == None: return False, "The player has not activated the titleID(%s)" % titleID if setValue == None: curStar = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TitleStar % titleID) setStar = curStar + 1 # ûָ¶¨ÐǼ¶Ê±Ä¬ÈÏÉýÐÇ else: setStar = setValue if setStar > 0: if not IpyGameDataPY.GetIpyGameData("TitleStarUp", titleID, setStar): return False, "The titleID(%s) star(%s) is not exist." % (titleID, setStar) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TitleStar % titleID, setStar) GameWorld.Log("GMÉèÖóƺÅÐǼ¶: titleID=%s,setStar=%s" % (titleID, setStar), curPlayer.GetPlayerID()) CalcAllDienstgradAttr(curPlayer) playerControl = PlayerControl.PlayerControl(curPlayer) playerControl.RefreshPlayerAttrState() SyncTitleStarInfo(curPlayer, titleID) return True, "" #------------------------------------------------------------- ## »ñÈ¡ÒѼ¤»î³ÆºÅÁбí # @param curPlayer # @return ³ÆºÅÁбí def GetDienstgradActiveInfo(curPlayer): titleActiveList = [] gradCnt = curPlayer.GetDienstgradManager().GetCount() for i in xrange(gradCnt): curGradID = curPlayer.GetDienstgradManager().AtGradID(i) if curGradID == 0: continue titleActiveList.append(curGradID) return titleActiveList def GetDienstgradActiveTypeCountInfo(curPlayer): activeTypeCountDict = {} dienstgradManager = curPlayer.GetDienstgradManager() gradCnt = dienstgradManager.GetCount() for i in xrange(gradCnt): curGradID = dienstgradManager.AtGradID(i) if curGradID == 0: continue curDienstgradData = GetDienstgradData(curGradID) if curDienstgradData == None: continue curType = curDienstgradData.GetType() activeTypeCountDict[curType] = activeTypeCountDict.get(curType, 0) + 1 return activeTypeCountDict def CalcAllDienstgradAttr(curPlayer): # ¼ÆËãÈ«²¿³ÆºÅÊôÐÔ allAttrList = [{} for i in range(4)] allAttrListStar = [{} for _ in range(4)] initFPAdd = 0 #³õʼսÁ¦ dienstgradManager = curPlayer.GetDienstgradManager() gradCnt = dienstgradManager.GetCount() for i in xrange(gradCnt): curGradID = dienstgradManager.AtGradID(i) if curGradID == 0: continue curDienstgradData = GetDienstgradData(curGradID) if curDienstgradData == None: continue initFPAdd += curDienstgradData.GetInitFightPower() attrTypeList = curDienstgradData.GetLightType() attrValueList = curDienstgradData.GetLightAttribute() for i, attrID in enumerate(attrTypeList): PlayerControl.CalcAttrDict_Type(attrID, attrValueList[i], allAttrList) curStar = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TitleStar % curGradID) starIpyData = IpyGameDataPY.GetIpyGameDataNotLog("TitleStarUp", curGradID, curStar) if starIpyData: starAttrType = starIpyData.GetStarAttrType() starAttrValue = starIpyData.GetStarAttrValue() for i, attrID in enumerate(starAttrType): attrValue = starAttrValue[i] PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListStar) # ±£´æ¼ÆËãÖµ PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_Dienstgrad, initFPAdd) PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Dienstgrad, allAttrList) PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_TitleStar, allAttrListStar) return ## ³ÆºÅÿÈÕ¸üд¦Àí # @param curPlayer # @return None def OnDay(curPlayer): return ##¼ì²é³ÆºÅ³¬Ê± # @param curPlayer # @return None def CheckDienstgradTimeout(curPlayer): gradCnt = curPlayer.GetDienstgradManager().GetCount() needClearList = [] #±éÀúËùÓгƺţ¬¼ì²é³¬Ê± for i in xrange(gradCnt): curGrad = curPlayer.GetDienstgradManager().At(i) if not curGrad: continue curGradID = curGrad.GetGradID() if curGradID == 0: continue curDienstgradData = GetDienstgradData(curGradID) if curDienstgradData == None: continue curExpireTime = curGrad.GetExpireTime() # ÌØÊâÖ¸¶¨ÓÐЧÆÚ if not curExpireTime: curExpireTime = curDienstgradData.GetExpireTime() # 0´ú±í²»ÏÞʱ if curExpireTime == 0: continue curCreateTime = curPlayer.GetDienstgradManager().AtCreateTime(i) pastSeconds = GameWorld.GetPastSeconds(curCreateTime) if pastSeconds < curExpireTime: continue needClearList.append(curGradID) #²»ÔÚ±éÀú¹ý³ÌÖÐɾ³ý£¬Ïȱ£´æÐèҪɾ³ýµÄ³ÆºÅ #ÒÀ´Îɾ³ý³ÆºÅ for curGradID in needClearList: PlayerDelDienstgrad(curPlayer, curGradID, notifyMail="TitleTimeout") return #-------------------ÌØÊâ´¦Àí³ÆºÅÂß¼­------------------- ##Íæ¼ÒµÚÒ»´ÎµÇ½¸ø³ÆºÅ # @param curPlayer # @return None def GiveFirstLoginDienstgrad(curPlayer): dienstgradIDDict = ReadChConfig.GetEvalChConfig('FirstLogin_GiveDienstgrad') platFormName = GameWorld.GetPlayerPlatform(curPlayer) dienstgradIDList = dienstgradIDDict.get(platFormName) if not dienstgradIDList: #δÅäÖÃµÄÆ½Ì¨Ä¬ÈÏÈ¡keyΪ0µÄÄÚÈÝ dienstgradIDList = dienstgradIDDict.get(0, []) for dienstgradID in dienstgradIDList: PlayerAddDienstgrad(curPlayer, dienstgradID) #PlayerFitOnDienstgrad(curPlayer, dienstgradID) return def SyncTitleStarInfo(curPlayer, titleID=None): force = False if titleID > 0: force = True syncIDList = [titleID] else: syncIDList = [] ipyDataMgr = IpyGameDataPY.IPY_Data() for index in range(ipyDataMgr.GetDienstgradCount()): ipyData = ipyDataMgr.GetDienstgradByIndex(index) syncIDList.append(ipyData.GetID()) if not syncIDList: return titleStarList = [] for titleID in syncIDList: curStar = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TitleStar % titleID) if not curStar and not force: continue starInfo = ChPyNetSendPack.tagMCTitleStar() starInfo.Clear() starInfo.TitleID = titleID starInfo.Star = curStar titleStarList.append(starInfo) if not titleStarList: return clientPack = ChPyNetSendPack.tagMCTitleStarInfo() clientPack.Clear() clientPack.TitleStarList = titleStarList clientPack.Count = len(clientPack.TitleStarList) NetPackCommon.SendFakePack(curPlayer, clientPack) return