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