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/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 34 ++++--
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py | 52 ++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBHelpBattle.py | 107 ++++++++++++++------
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 34 ++++--
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFriend.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ChaosDemon.py | 10 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFBTeamRelation.py | 47 ++++++++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py | 1
10 files changed, 230 insertions(+), 62 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 3e87679..431d95b 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -24487,11 +24487,13 @@
Head = tagHead()
MapID = 0 #(DWORD MapID)
FuncLineID = 0 #(BYTE FuncLineID)
- XianyuanCoinAdd = 0 #(WORD XianyuanCoinAdd)// 增加的仙缘币,0代表已达上限
+ Relation = 0 #(BYTE Relation)// 当时的关系:0-无,1-好友,2-盟友
+ RelationCoinAdd = 0 #(BYTE RelationCoinAdd)// 社交关系总加成
+ XianyuanCoinAdd = 0 #(WORD XianyuanCoinAdd)// 实际增加的仙缘币
+ Reason = 0 #(BYTE Reason)//仙缘币为0时的原因:1-助战次数上限;2-每日获得上限
CallPlayerID = 0 #(DWORD CallPlayerID)// 助战的玩家ID,有值时代表真实助战,没有值时为自己打的
NameLen = 0 #(BYTE NameLen)
CallPlayerName = "" #(String CallPlayerName)// 助战的玩家名,size = NameLen
- Reason = 0 #(BYTE Reason)//仙缘币为0时的原因:1-助战次数上限;2-每日获得上限
data = None
def __init__(self):
@@ -24505,11 +24507,13 @@
_pos = self.Head.ReadData(_lpData, _pos)
self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
self.FuncLineID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.Relation,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.RelationCoinAdd,_pos = CommFunc.ReadBYTE(_lpData, _pos)
self.XianyuanCoinAdd,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.Reason,_pos = CommFunc.ReadBYTE(_lpData, _pos)
self.CallPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
self.CallPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
- self.Reason,_pos = CommFunc.ReadBYTE(_lpData, _pos)
return _pos
def Clear(self):
@@ -24519,11 +24523,13 @@
self.Head.SubCmd = 0x08
self.MapID = 0
self.FuncLineID = 0
+ self.Relation = 0
+ self.RelationCoinAdd = 0
self.XianyuanCoinAdd = 0
+ self.Reason = 0
self.CallPlayerID = 0
self.NameLen = 0
self.CallPlayerName = ""
- self.Reason = 0
return
def GetLength(self):
@@ -24531,11 +24537,13 @@
length += self.Head.GetLength()
length += 4
length += 1
+ length += 1
+ length += 1
length += 2
+ length += 1
length += 4
length += 1
length += len(self.CallPlayerName)
- length += 1
return length
@@ -24544,11 +24552,13 @@
data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
data = CommFunc.WriteDWORD(data, self.MapID)
data = CommFunc.WriteBYTE(data, self.FuncLineID)
+ data = CommFunc.WriteBYTE(data, self.Relation)
+ data = CommFunc.WriteBYTE(data, self.RelationCoinAdd)
data = CommFunc.WriteWORD(data, self.XianyuanCoinAdd)
+ data = CommFunc.WriteBYTE(data, self.Reason)
data = CommFunc.WriteDWORD(data, self.CallPlayerID)
data = CommFunc.WriteBYTE(data, self.NameLen)
data = CommFunc.WriteString(data, self.NameLen, self.CallPlayerName)
- data = CommFunc.WriteBYTE(data, self.Reason)
return data
def OutputString(self):
@@ -24556,21 +24566,25 @@
Head:%s,
MapID:%d,
FuncLineID:%d,
+ Relation:%d,
+ RelationCoinAdd:%d,
XianyuanCoinAdd:%d,
+ Reason:%d,
CallPlayerID:%d,
NameLen:%d,
- CallPlayerName:%s,
- Reason:%d
+ CallPlayerName:%s
'''\
%(
self.Head.OutputString(),
self.MapID,
self.FuncLineID,
+ self.Relation,
+ self.RelationCoinAdd,
self.XianyuanCoinAdd,
+ self.Reason,
self.CallPlayerID,
self.NameLen,
- self.CallPlayerName,
- self.Reason
+ self.CallPlayerName
)
return DumpString
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py
index 1d7b633..f93b284 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py
@@ -41,6 +41,7 @@
import PlayerViewCache
import GameWorldBoss
import PlayerTalk
+import PlayerTeam
import copy
import random
@@ -350,6 +351,7 @@
__OnFamilyNameChange(jionPlayer.GetPlayerID(), curFamily.GetName())
#玩家缓存
PlayerViewCache.OnPlayerFamilyChange(jionPlayer.GetPlayerID(), curFamily.GetID(), curFamily.GetName())
+ PlayerTeam.OnTeamMemFamilyRefresh(jionPlayer, curFamily.GetID())
#加入仙盟联赛成员
GameWorldFamilyWar.AddFamilyWarMem(jionPlayer.GetPlayerID(), curFamily.GetID())
GameWorldFamilyWar.CheckPlayerJoinFamilyWarInfo(jionPlayer)
@@ -1803,6 +1805,7 @@
#弹劾信息封包
SendPackClientImpeachMsg(curPlayer, 0, 0)
+ PlayerTeam.OnTeamMemFamilyRefresh(curPlayer, 0)
return
#---------------------------------------------------------------------
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFriend.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFriend.py
index d88e04a..ef6881f 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFriend.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFriend.py
@@ -27,6 +27,7 @@
import PlayerSocial
import copy
import PlayerViewCache
+import PlayerTeam
#---------------------------------------------------------------------
@@ -223,6 +224,7 @@
tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(friendID)
if tagPlayer != None:
PlayerControl.NotifyCode(tagPlayer, 'Friend_DeleteFriend2', [curPlayer.GetName()])
+ PlayerTeam.OnTeamMemFriendChange(curPlayer, friendID, False)
return
@@ -325,6 +327,7 @@
PlayerControl.NotifyCode(curPlayer, 'Friend_MakeFriend', [cacheDict['Name']])
# 记录等对方上线通知地图,任务等会用到触发逻辑,通用记录次数即可, MapServer_SyncFriendInfo为具体的好友数量,根据策划需求制作
pass
+ PlayerTeam.OnTeamMemFriendChange(curPlayer, srcPlayerID, True)
return
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py
index 3f00186..5d7ffba 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTeam.py
@@ -1877,6 +1877,7 @@
#如果队伍正在匹配中,则通知状态
if IsTeamMatchingPlayer(curTeamID):
Sync_TeamMatchState(curPlayer, True)
+ OnTeamMemFamilyRefresh(curPlayer, curPlayer.GetFamilyID())
return True
#---------------------------------------------------------------------
@@ -2953,10 +2954,59 @@
PyGameData.g_prepareTeamDict.pop(teamID)
# 同步进入组队副本的队员关系到目标地图
- relationInfo = str([teamID, friendList, memFamilyIDDict, memNameDict])
+ 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):
##玩家离开副本
# @param curTeam 队伍实例
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 3e87679..431d95b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -24487,11 +24487,13 @@
Head = tagHead()
MapID = 0 #(DWORD MapID)
FuncLineID = 0 #(BYTE FuncLineID)
- XianyuanCoinAdd = 0 #(WORD XianyuanCoinAdd)// 增加的仙缘币,0代表已达上限
+ Relation = 0 #(BYTE Relation)// 当时的关系:0-无,1-好友,2-盟友
+ RelationCoinAdd = 0 #(BYTE RelationCoinAdd)// 社交关系总加成
+ XianyuanCoinAdd = 0 #(WORD XianyuanCoinAdd)// 实际增加的仙缘币
+ Reason = 0 #(BYTE Reason)//仙缘币为0时的原因:1-助战次数上限;2-每日获得上限
CallPlayerID = 0 #(DWORD CallPlayerID)// 助战的玩家ID,有值时代表真实助战,没有值时为自己打的
NameLen = 0 #(BYTE NameLen)
CallPlayerName = "" #(String CallPlayerName)// 助战的玩家名,size = NameLen
- Reason = 0 #(BYTE Reason)//仙缘币为0时的原因:1-助战次数上限;2-每日获得上限
data = None
def __init__(self):
@@ -24505,11 +24507,13 @@
_pos = self.Head.ReadData(_lpData, _pos)
self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
self.FuncLineID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.Relation,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.RelationCoinAdd,_pos = CommFunc.ReadBYTE(_lpData, _pos)
self.XianyuanCoinAdd,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.Reason,_pos = CommFunc.ReadBYTE(_lpData, _pos)
self.CallPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
self.CallPlayerName,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
- self.Reason,_pos = CommFunc.ReadBYTE(_lpData, _pos)
return _pos
def Clear(self):
@@ -24519,11 +24523,13 @@
self.Head.SubCmd = 0x08
self.MapID = 0
self.FuncLineID = 0
+ self.Relation = 0
+ self.RelationCoinAdd = 0
self.XianyuanCoinAdd = 0
+ self.Reason = 0
self.CallPlayerID = 0
self.NameLen = 0
self.CallPlayerName = ""
- self.Reason = 0
return
def GetLength(self):
@@ -24531,11 +24537,13 @@
length += self.Head.GetLength()
length += 4
length += 1
+ length += 1
+ length += 1
length += 2
+ length += 1
length += 4
length += 1
length += len(self.CallPlayerName)
- length += 1
return length
@@ -24544,11 +24552,13 @@
data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
data = CommFunc.WriteDWORD(data, self.MapID)
data = CommFunc.WriteBYTE(data, self.FuncLineID)
+ data = CommFunc.WriteBYTE(data, self.Relation)
+ data = CommFunc.WriteBYTE(data, self.RelationCoinAdd)
data = CommFunc.WriteWORD(data, self.XianyuanCoinAdd)
+ data = CommFunc.WriteBYTE(data, self.Reason)
data = CommFunc.WriteDWORD(data, self.CallPlayerID)
data = CommFunc.WriteBYTE(data, self.NameLen)
data = CommFunc.WriteString(data, self.NameLen, self.CallPlayerName)
- data = CommFunc.WriteBYTE(data, self.Reason)
return data
def OutputString(self):
@@ -24556,21 +24566,25 @@
Head:%s,
MapID:%d,
FuncLineID:%d,
+ Relation:%d,
+ RelationCoinAdd:%d,
XianyuanCoinAdd:%d,
+ Reason:%d,
CallPlayerID:%d,
NameLen:%d,
- CallPlayerName:%s,
- Reason:%d
+ CallPlayerName:%s
'''\
%(
self.Head.OutputString(),
self.MapID,
self.FuncLineID,
+ self.Relation,
+ self.RelationCoinAdd,
self.XianyuanCoinAdd,
+ self.Reason,
self.CallPlayerID,
self.NameLen,
- self.CallPlayerName,
- self.Reason
+ self.CallPlayerName
)
return DumpString
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py
index 5e85a7e..71649ca 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py
@@ -65,6 +65,7 @@
Help_leaderID = 'leaderID' #渡劫玩家ID
Help_isHelp = 'isHelp' #本次是否是助战
Help_helpCount = 'helpCount' #该副本今日已助战次数
+Help_relation = 'relation' #该副本关系加成信息 [优先关系, 总加成]
#副本结算信息通用key
Over_dataMapID = 'dataMapID' #数据地图ID
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]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ChaosDemon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ChaosDemon.py
index 865339c..d6fbb77 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ChaosDemon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ChaosDemon.py
@@ -175,7 +175,8 @@
curPlayer.Sync_TimeTick(IPY_GameWorld.tttTowerTake, 0, max(notify_tick, 0), True)
__UpdChaosDemonFBStar(tick, True, curPlayer)
- DoFBHelp(curPlayer, tick)
+ FBHelpBattle.RefershTeamFBMemRelation(tick)
+ #DoFBHelp(curPlayer, tick)
return
## 诅咒城堡刷怪
@@ -220,6 +221,9 @@
# @return 返回值无意义
def DoExitFB(curPlayer, tick):
GameWorld.DebugLog("ChaosDemon DoExitFB...", curPlayer.GetPlayerID())
+ fbStep = GameWorld.GetGameFB().GetFBStep()
+ if fbStep <= FB_Step_Fight:
+ FBHelpBattle.RefershTeamFBMemRelation(tick, curPlayer.GetPlayerID())
return
##玩家主动离开副本.
@@ -511,6 +515,7 @@
# @return 无意义
# @remarks 用于通知阵营比分条
def DoFBHelp(curPlayer, tick):
+ playerID = curPlayer.GetPlayerID()
gameFB = GameWorld.GetGameFB()
star = gameFB.GetGameFBDictByKey(ChaosDemon_FBStar)
wheelNum = gameFB.GetGameFBDictByKey(ChaosDemon_FBNextRefreshStep)
@@ -522,8 +527,9 @@
isHelp = FBCommon.GetIsHelpFight(curPlayer)
helpCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FBRealHelpCount % ChConfig.Def_FBMapID_ChaosDemon)
fbHelpDict = {FBCommon.Help_step:wheelNum, FBCommon.Help_grade:star, FBCommon.Help_npcTotal:KillNPCCnt, FBCommon.Help_lineID:lineID,
- FBCommon.Help_isHelp:isHelp, FBCommon.Help_helpCount:helpCount}
+ FBCommon.Help_isHelp:isHelp, FBCommon.Help_helpCount:helpCount, FBCommon.Help_relation:FBHelpBattle.GetTeamFBMemRelationInfo(playerID)}
FBCommon.Notify_FBHelp(curPlayer, fbHelpDict)
+ GameWorld.DebugLog("DoFBHelp %s" % str(fbHelpDict), playerID)
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFBTeamRelation.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFBTeamRelation.py
index 49de67a..0d1db66 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFBTeamRelation.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_EnterFBTeamRelation.py
@@ -17,6 +17,8 @@
#导入
import PyGameData
import GameWorld
+import FBHelpBattle
+import traceback
#---------------------------------------------------------------------
@@ -44,11 +46,46 @@
# @remarks 函数详细说明.
def DoResult(curPlayer, callFunName, funResult, tick):
try:
- teamID, friendList, memFamilyIDDict, memNameDict = eval(funResult)
- PyGameData.g_teamFBMemRelationDict[teamID] = [friendList, memFamilyIDDict, memNameDict]
- GameWorld.Log("队员关系信息: teamID=%s,friendList=%s,memFamilyIDDict=%s" % (teamID, friendList, memFamilyIDDict))
- except:
- pass
+ msgList = eval(funResult)
+ msgType = msgList[0]
+ if msgType == "InitRelation":
+ teamID, friendList, memFamilyIDDict, memNameDict = msgList[1:]
+ PyGameData.g_teamFBMemRelationDict[teamID] = [friendList, memFamilyIDDict, memNameDict]
+ GameWorld.Log("队员初始关系信息: teamID=%s,friendList=%s,memFamilyIDDict=%s" % (teamID, friendList, memFamilyIDDict))
+ return
+
+ if msgType == "FriendChange":
+ teamID, playerID, tagPlayerID, isFriend = msgList[1:]
+ GameWorld.Log("队员好友变更: teamID=%s,playerID=%s,tagPlayerID=%s,isFriend=%s" % (teamID, playerID, tagPlayerID, isFriend))
+ if teamID not in PyGameData.g_teamFBMemRelationDict:
+ return
+ friendList = PyGameData.g_teamFBMemRelationDict[teamID][0]
+ if isFriend:
+ friendList.append([playerID, tagPlayerID])
+ friendList.append([tagPlayerID, playerID])
+ else:
+ if [playerID, tagPlayerID] in friendList:
+ friendList.remove([playerID, tagPlayerID])
+ if [tagPlayerID, playerID] in friendList:
+ friendList.remove([tagPlayerID, playerID])
+
+ elif msgType == "FamilyChange":
+ teamID, playerID, familyID = msgList[1:]
+ GameWorld.Log("队员家族变更: teamID=%s,playerID=%s,familyID=%s" % (teamID, playerID, familyID))
+ if teamID not in PyGameData.g_teamFBMemRelationDict:
+ GameWorld.Log("teamID=%s, not in PyGameData.g_teamFBMemRelationDict %s" % (teamID, PyGameData.g_teamFBMemRelationDict))
+ return
+ memFamilyIDDict = PyGameData.g_teamFBMemRelationDict[teamID][1]
+ memFamilyIDDict[playerID] = familyID
+
+ else:
+ return
+
+ # 关系变更刷新
+ FBHelpBattle.RefershTeamFBMemRelation(tick)
+ except BaseException:
+ errorMsg = str(traceback.format_exc())
+ GameWorld.ErrLog("%s" % errorMsg)
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
index 3869e0f..45f508b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
@@ -72,5 +72,6 @@
g_fbHelpBattlePlayerDict = {} # 助战玩家信息 {playerID:{助战玩家ID:{助战玩家简要信息字典} ...}, ...}
g_teamFBMemRelationDict = {} # 组队副本队员关系信息 {teamID:[[好友组合列表], {队员ID:家族ID, ...}], }
+g_teamFBMemRelationAddDict = {} # 组队副本队员关系加成信息 {playerID:[relation, relationAdd, relationPlayerID, relationPlayerName], ...}
--
Gitblit v1.8.0