10202 【越南】【香港】【主干】【砍树】聚魂(寻宝修改:寻宝设定单独开表;去除免费寻宝x次必出逻辑,免费次数也算常规次数;免费次数去除时间恢复,改为过天重置;每x次必出改为每种类型独立配置;)
| | |
| | | list Money; //金钱
|
| | | };
|
| | |
|
| | | //寻宝设定表
|
| | |
|
| | | struct tagTreasureSet
|
| | | {
|
| | | BYTE _TreasureType; //寻宝类型
|
| | | BYTE PackType; //放入背包
|
| | | BYTE DailyFreeCount; //每日免费次数
|
| | | list TreasureCountList; //抽奖次数列表
|
| | | DWORD CostItemID; //消耗道具ID
|
| | | list CostItemCountList; //消耗个数列表
|
| | | BYTE CostMoneyType; //消耗货币类型
|
| | | list CostMoneyList; //消耗货币列表
|
| | | WORD EnsureCount; //每x次必出
|
| | | BYTE OnceLucky; //单次幸运值
|
| | | WORD FullLucky; //满幸运值
|
| | | char LuckyRateFormat; //幸运格子概率公式
|
| | | BYTE LuckyGridNum; //幸运格子编号
|
| | | list NotifyGridNumList; //需要额外广播的格子
|
| | | BYTE AwardMoneyType; //额外奖励货币类型
|
| | | WORD AwardMoneyValue; //单次奖励货币数
|
| | | };
|
| | |
|
| | | //寻宝产出库表
|
| | |
|
| | | struct tagTreasureHouse
|
| | |
| | | dict GridLibInfo; //格子编号对应库ID {"编号":物品库ID, ...}
|
| | | list JobItemList; //职业物品组列表 [[职业1物品, 职业2物品, ...], ...]
|
| | | list GridItemRateListFree; //免费产出格子编号饼图 [[概率, 格子编号], ...]
|
| | | list FreeGridItemRateList2; //免费每满x次保底产出格子编号饼图 [[概率, 格子编号], ...]
|
| | | dict FreeGridItemRateList3; //免费第x次必出产出格子编号饼图 {次数:[[概率, 格子编号], ...], ...}
|
| | | list GridItemRateList1; //常规产出格子编号饼图 [[概率, 格子编号], ...]
|
| | | list GridItemRateList2; //每满x次保底产出格子编号饼图 [[概率, 格子编号], ...]
|
| | | dict GridItemRateList3; //第x次必出产出格子编号饼图 {次数:[[概率, 格子编号], ...], ...}
|
| | | BYTE LuckyGridNum; //幸运加成格子编号
|
| | | };
|
| | |
|
| | | //寻宝物品库
|
| | |
| | | # A3 51 寻宝功能信息 #tagMCTreasureInfo
|
| | |
|
| | | class tagMCTreasureTypeInfo(Structure):
|
| | | TreasureType = 0 #(BYTE TreasureType)//寻宝类型
|
| | | LuckValue = 0 #(WORD LuckValue)//当前幸运值
|
| | | IndexCount = 0 #(BYTE IndexCount)//索引个数
|
| | | FreeCountTime = list() #(vector<DWORD> FreeCountTime)// 模式对应开始计算免费次数时间time值
|
| | | data = None
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("TreasureType", c_ubyte), #寻宝类型
|
| | | ("LuckValue", c_ushort), #当前幸运值
|
| | | ("TreasureCount", c_int), #已寻宝总次数
|
| | | ("FreeCountToday", c_ushort), #今日已免费寻宝次数
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | self.TreasureType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.LuckValue,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.IndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.IndexCount):
|
| | | value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
|
| | | self.FreeCountTime.append(value)
|
| | | return _pos
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.TreasureType = 0
|
| | | self.LuckValue = 0
|
| | | self.IndexCount = 0
|
| | | self.FreeCountTime = list()
|
| | | self.TreasureCount = 0
|
| | | self.FreeCountToday = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 1
|
| | | length += 2
|
| | | length += 1
|
| | | length += 4 * self.IndexCount
|
| | |
|
| | | return length
|
| | | return sizeof(tagMCTreasureTypeInfo)
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteBYTE(data, self.TreasureType)
|
| | | data = CommFunc.WriteWORD(data, self.LuckValue)
|
| | | data = CommFunc.WriteBYTE(data, self.IndexCount)
|
| | | for i in range(self.IndexCount):
|
| | | data = CommFunc.WriteDWORD(data, self.FreeCountTime[i])
|
| | | return data
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | DumpString = '''// A3 51 寻宝功能信息 //tagMCTreasureInfo:
|
| | | TreasureType:%d,
|
| | | LuckValue:%d,
|
| | | IndexCount:%d,
|
| | | FreeCountTime:%s
|
| | | TreasureCount:%d,
|
| | | FreeCountToday:%d
|
| | | '''\
|
| | | %(
|
| | | self.TreasureType,
|
| | | self.LuckValue,
|
| | | self.IndexCount,
|
| | | "..."
|
| | | self.TreasureCount,
|
| | | self.FreeCountToday
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | |
|
| | | class tagMCTreasureResult(Structure):
|
| | | Head = tagHead()
|
| | | AddTreasureScore = 0 #(WORD AddTreasureScore)// 本次寻宝增加的寻宝积分
|
| | | AddMoneyType = 0 #(BYTE AddMoneyType)// 本次寻宝增加的积分货币类型,可能为0
|
| | | AddMoneyValue = 0 #(WORD AddMoneyValue)// 本次寻宝增加的积分货币值,可能为0
|
| | | AddTreasureLuck = 0 #(WORD AddTreasureLuck)// 本次寻宝增加的幸运值
|
| | | TreasureResultLen = 0 #(WORD TreasureResultLen)
|
| | | TreasureResult = "" #(String TreasureResult)// 获得物品结果[[格子编号, 物品ID,个数,是否绑定], ...]
|
| | |
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.AddTreasureScore,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.AddMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.AddMoneyValue,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.AddTreasureLuck,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.TreasureResultLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.TreasureResult,_pos = CommFunc.ReadString(_lpData, _pos,self.TreasureResultLen)
|
| | |
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0x50
|
| | | self.AddTreasureScore = 0
|
| | | self.AddMoneyType = 0
|
| | | self.AddMoneyValue = 0
|
| | | self.AddTreasureLuck = 0
|
| | | self.TreasureResultLen = 0
|
| | | self.TreasureResult = ""
|
| | |
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 2
|
| | | length += 2
|
| | | length += 2
|
| | |
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteWORD(data, self.AddTreasureScore)
|
| | | data = CommFunc.WriteBYTE(data, self.AddMoneyType)
|
| | | data = CommFunc.WriteWORD(data, self.AddMoneyValue)
|
| | | data = CommFunc.WriteWORD(data, self.AddTreasureLuck)
|
| | | data = CommFunc.WriteWORD(data, self.TreasureResultLen)
|
| | | data = CommFunc.WriteString(data, self.TreasureResultLen, self.TreasureResult)
|
| | |
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | AddTreasureScore:%d,
|
| | | AddMoneyType:%d,
|
| | | AddMoneyValue:%d,
|
| | | AddTreasureLuck:%d,
|
| | | TreasureResultLen:%d,
|
| | | TreasureResult:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.AddTreasureScore,
|
| | | self.AddMoneyType,
|
| | | self.AddMoneyValue,
|
| | | self.AddTreasureLuck,
|
| | | self.TreasureResultLen,
|
| | | self.TreasureResult
|
| | |
| | | Def_Player_Dict_RefineGiftCnt = "RefineGiftCnt_%s" #当日已炼制次数, 参数为炼制类型
|
| | | Def_Player_Dict_RefineStartTime = "RefineStartTime_%s" #炼制活动开始时间, 参数为炼制类型
|
| | |
|
| | | Def_PDict_TreasureState = "TreasureState_%s" # 寻宝相关状态,按二进制位存储, 参数(寻宝编号)
|
| | | Def_PDict_TreasureFreeCnt = "TreasureFreeCnt_%s" # 寻宝 - 当前可用免费次数, 参数(寻宝编号)
|
| | | Def_PDict_TreasureTodayTotalFreeCnt = "TreasureTTFreeCnt_%s" # 寻宝 - 今日已累计免费次数, 参数(寻宝编号)
|
| | | Def_PDict_TreasureStartCalcFreeCntTime = "TreasureFreeCntTime_%s" # 寻宝 - 开始计算免费次数CD时间, 参数(寻宝编号)
|
| | |
|
| | | Def_PDict_TreasureFreeTime = "TreasureFreeTime_%s_%s" # 寻宝开始免费计时time值, 参数(寻宝类型, 寻宝索引)
|
| | | Def_PDict_TreasureCount = "TreasureCount_%s_%s" # 寻宝次数, 参数(寻宝类型,是否免费)
|
| | | Def_PDict_TreasureFreeCount = "TreasureFreeCount_%s" # 寻宝今日已使用免费次数, 参数(寻宝类型)
|
| | | Def_PDict_TreasureCount = "TreasureCount_%s" # 寻宝次数, 参数(寻宝类型)
|
| | | Def_PDict_TreasureLuck = "TreasureLuck_%s" # 寻宝当前幸运值, 参数(寻宝类型)
|
| | |
|
| | | Def_Player_Dict_LastAutoOpenPackTick = "LastAutoOpenPackTick219_%s" #上一次自动购买的tick<背包类型>
|
| | |
| | | # A3 51 寻宝功能信息 #tagMCTreasureInfo
|
| | |
|
| | | class tagMCTreasureTypeInfo(Structure):
|
| | | TreasureType = 0 #(BYTE TreasureType)//寻宝类型
|
| | | LuckValue = 0 #(WORD LuckValue)//当前幸运值
|
| | | IndexCount = 0 #(BYTE IndexCount)//索引个数
|
| | | FreeCountTime = list() #(vector<DWORD> FreeCountTime)// 模式对应开始计算免费次数时间time值
|
| | | data = None
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("TreasureType", c_ubyte), #寻宝类型
|
| | | ("LuckValue", c_ushort), #当前幸运值
|
| | | ("TreasureCount", c_int), #已寻宝总次数
|
| | | ("FreeCountToday", c_ushort), #今日已免费寻宝次数
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | self.TreasureType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.LuckValue,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.IndexCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.IndexCount):
|
| | | value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
|
| | | self.FreeCountTime.append(value)
|
| | | return _pos
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.TreasureType = 0
|
| | | self.LuckValue = 0
|
| | | self.IndexCount = 0
|
| | | self.FreeCountTime = list()
|
| | | self.TreasureCount = 0
|
| | | self.FreeCountToday = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 1
|
| | | length += 2
|
| | | length += 1
|
| | | length += 4 * self.IndexCount
|
| | |
|
| | | return length
|
| | | return sizeof(tagMCTreasureTypeInfo)
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteBYTE(data, self.TreasureType)
|
| | | data = CommFunc.WriteWORD(data, self.LuckValue)
|
| | | data = CommFunc.WriteBYTE(data, self.IndexCount)
|
| | | for i in range(self.IndexCount):
|
| | | data = CommFunc.WriteDWORD(data, self.FreeCountTime[i])
|
| | | return data
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | DumpString = '''// A3 51 寻宝功能信息 //tagMCTreasureInfo:
|
| | | TreasureType:%d,
|
| | | LuckValue:%d,
|
| | | IndexCount:%d,
|
| | | FreeCountTime:%s
|
| | | TreasureCount:%d,
|
| | | FreeCountToday:%d
|
| | | '''\
|
| | | %(
|
| | | self.TreasureType,
|
| | | self.LuckValue,
|
| | | self.IndexCount,
|
| | | "..."
|
| | | self.TreasureCount,
|
| | | self.FreeCountToday
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | |
|
| | | class tagMCTreasureResult(Structure):
|
| | | Head = tagHead()
|
| | | AddTreasureScore = 0 #(WORD AddTreasureScore)// 本次寻宝增加的寻宝积分
|
| | | AddMoneyType = 0 #(BYTE AddMoneyType)// 本次寻宝增加的积分货币类型,可能为0
|
| | | AddMoneyValue = 0 #(WORD AddMoneyValue)// 本次寻宝增加的积分货币值,可能为0
|
| | | AddTreasureLuck = 0 #(WORD AddTreasureLuck)// 本次寻宝增加的幸运值
|
| | | TreasureResultLen = 0 #(WORD TreasureResultLen)
|
| | | TreasureResult = "" #(String TreasureResult)// 获得物品结果[[格子编号, 物品ID,个数,是否绑定], ...]
|
| | |
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.AddTreasureScore,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.AddMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.AddMoneyValue,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.AddTreasureLuck,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.TreasureResultLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.TreasureResult,_pos = CommFunc.ReadString(_lpData, _pos,self.TreasureResultLen)
|
| | |
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0x50
|
| | | self.AddTreasureScore = 0
|
| | | self.AddMoneyType = 0
|
| | | self.AddMoneyValue = 0
|
| | | self.AddTreasureLuck = 0
|
| | | self.TreasureResultLen = 0
|
| | | self.TreasureResult = ""
|
| | |
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 2
|
| | | length += 2
|
| | | length += 2
|
| | |
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteWORD(data, self.AddTreasureScore)
|
| | | data = CommFunc.WriteBYTE(data, self.AddMoneyType)
|
| | | data = CommFunc.WriteWORD(data, self.AddMoneyValue)
|
| | | data = CommFunc.WriteWORD(data, self.AddTreasureLuck)
|
| | | data = CommFunc.WriteWORD(data, self.TreasureResultLen)
|
| | | data = CommFunc.WriteString(data, self.TreasureResultLen, self.TreasureResult)
|
| | |
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | AddTreasureScore:%d,
|
| | | AddMoneyType:%d,
|
| | | AddMoneyValue:%d,
|
| | | AddTreasureLuck:%d,
|
| | | TreasureResultLen:%d,
|
| | | TreasureResult:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.AddTreasureScore,
|
| | | self.AddMoneyType,
|
| | | self.AddMoneyValue,
|
| | | self.AddTreasureLuck,
|
| | | self.TreasureResultLen,
|
| | | self.TreasureResult
|
| | |
| | | import ShareDefine
|
| | | import PlayerControl
|
| | | import PlayerTreasure
|
| | | import IpyGameDataPY
|
| | | import ClearPack
|
| | | import ChConfig
|
| | |
|
| | | import time
|
| | | import IpyGameDataPY
|
| | |
|
| | | ## GM命令执行入口
|
| | | # @param curPlayer 当前玩家
|
| | |
| | | # @remarks 函数详细说明.
|
| | | def OnExec(curPlayer, paramList):
|
| | | if not paramList:
|
| | | GameWorld.DebugAnswer(curPlayer, "重置寻宝:SetXunbao 0 选填(是否免费 清空背包)")
|
| | | GameWorld.DebugAnswer(curPlayer, "设置幸运:SetXunbao 寻宝类型 幸运值")
|
| | | GameWorld.DebugAnswer(curPlayer, "重置寻宝:SetXunbao 0")
|
| | | GameWorld.DebugAnswer(curPlayer, "设置幸运:SetXunbao 寻宝类型 幸运值 已寻宝次数")
|
| | | return
|
| | |
|
| | | if not paramList[0]:
|
| | | isFree = paramList[1] if len(paramList) > 1 else 1
|
| | | isClearPack = paramList[2] if len(paramList) > 2 else 1
|
| | | ClearPack.OnExec(curPlayer, [ShareDefine.rptTreasure])
|
| | | ClearPack.OnExec(curPlayer, [ShareDefine.rptRune])
|
| | |
|
| | | if isClearPack:
|
| | | ClearPack.OnExec(curPlayer, [ShareDefine.rptTreasure])
|
| | | ClearPack.OnExec(curPlayer, [ShareDefine.rptRune])
|
| | | |
| | | treasureTypeList = PlayerTreasure.GetTreasureTypeList()
|
| | | for treasureType in treasureTypeList:
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureCount % (treasureType, 0), 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureCount % (treasureType, 1), 0)
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | for i in xrange(ipyDataMgr.GetTreasureSetCount()):
|
| | | ipyData = ipyDataMgr.GetTreasureSetByIndex(i)
|
| | | treasureType = ipyData.GetTreasureType()
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureCount % (treasureType), 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureLuck % (treasureType), 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureFreeCount % (treasureType), 0)
|
| | |
|
| | | if not isFree:
|
| | | continue
|
| | | |
| | | freeTimeCDList = IpyGameDataPY.GetFuncEvalCfg("TreasureSet1%s" % treasureType, 4)
|
| | | for i, minute in enumerate(freeTimeCDList):
|
| | | if not minute:
|
| | | continue
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureFreeTime % (treasureType, i), int(time.time()) - minute * 60)
|
| | | GameWorld.DebugAnswer(curPlayer, "重置寻宝OK!")
|
| | | elif len(paramList) == 2:
|
| | | treasureType, luck = paramList
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureLuck % (treasureType), luck)
|
| | | GameWorld.DebugAnswer(curPlayer, "设置寻宝类型=%s,幸运=%s" % (treasureType, luck))
|
| | | else:
|
| | | treasureType = paramList[0]
|
| | | luck = paramList[1] if len(paramList) > 1 else None
|
| | | treasureCount = paramList[2] if len(paramList) > 2 else None
|
| | | if luck != None:
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureLuck % (treasureType), luck)
|
| | | GameWorld.DebugAnswer(curPlayer, "设置寻宝类型=%s,幸运=%s" % (treasureType, luck))
|
| | | if treasureCount != None:
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureCount % (treasureType), treasureCount)
|
| | | GameWorld.DebugAnswer(curPlayer, "设置寻宝类型=%s,次数=%s" % (treasureType, treasureCount))
|
| | | PlayerTreasure.Sync_TreasureInfo(curPlayer)
|
| | | return True
|
| | |
|
| | |
| | | ("list", "Money", 0),
|
| | | ),
|
| | |
|
| | | "TreasureSet":(
|
| | | ("BYTE", "TreasureType", 1),
|
| | | ("BYTE", "PackType", 0),
|
| | | ("BYTE", "DailyFreeCount", 0),
|
| | | ("list", "TreasureCountList", 0),
|
| | | ("DWORD", "CostItemID", 0),
|
| | | ("list", "CostItemCountList", 0),
|
| | | ("BYTE", "CostMoneyType", 0),
|
| | | ("list", "CostMoneyList", 0),
|
| | | ("WORD", "EnsureCount", 0),
|
| | | ("BYTE", "OnceLucky", 0),
|
| | | ("WORD", "FullLucky", 0),
|
| | | ("char", "LuckyRateFormat", 0),
|
| | | ("BYTE", "LuckyGridNum", 0),
|
| | | ("list", "NotifyGridNumList", 0),
|
| | | ("BYTE", "AwardMoneyType", 0),
|
| | | ("WORD", "AwardMoneyValue", 0),
|
| | | ),
|
| | |
|
| | | "TreasureHouse":(
|
| | | ("BYTE", "TreasureType", 1),
|
| | | ("WORD", "MinLV", 0),
|
| | |
| | | ("dict", "GridLibInfo", 0),
|
| | | ("list", "JobItemList", 0),
|
| | | ("list", "GridItemRateListFree", 0),
|
| | | ("list", "FreeGridItemRateList2", 0),
|
| | | ("dict", "FreeGridItemRateList3", 0),
|
| | | ("list", "GridItemRateList1", 0),
|
| | | ("list", "GridItemRateList2", 0),
|
| | | ("dict", "GridItemRateList3", 0),
|
| | | ("BYTE", "LuckyGridNum", 0),
|
| | | ),
|
| | |
|
| | | "TreasureItemLib":(
|
| | |
| | | def GetAwardItem(self): return self.attrTuple[5] # 奖励物品列表 list
|
| | | def GetMoney(self): return self.attrTuple[6] # 金钱 list |
| | | |
| | | # 寻宝设定表 |
| | | class IPY_TreasureSet(): |
| | | |
| | | def __init__(self): |
| | | self.attrTuple = None |
| | | return |
| | | |
| | | def GetTreasureType(self): return self.attrTuple[0] # 寻宝类型 BYTE
|
| | | def GetPackType(self): return self.attrTuple[1] # 放入背包 BYTE
|
| | | def GetDailyFreeCount(self): return self.attrTuple[2] # 每日免费次数 BYTE
|
| | | def GetTreasureCountList(self): return self.attrTuple[3] # 抽奖次数列表 list
|
| | | def GetCostItemID(self): return self.attrTuple[4] # 消耗道具ID DWORD
|
| | | def GetCostItemCountList(self): return self.attrTuple[5] # 消耗个数列表 list
|
| | | def GetCostMoneyType(self): return self.attrTuple[6] # 消耗货币类型 BYTE
|
| | | def GetCostMoneyList(self): return self.attrTuple[7] # 消耗货币列表 list
|
| | | def GetEnsureCount(self): return self.attrTuple[8] # 每x次必出 WORD
|
| | | def GetOnceLucky(self): return self.attrTuple[9] # 单次幸运值 BYTE
|
| | | def GetFullLucky(self): return self.attrTuple[10] # 满幸运值 WORD
|
| | | def GetLuckyRateFormat(self): return self.attrTuple[11] # 幸运格子概率公式 char
|
| | | def GetLuckyGridNum(self): return self.attrTuple[12] # 幸运格子编号 BYTE
|
| | | def GetNotifyGridNumList(self): return self.attrTuple[13] # 需要额外广播的格子 list
|
| | | def GetAwardMoneyType(self): return self.attrTuple[14] # 额外奖励货币类型 BYTE
|
| | | def GetAwardMoneyValue(self): return self.attrTuple[15] # 单次奖励货币数 WORD |
| | | |
| | | # 寻宝产出库表 |
| | | class IPY_TreasureHouse(): |
| | | |
| | |
| | | def GetGridLibInfo(self): return self.attrTuple[3] # 格子编号对应库ID {"编号":物品库ID, ...} dict
|
| | | def GetJobItemList(self): return self.attrTuple[4] # 职业物品组列表 [[职业1物品, 职业2物品, ...], ...] list
|
| | | def GetGridItemRateListFree(self): return self.attrTuple[5] # 免费产出格子编号饼图 [[概率, 格子编号], ...] list
|
| | | def GetFreeGridItemRateList2(self): return self.attrTuple[6] # 免费每满x次保底产出格子编号饼图 [[概率, 格子编号], ...] list
|
| | | def GetFreeGridItemRateList3(self): return self.attrTuple[7] # 免费第x次必出产出格子编号饼图 {次数:[[概率, 格子编号], ...], ...} dict
|
| | | def GetGridItemRateList1(self): return self.attrTuple[8] # 常规产出格子编号饼图 [[概率, 格子编号], ...] list
|
| | | def GetGridItemRateList2(self): return self.attrTuple[9] # 每满x次保底产出格子编号饼图 [[概率, 格子编号], ...] list
|
| | | def GetGridItemRateList3(self): return self.attrTuple[10] # 第x次必出产出格子编号饼图 {次数:[[概率, 格子编号], ...], ...} dict
|
| | | def GetLuckyGridNum(self): return self.attrTuple[11] # 幸运加成格子编号 BYTE |
| | | def GetGridItemRateList1(self): return self.attrTuple[6] # 常规产出格子编号饼图 [[概率, 格子编号], ...] list
|
| | | def GetGridItemRateList2(self): return self.attrTuple[7] # 每满x次保底产出格子编号饼图 [[概率, 格子编号], ...] list
|
| | | def GetGridItemRateList3(self): return self.attrTuple[8] # 第x次必出产出格子编号饼图 {次数:[[概率, 格子编号], ...], ...} dict |
| | | |
| | | # 寻宝物品库 |
| | | class IPY_TreasureItemLib(): |
| | |
| | | self.__LoadFileData("LVAward", onlyCheck)
|
| | | self.__LoadFileData("Invest", onlyCheck)
|
| | | self.__LoadFileData("XBXZ", onlyCheck)
|
| | | self.__LoadFileData("TreasureSet", onlyCheck)
|
| | | self.__LoadFileData("TreasureHouse", onlyCheck)
|
| | | self.__LoadFileData("TreasureItemLib", onlyCheck)
|
| | | self.__LoadFileData("FreeGoods", onlyCheck)
|
| | |
| | | self.CheckLoadData("XBXZ") |
| | | return self.ipyXBXZCache[index]
|
| | | |
| | | def GetTreasureSetCount(self): |
| | | self.CheckLoadData("TreasureSet") |
| | | return self.ipyTreasureSetLen
|
| | | def GetTreasureSetByIndex(self, index): |
| | | self.CheckLoadData("TreasureSet") |
| | | return self.ipyTreasureSetCache[index]
|
| | | |
| | | def GetTreasureHouseCount(self): |
| | | self.CheckLoadData("TreasureHouse") |
| | | return self.ipyTreasureHouseLen
|
| | |
| | | import PlayerWishingWell
|
| | | import PlayerFairyDomain
|
| | | import CrossPlayerData
|
| | | import PlayerTreasure
|
| | | import PlayerVip
|
| | | import PlayerLove
|
| | | import PlayerDiceEx
|
| | |
| | |
|
| | | #投资
|
| | | PlayerGoldInvest.OnDay(curPlayer)
|
| | | |
| | | #寻宝
|
| | | PlayerTreasure.OnDay(curPlayer)
|
| | | #法宝
|
| | | PlayerMagicWeapon.OnDay(curPlayer)
|
| | | PlayerGoldGift.OnDay(curPlayer)
|
| | |
| | |
|
| | | def DoTreasureOpen(curPlayer):
|
| | | ## 寻宝开启
|
| | | |
| | | # 设置免费寻宝
|
| | | treasureTypeList = GetTreasureTypeList()
|
| | | for treasureType in treasureTypeList:
|
| | | freeTimeCDList = IpyGameDataPY.GetFuncEvalCfg("TreasureSet1%s" % treasureType, 4)
|
| | | for i, minute in enumerate(freeTimeCDList):
|
| | | if not minute:
|
| | | continue
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureFreeTime % (treasureType, i), int(time.time()) - minute * 60)
|
| | | Sync_TreasureInfo(curPlayer)
|
| | | return
|
| | |
|
| | |
| | | if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Treasure):
|
| | | return
|
| | | Sync_TreasureInfo(curPlayer)
|
| | | return
|
| | |
|
| | | def OnDay(curPlayer):
|
| | | syncTypeList = []
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | for i in xrange(ipyDataMgr.GetTreasureSetCount()):
|
| | | ipyData = ipyDataMgr.GetTreasureSetByIndex(i)
|
| | | treasureType = ipyData.GetTreasureType()
|
| | | if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureFreeCount % (treasureType)):
|
| | | continue
|
| | | syncTypeList.append(treasureType)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureFreeCount % (treasureType), 0)
|
| | | if syncTypeList:
|
| | | Sync_TreasureInfo(curPlayer, syncTypeList)
|
| | | return
|
| | |
|
| | | #// A5 68 请求寻宝 #tagCMRequestTreasure
|
| | |
| | | treasureType = clientData.TreasureType
|
| | | treasureIndex = clientData.TreasureIndex
|
| | | costType = clientData.CostType
|
| | | isFreeType = 1 if costType == 1 else 0
|
| | | |
| | | GameWorld.DebugLog("玩家寻宝: treasureType=%s,treasureIndex=%s,costType=%s,playerLV=%s"
|
| | | % (treasureType, treasureIndex, costType, playerLV), playerID)
|
| | |
|
| | | TreasureSet1 = "TreasureSet1%s" % treasureType
|
| | | TreasureSet2 = "TreasureSet2%s" % treasureType
|
| | | treasureCountList = IpyGameDataPY.GetFuncEvalCfg(TreasureSet1, 1) # 寻宝获得个数列表
|
| | | setIpyData = IpyGameDataPY.GetIpyGameData("TreasureSet", treasureType)
|
| | | if not setIpyData:
|
| | | return
|
| | | treasureCountList = setIpyData.GetTreasureCountList() # 寻宝获得个数列表
|
| | | if not treasureCountList:
|
| | | GameWorld.DebugLog("没有寻宝次数列表配置!", playerID)
|
| | | return
|
| | |
| | | GameWorld.DebugLog("没有寻宝次数配置!", playerID)
|
| | | return
|
| | |
|
| | | packType = ShareDefine.rptTreasure
|
| | | #if treasureType == 2:
|
| | | # packType = ShareDefine.rptRune
|
| | | if treasureType in [TreasureType_GatherTheSoul]:
|
| | | packType = IPY_GameWorld.rptItem
|
| | | |
| | | packType = setIpyData.GetPackType()
|
| | | if not ItemCommon.CheckPackHasSpace(curPlayer, packType, True):
|
| | | GameWorld.DebugLog("对应寻宝背包没有空格子!packType=%s" % packType, playerID)
|
| | | return
|
| | |
|
| | | # 免费次数
|
| | | if costType == 1:
|
| | | freeCountCDList = IpyGameDataPY.GetFuncEvalCfg(TreasureSet1, 4) # 免费次数CD时间列表, 分
|
| | | freeCountCD = freeCountCDList[treasureIndex] * 60
|
| | | if not freeCountCD:
|
| | | dailyFreeCount = setIpyData.GetDailyFreeCount()
|
| | | if not dailyFreeCount:
|
| | | GameWorld.ErrLog("该寻宝类型索引不支持免费次数寻宝!treasureType=%s,treasureIndex=%s" % (treasureType, treasureIndex), playerID)
|
| | | return
|
| | | curTime = int(time.time())
|
| | | freeTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureFreeTime % (treasureType, treasureIndex))
|
| | | if curTime - freeTime < freeCountCD:
|
| | | GameWorld.DebugLog("免费寻宝CD时间未到,无法使用免费寻宝!curTime=%s,freeTime=%s, %s < freeCountCD(%s)" |
| | | % (curTime, freeTime, curTime - freeTime, freeCountCD), playerID)
|
| | | freeCountToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureFreeCount % (treasureType))
|
| | | updFreeCountToday = freeCountToday + treasureCount
|
| | | if updFreeCountToday > dailyFreeCount:
|
| | | GameWorld.DebugLog("今日免费次数不足,无法使用免费寻宝! freeCountToday=%s + %s > %s" % (freeCountToday, treasureCount, dailyFreeCount), playerID)
|
| | | return
|
| | |
|
| | | # 寻宝道具, 目前默认消耗1个
|
| | | elif costType == 2:
|
| | | costItemList = IpyGameDataPY.GetFuncEvalCfg(TreasureSet1, 3) # 消耗道具物品ID列表
|
| | | if not costItemList:
|
| | | costItemID = setIpyData.GetCostItemID()
|
| | | costItemList = setIpyData.GetCostItemCountList() # 消耗道具物品ID列表
|
| | | if not costItemID or not costItemList or treasureIndex >= len(costItemList):
|
| | | GameWorld.ErrLog("该寻宝类型索引不支持消耗道具寻宝!treasureType=%s,treasureIndex=%s" % (treasureType, treasureIndex), playerID)
|
| | | return
|
| | | costItemID, costItemNeedCount = costItemList[treasureIndex]
|
| | | costItemNeedCount = costItemList[treasureIndex]
|
| | | if not costItemID or not costItemNeedCount:
|
| | | return
|
| | | costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, costItemID)
|
| | |
| | |
|
| | | # 仙玉寻宝
|
| | | else:
|
| | | costGoldList = IpyGameDataPY.GetFuncEvalCfg(TreasureSet1, 2) # 消耗货币列表
|
| | | costGoldType = IpyGameDataPY.GetFuncCfg(TreasureSet2, 4) # 消耗货币类型
|
| | | costGoldList = setIpyData.GetCostMoneyList() # 消耗货币列表
|
| | | costGoldType = setIpyData.GetCostMoneyType() # 消耗货币类型
|
| | | if not costGoldType or not costGoldList or treasureIndex >= len(costGoldList):
|
| | | GameWorld.ErrLog("该寻宝类型索引不支持消耗货币寻宝!treasureType=%s,treasureIndex=%s" % (treasureType, treasureIndex), playerID)
|
| | | return
|
| | | costGold = costGoldList[treasureIndex]
|
| | | if not costGold:
|
| | | GameWorld.ErrLog("该寻宝类型索引不支持消耗仙玉寻宝!treasureType=%s,treasureIndex=%s" % (treasureType, treasureIndex), playerID)
|
| | | return
|
| | |
|
| | | if not PlayerControl.HaveMoney(curPlayer, costGoldType, costGold):
|
| | |
| | | GameWorld.ErrLog("找不到该等级对应寻宝库配置!treasureType=%s,curLV=%s" % (treasureType, curPlayer.GetLV()), playerID)
|
| | | return
|
| | |
|
| | | luckFormula = IpyGameDataPY.GetFuncCfg(TreasureSet2, 1) # 幸运物品概率公式
|
| | | addLuck = IpyGameDataPY.GetFuncEvalCfg(TreasureSet2, 2)[treasureIndex] # 增加幸运值
|
| | | maxLuck = IpyGameDataPY.GetFuncCfg(TreasureSet2, 3) # 满幸运值
|
| | | luckyGridNum = setIpyData.GetLuckyGridNum() # 幸运物品概率公式
|
| | | luckFormula = setIpyData.GetLuckyRateFormat() # 幸运物品概率公式
|
| | | addLuck = setIpyData.GetOnceLucky() * treasureCount # 增加幸运值
|
| | | maxLuck = setIpyData.GetFullLucky() # 满幸运值
|
| | | curLuck = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureLuck % (treasureType)) # 当前幸运值
|
| | | updLuck = curLuck + addLuck
|
| | |
|
| | | commItemRateList = GetUpdLuckyItemRateList(ipyData, curLuck, luckFormula, costType) # 常规产出物品格子饼图,幸运物品概率已变更
|
| | | commItemRateList = GetUpdLuckyItemRateList(ipyData, luckyGridNum, curLuck, luckFormula, costType) # 常规产出物品格子饼图,幸运物品概率已变更
|
| | |
|
| | | curTreasureCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureCount % (treasureType, isFreeType)) # 当前已寻宝次数
|
| | | curTreasureCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureCount % (treasureType)) # 当前已寻宝次数
|
| | | updTreasureCount = curTreasureCount + treasureCount
|
| | | beSureCountDict = ipyData.GetFreeGridItemRateList3() if isFreeType else ipyData.GetGridItemRateList3() # 第x次必出产出格子编号饼图
|
| | | GameWorld.DebugLog("已经寻宝次数=%s,当前幸运=%s,commItemRateList=%s" % (curTreasureCount, curLuck, commItemRateList), playerID)
|
| | | addScore = 0 if isFreeType else IpyGameDataPY.GetFuncEvalCfg(TreasureSet1, 5)[treasureIndex] # 增加积分
|
| | | ensureCount = IpyGameDataPY.GetFuncEvalCfg("TreasureSet", 1, {})[isFreeType] # 每多少次触发保底产出库
|
| | | ensureRateList = ipyData.GetFreeGridItemRateList2() if isFreeType else ipyData.GetGridItemRateList2()
|
| | | goodGridNumList = [ipyData.GetLuckyGridNum()] # 好物品格子编号 (幸运物品 + 必出 + 保底)
|
| | | |
| | | goodGridNumList = [luckyGridNum] # 好物品格子编号 (幸运物品 + 必出 + 保底)
|
| | | beSureCountDict = ipyData.GetGridItemRateList3() # 第x次必出产出格子编号饼图
|
| | | for gridRateList in beSureCountDict.values():
|
| | | for gridRateInfo in gridRateList:
|
| | | goodGridNumList.append(gridRateInfo[1])
|
| | | ensureCount = setIpyData.GetEnsureCount() # 每多少次触发保底产出库
|
| | | ensureRateList = ipyData.GetGridItemRateList2()
|
| | | for gridRateInfo in ensureRateList:
|
| | | goodGridNumList.append(gridRateInfo[1])
|
| | | notifyGridNumList = IpyGameDataPY.GetFuncEvalCfg(TreasureSet2, 5) # 额外需要广播的格子,幸运必出、次数必出可不配置
|
| | | notifyGridNumList = setIpyData.GetNotifyGridNumList() # 额外需要广播的格子,幸运必出、次数必出可不配置
|
| | | goodGridNumList += notifyGridNumList
|
| | | GameWorld.DebugLog("goodGridNumList=%s" % goodGridNumList, playerID)
|
| | | |
| | | |
| | | # 单抽产出优先级: 幸运物品 > 必出 > 保底 > 普通
|
| | | # 连抽没有优先级限制,只要满足条件即可产出
|
| | | getGridResult = []
|
| | |
|
| | | # 1.满幸运必出
|
| | | if updLuck >= maxLuck:
|
| | | getGridResult.append(ipyData.GetLuckyGridNum())
|
| | | GameWorld.DebugLog("满幸运必出幸运物品: gridNum=%s" % ipyData.GetLuckyGridNum(), playerID)
|
| | | getGridResult.append(luckyGridNum)
|
| | | GameWorld.DebugLog("满幸运必出幸运物品: luckyGridNum=%s" % luckyGridNum, playerID)
|
| | |
|
| | | # 单抽
|
| | | if treasureCount == 1:
|
| | |
| | | doCount -= 1
|
| | | gridNum = GameWorld.GetResultByRandomList(commItemRateList)
|
| | |
|
| | | if gridNum == ipyData.GetLuckyGridNum() and gridNum in getGridResult:
|
| | | if gridNum == luckyGridNum and gridNum in getGridResult:
|
| | | GameWorld.DebugLog("幸运物品已经出过,不再重复产出!")
|
| | | continue
|
| | |
|
| | |
| | | isBind = 0 # 暂时默认不绑定
|
| | | job = curPlayer.GetJob()
|
| | | gridItemInfoDict = ipyData.GetGridItemInfo() # 格子对应物品信息 {"格子编号":[物品ID, 数量], ...}
|
| | | gridLibInfoDict = ipyData.GetGridLibInfo() # 格子对应物品信息 {"格子编号":[物品ID, 数量], ...}
|
| | | gridLibInfoDict = ipyData.GetGridLibInfo() # 格子编号对应库ID {"编号":物品库ID, ...}
|
| | | jobItemList = ipyData.GetJobItemList()
|
| | | treasureResult = []
|
| | | randItemIDDict = IpyGameDataPY.GetFuncEvalCfg("TreasureSet", 2)
|
| | |
| | |
|
| | | # 扣消耗
|
| | | if costType == 1:
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureFreeTime % (treasureType, treasureIndex), curTime)
|
| | | GameWorld.DebugLog("消耗免费次数,更新免费CD计算时间: %s" % curTime, playerID)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureFreeCount % (treasureType), updFreeCountToday)
|
| | | GameWorld.DebugLog("消耗免费次数,更新今日已使用免费次数: %s" % updFreeCountToday, playerID)
|
| | | elif costType == 2:
|
| | | ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, delCostItemCount, ChConfig.ItemDel_Treasure)
|
| | | GameWorld.DebugLog("扣除寻宝道具,costItemID=%s,delCostItemCount=%s" % (costItemID, delCostItemCount), playerID)
|
| | |
| | | GameWorld.DebugLog("扣除货币,costGoldType=%s,costGold=%s" % (costGoldType, costGold), playerID)
|
| | |
|
| | | # 加数据
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureCount % (treasureType, isFreeType), updTreasureCount)
|
| | | if ipyData.GetLuckyGridNum() in getGridResult:
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureCount % (treasureType), updTreasureCount)
|
| | | if luckyGridNum in getGridResult:
|
| | | updLuck = 0
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureLuck % (treasureType), updLuck)
|
| | | PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_TreasureScore, addScore)
|
| | |
|
| | | addScoreType = setIpyData.GetAwardMoneyType() # 额外奖励货币类型
|
| | | addScore = setIpyData.GetAwardMoneyValue() # 单次奖励货币数
|
| | | if addScoreType and addScore:
|
| | | PlayerControl.GiveMoney(curPlayer, addScoreType, addScore)
|
| | | |
| | | if treasureType == TreasureType_Rune:
|
| | | PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_RuneTreasure, treasureCount)
|
| | | PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_RuneTreasure, treasureCount)
|
| | |
| | | if mailItemList:
|
| | | PlayerControl.SendMailByKey("HappyXBUnEnough", [playerID], mailItemList)
|
| | |
|
| | | GameWorld.DebugLog("寻宝成功: treasureType=%s,updTreasureCount=%s,updLuck=%s,addLuck=%s,addScore=%s" |
| | | % (treasureType, updTreasureCount, updLuck, addLuck, addScore), playerID)
|
| | | GameWorld.DebugLog("寻宝成功: treasureType=%s,updTreasureCount=%s,updLuck=%s,addLuck=%s,addScoreType=%s,addScore=%s" |
| | | % (treasureType, updTreasureCount, updLuck, addLuck, addScoreType, addScore), playerID)
|
| | | GameWorld.DebugLog(" treasureResult=%s" % (treasureResult), playerID)
|
| | | GameWorld.DebugLog(" mailItemList=%s" % (mailItemList), playerID)
|
| | |
|
| | | # 通知前端
|
| | | sendPack = ChPyNetSendPack.tagMCTreasureResult()
|
| | | sendPack.Clear()
|
| | | sendPack.AddTreasureScore = addScore
|
| | | sendPack.AddMoneyType = addScoreType
|
| | | sendPack.AddMoneyValue = addScore
|
| | | sendPack.AddTreasureLuck = addLuck
|
| | | sendPack.TreasureResult = str(treasureResult)
|
| | | sendPack.TreasureResultLen = len(sendPack.TreasureResult)
|
| | | NetPackCommon.SendFakePack(curPlayer, sendPack)
|
| | |
|
| | | Sync_TreasureInfo(curPlayer, treasureType)
|
| | | Sync_TreasureInfo(curPlayer, [treasureType])
|
| | | return
|
| | |
|
| | | def GetUpdLuckyItemRateList(ipyData, curLuck, luckFormula, costType):
|
| | | def GetUpdLuckyItemRateList(ipyData, luckyGridNum, curLuck, luckFormula, costType):
|
| | | # 获取幸运物品提升概率后的饼图
|
| | | srcPieList = ipyData.GetGridItemRateListFree() if costType == 1 else ipyData.GetGridItemRateList1()
|
| | | luckyGridNum = ipyData.GetLuckyGridNum()
|
| | | |
| | | if not srcPieList:
|
| | | srcPieList = ipyData.GetGridItemRateList1()
|
| | | |
| | | updRateList = []
|
| | | for i, rateInfo in enumerate(srcPieList):
|
| | | rate, gridNum = rateInfo
|
| | |
| | | return jobItemIDList[job - 1]
|
| | | return itemID
|
| | |
|
| | | def GetTreasureTypeList():
|
| | | ## 寻宝类型列表
|
| | | TreasureTypeList = IpyGameDataPY.GetConfigEx("TreasureType")
|
| | | if not TreasureTypeList:
|
| | | TreasureTypeList = []
|
| | | def Sync_TreasureInfo(curPlayer, syncTypeList=None):
|
| | | if syncTypeList == None:
|
| | | syncTypeList = []
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | for i in xrange(ipyDataMgr.GetTreasureHouseCount()):
|
| | | ipyData = ipyDataMgr.GetTreasureHouseByIndex(i)
|
| | | treasureType = ipyData.GetTreasureType()
|
| | | if treasureType not in TreasureTypeList:
|
| | | TreasureTypeList.append(treasureType)
|
| | | IpyGameDataPY.SetConfigEx("TreasureType", TreasureTypeList)
|
| | | return TreasureTypeList
|
| | |
|
| | | def Sync_TreasureInfo(curPlayer, treasureType=None):
|
| | | if treasureType == None:
|
| | | syncTypeList = GetTreasureTypeList()
|
| | | else:
|
| | | syncTypeList = [treasureType]
|
| | | |
| | | for i in xrange(ipyDataMgr.GetTreasureSetCount()):
|
| | | ipyData = ipyDataMgr.GetTreasureSetByIndex(i)
|
| | | syncTypeList.append(ipyData.GetTreasureType())
|
| | | |
| | | treasureInfoPack = ChPyNetSendPack.tagMCTreasureInfo()
|
| | | treasureInfoPack.Clear()
|
| | | treasureInfoPack.TreasuerInfoList = []
|
| | | for tType in syncTypeList:
|
| | | treasureCountList = IpyGameDataPY.GetFuncEvalCfg("TreasureSet1%s" % tType, 1)
|
| | | tTypeInfo = ChPyNetSendPack.tagMCTreasureTypeInfo()
|
| | | tTypeInfo.Clear()
|
| | | tTypeInfo.TreasureType = tType
|
| | | tTypeInfo.LuckValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureLuck % (tType))
|
| | | tTypeInfo.FreeCountTime = []
|
| | | for i in xrange(len(treasureCountList)):
|
| | | tTypeInfo.FreeCountTime.append(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureFreeTime % (tType, i)))
|
| | | tTypeInfo.IndexCount = len(tTypeInfo.FreeCountTime)
|
| | | tTypeInfo.TreasureCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureCount % (tType))
|
| | | tTypeInfo.FreeCountToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreasureFreeCount % (tType))
|
| | | treasureInfoPack.TreasuerInfoList.append(tTypeInfo)
|
| | | treasureInfoPack.InfoCount = len(treasureInfoPack.TreasuerInfoList)
|
| | | NetPackCommon.SendFakePack(curPlayer, treasureInfoPack)
|
| | | return
|
| | |
|
| | |
|