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