From 31a441bf2842217a4fb215ae25d6e836980f52d4 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期四, 24 一月 2019 10:17:34 +0800
Subject: [PATCH] 5924 【后端】【1.5.100】诛仙Boss功能(杀人不红名)
---
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py | 83 +++++++++++++++++++++++++++++++++++++++++
1 files changed, 82 insertions(+), 1 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py
index 2ce78a2..34aca2e 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py
@@ -24,6 +24,7 @@
import ChPyNetSendPack
import DataRecordPack
import PlayerControl
+import PlayerFriend
import ShareDefine
import PyGameData
import GameWorld
@@ -1876,6 +1877,7 @@
#如果队伍正在匹配中,则通知状态
if IsTeamMatchingPlayer(curTeamID):
Sync_TeamMatchState(curPlayer, True)
+ OnTeamMemFamilyRefresh(curPlayer, curPlayer.GetFamilyID())
return True
#---------------------------------------------------------------------
@@ -2793,6 +2795,10 @@
["TeamEnterDefaultMe", "TeamEnterDefaultAll"], "SingleEnterDefaul"],
ShareDefine.EntFBAskRet_Sit:[["TeamMatchingSITMe", "TeamMatchingSITAll"],
["TeamEnterSITMe", "TeamEnterSITAll"], "Carry_lhs_697674"],
+ ShareDefine.EntFBAskRet_CrossPKMatching:[["CrossMatching9", "CrossMatching10"],
+ ["CrossMatching11", "CrossMatching12"], "CrossMatching8"],
+ ShareDefine.EntFBAskRet_InCrossMap:[["CrossMap6", "CrossMap7"],
+ ["CrossMap8", "CrossMap9"], "CrossMap5"],
ShareDefine.EntFBAskRet_Other:[["TeamMatchingDefaultMe", "TeamMatchingDefaultAll"],
["TeamEnterDefaultMe", "TeamEnterDefaultAll"], "SingleEnterDefaul"],
}
@@ -2905,6 +2911,23 @@
askMapID, askMapEx, memStateDict = PyGameData.g_prepareTeamDict[teamID][:3]
enterInfo = GetTeamFBEnterInfo(leader, curTeam, askMapID, askMapEx)
+ leaderID = leader.GetPlayerID()
+ friendList = []
+ memFamilyIDDict = {}
+ memNameDict = {}
+ #队长与队员的关系
+ for index in xrange(curTeam.GetMemberCount()):
+ memPlayer = curTeam.GetMemberPlayer(index)
+ if not memPlayer or not memPlayer.GetPlayerID():
+ continue
+ memPlayerID = memPlayer.GetPlayerID()
+ if memPlayerID not in memStateDict:
+ continue
+ memFamilyIDDict[memPlayerID] = memPlayer.GetFamilyID() # 存储各队员的家族ID
+ memNameDict[memPlayerID] = memPlayer.GetName()
+ if leaderID != memPlayerID and PlayerFriend.IsFriend(leaderID, memPlayerID):
+ friendList.append([leaderID, memPlayerID])
+
#踢出所有在此类副本,但不同线路的玩家
for index in xrange(curTeam.GetMemberCount()):
memPlayer = curTeam.GetMemberPlayer(index)
@@ -2926,8 +2949,66 @@
resultName = str([askMapID, askMapEx] + enterInfo)
memPlayer.MapServer_QueryPlayerResult(0, 0, "EnterFBTeamAsk", resultName, len(resultName))
GameWorld.Log("队长成功进入组队副本, 队员开始进入副本: teamID=%s,memPlayerID=%s" % (teamID, memPlayerID), leader.GetPlayerID())
-
+ for preMemPlayerID in memStateDict.keys():
+ if memPlayerID == preMemPlayerID:
+ continue
+ if PlayerFriend.IsFriend(memPlayerID, preMemPlayerID) and [memPlayerID, preMemPlayerID] not in friendList:
+ friendList.append([memPlayerID, preMemPlayerID])
+
PyGameData.g_prepareTeamDict.pop(teamID)
+
+ # 同步进入组队副本的队员关系到目标地图
+ relationInfo = str(["InitRelation", teamID, friendList, memFamilyIDDict, memNameDict])
+ leader.MapServer_QueryPlayerResult(0, 0, "EnterFBTeamRelation", relationInfo, len(relationInfo))
+ return
+
+def OnTeamMemFriendChange(curPlayer, tagPlayerID, isFriend):
+ ## 队员好友关系变更,离线也同步
+ teamID = curPlayer.GetTeamID()
+ if not teamID:
+ GameWorld.DebugLog("好友变更,无队伍不管!")
+ return
+ curMapData = GameWorld.GetMap(curPlayer.GetMapID())
+ if not curMapData or curMapData.GetMapFBType() != ChConfig.fbtTeam:
+ GameWorld.DebugLog("好友变更,不在组队副本不管!")
+ return
+
+ isSameTeam = False
+ playerID = curPlayer.GetPlayerID()
+ curTeam = curPlayer.GetTeam()
+ for index in xrange(curTeam.GetMemberCount()):
+ memberInfo = curTeam.GetMemberInfo(index)
+ if not memberInfo:
+ continue
+ memPlayerID = memberInfo.GetPlayerID()
+ if tagPlayerID == memPlayerID:
+ isSameTeam = True
+ break
+
+ if not isSameTeam:
+ GameWorld.DebugLog("好友关系变更,不是同队伍不管!")
+ return
+
+ relationInfo = str(["FriendChange", teamID, playerID, tagPlayerID, isFriend])
+ curPlayer.MapServer_QueryPlayerResult(0, 0, "EnterFBTeamRelation", relationInfo, len(relationInfo))
+ return
+
+def OnTeamMemFamilyRefresh(curPlayer, familyID):
+ ## 队员仙盟变更,仅在线同步,上线同步
+ if not curPlayer:
+ return
+ teamID = curPlayer.GetTeamID()
+ if not teamID:
+ GameWorld.DebugLog("家族变更,无队伍不管!")
+ return
+ curMapData = GameWorld.GetMap(curPlayer.GetMapID())
+ if not curMapData or curMapData.GetMapFBType() != ChConfig.fbtTeam:
+ GameWorld.DebugLog("家族变更,不在组队副本不管!")
+ return
+ playerID = curPlayer.GetPlayerID()
+ familyID = curPlayer.GetFamilyID()
+ relationInfo = str(["FamilyChange", teamID, playerID, familyID])
+ curPlayer.MapServer_QueryPlayerResult(0, 0, "EnterFBTeamRelation", relationInfo, len(relationInfo))
return
def __CheckTeamFBPlayerExist(curTeam):
--
Gitblit v1.8.0