From b55a8f02a5e1dd8cddb56452a163cb9244803c6e Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 02 八月 2022 14:35:09 +0800 Subject: [PATCH] 9387 【主干】【越南】【bt7】【后端】支持跨服协助 --- ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py | 398 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 367 insertions(+), 31 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py index 2348d7e..011f3d4 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerAssist.py @@ -19,6 +19,7 @@ import PyDataManager import IpyGameDataPY import NetPackCommon +import CrossRealmMsg import PyGameDataStruct import PlayerFBHelpBattle import ChPyNetSendPack @@ -192,12 +193,14 @@ 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 @@ -220,10 +223,11 @@ 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: @@ -293,10 +297,14 @@ 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 @@ -313,6 +321,15 @@ 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: @@ -383,7 +400,8 @@ 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) @@ -397,16 +415,117 @@ 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 @@ -502,10 +621,11 @@ 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() @@ -525,23 +645,125 @@ 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): @@ -550,7 +772,7 @@ familyID = curPlayer.GetFamilyID() if not familyID: return - mapID, lineID = queryData + mapID, lineID = queryData playerID = curPlayer.GetPlayerID() @@ -588,10 +810,12 @@ 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 @@ -608,15 +832,16 @@ 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: @@ -671,9 +896,10 @@ 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: @@ -710,8 +936,49 @@ # 暂不需要处理 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): @@ -735,6 +1002,7 @@ 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) @@ -774,11 +1042,34 @@ 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: @@ -787,9 +1078,19 @@ 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 # 新增感谢数据 @@ -802,6 +1103,41 @@ 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 -- Gitblit v1.8.0