From b96575fc034c6f56273ee3a7346a10f489bd48a7 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期四, 29 十一月 2018 02:08:48 +0800 Subject: [PATCH] 4762 【后端】混乱妖域社交关系加成取实时,离线玩家不算;增加同步社交总加成信息; --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBHelpBattle.py | 107 ++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 73 insertions(+), 34 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBHelpBattle.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBHelpBattle.py index e766f97..5c74fc2 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBHelpBattle.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBHelpBattle.py @@ -474,7 +474,7 @@ # % (todayXianyuanCoin, playerXianyuanCoinUpper), playerID) # return - relationAdd, relationPlayerID, relationPlayerName = 0, 0, "" + relation, relationAdd, relationPlayerID, relationPlayerName = 0, 0, 0, "" fbType = GameWorld.GetMap().GetMapFBType() if fbType == IPY_GameWorld.fbtSingle: @@ -486,8 +486,9 @@ relationAddList = relationCoinAddDict.get(str(relation), []) relationAdd += relationAddList[0] if len(relationAddList) == 2 else 0 elif fbType == IPY_GameWorld.fbtTeam: - relationAdd, relationPlayerID, relationPlayerName = __GetTeamFBMemRelationInfo(curPlayer, relationCoinAddDict, isHelp) - + if playerID in PyGameData.g_teamFBMemRelationAddDict: + relation, relationAdd, relationPlayerID, relationPlayerName = PyGameData.g_teamFBMemRelationAddDict.pop(playerID) + coinAdd = 0 if baseFBPoint: coinAdd = int((baseFBPoint + relationAdd) * addCoinRate / 10000.0) @@ -507,62 +508,100 @@ msgPack = ChPyNetSendPack.tagMCAddXianyuanCoinMsg() msgPack.MapID = mapID msgPack.FuncLineID = lineID + msgPack.Relation = relation + msgPack.RelationCoinAdd = relationAdd msgPack.XianyuanCoinAdd = coinAddReal + msgPack.Reason = reason msgPack.CallPlayerID = relationPlayerID msgPack.CallPlayerName = relationPlayerName msgPack.NameLen = len(msgPack.CallPlayerName) - msgPack.Reason = reason NetPackCommon.SendFakePack(curPlayer, msgPack) return coinAddReal, reason -def __GetTeamFBMemRelationInfo(curPlayer, relationCoinAddDict, isHelp): +def __GetTeamFBMemRelationInfo(curPlayer, isHelp, leavePlayerID): + ## 计算队员间相互加成信息,离线玩家不算 + relation = 0 relationAdd = 0 # 社交关系加成 relationPlayerID = 0 relationPlayerName = "" teamID = curPlayer.GetTeamID() if teamID not in PyGameData.g_teamFBMemRelationDict: - return relationAdd, relationPlayerID, relationPlayerName + return relation, relationAdd, relationPlayerID, relationPlayerName + playerManager = GameWorld.GetMapCopyPlayerManager() friendList, memFamilyIDDict, memNameDict = PyGameData.g_teamFBMemRelationDict[teamID] relationList = IpyGameDataPY.GetFuncEvalCfg("HelpBattlePoint", 3, []) # 社交关系优先级 + relationCoinAddDict = IpyGameDataPY.GetFuncEvalCfg("HelpBattlePoint", 2, {}) # 社交关系加成 {"社交关系":[过关加成, 助战加成], ...} playerID = curPlayer.GetPlayerID() familyID = curPlayer.GetFamilyID() if isHelp: # 助战的随便取一位优先级最高的即可 - for checkRelation in relationList: - memRelation, relationPlayerID = 0, 0 - if checkRelation == 1: - for memPlayerID in memFamilyIDDict.keys(): - if [playerID, memPlayerID] in friendList: - memRelation = checkRelation - relationPlayerID = memPlayerID - break - if checkRelation == 2: - for memPlayerID, memFamilyID in memFamilyIDDict.items(): - if playerID != memPlayerID and familyID and familyID == memFamilyID: - memRelation = checkRelation - relationPlayerID = memPlayerID - break - if memRelation and relationPlayerID: - relationAddList = relationCoinAddDict.get(str(memRelation), []) - relationAdd += relationAddList[1] if len(relationAddList) == 2 else 0 - relationPlayerName = memNameDict[relationPlayerID] - return relationAdd, relationPlayerID, relationPlayerName + for memPlayerID, memFamilyID in memFamilyIDDict.items(): + memRelation, relationPlayerID = __GetTemMemRelation(playerManager, playerID, familyID, memPlayerID, memFamilyID, relationList, friendList, leavePlayerID) + if not memRelation: + continue + relation = memRelation + relationAddList = relationCoinAddDict.get(str(memRelation), []) + relationAdd += relationAddList[1] if len(relationAddList) == 2 else 0 + relationPlayerName = memNameDict[relationPlayerID] + return relation, relationAdd, relationPlayerID, relationPlayerName + else: # 非助战享受所有队员加成 for memPlayerID, memFamilyID in memFamilyIDDict.items(): - memRelation = 0 - for checkRelation in relationList: - if [playerID, memPlayerID] in friendList: - memRelation = checkRelation - break - if playerID != memPlayerID and familyID and familyID == memFamilyID: - memRelation = checkRelation - break + memRelation = __GetTemMemRelation(playerManager, playerID, familyID, memPlayerID, memFamilyID, relationList, friendList, leavePlayerID)[0] if not memRelation: continue + if memRelation == relationList[0]: + relation = memRelation + elif relation: + relation = memRelation relationAddList = relationCoinAddDict.get(str(memRelation), []) relationAdd += relationAddList[0] if len(relationAddList) == 2 else 0 - return relationAdd, relationPlayerID, relationPlayerName + return relation, relationAdd, relationPlayerID, relationPlayerName + +def __GetTemMemRelation(playerManager, playerID, familyID, memPlayerID, memFamilyID, relationList, friendList, leavePlayerID): + ## 离线玩家不算社交关系 + if leavePlayerID and memPlayerID == leavePlayerID: + return 0, 0 + memPlayer = playerManager.FindPlayerByID(memPlayerID) + if memPlayer == None or memPlayer.IsEmpty(): + return 0, 0 + for checkRelation in relationList: + if checkRelation == 1: + if [playerID, memPlayerID] in friendList: + return checkRelation, memPlayerID + if checkRelation == 2: + if playerID != memPlayerID and familyID and familyID == memFamilyID: + return checkRelation, memPlayerID + return 0, 0 + +def RefershTeamFBMemRelation(tick, leavePlayerID=0): + ## 刷新组队副本队员关系 + playerManager = GameWorld.GetMapCopyPlayerManager() + for i in xrange(playerManager.GetPlayerCount()): + player = playerManager.GetPlayerByIndex(i) + if player == None or player.IsEmpty(): + continue + if leavePlayerID and player.GetPlayerID() == leavePlayerID: + PyGameData.g_teamFBMemRelationAddDict.pop(leavePlayerID, 0) + continue + relation, relationAdd, relationPlayerID, relationPlayerName = __GetTeamFBMemRelationInfo(player, FBCommon.GetIsHelpFight(player), leavePlayerID) + PyGameData.g_teamFBMemRelationAddDict[player.GetPlayerID()] = [relation, relationAdd, relationPlayerID, relationPlayerName] + + for index in xrange(playerManager.GetPlayerCount()): + player = playerManager.GetPlayerByIndex(index) + if player == None or player.IsEmpty(): + continue + if leavePlayerID and player.GetPlayerID() == leavePlayerID: + continue + FBLogic.DoFBHelp(player, tick) + + return + +def GetTeamFBMemRelationInfo(playerID): + if playerID not in PyGameData.g_teamFBMemRelationAddDict: + return 0, 0 + return PyGameData.g_teamFBMemRelationAddDict[playerID][:2] -- Gitblit v1.8.0