| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #---------------------------------------------------------------------  | 
| #  | 
| #---------------------------------------------------------------------  | 
| ##@package PlayerState  | 
| # @todo: Íæ¼ÒÑ»·Âß¼  | 
| #  | 
| # @author: panwei  | 
| # @date 2011-04-07  | 
| # @version 1.0  | 
| #  | 
| # @note:   | 
| #---------------------------------------------------------------------  | 
| """Version = 2011-04-07 15:10"""  | 
| #---------------------------------------------------------------------  | 
| import GameWorld  | 
| import ChConfig  | 
| import IPY_GameServer  | 
| import PlayerRequest  | 
| import PlayerFamily  | 
| import CreateRole  | 
| #---------------------------------------------------------------------  | 
| ## C++µ÷ÓÃ,Íæ¼Òɾ³ý¼Ò×å(ºÏ·þ)  | 
| #  @param index Íæ¼ÒË÷Òý  | 
| #  @param tick µ±Ç°Ê±¼ä  | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def ServerMerge_DeleteFamily(index, tick):  | 
|     GameWorld.GetPsycoFunc(__Func_ServerMerge_DeleteFamily)(index, tick)  | 
|     return  | 
|   | 
| ## C++µ÷ÓÃ,Íæ¼Òɾ³ý¼Ò×å(ºÏ·þ)  | 
| #  @param index Íæ¼ÒË÷Òý  | 
| #  @param tick µ±Ç°Ê±¼ä  | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def __Func_ServerMerge_DeleteFamily(index, tick):  | 
|     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex( index )  | 
|     #µÈ´ýGameServerɾ³ý¼Ò×å³É¹¦  | 
|     ProcessServerMergeDeleteFamilyID( curPlayer , tick )  | 
|     return  | 
|   | 
| ## C++µ÷Óã¬Íæ¼Ò¸ÄÃû(ºÏ·þ)  | 
| #  @param index Íæ¼ÒË÷Òý  | 
| #  @param tick µ±Ç°Ê±¼ä  | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def ServerMerge_ChangeNameCheck(index , tick):  | 
|     GameWorld.GetPsycoFunc(__Func_ServerMerge_ChangeNameCheck)(index , tick)  | 
|     return  | 
|   | 
| ## C++µ÷Óã¬Íæ¼Ò¸ÄÃû(ºÏ·þ)  | 
| #  @param index Íæ¼ÒË÷Òý  | 
| #  @param tick µ±Ç°Ê±¼ä  | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def __Func_ServerMerge_ChangeNameCheck(index, tick):  | 
|     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex( index )  | 
|     #µÈ´ýGameServer¼ì²éÍæ¼ÒÃû×ֺϷ¨ÐԳɹ¦  | 
|     ProcessServerMergeNameCheck( curPlayer , tick )  | 
|     return  | 
|   | 
| #---------------------------------------------------------------------  | 
| ## c++call Ñ»·´¦Àí״̬  | 
| #  @param tick µ±Ç°Ê±¼ä  | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def ProcessState(tick):  | 
|     GameWorld.GetPsycoFunc(__Func_ProcessState)(tick)  | 
|     return  | 
|   | 
| ## c++call Ñ»·´¦Àí״̬  | 
| #  @param tick µ±Ç°Ê±¼ä  | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def __Func_ProcessState(tick):  | 
|     #Íæ¼Ò״̬´¦Àí  | 
|     playerManager = GameWorld.GetGameWorld().GetPlayerManager()  | 
|     playerCount = playerManager.GetPlayerCount()  | 
|       | 
|     for i in range(0, playerCount):  | 
|         curPlayer = playerManager.GetPlayerByIndex(i)  | 
|           | 
|         if curPlayer.GetPlayerID() == 0:  | 
|             continue  | 
|           | 
|         if not curPlayer.GetInitOK():  | 
|             continue  | 
|           | 
|         ProcessPlayerState(curPlayer, tick)  | 
|       | 
|     return  | 
|   | 
| ## ¶Ôij¸öÍæ¼ÒË¢ÐÂ״̬  | 
| #  @param curPlayer µ±Ç°Íæ¼Ò  | 
| #  @param tick µ±Ç°Ê±¼ä  | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.          | 
| def ProcessPlayerState(curPlayer, tick):          | 
|     #Ë¢ÐÂÍæ¼ÒÇëÇó  | 
|     PlayerRequest.ProcessPlayerRequest(curPlayer, tick)  | 
|     #¶¨Ê±Æ÷ -> ±£´æÍæ¼ÒÊý¾Ý5Сʱ  | 
|     ProcessMapServer_PlayerSave(curPlayer, tick)  | 
|     #Ë¢ÐÂÍæ¼ÒÏìӦʱ¼ä·â°ü  | 
|     #ProcessPlayerOnlineReplayTime(curPlayer, tick)  | 
|       | 
|     return  | 
|   | 
| ## µÈ´ýGameServer¼ì²éÍæ¼ÒÃû×ֺϷ¨ÐԳɹ¦  | 
| #  @param curPlayer µ±Ç°Íæ¼Ò  | 
| #  @param tick µ±Ç°Ê±¼ä  | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def ProcessServerMergeNameCheck( curPlayer , tick ):  | 
|     #--------Åж¨¸ÃÍæ¼ÒÊÇ·ñÐèÒª¼ì²éÃû×Ö  | 
|     needCheckName = curPlayer.GetServerMergeNameCheck()  | 
|       | 
|     if not needCheckName:  | 
|         return  | 
|       | 
|     #-------Ö´Ðмì²éÃû×ÖÂß¼£¬²¢»Ø±¨³É¹¦:1,ʧ°Ü:0  | 
|     __DoLogic_ProcessServerMergeNameCheck( curPlayer , needCheckName , tick )  | 
|       | 
|     return  | 
|   | 
| ## Ö´ÐÐÍæ¼Ò¼ì²éÃû×ÖÂß¼£¬·µ»ØÖµÎª:ÊÇ·ñ¸ÄÃû³É¹¦ Âß¼ÀïÒѾ·µ»Ø  | 
| #  @param curPlayer µ±Ç°Íæ¼Ò  | 
| #  @param needCheckName ÐèÒª¼ì²éµÄÃû³Æ  | 
| #  @param tick µ±Ç°Ê±¼ä   | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def __DoLogic_ProcessServerMergeNameCheck( curPlayer , needCheckName , tick ):  | 
|     #C++¹ýÂ˿ոñ  | 
|     playerName = GameWorld.GetGameWorld().GetCharTrim( needCheckName )  | 
|       | 
|     result = CreateRole.CheckPlayerName( curPlayer , playerName )  | 
|       | 
|     if result:  | 
|         curPlayer.SendToRouterNameCheckResult( playerName, True )  | 
|     else:  | 
|         curPlayer.SendToRouterNameCheckResult( playerName, False )  | 
|           | 
|     return  | 
|   | 
| ## µÈ´ýGameServerɾ³ý¼Ò×å³É¹¦  | 
| #  @param curPlayer µ±Ç°Íæ¼Ò  | 
| #  @param tick µ±Ç°Ê±¼ä  | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def ProcessServerMergeDeleteFamilyID( curPlayer , tick ):  | 
|     curPlayer_DelFamilID = curPlayer.GetServerMergeDeleteFamilyLeaderID()  | 
|       | 
|     if not curPlayer_DelFamilID:  | 
|         return  | 
|       | 
|     #-----------ɾ³ý¼Ò×å  | 
|     __DoLogic_ServerMergeDeleteFamilyID( curPlayer , curPlayer_DelFamilID , tick  )  | 
|       | 
|     #»Ø±¨£¬É¾³ý³É¹¦  | 
|     curPlayer.SendToRouterDeleteFamilyOK()  | 
|     return  | 
|   | 
| ## ºÍ·þɾ³ý¼Ò×åID  | 
| #  @param curPlayer µ±Ç°Íæ¼Ò  | 
| #  @param curPlayer_DelFamilID É¾³ý¼Ò×åµÄ¼Ò×å³ÉÔ±ID  | 
| #  @param tick µ±Ç°Ê±¼ä  | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def __DoLogic_ServerMergeDeleteFamilyID( curPlayer , curPlayer_DelFamilID , tick ):  | 
|     familyManager = GameWorld.GetFamilyManager()  | 
|       | 
|       | 
|     #ÒòΪ:  | 
|     #¼ÙÈçÔÚGameServerÖиոս¨Á¢¼Ò×å, µ«ÊÇûÓдæÈëÊý¾Ý¿â  | 
|     #ÄÇôɾ³ý¼Ò×å¾ÍÎÞ·¨É¾³ý  | 
|     #ËùÒÔÿ¸öÍæ¼Òɾ³ý¼Ò×åµÄʱºò, ¶¼»áµ½GameServerÀ´ÔËÐÐÒ»´ÎÕâ¸ö½Å±¾  | 
|     #Åж¨, Èç¹ûÊǼÒ×峤, Ôòɾ³ý¼Ò×å   | 
|       | 
|     delFamily = None  | 
|     for i in range(familyManager.GetCount()):  | 
|         curFindFamily = familyManager.GetAt(i)  | 
|         if curFindFamily.GetLeaderID() == curPlayer_DelFamilID:  | 
|             delFamily = curFindFamily  | 
|             break  | 
|       | 
|       | 
|     #delFamily = familyManager.FindFamily( curPlayer_DelFamilID )  | 
|       | 
|     if not delFamily:  | 
|         #GameWorld.Log( 'ºÏ·þÍæ¼Ò = %sɾ³ý¼Ò×壬¼Ò×åÒѾ²»´æÔÚ = %s'%( curPlayer.GetName() , curPlayer_DelFamilID ) , curPlayer.GetPlayerID() )  | 
|         return  | 
|       | 
|     #Ö´ÐÐɾ³ýÂß¼  | 
|     PlayerFamily.DoLogic_DeleteFamily( curPlayer , delFamily , tick )  | 
|     return  | 
|   | 
| ## ¶¨Ê±Æ÷ -> ±£´æÍæ¼ÒÊý¾Ý5Сʱ  | 
| #  @param curPlayer µ±Ç°Íæ¼Ò  | 
| #  @param tick µ±Ç°Ê±¼ä  | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def ProcessMapServer_PlayerSave(curPlayer, tick):  | 
|     curPlayerSaveKey = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_Save)  | 
|     #µÚÒ»´Î¼Ç¼  | 
|     if not curPlayerSaveKey:  | 
|         curPlayer.SetDict(ChConfig.Def_PlayerKey_Save , tick)  | 
|         return  | 
|       | 
|     curServerPlayerCount = max( GameWorld.GetPlayerManager().GetActivePlayerCount() / 1000 , 1 )  | 
|     save_Tick = ChConfig.Def_PlayerKey_Save_Tick.get(curServerPlayerCount)  | 
|       | 
|     if not save_Tick:  | 
|         save_Tick = ChConfig.Def_PlayerKey_Save_Tick_Default  | 
|       | 
|     if tick - curPlayerSaveKey < save_Tick:  | 
|         return  | 
|       | 
|     curPlayer.SetDict(ChConfig.Def_PlayerKey_Save , tick)  | 
|     #5Сʱµ÷ÓÃÒ»´Î±£´æ  | 
|     curPlayer.MapServer_PlayerSave()  | 
|     return  | 
|   | 
| #Ë¢ÐÂÍæ¼ÒÏìӦʱ¼ä  | 
| #ÏÖÔÚÔÚÏßÏìӦʱ¼ä¸Ä¶¯, ·Åµ½RouteServer  | 
| #def ProcessPlayerOnlineReplayTime(curPlayer, tick):  | 
| #    if curPlayer.GetOnlineReplyTick() == 0:  | 
| #        #ÅжÏÈç¹ûÍæ¼Ò²»·¢ÔÚÏß»ØÓ¦°ü, ¾ÍÌßµôËû  | 
| #        if tick - curPlayer.GetLoginTick() >= ( ChConfig.Def_PlayerOnLineReply_ClientReply * 3 ):  | 
| #            GameWorld.Log("ûÓз¢À´ÔÚÏß»ØÓ¦·â°ü,ÌßÍæ¼ÒÏÂÏß logintick = %d"%curPlayer.GetLoginTick())  | 
| #            curPlayer.Kick(IPY_GameServer.disTimeError)  | 
| #          | 
| #        return True  | 
| #      | 
| #    if (tick - curPlayer.GetOnlineReplyTick()) >= ( ChConfig.Def_PlayerOnLineReply_Error_Tick ):  | 
| #        GameWorld.Log("Íæ¼ÒÏìӦʱ¼ä·â°ü´íÎó,ÎÞ·â°ü,ÌßÍæ¼ÒÏÂÏß")  | 
| #        curPlayer.Kick(IPY_GameServer.disTimeError)  | 
| #    return True   | 
| #      |