From 320a417a53a57a9cb7d7759f430afe5f6e6399a6 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 29 一月 2019 16:28:30 +0800
Subject: [PATCH] 6087 【后端】【1.5.200】春节红包雨活动(额度特效增加红包类型参数)
---
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py | 162 +++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 136 insertions(+), 26 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py
index cfcf366..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
@@ -913,6 +914,26 @@
DR_Team(eventName, teamID, drDict)
return
+def SyncMapServerPlayerNoTeam(curPlayer):
+ ## 同步地图玩家没有队伍,切图时调用
+ teamInfo = ChGameToMapPyPack.tagGMTeamInfo()
+ teamInfo.PlayerID = curPlayer.GetPlayerID()
+ teamInfo.TeamID = 0
+ teamInfo.TeamLV = 0
+ teamInfo.MemInfoList = []
+ teamInfo.MemCnt = len(teamInfo.MemInfoList)
+ NetPackCommon.SendPyPackToMapServer(curPlayer.GetLineNO(), curPlayer.GetRealMapID(), teamInfo)
+ return
+
+def SyncMapServerPlayerLeaveTeam(curPlayer, teamID):
+ ## 同步地图玩家离开队伍
+ leavePack = ChGameToMapPyPack.tagGMPlayerLeaveTeam()
+ leavePack.PlayerID = curPlayer.GetPlayerID()
+ leavePack.CopyMapID = curPlayer.GetFBID()
+ leavePack.TeamID = teamID
+ NetPackCommon.SendPyPackToMapServer(curPlayer.GetLineNO(), curPlayer.GetRealMapID(), leavePack)
+ return
+
#---------------------------------------------------------------------
#// B9 03 修改队伍信息 #tagCGChangeTeamInfo
@@ -1339,7 +1360,8 @@
#GameServer清除玩家队伍ID为空
delPlayer.SetTeam(None)
#通知MapServerd队伍变更, 在mapserver构建目前队伍
- delPlayer.MapServer_Sync_Team(0)
+ #delPlayer.MapServer_Sync_Team(0)
+ SyncMapServerPlayerLeaveTeam(delPlayer, curTeam.GetTeamID())
#玩家离开副本
delPlayer.MapServer_LeaveFB()
if IsTeamMatchingPlayer(curTeam.GetTeamID()):
@@ -1393,7 +1415,8 @@
#GameServer玩家队伍为空
curPlayer.SetTeam(None)
#通知MapServerd队伍变更
- curPlayer.MapServer_Sync_Team(0)
+ #curPlayer.MapServer_Sync_Team(0)
+ SyncMapServerPlayerLeaveTeam(curPlayer, curTeam.GetTeamID())
__DoLogic_PlayerTeamChange(curPlayer)
if curMember.GetTeamLV() != IPY_GameServer.tmlLeader:
@@ -1793,11 +1816,12 @@
if curTeam == None:
return
- if curTeam.GetTeamPlayerCount() <= 1:
- #补救完毕, 队伍中只有一个人, 删除这个队伍
- GameWorld.Log('玩家(%s)仍然有队伍(%s), 补救完毕, 队伍中只有一个人, 删除这个队伍' % (playerID, curTeamID))
- DeleteTeam(curTeam, tick)
- return
+ #允许存在单人队伍,暂屏蔽该逻辑
+# if curTeam.GetTeamPlayerCount() <= 1:
+# #补救完毕, 队伍中只有一个人, 删除这个队伍
+# GameWorld.Log('玩家(%s)仍然有队伍(%s), 补救完毕, 队伍中只有一个人, 删除这个队伍' % (playerID, curTeamID))
+# DeleteTeam(curTeam, tick)
+# return
GameWorld.Log('玩家(%s)仍然有队伍(%s), 补救' % (playerID, curTeamID))
curPlayer.SetTeamID(curTeamID)
@@ -1808,7 +1832,8 @@
curPlayer.SetTeam(None)
curPlayer.Sync_LeaveTeam(1)
#通知MapServer, 玩家已经队伍了, 刷新玩家的TeamID
- curPlayer.MapServer_Sync_Team(0)
+ #curPlayer.MapServer_Sync_Team(0)
+ SyncMapServerPlayerLeaveTeam(curPlayer, curTeamID)
gameMap = GameWorld.GetMap(curPlayer.GetMapID())
if gameMap and gameMap.GetMapFBType() == ChConfig.fbtTeam:
curPlayer.MapServer_LeaveFB()
@@ -1852,6 +1877,7 @@
#如果队伍正在匹配中,则通知状态
if IsTeamMatchingPlayer(curTeamID):
Sync_TeamMatchState(curPlayer, True)
+ OnTeamMemFamilyRefresh(curPlayer, curPlayer.GetFamilyID())
return True
#---------------------------------------------------------------------
@@ -1862,22 +1888,26 @@
GameWorld.DebugLog("Team.OnPlayerReadMapOK", curPlayer.GetPlayerID())
- # 登录逻辑已处理,这里不重复处理
- #===============================================================================================
- # if curPlayer.GetTeamID() == 0:
- # return
- #
- # curTeam = GameWorld.GetTeamManager().FindTeam(curPlayer.GetTeamID())
- # if curTeam == None:
- # #通知MapServer, 玩家已经队伍了, 刷新玩家的TeamID
- # curPlayer.MapServer_Sync_Team(0)
- # return
- #
- # SyncMapServerTeamInfo(curTeam)
- # #curTeamMember = curTeam.GetMemberByID(curPlayer.GetPlayerID())
- # ##通知MapServerd队伍变更
- # #curPlayer.MapServer_Sync_Team(curTeamMember.GetTeamLV())
- #===============================================================================================
+ if curPlayer.GetTeamID() == 0:
+ return
+
+ curTeam = GameWorld.GetTeamManager().FindTeam(curPlayer.GetTeamID())
+ if curTeam == None:
+ #通知MapServer, 玩家已经队伍了, 刷新玩家的TeamID
+ #curPlayer.MapServer_Sync_Team(0)
+ return
+
+ mapID = curPlayer.GetMapID()
+ loginMapID = curPlayer.GetDictByKey(ChConfig.Def_PDict_LoginMapID)
+ if loginMapID and mapID != loginMapID:
+ GameWorld.Log("Team.OnPlayerReadMapOK 地图与登录时地图不一致,重新同步一次!loginMapID=%s,mapID=%s"
+ % (loginMapID, mapID), curPlayer.GetPlayerID())
+ Sync_TeamMemberInfo(curTeam)
+ SyncMapServerTeamInfo(curTeam, "ReadMapOK", {"playerID":curPlayer.GetPlayerID()})
+
+ #curTeamMember = curTeam.GetMemberByID(curPlayer.GetPlayerID())
+ ##通知MapServerd队伍变更
+ #curPlayer.MapServer_Sync_Team(curTeamMember.GetTeamLV())
return True
#---------------------------------------------------------------------
##组队玩家切换地图
@@ -1929,7 +1959,8 @@
# 玩家进入组队副本,则停止匹配
if gameMap.GetMapFBType() == ChConfig.fbtTeam:
DelPlayerIDFromMatchingList(curPlayer)
-
+ SyncMapServerPlayerNoTeam(curPlayer) # 没有队伍的时候切图也通知地图
+
return
def PlayerTeamMemberRefresh(curPlayer, refreshType, value, tick):
@@ -2764,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"],
}
@@ -2876,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)
@@ -2897,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