| #!/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 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)  | 
|           | 
|     #ÖØÐÂˢнÇÉ«ÊôÐÔ  | 
|     if isRefreshAttr:  | 
|         CalcAllDienstgradAttr(curPlayer)  | 
|         playerControl = PlayerControl.PlayerControl(curPlayer)  | 
|         playerControl.RefreshPlayerAttrState()  | 
|     return True  | 
|   | 
|   | 
| # ´Ó³ÆºÅ»ñµÃ¼¼ÄÜ  | 
| 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):  | 
|     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)  | 
|     #===========================================================================  | 
|           | 
|     curDienstgradMgr.DeleteDienstgrad(dienstgradID)  | 
|     #֪ͨ³ÆºÅɾ³ý  | 
|     curDienstgradMgr.Sync_PlayerDelDienstgrad(dienstgradID)  | 
|       | 
|     curDienstgradData = GetDienstgradData(dienstgradID)  | 
|     if curDienstgradData:  | 
|         # É¾³ý¶ÔÓ¦¼¼ÄÜ  | 
|         __DelSkill(curPlayer, curDienstgradData)  | 
|       | 
|     #ÖØÐÂˢнÇÉ«ÊôÐÔ  | 
|     if isRefreshAttr:  | 
|         CalcAllDienstgradAttr(curPlayer)  | 
|         playerControl = PlayerControl.PlayerControl(curPlayer)  | 
|         playerControl.RefreshPlayerAttrState()  | 
|     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())  | 
|   | 
| #===============================================================================  | 
| # //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)  | 
|   | 
| #-------------------------------------------------------------  | 
| ## »ñÈ¡ÒѼ¤»î³ÆºÅÁÐ±í  | 
| #  @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 CalcAllDienstgradAttr(curPlayer):  | 
|     # ¼ÆËãÈ«²¿³ÆºÅÊôÐÔ  | 
|     allAttrList = [{} for i in range(4)]  | 
|     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  | 
|           | 
|         attrTypeList = curDienstgradData.GetLightType()  | 
|         attrValueList = curDienstgradData.GetLightAttribute()  | 
|       | 
|         for i, attrID in enumerate(attrTypeList):  | 
|             PlayerControl.CalcAttrDict_Type(attrID, attrValueList[i], allAttrList)  | 
|               | 
|     # ±£´æ¼ÆËãÖµ  | 
|     PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Dienstgrad, allAttrList)  | 
|     return  | 
|   | 
| ## ³ÆºÅÿÈÕ¸üд¦Àí  | 
| #  @param curPlayer  | 
| #  @return None  | 
| def OnDay(curPlayer):  | 
|     return  | 
|   | 
| ##¼ì²é³ÆºÅ³¬Ê±  | 
| #  @param curPlayer  | 
| #  @return None  | 
| def CheckDienstgradTimeout(curPlayer):  | 
|     tick = int(time.time())  | 
|     lastTick = curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_Dienstgrad)  | 
|     if tick - lastTick < ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_Dienstgrad]:  | 
|         return  | 
|     curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_Dienstgrad, tick)  | 
|       | 
|     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)  | 
|     return  | 
|   | 
| #-------------------ÌØÊâ´¦Àí³ÆºÅÂß¼-------------------  | 
|   | 
| ##Íæ¼ÒµÚÒ»´ÎµÇ½¸ø³ÆºÅ  | 
| #  @param curPlayer  | 
| #  @return None  | 
| def GiveFirstLoginDienstgrad(curPlayer):  | 
|     dienstgradIDDict = ReadChConfig.GetEvalChConfig('FirstLogin_GiveDienstgrad')  | 
|     platFormName = GameWorld.GetPlayerPlatform(curPlayer.GetAccID())  | 
|     dienstgradIDList = dienstgradIDDict.get(platFormName)  | 
|     if not dienstgradIDList: #δÅäÖÃµÄÆ½Ì¨Ä¬ÈÏÈ¡keyΪ0µÄÄÚÈÝ  | 
|         dienstgradIDList = dienstgradIDDict.get(0, [])  | 
|           | 
|     for dienstgradID in dienstgradIDList:  | 
|         PlayerAddDienstgrad(curPlayer, dienstgradID)  | 
|         #PlayerFitOnDienstgrad(curPlayer, dienstgradID)  | 
|     return |