4762 【后端】混乱妖域社交关系加成取实时,离线玩家不算;增加同步社交总加成信息;
| | |
| | | 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):
|
| | |
| | | _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):
|
| | |
| | | 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):
|
| | |
| | | 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
|
| | |
|
| | |
| | | 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):
|
| | |
| | | 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
|
| | |
|
| | |
| | | import PlayerViewCache
|
| | | import GameWorldBoss
|
| | | import PlayerTalk
|
| | | import PlayerTeam
|
| | |
|
| | | import copy
|
| | | import random
|
| | |
| | | __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)
|
| | |
| | |
|
| | | #弹劾信息封包
|
| | | SendPackClientImpeachMsg(curPlayer, 0, 0)
|
| | | PlayerTeam.OnTeamMemFamilyRefresh(curPlayer, 0)
|
| | | return
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | |
| | | import PlayerSocial
|
| | | import copy
|
| | | import PlayerViewCache
|
| | | import PlayerTeam
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | |
| | | tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(friendID)
|
| | | if tagPlayer != None:
|
| | | PlayerControl.NotifyCode(tagPlayer, 'Friend_DeleteFriend2', [curPlayer.GetName()])
|
| | | PlayerTeam.OnTeamMemFriendChange(curPlayer, friendID, False)
|
| | | return
|
| | |
|
| | |
|
| | |
| | | PlayerControl.NotifyCode(curPlayer, 'Friend_MakeFriend', [cacheDict['Name']])
|
| | | # 记录等对方上线通知地图,任务等会用到触发逻辑,通用记录次数即可, MapServer_SyncFriendInfo为具体的好友数量,根据策划需求制作
|
| | | pass
|
| | | PlayerTeam.OnTeamMemFriendChange(curPlayer, srcPlayerID, True)
|
| | | return
|
| | |
|
| | |
|
| | |
| | | #如果队伍正在匹配中,则通知状态
|
| | | if IsTeamMatchingPlayer(curTeamID):
|
| | | Sync_TeamMatchState(curPlayer, True)
|
| | | OnTeamMemFamilyRefresh(curPlayer, curPlayer.GetFamilyID())
|
| | | return True
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | |
| | | 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 队伍实例
|
| | |
| | | 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):
|
| | |
| | | _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):
|
| | |
| | | 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):
|
| | |
| | | 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
|
| | |
|
| | |
| | | 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):
|
| | |
| | | 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
|
| | |
|
| | |
| | | Help_leaderID = 'leaderID' #渡劫玩家ID
|
| | | Help_isHelp = 'isHelp' #本次是否是助战
|
| | | Help_helpCount = 'helpCount' #该副本今日已助战次数
|
| | | Help_relation = 'relation' #该副本关系加成信息 [优先关系, 总加成]
|
| | |
|
| | | #副本结算信息通用key
|
| | | Over_dataMapID = 'dataMapID' #数据地图ID
|
| | |
| | | # % (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:
|
| | |
| | | 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:
|
| | |
| | | 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:
|
| | | 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 relationAdd, relationPlayerID, relationPlayerName
|
| | | 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]
|
| | |
|
| | |
| | | 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
|
| | |
|
| | | ## 诅咒城堡刷怪
|
| | |
| | | # @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
|
| | |
|
| | | ##玩家主动离开副本.
|
| | |
| | | # @return 无意义
|
| | | # @remarks 用于通知阵营比分条
|
| | | def DoFBHelp(curPlayer, tick):
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | gameFB = GameWorld.GetGameFB()
|
| | | star = gameFB.GetGameFBDictByKey(ChaosDemon_FBStar)
|
| | | wheelNum = gameFB.GetGameFBDictByKey(ChaosDemon_FBNextRefreshStep)
|
| | |
| | | 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
|
| | |
|
| | |
|
| | |
| | | #导入
|
| | | import PyGameData
|
| | | import GameWorld
|
| | | import FBHelpBattle
|
| | | import traceback
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | |
| | | # @remarks 函数详细说明.
|
| | | def DoResult(curPlayer, callFunName, funResult, tick):
|
| | | try:
|
| | | teamID, friendList, memFamilyIDDict, memNameDict = eval(funResult)
|
| | | 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))
|
| | | except:
|
| | | pass
|
| | | 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
|
| | |
|
| | |
| | | g_fbHelpBattlePlayerDict = {} # 助战玩家信息 {playerID:{助战玩家ID:{助战玩家简要信息字典} ...}, ...}
|
| | |
|
| | | g_teamFBMemRelationDict = {} # 组队副本队员关系信息 {teamID:[[好友组合列表], {队员ID:家族ID, ...}], }
|
| | | g_teamFBMemRelationAddDict = {} # 组队副本队员关系加成信息 {playerID:[relation, relationAdd, relationPlayerID, relationPlayerName], ...} |
| | |
|
| | |
|