From 54d84deb1ca272784a1acc2fe33277ec2b4f5f37 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期四, 09 一月 2020 17:42:46 +0800 Subject: [PATCH] 8346 【恺英】【后端】协助系统(副本协助奖励仅在发起玩家在线时才结算;增加协助玩家协助状态设置; 跨服服务器暂屏蔽发起协助) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAssist.py | 134 ++++++++++++++++++++++++++++++++------------ 1 files changed, 97 insertions(+), 37 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAssist.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAssist.py index 9a207ab..61815ea 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAssist.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAssist.py @@ -42,6 +42,20 @@ Sync_TodayAssistMoneyInfo(curPlayer) return +def OnPlayerLeaveMap(curPlayer): + ## 玩家离开地图处理 + + NPCHurtManager.OnPlayerLeaveMap(curPlayer) + + mapID = curPlayer.GetMapID() + if GameWorld.GetMap().GetMapFBTypeByMapID(mapID) == IPY_GameWorld.fbtTeam: + mapAssistGiftDict = IpyGameDataPY.GetFuncEvalCfg("AssistAward", 2, {}) + if str(mapID) in mapAssistGiftDict and PlayerControl.GetAssistTagPlayerID(curPlayer): + lineID = PlayerControl.GetFBFuncLineID(curPlayer) + OnCancelAssistTeamFB(curPlayer.GetPlayerID(), mapID, lineID, "LeaveMap") + + return + #// B0 10 请求协助Boss #tagCMRequestAssistBoss # #struct tagCMRequestAssistBoss @@ -56,6 +70,9 @@ playerID = curPlayer.GetPlayerID() objID = clientData.ObjID npcID = clientData.NPCID + + if GameWorld.IsCrossServer(): + return if not curPlayer.GetFamilyID(): GameWorld.DebugLog("没有仙盟不能请求协助!", playerID) @@ -106,6 +123,9 @@ mapID = clientData.MapID lineID = clientData.LineID + if GameWorld.IsCrossServer(): + return + if not curPlayer.GetFamilyID(): GameWorld.DebugLog("没有仙盟不能请求协助!", playerID) return @@ -141,6 +161,12 @@ ## 开始协助组队副本,协助玩家进入副本调用 queryData = [mapID, lineID, tagPlayerID] QueryGameServer_PlayerAssist(playerID, "OnStartAssistTeamFB", queryData) + return + +def OnCancelAssistTeamFB(playerID, mapID, lineID, reason): + ## 取消副本协助 + queryData = [mapID, lineID, reason] + QueryGameServer_PlayerAssist(playerID, "OnCancelAssistTeamFB", queryData) return def QueryGameServer_PlayerAssist(playerID, queryType, queryData): @@ -209,35 +235,72 @@ return -def SetFBNoAssistPlayerID(curPlayer): - ## 设置副本非协助玩家ID,玩家进入副本时调用 - gameFB = GameWorld.GetGameFB() - if gameFB.GetGameFBDictByKey("FBNoAssistPlayerID"): +def OnPlayerEnterAssistFB(curPlayer, mapID, lineID=0): + ## 玩家进入协助副本 + + if GameWorld.GetMap().GetMapFBTypeByMapID(mapID) != IPY_GameWorld.fbtTeam: return - if curPlayer.GetTeamID(): - if curPlayer.GetTeamLV() != IPY_GameWorld.tmlLeader: - return - noAssistPlayerID = curPlayer.GetPlayerID() - gameFB.SetGameFBDict("FBNoAssistPlayerID", noAssistPlayerID) - GameWorld.DebugLog("设置副本非协助玩家: noAssistPlayerID=%s" % noAssistPlayerID) - return - -def OnFBAssistOver(mapID, lineID=0): - ## 副本协助结束 - assistPlayerMoneyDict = {} - assistMoneyType = ShareDefine.TYPE_Price_FamilyActivity + + mapAssistGiftDict = IpyGameDataPY.GetFuncEvalCfg("AssistAward", 2, {}) + if str(mapID) not in mapAssistGiftDict: + return + + playerID = curPlayer.GetPlayerID() gameFB = GameWorld.GetGameFB() noAssistPlayerID = gameFB.GetGameFBDictByKey("FBNoAssistPlayerID") - GameWorld.DebugLog("副本协助结算: mapID=%s,lineID=%s,noAssistPlayerID=%s" % (mapID, lineID, noAssistPlayerID)) + if noAssistPlayerID: + if playerID != noAssistPlayerID: + OnStartAssistTeamFB(playerID, mapID, lineID, noAssistPlayerID) + return - if not noAssistPlayerID: - return noAssistPlayerID, assistMoneyType, assistPlayerMoneyDict - - liheItemID, assistMoney = 0, 0 - mapAssistGiftDict = IpyGameDataPY.GetFuncEvalCfg("AssistAward", 2, {}) - if str(mapID) in mapAssistGiftDict: - liheItemID, assistMoney = mapAssistGiftDict[str(mapID)] + if curPlayer.GetTeamID(): + if curPlayer.GetTeamLV() != IPY_GameWorld.tmlLeader: + # 非队长先进入的,暂不处理,等待队长进入后统一处理 + return + noAssistPlayerID = playerID # 队长或无队伍进入则为非协助玩家 + gameFB.SetGameFBDict("FBNoAssistPlayerID", noAssistPlayerID) + GameWorld.DebugLog("设置副本非协助玩家: noAssistPlayerID=%s" % noAssistPlayerID) + + copyPlayerManager = GameWorld.GetMapCopyPlayerManager() + for index in xrange(copyPlayerManager.GetPlayerCount()): + player = copyPlayerManager.GetPlayerByIndex(index) + if not player: + continue + fbPlayerID = player.GetPlayerID() + if fbPlayerID == noAssistPlayerID: + continue + if PlayerControl.GetAssistTagPlayerID(player) != noAssistPlayerID: + OnStartAssistTeamFB(fbPlayerID, mapID, lineID, noAssistPlayerID) + + return + +def OnFBAssistOver(isPass, mapID, lineID=0): + ''' 副本协助结束 + @return: noAssistPlayerID, assistMoneyType, assistPlayerMoneyDict + 当 noAssistPlayerID 为0时代表没有成功结算协助,副本额外的协助奖励也不能结算,防止被刷协助奖励 + ''' + assistPlayerMoneyDict = {} + assistMoneyType = ShareDefine.TYPE_Price_FamilyActivity + defaultReturn = (0, assistMoneyType, assistPlayerMoneyDict) + gameFB = GameWorld.GetGameFB() + noAssistPlayerID = gameFB.GetGameFBDictByKey("FBNoAssistPlayerID") + GameWorld.DebugLog("副本协助结算: isPass=%s,mapID=%s,lineID=%s,noAssistPlayerID=%s" % (isPass, mapID, lineID, noAssistPlayerID)) + + if not isPass or not noAssistPlayerID: + return defaultReturn + + copyPlayerManager = GameWorld.GetMapCopyPlayerManager() + noAssistPlayer = copyPlayerManager.FindPlayerByID(noAssistPlayerID) + if not noAssistPlayer: + GameWorld.DebugLog(" 非协助玩家不在,不结算协助奖励!") + return defaultReturn + + mapAssistGiftDict = IpyGameDataPY.GetFuncEvalCfg("AssistAward", 2, {}) + if str(mapID) not in mapAssistGiftDict: + return defaultReturn + liheItemID, assistMoney = mapAssistGiftDict[str(mapID)] + friendList, memFamilyIDDict = [], {} teamID = GameWorld.GetGameWorld().GetPropertyID() if teamID in PyGameData.g_teamFBMemRelationDict: @@ -246,8 +309,6 @@ assistAwardItemID = liheItemID assistPlayerDict = {} - copyPlayerManager = GameWorld.GetMapCopyPlayerManager() - noAssistPlayer = copyPlayerManager.FindPlayerByID(noAssistPlayerID) for index in xrange(copyPlayerManager.GetPlayerCount()): curPlayer = copyPlayerManager.GetPlayerByIndex(index) if not curPlayer: @@ -267,18 +328,17 @@ GameWorld.DebugLog("协助方给活跃令奖励: assistPlayerID=%s,assistMoney=%s,isFriend=%s,addAssistMoney=%s" % (assistPlayerID, assistMoney, isFriend, addAssistMoney), mapID, lineID) - if noAssistPlayer: - todayGiftCount = assistPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GetThanksGiftCount % liheItemID) - assistPlayerDict[assistPlayerID] = {"PlayerName":assistPlayer.GetPlayerName(), "Job":assistPlayer.GetJob(), - "LV":assistPlayer.GetLV(), "RealmLV":assistPlayer.GetOfficialRank(), - "TodayGiftCount":todayGiftCount} - - # 暂定支持同队伍不同仙盟间协助 - if assistFamilyID and assistFamilyID == noAssistPlayerFamilyID: - notifyParam = [assistPlayer.GetPlayerName(), noAssistPlayer.GetPlayerName(), mapID] - PlayerControl.FamilyNotify(assistFamilyID, "AssistFBFinish", notifyParam) + todayGiftCount = assistPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GetThanksGiftCount % liheItemID) + assistPlayerDict[assistPlayerID] = {"PlayerName":assistPlayer.GetPlayerName(), "Job":assistPlayer.GetJob(), + "LV":assistPlayer.GetLV(), "RealmLV":assistPlayer.GetOfficialRank(), + "TodayGiftCount":todayGiftCount} + + # 暂定支持同队伍不同仙盟间协助 + if assistFamilyID and assistFamilyID == noAssistPlayerFamilyID: + notifyParam = [assistPlayer.GetPlayerName(), noAssistPlayer.GetPlayerName(), mapID] + PlayerControl.FamilyNotify(assistFamilyID, "AssistFBFinish", notifyParam) - if noAssistPlayer and assistPlayerDict: + if assistPlayerDict: GameWorld.DebugLog("发布方给感谢礼盒奖励: noAssistPlayerID=%s,assistAwardItemID=%s" % (noAssistPlayerID, assistAwardItemID), mapID, lineID) ItemControler.GivePlayerItemOrMail(noAssistPlayer, [[assistAwardItemID, 1, 0]]) -- Gitblit v1.8.0