#!/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(),
|
curPlayer.GetFace(),
|
curPlayer.GetFacePic()]
|
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]
|
askFriendPack.Face = playerInfo[3]
|
askFriendPack.FacePic = playerInfo[4]
|
NetPackCommon.SendFakePack(curPlayer, askFriendPack)
|
|
return
|