#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#---------------------------------------------------------------------  
 | 
#  
 | 
#---------------------------------------------------------------------  
 | 
##@package PlayerQuery  
 | 
# GMÃüÁîµ÷ÓÃÆ÷  
 | 
#  
 | 
# @author eggxp  
 | 
# @date 2010-4-28  
 | 
# @version 1.3  
 | 
#  
 | 
# @change: "2010-09-09 16:40" panwei ÖضÁ½Å±¾ÐÞ¸Ä  
 | 
# @change: "2012-02-24 15:30" panwei PsycoÓÅ»¯  
 | 
# @change: "2012-05-16 15:00" jiang C++Ð޸ĽӿÚGameServer_QueryPlayerByIDºÍGameServer_QueryPlayerResult  
 | 
#---------------------------------------------------------------------  
 | 
"""Version = 2012-05-16 15:00"""  
 | 
#---------------------------------------------------------------------  
 | 
import IPY_GameWorld  
 | 
import GameWorld  
 | 
import RemoteQuery  
 | 
import ChConfig  
 | 
#---------------------------------------------------------------------  
 | 
#µ¼Èë  
 | 
GameWorld.ImportAll("Script\\Player\\" , "RemoteQuery")  
 | 
GameWorld.ImportAll("Script\\Player\\" , "")  
 | 
#---------------------------------------------------------------------  
 | 
## ÖØÐ¶ÁÈ¡ËùÓÐÎïÆ·  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def ReloadQuery(tick):  
 | 
    scriptPath = ChConfig.GetAppPath() + "Script\\Player\\RemoteQuery"  
 | 
    GameWorld.ReloadScript(scriptPath, "RemoteQuery")  
 | 
      
 | 
    scriptPath = ChConfig.GetAppPath() + "Script\\Player"  
 | 
    GameWorld.ReloadScript(scriptPath, "")  
 | 
    return  
 | 
#---------------------------------------------------------------------  
 | 
  
 | 
#//////////////////////////////////////////////////////////////  
 | 
#//06 02 ²éѯµØÍ¼Íæ¼Ò¾ßÌåλÖÃ#tagMQueryPlayerPos  
 | 
#tagMQueryPlayerPos       *   GettagMQueryPlayerPos();  
 | 
#  
 | 
#class   IPY_MQueryPlayerPos  
 | 
#{  
 | 
#public:  
 | 
#  
 | 
#    int      GetSrcPlayerID();  
 | 
#    //²éѯÀàÐÍ: ¸ù¾ÝÍæ¼ÒID/¼Ò×åID/æô³µID²éÕÒ  
 | 
#    int      GetQueryType();  
 | 
#  
 | 
#    int      GetQueryID();  
 | 
#  
 | 
#    int      GetCallNameLen();  
 | 
#    //size = CallNameLen  
 | 
#    char *      GetCallName();  
 | 
#  
 | 
#    int      GetCmdLen();  
 | 
#    //size = CmdLen  
 | 
#    char *      GetCmd();  
 | 
#};  
 | 
## 06 02 ²éѯµØÍ¼Íæ¼Ò¾ßÌåλÖà  
 | 
#  @param index Íæ¼ÒË÷Òý  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def GameServer_QueryPlayer(index, tick):  
 | 
    GameWorld.GetPsycoFunc(__Func_GameServer_QueryPlayer)(index, tick)  
 | 
    return  
 | 
  
 | 
## 06 02 ²éѯµØÍ¼Íæ¼Ò¾ßÌåλÖà  
 | 
