| | |
| | | import PyDataManager
|
| | | import IpyGameDataPY
|
| | | import NetPackCommon
|
| | | import CrossRealmMsg
|
| | | import PyGameDataStruct
|
| | | import PlayerFBHelpBattle
|
| | | import ChPyNetSendPack
|
| | |
| | | if leavePlayerID in assistMgr.playerNoSaveDBAssistDict:
|
| | | playerAssistList = assistMgr.playerNoSaveDBAssistDict[leavePlayerID]
|
| | | for assistObj in playerAssistList[::-1]:
|
| | | OnCancelPlayerRequestAssist(assistObj, "LeaveFamily", True)
|
| | | if assistObj.FamilyID:
|
| | | OnCancelPlayerRequestAssist(assistObj, "LeaveFamily", True)
|
| | |
|
| | | # 玩家协助中的
|
| | | if leavePlayerID in assistMgr.playerAssistingDict:
|
| | | assistObj = assistMgr.playerAssistingDict[leavePlayerID]
|
| | | OnCancelPlayerAssist(leavePlayer, leavePlayerID, assistObj, "LeaveFamily", True)
|
| | | if assistObj.FamilyID:
|
| | | OnCancelPlayerAssist(leavePlayer, leavePlayerID, assistObj, "LeaveFamily", True)
|
| | |
|
| | | return
|
| | |
|
| | |
| | |
|
| | | return
|
| | |
|
| | | def OnInitAssistData(dbData, isSaveDB):
|
| | | def OnInitAssistData(dbData, isSaveDB, serverGroupID=0):
|
| | | ## 加载协助数据额外处理
|
| | | setattr(dbData, "IsSaveDB", isSaveDB) # 是否保存数据库,离线可协助的需要存库,如挖矿类
|
| | | setattr(dbData, "ObjID", 0) # NPC实例ID
|
| | | setattr(dbData, "ServerGroupID", serverGroupID)
|
| | |
|
| | | assistType = AssistType_Unknown
|
| | | if dbData.NPCID:
|
| | |
| | | GameWorld.DebugLog("不能协助自己!")
|
| | | return
|
| | |
|
| | | if assistObj.FamilyID != curPlayer.GetFamilyID():
|
| | | 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
|
| | |
| | | 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:
|
| | |
| | | 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)
|
| | | GameWorld.DebugLog("开始协助: tagPlayerID=%s,mapID=%s,lineID=%s,npcID=%s,objID=%s" |
| | | % (tagPlayerID, mapID, lineID, npcID, objID), playerID)
|
| | |
|
| | | # 设置协助
|
| | | PlayerControl.SetAssistTagPlayerID(curPlayer, tagPlayerID)
|
| | |
| | | tagPlayerName = tagPlayer.GetName()
|
| | | tagTeamID = tagPlayer.GetTeamID()
|
| | | isFriend = PlayerFriend.IsFriend(assistPlayerID, tagPlayerID)
|
| | | assistData = [mapID, "Start", assistGUID, assistPlayerID, assistPlayerName, isFriend, tagPlayerID, tagPlayerName, tagTeamID, lineID, objID, npcID]
|
| | | 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 = queryData
|
| | | 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
|
| | | |
| | | # 设置协助
|
| | | PlayerControl.SetAssistTagPlayerID(assistPlayer, tagPlayerID)
|
| | |
|
| | | assistPack = ChPyNetSendPack.tagGCAssistingInfo()
|
| | | assistPack.AssistGUID = assistGUID
|
| | |
| | | def __DoRequestAssistBoss(curPlayer, queryData):
|
| | | ## 请求协助Boss
|
| | |
|
| | | isCrossServer = GameWorld.IsCrossServer()
|
| | | familyID = curPlayer.GetFamilyID()
|
| | | if not familyID:
|
| | | if not familyID and not isCrossServer:
|
| | | return
|
| | | mapID, lineID, npcID, objID, npcLV = queryData
|
| | | mapID, lineID, npcID, objID, npcLV, serverGroupID = queryData
|
| | |
|
| | | playerID = curPlayer.GetPlayerID()
|
| | |
|
| | |
| | |
|
| | | if not reqAssistObj:
|
| | | addNewAssist = True
|
| | | reqAssistObj = __AddNewAssist(assistMgr, curPlayer, mapID, lineID, npcID, objID)
|
| | | reqAssistObj = __AddNewAssist(assistMgr, curPlayer, mapID, lineID, npcID, objID, serverGroupID=serverGroupID)
|
| | |
|
| | | if not reqAssistObj:
|
| | | return
|
| | |
|
| | | # 通知本仙盟玩家
|
| | | PlayerFamily.SendFamilyFakePack(familyID, GetAssistInfoListPack([reqAssistObj]))
|
| | | # 求助信息已发送,请等待盟友支援
|
| | | PlayerControl.NotifyCode(curPlayer, "AssistRequestOK")
|
| | |
|
| | | # 广播仙盟请求
|
| | | requestCount = 1
|
| | | if not addNewAssist:
|
| | | requestCount = min(curPlayer.GetDictByKey("AssistBossRequestCount") + 1, 999)
|
| | | curPlayer.SetDict("AssistBossRequestCount", requestCount)
|
| | | notifyNum = (requestCount - 1) % 3
|
| | | PlayerControl.FamilyNotify(familyID, "AssistBossRequest%s" % notifyNum, [curPlayer.GetName(), mapID, npcLV, npcID])
|
| | | |
| | | 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.playerNoSaveDBAssistDict:
|
| | | playerAssistList = assistMgr.playerNoSaveDBAssistDict[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
|
| | | |
| | | # 通知本服玩家
|
| | | funcLimitLV = PlayerControl.GetFuncLimitLV(ShareDefine.GameFuncID_PenglaiBoss)
|
| | | clientPack = GetAssistInfoListPack([reqAssistObj])
|
| | | 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)
|
| | | |
| | | # 广播请求
|
| | | 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
|
| | | |
| | | 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
|
| | | mapID, lineID = queryData
|
| | |
|
| | | playerID = curPlayer.GetPlayerID()
|
| | |
|
| | |
| | | PlayerControl.FamilyNotify(familyID, "AssistFBRequest%s" % notifyNum, [curPlayer.GetName(), mapID])
|
| | | return
|
| | |
|
| | | def __AddNewAssist(assistMgr, curPlayer, mapID, lineID, npcID=0, objID=0, exData="", isSaveDB=0):
|
| | | def __AddNewAssist(assistMgr, curPlayer, mapID, lineID, npcID=0, objID=0, exData="", isSaveDB=0, assistGUID="", serverGroupID=0):
|
| | | ## 添加新协助请求
|
| | | assistGUID = str(uuid.uuid1())
|
| | | familyID = curPlayer.GetFamilyID()
|
| | | 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.ExDataLen = len(exData)
|
| | |
|
| | | # 以下是非DB字段属性
|
| | | OnInitAssistData(assistObj, isSaveDB)
|
| | | OnInitAssistData(assistObj, isSaveDB, serverGroupID)
|
| | | assistObj.ObjID = objID
|
| | |
|
| | | #assistMgr = PyDataManager.GetPlayerAssistPyManager()
|
| | | assistMgr.allAssistDict[assistGUID] = assistObj
|
| | | if familyID not in assistMgr.familyAssistDict:
|
| | | assistMgr.familyAssistDict[familyID] = []
|
| | | familyAssistList = assistMgr.familyAssistDict[familyID]
|
| | | familyAssistList.append(assistObj)
|
| | | if familyID:
|
| | | if familyID not in assistMgr.familyAssistDict:
|
| | | assistMgr.familyAssistDict[familyID] = []
|
| | | familyAssistList = assistMgr.familyAssistDict[familyID]
|
| | | familyAssistList.append(assistObj)
|
| | |
|
| | | if not isSaveDB:
|
| | | if playerID not in assistMgr.playerNoSaveDBAssistDict:
|
| | |
| | | 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" |
| | | % (mapID, lineID, npcID, objID, reason, isGameServer, assistGUID))
|
| | | 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:
|
| | |
| | | # 暂不需要处理
|
| | | pass
|
| | |
|
| | | # 放最后 |
| | | SyncFamilyClearAssist(familyID, assistGUID)
|
| | | # 放最后
|
| | | 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
|
| | | |
| | | GameWorld.Log("收到跨服取消协助boss请求: %s assistGUID=%s,reason=%s,isGameServer=%s" % (queryType, assistGUID, reason, isGameServer), playerID)
|
| | | |
| | | if playerID in assistMgr.playerNoSaveDBAssistDict:
|
| | | playerAssistList = assistMgr.playerNoSaveDBAssistDict[playerID]
|
| | | if assistObj in playerAssistList:
|
| | | playerAssistList.remove(assistObj)
|
| | | |
| | | # 通知本服玩家
|
| | | 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
|
| | |
|
| | | def OnCancelPlayerAssist(cancelPlayer, cancelPlayerID, assistObj, reason, isGameServer, isNotify=True):
|
| | |
| | | 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)
|
| | |
| | | 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 __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.playerNoSaveDBAssistDict:
|
| | |
| | | for assistObj in playerAssistList:
|
| | | if assistObj.MapID == mapID and assistObj.LineID == lineID and assistObj.NPCID == npcID and assistObj.ObjID == objID:
|
| | | OnCancelPlayerRequestAssist(assistObj, "BossAssistOver", False)
|
| | | break
|
| | |
|
| | | # 跨服服务器同步到子服结算奖励
|
| | | 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
|
| | |
|
| | | # 新增感谢数据
|
| | |
| | |
|
| | | 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
|