4762 【后端】组队助战类型副本助战修改(混乱妖域);宗门、渡劫、娲皇、混乱妖域结算增加同步获得仙缘币信息;增加每日助战登记修行点;
召唤成功增加同步职业信息;
| | |
| | | ("SubCmd", c_ubyte),
|
| | | ("ObjID", c_int), # 助战实例ID
|
| | | ("PlayerID", c_int), # 助战镜像ID,大于1小于100代表机器人,如果是机器人前端按顺序自己记录对应实例ID代表已召唤
|
| | | ("Job", c_ubyte), # ְҵ
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.SubCmd = 0x06
|
| | | self.ObjID = 0
|
| | | self.PlayerID = 0
|
| | | self.Job = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | ObjID:%d,
|
| | | PlayerID:%d
|
| | | PlayerID:%d,
|
| | | Job:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.ObjID,
|
| | | self.PlayerID
|
| | | self.PlayerID,
|
| | | self.Job
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | import ChPyNetSendPack
|
| | | import DataRecordPack
|
| | | import PlayerControl
|
| | | import PlayerFriend
|
| | | import ShareDefine
|
| | | import PyGameData
|
| | | import GameWorld
|
| | |
| | | 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)
|
| | |
| | | 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([teamID, friendList, memFamilyIDDict, memNameDict])
|
| | | leader.MapServer_QueryPlayerResult(0, 0, "EnterFBTeamRelation", relationInfo, len(relationInfo))
|
| | | return
|
| | |
|
| | | def __CheckTeamFBPlayerExist(curTeam):
|
| | |
| | | CDBPlayerRefresh_NPCHurtAddPer, # 对怪物伤害加成
|
| | | CDBPlayerRefresh_FinalHurtPer, # 最终输出伤害百分比
|
| | | CDBPlayerRefresh_TalentPoint, # 天赋点数 190
|
| | | CDBPlayerRefresh_DayFBHelpPoint, # 今日副本助战点数 191
|
| | | CDBPlayerRefresh_191, # 废弃 191
|
| | | CDBPlayerRefresh_GodWeaponLV_1, # 神兵等级 - 类型1 192
|
| | | CDBPlayerRefresh_GodWeaponLV_2, # 神兵等级 - 类型2 193
|
| | | CDBPlayerRefresh_GodWeaponLV_3, # 神兵等级 - 类型3 194
|
| | |
| | | DailyActionID_FamilyRobBoss, # 仙盟抢boss
|
| | | DailyActionID_KillNPC, # 野外怪物
|
| | | DailyActionID_IceLode, # 冰晶矿脉
|
| | | ) = range(1, 19 + 1)
|
| | | DailyActionID_HelpBattleCheckIn, # 助战登记 20
|
| | | ) = range(1, 20 + 1)
|
| | |
|
| | |
|
| | |
|
| | |
| | | Def_Player_Dict_RecoverFbCnt = "RecoverFbCnt_%s" # 今日找回的副本次数, 参数为副本ID
|
| | | Def_Player_Dict_ItemAddFbCnt = "ItemAddFbCnt_%s" # 使用物品增加的副本次数, 参数为副本ID
|
| | | Def_Player_Dict_EnterFbCntWeek = "EnterFbCntWeek_%s" # 本周进入副本次数, 参数为副本ID
|
| | | Def_Player_Dict_FBHelpPointCntDay = "FBHelpPointCntDay" # 今日已增加副本助战积分
|
| | | Def_Player_Dict_FbCntRegainStartTime = "FbCntRegainStartTime_%s" # 副本次数恢复开始时间, 参数为副本ID
|
| | | Def_Player_Dict_FbCntRegainTotalTime = "FbCntRegainTotalTime_%s" # 副本次数恢复还需时间, 参数为副本ID
|
| | | Def_Player_Dict_FBHistoryMaxLine = "FBHistoryMaxLine_%s" # 副本历史最高通关, 参数为副本ID
|
| | |
| | | #助战
|
| | | Def_PDict_HelpBattleCheckInCount = "HelpBattleCheckInCount" #助战登记次数, 登记次数*10+今日是否登记过
|
| | | Def_PDict_HelpBattleTotalCount = "HelpBattleTotalCount" #累计助战次数
|
| | | Def_PDict_FBRealHelpCount = "FBRealHelpCount_%s" #副本真实助战次数,仅针对真实进去打的副本,参数mapID
|
| | | #-------------------------------------------------------------------------------
|
| | | #类型 Def_PDictType_OnlinePrize
|
| | | Def_PDict1_OnlinePrizeCnt = "OnlinePrizeCnt" # 新手在线已领取奖励次数
|
| | |
| | | ("SubCmd", c_ubyte),
|
| | | ("ObjID", c_int), # 助战实例ID
|
| | | ("PlayerID", c_int), # 助战镜像ID,大于1小于100代表机器人,如果是机器人前端按顺序自己记录对应实例ID代表已召唤
|
| | | ("Job", c_ubyte), # ְҵ
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.SubCmd = 0x06
|
| | | self.ObjID = 0
|
| | | self.PlayerID = 0
|
| | | self.Job = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | ObjID:%d,
|
| | | PlayerID:%d
|
| | | PlayerID:%d,
|
| | | Job:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.ObjID,
|
| | | self.PlayerID
|
| | | self.PlayerID,
|
| | | self.Job
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | Over_extrScore = 'extrScore' #已获得额外积分
|
| | | Over_enterLV = 'enterLV' #进入时等级
|
| | | Over_leaderID = 'leaderID' #渡劫玩家ID
|
| | | Over_xianyuanCoin = 'xianyuanCoin' #获得仙缘币信息 [获得仙缘币数, 没有获得的原因] 原因: 1-达到助战次数上限,2-达到每日获得仙缘币上限
|
| | |
|
| | | #副本行为
|
| | | (
|
| | |
| | | ##获取是否助战
|
| | | return GameWorld.GetGameFB().GetPlayerGameFBDictByKey(curPlayer.GetID(), ChConfig.FBPlayerDict_IsHelpFight)
|
| | |
|
| | |
|
| | | def AddFBHelpPoint(curPlayer, mapID, addFBCnt=1):
|
| | | ##增加副本助战积分
|
| | | PlayerControl.NotifyCode(curPlayer, 'TodayNoDungeonReward')
|
| | | fbIpyData = GetFBIpyData(mapID)
|
| | | helpPoint = fbIpyData.GetHelpPoint()
|
| | | if not helpPoint:
|
| | | return 0
|
| | | #任务
|
| | | EventShell.EventRespons_FBEvent(curPlayer, 'fbhelp')
|
| | | EventShell.EventRespons_FBEvent(curPlayer, 'fbhelp_%s'%mapID)
|
| | | # 每日活动
|
| | | PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_FBHelp)
|
| | | addHelpPoint = helpPoint * addFBCnt
|
| | | dayMaxPoint = IpyGameDataPY.GetFuncCfg('DungeonIntegral')
|
| | | curDayPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBHelpPointCntDay)
|
| | | if curDayPoint >= dayMaxPoint:
|
| | | PlayerControl.NotifyCode(curPlayer, 'AssistantIntegralFull')
|
| | | return 0
|
| | | addHelpPoint = min(addHelpPoint, dayMaxPoint-curDayPoint)
|
| | | updHelpPoint = curDayPoint+addHelpPoint
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBHelpPointCntDay, updHelpPoint)
|
| | | curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_DayFBHelpPoint, updHelpPoint, False)
|
| | | |
| | | PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_FBHelpPoint, addHelpPoint, isSysHint=False)
|
| | | PlayerControl.NotifyCode(curPlayer, 'AssistantIntegral', [addHelpPoint])
|
| | | GameWorld.DebugLog(" 增加副本助战积分!mapID=%s, addHelpPoint=%s"%(mapID, addHelpPoint), curPlayer.GetID())
|
| | | return addHelpPoint
|
| | |
|
| | | def FBOnWeek(curPlayer, onWeekType):
|
| | |
|
| | | mapIDInfo = []
|
| | |
| | | for i in xrange(ipyDataMgr.GetFBFuncCount()):
|
| | | ipyData = ipyDataMgr.GetFBFuncByIndex(i)
|
| | | mapID = ipyData.GetDataMapID()
|
| | | |
| | | # 有真实助战次数奖励限制的
|
| | | if ipyData.GetDayHelpCountMax():
|
| | | helpCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FBRealHelpCount % mapID)
|
| | | if helpCount:
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FBRealHelpCount % mapID, 0)
|
| | | GameWorld.DebugLog("重置日助战奖励次数限制!mapID=%s" % mapID)
|
| | | |
| | | dayTimes = ipyData.GetDayTimes()
|
| | | # 没有日次数限制的不处理
|
| | | if not dayTimes and not ipyData.GetBuyTimesVIPPriID() and not ipyData.GetExtraTimesVIPPriID() and not ipyData.GetExtraTimesMWPriID():
|
| | |
| | | Sync_FBPlayerFBInfoData(curPlayer, mapIDInfo)
|
| | | Sync_FBPlayerFBBuyCount(curPlayer, mapIDInfo)
|
| | |
|
| | | #重置每日获得的助战积分
|
| | | if onDayType ==ShareDefine.Def_OnEventTypeEx:
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBHelpPointCntDay, 0)
|
| | | curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_DayFBHelpPoint, 0, False)
|
| | | return
|
| | |
|
| | | ## 玩家通用副本登录处理
|
| | |
| | | NotifyFBCntRegainInfo(curPlayer)
|
| | | #判断副本里离线超过一定时间则退出副本
|
| | | CheckFBPlayerOffine(curPlayer)
|
| | | #通知助战点数
|
| | | curDayPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBHelpPointCntDay)
|
| | | curPlayer.SendPropertyRefresh(ShareDefine.CDBPlayerRefresh_DayFBHelpPoint, curDayPoint, False)
|
| | | return
|
| | |
|
| | | def CheckFBPlayerOffine(curPlayer):
|
| | | mapid = curPlayer.GetMapID()
|
| | |
|
| | |
| | | import NPCCommon
|
| | | import FBLogic
|
| | | import PlayerVip
|
| | | import IPY_GameWorld
|
| | | import PlayerActivity
|
| | |
|
| | | def DoPlayerOnDay(curPlayer):
|
| | | checkInInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HelpBattleCheckInCount)
|
| | |
| | | checkInInfo = (checkInCount + 1) * 10 + 0
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HelpBattleCheckInCount, checkInInfo)
|
| | | SyncCheckInState(curPlayer, 0, False)
|
| | | |
| | | # 重置每日已获得仙缘币
|
| | | PlayerControl.SetTodayXianyuanCoin(curPlayer, 0)
|
| | | return
|
| | |
|
| | | def DoPlayerLogin(curPlayer):
|
| | |
| | | if isOK:
|
| | | checkInInfo = (checkInCount + 1) * 10 + 1
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HelpBattleCheckInCount, checkInInfo)
|
| | | PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_HelpBattleCheckIn)
|
| | |
|
| | | # 没有数据缓存的话,马上同步一次
|
| | | if not haveViewCache:
|
| | |
| | | callResultPack = ChPyNetSendPack.tagMCHelpBattleCallResult()
|
| | | callResultPack.ObjID = objID
|
| | | callResultPack.PlayerID = calledPlayerID
|
| | | callResultPack.Job = job
|
| | | NetPackCommon.SendFakePack(curPlayer, callResultPack)
|
| | |
|
| | | # 召唤满后
|
| | |
| | | PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_FBHelpBattle, totalHelpCount)
|
| | | return
|
| | |
|
| | | def DoSingleFBAddXianyuanCoin(curPlayer, mapID, lineID):
|
| | | ## 挑战单人副本增加仙缘币,仅适用于召唤镜像助战挑战的副本
|
| | | def DoFBAddXianyuanCoin(curPlayer, mapID, lineID, isHelp=False):
|
| | | '''真人挑战副本增加仙缘币,包含过关或助战(不含镜像助战)
|
| | | @param isHelp: 是否助战的
|
| | | @return: 获得的仙缘币, 无法获得仙缘币原因(1-达到助战次数上限,2-达到每日获得仙缘币上限)
|
| | | '''
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | fbFuncIpyData = IpyGameDataPY.GetIpyGameData("FBFunc", mapID)
|
| | | fbHelpIpyData = IpyGameDataPY.GetIpyGameData("FBHelpBattle", mapID, lineID)
|
| | | if not fbFuncIpyData or not fbHelpIpyData:
|
| | | return
|
| | | if not fbFuncIpyData:
|
| | | return 0, 0
|
| | |
|
| | | 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 += 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
|
| | | #达到上限也需要记录,所以这里暂不限制
|
| | | #if todayXianyuanCoin >= playerXianyuanCoinUpper:
|
| | | # GameWorld.DebugLog("玩家今日仙缘币已达上限!todayXianyuanCoin=%s,playerXianyuanCoinUpper=%s" |
| | | # % (todayXianyuanCoin, playerXianyuanCoinUpper), playerID)
|
| | | # return
|
| | |
|
| | | relationAdd = 0
|
| | | 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[1] if len(relationAddList) == 2 else 0
|
| | | 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("挑战单人副本增加仙缘币: coinAdd=%s,canAddMax=%s,coinAddReal=%s" % (coinAdd, canAddMax, coinAddReal), playerID)
|
| | | 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)
|
| | |
|
| | | # 通知自己获得仙缘币
|
| | | Sync_AddXianyuanCoinMsg(curPlayer, mapID, lineID, coinAddReal)
|
| | | return
|
| | | Sync_AddXianyuanCoinMsg(curPlayer, mapID, lineID, coinAddReal, relationPlayerID, relationPlayerName)
|
| | | return coinAddReal, reason
|
| | |
|
| | | def DoTeamFBAddXianyuanCoin(curPlayer, mapID, lineID, callPlayerID, callPlayerName, relation):
|
| | | ## 挑战组队副本增加仙缘币
|
| | | return
|
| | | def __GetTeamFBMemRelationInfo(curPlayer, relationCoinAddDict, isHelp):
|
| | | relationAdd = 0 # 社交关系加成
|
| | | relationPlayerID = 0
|
| | | relationPlayerName = ""
|
| | | teamID = curPlayer.GetTeamID()
|
| | | if teamID not in PyGameData.g_teamFBMemRelationDict:
|
| | | return relationAdd, relationPlayerID, relationPlayerName
|
| | | |
| | | friendList, memFamilyIDDict, memNameDict = PyGameData.g_teamFBMemRelationDict[teamID]
|
| | | relationList = IpyGameDataPY.GetFuncEvalCfg("HelpBattlePoint", 3, []) # 社交关系优先级
|
| | | 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
|
| | | 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
|
| | | if not memRelation:
|
| | | continue
|
| | | relationAddList = relationCoinAddDict.get(str(memRelation), [])
|
| | | relationAdd += relationAddList[0] if len(relationAddList) == 2 else 0
|
| | | |
| | | return relationAdd, relationPlayerID, relationPlayerName
|
| | |
|
| | | def Sync_AddXianyuanCoinMsg(curPlayer, mapID, funcLineID, addXianyuanCoin, callPlayerID=0, callPlayerName=""):
|
| | | '''同步自己主动战斗获得仙缘币信息
|
| | |
| | | import ShareDefine
|
| | | import ItemCommon
|
| | | import PlayerSuccess
|
| | | import FBHelpBattle
|
| | | import EventReport
|
| | |
|
| | | import math
|
| | |
| | | FBCommon.Notify_FB_Over(curPlayer, {FBCommon.Over_isPass: 0})
|
| | | continue
|
| | | overDict = {FBCommon.Over_grade:star,FBCommon.Over_dataMapID:mapID,FBCommon.Over_isPass:int(isPass), FBCommon.Over_costTime:costTime}
|
| | | #增加助战积分
|
| | | isHelp = False
|
| | | if FBCommon.GetIsHelpFight(curPlayer):
|
| | | FBCommon.AddFBHelpPoint(curPlayer, mapID, 1)
|
| | | isHelp = True
|
| | | else:
|
| | | #给奖励
|
| | | needSpace = len(prizeItemList)
|
| | |
| | | overDict[FBCommon.Over_exp] = exp
|
| | | overDict[FBCommon.Over_expPoint] = expPoint
|
| | |
|
| | | addXianyuanCoin, reason = FBHelpBattle.DoFBAddXianyuanCoin(curPlayer, mapID, 0, isHelp)
|
| | | overDict[FBCommon.Over_xianyuanCoin] = [addXianyuanCoin, reason]
|
| | | |
| | | FBCommon.Notify_FB_Over(curPlayer, overDict)
|
| | | #成就
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_ChaosDemon, 1, [playerCount, star])
|
| | |
| | | EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_DuJie, lineID, ChConfig.CME_Log_End, 0, isPass)
|
| | |
|
| | | curPlayer.Sync_TimeTick(IPY_GameWorld.tttLeaveMap, 0, leaveTick, True)
|
| | | FBCommon.NotifyFBOver(curPlayer, ChConfig.Def_FBMapID_DuJie, lineID, isPass, overDict)
|
| | | if isPass and leaderPlayer:
|
| | | if curPlayer.GetPlayerID() == leaderPlayerID:
|
| | | #渡劫通过处理
|
| | |
| | | FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_LastEnterFBTick % ChConfig.Def_FBMapID_DuJie, 0)
|
| | | FBCommon.SyncFBEnterTick(curPlayer)
|
| | | if lineID:
|
| | | FBHelpBattle.DoSingleFBAddXianyuanCoin(curPlayer, ChConfig.Def_FBMapID_DuJie, FBPropertyMark)
|
| | | # else:
|
| | | # #帮忙打的给奖励
|
| | | # __GiveTeamAward(curPlayer, leaderPlayer, realmIpyData, curStar)
|
| | | # EventShell.EventRespons_DujieFBHelpPass(curPlayer)
|
| | | # FBCommon.AddFBHelpPoint(curPlayer, ChConfig.Def_FBMapID_DuJie, 1)
|
| | | addXianyuanCoin, reason = FBHelpBattle.DoFBAddXianyuanCoin(curPlayer, ChConfig.Def_FBMapID_DuJie, FBPropertyMark)
|
| | | overDict[FBCommon.Over_xianyuanCoin] = [addXianyuanCoin, reason]
|
| | |
|
| | | if realmIpyData and realmIpyData.GetIsBigRealm():
|
| | | #成就
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_DujieFBHelpPass, 1)
|
| | | if playerCnt > 1: #多人组队渡劫
|
| | | EventShell.EventRespons_FBEvent(curPlayer, 'teamdujie')
|
| | | FBCommon.NotifyFBOver(curPlayer, ChConfig.Def_FBMapID_DuJie, lineID, isPass, overDict)
|
| | |
|
| | | return
|
| | |
|
| | |
| | | EventShell.EventRespons_FBEvent(curPlayer, "zmsl_%s_%s" % (lineID, star))
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_MunekadoTrial, 1, [playerCount, star, lineID+1])
|
| | | EventShell.EventRespons_FBEvent(curPlayer, "passzmsl")
|
| | | #增加助战积分
|
| | | # if isHelpFight:
|
| | | # EventShell.EventRespons_FBEvent(curPlayer, "helpzmsl_%s"%lineID)
|
| | | # FBCommon.AddFBHelpPoint(curPlayer, mapID, 1)
|
| | | # overDict.pop(FBCommon.Over_itemInfo, 0)
|
| | | # else:
|
| | | # 如果在副本中过天,则只给物品奖励,不变更过关信息
|
| | | if not isInFBOnDay:
|
| | | FBCommon.AddEnterFBCount(curPlayer, mapID, 1)
|
| | | FBHelpBattle.DoSingleFBAddXianyuanCoin(curPlayer, mapID, lineID)
|
| | | addXianyuanCoin, reason = FBHelpBattle.DoFBAddXianyuanCoin(curPlayer, mapID, lineID)
|
| | | overDict[FBCommon.Over_xianyuanCoin] = [addXianyuanCoin, reason]
|
| | | needSyncFBData = False
|
| | | else:
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_IsInFBOnDay, 0)
|
| | |
| | | EventShell.EventRespons_PassQueenRelecs(curPlayer, lineID, grade)
|
| | | #任务
|
| | | EventShell.EventRespons_FBEvent(curPlayer, "queenrelics_pass")
|
| | | FBCommon.NotifyFBOver(curPlayer, dataMapID, lineID, isPass, overDict)
|
| | |
|
| | | # 记录结算到的线路层,记录值+1
|
| | | updRewardLine = lineID + 1
|
| | |
| | | GameWorld.DebugLog("首次结算奖励,增加挑战次数!", playerID)
|
| | | needSyncFBData = True
|
| | | FBCommon.AddEnterFBCount(curPlayer, dataMapID)
|
| | | FBHelpBattle.DoSingleFBAddXianyuanCoin(curPlayer, mapID, lineID)
|
| | | addXianyuanCoin, reason = FBHelpBattle.DoFBAddXianyuanCoin(curPlayer, mapID, lineID)
|
| | | overDict[FBCommon.Over_xianyuanCoin] = [addXianyuanCoin, reason]
|
| | | else:
|
| | | GameWorld.DebugLog("副本中过天,不增加挑战次数!", playerID)
|
| | | PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_QueenRelicsEx, 1)
|
| | |
| | |
|
| | | if needSyncFBData:
|
| | | FBCommon.Sync_FBPlayerFBInfoData(curPlayer, dataMapID) # 同步信息
|
| | | |
| | | FBCommon.NotifyFBOver(curPlayer, dataMapID, lineID, isPass, overDict)
|
| | | return
|
| | |
|
| | | def __GivePlayerQueenRelicsReward(curPlayer, dataMapID, rewardLineID, curLineID, passGrade, maxGrade, rewardRateList):
|
| | |
| | | ownerID = gameFBMgr.GetGameFBDictByKey(ChConfig.Def_FB_SingleFBPlayerID)
|
| | | if ownerID in PyGameData.g_fbHelpBattlePlayerDict:
|
| | | PyGameData.g_fbHelpBattlePlayerDict.pop(ownerID)
|
| | | GameWorld.DebugLog("清除单人副本镜像助战信息: ownerID=%s" % ownerID)
|
| | | elif fbType == IPY_GameWorld.fbtTeam:
|
| | | teamID = gameWorld.GetPropertyID()
|
| | | if teamID in PyGameData.g_teamFBMemRelationDict:
|
| | | PyGameData.g_teamFBMemRelationDict.pop(teamID)
|
| | | GameWorld.DebugLog("清除组队副本队员关系信息: teamID=%s" % teamID)
|
| | |
|
| | | #副本关闭时统一清怪
|
| | | FBCommon.ClearFBNPC()
|
| | |
| | |
|
| | | ## 玩家今日已获得仙缘币
|
| | | def GetTodayXianyuanCoin(curPlayer): return curPlayer.GetExAttr11()
|
| | | def SetTodayXianyuanCoin(curPlayer, value): return curPlayer.SetExAttr11(value)
|
| | | def AddTodayXianyuanCoin(curPlayer, addValue): return curPlayer.SetExAttr11(curPlayer.GetExAttr11() + addValue, False, True)
|
| | |
|
| | | ##VIP到期时间, 需要同步GameServer
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package Player.RemoteQuery.GY_Query_EnterFBTeamRelation
|
| | | #
|
| | | # @todo:进入组队副本队员间社交关系信息
|
| | | # @author hxp
|
| | | # @date 2018-11-26
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 进入组队副本队员间社交关系信息
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2018-11-26 下午4:18:04"""
|
| | | #-------------------------------------------------------------------------------
|
| | | #导入
|
| | | import PyGameData
|
| | | import GameWorld
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | | #逻辑实现
|
| | | ## 请求逻辑
|
| | | # @param query_Type 请求类型
|
| | | # @param query_ID 请求的玩家ID
|
| | | # @param packCMDList 发包命令 [ ]
|
| | | # @param tick 当前时间
|
| | | # @return "True" or "False" or ""
|
| | | # @remarks 函数详细说明.
|
| | | def DoLogic(query_Type, query_ID, packCMDList, tick):
|
| | | return
|
| | |
|
| | |
|
| | | #执行结果
|
| | | ## 执行结果
|
| | | # @param curPlayer 发出请求的玩家
|
| | | # @param callFunName 功能名称
|
| | | # @param funResult 查询的结果
|
| | | # @param tick 当前时间
|
| | | # @return None
|
| | | # @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
|
| | | |
| | | return
|
| | |
|
| | |
| | |
|
| | | g_fbHelpBattlePlayerDict = {} # 助战玩家信息 {playerID:{助战玩家ID:{助战玩家简要信息字典} ...}, ...}
|
| | |
|
| | | g_teamFBMemRelationDict = {} # 组队副本队员关系信息 {teamID:[[好友组合列表], {队员ID:家族ID, ...}], }
|
| | |
|
| | |
|
| | |
| | | CDBPlayerRefresh_NPCHurtAddPer, # 对怪物伤害加成
|
| | | CDBPlayerRefresh_FinalHurtPer, # 最终输出伤害百分比
|
| | | CDBPlayerRefresh_TalentPoint, # 天赋点数 190
|
| | | CDBPlayerRefresh_DayFBHelpPoint, # 今日副本助战点数 191
|
| | | CDBPlayerRefresh_191, # 废弃 191
|
| | | CDBPlayerRefresh_GodWeaponLV_1, # 神兵等级 - 类型1 192
|
| | | CDBPlayerRefresh_GodWeaponLV_2, # 神兵等级 - 类型2 193
|
| | | CDBPlayerRefresh_GodWeaponLV_3, # 神兵等级 - 类型3 194
|
| | |
| | | DailyActionID_FamilyRobBoss, # 仙盟抢boss
|
| | | DailyActionID_KillNPC, # 野外怪物
|
| | | DailyActionID_IceLode, # 冰晶矿脉
|
| | | ) = range(1, 19 + 1)
|
| | | DailyActionID_HelpBattleCheckIn, # 助战登记 20
|
| | | ) = range(1, 20 + 1)
|
| | |
|
| | |
|
| | |
|