#  @param index Íæ¼ÒË÷Òý  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def __Func_GameServer_QueryPlayer(index, tick):  
 | 
    sendPack = IPY_GameWorld.IPY_MQueryPlayerPos()  
 | 
    srcPlayerID = sendPack.GetSrcPlayerID()  
 | 
    query_ID = sendPack.GetQueryID()  
 | 
    query_Type = sendPack.GetQueryType()  
 | 
    packCallName = sendPack.GetCallName()  
 | 
    packCMDList = sendPack.GetCmd()  
 | 
      
 | 
    #³¢ÊÔת»»×Ö·û´® -> '[]' -> []  
 | 
    try:  
 | 
        packCMDList = eval(packCMDList)  
 | 
    except Exception:  
 | 
        pass  
 | 
      
 | 
    callFunc = GameWorld.GetExecFunc(RemoteQuery, "GY_Query_%s.%s"%(packCallName, "DoLogic"))  
 | 
      
 | 
    if not callFunc:  
 | 
        GameWorld.Log('###ÎÞ·¨²éÕÒGMÃüÁî = %s'%(packCallName))  
 | 
        return  
 | 
      
 | 
    result = callFunc(query_Type , query_ID , packCMDList , tick)  
 | 
    #ÔÚÏßGMÃüÁîÌí¼Ó»Ø¸´  
 | 
    if srcPlayerID != 0:  
 | 
        sendMsg = '%s'%result  
 | 
        GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(srcPlayerID, query_Type,   
 | 
                                          query_ID, packCallName, sendMsg, len(sendMsg))  
 | 
      
 | 
    return  
 | 
  
 | 
#//////////////////////////////////////////////////////////////  
 | 
#//06 03 ²éÑ¯Íæ¼ÒλÖýá¹û#tagMQueryPlayerPosResult  
 | 
#tagMQueryPlayerPosResult       *   GettagMQueryPlayerPosResult();  
 | 
#  
 | 
#class   IPY_MQueryPlayerPosResult  
 | 
#{  
 | 
#public:  
 | 
#  
 | 
#    int      GetQueryType();  
 | 
#  
 | 
#    int      GetQueryID();  
 | 
#  
 | 
#    int      GetCallNameLen();  
 | 
#    //size = CallNameLen  
 | 
#    char *      GetCallName();  
 | 
#  
 | 
#    int      GetResultLen();  
 | 
#    //size = ResultLen  
 | 
#    char *      GetResult();  
 | 
#};  
 | 
## 06 03 ²éÑ¯Íæ¼ÒλÖýá¹û  
 | 
#  @param index Íæ¼ÒË÷Òý  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def GameServer_QueryPlayerResult(index, tick):  
 | 
    GameWorld.GetPsycoFunc(__Func_GameServer_QueryPlayerResult)(index, tick)  
 | 
    return  
 | 
  
 | 
## 06 03 ²éÑ¯Íæ¼ÒλÖýá¹û  
 | 
#  @param index Íæ¼ÒË÷Òý  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def __Func_GameServer_QueryPlayerResult(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    sendPack = IPY_GameWorld.IPY_MQueryPlayerPosResult()  
 | 
    packCallName = sendPack.GetCallName()  
 | 
    packResult = sendPack.GetResult()  
 | 
      
 | 
    #bug: 10/14 Íæ¼ÒÒ»·¢ÇëÇó¾ÍÇл»µØÍ¼, Õâ¸öʱºòÎÞ·¨²éÑ¯Íæ¼Ò, µ¼Ö±¨´í  
 | 
    if not curPlayer:  
 | 
        GameWorld.Log('###QueryPlayerResult ÎÞ·¨²éÕÒÍæ¼Ò, »ØÓ¦Ê§°Ü = %s , %s'%( packCallName , packResult ))  
 | 
        return  
 | 
      
 | 
    #sendPack.GetQueryType()  
 | 
    #sendPack.GetQueryID()  
 | 
      
 | 
    callFunc = GameWorld.GetExecFunc(RemoteQuery, "GY_Query_%s.%s"%(packCallName, "DoResult"))  
 | 
      
 | 
    if not callFunc:  
 | 
        GameWorld.Log('###ÎÞ·¨²éÕÒGMÃüÁî = %s , DoResult Error'%(packCallName))  
 | 
        return  
 | 
      
 | 
    callFunc(curPlayer , packCallName , packResult , tick)  
 | 
      
 | 
    #GameWorld.Log("GameServer_QueryPlayerResult -> %s"%packResult)  
 | 
      
 | 
#    GameWorld.Log("Íæ¼ÒID=%s,ËùÔÚµØÍ¼=%s,×ø±ê(%s,%s)"%(sendPack.GetPlayerID(),sendPack.GetMapID(),  
 | 
#                                                               sendPack.GetPosX() ,sendPack.GetPosY()) , curPlayer.GetPlayerID())  
 | 
    return  
 |