#!/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 #