From d8fac1acbf1659c5d2ff67d95f98520d557fd9cf Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期一, 02 十二月 2024 11:34:54 +0800 Subject: [PATCH] 5416 【工具】兑换码优化(兑换码邮件内容文件json支持不同的appID独立文件配置;) --- ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossChampionship.py | 111 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 91 insertions(+), 20 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossChampionship.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossChampionship.py index d105313..1dc3178 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossChampionship.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossChampionship.py @@ -29,6 +29,8 @@ import PlayerControl import PyDataManager import NetPackCommon +import GameXiangong +import GameWorship import PyGameData import ChConfig import PlayerFB @@ -69,10 +71,11 @@ 跨服排位争霸赛最终排名官职信息 ShareDefine.Def_UniversalGameRecType_CrossChampionshipOfficial time:time 上一次辞退下级仙官时间 -value1:zoneID官职ID 官职ID*10 + 分区ID +value1:官职ID 官职ID value2:playerID 玩家ID,可能为0 value3:worshipValue 被膜拜次数*10 + 是否双倍 value4:rank 排名 +value5:zoneID 分区ID StrValue3: [申请该官职玩家ID,...] ''' @@ -80,7 +83,8 @@ ''' 跨服排位争霸赛官职挑战信息 ShareDefine.Def_UniversalGameRecType_CrossChampionshipOffChallenge -value1:zoneID官职ID 官职ID*10 + 分区ID +value1:官职ID 官职ID +value2:zoneID 分区ID StrValue3: {挑战玩家信息key:value, ...} ''' @@ -110,6 +114,8 @@ self.lv = 0 self.fightPower = 0 self.realmLV = 0 + self.face = 0 + self.facePic = 0 return def GetString(self): @@ -124,9 +130,11 @@ playerShortInfo["LV"] = cacheDict.get("LV", 1) playerShortInfo["FightPower"] = cacheDict.get("FightPower", 0) playerShortInfo["RealmLV"] = cacheDict.get("RealmLV", 0) + playerShortInfo["Face"] = cacheDict.get("Face", 0) + playerShortInfo["FacePic"] = cacheDict.get("FacePic", 0) self.applyPlayerInfo[applyPlayerID] = playerShortInfo return {"zoneID":self.zoneID, "officialID":self.officialID, "lastDismissJuniorTime":self.lastDismissJuniorTime, - "accID":self.accID, "playerID":self.playerID, "playerName":self.playerName, + "accID":self.accID, "playerID":self.playerID, "playerName":self.playerName, "face":self.face, "facePic":self.facePic, "job":self.job, "lv":self.lv, "fightPower":self.fightPower, "realmLV":self.realmLV, "rank":self.rank, "worshipCount":self.worshipCount, "applyPlayerInfo":self.applyPlayerInfo, "challengeList":self.challengeList, "worshipDouble":self.worshipDouble @@ -206,11 +214,13 @@ self.lv = 0 self.fightPower = 0 self.realmLV = 0 + self.face = 0 + self.facePic = 0 return def GetString(self): return {"zoneID":self.zoneID, "accID":self.accID, "playerID":self.playerID, "playerName":self.playerName, - "job":self.job, "lv":self.lv, "fightPower":self.fightPower, "realmLV":self.realmLV} + "job":self.job, "lv":self.lv, "fightPower":self.fightPower, "realmLV":self.realmLV, "face":self.face, "facePic":self.facePic} def SetAttr(self, attrDict): for k, v in attrDict.items(): @@ -342,6 +352,8 @@ obj.lv = cacheDict.get("LV", obj.lv) obj.fightPower = cacheDict.get("FightPower", obj.fightPower) obj.realmLV = cacheDict.get("RealmLV", obj.realmLV) + obj.face = cacheDict.get("Face", obj.face) + obj.facePic = cacheDict.get("FacePic", obj.facePic) return @@ -504,9 +516,8 @@ for index in xrange(officialRecDataList.Count()): recData = officialRecDataList.At(index) lastDismissJuniorTime = recData.GetTime() - value1 = recData.GetValue1() - officialID = value1 / 10 - zoneID = value1 % 10 + officialID = recData.GetValue1() + zoneID = recData.GetValue5() playerID = recData.GetValue2() worshipValue = recData.GetValue3() worshipCount = worshipValue / 10 @@ -537,9 +548,8 @@ GameWorld.Log("加载跨服排位官职挑战记录信息! %s" % challengeRecDataList.Count()) for index in xrange(challengeRecDataList.Count()): recData = challengeRecDataList.At(index) - value1 = recData.GetValue1() - officialID = value1 / 10 - zoneID = value1 % 10 + officialID = recData.GetValue1() + zoneID = recData.GetValue2() strValue3 = recData.GetStrValue3() if not strValue3: continue @@ -631,22 +641,23 @@ offObj = offZoneMgr.GetOfficialObj(officialID) if not offObj: continue - value1 = offObj.officialID * 10 + zoneID recData = officialRecDataList.AddRec() recData.SetTime(offObj.lastDismissJuniorTime) - recData.SetValue1(value1) + recData.SetValue1(officialID) recData.SetValue2(offObj.playerID) recData.SetValue3(offObj.worshipCount * 10 + offObj.worshipDouble) recData.SetValue4(offObj.rank) + recData.SetValue5(zoneID) strValue3 = "%s" % offObj.applyPlayerInfo.keys() strValue3 = strValue3.replace(" ", "") recData.SetStrValue3(strValue3) - #GameWorld.Log(" zoneID=%s,officialID=%s,playerID=%s,rank=%s,challengeCount=%s" - # % (zoneID, officialID, offObj.playerID, offObj.rank, len(offObj.challengeList))) + GameWorld.Log(" zoneID=%s,officialID=%s,playerID=%s,rank=%s,challengeCount=%s" + % (zoneID, officialID, offObj.playerID, offObj.rank, len(offObj.challengeList))) for challengeDict in offObj.challengeList: challRecData = challengeRecDataList.AddRec() - challRecData.SetValue1(value1) + challRecData.SetValue1(officialID) + challRecData.SetValue2(zoneID) strValue3 = str(challengeDict) strValue3 = strValue3.replace(" ", "") challRecData.SetStrValue3(strValue3) @@ -758,11 +769,22 @@ return +def DoChampionshipOpen(curPlayer): + NotifyPlayerChampionshipInfo(curPlayer, GameWorld.GetGameWorld().GetTick()) + return + def OnPlayerLogin(curPlayer, tick): if GameWorld.IsCrossServer(): return + if not PlayerControl.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Championship): + return + + NotifyPlayerChampionshipInfo(curPlayer, tick) + return + +def NotifyPlayerChampionshipInfo(curPlayer, tick): playerID = curPlayer.GetPlayerID() champMgr = GetChampionshipMgr() pkZoneIDList = champMgr.GetChampPKZoneIDList() @@ -1382,7 +1404,7 @@ # 添加开启分线数据 realMapID = mapID - copyMapObj = PlayerFB.CrossCopyMapInfo(zoneID, 0) + copyMapObj = PlayerFB.CrossCopyMapInfo(zoneID, ChConfig.Def_FBMapID_CrossChampionship, 0) copyMapObj.realMapID = realMapID copyMapObj.copyMapID = copyMapID key = (realMapID, copyMapID) @@ -1934,11 +1956,21 @@ champMgr = GetChampionshipMgr() champMgr.ClearOfficialZone() # 最终结算重置仙官信息,替换最新仙官 + # 膜拜重置 + worshipType = ShareDefine.Def_WorshipType_CrossChampionship + GameWorship.DelWorshipPlayer(worshipType) + pkZoneIDList = champMgr.GetChampPKZoneIDList() GameWorld.Log("pkZoneIDList=%s" % pkZoneIDList) + syncNewWorshipList = [] + syncNewXiangongDict = {} + crossZoneName = GameWorld.GetCrossZoneName() for zoneID in pkZoneIDList: GameWorld.Log("=== 结算排位分区: zoneID=%s ===" % zoneID, zoneID) + zoneIpyData = IpyGameDataPY.GetIpyGameData("CrossZonePK", crossZoneName, zoneID) + serverIDRangeList = zoneIpyData.GetServerGroupIDList() if zoneIpyData else [] + finalPlayerIDList = [] pkZoneMgr = champMgr.GetChampPKZoneMgr(zoneID) if not pkZoneMgr: @@ -1968,8 +2000,9 @@ rankIpyData = IpyGameDataPY.GetIpyGameData("ChampionshipRank", rank) officialID = rankIpyData.GetMainOfficialID() if rankIpyData else 0 rankAwardItemList = rankIpyData.GetRankAwardItemList() if rankIpyData else [] - GameWorld.Log(" 最终排名: zoneID=%s,rank=%s,playerID=%s,officialID=%s,rankAwardItemList=%s,accID=%s,fightPower=%s" - % (zoneID, rank, playerID, officialID, rankAwardItemList, accID, fightPower), zoneID) + xiangongID = rankIpyData.GetXiangongID() if rankIpyData else 0 + GameWorld.Log(" 最终排名: zoneID=%s,rank=%s,playerID=%s,officialID=%s,xiangongID=%s,rankAwardItemList=%s,accID=%s,fightPower=%s" + % (zoneID, rank, playerID, officialID, xiangongID, rankAwardItemList, accID, fightPower), zoneID) if officialID: offObj = ChampionshipOfficial() @@ -1980,9 +2013,13 @@ offZoneMgr.officialInfo[officialID] = offObj + # 名次奖励 paramList = [rank] PlayerCompensation.SendMailByKey("CrossChampionshipPKRank", [playerID], rankAwardItemList, paramList, crossMail=True) + + GameXiangong.AddXiangongPlayer(xiangongID, playerID, serverIDRangeList, rank, syncNewXiangongDict) + GameWorship.AddWorshipPlayer(worshipType, rank, playerID, serverIDRangeList, syncNewWorshipList) # 处理4强竞猜发奖励 guessType = 4 @@ -2022,6 +2059,10 @@ serverGroupIDList = [] # 全服统一逻辑 PlayerControl.WorldNotifyCross(serverGroupIDList, 0, "ChampionshipOver") + + # 通知新添加的膜拜 + GameWorship.SendNewWorshipPlayer(syncNewWorshipList) + GameXiangong.SendNewXiangongPlayerToClientServer(syncNewXiangongDict) GameWorld.Log("===================================================================") return @@ -2633,6 +2674,7 @@ GameWorld.Log("挑战目标仙官玩家ID结果! zoneID=%s,mainOfficialID=%s,officialID=%s,fightPower=%s,tagFightPower=%s,tagPlayerID=%s,Ret=%s" % (zoneID, mainOfficialID, officialID, fightPower, tagFightPower, tagPlayerID, Ret), playerID) + syncOfficialIDList = [officialID] playerName = PropData.get("Name", str(playerID)) # 暂时只记录挑战胜利的 if Ret == 1: @@ -2651,13 +2693,22 @@ officialObj.ResetPlayer() officialObj.playerID = playerID + # 移除该玩家的其他仙官申请 + for offID in offZoneMgr.officialInfo.keys(): + offObj = offZoneMgr.GetOfficialObj(offID) + if not offObj: + continue + if playerID in offObj.applyPlayerInfo: + offObj.applyPlayerInfo.pop(playerID) + syncOfficialIDList.append(offID) + # 邮件通知对方,官职被挑战了 if offPlayerID: PlayerCompensation.SendMailByKey("CrossChampionshipOfficialBeChallenge", [offPlayerID], [], [playerName, officialID], crossMail=True) exData = {"exDataType":"OfficialChallenge", "playerID":playerID, "tagPlayerName":officialObj.playerName, "mainOfficialID":mainOfficialID, "officialID":officialID, "Ret":Ret} - Send_CrossServerMsg_ChampionshipOfficial(zoneID, [officialID], exData=exData) + Send_CrossServerMsg_ChampionshipOfficial(zoneID, syncOfficialIDList, exData=exData) return #// C0 23 跨服排位仙官挑战记录查询 #tagCGChampionshipOfficialChallengeQuery @@ -2853,11 +2904,13 @@ def Sync_ChampionshipPKZoneGroupInfo(zoneID, groupMarkDict=None, curPlayer=None): ## 同步排位分区分组信息 # @param groupMarkDict: {groupMark:[battleNum, ...], ...} - + champMgr = GetChampionshipMgr() if curPlayer: playerZoneID = champMgr.GetPlayerPKZoneID(curPlayer.GetPlayerID()) if playerZoneID != zoneID: + return + if not PlayerControl.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Championship): return pkZoneMgr = champMgr.GetChampPKZoneMgr(zoneID) @@ -2918,6 +2971,8 @@ playerPack.FightPower = batPlayer.fightPower % ShareDefine.Def_PerPointValue playerPack.FightPowerEx = batPlayer.fightPower / ShareDefine.Def_PerPointValue playerPack.RealmLV = batPlayer.realmLV + playerPack.Face = batPlayer.face + playerPack.FacePic = batPlayer.facePic clientPack.PlayerList.append(playerPack) clientPack.PlayerCount = len(clientPack.PlayerList) @@ -2932,6 +2987,8 @@ playerZoneID = champMgr.GetPlayerPKZoneID(curPlayer.GetPlayerID()) if playerZoneID != zoneID: continue + if not PlayerControl.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Championship): + continue NetPackCommon.SendFakePack(curPlayer, clientPack) return @@ -2944,6 +3001,8 @@ champMgr = GetChampionshipMgr() playerZoneID = champMgr.GetPlayerPKZoneID(playerID) if not playerZoneID: + return + if not PlayerControl.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Championship): return pkZoneMgr = champMgr.GetChampPKZoneMgr(playerZoneID) @@ -2990,6 +3049,8 @@ playerZoneID = champMgr.GetPlayerPKZoneID(curPlayer.GetPlayerID()) if playerZoneID != zoneID: return + if not PlayerControl.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Championship): + return pkZoneMgr = champMgr.GetChampPKZoneMgr(zoneID) if not pkZoneMgr: @@ -3033,6 +3094,8 @@ playerZoneID = champMgr.GetPlayerPKZoneID(curPlayer.GetPlayerID()) if playerZoneID != zoneID: continue + if not PlayerControl.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Championship): + continue NetPackCommon.SendFakePack(curPlayer, clientPack) return @@ -3044,6 +3107,8 @@ if curPlayer: playerZoneID = champMgr.GetPlayerOfficialZoneID(curPlayer.GetPlayerID()) if playerZoneID != zoneID: + return + if not PlayerControl.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Championship): return clientPack = ChPyNetSendPack.tagGCChampionshipOfficialInfo() @@ -3067,6 +3132,8 @@ offPlayer.FightPower = offObj.fightPower % ShareDefine.Def_PerPointValue offPlayer.FightPowerEx = offObj.fightPower / ShareDefine.Def_PerPointValue offPlayer.RealmLV = offObj.realmLV + offPlayer.Face = offObj.face + offPlayer.FacePic = offObj.facePic offPack = ChPyNetSendPack.tagGCChampionshipOfficial() offPack.OfficialID = officialID @@ -3086,6 +3153,8 @@ applyPlayer.FightPower = fightPower % ShareDefine.Def_PerPointValue applyPlayer.FightPowerEx = fightPower / ShareDefine.Def_PerPointValue applyPlayer.RealmLV = playerInfo.get("RealmLV", 1) + applyPlayer.Face = playerInfo.get("Face", 0) + applyPlayer.FacePic = playerInfo.get("FacePic", 0) offPack.ApplyPlayerList.append(applyPlayer) offPack.ApplyPlayerCount = len(offPack.ApplyPlayerList) @@ -3104,6 +3173,8 @@ playerZoneID = champMgr.GetPlayerOfficialZoneID(curPlayer.GetPlayerID()) if playerZoneID != zoneID: continue + if not PlayerControl.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Championship): + continue NetPackCommon.SendFakePack(curPlayer, clientPack) return -- Gitblit v1.8.0