From eba5b922ac7bfbc45ed54054852789c02e97a2e1 Mon Sep 17 00:00:00 2001 From: hch <305670599@qq.com> Date: 星期一, 26 十一月 2018 18:04:14 +0800 Subject: [PATCH] 4923 【后端】【1.3】神兵技能--神兵护盾 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBHelpBattle.py | 77 ++++++++++++++++++++++++++++++++------ 1 files changed, 64 insertions(+), 13 deletions(-) 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 9158120..61b4e32 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 @@ -18,6 +18,7 @@ import GameWorld import ChConfig import PlayerControl +import PlayerBillboard import ChPyNetSendPack import NetPackCommon import PlayerViewCacheTube @@ -34,8 +35,26 @@ def DoPlayerOnDay(curPlayer): checkInInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HelpBattleCheckInCount) checkInCount = checkInInfo / 10 # 累计登记 - checkInInfo = (checkInCount + 1) * 10 + 0 - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HelpBattleCheckInCount, checkInInfo) + todayIsCheckIn = checkInInfo % 10 # 今天是否已登记 + if todayIsCheckIn: + checkInInfo = (checkInCount + 1) * 10 + 0 + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HelpBattleCheckInCount, checkInInfo) + SyncCheckInState(curPlayer, 0, False) + return + +def DoPlayerLogin(curPlayer): + checkInInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HelpBattleCheckInCount) + todayIsCheckIn = checkInInfo % 10 # 今天是否已登记 + if todayIsCheckIn: + SyncCheckInState(curPlayer, 1, True) + return + +def SyncCheckInState(curPlayer, checkInState, isLogin): + ## 同步登记状态 + checkInPack = ChPyNetSendPack.tagMCHelpBattleCheckInResult() + checkInPack.IsOK = checkInState + checkInPack.IsLogin = int(isLogin) + NetPackCommon.SendFakePack(curPlayer, checkInPack) return def GameServer_FBHelpBattleResult(curPlayer, msgList, tick): @@ -89,9 +108,7 @@ if not haveViewCache: PlayerViewCacheTube.UpdateGameServerPlayerCache(curPlayer, tick, False) - checkInPack = ChPyNetSendPack.tagMCHelpBattleCheckInResult() - checkInPack.IsOK = isOK - NetPackCommon.SendFakePack(curPlayer, checkInPack) + SyncCheckInState(curPlayer, 1, False) GameWorld.DebugLog("FBHelpBattleResult: %s,checkInCount=%s,fightPower=%s,isOK=%s,haveViewCache=%s" % (cmd, checkInCount, fightPower, isOK, haveViewCache), curPlayer.GetPlayerID()) @@ -201,6 +218,9 @@ GameWorld.Log("召唤助战成功: calledPlayerID=%s,objID=%s,fightPower=%s" % (calledPlayerID, objID, fightPower), playerID) gameFB.SetGameFBDict(ChConfig.Def_FB_HelpBattleFBObjID % calledPlayerID, objID) calledCount += 1 + # 设置助战属性 + npcControl = NPCCommon.NPCControl(helpBattleNPC) + npcControl.SetHelpBattleRobotRebornAttr(fightPower) __DoGiveHelpBattleRobotSkill(helpBattleNPC, jobSkillDict, job, npcLV) # 通知前端召唤成功 @@ -251,7 +271,7 @@ SendGameServer_RefreshHelpBattlePlayer(curPlayer, isClientRefresh=True) return -def SendGameServer_RefreshHelpBattlePlayer(curPlayer, mapID=0, funcLineID=0, isClientRefresh=True): +def SendGameServer_RefreshHelpBattlePlayer(curPlayer, mapID=0, funcLineID=0, isClientRefresh=False): ## 发送GameServer请求刷新助战玩家列表 if not mapID: mapID = FBCommon.GetRecordMapID(curPlayer.GetMapID()) @@ -294,6 +314,9 @@ # 非客户端刷新的视为重新开始,重置刷新次数 else: 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())) msgInfo = str(["Refresh", mapID, funcLineID, isClientRefresh, costMoneyList, calledPlayerIDDict]) GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "FBHelpBattle", msgInfo, len(msgInfo)) @@ -345,6 +368,7 @@ return def __OnHelpBattleRecord(curPlayer, msgList, tick): + ## 助战记录同步 cmd, helpRecordList = msgList playerID = curPlayer.GetPlayerID() GameWorld.DebugLog("__OnHelpBattleRecord %s,helpRecordList=%s" % (cmd, helpRecordList), playerID) @@ -353,6 +377,7 @@ addXianyuanCoinTotalTotay = 0 # 累计需要增加的今日仙缘币 drList = [] + totalHelpCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HelpBattleTotalCount) recordPack = ChPyNetSendPack.tagMCHelpBattleRecordList() recordPack.RecordList = [] for recordInfo in helpRecordList: @@ -376,16 +401,22 @@ 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" % (addXianyuanCoinTotal, addXianyuanCoinTotalTotay), playerID) + 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) return def DoSingleFBAddXianyuanCoin(curPlayer, mapID, lineID): @@ -425,14 +456,34 @@ coinAddReal = min(coinAdd, canAddMax) # 实际加仙缘币 GameWorld.DebugLog("挑战单人副本增加仙缘币: coinAdd=%s,canAddMax=%s,coinAddReal=%s" % (coinAdd, canAddMax, coinAddReal), playerID) - addDataDict = {"MapID":mapID, "FuncLineID":lineID} - PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_XianyuanCoin, coinAddReal, addDataDict=addDataDict) - PlayerControl.AddTodayXianyuanCoin(curPlayer, coinAddReal) + 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 def DoTeamFBAddXianyuanCoin(curPlayer, mapID, lineID, callPlayerID, callPlayerName, relation): ## 挑战组队副本增加仙缘币 return - +def Sync_AddXianyuanCoinMsg(curPlayer, mapID, funcLineID, addXianyuanCoin, callPlayerID=0, callPlayerName=""): + '''同步自己主动战斗获得仙缘币信息 + 1. 主动发起通关镜像助战副本,此时 callPlayerID 及 name 为空 + 2. 参与通关真实助战的副本,次数如果自己是助战的,则 callPlayer 及 name 有值 + @param addXianyuanCoin: 增加的仙缘币,可能为0,代表已达本日上限,但是前端扔需要展示记录 + @param callPlayerID: 助战别人时,对方玩家的playerID + @param callPlayerName: 助战别人时,对方玩家的名字 + ''' + msgPack = ChPyNetSendPack.tagMCAddXianyuanCoinMsg() + msgPack.MapID = mapID + msgPack.FuncLineID = funcLineID + msgPack.XianyuanCoinAdd = addXianyuanCoin + msgPack.CallPlayerID = callPlayerID + msgPack.CallPlayerName = callPlayerName + msgPack.NameLen = len(msgPack.CallPlayerName) + NetPackCommon.SendFakePack(curPlayer, msgPack) + return -- Gitblit v1.8.0