5940 【后端】【1.6】跨服PK奖励配置规则优化
| | |
| | | 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,个数,是否绑定], ...], ...}
|
| | | };
|
| | |
|
| | | //跨服分区表通用
|
| | |
| | |
|
| | | "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":(
|
| | |
| | | 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(): |
| | |
| | | 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)
|
| | |
| | | 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
|
| | |
| | | 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变更即可
|
| | |
|
| | |
| | |
|
| | | # 邮件发放上赛季未领取的段位奖励、赛季奖励(排名或段位)
|
| | | 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:
|
| | |
| | | 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}
|
| | |
|
| | |
| | | "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()
|
| | |
| | |
|
| | | # 没有奖励的话取段位奖励
|
| | | 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]
|