| | |
| | | import GameWorld
|
| | | import ChConfig
|
| | | import PlayerControl
|
| | | import PlayerBillboard
|
| | | import ChPyNetSendPack
|
| | | import NetPackCommon
|
| | | import PlayerViewCacheTube
|
| | |
| | | import GameMap
|
| | | import NPCCommon
|
| | | import FBLogic
|
| | | import PlayerVip
|
| | | import IPY_GameWorld
|
| | | import PlayerActivity
|
| | | import ItemControler
|
| | |
|
| | | MaxRobotID = 100 # 最大机器人NPC定义ID
|
| | |
|
| | | def DoPlayerOnDay(curPlayer):
|
| | | checkInInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HelpBattleCheckInCount)
|
| | | checkInCount = checkInInfo / 10 # 累计登记
|
| | | todayIsCheckIn = checkInInfo % 10 # 今天是否已登记
|
| | | if todayIsCheckIn:
|
| | | checkInInfo = (checkInCount + 1) * 10 + 0
|
| | | checkInInfo = checkInCount * 10 + 0
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HelpBattleCheckInCount, checkInInfo)
|
| | | SyncCheckInState(curPlayer, 0, False)
|
| | | |
| | | # 重置每日已获得仙缘币
|
| | | PlayerControl.SetTodayXianyuanCoin(curPlayer, 0)
|
| | | return
|
| | |
|
| | | def DoPlayerLogin(curPlayer):
|
| | |
| | | __OnHelpBattleCheckInResult(curPlayer, msgList, tick)
|
| | |
|
| | | # 刷新
|
| | | if cmd == "Refresh":
|
| | | elif cmd == "Refresh":
|
| | | __OnHelpBattleRefreshResult(curPlayer, msgList, tick)
|
| | |
|
| | | # 助战记录
|
| | | if cmd == "HelpRecord":
|
| | | __OnHelpBattleRecord(curPlayer, msgList, tick)
|
| | | |
| | | # 扫荡召唤
|
| | | elif cmd == "SweepCall":
|
| | | __OnHelpBattleSweepCallResult(curPlayer, msgList, tick)
|
| | | |
| | | return
|
| | |
|
| | | #// B1 05 助战登记 #tagCMHelpBattleCheckIn
|
| | |
| | | for robotID in helpNPCRobotIDList[:lackCount]:
|
| | | calledPlayerDict[robotID] = 0
|
| | |
|
| | | if calledCount + len(calledPlayerDict) < maxHelpPlayerCount:
|
| | | GameWorld.ErrLog("无法一键召唤!人数不足! calledCount=%s,calledPlayerDict=%s,maxHelpPlayerCount=%s" |
| | | % (calledCount, calledPlayerDict, maxHelpPlayerCount), playerID)
|
| | | return
|
| | | # 修改了规则,无社交人数及机器人人数做了限制,所以可能出现人数不足的情况,故屏蔽此判断
|
| | | # if calledCount + len(calledPlayerDict) < maxHelpPlayerCount:
|
| | | # GameWorld.ErrLog("无法一键召唤!人数不足! calledCount=%s,calledPlayerDict=%s,maxHelpPlayerCount=%s" |
| | | # % (calledCount, calledPlayerDict, maxHelpPlayerCount), playerID)
|
| | | # return
|
| | | else:
|
| | | if calledPlayerID not in helpBattlePlayerDict:
|
| | | GameWorld.ErrLog("不存在该助战玩家,无法召唤!calledPlayerID=%s" % (calledPlayerID), playerID)
|
| | |
| | | helpPlayerInfoDict = helpBattlePlayerDict[calledPlayerID]
|
| | | if helpPlayerInfoDict.get("NeedGoldCall", 0):
|
| | | goldCallCost = IpyGameDataPY.GetFuncCfg("HelpBattleCall", 5) # 付费召唤消耗仙玉,优先消耗绑玉
|
| | | costMoneyList = PlayerControl.HaveMoneyEx(curPlayer, ShareDefine.TYPE_Price_Gold_Paper_Money, goldCallCost)
|
| | | # 恺英版改为直接扣绑玉灵石 2019/10/8
|
| | | costMoneyList = PlayerControl.HaveMoneyEx(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Paper, goldCallCost)
|
| | | if not costMoneyList:
|
| | | return
|
| | |
|
| | |
| | | if not helpBattleNPC:
|
| | | continue
|
| | | objID = helpBattleNPC.GetID()
|
| | | helpBattleNPC.SetIsNeedProcess(True)
|
| | | GameWorld.Log("召唤助战成功: calledPlayerID=%s,objID=%s,fightPower=%s" % (calledPlayerID, objID, fightPower), playerID)
|
| | | gameFB.SetGameFBDict(ChConfig.Def_FB_HelpBattleFBObjID % calledPlayerID, objID)
|
| | | helpBattleNPC.SetDict(ChConfig.Def_NPC_Dict_AtkDelayTick, calledCount * 1000) # 按转换顺序每个延长1秒攻击,防止动作一致
|
| | | calledCount += 1
|
| | | # 设置助战属性
|
| | | npcControl = NPCCommon.NPCControl(helpBattleNPC)
|
| | |
| | | NetPackCommon.SendFakePack(curPlayer, callResultPack)
|
| | |
|
| | | # 召唤满后
|
| | | if calledCount >= maxHelpPlayerCount:
|
| | | if calledCount >= len(helpBattlePlayerDict) or calledCount >= maxHelpPlayerCount:
|
| | | FBLogic.OnCallHelpBattleOK(curPlayer, tick)
|
| | |
|
| | | # ֪ͨGameServer
|
| | |
| | | costMoneyList = []
|
| | | calledPlayerIDDict = {} # 已经召唤的玩家ID字典 {playerID:[是否付费召唤, 职业], ...}
|
| | |
|
| | | refreshCount = gameFB.GetPlayerGameFBDictByKey(playerID, ChConfig.FBPD_HelpBattleRefreshCount)
|
| | | if isClientRefresh:
|
| | | refreshCount = gameFB.GetPlayerGameFBDictByKey(playerID, ChConfig.FBPD_HelpBattleRefreshCount)
|
| | | freeRefreshCount = IpyGameDataPY.GetFuncCfg("HelpBattleRefresh", 1)
|
| | | goldRefreshCount = IpyGameDataPY.GetFuncCfg("HelpBattleRefresh", 2)
|
| | | if refreshCount >= (freeRefreshCount + goldRefreshCount):
|
| | |
| | |
|
| | | if refreshCount >= freeRefreshCount:
|
| | | costGold = IpyGameDataPY.GetFuncCfg("HelpBattleRefresh", 3)
|
| | | costMoneyList = PlayerControl.HaveMoneyEx(curPlayer, ShareDefine.TYPE_Price_Gold_Paper_Money, costGold)
|
| | | # 恺英版改为直接扣绑玉灵石 2019/10/8
|
| | | costMoneyList = PlayerControl.HaveMoneyEx(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Paper, costGold)
|
| | | if not costMoneyList:
|
| | | GameWorld.DebugLog("货币不足!无法刷新助战!")
|
| | | return
|
| | |
| | |
|
| | | # 非客户端刷新的视为重新开始,重置刷新次数
|
| | | else:
|
| | | gameFB.SetPlayerGameFBDict(playerID, ChConfig.FBPD_HelpBattleRefreshCount, 0)
|
| | | if not refreshCount:
|
| | | gameFB.SetPlayerGameFBDict(playerID, ChConfig.FBPD_HelpBattleRefreshCount, 0)
|
| | | gameFB.SetGameFBDict(ChConfig.FBPD_HelpBattleFBFightPower, ipyData.GetFightPowerMin())
|
| | | gameFB.SetGameFBDict(ChConfig.FBPD_HelpBattleFBBaseHurt, ipyData.GetRobotBaseHurt())
|
| | | GameWorld.DebugLog("设置副本战力=%s,保底伤害=%s" % (ipyData.GetFightPowerMin(), ipyData.GetRobotBaseHurt()))
|
| | |
| | | NetPackCommon.SendFakePack(curPlayer, helpPlayerListPack)
|
| | | return
|
| | |
|
| | | def __OnHelpBattleRecord(curPlayer, msgList, tick):
|
| | | ## 助战记录同步
|
| | | cmd, helpRecordList = msgList
|
| | | def SendGameServer_SweepCallHelpBattlePlayer(curPlayer, mapID, funcLineID):
|
| | | ## 发送GameServer请求扫荡助战玩家
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("FBHelpBattle", mapID, funcLineID)
|
| | | if not ipyData:
|
| | | return
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | GameWorld.DebugLog("__OnHelpBattleRecord %s,helpRecordList=%s" % (cmd, helpRecordList), playerID)
|
| | | |
| | | addXianyuanCoinTotal = 0 # 累计需要增加的仙缘币
|
| | | addXianyuanCoinTotalTotay = 0 # 累计需要增加的今日仙缘币
|
| | | drList = []
|
| | | |
| | | totalHelpCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HelpBattleTotalCount)
|
| | | recordPack = ChPyNetSendPack.tagMCHelpBattleRecordList()
|
| | | recordPack.RecordList = []
|
| | | for recordInfo in helpRecordList:
|
| | | callPlayerID, callPlayerName, mapID, funcLineID, xianyuanCoinAdd, relation, vipLV, recordTime = recordInfo
|
| | | timeStr = GameWorld.ChangeTimeNumToStr(recordTime)
|
| | | isSameDay = GameWorld.CheckTimeIsSameServerDayEx(recordTime)
|
| | | |
| | | record = ChPyNetSendPack.tagMCHelpBattleRecord()
|
| | | record.CallPlayerID = callPlayerID
|
| | | record.CallPlayerName = callPlayerName
|
| | | record.NameLen = len(record.CallPlayerName)
|
| | | record.MapID = mapID
|
| | | record.FuncLineID = funcLineID
|
| | | record.XianyuanCoinAdd = xianyuanCoinAdd
|
| | | record.Relation = relation
|
| | | record.VIPLV = vipLV
|
| | | record.HelpTime = timeStr
|
| | | recordPack.RecordList.append(record)
|
| | | drList.append({"CallPlayerID":callPlayerID, "MapID":mapID, "FuncLineID":funcLineID, "XianyuanCoinAdd":xianyuanCoinAdd, |
| | | "Relation":relation, "VIPLV":vipLV, "HelpTime":timeStr, "IsSameDay":isSameDay})
|
| | | addXianyuanCoinTotal += xianyuanCoinAdd
|
| | | if isSameDay:
|
| | | addXianyuanCoinTotalTotay += xianyuanCoinAdd
|
| | | totalHelpCount += 1
|
| | | |
| | | recordPack.RecordCount = len(recordPack.RecordList)
|
| | | NetPackCommon.SendFakePack(curPlayer, recordPack)
|
| | | |
| | | addDataDict = {"HelpList":drList}
|
| | | GameWorld.DebugLog(" addXianyuanCoinTotal=%s,addXianyuanCoinTotalTotay=%s,totalHelpCount=%s" |
| | | % (addXianyuanCoinTotal, addXianyuanCoinTotalTotay, totalHelpCount), playerID)
|
| | | PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_XianyuanCoin, addXianyuanCoinTotal, addDataDict=addDataDict, isSysHint=False)
|
| | | if addXianyuanCoinTotalTotay:
|
| | | PlayerControl.AddTodayXianyuanCoin(curPlayer, addXianyuanCoinTotalTotay)
|
| | | |
| | | # 更新总助战次数,更新排行榜
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HelpBattleTotalCount, totalHelpCount)
|
| | | if totalHelpCount >= IpyGameDataPY.GetFuncCfg("HelpBattleRefresh", 4):
|
| | | PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_FBHelpBattle, totalHelpCount)
|
| | | msgInfo = str(["SweepCall", mapID, funcLineID])
|
| | | GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "FBHelpBattle", msgInfo, len(msgInfo))
|
| | | GameWorld.Log("SendGameServer_SweepCallHelpBattlePlayer %s" % (msgInfo), playerID)
|
| | | return
|
| | |
|
| | | def DoFBAddXianyuanCoin(curPlayer, mapID, lineID, isHelp=False):
|
| | | '''真人挑战副本增加仙缘币,包含过关或助战(不含镜像助战)
|
| | | @param isHelp: 是否助战的
|
| | | @return: 获得的仙缘币, 无法获得仙缘币原因(1-达到助战次数上限,2-达到每日获得仙缘币上限)
|
| | | '''
|
| | | def __OnHelpBattleSweepCallResult(curPlayer, msgList, tick):
|
| | | ## 助战扫荡结果处理
|
| | | cmd, mapID, funcLineID, helpBattlePlayerDict = msgList
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | GameWorld.DebugLog("__OnHelpBattleSweepCallResult %s,mapID=%s,funcLineID=%s,helpBattlePlayerDict=%s" |
| | | % (cmd, mapID, funcLineID, helpBattlePlayerDict), playerID)
|
| | | |
| | | fbFuncIpyData = IpyGameDataPY.GetIpyGameData("FBFunc", mapID)
|
| | | if not fbFuncIpyData:
|
| | | return 0, 0
|
| | | return
|
| | |
|
| | | reason = 0
|
| | | addCoinRate = 10000 # 基础倍率
|
| | | if not isHelp:
|
| | | baseFBPoint = fbFuncIpyData.GetFBPoint() # 过关 - 基础仙缘币
|
| | | else:
|
| | | baseFBPoint = fbFuncIpyData.GetHelpPoint() # 助战
|
| | | dayHelpCountMax = fbFuncIpyData.GetDayHelpCountMax() # 真实助战每日可获得仙缘币次数
|
| | | if dayHelpCountMax:
|
| | | todayHelpCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FBRealHelpCount % mapID)
|
| | | if todayHelpCount >= dayHelpCountMax:
|
| | | baseFBPoint = 0
|
| | | reason = 1
|
| | | GameWorld.DebugLog("达到每日助战可获得仙缘币次数上限!无法再获得!mapID=%s" % (mapID), playerID)
|
| | | else:
|
| | | todayHelpCount += 1
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FBRealHelpCount % mapID, todayHelpCount)
|
| | | GameWorld.DebugLog("增加每日助战可获得仙缘币次数!mapID=%s,todayHelpCount=%s" % (mapID, todayHelpCount), playerID)
|
| | | |
| | | xianyuanCoinUpper = IpyGameDataPY.GetFuncCfg("HelpBattlePoint", 1) # 每日仙缘币上限
|
| | | relationCoinAddDict = IpyGameDataPY.GetFuncEvalCfg("HelpBattlePoint", 2, {}) # 社交关系加成 {"社交关系":[过关加成, 助战加成], ...} |
| | | todayXianyuanCoin = PlayerControl.GetTodayXianyuanCoin(curPlayer) # 今日已获得仙缘币
|
| | | playerXianyuanCoinUpper = xianyuanCoinUpper
|
| | | if curPlayer.GetVIPLv():
|
| | | playerXianyuanCoinUpper += PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_XianyuanCoinUpperAdd)
|
| | | addCoinRate += PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_XianyuanCoinAddPer)
|
| | | |
| | | #达到上限也需要记录,所以这里暂不限制
|
| | | #if todayXianyuanCoin >= playerXianyuanCoinUpper:
|
| | | # GameWorld.DebugLog("玩家今日仙缘币已达上限!todayXianyuanCoin=%s,playerXianyuanCoinUpper=%s" |
| | | # % (todayXianyuanCoin, playerXianyuanCoinUpper), playerID)
|
| | | # return
|
| | | assistPlayerIDList = []
|
| | | for helpPlayerID in helpBattlePlayerDict.keys():
|
| | | if helpPlayerID <= MaxRobotID:
|
| | | continue
|
| | | assistPlayerIDList.append(helpPlayerID)
|
| | | __DoGivePlayerAssistLihe(curPlayer, mapID, funcLineID, assistPlayerIDList)
|
| | |
|
| | | relationAdd, relationPlayerID, relationPlayerName = 0, 0, ""
|
| | | |
| | | fbType = GameWorld.GetMap().GetMapFBType()
|
| | | if fbType == IPY_GameWorld.fbtSingle:
|
| | | helpBattlePlayerDict = PyGameData.g_fbHelpBattlePlayerDict.get(playerID, {})
|
| | | for helpPlayerInfoDict in helpBattlePlayerDict.values():
|
| | | relation = helpPlayerInfoDict.get("Relation", 0)
|
| | | if not relation:
|
| | | continue
|
| | | 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)
|
| | | |
| | | coinAdd = 0
|
| | | if baseFBPoint:
|
| | | coinAdd = int((baseFBPoint + relationAdd) * addCoinRate / 10000.0)
|
| | | canAddMax = max(playerXianyuanCoinUpper - todayXianyuanCoin, 0)
|
| | | coinAddReal = min(coinAdd, canAddMax) # 实际加仙缘币
|
| | | if canAddMax == 0 and not reason:
|
| | | reason = 2
|
| | | |
| | | GameWorld.DebugLog("挑战副本增加仙缘币: baseFBPoint=%s,relationAdd=%s,addCoinRate=%s,coinAdd=%s,canAddMax=%s,coinAddReal=%s,relationPlayerID=%s" |
| | | % (baseFBPoint, relationAdd, addCoinRate, coinAdd, canAddMax, coinAddReal, relationPlayerID), playerID)
|
| | | if coinAddReal:
|
| | | addDataDict = {"MapID":mapID, "FuncLineID":lineID}
|
| | | PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_XianyuanCoin, coinAddReal, addDataDict=addDataDict)
|
| | | PlayerControl.AddTodayXianyuanCoin(curPlayer, coinAddReal)
|
| | | |
| | | # 通知自己获得仙缘币
|
| | | msgPack = ChPyNetSendPack.tagMCAddXianyuanCoinMsg()
|
| | | msgPack.MapID = mapID
|
| | | msgPack.FuncLineID = lineID
|
| | | msgPack.XianyuanCoinAdd = coinAddReal
|
| | | msgPack.CallPlayerID = relationPlayerID
|
| | | msgPack.CallPlayerName = relationPlayerName
|
| | | msgPack.NameLen = len(msgPack.CallPlayerName)
|
| | | msgPack.Reason = reason
|
| | | NetPackCommon.SendFakePack(curPlayer, msgPack)
|
| | | return coinAddReal, reason
|
| | | #扫荡结果给奖励等
|
| | | FBLogic.OnPlayerFBHelpBattleSweepResult(curPlayer, mapID, funcLineID, helpBattlePlayerDict)
|
| | | return
|
| | |
|
| | | def __GetTeamFBMemRelationInfo(curPlayer, relationCoinAddDict, isHelp):
|
| | | def DoFBHelpBattleFinish(curPlayer, mapID, lineID):
|
| | | ## 副本助战完成
|
| | | |
| | | assistPlayerIDList = []
|
| | | gameFB = GameWorld.GetGameFB()
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | helpBattlePlayerDict = PyGameData.g_fbHelpBattlePlayerDict.get(playerID, {})
|
| | | for helpPlayerID in helpBattlePlayerDict.keys():
|
| | | objID = gameFB.GetGameFBDictByKey(ChConfig.Def_FB_HelpBattleFBObjID % helpPlayerID)
|
| | | if not objID:
|
| | | continue
|
| | | if helpPlayerID <= MaxRobotID:
|
| | | continue
|
| | | assistPlayerIDList.append(helpPlayerID)
|
| | | __DoGivePlayerAssistLihe(curPlayer, mapID, lineID, assistPlayerIDList)
|
| | | |
| | | return
|
| | |
|
| | | def __DoGivePlayerAssistLihe(curPlayer, mapID, lineID, assistPlayerIDList):
|
| | | ## 给玩家协助礼盒奖励
|
| | | |
| | | if not assistPlayerIDList:
|
| | | return
|
| | | |
| | | liheItemID = 0
|
| | | mapAssistGiftDict = IpyGameDataPY.GetFuncEvalCfg("AssistAward", 2, {})
|
| | | mapID = FBCommon.GetRecordMapID(mapID)
|
| | | if str(mapID) in mapAssistGiftDict:
|
| | | liheItemID = mapAssistGiftDict[str(mapID)][0]
|
| | | if not liheItemID:
|
| | | return
|
| | | |
| | | ItemControler.GivePlayerItemOrMail(curPlayer, [[liheItemID, 1, 0]])
|
| | | |
| | | msgInfo = str(["AssistFinish", liheItemID, mapID, lineID, assistPlayerIDList])
|
| | | GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "FBHelpBattle", msgInfo, len(msgInfo))
|
| | | return
|
| | |
|
| | |
|
| | | 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 == 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
|
| | | defaultRelationPlayerID = 0
|
| | | for memPlayerID, memFamilyID in memFamilyIDDict.items():
|
| | | memRelation, relationPlayerID = __GetTemMemRelation(playerManager, playerID, familyID, memPlayerID, memFamilyID, relationList, friendList, leavePlayerID)
|
| | | if not memRelation:
|
| | | if not defaultRelationPlayerID and relationPlayerID:
|
| | | defaultRelationPlayerID = relationPlayerID
|
| | | 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
|
| | | |
| | | relationPlayerID = defaultRelationPlayerID
|
| | | relationPlayerName = memNameDict.get(relationPlayerID, "")
|
| | | GameWorld.DebugLog("助战默认无关系队员: relationPlayerID=%s,relationPlayerName=%s" % (relationPlayerID, relationPlayerName), playerID)
|
| | | 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 == 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
|
| | | if playerID == memPlayerID:
|
| | | 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, memPlayerID
|
| | |
|
| | | 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]
|
| | |
|