From cdb5d93a9fd7b32a2ed178feed4eee20ee6502e5 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期一, 11 二月 2019 15:41:24 +0800 Subject: [PATCH] 5940 【后端】【1.6】跨服PK奖励配置规则优化 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 50 ++++++++++++++++++++++++- PySysDB/PySysDBPY.h | 22 ++++++++++- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py | 34 ++++++++++++----- 3 files changed, 92 insertions(+), 14 deletions(-) diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h index 35e2da1..bb29224 100644 --- a/PySysDB/PySysDBPY.h +++ b/PySysDB/PySysDBPY.h @@ -1478,8 +1478,26 @@ struct tagCrossRealmPKDan { BYTE _DanLV; //段位等级 - list DanLVAwardList; //段位达标奖励物品列表 - list SeasonDanLVAwardList; //赛季段位奖励物品列表 +}; + +//跨服竞技场段位奖励表 + +struct tagCrossRealmPKDanAward +{ + char _CrossZoneName; //跨服分区名 + BYTE _SeasonID; //赛季ID + BYTE _DanLV; //段位等级 + list DanLVAwardList; //段位达标奖励物品列表 [[奖励物品ID,个数,是否绑定], ...] + list SeasonDanLVAwardList; //赛季段位奖励物品列表 [[奖励物品ID,个数,是否绑定], ...] +}; + +//跨服竞技场排名奖励表 + +struct tagCrossRealmPKOrderAward +{ + char _CrossZoneName; //跨服分区名 + BYTE _SeasonID; //赛季ID + dict OrderAwardInfo; //赛季排名奖励信息 {"排名":[[奖励物品ID,个数,是否绑定], ...], ...} }; //跨服分区表通用 diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py index 96c7cf6..933fd8c 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py @@ -1169,8 +1169,20 @@ "CrossRealmPKDan":( ("BYTE", "DanLV", 1), + ), + + "CrossRealmPKDanAward":( + ("char", "CrossZoneName", 1), + ("BYTE", "SeasonID", 1), + ("BYTE", "DanLV", 1), ("list", "DanLVAwardList", 0), ("list", "SeasonDanLVAwardList", 0), + ), + + "CrossRealmPKOrderAward":( + ("char", "CrossZoneName", 1), + ("BYTE", "SeasonID", 1), + ("dict", "OrderAwardInfo", 0), ), "CrossZoneComm":( @@ -3725,14 +3737,40 @@ class IPY_CrossRealmPKDan(): def __init__(self): + self.DanLV = 0 + return + + def GetDanLV(self): return self.DanLV # 段位等级 + +# 跨服竞技场段位奖励表 +class IPY_CrossRealmPKDanAward(): + + def __init__(self): + self.CrossZoneName = "" + self.SeasonID = 0 self.DanLV = 0 self.DanLVAwardList = [] self.SeasonDanLVAwardList = [] return + def GetCrossZoneName(self): return self.CrossZoneName # 跨服分区名 + def GetSeasonID(self): return self.SeasonID # 赛季ID def GetDanLV(self): return self.DanLV # 段位等级 - def GetDanLVAwardList(self): return self.DanLVAwardList # 段位达标奖励物品列表 - def GetSeasonDanLVAwardList(self): return self.SeasonDanLVAwardList # 赛季段位奖励物品列表 + def GetDanLVAwardList(self): return self.DanLVAwardList # 段位达标奖励物品列表 [[奖励物品ID,个数,是否绑定], ...] + def GetSeasonDanLVAwardList(self): return self.SeasonDanLVAwardList # 赛季段位奖励物品列表 [[奖励物品ID,个数,是否绑定], ...] + +# 跨服竞技场排名奖励表 +class IPY_CrossRealmPKOrderAward(): + + def __init__(self): + self.CrossZoneName = "" + self.SeasonID = 0 + self.OrderAwardInfo = {} + return + + def GetCrossZoneName(self): return self.CrossZoneName # 跨服分区名 + def GetSeasonID(self): return self.SeasonID # 赛季ID + def GetOrderAwardInfo(self): return self.OrderAwardInfo # 赛季排名奖励信息 {"排名":[[奖励物品ID,个数,是否绑定], ...], ...} # 跨服分区表通用 class IPY_CrossZoneComm(): @@ -4333,6 +4371,10 @@ self.ipyGodWeaponEffectLen = len(self.ipyGodWeaponEffectCache) self.ipyCrossRealmPKDanCache = self.__LoadFileData("CrossRealmPKDan", IPY_CrossRealmPKDan) self.ipyCrossRealmPKDanLen = len(self.ipyCrossRealmPKDanCache) + self.ipyCrossRealmPKDanAwardCache = self.__LoadFileData("CrossRealmPKDanAward", IPY_CrossRealmPKDanAward) + self.ipyCrossRealmPKDanAwardLen = len(self.ipyCrossRealmPKDanAwardCache) + self.ipyCrossRealmPKOrderAwardCache = self.__LoadFileData("CrossRealmPKOrderAward", IPY_CrossRealmPKOrderAward) + self.ipyCrossRealmPKOrderAwardLen = len(self.ipyCrossRealmPKOrderAwardCache) self.ipyCrossZoneCommCache = self.__LoadFileData("CrossZoneComm", IPY_CrossZoneComm) self.ipyCrossZoneCommLen = len(self.ipyCrossZoneCommCache) self.ipyCrossPenglaiZoneMapCache = self.__LoadFileData("CrossPenglaiZoneMap", IPY_CrossPenglaiZoneMap) @@ -4757,6 +4799,10 @@ def GetGodWeaponEffectByIndex(self, index): return self.ipyGodWeaponEffectCache[index] def GetCrossRealmPKDanCount(self): return self.ipyCrossRealmPKDanLen def GetCrossRealmPKDanByIndex(self, index): return self.ipyCrossRealmPKDanCache[index] + def GetCrossRealmPKDanAwardCount(self): return self.ipyCrossRealmPKDanAwardLen + def GetCrossRealmPKDanAwardByIndex(self, index): return self.ipyCrossRealmPKDanAwardCache[index] + def GetCrossRealmPKOrderAwardCount(self): return self.ipyCrossRealmPKOrderAwardLen + def GetCrossRealmPKOrderAwardByIndex(self, index): return self.ipyCrossRealmPKOrderAwardCache[index] def GetCrossZoneCommCount(self): return self.ipyCrossZoneCommLen def GetCrossZoneCommByIndex(self, index): return self.ipyCrossZoneCommCache[index] def GetCrossPenglaiZoneMapCount(self): return self.ipyCrossPenglaiZoneMapLen diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py index eae412f..9c53acb 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py @@ -93,6 +93,16 @@ return GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossDailyActionState \ % ShareDefine.DailyActionID_CrossReamPK) == ChConfig.Def_Action_Open +def GetCrossPKDanAwardIpyData(seasonID, awardDanLV, isLog): + ## 获取跨服段位奖励配置信息 + crossZoneName = GameWorld.GetCrossZoneName() + danLVAwardIpyData = IpyGameDataPY.GetIpyGameDataNotLog("CrossRealmPKDanAward", crossZoneName, seasonID, awardDanLV) + if not danLVAwardIpyData: + danLVAwardIpyData = IpyGameDataPY.GetIpyGameDataNotLog("CrossRealmPKDanAward", "", seasonID, awardDanLV) + if not danLVAwardIpyData and isLog: + GameWorld.ErrLog("找不到段位奖励配置: seasonID=%s, awardDanLV=%s" % (seasonID, awardDanLV)) + return danLVAwardIpyData + def OnCrossRealmPKSeasonChange(value): ## 赛区赛季状态变更,规定所有赛区的赛季ID都一样,且赛季ID一定是自增的,所以这里只判断赛季ID变更即可 @@ -139,10 +149,10 @@ # 邮件发放上赛季未领取的段位奖励、赛季奖励(排名或段位) for awardDanLV in xrange(playerDanLV + 1): - danLVIpyData = IpyGameDataPY.GetIpyGameData("CrossRealmPKDan", awardDanLV) - if not danLVIpyData: + danLVAwardIpyData = GetCrossPKDanAwardIpyData(seasonID, awardDanLV, False) + if not danLVAwardIpyData: continue - awardItemList = danLVIpyData.GetDanLVAwardList() + awardItemList = danLVAwardIpyData.GetDanLVAwardList() if not awardItemList: continue if pow(2, awardDanLV) & danLVAwardState: @@ -452,12 +462,12 @@ if playerDanLV < awardDanLV: GameWorld.DebugLog(" 段位未达标,无法领取!", playerID) return - danLVIpyData = IpyGameDataPY.GetIpyGameData("CrossRealmPKDan", awardDanLV) - if not danLVIpyData: + danLVAwardIpyData = GetCrossPKDanAwardIpyData(seasonID, awardDanLV, True) + if not danLVAwardIpyData: return awardIndex = awardDanLV awardStateDictName = ChConfig.Def_PDict_CrossPK_DanLVAwardState - awardItemList = danLVIpyData.GetDanLVAwardList() + awardItemList = danLVAwardIpyData.GetDanLVAwardList() eventName = "DanLV" drDataDict = {"awardDanLV":awardDanLV} @@ -569,7 +579,11 @@ "order":order, "danLV":danLV, "mapSeasonID":mapSeasonID} if order > 0: PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CrossPK_SeasonOrder % seasonID, order) - seasonOrderAwardDict = IpyGameDataPY.GetFuncEvalCfg("CrossRealmPKAward", 3, {}) # {"名次":[[物品ID,个数,是否绑定], ...], ...} + crossZoneName = GameWorld.GetCrossZoneName() + seasonOrderAwardIpyData = IpyGameDataPY.GetIpyGameDataNotLog("CrossRealmPKOrderAward", crossZoneName, seasonID) + if not seasonOrderAwardIpyData: + seasonOrderAwardIpyData = IpyGameDataPY.GetIpyGameData("CrossRealmPKOrderAward", "", seasonID) + seasonOrderAwardDict = {} if not seasonOrderAwardIpyData else seasonOrderAwardIpyData.GetOrderAwardInfo() # {"名次":[[物品ID,个数,是否绑定], ...], ...} awardOrderList = seasonOrderAwardDict.keys() awardOrderList = [int(k) for k in awardOrderList] awardOrderList.sort() @@ -590,10 +604,10 @@ # 没有奖励的话取段位奖励 if not awardItemList: - danLVIpyData = IpyGameDataPY.GetIpyGameData("CrossRealmPKDan", danLV) - if not danLVIpyData: + danLVAwardIpyData = GetCrossPKDanAwardIpyData(seasonID, danLV, False) + if not danLVAwardIpyData: return - awardItemList = danLVIpyData.GetSeasonDanLVAwardList() + awardItemList = danLVAwardIpyData.GetSeasonDanLVAwardList() mailTypeKey = "CrossServer5" notifyKey = "CrossMatching24" mailParamList = [seasonID, danLV] -- Gitblit v1.8.0