#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#---------------------------------------------------------------------
|
#
|
#---------------------------------------------------------------------
|
##@package PlayerQuery
|
# @todo: MapServerÇëÇó
|
#
|
# @author: panwei
|
# @date 2010-3-31
|
# @version 3.0
|
#
|
# @change: "2015-07-10 17:30" ljd ÅÅÐаñ¼ÓÍæ¼Òƽ̨²ÎÊýName2
|
# @change: "2015-07-28 13:50" xdh Ôö¼ÓÊØ»¤ÅÅÐаñ
|
# @change: "2015-09-18 19:30" hxp Ôö¼Ó¿ç·þ¹ã²¥×Ó·þ
|
# @change: "2015-10-28 00:00" hxp Ôö¼Ó¿ç·þPK
|
# @change: "2015-11-06 16:30" hxp Ôö¼ÓpyÀ®°È£¬Ö§³Ö¿ç·þ
|
# @change: "2015-11-18 10:30" hxp Ôö¼ÓÍõÕßÕù°Ô
|
# @change: "2016-02-29 17:30" hxp ¶ñħÊÔÁ¶ÅÅÐаñ
|
# @change: "2016-06-08 16:00" hxp ÓÀºãÕ½Ã˿Ƽ¼°æ±¾
|
# @change: "2016-06-16 11:00" hxp ³èÎï×ÜÕ½Á¦°ñ
|
# @change: "2016-06-30 21:30" hxp È¥³ý¾É°æ¿ª·þ»î¶¯Ïà¹Ø
|
# @change: "2016-08-22 18:00" hxp ÐéÄâ·ÖÏßÈËÊýͬ²½
|
# @change: "2016-08-29 23:30" hxp ºé»ÄÖ®Á¦
|
# @change: "2016-09-27 15:30" xdh ¼«ÏÞÌôÕ½
|
# @change: "2016-10-31 16:00" hxp ÆÁ±ÎÕ½Ã˿Ƽ¼, ¸ÄΪ´¿µØÍ¼´¦Àíģʽ
|
# @change: "2017-06-14 11:00" hxp »¹ÔÌØ»ÝÏû·Ñ·µÀû°ñ
|
# @change: "2017-06-22 15:00" hxp ¿ç·þºé»ÄÖ®Á¦
|
#---------------------------------------------------------------------
|
#"""Version = 2017-07-17 15:00"""
|
#---------------------------------------------------------------------
|
import IPY_GameServer
|
import GameWorld
|
import ChConfig
|
import GMCommon
|
import DirtyList
|
import PlayerBillboard
|
import PlayerExam
|
import PlayerControl
|
import PlayerRecall
|
import PlayerFamilyAction
|
import PlayerUniversalGameRec
|
import PlayerFamily
|
import GameWorldOpenServerCampaign
|
import ShareDefine
|
import GameDataRecord
|
import PlayerCompensation
|
import PlayerFB
|
import UpdatePlayerName
|
import PlayerFamilyBoss
|
import GameWorldBoss
|
import GameWorldFamilyWar
|
#import PlayerFamilyTech
|
import PlayerFamilyRedPacket
|
import PlayerFBHelpBattle
|
import PlayerHorsePetBoss
|
#import PlayerFamilyStore
|
import PlayerFamilySWRH
|
import GameWorldProcess
|
import PlayerLVAward
|
import PlayerDuJie
|
import PlayerTeam
|
import PlayerBourse
|
import PlayerXMZZ
|
import ChPlayer
|
import PyDataManager
|
import PyGameData
|
import PlayerTalk
|
import PlayerStore
|
import CrossRealmPlayer
|
import CrossRealmMsg
|
import CrossRealmPK
|
import ChPyNetSendPack
|
import NetPackCommon
|
import AuctionHouse
|
|
import time
|
import datetime
|
#---------------------------------------------------------------------
|
#È«¾Ö±äÁ¿
|
#---------------------------------------------------------------------
|
|
#---------------------------------------------------------------------
|
#Â߼ʵÏÖ
|
|
#---------------------------------------------------------------------
|
#//////////////////////////////////////////////////////////////
|
#//06 03 ¸ù¾ÝID²éÑ¯Íæ¼Ò#tagGFindPlayer
|
#tagGFindPlayer * GettagGFindPlayer();
|
#
|
#class IPY_GFindPlayer
|
#{
|
#public:
|
#
|
# int GetQueryType();
|
#
|
# int GetQueryID();
|
#
|
# int GetCallNameLen();
|
# //size = CallNameLen
|
# char * GetCallName();
|
#
|
# int GetCmdLen();
|
# //size = CmdLen
|
# char * GetCmd();
|
#};
|
#ÏìÓ¦_·¢ËÍÇëÇóµØÍ¼·þÎñÆ÷,²éÕÒ²éѯĿ±êµØÍ¼·þÎñÆ÷
|
## ÏìÓ¦µØÍ¼·þÎñÆ÷µÄÇëÇó£¬ÓÐЩ²Ù×÷µØÍ¼·þÎñÆ÷ÎÞ·¨´¦Àí
|
# @param index µ±Ç°ÇëÇóµÄÍæ¼ÒÔÚgameserverÖеÄindex
|
# @param tick µ±Ç°Ê±¼ä´Á
|
# @return ÎÞ·µ»ØÖµ
|
# @remarks º¯ÊýÏêϸ˵Ã÷£ºÏìÓ¦µØÍ¼·þÎñÆ÷µÄÇëÇó£¬ÓÐЩ²Ù×÷µØÍ¼·þÎñÆ÷ÎÞ·¨´¦Àí
|
# ÐèÒªÇëÇóÆäËûµØÍ¼·þÎñÆ÷´¦ÀíµÈ ÐèÒªGameServerͬ²½µÄ»òÐèÒªÇëÇóÏà¹ØÐÅÏ¢µÄ
|
def MapServer_QueryPlayer(index, tick):
|
GameWorld.GetPsycoFunc(__Func_MapServer_QueryPlayer)(index, tick)
|
return
|
|
#ÏìÓ¦_·¢ËÍÇëÇóµØÍ¼·þÎñÆ÷,²éÕÒ²éѯĿ±êµØÍ¼·þÎñÆ÷
|
## ÏìÓ¦µØÍ¼·þÎñÆ÷µÄÇëÇó£¬ÓÐЩ²Ù×÷µØÍ¼·þÎñÆ÷ÎÞ·¨´¦Àí
|
# @param index µ±Ç°ÇëÇóµÄÍæ¼ÒÔÚgameserverÖеÄindex
|
# @param tick µ±Ç°Ê±¼ä´Á
|
# @return ÎÞ·µ»ØÖµ
|
# @remarks º¯ÊýÏêϸ˵Ã÷£ºÏìÓ¦µØÍ¼·þÎñÆ÷µÄÇëÇó£¬ÓÐЩ²Ù×÷µØÍ¼·þÎñÆ÷ÎÞ·¨´¦Àí
|
# ÐèÒªÇëÇóÆäËûµØÍ¼·þÎñÆ÷´¦ÀíµÈ ÐèÒªGameServerͬ²½µÄ»òÐèÒªÇëÇóÏà¹ØÐÅÏ¢µÄ
|
def __Func_MapServer_QueryPlayer(index, tick):
|
playerManager = GameWorld.GetPlayerManager()
|
curPlayer = playerManager.GetPlayerByIndex(index)
|
#---------------»ñÈ¡·â°üÊý¾Ý
|
pack = IPY_GameServer.IPY_GFindPlayer()
|
#±»ÇëÇóµÄ¶ÔÏóµÄid
|
queryID = pack.GetQueryID()
|
#ÇëÇóÀàÐÍ
|
queryType = pack.GetQueryType()
|
#»Øµ÷º¯ÊýÃû
|
queryCallName = pack.GetCallName()
|
#ÇëÇóµÄÃüÁî ¸ù¾ÝÇëÇóÀàÐͺÍÇëÇóÃüÁîÀ´¾ö¶¨×îÖÕ²Ù×÷
|
sendCMD = pack.GetCmd()
|
#-----------------------------
|
tagMapID = 0
|
tagPlayer = None
|
|
if queryType == ChConfig.queryType_sqtPlayer:
|
#Íæ¼Ò²éѯ(ͨ¹ýID)
|
tagPlayer = playerManager.FindPlayerByID(queryID)
|
tagMapID = GameWorld.GetQueryPlayerMapID(tagPlayer)
|
|
elif queryType == ChConfig.queryType_sqtPlayerByAccID:
|
#Íæ¼Ò²éѯ(ͨ¹ýÕʺÅ)
|
tagPlayer = playerManager.FindPlayerByAccID(sendCMD)
|
tagMapID = GameWorld.GetQueryPlayerMapID(tagPlayer)
|
|
elif queryType == ChConfig.queryType_sqtPlayerByName:
|
#Íæ¼Ò²éѯ(ͨ¹ýÃû×Ö)
|
tagPlayer = playerManager.FindPlayerByName(sendCMD)
|
tagMapID = GameWorld.GetQueryPlayerMapID(tagPlayer)
|
|
elif queryType == ChConfig.queryType_sqtTruck:
|
#æô³µ²éѯ
|
curTruck = GameWorld.GetTruckMananger().FindTruckByTruckID(queryID)
|
tagMapID = __GetQueryTruckMapID(curTruck)
|
tagPlayer = curPlayer
|
|
elif queryType == ChConfig.queryType_sqtMission_2010031:
|
#¼Ò×åµÈ¼¶ÈËÊý²éѯ
|
tagMapID = GameWorld.GetQueryPlayerMapID(curPlayer)
|
sendCMD = '%s' % (__GetPlayerFamilyProperty(curPlayer))
|
tagPlayer = curPlayer
|
|
elif queryType == ChConfig.queryType_sqtDataServer_GMCommand:
|
#ÍÑ»ú¹¤¾ßÇëÇó²éѯ·µ»Ø
|
GMCommon.DoLogic_sqtDataServer_GMCommand(queryCallName , queryID , sendCMD)
|
return
|
|
elif queryType == ChConfig.queryType_FamilyBattle:
|
#±¨Ãû¼Ò×åÕù°ÔÕ½
|
# __DoLogic_JionFamilyBattle(curPlayer, tick)
|
GameWorld.ErrLog('²»ÄÜÊÖ¶¯±¨Ãû¼Ò×åÕù°ÔÕ½curPlayer=%s' % curPlayer)
|
return
|
|
#===============================================================================
|
# elif queryType == ChConfig.queryType_sqtSend_Family_Item:
|
# tagMapID = __GetQueryPlayerMapID(curPlayer , curPlayer)
|
# #¼Ò×åËÍÎï×ÊÇëÇó
|
# result = __DoLogic_Send_Family_Item(curPlayer , queryID , tick , sendCMD)
|
# sendCMD = '%s'%result
|
#===============================================================================
|
|
elif queryType == ChConfig.queryType_CheckNameHasDirty:
|
resultStr = __GetCheckDirtyResultStrList(queryID, sendCMD)
|
curPlayer.MapServer_QueryPlayerResult(queryType, queryID, queryCallName, resultStr, len(resultStr))
|
return
|
|
elif queryType == ChConfig.queryType_JionExam:
|
PlayerExam.MapServer_JoinAction(curPlayer, queryID, tick)
|
return
|
|
elif queryType == ChConfig.queryType_AddFamilyAction:
|
#¼Ò×åÐÐΪ¼Ç¼
|
PlayerFamilyAction.MapServer_PlayerFamilyActionNote(curPlayer, queryID, sendCMD, tick)
|
return
|
|
elif queryType == ChConfig.queryType_GmOpenFB:
|
#GM¿ªÆô¸±±¾
|
|
tagPlayer = curPlayer
|
infoList = sendCMD.split(',')
|
tagMapID = int(infoList[0])
|
|
elif queryType == ChConfig.queryType_FamilyArrest:
|
#¼Ò×åÐüÉÍÈÎÎñÊÇ·ñÍê³É
|
overState = PlayerFamilyAction.GetFamilyArrestOverState(curPlayer, int(sendCMD))
|
|
sendCMD = "%s" % [overState, int(sendCMD)]
|
curPlayer.MapServer_QueryPlayerResult(queryType, queryID, queryCallName, sendCMD, len(sendCMD))
|
return
|
|
elif queryType == ChConfig.queryType_DelFamilyAction:
|
#Çå³ýÉêÇë¼ÓÈë¼Ò×åµÄÐÐΪÊý¾Ý
|
familyId = int(sendCMD)
|
PlayerFamilyAction.ClearFamilyAction(familyId, queryID, playerID=curPlayer.GetID())
|
return
|
|
elif queryType == ChConfig.queryType_RequestIsFamily:
|
#²éѯÊÇ·ñ»¹ÔÚÉêÇëµÄ°ï»áÉóºËÁбíÖÐ
|
tagPlayer = playerManager.FindPlayerByID(queryID)
|
tagMapID = GameWorld.GetQueryPlayerMapID(tagPlayer)
|
sendCMD = '%s' % PlayerFamily.QueryRequestIsFamily(curPlayer, eval(sendCMD))
|
|
elif queryType == ChConfig.queryType_NoteTruckOwnerInfo:
|
#ÇëÇó²éÕÒÍæ¼ÒïÚ³µ²¢¼Ç¼²¿·ÖÊôÐÔ
|
tagPlayer = playerManager.FindPlayerByID(queryID)
|
curPlayerTruck = GameWorld.GetTruckMananger().FindTruckByOwner(tagPlayer.GetPlayerID())
|
if not curPlayerTruck:
|
#ûÓÐïÚ³µ
|
return
|
|
tagMapID = __GetQueryTruckMapID(curPlayerTruck)
|
truckID = curPlayerTruck.GetTruckID()
|
sendCMD = '%s' % ([truckID] + eval(sendCMD))
|
|
elif queryType == ChConfig.queryType_FamilyImpeach:
|
#Íæ¼ÒʹÓõ¯ÛÀ·û
|
PlayerFamily.PlayerExecLeaderImpeach(curPlayer, tick)
|
return
|
|
#½ÇÉ«¸ÄÃû
|
elif queryType == ChConfig.queryType_UpdatePlayerName:
|
UpdatePlayerName.MapServer_UpdatePlayerName(curPlayer, sendCMD, tick)
|
return
|
|
# ½øÈ븱±¾
|
elif queryType == ChConfig.queryType_EnterFB:
|
PlayerFB.EnterFBLine(curPlayer, queryCallName, sendCMD, tick)
|
return
|
|
# ²éѯµØÍ¼NPCÐÅÏ¢
|
elif queryType == ChConfig.queryType_NPCInfo:
|
__QueryMapNPCInfo(curPlayer, queryCallName, sendCMD)
|
return
|
# ²éѯµØÍ¼NPCÊýÁ¿
|
elif queryType == ChConfig.queryType_NPCCnt:
|
__QueryMapNPCCntInfo(curPlayer, queryCallName, sendCMD, tick)
|
return
|
else:
|
GameWorld.ErrLog('unKnow queryType = %s' % (queryType))
|
|
if not tagMapID:
|
#ÎÞ·¨²éÕÒµ½Ä¿±êËùÔÚµØÍ¼,´ò»ØÇëÇó
|
curPlayer.MapServer_QueryPlayerResult(queryType, queryID, queryCallName, '', 0)
|
return
|
|
#·¢ËÍÇëÇóÖÁÄ¿±êµØÍ¼
|
playerManager.MapServer_QueryPlayer(curPlayer.GetPlayerID(), queryType, queryID, tagMapID,
|
queryCallName, sendCMD, len(sendCMD), tagPlayer.GetRouteServerIndex())
|
return
|
|
## ²éѯĿ±êµØÍ¼NPCÐÅÏ¢
|
# @param curPlayer: ÇëÇóÍæ¼Ò
|
# @param queryCallName: ÇëÇ󻨵÷Ãû
|
# @param sendCMD: ÇëÇóµÄÃüÁî ¸ù¾ÝÇëÇóÀàÐͺÍÇëÇóÃüÁîÀ´¾ö¶¨×îÖÕ²Ù×÷
|
# @return None
|
def __QueryMapNPCInfo(curPlayer, queryCallName, sendCMD):
|
playerManager = GameWorld.GetPlayerManager()
|
try:
|
mapInfo = eval(sendCMD)
|
except BaseException:
|
GameWorld.ErrLog("__QueryMapNPCInfo() sendCMD=%s error" % sendCMD)
|
return
|
|
if not mapInfo:
|
return
|
|
tagMapID = mapInfo[0]
|
playerManager.MapServer_QueryPlayer(curPlayer.GetPlayerID(), ChConfig.queryType_NPCInfo, 0, tagMapID,
|
queryCallName, sendCMD, len(sendCMD), curPlayer.GetRouteServerIndex())
|
return
|
|
## ²éѯĿ±êµØÍ¼NPCÊýÁ¿
|
# @param curPlayer: ÇëÇóÍæ¼Ò
|
# @param queryCallName: ÇëÇ󻨵÷Ãû
|
# @param sendCMD: ÇëÇóµÄÃüÁî ¸ù¾ÝÇëÇóÀàÐͺÍÇëÇóÃüÁîÀ´¾ö¶¨×îÖÕ²Ù×÷
|
# @return None
|
def __QueryMapNPCCntInfo(curPlayer, queryCallName, sendCMD, tick):
|
playerManager = GameWorld.GetPlayerManager()
|
try:
|
mapInfo = eval(sendCMD)
|
except BaseException:
|
GameWorld.ErrLog("__QueryMapNPCCntInfo() sendCMD=%s error" % sendCMD)
|
return
|
|
if not mapInfo:
|
return
|
|
tagMapID = mapInfo[0]
|
npcIDList = mapInfo[2]
|
# ±¾·þ²éѯ¿ç·þµØÍ¼¹ÖÎïÊý
|
if tagMapID in ChConfig.Def_CrossMapIDList and not GameWorld.IsCrossServer():
|
__QueryCrossServerMapNPCCntInfo(curPlayer, tagMapID, npcIDList, tick)
|
return
|
playerManager.MapServer_QueryPlayer(curPlayer.GetPlayerID(), ChConfig.queryType_NPCCnt, 0, tagMapID,
|
queryCallName, sendCMD, len(sendCMD), curPlayer.GetRouteServerIndex())
|
return
|
|
def __QueryCrossServerMapNPCCntInfo(curPlayer, mapID, npcIDList, tick):
|
## ²éѯ¿ç·þµØÍ¼NPC¸öÊýÐÅÏ¢
|
if mapID in PyGameData.g_crossMapNPCInfo:
|
infoTick, mapNPCInfoDict = PyGameData.g_crossMapNPCInfo[mapID]
|
if tick - infoTick < 60 * 1000:
|
#GameWorld.DebugLog("Ö±½Óͬ²½±¾·þ»º´æµÄ¿ç·þµØÍ¼NPCÐÅÏ¢")
|
SyncPlayerCrossMapNPCInfo(curPlayer, mapID, npcIDList, mapNPCInfoDict)
|
return
|
|
# ±¾·þ»º´æ³¬Ê±£¬·¢ËÍ¿ç·þ·þÎñÆ÷²éѯ
|
playerID = curPlayer.GetPlayerID()
|
CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_QueryNPCInfo, {"PlayerID":playerID, "MapID":mapID, "NPCIDList":npcIDList})
|
return
|
|
def ClientServerMsg_QueryNPCInfo(serverGroupID, msgData):
|
## ÊÕµ½×Ó·þÇëÇó²é¿´¿ç·þµØÍ¼NPC¸öÊýÐÅÏ¢
|
|
mapID = msgData["MapID"]
|
zoneIpyData = CrossRealmPlayer.GetServerCrossZoneMapIpyData(mapID, serverGroupID)
|
if not zoneIpyData:
|
return
|
realMapID = zoneIpyData.GetMapID()
|
copyMapID = zoneIpyData.GetCopyMapID()
|
|
sendCMD = {"ServerGroupID":serverGroupID, "CopyMapID":copyMapID}
|
sendCMD.update(msgData)
|
sendCMD = str(sendCMD)
|
GameWorld.GetPlayerManager().MapServer_QueryPlayer(0, 0, 0, realMapID, "NPCCntCross", sendCMD, len(sendCMD))
|
return
|
|
def CrossServerMsg_NPCInfoRet(msgData, tick):
|
## ÊÕµ½¿ç·þ·þÎñÆ÷ͬ²½µÄµØÍ¼NPCÐÅÏ¢
|
|
mapID = msgData["MapID"]
|
playerID = msgData["PlayerID"]
|
npcIDList = msgData["NPCIDList"]
|
mapNPCInfoDict = msgData["Result"]
|
PyGameData.g_crossMapNPCInfo[mapID] = [tick, mapNPCInfoDict]
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
|
if curPlayer:
|
SyncPlayerCrossMapNPCInfo(curPlayer, mapID, npcIDList, mapNPCInfoDict)
|
|
return
|
|
def SyncPlayerCrossMapNPCInfo(curPlayer, mapID, npcIDList, mapNPCInfoDict):
|
## ͬ²½¸øÍæ¼Ò¿ç·þµØÍ¼NPCÐÅÏ¢
|
|
npcInfoPack = ChPyNetSendPack.tagMCNPCCntList()
|
npcInfoPack.Clear()
|
npcInfoPack.MapID = mapID
|
npcInfoPack.NPCInfoList = []
|
|
for npcID in npcIDList:
|
npcInfo = ChPyNetSendPack.tagMCNPCCntInfo()
|
npcInfo.Clear()
|
npcInfo.NPCID = npcID
|
npcInfo.Cnt = mapNPCInfoDict.get(npcID, 0)
|
npcInfoPack.NPCInfoList.append(npcInfo)
|
|
npcInfoPack.NPCInfoCnt = len(npcInfoPack.NPCInfoList)
|
NetPackCommon.SendFakePack(curPlayer, npcInfoPack)
|
return
|
|
|
## »ñµÃ¼Ò×åÊôÐÔ£¨µÈ¼¶£¬ÈËÊý£©»ñµÃ×Ô¼ºËùÔÚ¼Ò×åµÄÊôÐÔ
|
# @param curPlayer ÇëÇóµÄÍæ¼Ò
|
# @return ³É¹¦Ôò·µ»ØÏàÓ¦µÄÐÅÏ¢£¬¼Ò×åµÈ¼¶ºÍ³ÉÔ±ÊýÁ¿£¬Èç¹û²»ÔÚ¼Ò×åÖÐÔò·µ»ØNone
|
# @remarks º¯ÊýÏêϸ˵Ã÷£º#»ñµÃ¼Ò×åÊôÐÔ£¨µÈ¼¶£¬ÈËÊý£©
|
def __GetPlayerFamilyProperty(curPlayer):
|
curFamily = curPlayer.GetFamily()
|
if not curFamily:
|
GameWorld.Log("###´ËÍæ¼Ò%sûÓмÒ×å" % curPlayer.GetPlayerID())
|
return 0
|
#¼Ò×åµÈ¼¶
|
familyLV = curFamily.GetLV()
|
#¼Ò×åÈËÊý
|
familyCount = curFamily.GetCount()
|
|
return [familyLV, familyCount]
|
|
|
## »ñµÃ²éѯµÄïÚ³µËùÔڵĵØÍ¼ID
|
# @param curTruck ±»²éѯµÄïÚ³µ
|
# @return Èç¹ûÓÐïÚ³µÔò·µ»ØïÚ³µµØÍ¼ID ·ñÔò·µ»Ø0
|
# @remarks º¯ÊýÏêϸ˵Ã÷£º##»ñµÃ²éѯµÄïÚ³µËùÔڵĵØÍ¼ID
|
def __GetQueryTruckMapID(curTruck):
|
if not curTruck:
|
return 0
|
|
return curTruck.GetMapID()
|
|
#---------------------------------------------------------------------
|
|
#//////////////////////////////////////////////////////////////
|
#//06 04 Íæ¼ÒλÖÃÐÅÏ¢#tagGMapPlayerPos
|
#tagGMapPlayerPos * GettagGMapPlayerPos();
|
#
|
#class IPY_GMapPlayerPos
|
#{
|
#public:
|
#
|
# int GetSrcPlayerID();
|
#
|
# int GetQueryType();
|
#
|
# int GetQueryID();
|
#
|
# int GetCallNameLen();
|
# //size = CallNameLen
|
# char * GetCallName();
|
#
|
# int GetResultNameLen();
|
# //size = ResultNameLen
|
# char * GetResultName();
|
#};
|
g_callCostTime = {} #{callname:[cnt,costtime,maxtime]}
|
g_lastPrintCostTime = 0
|
## »ØÓ¦_·¢ËÍÇëÇó·þÎñÆ÷²éѯ½á¹û
|
# @param index ÇëÇóµÄÍæ¼ÒÔÚgameServerÖеÄindex
|
# @param tick µ±Ç°µÄtick
|
# @return ÎÞ·µ»ØÖµ
|
# @remarks º¯ÊýÏêϸ˵Ã÷£º#»ØÓ¦_·¢ËÍÇëÇó·þÎñÆ÷²éѯ½á¹û
|
# Èç¹ûMapServer->GameServer²éѯ½á¹ûÐèÒª»ØÓ¦ÔÇëÇóÕßµÄ
|
# ÐèÒªÔÚÕâÀïÌí¼ÓÏàÓ¦µÄ»Øµ÷
|
def MapServer_QueryPlayerResult(index, tick):
|
global g_lastPrintCostTime
|
global g_callCostTime
|
startTime = time.time()
|
pack = IPY_GameServer.IPY_GMapPlayerPos()
|
callName = pack.GetCallName()
|
|
GameWorld.GetPsycoFunc(__Func_MapServer_QueryPlayerResult)(index, tick)
|
|
costTime = time.time() - startTime
|
if callName in g_callCostTime:
|
g_callCostTime[callName][0] += 1
|
g_callCostTime[callName][1] +=costTime
|
if costTime > g_callCostTime[callName][2]:
|
g_callCostTime[callName][2] = costTime
|
else:
|
g_callCostTime[callName] = [1, costTime, costTime]
|
|
if not g_lastPrintCostTime:
|
g_lastPrintCostTime = tick
|
if tick - g_lastPrintCostTime > 120000:
|
GameWorld.Log(' QueryPlayerResultºÄʱ g_callCostTime=%s'%g_callCostTime)
|
g_lastPrintCostTime = tick
|
return
|
|
## »ØÓ¦_·¢ËÍÇëÇó·þÎñÆ÷²éѯ½á¹û
|
# @param index ÇëÇóµÄÍæ¼ÒÔÚgameServerÖеÄindex
|
# @param tick µ±Ç°µÄtick
|
# @return ÎÞ·µ»ØÖµ
|
# @remarks º¯ÊýÏêϸ˵Ã÷£º#»ØÓ¦_·¢ËÍÇëÇó·þÎñÆ÷²éѯ½á¹û
|
# Èç¹ûMapServer->GameServer²éѯ½á¹ûÐèÒª»ØÓ¦ÔÇëÇóÕßµÄ
|
# ÐèÒªÔÚÕâÀïÌí¼ÓÏàÓ¦µÄ»Øµ÷
|
def __Func_MapServer_QueryPlayerResult(index, tick):
|
pack = IPY_GameServer.IPY_GMapPlayerPos()
|
srcPlayerID = pack.GetSrcPlayerID()
|
callName = pack.GetCallName()
|
resultName = pack.GetResultName() #[queryid, ÈËÆøÖµ£¬ ÎïÆ·ID]
|
|
if callName == "SendMail":
|
title, content, getDays, playerIDList, addItemList, gold, goldPaper, silver, detail, moneySource = eval(resultName)
|
limitTime = str(GameWorld.GetDatetimeByDiffDays(getDays))
|
limitTime = limitTime.split(".")[0]
|
PlayerCompensation.SendPersonalItemMail(title, content, limitTime, playerIDList, addItemList, gold, goldPaper, silver, detail=detail, moneySource=moneySource)
|
return
|
|
if callName == "SendMailBatch":
|
PlayerCompensation.SendPersonalItemMailBatch(eval(resultName))
|
return
|
|
if callName == "SendMsgToCrossServer":
|
msgType, dataMsg = eval(resultName)
|
CrossRealmMsg.SendMsgToCrossServer(msgType, dataMsg)
|
return
|
|
if callName == "SendMsgToClientServer":
|
msgType, dataMsg, serverGroupIDList = eval(resultName)
|
CrossRealmMsg.SendMsgToClientServer(msgType, dataMsg, serverGroupIDList)
|
return
|
|
if callName == "SetCrossPlayerAttrValue":
|
CrossRealmPlayer.SetCrossPlayerAttrValue(eval(resultName), tick)
|
return
|
|
if callName == 'CrossNotify':
|
serverGroupIDList, crossNotifyList = eval(resultName)
|
PlayerControl.CrossNotify(serverGroupIDList, crossNotifyList)
|
return
|
|
if callName == "CommMapServerInitOK":
|
dataMapID, lineID, realMapID, copyMapID = eval(resultName)
|
PyGameData.g_commMapLineInfo[(dataMapID, lineID)] = (realMapID, copyMapID)
|
GameWorld.Log("CommMapServerInitOK dataMapID=%s,lineID=%s,realMapID=%s,copyMapID=%s" % (dataMapID, lineID, realMapID, copyMapID))
|
return
|
|
if callName == "UpdateBillboard": #µØÍ¼·þÎñÆ÷¸üÐÂÅÅÐаñ
|
PlayerBillboard.MapServer_UpdateBillboard(eval(resultName), tick)
|
return
|
|
if callName == 'PyAddFamilyInfoValue': #µØÍ¼·þÎñÆ÷Ôö¼ÓÕ½ÃËÐÅÏ¢Öµ
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
if not curPlayer:
|
return
|
PlayerFamily.MapServer_PyAddFamilyInfoValue(curPlayer, eval(resultName))
|
return
|
|
if callName == 'UpdateTotalRechargeBillboard': #µØÍ¼·þÎñÆ÷¸üÐÂÍæ¼Ò³äÖµ×ÜÊýÅÅÐаñ
|
PlayerBillboard.MapServer_UpdateTotalRechargeBillboard(eval(resultName))
|
return
|
|
if callName == 'ExitExam': #µØÍ¼·þÎñÆ÷Íæ¼ÒÍ˳ö´ðÌâ
|
PlayerExam.MapServer_ExitAction(srcPlayerID)
|
return
|
|
if callName == 'TeamNotify':
|
#¶ÓÎé֪ͨ
|
teamID = pack.GetQueryID()
|
msg, msgList = eval(resultName)
|
|
PlayerControl.TeamNotify(teamID, msg, msgList)
|
return
|
|
if callName == 'ReveiveRecallAward':
|
#Õٻؽ±ÀøÁìÈ¡Çé¿ö
|
PlayerRecall.ReveiveRecallAwardResult(srcPlayerID, resultName)
|
return
|
|
if callName == "NotifyTruckDestroy":
|
killTruckPlayerName, exp, zhenQi, prestige, moneyCnt, moneyType = eval(resultName)
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
if not curPlayer:
|
return
|
|
if killTruckPlayerName:
|
#Truck_hgg_492527 ÄúµÄïÚ³µ±»XXXX´ò½Ù,ËðʧXXX¾Ñé,XXX½ð±Ò,xxxħ»ê
|
PlayerControl.NotifyCode(curPlayer, "Truck_hgg_492527", [killTruckPlayerName, exp,
|
moneyCnt, zhenQi])
|
else:
|
#Truck_hgg_887936 ÄúµÄïÚ³µ²ÒÔâÏ´½Ù,ËðʧXXX¾Ñé,XXX½ð±Ò,xxxħ»ê
|
PlayerControl.NotifyCode(curPlayer, "Truck_hgg_887936", [exp, moneyCnt, zhenQi])
|
return
|
|
if callName == "GMToolResult":
|
# gmÃüÁî»Ø¸´ÐÅÏ¢
|
result = eval(resultName)
|
gmResult = GMCommon.Def_Success
|
if len(result) > 3:
|
gmResult = result[3]
|
|
gmCmdDict = {GMCommon.Def_GMKey_Type:result[2]}
|
resultName = GMCommon.GMCommandResult(result[0], gmCmdDict, gmResult, result[1])
|
return
|
|
# ÓÃÓڼǼȫ·þ³äÖµµÄµãȯÊý
|
if callName == "RecordChangeCoin":
|
GameDataRecord.ChangeCoinCnt(eval(resultName))
|
return
|
|
#¿ç·þÆ¥ÅäPKÕ½¶·½áËã
|
if callName == "CrossPKOver":
|
CrossRealmPK.MapServer_CrossPKOver(eval(resultName), tick)
|
return
|
|
#¿ç·þÆ¥Åä·¿¼ä¿ªÆô
|
if callName == "CrossPKRoomOpen":
|
CrossRealmPK.MapServer_CrossPKRoomOpen(eval(resultName), tick)
|
return
|
|
#¿ç·þÆ¥ÅäPKÈ¡ÏûÆ¥Åä
|
if callName == "CrossRealmPKCancel":
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
if not curPlayer:
|
return
|
CrossRealmPK.SendCancelCrossRealmPKMatch(curPlayer, resultName)
|
return
|
|
#¿ç·þPKÇëÇóÍæ¼Òµ±Ç°ÅÅÃû
|
if callName == "CrossPKSeasonOrder":
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
if not curPlayer:
|
return
|
CrossRealmPK.MapServer_QueryCrossPKSeasonOrder(curPlayer, eval(resultName))
|
return
|
|
#¿ç·þ×¢²á½á¹û
|
if callName == "CrossRealmReg":
|
CrossRealmPlayer.OnCrossRealmRegOK(srcPlayerID, eval(resultName), tick)
|
return
|
|
#pyÀ®°ÈÁÄÌì
|
if callName == 'PYSpeaker':
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
if not curPlayer:
|
return
|
PlayerTalk.ChatPYSpeaker(curPlayer, eval(resultName))
|
return
|
|
#ˢб¾·þ½ÇÉ«ÐÅÏ¢
|
if callName == 'RefreshMainServerRole':
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
if not curPlayer:
|
return
|
ChPlayer.DoRefreshMainServerRole(curPlayer)
|
return
|
|
# Õ½ÃËÁªÈü
|
if callName =="FamilyWarOver":
|
GameWorldFamilyWar.MapServer_FamilyWarOver(eval(resultName))
|
return
|
|
# ɾ³ýͨÓÃÍæ¼ÒRecÊý¾Ý
|
if callName == "AddUniversalGameRec":
|
curPlayer = None if not srcPlayerID else GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
recType, valueList, strValueList, notifyType, isSort = eval(resultName)
|
GameWorld.Log("AddUniversalGameRec recType=%s, valueList=%s, strValueList=%s, notifyType=%s, isSort=%s"
|
% (recType, valueList, strValueList, notifyType, isSort))
|
PlayerUniversalGameRec.MapServer_UniversalGameRec(curPlayer, recType, valueList, strValueList, notifyType, isSort)
|
return
|
|
# ɾ³ýͨÓÃÍæ¼ÒRecÊý¾Ý
|
if callName == "DelUniversalGameRec":
|
recType, notifyType = eval(resultName)
|
curPlayer = None if not srcPlayerID else GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
if recType in ShareDefine.Def_UniversalGameRecTypeList:
|
GameWorld.Log("DelUniversalGameRec recType=%s" % recType)
|
GameWorld.GetUniversalRecMgr().Delete(recType)
|
if notifyType == 1:
|
PlayerUniversalGameRec.SendUniversalGameRecInfo(curPlayer, recType)
|
elif notifyType == 2:
|
PlayerUniversalGameRec.SendUniversalGameRecInfo(None, recType)
|
|
return
|
|
# Õ½Ã˸±±¾boss¿ªÊ¼¡¢±»»÷ɱ
|
if callName =="FamilyBossFBState":
|
PlayerFamilyBoss.FamilyBossOnKilled(eval(resultName), tick)
|
return
|
|
|
# »÷ɱbossµôÂäºÃÎïÆ·
|
if callName =="BossDropGoodItem":
|
GameWorldBoss.OnKillBossDropGoodItem(eval(resultName), tick)
|
return
|
|
# »÷ɱÊÀ½çboss
|
if callName =="KillGameWorldBoss":
|
GameWorldBoss.DoGameWorldBossOnKilled(eval(resultName), tick)
|
return
|
|
# ÊÀ½çboss״̬
|
if callName =="GameWorldBossState":
|
GameWorldBoss.OnGameWorldBossStateChange(eval(resultName), tick)
|
return
|
|
# ÏÉÃ˹éÊôbossÐÅϢͬ²½
|
if callName =="FamilyOwnerBossInfo":
|
GameWorldBoss.MapServer_FamilyOwnerBossInfo(eval(resultName))
|
return
|
|
# Æï³èÕù¶áÉËÑªÍæ¼Òͬ²½
|
if callName =="HorsePetRobBossHurtPlayer":
|
GameWorldBoss.MapServer_HorsePetRobBossHurtPlayer(eval(resultName))
|
return
|
|
# È«¾ÖµôÂäCD
|
if callName =="GlobalDropCD":
|
GameWorldProcess.UpdGlobalDropCD(eval(resultName))
|
return
|
# È«¾Ö»÷ɱÊý»»ËãµôÂä¸ÅÂÊ
|
if callName =="GlobalDropRate":
|
GameWorldProcess.UpdGlobalDropRate(eval(resultName))
|
return
|
# È«¾Ö»÷ɱÊýͳ¼Æ
|
if callName =="GlobalKillCount":
|
GameWorldProcess.UpdGlobalKillCount(eval(resultName))
|
return
|
|
# ÐÂÊÖÖ¸µ¼Ô±ÌìÊý
|
if callName =="FreshmanGuiderDay":
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
if not curPlayer:
|
return
|
|
guiderDay = eval(resultName)[0]
|
PlayerControl.SetFreshmanGuiderDay(curPlayer, guiderDay)
|
return
|
|
#Éú³ÉÏÉÃ˺ì°ü
|
if callName == "MapServer_CreatRedPacket":
|
PlayerFamilyRedPacket.MapServer_CreatRedPacket(eval(resultName))
|
return
|
#·¢ÏÉÃ˺ì°ü
|
if callName == 'SendFamilyRedPacket':
|
PlayerFamilyRedPacket.SendFamilyRedPacket(eval(resultName))
|
return
|
#ÇÀÏÉÃ˺ì°ü
|
if callName == 'GrabFamilyRedPacket':
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
if not curPlayer:
|
return
|
PlayerFamilyRedPacket.DoGrabFamilyRedPacket(curPlayer, eval(resultName))
|
return
|
#¾³½ç¶É½ÙÇëÇóÃËÓÑ»¤·¨
|
if callName == 'GetMemberForHelpDujie':
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
if not curPlayer:
|
return
|
PlayerDuJie.GetMemberForHelpDujie(curPlayer, eval(resultName))
|
return
|
#¾³½ç¶É½Ù¸±±¾½áÊø
|
if callName =="DuJieFBOver":
|
PlayerDuJie.DoDuJieFBOver(eval(resultName))
|
return
|
#¾³½çÌáÉýÈ«·þbuff
|
if callName =="RealmUpAddBuff":
|
PlayerDuJie.DoRealmUpAddBuff(resultName)
|
return
|
|
# ×é¶Ó¸±±¾¶Ó³¤ÇëÇó½øÈëѯÎʽá¹û
|
if callName == "EnterFBTeamAsk":
|
if not resultName:
|
return
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
if not curPlayer:
|
return
|
PlayerTeam.OnEnterFBTeamAskResult(curPlayer, eval(resultName), tick)
|
return
|
|
# ½»Ò×Ëù¸øÍêÍæ¼ÒÊÕÒæ
|
if callName == "GivePlayerBourseGainsResult":
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
if not curPlayer:
|
return
|
PlayerBourse.OnGivePlayerBourseGainsResult(curPlayer, eval(resultName))
|
return
|
|
# ÅÄÂôÐÐ
|
if callName == "AuctionHouse":
|
curPlayer = None
|
if srcPlayerID:
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
if not curPlayer:
|
return
|
AuctionHouse.MapServer_AuctionHouseLogic(curPlayer, eval(resultName), tick)
|
return
|
|
if callName == "TeamMemFuncData":
|
PlayerTeam.MapServer_TeamMemFuncData(srcPlayerID, eval(resultName))
|
return
|
|
#·âħ̳½áÊø
|
if callName == "SealDemonOver":
|
playerID, lineID, rank = eval(resultName)
|
PyDataManager.GetSealDemonRecordManager().UpdateSealDemonRecord(playerID,lineID,rank)
|
return
|
|
#²éѯ¸±±¾¹¦ÄÜÏß·ÈËÊý
|
if callName == "FBLinePlayerCnt":
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
if not curPlayer:
|
return
|
ChPlayer.QueryFBLinePlayerCntResult(curPlayer, eval(resultName))
|
return
|
|
#¸ü¸ÄÏÉÃËÃû×Ö
|
if callName == "UpdateFamilyName":
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
if not curPlayer:
|
return
|
PlayerFamily.RenameFamily(curPlayer, resultName)
|
return
|
|
#ÏÉħ֮ÕùPK½áËã
|
if callName == "XMZZPKOver":
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
if not curPlayer:
|
return
|
vsName, isWin, isEnd, HPPer = eval(resultName)
|
PlayerXMZZ.XMZZPKOver(curPlayer, vsName, isWin, isEnd, HPPer)
|
return
|
|
#ÏÉħ֮ÕùÆ¥Åä¶ÔÊÖ
|
if callName == "XMZZStartFight":
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
if not curPlayer:
|
return
|
ret = PlayerXMZZ.XMZZStartFight(curPlayer, eval(resultName))
|
if ret == None:
|
return
|
resultName = '%s' % ret
|
#·þÎñ¶ËË¢¹Ö°æ±¾ÔÝʱֱ½Ó·µ»Ø
|
return
|
|
#ÊØÎÀÈ˻ʸ±±¾½áÊø
|
if callName =="SWRHFBOver":
|
PlayerFamilySWRH.SWRHFBOver(eval(resultName))
|
return
|
|
#ÊÀ½çboss·ÖÁ÷Íæ¼Ò
|
if callName =="WorldBossShuntInfo":
|
GameWorldBoss.MapServer_WorldBossShuntInfo(eval(resultName), tick)
|
return
|
#Ôö¼Óboss¸´»îµã
|
if callName =="AddBossRebornPoint":
|
GameWorldBoss.AddBossRebornPoint(eval(resultName))
|
return
|
#¶àÏÉÃËBOSS½áÊø
|
if callName =="AllFamilyBossOver":
|
PlayerFamilyBoss.AllFamilyBossKilled()
|
return
|
#Æï³èBOSS½áÊø
|
if callName =="HorsePetBossOver":
|
PlayerHorsePetBoss.HorsePetBossKilled(int(resultName))
|
return
|
|
#---return·Ö¸îÏß-----------------------------------------------------------------
|
|
|
#---ÓпÉÄÜreturn-----------------------------------------------------------------
|
#É̳ÇÈ«·þ¹ºÂòÏÞÖÆ
|
if callName == "GetStoreServerBuyCnt":
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
if not curPlayer:
|
return
|
ret = PlayerStore.DoStoreServerBuyQueryResult(curPlayer, eval(resultName))
|
if ret == None:
|
resultName = ''
|
else:
|
resultName = '%s' % ret
|
|
#Íæ¼ÒµÈ¼¶½±Àø
|
if callName == "GetPlayerLVAward":
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
if not curPlayer:
|
return
|
ret = PlayerLVAward.DoLVAwardQueryResult(curPlayer, eval(resultName))
|
resultName = '%s' % ret
|
|
# ÏÉħ֮Õùʤ³¡½±Àø
|
if callName == "GetXMZZWinPrize":
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
if not curPlayer:
|
return
|
ret = PlayerXMZZ.OnGetXMZZWinPrize(curPlayer, eval(resultName))
|
if ret == None:
|
return
|
resultName = '%s' % ret
|
|
#ÏÉħ֮ÕùѺע
|
if callName == "XMZZBet":
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
if not curPlayer:
|
return
|
ret = PlayerXMZZ.OnXMZZBet(curPlayer, eval(resultName))
|
if ret == None:
|
return
|
resultName = '%s' % ret
|
|
if callName == 'SendInviteCode':
|
#ÑûÇëÂëÑéÖ¤»Ø¸´
|
resultName = PlayerRecall.PlayerRecall_InviteCode(srcPlayerID, pack.GetQueryID())
|
|
if callName == 'OpenServerCampaignAward':
|
#¿É·ñÁìÈ¡¿ª·þ»î¶¯½±Àø
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
resultName = '%s' % GameWorldOpenServerCampaign.CanGiveCampaignAward(curPlayer, eval(resultName))
|
|
|
# Íæ¼Ò×ÔÉíÕ½Ã˿Ƽ¼µÈ¼¶ÌáÉý, ¸ÄΪµØÍ¼Ö±½Ó´¦Àí, ÔÝÆÁ±Î
|
# if callName == 'PlayerFamilyTechLVUP':
|
# curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
# resultName = '%s' % PlayerFamilyTech.OnQuery_PlayerFamilyTechLVUP(curPlayer, eval(resultName))
|
|
|
# ¸±±¾ÖúÕ½
|
if callName =="FBHelpBattle":
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
if not curPlayer:
|
return
|
ret = PlayerFBHelpBattle.MapServer_FBHelpBattle(curPlayer, eval(resultName))
|
if ret == None:
|
return
|
resultName = '%s' % ret
|
|
# # Õ½Ã˲ֿâ
|
# if callName == "FamilyStore":
|
# curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
# if not curPlayer:
|
# return
|
# resultName = '%s' % PlayerFamilyStore.DoMapServerFamilyStore(curPlayer, eval(resultName), tick)
|
|
srcPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
|
|
if not srcPlayer:
|
return
|
|
srcPlayer.MapServer_QueryPlayerResult(pack.GetQueryType(), pack.GetQueryID(),
|
callName, resultName, len(resultName))
|
return
|
|
#---------------------------------------------------------------------
|
##»ñÈ¡³èÎï¸ÄÃûÑéÖ¤ºóµÄÁбí
|
# @param petID ³èÎïID
|
# @param checkName ³èÎïÐèÒª¸ÄµÄÃû×Ö
|
# @return [³èÎïID, ³èÎïÃû×Ö]
|
# @remarks
|
def __GetCheckDirtyResultStrList(petID, checkName):
|
#Èç¹ûÔà»°Ôò ·µ»ØµÄÃû×ÖΪ¿Õ´® ÒòmapServer²»»á·¢¿Õ´®À´ÇëÇóÄÜ·ñ¸ÄÃû ÒÔ´ËÔ¼¶¨ Èç¹ûÊÕµ½µÄÃû×ÖΪ¿Õ´® ÔòÈÏΪÊÇÔà»°²»ÄÜͨ¹ý
|
if DirtyList.IsWordForbidden(checkName):
|
checkName = ''
|
|
return '%s' % [petID, checkName]
|
|
|
## »ñµÃÖÐÁ¢µØÍ¼É±ËÀÍæ¼ÒÊý¾Ý
|
# @param curPlayer: Íæ¼ÒʵÀý
|
# @param killedPlayerID: ±»É±Íæ¼Òid
|
# @return: None
|
def GetFamilyMemberKillData(curPlayer, killedPlayerID):
|
killPlayerCnt = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_KillFamilyPlayerCnt)
|
|
# ѰÕÒÊÇ·ñÒѾÓмǼ
|
curData = 0
|
killCnt = 0
|
for index in range(killPlayerCnt):
|
curDictKey = ChConfig.Def_PlayerKey_KillFamilyPlayer % index
|
killData = curPlayer.GetDictByKey(curDictKey)
|
|
# ¼Ç¼ÖÐ×îºóÁ½Î»Ê±»÷ɱ´ÎÊý,Íæ¼Òid*100+´ÎÊý
|
if killData / 100 == killedPlayerID:
|
curData = killData
|
break
|
|
if curData != 0:
|
# ÉèÖû÷ɱÊýÁ¿
|
killCnt = curData % 100
|
# ÓÐÐÂÊý¾Ý
|
else:
|
curDictKey = ChConfig.Def_PlayerKey_KillFamilyPlayer % killPlayerCnt
|
curPlayer.SetDict(ChConfig.Def_PlayerKey_KillFamilyPlayerCnt, killPlayerCnt + 1)
|
|
curPlayer.SetDict(curDictKey, killedPlayerID * 100 + killCnt + 1)
|
return curDictKey, killCnt
|
|
|
## Çå³ýÖÐÁ¢µØÍ¼É±ËÀÍæ¼ÒÊý¾Ý
|
# @param curPlayer: Íæ¼ÒʵÀý
|
# @param killedPlayerID: ±»É±Íæ¼Òid
|
# @return: None
|
def ClearFamilyMemberKillData(curPlayer):
|
killPlayerCnt = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_KillFamilyPlayerCnt)
|
|
curPlayer.SetDict(ChConfig.Def_PlayerKey_KillFamilyPlayerCnt, 0)
|
for index in range(killPlayerCnt):
|
curPlayer.SetDict(ChConfig.Def_PlayerKey_KillFamilyPlayer % killPlayerCnt, 0)
|
return
|
|
|