#!/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 PlayerFriend
|
import PyDataManager
|
import IpyGameDataPY
|
import NetPackCommon
|
import CrossRealmMsg
|
import PyGameDataStruct
|
import PlayerFBHelpBattle
|
import ChPyNetSendPack
|
import PlayerControl
|
import PlayerFamily
|
import ShareDefine
|
import PlayerTeam
|
import GameWorld
|
import ChConfig
|
|
import uuid
|
import time
|
|
# ÐÖúÀàÐÍ
|
(
|
AssistType_Unknown,
|
AssistType_Boss, # boss
|
AssistType_TeamFB, # ×é¶Ó¸±±¾
|
) = range(3)
|
|
def RemoveOutofdateAssistThanks():
|
## ÒÆ³ý¹ýÆÚµÄδÍê½á¸ÐлÊý¾Ý
|
|
timeoutDate = GameWorld.GetDatetimeByDiffDays(-7)
|
assistThanksMgr = PyDataManager.GetPlayerAssistThanksPyManager()
|
maxDoCount = len(assistThanksMgr.allAssistThanksList)
|
syncPlayerIDList = []
|
removeCountTotal, delNoThanksCount, delUnGetThanksCount = 0, 0, 0
|
doCount = 0
|
while doCount < maxDoCount and assistThanksMgr.allAssistThanksList:
|
doCount += 1
|
thanks = assistThanksMgr.allAssistThanksList[0]
|
thanksDate = GameWorld.ChangeStrToDatetime(thanks.TimeStr)
|
if thanksDate > timeoutDate:
|
break
|
|
removeCountTotal += 1
|
# ÒÆ³ý¹ýÆÚµÄ¸ÐлÊý¾Ý
|
popThanks = assistThanksMgr.allAssistThanksList.pop(0)
|
playerID = popThanks.PlayerID
|
GUID = popThanks.GUID
|
assistPlayerIDList = popThanks.AssistPlayerDict.keys()
|
|
if playerID in assistThanksMgr.playerThanksDict:
|
playerThanksList = assistThanksMgr.playerThanksDict[playerID]
|
for i, thanks in enumerate(playerThanksList):
|
if GUID == thanks.GUID:
|
delNoThanksCount += 1
|
playerThanksList.pop(i)
|
#GameWorld.DebugLog(" ÒÆ³ýδ¸ÐлµÄÊý¾Ý: i=%s,GUID=%s,len=%s" % (i, thanks.GUID, len(playerThanksList)))
|
break
|
|
for assistPlayerID in assistPlayerIDList:
|
if assistPlayerID not in assistThanksMgr.assistPlayerThanksDict:
|
continue
|
assistThanksList = assistThanksMgr.assistPlayerThanksDict[assistPlayerID]
|
for i, thanks in enumerate(assistThanksList):
|
if GUID == thanks.GUID:
|
delUnGetThanksCount += 1
|
assistThanksList.pop(i)
|
#GameWorld.DebugLog(" ÒÆ³ýδ½ÓÊܸÐлµÄÊý¾Ý: i=%s,GUID=%s,assistPlayerID=%s,len=%s" % (i, thanks.GUID, assistPlayerID, len(assistThanksList)))
|
if assistPlayerID not in syncPlayerIDList:
|
syncPlayerIDList.append(assistPlayerID)
|
break
|
|
playerMgr = GameWorld.GetPlayerManager()
|
for playerID in syncPlayerIDList:
|
assistPlayer = playerMgr.FindPlayerByID(playerID)
|
if assistPlayer:
|
SyncCanGetAssistThanksGiftCount(assistPlayer, isForce=True)
|
|
if removeCountTotal:
|
GameWorld.DebugLog("ÒÆ³ý¹ýÆÚµÄδÍê½á¸ÐлÊý¾Ý: doCount=%s,maxDoCount=%s,removeCountTotal=%s,delNoThanksCount=%s,delUnGetThanksCount=%s,remainCount=%s"
|
% (doCount, maxDoCount, removeCountTotal, delNoThanksCount, delUnGetThanksCount, len(assistThanksMgr.allAssistThanksList)))
|
return
|
|
def OnPlayerLoginCrossServer(curPlayer):
|
# ¿ç·þµÇ¼´¦Àí
|
|
playerID = curPlayer.GetPlayerID()
|
tagPlayerID = PlayerControl.GetAssistTagPlayerID(curPlayer)
|
if tagPlayerID and not GameWorld.GetPlayerManager().FindPlayerByID(tagPlayerID):
|
serverGroupID = PlayerControl.GetPlayerServerGroupID(curPlayer)
|
sendMsg = {"queryType":"ResetPlayerAssist", "queryData":[playerID, tagPlayerID]}
|
CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_CrossAssist, sendMsg, [serverGroupID])
|
|
return
|
|
def OnPlayerLogin(curPlayer):
|
## Íæ¼ÒÉÏÏß
|
|
SyncCanGetAssistThanksGiftCount(curPlayer)
|
|
familyID = curPlayer.GetFamilyID()
|
playerID = curPlayer.GetPlayerID()
|
|
assistMgr = PyDataManager.GetPlayerAssistPyManager()
|
|
# ½«×Ô¼º·¢²¼µÄÖØÐ¼¤»î²¢Í¨ÖªÆäËûÍæ¼Ò
|
if playerID in assistMgr.playerAssistDict:
|
playerAssistList = assistMgr.playerAssistDict[playerID]
|
|
serverAssistList, familyAssistList = [], []
|
for assistObj in playerAssistList:
|
assistObj.OffLineTime = 0 # ÉèÖÃΪ·ÇÀëÏß
|
if not assistObj.FamilyID:
|
serverAssistList.append(assistObj)
|
elif familyID and familyID == assistObj.FamilyID:
|
familyAssistList.append(assistObj)
|
|
if familyAssistList:
|
PlayerFamily.SendFamilyFakePack(familyID, GetAssistInfoListPack(familyAssistList), [playerID])
|
if serverAssistList:
|
SyncServerAssist(serverAssistList)
|
|
# È«·þ·þÎñÆ÷ÐÖú¡¢ÏÉÃËÐÖú ֪ͨ×Ô¼º
|
syncAssistList = []
|
for assistObj in assistMgr.allAssistDict.values():
|
if assistObj.OffLineTime:
|
continue
|
if assistObj.FamilyID and assistObj.FamilyID != familyID:
|
continue
|
syncAssistList.append(assistObj)
|
if syncAssistList:
|
NetPackCommon.SendFakePack(curPlayer, GetAssistInfoListPack(syncAssistList))
|
|
# ûÓÐÐÖúÖеÄÐÅÏ¢
|
if playerID in assistMgr.playerAssistingDict:
|
assistObj = assistMgr.playerAssistingDict[playerID]
|
tagPlayerID = assistObj.PlayerID
|
|
GameWorld.DebugLog("·ÇÍÑ»úÉÏÏߣ¬¼ÌÐøÐÖú!tagPlayerID=%s" % tagPlayerID, playerID)
|
|
PlayerControl.SetAssistTagPlayerID(curPlayer, tagPlayerID)
|
assistPack = ChPyNetSendPack.tagGCAssistingInfo()
|
assistPack.AssistGUID = assistObj.GUID
|
NetPackCommon.SendFakePack(curPlayer, assistPack)
|
|
return
|
|
def OnLeaveServer(curPlayer):
|
## Íæ¼ÒÀëÏß
|
familyID = curPlayer.GetFamilyID()
|
|
if PlayerControl.GetAssistTagPlayerID(curPlayer):
|
PlayerControl.SetAssistTagPlayerID(curPlayer, 0)
|
|
assistMgr = PyDataManager.GetPlayerAssistPyManager()
|
playerID = curPlayer.GetPlayerID()
|
if playerID not in assistMgr.playerAssistDict:
|
#GameWorld.DebugLog("Íæ¼ÒûÓз¢²¼¹ýÐÖú£¬ÀëÏß²»´¦Àí!", playerID)
|
return
|
playerAssistList = assistMgr.playerAssistDict[playerID]
|
# ÔÝÊ±ÒÆ³ýÀëÏßÍæ¼Ò·¢²¼µÄ²»´æ¿âÐÖúÐÅÏ¢£¬²»ÔÙÈÃÆäËûÃËÓѼÌÐøÇ°ÍùÐÖú£¬ÒѾÔÚÐÖúµÄ²»Ó°Ïì
|
for assistObj in playerAssistList:
|
if assistObj.IsSaveDB:
|
continue
|
assistObj.OffLineTime = int(time.time())
|
if not assistObj.FamilyID:
|
SyncServerClearAssist(assistObj.GUID)
|
elif familyID and familyID == assistObj.FamilyID:
|
SyncFamilyClearAssist(familyID, assistObj.GUID)
|
GameWorld.DebugLog("Íæ¼ÒÏÂÏߣ¬ÔÝʱ´ÓÐÖúÁбíÒÆ³ýÍæ¼Ò·¢²¼µÄÐÖú: %s" % assistObj.GUID)
|
|
return
|
|
def OnPlayerLeaveFamily(familyID, leavePlayerID, leavePlayer):
|
## Íæ¼ÒÀ뿪ÏÉÃË
|
## @param leavePlayer: ¿ÉÄܲ»ÔÚÏßΪNone
|
|
assistMgr = PyDataManager.GetPlayerAssistPyManager()
|
|
# Íæ¼Ò·¢²¼µÄ
|
if leavePlayerID in assistMgr.playerAssistDict:
|
playerAssistList = assistMgr.playerAssistDict[leavePlayerID]
|
for assistObj in playerAssistList[::-1]:
|
if assistObj.FamilyID:
|
OnCancelPlayerRequestAssist(assistObj, "LeaveFamily", True)
|
|
# Íæ¼ÒÐÖúÖеÄ
|
if leavePlayerID in assistMgr.playerAssistingDict:
|
assistObj = assistMgr.playerAssistingDict[leavePlayerID]
|
if assistObj.FamilyID:
|
OnCancelPlayerAssist(leavePlayer, leavePlayerID, assistObj, "LeaveFamily", True)
|
|
return
|
|
def OnPlayerTeamChange(curPlayer):
|
## Íæ¼Ò¶ÓÎé±ä¸ü
|
|
if curPlayer.GetTeamID():
|
return
|
playerID = curPlayer.GetPlayerID()
|
|
assistMgr = PyDataManager.GetPlayerAssistPyManager()
|
if playerID not in assistMgr.playerAssistDict:
|
return
|
playerAssistList = assistMgr.playerAssistDict[playerID]
|
|
for assistObj in playerAssistList[::-1]:
|
gameMap = GameWorld.GetMap(assistObj.MapID)
|
if gameMap and gameMap.GetMapFBType() == ChConfig.fbtTeam:
|
OnCancelPlayerRequestAssist(assistObj, "LeaveTeam", True)
|
|
return
|
|
def OnInitAssistData(dbData, isSaveDB, serverGroupID=0):
|
## ¼ÓÔØÐÖúÊý¾Ý¶îÍâ´¦Àí
|
setattr(dbData, "IsSaveDB", isSaveDB) # ÊÇ·ñ±£´æÊý¾Ý¿â£¬ÀëÏß¿ÉÐÖúµÄÐèÒª´æ¿â£¬ÈçÍÚ¿óÀà
|
setattr(dbData, "ObjID", 0) # NPCʵÀýID
|
setattr(dbData, "ServerGroupID", serverGroupID)
|
setattr(dbData, "OffLineTime", 0) # ·¢²¼Íæ¼ÒÀëÏßʱ¼ä´Á
|
setattr(dbData, "Face", 0)
|
setattr(dbData, "FacePic", 0)
|
|
assistType = AssistType_Unknown
|
if dbData.NPCID:
|
assistType = AssistType_Boss
|
else:
|
assMapID = dbData.MapID
|
gameMap = GameWorld.GetMap(assMapID)
|
if gameMap and gameMap.GetMapFBType() == ChConfig.fbtTeam:
|
assistType = AssistType_TeamFB
|
setattr(dbData, "AssistType", assistType) # ÐÖúÀàÐÍ
|
setattr(dbData, "AssistPlayerIDList", []) # ÐÖúÖеÄÍæ¼ÒIDÁбí
|
return
|
|
def OnInitAssistThanksData(thanksMgr, dbData):
|
## ³õʼ»¯ÐÖú¸ÐлÊý¾Ý¶îÍâ´¦Àí
|
setattr(dbData, "Face", 0)
|
setattr(dbData, "FacePic", 0)
|
setattr(dbData, "AssistPlayerDict", {})
|
if dbData.AssistPlayer and dbData.AssistPlayer.startswith("{") and dbData.AssistPlayer.endswith("}"):
|
dbData.AssistPlayerDict = eval(dbData.AssistPlayer)
|
|
thanksMgr.allAssistThanksList.append(dbData)
|
# δ¸ÐлµÄ
|
if not dbData.ThanksState:
|
playerID = dbData.PlayerID
|
if playerID not in thanksMgr.playerThanksDict:
|
thanksMgr.playerThanksDict[playerID] = []
|
playerThanksList = thanksMgr.playerThanksDict[playerID]
|
playerThanksList.append(dbData)
|
|
for assistPlayerID, assistPlayerInfo in dbData.AssistPlayerDict.items():
|
if "IsGet" in assistPlayerInfo:
|
# ÒѾ½ÓÊܸÐл½±ÀøµÄ²»ÔÙ´¦Àí
|
continue
|
|
if assistPlayerID not in thanksMgr.assistPlayerThanksDict:
|
thanksMgr.assistPlayerThanksDict[assistPlayerID] = []
|
assistPlayerThanksList = thanksMgr.assistPlayerThanksDict[assistPlayerID]
|
assistPlayerThanksList.append(dbData)
|
|
return
|
|
def OnSaveAssistThanksData(dbData):
|
## ÐÖú¸Ðл±£´æÊý¾Ý¶îÍâ´¦Àí
|
dbData.AssistPlayer = str(dbData.AssistPlayerDict)
|
dbData.AssistPlayerLen = len(dbData.AssistPlayer)
|
return
|
|
#// B0 12 ¿ªÊ¼ÐÖúBoss #tagCGStartAssistBoss
|
#
|
#struct tagCGStartAssistBoss
|
#
|
#{
|
# tagHead Head;
|
# char AssistGUID[40]; //ÐÖúGUID
|
#};
|
def OnStartAssistBoss(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
assistGUID = clientData.AssistGUID
|
|
assistMgr = PyDataManager.GetPlayerAssistPyManager()
|
if assistGUID not in assistMgr.allAssistDict:
|
GameWorld.DebugLog("²»´æÔÚ¸ÃÐÖú!assistGUID=%s" % assistGUID)
|
return
|
assistObj = assistMgr.allAssistDict[assistGUID]
|
if assistObj.AssistType != AssistType_Boss:
|
return
|
if assistObj.PlayerID == curPlayer.GetPlayerID():
|
GameWorld.DebugLog("²»ÄÜÐÖú×Ô¼º!")
|
return
|
|
isCrossBoss = assistObj.MapID in ChConfig.Def_CrossMapIDList
|
if isCrossBoss:
|
pass
|
else:
|
if assistObj.FamilyID != curPlayer.GetFamilyID():
|
GameWorld.DebugLog("·ÇͬÃËÍæ¼Ò²»ÄÜÐÖú!")
|
return
|
|
playerMapID = curPlayer.GetMapID()
|
mapID = assistObj.MapID
|
lineID = assistObj.LineID
|
playerMap = GameWorld.GetMap(playerMapID)
|
if not playerMap:
|
return
|
if playerMap.GetMapFBType() != ChConfig.fbtNull:
|
if mapID == ChConfig.Def_FBMapID_SealDemon:
|
playerLineID = PlayerControl.GetFBFuncLineID(curPlayer)
|
else:
|
playerLineID = curPlayer.GetFBID()
|
if playerMapID != mapID or playerLineID != lineID:
|
#¸±±¾ÖÐÎÞ·¨ÐÖú
|
PlayerControl.NotifyCode(curPlayer, "AssistFBLimit")
|
return
|
|
if isCrossBoss:
|
tagPlayerID = assistObj.PlayerID
|
assistPlayerID = curPlayer.GetPlayerID()
|
assistPlayerName = curPlayer.GetName()
|
isFriend = PlayerFriend.IsFriend(assistPlayerID, tagPlayerID)
|
sendMsg = {"queryType":"StartAssistBoss", "queryData":[assistGUID, assistPlayerID, assistPlayerName, isFriend]}
|
CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_CrossAssist, sendMsg)
|
return
|
|
# É趨ÐÖú±ØÐëÀ뿪¶ÓÎé
|
tagMap = GameWorld.GetMap(mapID)
|
if not tagMap:
|
return
|
if tagMap.GetMapFBType() != ChConfig.fbtTeam:
|
curTeam = curPlayer.GetTeam()
|
if curTeam:
|
PlayerTeam.DoPlayerLeaveTeam(curPlayer, curTeam, tick)
|
|
SetPlayerStartAssistBoss(curPlayer, assistObj)
|
return
|
|
#// B0 13 È¡ÏûÐÖúBoss #tagCGCancelAssistBoss
|
#
|
#struct tagCGCancelAssistBoss
|
#
|
#{
|
# tagHead Head;
|
# char AssistGUID[40]; //ÐÖúGUID
|
#};
|
def OnCancelAssistBoss(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
assistGUID = clientData.AssistGUID
|
|
playerID = curPlayer.GetPlayerID()
|
assistMgr = PyDataManager.GetPlayerAssistPyManager()
|
if playerID not in assistMgr.playerAssistingDict:
|
GameWorld.DebugLog("ûÓÐÔÚÐÖúÖУ¬ÎÞÐèÈ¡Ïû!", playerID)
|
return
|
assistObj = assistMgr.playerAssistingDict[playerID]
|
if assistGUID != assistObj.GUID:
|
GameWorld.DebugLog("·ÇÕýÔÚÐÖúÖеÄGUID£¬²»ÄÜÈ¡Ïû!assistGUID=%s,assisting=%s" % (assistGUID, assistObj.GUID), playerID)
|
return
|
OnCancelPlayerAssist(curPlayer, curPlayer.GetPlayerID(), assistObj, "ClientCancel", True)
|
return
|
|
def SetPlayerStartAssistBoss(curPlayer, assistObj):
|
## Íæ¼Ò¿ªÊ¼ÐÖú boss
|
|
assistGUID = assistObj.GUID
|
tagPlayerID = assistObj.PlayerID
|
mapID = assistObj.MapID
|
lineID = assistObj.LineID
|
npcID = assistObj.NPCID
|
objID = assistObj.ObjID
|
|
tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(tagPlayerID)
|
if not tagPlayer:
|
GameWorld.DebugLog("Íæ¼ÒÒÑÀëÏߣ¬ÎÞ·¨ÐÖú!tagPlayerID=%s" % (tagPlayerID))
|
return
|
|
if tagPlayer.GetMapID() != mapID:
|
GameWorld.DebugLog("Ä¿±êÍæ¼ÒÒѲ»ÔÚÇëÇóÐÖúµÄµØÍ¼£¬ÎÞ·¨ÐÖú!tagPlayerID=%s" % (tagPlayerID))
|
return
|
|
playerID = curPlayer.GetPlayerID()
|
# ÉèÖÃÐÂÐÖú֮ǰÐèÒªÏÈÈ¡ÏûÕýÔÚ½øÐÐÖеÄÐÖú
|
assistMgr = PyDataManager.GetPlayerAssistPyManager()
|
if playerID in assistMgr.playerAssistingDict:
|
assistingObj = assistMgr.playerAssistingDict[playerID]
|
if assistGUID != assistingObj.GUID:
|
OnCancelPlayerAssist(curPlayer, playerID, assistingObj, "StartNewAssistBoss", True)
|
assistMgr.playerAssistingDict[playerID] = assistObj
|
|
#if playerID in assistObj.AssistPlayerIDList:
|
# GameWorld.DebugLog("ÒѾÔÚÐÖúÖÐ!", playerID)
|
# return
|
if playerID not in assistObj.AssistPlayerIDList:
|
assistObj.AssistPlayerIDList.append(playerID)
|
|
GameWorld.DebugLog("¿ªÊ¼ÐÖú: tagPlayerID=%s,mapID=%s,lineID=%s,npcID=%s,objID=%s"
|
% (tagPlayerID, mapID, lineID, npcID, objID), playerID)
|
|
# ÉèÖÃÐÖú
|
PlayerControl.SetAssistTagPlayerID(curPlayer, tagPlayerID)
|
|
# ֪ͨĿ±êÍæ¼Ò
|
assistPlayerID = curPlayer.GetPlayerID()
|
assistPlayerName = curPlayer.GetName()
|
# xxx¿ªÊ¼ÐÖúÄã
|
PlayerControl.NotifyCode(tagPlayer, "AssistStart", [assistPlayerName])
|
|
tagPlayerName = tagPlayer.GetName()
|
tagTeamID = tagPlayer.GetTeamID()
|
isFriend = PlayerFriend.IsFriend(assistPlayerID, tagPlayerID)
|
serverGroupID = GameWorld.GetServerGroupID()
|
assistData = [mapID, "Start", assistGUID, assistPlayerID, assistPlayerName, isFriend, tagPlayerID, tagPlayerName, tagTeamID, lineID, objID, npcID, serverGroupID]
|
GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_AssistBoss, assistData)
|
return
|
|
def ClientServerMsg_StartAssistBoss(serverGroupID, queryType, queryData):
|
## ÊÕµ½×Ó·þÏûÏ¢ - ¿ªÊ¼ÐÖúboss
|
## @return: ÊÇ·ñͬ²½É¾³ýGUID
|
assistGUID, assistPlayerID, assistPlayerName, isFriend = queryData
|
|
assistMgr = PyDataManager.GetPlayerAssistPyManager()
|
if assistGUID not in assistMgr.allAssistDict:
|
GameWorld.Log("²»´æÔÚ¸ÃÐÖú!assistGUID=%s" % assistGUID)
|
reason, isGameServer = "AssistGUIDNotExist", True
|
sendMsg = {"queryType":"CancelPlayerRequestAssist", "queryData":[assistGUID, reason, isGameServer]}
|
CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_CrossAssist, sendMsg, [serverGroupID])
|
return
|
assistObj = assistMgr.allAssistDict[assistGUID]
|
if assistObj.AssistType != AssistType_Boss:
|
return
|
if assistObj.PlayerID == assistPlayerID:
|
GameWorld.DebugLog("²»ÄÜÐÖú×Ô¼º!")
|
return
|
|
assistPlayer = GameWorld.GetPlayerManager().FindPlayerByID(assistPlayerID)
|
# Èç¹ûÊÇÔÚ¿ç·þ·þÎñÆ÷
|
if assistPlayer:
|
playerMapID = assistPlayer.GetMapID()
|
mapID = assistObj.MapID
|
lineID = assistObj.LineID
|
playerMap = GameWorld.GetMap(playerMapID)
|
if not playerMap:
|
return
|
if playerMap.GetMapFBType() != ChConfig.fbtNull:
|
playerLineID = assistPlayer.GetFBID()
|
if playerMapID != mapID or playerLineID != lineID:
|
#¸±±¾ÖÐÎÞ·¨ÐÖú
|
PlayerControl.NotifyCode(assistPlayer, "AssistFBLimit")
|
return
|
|
tagPlayerID = assistObj.PlayerID
|
mapID = assistObj.MapID
|
lineID = assistObj.LineID
|
npcID = assistObj.NPCID
|
objID = assistObj.ObjID
|
|
tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(tagPlayerID)
|
if not tagPlayer:
|
GameWorld.Log("Íæ¼ÒÒÑÀëÏߣ¬ÎÞ·¨ÐÖú!tagPlayerID=%s" % (tagPlayerID))
|
OnCancelPlayerRequestAssist(assistObj, "CrossPlayerOffline", True)
|
return
|
|
if tagPlayer.GetMapID() != mapID:
|
GameWorld.DebugLog("Ä¿±êÍæ¼ÒÒѲ»ÔÚÇëÇóÐÖúµÄµØÍ¼£¬ÎÞ·¨ÐÖú!tagPlayerID=%s" % (tagPlayerID))
|
return
|
|
# ÉèÖÃÐÂÐÖú֮ǰÐèÒªÏÈÈ¡ÏûÕýÔÚ½øÐÐÖеÄÐÖú
|
if assistPlayerID in assistMgr.playerAssistingDict:
|
assistingObj = assistMgr.playerAssistingDict[assistPlayerID]
|
if assistGUID != assistingObj.GUID:
|
OnCancelPlayerAssist(assistPlayer, assistPlayerID, assistingObj, "StartNewAssistBoss", True)
|
assistMgr.playerAssistingDict[assistPlayerID] = assistObj
|
|
if assistPlayerID not in assistObj.AssistPlayerIDList:
|
assistObj.AssistPlayerIDList.append(assistPlayerID)
|
|
GameWorld.DebugLog("¿ªÊ¼ÐÖú: tagPlayerID=%s,mapID=%s,lineID=%s,npcID=%s,objID=%s"
|
% (tagPlayerID, mapID, lineID, npcID, objID), assistPlayerID)
|
|
# ÉèÖÃÐÖú
|
if assistPlayer:
|
PlayerControl.SetAssistTagPlayerID(assistPlayer, tagPlayerID)
|
|
# ֪ͨĿ±êÍæ¼Ò
|
# xxx¿ªÊ¼ÐÖúÄã
|
PlayerControl.NotifyCode(tagPlayer, "AssistStart", [assistPlayerName])
|
|
tagPlayerName = tagPlayer.GetName()
|
tagTeamID = tagPlayer.GetTeamID()
|
assistData = [mapID, "Start", assistGUID, assistPlayerID, assistPlayerName, isFriend, tagPlayerID, tagPlayerName, tagTeamID, lineID, objID, npcID, serverGroupID]
|
GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_AssistBoss, assistData)
|
return
|
|
def OnAddAssistBossPlayerOK(queryData):
|
## Ìí¼ÓÐÖúBossµÄÍæ¼Ò³É¹¦£¬Í¨ÖªÐÖúÍæ¼Ò¿ÉÒÔǰÍù
|
assistGUID, assistPlayerID, tagPlayerID, serverGroupID = queryData
|
|
if GameWorld.IsCrossServer():
|
sendMsg = {"queryType":"AddAssistBossPlayerOK", "queryData":[assistGUID, assistPlayerID, tagPlayerID]}
|
CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_CrossAssist, sendMsg, [serverGroupID])
|
return
|
|
assistPlayer = GameWorld.GetPlayerManager().FindPlayerByID(assistPlayerID)
|
if not assistPlayer:
|
return
|
|
assistPack = ChPyNetSendPack.tagGCAssistingInfo()
|
assistPack.AssistGUID = assistGUID
|
NetPackCommon.SendFakePack(assistPlayer, assistPack)
|
return
|
|
def CrossServerMsg_AddAssistBossPlayerOK(queryType, queryData):
|
## ÊÕµ½¿ç·þ·þÎñÆ÷ - Ìí¼ÓÐÖúboss³É¹¦
|
assistGUID, assistPlayerID, tagPlayerID = queryData
|
|
assistPlayer = GameWorld.GetPlayerManager().FindPlayerByID(assistPlayerID)
|
if not assistPlayer:
|
return
|
|
assistMgr = PyDataManager.GetPlayerAssistPyManager()
|
if assistGUID not in assistMgr.allAssistDict:
|
GameWorld.DebugLog("²»´æÔÚ¸ÃÐÖú!assistGUID=%s" % assistGUID)
|
return
|
assistObj = assistMgr.allAssistDict[assistGUID]
|
|
# ÉèÖÃÐÖú
|
PlayerControl.SetAssistTagPlayerID(assistPlayer, tagPlayerID)
|
|
if assistPlayerID in assistMgr.playerAssistingDict:
|
assistingObj = assistMgr.playerAssistingDict[assistPlayerID]
|
if assistGUID != assistingObj.GUID:
|
OnCancelPlayerAssist(assistPlayer, assistPlayerID, assistingObj, "StartNewAssistBoss", True)
|
assistMgr.playerAssistingDict[assistPlayerID] = assistObj
|
|
if assistPlayerID not in assistObj.AssistPlayerIDList:
|
assistObj.AssistPlayerIDList.append(assistPlayerID)
|
|
assistPack = ChPyNetSendPack.tagGCAssistingInfo()
|
assistPack.AssistGUID = assistGUID
|
NetPackCommon.SendFakePack(assistPlayer, assistPack)
|
return
|
|
def MapServer_PlayerAssistLogic(curPlayer, msgList, tick):
|
## µØÍ¼Í¬²½µÄÐÖúÐÅÏ¢Âß¼´¦Àí
|
|
playerID = 0 if not curPlayer else curPlayer.GetPlayerID()
|
familyID = 0 if not curPlayer else curPlayer.GetFamilyID()
|
queryType, queryData = msgList
|
#result = []
|
|
GameWorld.Log("ÊÕµ½µØÍ¼ÐÖúÐÅÏ¢: familyID=%s,queryType=%s,queryData=%s" % (familyID, queryType, queryData), playerID)
|
|
# ÇëÇóÐÖúboss
|
if queryType == "RequestAssistBoss":
|
__DoRequestAssistBoss(curPlayer, queryData)
|
return
|
|
# Ìí¼ÓÐÖúBossµÄÍæ¼Ò³É¹¦
|
elif queryType == "AddAssistBossPlayerOK":
|
OnAddAssistBossPlayerOK(queryData)
|
return
|
|
# È¡ÏûbossÐÖú·¢²¼
|
elif queryType == "OnCancelBossRequestAssist":
|
mapID, lineID, npcID, objID, reason = queryData
|
assistMgr = PyDataManager.GetPlayerAssistPyManager()
|
if playerID in assistMgr.playerAssistDict:
|
playerAssistList = assistMgr.playerAssistDict[playerID]
|
for assistObj in playerAssistList:
|
if assistObj.MapID == mapID and assistObj.LineID == lineID and assistObj.NPCID == npcID and assistObj.ObjID == objID:
|
OnCancelPlayerRequestAssist(assistObj, reason, False)
|
break
|
return
|
|
# È¡ÏûÐÖúBoss
|
elif queryType == "OnCancelBossAssist":
|
mapID, lineID, npcID, objID, reason = queryData
|
assistMgr = PyDataManager.GetPlayerAssistPyManager()
|
if playerID in assistMgr.playerAssistingDict:
|
assistObj = assistMgr.playerAssistingDict[playerID]
|
if assistObj.MapID == mapID and assistObj.LineID == lineID and assistObj.NPCID == npcID and assistObj.ObjID == objID:
|
OnCancelPlayerAssist(curPlayer, playerID, assistObj, reason, False)
|
return
|
|
# bossÐÖú½áÊø
|
elif queryType == "OnBossAssistOver":
|
__DoBossAssistOver(queryData)
|
return
|
|
# ¸±±¾ÐÖú½áÊø
|
elif queryType == "OnFBAssistOver":
|
__DoFBAssistOver(queryData)
|
return
|
|
## -------------------------------------------------------------------------------------------
|
|
# ÇëÇóÐÖú×é¶Ó¸±±¾
|
elif queryType == "RequestAssistTeamFB":
|
__DoRequestAssistTeamFB(curPlayer, queryData)
|
return
|
|
# ¿ªÊ¼ÐÖú×é¶Ó¸±±¾
|
elif queryType == "OnStartAssistTeamFB":
|
mapID, lineID, tagPlayerID = queryData
|
GameWorld.DebugLog(" ¿ªÊ¼ÐÖú¸±±¾: mapID=%s,lineID=%s,tagPlayerID=%s" % (mapID, lineID, tagPlayerID), playerID)
|
# ¸±±¾ÐÖúÔÝʱֻ´¦ÀíÉèÖÃÐÖúÄ¿±êID
|
PlayerControl.SetAssistTagPlayerID(curPlayer, tagPlayerID)
|
return
|
|
# È¡ÏûÐÖú×é¶Ó¸±±¾
|
elif queryType == "OnCancelAssistTeamFB":
|
mapID, lineID, reason = queryData
|
GameWorld.DebugLog(" ¿ªÊ¼ÐÖú¸±±¾: mapID=%s,lineID=%s,reason=%s" % (mapID, lineID, reason), playerID)
|
# ¸±±¾ÐÖúÔÝʱֻ´¦ÀíÉèÖÃÐÖúÄ¿±êID
|
PlayerControl.SetAssistTagPlayerID(curPlayer, 0)
|
return
|
|
#QueryPlayerResult_PlayerAssist(curPlayer, queryType, queryData, result)
|
return
|
|
def QueryPlayerResult_PlayerAssist(curPlayer, queryType, queryData, result=[]):
|
if not curPlayer:
|
return
|
resultMsg = str([queryType, queryData, result])
|
curPlayer.MapServer_QueryPlayerResult(0, 0, "PlayerAssist", resultMsg, len(resultMsg))
|
GameWorld.DebugLog("ÐÖúÐÅÏ¢·¢ËÍ MapServer: playerID=%s,queryType=%s,queryData=%s" % (curPlayer.GetPlayerID(), queryType, queryData))
|
return
|
|
def __DoRequestAssistBoss(curPlayer, queryData):
|
## ÇëÇóÐÖúBoss
|
|
isCrossServer = GameWorld.IsCrossServer()
|
familyID = curPlayer.GetFamilyID()
|
if not familyID and not isCrossServer:
|
return
|
mapID, lineID, npcID, objID, npcLV, serverGroupID = queryData
|
|
playerID = curPlayer.GetPlayerID()
|
|
reqAssistObj = None
|
addNewAssist = False
|
assistMgr = PyDataManager.GetPlayerAssistPyManager()
|
if playerID in assistMgr.playerAssistDict:
|
playerAssistList = assistMgr.playerAssistDict[playerID]
|
for assistObj in playerAssistList:
|
if assistObj.AssistType != AssistType_Boss:
|
continue
|
if npcID != assistObj.NPCID or lineID != assistObj.LineID or objID != assistObj.ObjID:
|
OnCancelPlayerRequestAssist(assistObj, "RequestNewAssistBoss", True)
|
else:
|
reqAssistObj = assistObj
|
break
|
|
if not reqAssistObj:
|
addNewAssist = True
|
reqAssistObj = __AddNewAssist(assistMgr, curPlayer, mapID, lineID, npcID, objID, serverGroupID=serverGroupID)
|
|
if not reqAssistObj:
|
return
|
|
# ÇóÖúÐÅÏ¢ÒÑ·¢ËÍ£¬ÇëµÈ´ýÃËÓÑÖ§Ô®
|
PlayerControl.NotifyCode(curPlayer, "AssistRequestOK")
|
|
requestCount = 1
|
if not addNewAssist:
|
requestCount = min(curPlayer.GetDictByKey("AssistBossRequestCount") + 1, 999)
|
curPlayer.SetDict("AssistBossRequestCount", requestCount)
|
notifyNum = (requestCount - 1) % 3
|
|
if isCrossServer:
|
GUID = reqAssistObj.GUID
|
sendMsg = {"queryType":"RequestAssistBoss", "queryData":[mapID, lineID, npcID, objID, npcLV, playerID, notifyNum, GUID]}
|
CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_CrossAssist, sendMsg, [serverGroupID])
|
else:
|
# ֪ͨ±¾ÏÉÃËÍæ¼Ò
|
PlayerFamily.SendFamilyFakePack(familyID, GetAssistInfoListPack([reqAssistObj]))
|
# ¹ã²¥ÏÉÃËÇëÇó
|
PlayerControl.FamilyNotify(familyID, "AssistBossRequest%s" % notifyNum, [curPlayer.GetName(), mapID, npcLV, npcID])
|
|
return
|
|
def CrossServerMsg_RequestAssistBoss(queryType, queryData):
|
|
mapID, lineID, npcID, objID, npcLV, playerID, notifyNum, GUID = queryData
|
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
|
if not curPlayer:
|
return
|
|
reqAssistObj = None
|
addNewAssist = False
|
assistMgr = PyDataManager.GetPlayerAssistPyManager()
|
if playerID in assistMgr.playerAssistDict:
|
playerAssistList = assistMgr.playerAssistDict[playerID]
|
for assistObj in playerAssistList:
|
if assistObj.AssistType != AssistType_Boss:
|
continue
|
if npcID != assistObj.NPCID or lineID != assistObj.LineID or objID != assistObj.ObjID:
|
OnCancelPlayerRequestAssist(assistObj, "RequestNewAssistBoss", True)
|
else:
|
reqAssistObj = assistObj
|
break
|
|
if not reqAssistObj:
|
addNewAssist = True
|
reqAssistObj = __AddNewAssist(assistMgr, curPlayer, mapID, lineID, npcID, objID, assistGUID=GUID)
|
|
GameWorld.Log("ÊÕµ½¿ç·þÇëÇóÐÖúboss: %s mapID=%s,lineID=%s,npcID=%s,objID=%s,addNewAssist=%s,GUID=%s"
|
% (queryType, mapID, lineID, npcID, objID, addNewAssist, GUID), playerID)
|
if not reqAssistObj:
|
return
|
|
# ֪ͨ±¾·þÍæ¼Ò
|
SyncServerAssist([reqAssistObj])
|
|
# ¹ã²¥ÇëÇó
|
PlayerControl.WorldNotify(0, "AssistBossRequest%s" % notifyNum, [curPlayer.GetName(), mapID, npcLV, npcID])
|
return
|
|
def CrossServerMsg_CrossAssist(msgData, tick):
|
## ÊÕµ½¿ç·þ·þÎñÆ÷ÏûÏ¢ - ÐÖúÐÅÏ¢
|
|
queryType = msgData["queryType"]
|
queryData = msgData["queryData"]
|
|
# ÇëÇóÐÖúboss
|
if queryType == "RequestAssistBoss":
|
CrossServerMsg_RequestAssistBoss(queryType, queryData)
|
return
|
|
# Ìí¼ÓÐÖúboss³É¹¦
|
if queryType == "AddAssistBossPlayerOK":
|
CrossServerMsg_AddAssistBossPlayerOK(queryType, queryData)
|
return
|
|
# È¡ÏûÐÖúÇëÇó
|
if queryType == "CancelPlayerRequestAssist":
|
CrossServerMsg_CancelPlayerRequestAssist(queryType, queryData)
|
return
|
|
# È¡ÏûÐÖú
|
if queryType == "CancelPlayerAssist":
|
CrossServerMsg_CancelPlayerAssist(queryType, queryData)
|
return
|
|
# bossÐÖú½áÊø
|
if queryType == "BossAssistOver":
|
CrossServerMsg_BossAssistOver(queryType, queryData)
|
return
|
|
# ÖØÖÃÍæ¼ÒÐÖú
|
if queryType == "ResetPlayerAssist":
|
CrossServerMsg_ResetPlayerAssist(queryType, queryData)
|
return
|
|
return
|
|
def ClientServerMsg_CrossAssist(serverGroupID, msgData, tick):
|
## ÊÕµ½×Ó·þ·þÎñÆ÷ÏûÏ¢ - ÐÖúÐÅÏ¢
|
|
queryType = msgData["queryType"]
|
queryData = msgData["queryData"]
|
|
# ¿ªÊ¼ÐÖúboss
|
if queryType == "StartAssistBoss":
|
ClientServerMsg_StartAssistBoss(serverGroupID, queryType, queryData)
|
return
|
|
return
|
|
def __DoRequestAssistTeamFB(curPlayer, queryData):
|
## ÇëÇóÐÖú×é¶Ó¸±±¾
|
|
familyID = curPlayer.GetFamilyID()
|
if not familyID:
|
return
|
mapID, lineID = queryData
|
|
playerID = curPlayer.GetPlayerID()
|
|
reqAssistObj = None
|
addNewAssist = False
|
assistMgr = PyDataManager.GetPlayerAssistPyManager()
|
if playerID in assistMgr.playerAssistDict:
|
playerAssistList = assistMgr.playerAssistDict[playerID]
|
for assistObj in playerAssistList:
|
if assistObj.AssistType != AssistType_TeamFB:
|
continue
|
if mapID != assistObj.MapID or lineID != assistObj.LineID:
|
OnCancelPlayerRequestAssist(assistObj, "RequestNewAssistTeamFB", True)
|
else:
|
reqAssistObj = assistObj
|
break
|
|
if not reqAssistObj:
|
addNewAssist = True
|
reqAssistObj = __AddNewAssist(assistMgr, curPlayer, mapID, lineID)
|
|
if not reqAssistObj:
|
return
|
|
# ֪ͨ±¾ÏÉÃËÍæ¼Ò
|
PlayerFamily.SendFamilyFakePack(familyID, GetAssistInfoListPack([reqAssistObj]))
|
# ÇóÖúÐÅÏ¢ÒÑ·¢ËÍ£¬ÇëµÈ´ýÃËÓÑÖ§Ô®
|
PlayerControl.NotifyCode(curPlayer, "AssistRequestOK")
|
# ¹ã²¥ÏÉÃËÇëÇó
|
requestCount = 1
|
if not addNewAssist:
|
requestCount = min(curPlayer.GetDictByKey("AssistFBRequestCount") + 1, 999)
|
curPlayer.SetDict("AssistFBRequestCount", requestCount)
|
notifyNum = (requestCount - 1) % 3
|
PlayerControl.FamilyNotify(familyID, "AssistFBRequest%s" % notifyNum, [curPlayer.GetName(), mapID])
|
return
|
|
def __AddNewAssist(assistMgr, curPlayer, mapID, lineID, npcID=0, objID=0, exData="", isSaveDB=0, assistGUID="", serverGroupID=0):
|
## Ìí¼ÓÐÂÐÖúÇëÇó
|
if not assistGUID:
|
assistGUID = str(uuid.uuid1())
|
crossAssist = mapID in ChConfig.Def_CrossMapIDList
|
familyID = 0 if crossAssist else curPlayer.GetFamilyID()
|
playerID = curPlayer.GetPlayerID()
|
assistObj = PyGameDataStruct.tagDBAssist()
|
assistObj.GUID = assistGUID
|
assistObj.FamilyID = familyID
|
assistObj.PlayerID = playerID
|
assistObj.PlayerName = curPlayer.GetName()
|
assistObj.Job = curPlayer.GetJob()
|
assistObj.LV = curPlayer.GetLV()
|
assistObj.RealmLV = curPlayer.GetOfficialRank()
|
assistObj.MapID = mapID
|
assistObj.LineID = lineID
|
assistObj.NPCID = npcID
|
assistObj.ExData = exData
|
assistObj.ExDataLen = len(exData)
|
|
# ÒÔÏÂÊÇ·ÇDB×Ö¶ÎÊôÐÔ
|
OnInitAssistData(assistObj, isSaveDB, serverGroupID)
|
assistObj.ObjID = objID
|
assistObj.Face = curPlayer.GetFace()
|
assistObj.FacePic = curPlayer.GetFacePic()
|
|
#assistMgr = PyDataManager.GetPlayerAssistPyManager()
|
assistMgr.allAssistDict[assistGUID] = assistObj
|
|
if playerID not in assistMgr.playerAssistDict:
|
assistMgr.playerAssistDict[playerID] = []
|
playerAssistList = assistMgr.playerAssistDict[playerID]
|
playerAssistList.append(assistObj)
|
|
GameWorld.DebugLog(" Ôö¼ÓÐÂÐÖúÇëÇó: familyID=%s,mapID=%s,lineID=%s,npcID=%s,objID=%s,exData=%s,assistGUID=%s"
|
% (familyID, mapID, lineID, npcID, objID, exData, assistGUID), playerID)
|
return assistObj
|
|
def GetAssistInfoListPack(familyAssistList):
|
## ÐÖúÁбí·â°üÊý¾Ý
|
assistList = []
|
for assistObj in familyAssistList:
|
assistInfo = ChPyNetSendPack.tagGCAssistInfo()
|
assistInfo.AssistGUID = assistObj.GUID
|
assistInfo.PlayerID = assistObj.PlayerID
|
assistInfo.PlayerName = assistObj.PlayerName
|
assistInfo.Job = assistObj.Job
|
assistInfo.LV = assistObj.LV
|
assistInfo.RealmLV = assistObj.RealmLV
|
assistInfo.Face = assistObj.Face
|
assistInfo.FacePic = assistObj.FacePic
|
assistInfo.MapID = assistObj.MapID
|
assistInfo.LineID = assistObj.LineID
|
assistInfo.NPCID = assistObj.NPCID
|
assistInfo.ExData = assistObj.ExData
|
assistInfo.ExDataLen = len(assistObj.ExData)
|
assistList.append(assistInfo)
|
|
infoListPack = ChPyNetSendPack.tagGCAssistInfoList()
|
infoListPack.AssistInfoList = assistList
|
infoListPack.Count = len(assistList)
|
return infoListPack
|
|
def OnCancelPlayerRequestAssist(assistObj, reason, isGameServer):
|
'''È¡ÏûÍæ¼ÒÐÖú - ·¢²¼·½
|
MapServer ´¥·¢È¡Ïû
|
1. ¹¥»÷ÁËÁíÒ»Ö»boss
|
2. ÖØÐ·¢²¼ÁËÁíÒ»ÌõÐÖúboss/×é¶Ó¸±±¾
|
3. ½øÈëÐÖú״̬£¬¼´±¾À´ÔÚ´òͬһֻboss£¬ºóÃæÖ±½Ó¸ÄΪÐÖú
|
4. Í˳öÁË·¢²¼ÐÖúµØÍ¼
|
|
GameServer ´¥·¢È¡Ïû
|
5. ±»Ìß/Í˳öÏÉÃË
|
'''
|
|
assistGUID = assistObj.GUID
|
playerID = assistObj.PlayerID
|
familyID = assistObj.FamilyID
|
assistType = assistObj.AssistType
|
mapID = assistObj.MapID
|
lineID = assistObj.LineID
|
npcID = assistObj.NPCID
|
objID = assistObj.ObjID
|
serverGroupID = assistObj.ServerGroupID
|
|
GameWorld.DebugLog("È¡Ïû·¢²¼µÄÐÖúÇëÇó: mapID=%s,lineID=%s,npcID=%s,objID=%s,reason=%s,isGameServer=%s, %s, serverGroupID=%s"
|
% (mapID, lineID, npcID, objID, reason, isGameServer, assistGUID, serverGroupID))
|
|
assistMgr = PyDataManager.GetPlayerAssistPyManager()
|
if assistGUID not in assistMgr.allAssistDict:
|
return
|
assistMgr.allAssistDict.pop(assistGUID)
|
|
if playerID in assistMgr.playerAssistDict:
|
playerAssistList = assistMgr.playerAssistDict[playerID]
|
if assistObj in playerAssistList:
|
playerAssistList.remove(assistObj)
|
|
# È¡ÏûbossÐÖú
|
if assistType == AssistType_Boss:
|
|
# Ç¿ÖÆÈ¡ÏûÕýÔÚÐÖúÖеÄÍæ¼Ò
|
playerMgr = GameWorld.GetPlayerManager()
|
for assPlayerID in assistObj.AssistPlayerIDList[::-1]:
|
assistObj.AssistPlayerIDList.remove(assPlayerID)
|
if assPlayerID in assistMgr.playerAssistingDict:
|
assistingObj = assistMgr.playerAssistingDict[assPlayerID]
|
if assistingObj.GUID == assistGUID:
|
assPlayer = playerMgr.FindPlayerByID(assPlayerID)
|
OnCancelPlayerAssist(assPlayer, assPlayerID, assistObj, reason, isGameServer, isNotify=False)
|
|
# ·¢²¼·½È¡Ïû²»ÐèҪ֪ͨµØÍ¼£¬¶ÔµØÍ¼·¢²¼Íæ¼ÒûÓÐÓ°Ï죬¿É¼ÌÐø¹¥»÷boss
|
|
# È¡Ïû¸±±¾ÐÖú
|
elif assistType == AssistType_TeamFB:
|
# Ôݲ»ÐèÒª´¦Àí
|
pass
|
|
# ·Å×îºó
|
if familyID:
|
SyncFamilyClearAssist(familyID, assistGUID)
|
|
if GameWorld.IsCrossServer() and serverGroupID:
|
sendMsg = {"queryType":"CancelPlayerRequestAssist", "queryData":[assistGUID, reason, isGameServer]}
|
CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_CrossAssist, sendMsg, [serverGroupID])
|
|
return
|
|
def CrossServerMsg_CancelPlayerRequestAssist(queryType, queryData):
|
## ÊÕµ½¿ç·þ·þÎñÆ÷ - È¡ÏûÐÖúÇëÇó
|
|
assistGUID, reason, isGameServer = queryData
|
|
assistMgr = PyDataManager.GetPlayerAssistPyManager()
|
if assistGUID not in assistMgr.allAssistDict:
|
return
|
assistObj = assistMgr.allAssistDict.pop(assistGUID)
|
playerID = assistObj.PlayerID
|
assistType = assistObj.AssistType
|
|
GameWorld.Log("ÊÕµ½¿ç·þÈ¡ÏûÐÖúbossÇëÇó: %s assistGUID=%s,reason=%s,isGameServer=%s" % (queryType, assistGUID, reason, isGameServer), playerID)
|
|
if playerID in assistMgr.playerAssistDict:
|
playerAssistList = assistMgr.playerAssistDict[playerID]
|
if assistObj in playerAssistList:
|
playerAssistList.remove(assistObj)
|
|
# È¡ÏûbossÐÖú
|
if assistType == AssistType_Boss:
|
# Ç¿ÖÆÈ¡ÏûÕýÔÚÐÖúÖеÄÍæ¼Ò
|
playerMgr = GameWorld.GetPlayerManager()
|
for assPlayerID in assistObj.AssistPlayerIDList[::-1]:
|
assistObj.AssistPlayerIDList.remove(assPlayerID)
|
if assPlayerID in assistMgr.playerAssistingDict:
|
assistingObj = assistMgr.playerAssistingDict[assPlayerID]
|
if assistingObj.GUID == assistGUID:
|
assPlayer = playerMgr.FindPlayerByID(assPlayerID)
|
OnCancelPlayerAssist(assPlayer, assPlayerID, assistObj, reason, isGameServer, isNotify=False)
|
|
SyncServerClearAssist(assistGUID)
|
return
|
|
def OnCancelPlayerAssist(cancelPlayer, cancelPlayerID, assistObj, reason, isGameServer, isNotify=True):
|
'''È¡ÏûÍæ¼ÒÐÖú - ÐÖú·½
|
MapServer ´¥·¢È¡Ïû
|
1. ¹¥»÷ÁËÁíÒ»Ö»boss
|
2. Í˳öÁ˵±Ç°ÐÖúµÄÐÖúµØÍ¼
|
|
GameServer ´¥·¢È¡Ïû
|
3. ÖØÐÂÐÖúÁËÁíÒ»ÌõÐÖúboss/×é¶Ó¸±±¾
|
4. ±»Ìß/Í˳öÏÉÃË
|
5. Ö÷¶¯µãÈ¡Ïû
|
|
ÆäËû£¬·¢²¼·½È¡Ïû·½Ê½
|
6. ·¢²¼·½È¡ÏûÁË·¢²¼µÄÐÖú
|
'''
|
|
assistGUID = assistObj.GUID
|
tagPlayerID = assistObj.PlayerID
|
mapID = assistObj.MapID
|
lineID = assistObj.LineID
|
npcID = assistObj.NPCID
|
objID = assistObj.ObjID
|
serverGroupID = assistObj.ServerGroupID
|
|
GameWorld.DebugLog("È¡ÏûÐÖú: tagPlayerID=%s,mapID=%s,lineID=%s,npcID=%s,objID=%s,reason=%s,isGameServer=%s, %s"
|
% (tagPlayerID, mapID, lineID, npcID, objID, reason, isGameServer, assistGUID), cancelPlayerID)
|
|
assistMgr = PyDataManager.GetPlayerAssistPyManager()
|
if cancelPlayerID in assistMgr.playerAssistingDict:
|
assistMgr.playerAssistingDict.pop(cancelPlayerID)
|
|
if cancelPlayerID in assistObj.AssistPlayerIDList:
|
assistObj.AssistPlayerIDList.remove(cancelPlayerID)
|
|
if cancelPlayer:
|
isTagPlayerReason = reason.startswith("RequestPlayerCancel_")
|
PlayerControl.SetAssistTagPlayerID(cancelPlayer, 0)
|
overPack = ChPyNetSendPack.tagGCAssistOver()
|
overPack.IsTagPlayerReason = isTagPlayerReason
|
overPack.Reason = reason[len("RequestPlayerCancel_"):] if isTagPlayerReason else reason
|
overPack.ReasonLen = len(overPack.Reason)
|
overPack.AssistGUID = assistGUID
|
NetPackCommon.SendFakePack(cancelPlayer, overPack)
|
|
# È¡ÏûbossÐÖú
|
if assistObj.AssistType == AssistType_Boss:
|
|
# GameServerÈ¡ÏûµÄÐèҪ֪ͨÐÖúbossµØÍ¼£¬É¾³ýÐÖúÍæ¼Ò¼Ç¼
|
if isGameServer:
|
assistData = [mapID, "Cancel", cancelPlayerID, lineID, objID, npcID]
|
GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_AssistBoss, assistData)
|
|
if isNotify and cancelPlayer:
|
tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(tagPlayerID)
|
if tagPlayer:
|
# xxxÈ¡Ïû¶ÔÄãÐÖú
|
PlayerControl.NotifyCode(tagPlayer, "AssistCancel", [cancelPlayer.GetName()])
|
|
# È¡Ïû¸±±¾ÐÖú
|
elif assistObj.AssistType == AssistType_TeamFB:
|
pass
|
|
if GameWorld.IsCrossServer() and serverGroupID:
|
sendMsg = {"queryType":"CancelPlayerAssist", "queryData":[assistGUID, reason, isGameServer, cancelPlayerID]}
|
CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_CrossAssist, sendMsg, [serverGroupID])
|
|
return
|
|
def CrossServerMsg_CancelPlayerAssist(queryType, queryData):
|
## ÊÕµ½¿ç·þ·þÎñÆ÷ - È¡ÏûÍæ¼ÒÐÖú
|
|
assistGUID, reason, isGameServer, cancelPlayerID = queryData
|
|
assistMgr = PyDataManager.GetPlayerAssistPyManager()
|
if assistGUID not in assistMgr.allAssistDict:
|
return
|
|
GameWorld.Log("ÊÕµ½¿ç·þÈ¡ÏûÍæ¼ÒÐÖú: %s assistGUID=%s,reason=%s,isGameServer=%s" % (queryType, assistGUID, reason, isGameServer), cancelPlayerID)
|
|
cancelPlayer = GameWorld.GetPlayerManager().FindPlayerByID(cancelPlayerID)
|
if not cancelPlayer:
|
return
|
|
PlayerControl.SetAssistTagPlayerID(cancelPlayer, 0)
|
return
|
|
def CrossServerMsg_ResetPlayerAssist(queryType, queryData):
|
## ÊÕµ½¿ç·þ·þÎñÆ÷ - ÖØÖÃÍæ¼ÒÐÖú
|
##
|
|
playerID, tagPlayerID = queryData
|
|
GameWorld.Log("ÊÕµ½¿ç·þÖØÖÃÍæ¼ÒÐÖú: playerID=%s,tagPlayerID=%s" % (playerID, tagPlayerID), playerID)
|
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
|
if not curPlayer:
|
return
|
PlayerControl.SetAssistTagPlayerID(curPlayer, 0)
|
return
|
|
def __DoBossAssistOver(queryData):
|
## bossÐÖú½áÊø£¬Ò»°ãÊÇboss±»»÷ɱ »ò ±»ÏµÍ³
|
mapID, lineID, npcID, objID, noAssistPlayerIDList, assistAwardItemID, assistAwardResult = queryData
|
isCrossServer = GameWorld.IsCrossServer()
|
assistMgr = PyDataManager.GetPlayerAssistPyManager()
|
for noAssistPlayerID in noAssistPlayerIDList:
|
if noAssistPlayerID not in assistMgr.playerAssistDict:
|
continue
|
playerAssistList = assistMgr.playerAssistDict[noAssistPlayerID]
|
for assistObj in playerAssistList:
|
if assistObj.MapID == mapID and assistObj.LineID == lineID and assistObj.NPCID == npcID and assistObj.ObjID == objID:
|
OnCancelPlayerRequestAssist(assistObj, "BossAssistOver", False)
|
|
# ¿ç·þ·þÎñÆ÷ͬ²½µ½×Ó·þ½áËã½±Àø
|
if isCrossServer and noAssistPlayerID in assistAwardResult:
|
assistPlayerDict = assistAwardResult[noAssistPlayerID]
|
serverGroupID = assistObj.ServerGroupID
|
sendMsg = {"queryType":"BossAssistOver", "queryData":[mapID, lineID, npcID, noAssistPlayerID, assistAwardItemID, assistPlayerDict]}
|
CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_CrossAssist, sendMsg, [serverGroupID])
|
break
|
|
if not assistAwardItemID or not assistAwardResult:
|
return
|
|
if isCrossServer:
|
return
|
|
# ÐÂÔö¸ÐлÊý¾Ý
|
playerMgr = GameWorld.GetPlayerManager()
|
for playerID, assistPlayerDict in assistAwardResult.items():
|
curPlayer = playerMgr.FindPlayerByID(playerID)
|
if not curPlayer:
|
continue
|
AddNewAssistThanks(curPlayer, assistAwardItemID, mapID, lineID, assistPlayerDict, npcID)
|
|
return
|
|
def CrossServerMsg_BossAssistOver(queryType, queryData):
|
## ÊÕµ½¿ç·þ·þÎñÆ÷ - bossÐÖú½áÊø
|
|
mapID, lineID, npcID, noAssistPlayerID, assistAwardItemID, assistPlayerDict = queryData
|
|
GameWorld.Log("ÊÕµ½¿ç·þbossÐÖú½áÊø: mapID=%s,lineID=%s,npcID=%s,assistAwardItemID=%s,assistPlayerDict=%s"
|
% (mapID, lineID, npcID, assistAwardItemID, assistPlayerDict), noAssistPlayerID)
|
|
# ÐÂÔö¸ÐлÊý¾Ý
|
playerMgr = GameWorld.GetPlayerManager()
|
curPlayer = playerMgr.FindPlayerByID(noAssistPlayerID)
|
if not curPlayer:
|
return
|
|
AddNewAssistThanks(curPlayer, assistAwardItemID, mapID, lineID, assistPlayerDict, npcID)
|
|
# ֪ͨµØÍ¼Íæ¼Ò¸ø ÐÖúÀñºÐ
|
queryData = [assistAwardItemID]
|
QueryPlayerResult_PlayerAssist(curPlayer, "CrossNoAssistPlayerAward", queryData)
|
|
# ֪ͨµØÍ¼Íæ¼Ò¸ø »îÔ¾»ý·Ö
|
for assistPlayerID, assistInfo in assistPlayerDict.items():
|
assistPlayer = playerMgr.FindPlayerByID(assistPlayerID)
|
if not assistPlayer:
|
continue
|
if "AssistMoney" not in assistInfo:
|
continue
|
assistMoney = assistInfo["AssistMoney"]
|
isFriend = assistInfo["IsFriend"]
|
|
queryData = [assistMoney, isFriend]
|
QueryPlayerResult_PlayerAssist(assistPlayer, "CrossAssistPlayerAward", queryData)
|
|
return
|
|
def __DoFBAssistOver(queryData):
|
## ¸±±¾ÐÖú½áÊø
|
mapID, lineID, noAssistPlayerID, assistAwardItemID, assistPlayerDict = queryData
|
assistMgr = PyDataManager.GetPlayerAssistPyManager()
|
if noAssistPlayerID not in assistMgr.playerAssistDict:
|
return
|
playerAssistList = assistMgr.playerAssistDict[noAssistPlayerID]
|
for assistObj in playerAssistList:
|
if assistObj.MapID == mapID and assistObj.LineID == lineID:
|
OnCancelPlayerRequestAssist(assistObj, "FBAssistOver", False)
|
break
|
|
if not assistAwardItemID or not assistPlayerDict:
|
return
|
|
# ÐÂÔö¸ÐлÊý¾Ý
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(noAssistPlayerID)
|
if curPlayer:
|
AddNewAssistThanks(curPlayer, assistAwardItemID, mapID, lineID, assistPlayerDict)
|
|
return
|
|
def AddNewAssistThanks(curPlayer, itemID, mapID, lineID, assistPlayerDict, npcID=0, exData=""):
|
## Ìí¼ÓÐÖú¸ÐлÊý¾Ý
|
|
playerID = curPlayer.GetPlayerID()
|
newThanks = PyGameDataStruct.tagDBAssistThanks()
|
newThanks.GUID = str(uuid.uuid1())
|
newThanks.ItemID = itemID
|
newThanks.FamilyID = curPlayer.GetFamilyID()
|
newThanks.PlayerID = playerID
|
newThanks.PlayerName = curPlayer.GetName()
|
newThanks.Job = curPlayer.GetJob()
|
newThanks.LV = curPlayer.GetLV()
|
newThanks.RealmLV = curPlayer.GetOfficialRank()
|
newThanks.MapID = mapID
|
newThanks.LineID = lineID
|
newThanks.NPCID = npcID
|
newThanks.ExData = exData
|
newThanks.ExDataLen = len(exData)
|
newThanks.DailyDateStr = GameWorld.GetDailyDateStr()
|
newThanks.TimeStr = GameWorld.GetCurrentDataTimeStr()
|
newThanks.AssistPlayer = str(assistPlayerDict)
|
newThanks.AssistPlayerLen = len(newThanks.AssistPlayer)
|
|
assistThanksMgr = PyDataManager.GetPlayerAssistThanksPyManager()
|
OnInitAssistThanksData(assistThanksMgr, newThanks)
|
newThanks.Face = curPlayer.GetFace()
|
newThanks.FacePic = curPlayer.GetFacePic()
|
|
GameWorld.DebugLog("Ôö¼ÓÐÖú¸Ðл: itemID=%s,mapID=%s,lineID=%s,npcID=%s,exData=%s" % (itemID, mapID, lineID, npcID, exData), playerID)
|
return
|
|
#// B0 14 ʹÓÃÐÖú¸ÐлÀñºÐ #tagCGUseAssistThanksGift
|
#
|
#struct tagCGUseAssistThanksGift
|
#
|
#{
|
# tagHead Head;
|
# DWORD ItemID;
|
# BYTE IsPreview; //ÊÇ·ñÔ¤ÀÀ£¬·ÇÔ¤ÀÀ¼´È·ÈÏʹÓÃ
|
#};
|
def OnUseAssistThanksGift(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
itemID = clientData.ItemID
|
isPreview = clientData.IsPreview
|
|
playerID = curPlayer.GetPlayerID()
|
assistThanksMgr = PyDataManager.GetPlayerAssistThanksPyManager()
|
useThanks = None
|
if playerID not in assistThanksMgr.playerThanksDict:
|
GameWorld.ErrLog("Íæ¼ÒûÓпÉʹÓõÄÐÖú¸ÐлÀñºÐ!", playerID)
|
else:
|
playerThanksList = assistThanksMgr.playerThanksDict[playerID]
|
for thanks in playerThanksList:
|
if itemID == thanks.ItemID:
|
useThanks = thanks
|
break
|
if not useThanks:
|
GameWorld.ErrLog("Íæ¼ÒûÓиÃÐÖú¸ÐлÀñºÐ!itemID=%s" % (itemID), playerID)
|
#20210226 ÓÅ»¯ÎªÕÒ²»µ½ÐÖúÐÅÏ¢Ò²¿ÉÒÔʹÓ㬷ÀÖ¹µØÍ¼¿Û³ýÎïÆ·Ê§°Üµ¼ÖÂÐÖúÀñºÐÒ»Ö±Áô×ŶøÎÞ·¨Ê¹ÓÃ
|
#return
|
|
GameWorld.DebugLog("Íæ¼ÒʹÓÃÐÖú¸ÐлÀñºÐ!itemID=%s,isPreview=%s" % (itemID, isPreview), playerID)
|
# Ô¤ÀÀ
|
if isPreview:
|
previewPack = ChPyNetSendPack.tagGCUseAssistThanksGiftPreview()
|
if not useThanks:
|
previewPack.ItemID = itemID
|
previewPack.MapID = 31140 # ÔÝËæÒâ¸øÒ»¸ö¿ÉÐÖúµÄµØÍ¼ID
|
NetPackCommon.SendFakePack(curPlayer, previewPack)
|
return
|
previewPack.ItemID = useThanks.ItemID
|
previewPack.MapID = useThanks.MapID
|
previewPack.LineID = useThanks.LineID
|
previewPack.NPCID = useThanks.NPCID
|
previewPack.ExData = useThanks.ExData
|
previewPack.ExDataLen = useThanks.ExDataLen
|
previewPack.AssistPlayerList = []
|
for assistPlayerID, assistPlayerInfoDict in useThanks.AssistPlayerDict.items():
|
if "PlayerName" not in assistPlayerInfoDict:
|
continue
|
assistPlayerInfo = ChPyNetSendPack.tagGCAssistPlayerInfo()
|
assistPlayerInfo.PlayerID = assistPlayerID
|
assistPlayerInfo.PlayerName = assistPlayerInfoDict["PlayerName"]
|
assistPlayerInfo.Job = assistPlayerInfoDict["Job"]
|
assistPlayerInfo.LV = assistPlayerInfoDict["LV"]
|
assistPlayerInfo.RealmLV = assistPlayerInfoDict["RealmLV"]
|
assistPlayerInfo.Face = assistPlayerInfoDict.get("Face", 0)
|
assistPlayerInfo.FacePic = assistPlayerInfoDict.get("FacePic", 0)
|
previewPack.AssistPlayerList.append(assistPlayerInfo)
|
previewPack.AssistPlayerCount = len(previewPack.AssistPlayerList)
|
NetPackCommon.SendFakePack(curPlayer, previewPack)
|
return
|
|
ipyData = IpyGameDataPY.GetIpyGameData("AssistThanksGift", itemID)
|
if not ipyData:
|
return
|
|
queryData = [itemID]
|
QueryPlayerResult_PlayerAssist(curPlayer, "UseAssistThanksGift", queryData)
|
|
if not useThanks:
|
return
|
useThanks.ThanksState = 1 # ÉèÖÃΪÒѸÐл
|
playerThanksList.remove(useThanks) # ÒÆ³ýÒѸÐл
|
|
# ֪ͨÐÖúÍæ¼Ò¿É½ÓÊյĸÐл¸öÊý
|
playerMgr = GameWorld.GetPlayerManager()
|
for assistPlayerID in useThanks.AssistPlayerDict.keys():
|
assistPlayer = playerMgr.FindPlayerByID(assistPlayerID)
|
if assistPlayer:
|
SyncCanGetAssistThanksGiftCount(assistPlayer)
|
return
|
|
#// B0 15 ½ÓÊÕÐÖú¸ÐлÀñÎï #tagCGGetAssistThanksGift
|
#
|
#struct tagCGGetAssistThanksGift
|
#
|
#{
|
# tagHead Head;
|
# BYTE IsPreview; //ÊÇ·ñÔ¤ÀÀ£¬·ÇÔ¤ÀÀ¼´È·ÈÏÁìÈ¡£¬ÎÞ¶îÍâ½±ÀøÈ·ÈÏʱҲÐèÒª»Ø¸´ÁìÈ¡°ü´ú±íÒѶÁ
|
#};
|
def OnGetAssistThanksGift(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
isPreview = clientData.IsPreview
|
|
playerID = curPlayer.GetPlayerID()
|
assistThanksMgr = PyDataManager.GetPlayerAssistThanksPyManager()
|
if playerID not in assistThanksMgr.assistPlayerThanksDict:
|
GameWorld.ErrLog("Íæ¼ÒûÓпɽÓÊÕ¸ÐлµÄÐÖú¸ÐлÀñºÐ!", playerID)
|
return
|
assistPlayerThanksList = assistThanksMgr.assistPlayerThanksDict[playerID]
|
getThanks = None
|
for thanks in assistPlayerThanksList:
|
if thanks.ThanksState:
|
getThanks = thanks
|
break
|
if not getThanks:
|
GameWorld.ErrLog("ÕÒ²»µ½Íæ¼Ò¿É½ÓÊÕ¸ÐлµÄÐÖú¸ÐлÀñºÐ!", playerID)
|
return
|
itemID = getThanks.ItemID
|
ipyData = IpyGameDataPY.GetIpyGameData("AssistThanksGift", itemID)
|
if not ipyData:
|
return
|
if playerID not in getThanks.AssistPlayerDict:
|
return
|
assistPlayerInfoDict = getThanks.AssistPlayerDict[playerID]
|
todayGiftCount = assistPlayerInfoDict.get("TodayGiftCount", 0) # ¸ÃÀñºÐµ±ÈÕÒÑÁìÈ¡¶îÍâ½±Àø´ÎÊý
|
isExtraAward = 1 if todayGiftCount < ipyData.GetAssistAwardCount() else 0
|
|
GameWorld.DebugLog("½ÓÊÕÐÖú¸ÐлÀñÎï: itemID=%s,isPreview=%s,isExtraAward=%s,DailyDateStr=%s"
|
% (itemID, isPreview, isExtraAward, getThanks.DailyDateStr), playerID)
|
|
# Ô¤ÀÀ
|
if isPreview:
|
previewPack = ChPyNetSendPack.tagGCGetAssistThanksGiftPreview()
|
previewPack.ItemID = getThanks.ItemID
|
previewPack.PlayerID = getThanks.PlayerID
|
previewPack.PlayerName = getThanks.PlayerName
|
previewPack.Job = getThanks.Job
|
previewPack.LV = getThanks.LV
|
previewPack.RealmLV = getThanks.RealmLV
|
previewPack.Face = getThanks.Face
|
previewPack.FacePic = getThanks.FacePic
|
previewPack.MapID = getThanks.MapID
|
previewPack.LineID = getThanks.LineID
|
previewPack.NPCID = getThanks.NPCID
|
previewPack.ExData = getThanks.ExData
|
previewPack.ExDataLen = len(getThanks.ExData)
|
previewPack.TimeStr = getThanks.TimeStr
|
previewPack.ExtraAward = isExtraAward
|
NetPackCommon.SendFakePack(curPlayer, previewPack)
|
return
|
|
assistPlayerInfoDict["IsGet"] = 1
|
isAllGet = True
|
for playerDict in getThanks.AssistPlayerDict.values():
|
if "IsGet" not in playerDict:
|
isAllGet = False
|
break
|
|
# ËùÓÐÈ˶¼½ÓÊÕ¸ÐлÁË£¬É¾³ý¸ÃÐÖú¸ÐлÊý¾Ý
|
if isAllGet:
|
GameWorld.DebugLog(" ËùÓÐÈ˶¼¸ÐлÁË£¬ÒƳý¸ÃÐÖú¸Ðл!", playerID)
|
if getThanks in assistThanksMgr.allAssistThanksList:
|
assistThanksMgr.allAssistThanksList.remove(getThanks)
|
|
assistPlayerThanksList.remove(getThanks) # ÒÆ³ý
|
|
updateTodayGiftCount = todayGiftCount + 1
|
# ¸üе±Ìì¸ÃÀñºÐIDÒÑÁìÈ¡´ÎÊý
|
for thanks in assistPlayerThanksList:
|
if getThanks.DailyDateStr != thanks.DailyDateStr or getThanks.ItemID != thanks.ItemID:
|
continue
|
if playerID not in thanks.AssistPlayerDict:
|
continue
|
assistPlayerInfoDict = thanks.AssistPlayerDict[playerID]
|
assistPlayerInfoDict["TodayGiftCount"] = updateTodayGiftCount
|
|
SyncCanGetAssistThanksGiftCount(curPlayer, True)
|
|
isCurDailyDate = getThanks.DailyDateStr == GameWorld.GetDailyDateStr()
|
|
# Èç¹ûÊǾµÏñÐÖúµÄ£¬¸üнñÈÕ½ÓÊÕ¸ÐлÀñºÐ´ÎÊý
|
if isCurDailyDate:
|
if IpyGameDataPY.GetIpyGameDataNotLog("FBHelpBattle", getThanks.MapID, getThanks.LineID):
|
PlayerFBHelpBattle.UpdateGetThanksGiftCountDict(curPlayer, itemID, updateTodayGiftCount)
|
|
# ֪ͨµØÍ¼
|
queryData = [itemID, isExtraAward, isCurDailyDate, updateTodayGiftCount]
|
QueryPlayerResult_PlayerAssist(curPlayer, "GetAssistThanksGift", queryData)
|
return
|
|
def SyncCanGetAssistThanksGiftCount(curPlayer, isForce=False):
|
## ֪ͨ¿É½ÓÊÕÐÖú¸ÐлÀñÎï¸öÊý
|
|
playerID = curPlayer.GetPlayerID()
|
assistThanksMgr = PyDataManager.GetPlayerAssistThanksPyManager()
|
if playerID not in assistThanksMgr.assistPlayerThanksDict:
|
return
|
assistPlayerThanksList = assistThanksMgr.assistPlayerThanksDict[playerID]
|
canGetCount = 0
|
for thanks in assistPlayerThanksList:
|
if thanks.ThanksState:
|
canGetCount += 1
|
|
if not canGetCount and not isForce:
|
return
|
|
countPack = ChPyNetSendPack.tagGCCanGetAssistThanksGiftCount()
|
countPack.CanGetCount = canGetCount
|
NetPackCommon.SendFakePack(curPlayer, countPack)
|
return
|
|
def SyncFamilyAssist(curPlayer):
|
## ͬ²½µ±Ç°ÏÉÃËËùÓÐÐÖúÇëÇóÐÅÏ¢
|
familyID = curPlayer.GetFamilyID()
|
if not familyID:
|
return
|
assistMgr = PyDataManager.GetPlayerAssistPyManager()
|
familyAssistList = []
|
for assistObj in assistMgr.allAssistDict.values():
|
if not assistObj.FamilyID or familyID != assistObj.FamilyID or assistObj.OffLineTime:
|
continue
|
familyAssistList.append(assistObj)
|
if not familyAssistList:
|
return
|
NetPackCommon.SendFakePack(curPlayer, GetAssistInfoListPack(familyAssistList))
|
return
|
|
def SyncFamilyClearAssist(familyID, assistGUID):
|
# ·â°ü֪ͨÏÉÃËÇå³ýÐÖú
|
clearPack = ChPyNetSendPack.tagGCClearAssist()
|
clearPack.AssistGUID = assistGUID
|
PlayerFamily.SendFamilyFakePack(familyID, clearPack)
|
return
|
|
def SyncServerAssist(assistList):
|
# ֪ͨ±¾·þÍæ¼ÒÐÖúÇëÇóÐÅÏ¢
|
funcLimitLV = PlayerControl.GetFuncLimitLV(ShareDefine.GameFuncID_PenglaiBoss)
|
clientPack = GetAssistInfoListPack(assistList)
|
playerManager = GameWorld.GetPlayerManager()
|
for i in xrange(playerManager.GetActivePlayerCount()):
|
player = playerManager.GetActivePlayerAt(i)
|
if player == None:
|
continue
|
if player.GetLV() < funcLimitLV:
|
continue
|
if PlayerControl.GetIsTJG(player):
|
continue
|
NetPackCommon.SendFakePack(player, clientPack)
|
return
|
|
def SyncServerClearAssist(assistGUID):
|
# ֪ͨ±¾·þÍæ¼ÒÇå³ýÐÖú
|
clearPack = ChPyNetSendPack.tagGCClearAssist()
|
clearPack.AssistGUID = assistGUID
|
funcLimitLV = PlayerControl.GetFuncLimitLV(ShareDefine.GameFuncID_PenglaiBoss)
|
playerManager = GameWorld.GetPlayerManager()
|
for i in xrange(playerManager.GetActivePlayerCount()):
|
player = playerManager.GetActivePlayerAt(i)
|
if player == None:
|
continue
|
if player.GetLV() < funcLimitLV:
|
continue
|
if PlayerControl.GetIsTJG(player):
|
continue
|
NetPackCommon.SendFakePack(player, clearPack)
|
return
|
|
|