9063 【BT2】【BT3】【主干】【后端】新增宝箱跟据境界开启物品(宝箱产出表新增境界字段)
3个文件已修改
25 ■■■■ 已修改文件
PySysDB/PySysDBPY.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_Chests.py 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PySysDB/PySysDBPY.h
@@ -1185,6 +1185,7 @@
struct tagChestsAward
{
    DWORD        _ChestsItemID;    //宝箱物品ID
    WORD        RealmLV;        //境界等级
    WORD        AwardLV;        //宝箱奖励等级
    dict        SelectItemDict; //选择物品ID对应个数字典,规定只能选一个
    dict        FixedItemDict; //固定产出物品ID对应个数字典
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -959,6 +959,7 @@
                "ChestsAward":(
                        ("DWORD", "ChestsItemID", 1),
                        ("WORD", "RealmLV", 0),
                        ("WORD", "AwardLV", 0),
                        ("dict", "SelectItemDict", 0),
                        ("dict", "FixedItemDict", 0),
@@ -3830,6 +3831,7 @@
    
    def __init__(self):
        self.ChestsItemID = 0
        self.RealmLV = 0
        self.AwardLV = 0
        self.SelectItemDict = {}
        self.FixedItemDict = {}
@@ -3851,6 +3853,7 @@
        return
        
    def GetChestsItemID(self): return self.ChestsItemID # 宝箱物品ID
    def GetRealmLV(self): return self.RealmLV # 境界等级
    def GetAwardLV(self): return self.AwardLV # 宝箱奖励等级
    def GetSelectItemDict(self): return self.SelectItemDict # 选择物品ID对应个数字典,规定只能选一个
    def GetFixedItemDict(self): return self.FixedItemDict # 固定产出物品ID对应个数字典
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_Chests.py
@@ -399,19 +399,26 @@
    # 多条产出记录的,按等级来
    lvIpyDataList = []
    for ipyData in awardIpyDataList:
        lvIpyDataList.append([ipyData.GetAwardLV(), ipyData])
        lvIpyDataList.append([ipyData.GetRealmLV(), ipyData.GetAwardLV(), ipyData])
    lvIpyDataList.sort() # 升序排序
    
    curLV = curPlayer.GetLV()
    minLV = lvIpyDataList[0][0]
    curRealmLV = curPlayer.GetOfficialRank()
    minRealmLV, minLV = lvIpyDataList[0][0], lvIpyDataList[0][1]
    if curLV < minLV:
        GameWorld.ErrLog("当前等级无法开启该宝箱!curLV=%s,minLV=%s,chestsItemID=%s" % (curLV, minLV, chestsItemID), curPlayer.GetPlayerID())
        GameWorld.ErrLog("当前等级无法开启该宝箱!curLV=%s < minLV=%s,chestsItemID=%s" % (curLV, minLV, chestsItemID), curPlayer.GetPlayerID())
        return
    if curRealmLV < minRealmLV:
        GameWorld.ErrLog("当前境界无法开启该宝箱!curRealmLV=%s < minRealmLV=%s,chestsItemID=%s" % (curRealmLV, minRealmLV, chestsItemID), curPlayer.GetPlayerID())
        return
    
    for i, lvIpyInfo in enumerate(lvIpyDataList[1:], 1):
        awardLV, ipyData = lvIpyInfo
        if curLV < awardLV:
            awardLV, ipyData = lvIpyDataList[i - 1]
            return ipyData
        realmLV, awardLV, ipyData = lvIpyInfo
        if realmLV: # 境界优先,二选一
            if curRealmLV < realmLV:
                return lvIpyDataList[i - 1][-1]
        else:
            if curLV < awardLV:
                return lvIpyDataList[i - 1][-1]
    return awardIpyDataList[-1]