9063 【BT2】【BT3】【主干】【后端】新增宝箱跟据境界开启物品(宝箱产出表新增境界字段)
| | |
| | | struct tagChestsAward
|
| | | {
|
| | | DWORD _ChestsItemID; //宝箱物品ID
|
| | | WORD RealmLV; //境界等级
|
| | | WORD AwardLV; //宝箱奖励等级
|
| | | dict SelectItemDict; //选择物品ID对应个数字典,规定只能选一个
|
| | | dict FixedItemDict; //固定产出物品ID对应个数字典
|
| | |
| | |
|
| | | "ChestsAward":(
|
| | | ("DWORD", "ChestsItemID", 1),
|
| | | ("WORD", "RealmLV", 0),
|
| | | ("WORD", "AwardLV", 0),
|
| | | ("dict", "SelectItemDict", 0),
|
| | | ("dict", "FixedItemDict", 0),
|
| | |
| | | |
| | | def __init__(self): |
| | | self.ChestsItemID = 0
|
| | | self.RealmLV = 0
|
| | | self.AwardLV = 0
|
| | | self.SelectItemDict = {}
|
| | | self.FixedItemDict = {}
|
| | |
| | | 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对应个数字典
|
| | |
| | | # 多条产出记录的,按等级来
|
| | | 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]
|
| | |
|