#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
##@package Player.PlayerAssist
|
#
|
# @todo:ÐÖúϵͳ
|
# @author hxp
|
# @date 2019-12-06
|
# @version 1.0
|
#
|
# ÏêϸÃèÊö: ÐÖúϵͳ
|
#
|
#-------------------------------------------------------------------------------
|
#"""Version = 2019-12-06 21:00"""
|
#-------------------------------------------------------------------------------
|
|
import GameWorld
|
import IpyGameDataPY
|
import PlayerControl
|
import NPCHurtManager
|
import IPY_GameWorld
|
import ItemControler
|
import ItemCommon
|
import ChConfig
|
|
def DoPlayerOnDay(curPlayer):
|
## ¹ýÌì´¦Àí
|
|
ipyDataMgr = IpyGameDataPY.IPY_Data()
|
for index in xrange(ipyDataMgr.GetAssistThanksGiftCount()):
|
ipyData = ipyDataMgr.GetAssistThanksGiftByIndex(index)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GetThanksGiftCount % ipyData.GetGiftID(), 0)
|
|
return
|
|
#// B0 10 ÇëÇóÐÖúBoss #tagCMRequestAssistBoss
|
#
|
#struct tagCMRequestAssistBoss
|
#
|
#{
|
# tagHead Head;
|
# DWORD ObjID;
|
# DWORD NPCID;
|
#};
|
def OnRequestAssistBoss(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
playerID = curPlayer.GetPlayerID()
|
objID = clientData.ObjID
|
npcID = clientData.NPCID
|
|
if not curPlayer.GetFamilyID():
|
GameWorld.DebugLog("ûÓÐÏÉÃ˲»ÄÜÇëÇóÐÖú!", playerID)
|
return
|
|
curNPC = GameWorld.FindNPCByNPCID(npcID)
|
if not curNPC:
|
GameWorld.DebugLog("ÐÖúNPC²»´æÔÚÎÞ·¨ÐÖú!npcID=%s" % npcID, playerID)
|
return
|
if curNPC.GetID() != objID:
|
GameWorld.DebugLog("ÐÖúNPCʵÀýID²»Ò»ÖÂÎÞ·¨ÐÖú!npcID=%s,curNPC.GetID()=%s,sendObjID=%s" % (npcID, curNPC.GetID(), objID), playerID)
|
return
|
|
ipyData = IpyGameDataPY.GetIpyGameDataNotLog('BOSSInfo', npcID)
|
if not ipyData or not ipyData.GetCanAssist():
|
GameWorld.DebugLog("¸ÃNPC²»ÄÜÐÖú!npcID=%s" % npcID, playerID)
|
return
|
|
hurtList = NPCHurtManager.GetPlayerHurtList(curNPC)
|
if not hurtList.IsNoAssistPlayer(playerID):
|
GameWorld.DebugLog("²»ÊǸÃbossµÄ·ÇÖúÕ½ÉËÑªÍæ¼Ò£¬ÎÞ·¨·¢ÆðÐÖú!npcID=%s" % npcID, playerID)
|
return
|
|
if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_RequestAssist, tick):
|
GameWorld.DebugLog("ÇëÇóÐÖúCDÖÐ!npcID=%s" % npcID, playerID)
|
return
|
|
mapID = curPlayer.GetMapID()
|
lineID = GameWorld.GetGameWorld().GetLineID()
|
queryData = [mapID, lineID, npcID, objID]
|
QueryGameServer_PlayerAssist(playerID, "RequestAssistBoss", queryData)
|
return
|
|
|
#// B0 11 ÇëÇóÐÖú×é¶Ó¸±±¾ #tagCMRequestAssistTeamFB
|
#
|
#struct tagCMRequestAssistTeamFB
|
#
|
#{
|
# tagHead Head;
|
# WORD MapID;
|
# WORD LineID;
|
#};
|
def OnRequestAssistTeamFB(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
playerID = curPlayer.GetPlayerID()
|
mapID = clientData.MapID
|
lineID = clientData.LineID
|
|
if not curPlayer.GetFamilyID():
|
GameWorld.DebugLog("ûÓÐÏÉÃ˲»ÄÜÇëÇóÐÖú!", playerID)
|
return
|
|
if GameWorld.GetMap().GetMapFBTypeByMapID(mapID) != IPY_GameWorld.fbtTeam:
|
GameWorld.DebugLog("·Ç×é¶Ó¸±±¾²»ÄÜÇëÇóÐÖú!mapID=%s" % mapID, playerID)
|
return
|
|
if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_RequestAssist, tick):
|
GameWorld.DebugLog("ÇëÇóÐÖúCDÖÐ!mapID=%s,lineID=%s" % (mapID, lineID), playerID)
|
return
|
|
queryData = [mapID, lineID]
|
QueryGameServer_PlayerAssist(playerID, "RequestAssistTeamFB", queryData)
|
return
|
|
def OnStartAssistTeamFB(playerID, mapID, lineID, tagPlayerID):
|
## ¿ªÊ¼ÐÖú×é¶Ó¸±±¾£¬ÐÖúÍæ¼Ò½øÈ븱±¾µ÷ÓÃ
|
queryData = [mapID, lineID, tagPlayerID]
|
QueryGameServer_PlayerAssist(playerID, "OnStartAssistTeamFB", queryData)
|
return
|
|
def QueryGameServer_PlayerAssist(playerID, queryType, queryData):
|
msgInfo = str([queryType, queryData])
|
GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(playerID, 0, 0, "PlayerAssist", msgInfo, len(msgInfo))
|
GameWorld.DebugLog("ÐÖúÐÅÏ¢·¢ËÍ GameServer: playerID=%s,queryType=%s,queryData=%s" % (playerID, queryType, queryData))
|
return
|
|
def QueryResult_PlayerAssist(curPlayer, resultList):
|
## ÐÖúÐÅÏ¢GameServer·µ»Ø´¦Àí
|
if len(resultList) != 3:
|
return
|
queryType, queryData, result = resultList
|
|
# ʹÓÃÐÖú¸ÐлÀñºÐ¸ø½±Àø
|
if queryType == "UseAssistThanksGift":
|
itemID = queryData[0]
|
giftItem = ItemCommon.FindItemInPackByItemID(curPlayer, itemID, IPY_GameWorld.rptItem)
|
if not giftItem:
|
return
|
ItemCommon.DelItem(curPlayer, giftItem, 1)
|
|
ipyData = IpyGameDataPY.GetIpyGameData("AssistThanksGift", itemID)
|
if ipyData:
|
awardItemID, awardItemCount = ipyData.GetRequestPlayerAward()
|
ItemControler.GivePlayerItemOrMail(curPlayer, [[awardItemID, awardItemCount, 0]])
|
|
# ½ÓÊÕÐÖú¸ÐлÀñºÐ½±Àø¸ø½±Àø
|
elif queryType == "GetAssistThanksGift":
|
itemID, isExtraAward, isCurDailyDate, updateTodayGiftCount = queryData
|
if isCurDailyDate:
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GetThanksGiftCount % itemID, updateTodayGiftCount)
|
|
if isExtraAward:
|
ipyData = IpyGameDataPY.GetIpyGameData("AssistThanksGift", itemID)
|
if ipyData:
|
awardItemID, awardItemCount = ipyData.GetAssistPlayerAward()
|
ItemControler.GivePlayerItemOrMail(curPlayer, [[awardItemID, awardItemCount, 0]])
|
|
return
|
|
def GameServer_AssistBossMsg(assistData):
|
## GameServerÍÆË͵½Ö¸¶¨bossµØÍ¼µÄÐÅÏ¢
|
|
GameWorld.DebugLog("GameServerͬ²½BossÐÖúÐÅÏ¢: %s" % assistData)
|
|
msgType = assistData[0]
|
|
# ¿ªÊ¼ÐÖú
|
if msgType == "Start":
|
assistGUID, assistPlayerID, assistPlayerName, isFriend, tagPlayerID, tagPlayerName, tagTeamID, lineID, objID, npcID = assistData[1:]
|
npchurtList = NPCHurtManager.GetPlayerHurtListEx(lineID, objID, npcID)
|
if not npchurtList:
|
return
|
|
npchurtList.AddAssistPlayer(assistPlayerID, assistPlayerName, isFriend, tagPlayerID, tagPlayerName, tagTeamID)
|
QueryGameServer_PlayerAssist(0, "AddAssistBossPlayerOK", [assistGUID, assistPlayerID])
|
|
# È¡ÏûÐÖú
|
elif msgType == "Cancel":
|
assistPlayerID, lineID, objID, npcID = assistData[1:]
|
npchurtList = NPCHurtManager.GetPlayerHurtListEx(lineID, objID, npcID)
|
if not npchurtList:
|
return
|
npchurtList.DelHurtPlayer(assistPlayerID, "Cancel", isMapServerDel=False)
|
|
return
|
|
|