| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #---------------------------------------------------------------------  | 
| #  | 
| #---------------------------------------------------------------------  | 
| ##@package PlayerRequest  | 
| # @todo: Íæ¼ÒÇëÇó´¦Àí  | 
| #  | 
| # @author: panwei  | 
| # @date 2010-12-10  | 
| # @version 1.1  | 
| #  | 
| # @note:   | 
| # @change: "2012-12-21 11:00" jiang Íæ¼Òʱ¼ä¼ä¸ôʹÓÃGameWorld.RefurbishPlayerTick()º¯Êý  | 
| #---------------------------------------------------------------------  | 
| """Version = 2012-12-21 11:00"""  | 
| #---------------------------------------------------------------------  | 
| import GameWorld  | 
| import ChConfig  | 
| import PyGameData  | 
| import IPY_GameServer  | 
| import NetPackCommon  | 
| import ChPyNetSendPack  | 
| #---------------------------------------------------------------------  | 
| ## ÅжÏÍæ¼ÒÊÇ·ñÓÐÏàͬµÄÇëÇó  | 
| #  @param curPlayer µ±Ç°Íæ¼Ò   | 
| #  @param curTagPlayer Ä¿±êÍæ¼Ò   | 
| #  @param requestType ¶ÔÏóÀàÐÍ  | 
| #  @return True or False  | 
| #  @remarks ÅжÏÍæ¼ÒÊÇ·ñÓÐÏàͬµÄÇëÇó  | 
| def CheckRequest(curPlayer, curTagPlayer, requestType):  | 
|     if curTagPlayer == None:  | 
|         return False  | 
|       | 
|     #¶ÔÏóID  | 
|     curTagID = curTagPlayer.GetPlayerID()  | 
|       | 
|     for i in range(0, curPlayer.GetRequestCount()):  | 
|         requestID = curPlayer.GetRequestID(i)  | 
|         type = curPlayer.GetRequestType(i)  | 
|         #---¼ì²éÇëÇóÊÇ·ñÒ»ÖÂ---  | 
|         if requestID == curTagID and type == requestType:  | 
|             #GameWorld.Log("curTagID = %dÇëÇó¼ì²éͨ¹ý"%(curTagID) , curPlayer.GetPlayerID())  | 
|             return True  | 
|           | 
|     #GameWorld.Log("Ë«·½ÇëÇóID²»Í¬»ò×é¶ÓÀàÐͲ»ÕýÈ· , ÇëÇóʧ°Ü" , curPlayer.GetPlayerID(), curTagID)  | 
|     return False  | 
| #---------------------------------------------------------------------  | 
| ## É¾³ýÖ¸¶¨ÇëÇó  | 
| #  @param curPlayer µ±Ç°Íæ¼Ò   | 
| #  @param curTagPlayer Ä¿±êÍæ¼Ò   | 
| #  @param requestType ¶ÔÏóÀàÐÍ  | 
| #  @return True or False  | 
| #  @remarks É¾³ýÖ¸¶¨ÇëÇó  | 
| def DelRequest(curPlayer, curTagPlayer, requestType):  | 
|     if curTagPlayer == None:  | 
|         return False  | 
|       | 
|     #¶ÔÏóID  | 
|     curTagID = curTagPlayer.GetPlayerID()  | 
|       | 
|     for i in range(0, curPlayer.GetRequestCount()):  | 
|         requestID = curPlayer.GetRequestID(i)  | 
|         type = curPlayer.GetRequestType(i)  | 
|         #---¼ì²éÇëÇóÊÇ·ñÒ»ÖÂ---  | 
|         if requestID == curTagID and type == requestType:  | 
|             #ɾ³ýÖ¸¶¨ÇëÇó  | 
|             curPlayer.DeleteRequest(i)  | 
|             return True  | 
|   | 
|     #GameWorld.Log("Ë«·½ÇëÇóID²»Í¬»ò×é¶ÓÀàÐͲ»ÕýÈ· , ÇëÇóʧ°Ü" , curPlayer.GetPlayerID(), curTagID)  | 
|     return False  | 
| #---------------------------------------------------------------------  | 
| ## Ë¢ÐÂÍæ¼ÒÇëÇó (²ÎÊý -> µ±Ç°Íæ¼Ò,µ±Ç°Ê±¼ä)  | 
| #  @param curPlayer µ±Ç°Íæ¼Ò  | 
| #  @param tick µ±Ç°Ê±¼ä  | 
| #  @return None  | 
| #  @remarks º¯ÊýÏêϸ˵Ã÷.  | 
| def ProcessPlayerRequest(curPlayer, tick):  | 
|     #ÏÂÏß²»±£´æ ¿É²»´¦Àí  | 
|     return   | 
|     if not GameWorld.RefurbishPlayerTick(curPlayer, ChConfig.TYPE_Player_Tick_Requestkey, tick):  | 
|         return  | 
|   | 
|     #Íæ¼ÒÇëÇó´ÎÊý  | 
|     requestCount = curPlayer.GetRequestCount()  | 
|     curIndex = 0  | 
|       | 
|     while curIndex < requestCount:    | 
|         #»ñµÃÇëÇó¿ªÊ¼Ê±¼ä  | 
|         requestTick = curPlayer.GetRequestTick(curIndex)  | 
|           | 
|         if requestTick == 0:  | 
|             curIndex += 1  | 
|             continue  | 
|           | 
|         #--ÑéÖ¤ÊÇ·ñ³¬¹ý×î´óʱ¼ä--  | 
|         requestMaxTick = curPlayer.GetRequestMaxTick(curIndex)  | 
|           | 
|         if (tick - requestTick) < requestMaxTick:  | 
|             curIndex += 1  | 
|             continue  | 
|           | 
|         curPlayer.DeleteRequest(curIndex)  | 
|         #GameWorld.Log("ÇëÇóÏìÓ¦ = %s³¬Ê±,״̬ÒÑÇå³ý"%(curIndex) , curPlayer.GetPlayerID())  | 
|         requestCount = curPlayer.GetRequestCount()  | 
|       | 
|     return  | 
| #---------------------------------------------------------------------  | 
|   | 
| # paramΪÇëÇóÕß ±»ÇëÇóÕß ÇëÇóÀàÐÍ£¬´æ´¢¸ñʽΪ{±»ÇëÇóÕß:[ÇëÇ󷢯ðÕߣ¬·¢ÆðÀàÐÍ]}  | 
| def PYAddRequest(curPlayer, curTagPlayerID, requestType):  | 
|     if curTagPlayerID not in PyGameData.g_playerRequests:  | 
|         PyGameData.g_playerRequests[curTagPlayerID] = {}  | 
|           | 
|     PyGameData.g_playerRequests[curTagPlayerID][(curPlayer.GetID(), requestType)] = [curPlayer.GetName(),   | 
|                                                                                      curPlayer.GetLV(),  | 
|                                                                                      curPlayer.GetOfficialRank()]  | 
|     return  | 
|   | 
|   | 
| # ¼ì²éÇëÇóÐÅÏ¢, curTagPlayerΪ»ØÓ¦ÇëÇóÕß  | 
| def PYCheckRequest(requestPlayeID, curTagPlayer, requestType):  | 
|     #¶ÔÏóID  | 
|     curTagID = curTagPlayer.GetPlayerID()  | 
|     if curTagID not in PyGameData.g_playerRequests:  | 
|         return False  | 
|       | 
|     if (requestPlayeID, requestType) not in PyGameData.g_playerRequests[curTagID]:  | 
|         return False  | 
|       | 
|     PyGameData.g_playerRequests[curTagID].pop((requestPlayeID, requestType))  | 
|     return True  | 
|   | 
|   | 
| # ÊÇ·ñÇëÇóÖÐ  | 
| def IsRequesting(playerID, tagID, requestType):  | 
|     if tagID not in PyGameData.g_playerRequests:  | 
|         return False  | 
|       | 
|     if (playerID, requestType) not in PyGameData.g_playerRequests[tagID]:  | 
|         return False  | 
|     return True  | 
|   | 
|   | 
| # Í¨Öª±»ÇëÇóÐÅÏ¢,ÔÝÇÒֻ֪ͨºÃÓÑ  | 
| def Sync_LoginRequest(curPlayer):  | 
|     playerID = curPlayer.GetPlayerID()  | 
|     if playerID not in PyGameData.g_playerRequests:  | 
|         return  | 
|       | 
|     for requestInfo, playerInfo in PyGameData.g_playerRequests[playerID].items():  | 
|         if requestInfo[1] != IPY_GameServer.reqFriend:  | 
|             continue  | 
|         askFriendPack = ChPyNetSendPack.tagGCFriendAskIfJoin()  | 
|         askFriendPack.AskID = requestInfo[0]  | 
|         askFriendPack.Name = playerInfo[0]  | 
|         askFriendPack.LV = playerInfo[1]  | 
|         askFriendPack.RealmLV = playerInfo[2]  | 
|         NetPackCommon.SendFakePack(curPlayer, askFriendPack)   | 
|       | 
|     return  |