hxp
2019-02-11 cdb5d93a9fd7b32a2ed178feed4eee20ee6502e5
5940 【后端】【1.6】跨服PK奖励配置规则优化
3个文件已修改
106 ■■■■ 已修改文件
PySysDB/PySysDBPY.h 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossRealmPK.py 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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,个数,是否绑定], ...], ...}
};
//跨服分区表通用
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
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]