8721 【主干】【BT3】【后端】H.活动-合服庆典(转盘活动改为支持配置消耗的货币类型)
# Conflicts:
# ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
| | |
| | | BYTE IsDayReset; //是否每天重置
|
| | | BYTE CTGTypeEffValue; //充值有效类型值
|
| | | list CTGPrizeList; //累计充值奖励次数
|
| | | list UseGoldPrizeList; //累计消费X仙玉奖励次数
|
| | | BYTE UseMoneyType; //累计消费货币类型
|
| | | list UseMoneyPrizeList; //累计消费X货币奖励次数
|
| | | list LibChooseCountList; //各道具库选择个数
|
| | | list SuperItemLimitRule; //终极库产出万分率|至少X次后可产出
|
| | | dict CommItemLib; //普通道具库 {(世界等级A,世界等级B):[[可选物品ID, 个数, 是否拍品], ...], ...}
|
| | |
| | | LimitLV = 0 #(WORD LimitLV)// 限制等级
|
| | | CTGPrizeCount = 0 #(BYTE CTGPrizeCount)
|
| | | CTGPrizeList = list() #(vector<DWORD> CTGPrizeList)// 累计充值额度奖励次数列表 [奖励第1次所需累计充值额度, 第2次, ...]
|
| | | UseGoldPrizeCount = 0 #(BYTE UseGoldPrizeCount)
|
| | | UseGoldPrizeList = list() #(vector<DWORD> UseGoldPrizeList)// 累计消费仙玉奖励次数列表 [奖励第1次所需累计消费仙玉, 第2次, ...]
|
| | | UseMoneyType = 0 #(BYTE UseMoneyType)// 累计消费货币类型
|
| | | UseMoneyPrizeCount = 0 #(BYTE UseMoneyPrizeCount)
|
| | | UseMoneyPrizeList = list() #(vector<DWORD> UseMoneyPrizeList)// 累计消费货币奖励次数列表 [奖励第1次所需累计消费货币, 第2次, ...]
|
| | | TurnItemCount = 0 #(BYTE TurnItemCount)
|
| | | TurnItemList = list() #(vector<tagMCActTurntableItem> TurnItemList)// 转盘已确定的物品列表,包含常规物品+极品物品+终极物品,活动开始时,后端直接随机生成常规物品,已确定的物品不包含极品、终极物品时需要先选择才能使用转盘;
|
| | | GoodItemCount = 0 #(BYTE GoodItemCount)
|
| | |
| | | for i in range(self.CTGPrizeCount):
|
| | | value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
|
| | | self.CTGPrizeList.append(value)
|
| | | self.UseGoldPrizeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.UseGoldPrizeCount):
|
| | | self.UseMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.UseMoneyPrizeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.UseMoneyPrizeCount):
|
| | | value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
|
| | | self.UseGoldPrizeList.append(value)
|
| | | self.UseMoneyPrizeList.append(value)
|
| | | self.TurnItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.TurnItemCount):
|
| | | temTurnItemList = tagMCActTurntableItem()
|
| | |
| | | self.LimitLV = 0
|
| | | self.CTGPrizeCount = 0
|
| | | self.CTGPrizeList = list()
|
| | | self.UseGoldPrizeCount = 0
|
| | | self.UseGoldPrizeList = list()
|
| | | self.UseMoneyType = 0
|
| | | self.UseMoneyPrizeCount = 0
|
| | | self.UseMoneyPrizeList = list()
|
| | | self.TurnItemCount = 0
|
| | | self.TurnItemList = list()
|
| | | self.GoodItemCount = 0
|
| | |
| | | length += 1
|
| | | length += 4 * self.CTGPrizeCount
|
| | | length += 1
|
| | | length += 4 * self.UseGoldPrizeCount
|
| | | length += 1
|
| | | length += 4 * self.UseMoneyPrizeCount
|
| | | length += 1
|
| | | for i in range(self.TurnItemCount):
|
| | | length += self.TurnItemList[i].GetLength()
|
| | |
| | | data = CommFunc.WriteBYTE(data, self.CTGPrizeCount)
|
| | | for i in range(self.CTGPrizeCount):
|
| | | data = CommFunc.WriteDWORD(data, self.CTGPrizeList[i])
|
| | | data = CommFunc.WriteBYTE(data, self.UseGoldPrizeCount)
|
| | | for i in range(self.UseGoldPrizeCount):
|
| | | data = CommFunc.WriteDWORD(data, self.UseGoldPrizeList[i])
|
| | | data = CommFunc.WriteBYTE(data, self.UseMoneyType)
|
| | | data = CommFunc.WriteBYTE(data, self.UseMoneyPrizeCount)
|
| | | for i in range(self.UseMoneyPrizeCount):
|
| | | data = CommFunc.WriteDWORD(data, self.UseMoneyPrizeList[i])
|
| | | data = CommFunc.WriteBYTE(data, self.TurnItemCount)
|
| | | for i in range(self.TurnItemCount):
|
| | | data = CommFunc.WriteString(data, self.TurnItemList[i].GetLength(), self.TurnItemList[i].GetBuffer())
|
| | |
| | | LimitLV:%d,
|
| | | CTGPrizeCount:%d,
|
| | | CTGPrizeList:%s,
|
| | | UseGoldPrizeCount:%d,
|
| | | UseGoldPrizeList:%s,
|
| | | UseMoneyType:%d,
|
| | | UseMoneyPrizeCount:%d,
|
| | | UseMoneyPrizeList:%s,
|
| | | TurnItemCount:%d,
|
| | | TurnItemList:%s,
|
| | | GoodItemCount:%d,
|
| | |
| | | self.LimitLV,
|
| | | self.CTGPrizeCount,
|
| | | "...",
|
| | | self.UseGoldPrizeCount,
|
| | | self.UseMoneyType,
|
| | | self.UseMoneyPrizeCount,
|
| | | "...",
|
| | | self.TurnItemCount,
|
| | | "...",
|
| | |
| | | ("ActNum", c_ubyte), #活动编号
|
| | | ("CanUseCount", c_ubyte), #可转盘次数
|
| | | ("CTGTotal", c_int), #累计充值额度
|
| | | ("UseGoldTotal", c_int), #累计消费仙玉额度
|
| | | ("UseMoneyTotal", c_int), #累计消费货币额度
|
| | | ("TurnItemState", c_int), #转盘物品已抽中记录,按转盘物品编号二进制位代表是否已抽中
|
| | | ("GetItemNum", c_ubyte), #本次抽中的物品编号,非转盘结果时为0,大于0时为通知本次转到的物品编号
|
| | | ]
|
| | |
| | | self.ActNum = 0
|
| | | self.CanUseCount = 0
|
| | | self.CTGTotal = 0
|
| | | self.UseGoldTotal = 0
|
| | | self.UseMoneyTotal = 0
|
| | | self.TurnItemState = 0
|
| | | self.GetItemNum = 0
|
| | | return
|
| | |
| | | ActNum:%d,
|
| | | CanUseCount:%d,
|
| | | CTGTotal:%d,
|
| | | UseGoldTotal:%d,
|
| | | UseMoneyTotal:%d,
|
| | | TurnItemState:%d,
|
| | | GetItemNum:%d
|
| | | '''\
|
| | |
| | | self.ActNum,
|
| | | self.CanUseCount,
|
| | | self.CTGTotal,
|
| | | self.UseGoldTotal,
|
| | | self.UseMoneyTotal,
|
| | | self.TurnItemState,
|
| | | self.GetItemNum
|
| | | )
|
| | |
| | | LimitLV = 0 #(WORD LimitLV)// 限制等级
|
| | | CTGPrizeCount = 0 #(BYTE CTGPrizeCount)
|
| | | CTGPrizeList = list() #(vector<DWORD> CTGPrizeList)// 累计充值额度奖励次数列表 [奖励第1次所需累计充值额度, 第2次, ...]
|
| | | UseGoldPrizeCount = 0 #(BYTE UseGoldPrizeCount)
|
| | | UseGoldPrizeList = list() #(vector<DWORD> UseGoldPrizeList)// 累计消费仙玉奖励次数列表 [奖励第1次所需累计消费仙玉, 第2次, ...]
|
| | | UseMoneyType = 0 #(BYTE UseMoneyType)// 累计消费货币类型
|
| | | UseMoneyPrizeCount = 0 #(BYTE UseMoneyPrizeCount)
|
| | | UseMoneyPrizeList = list() #(vector<DWORD> UseMoneyPrizeList)// 累计消费货币奖励次数列表 [奖励第1次所需累计消费货币, 第2次, ...]
|
| | | TurnItemCount = 0 #(BYTE TurnItemCount)
|
| | | TurnItemList = list() #(vector<tagMCActTurntableItem> TurnItemList)// 转盘已确定的物品列表,包含常规物品+极品物品+终极物品,活动开始时,后端直接随机生成常规物品,已确定的物品不包含极品、终极物品时需要先选择才能使用转盘;
|
| | | GoodItemCount = 0 #(BYTE GoodItemCount)
|
| | |
| | | for i in range(self.CTGPrizeCount):
|
| | | value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
|
| | | self.CTGPrizeList.append(value)
|
| | | self.UseGoldPrizeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.UseGoldPrizeCount):
|
| | | self.UseMoneyType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.UseMoneyPrizeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.UseMoneyPrizeCount):
|
| | | value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
|
| | | self.UseGoldPrizeList.append(value)
|
| | | self.UseMoneyPrizeList.append(value)
|
| | | self.TurnItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.TurnItemCount):
|
| | | temTurnItemList = tagMCActTurntableItem()
|
| | |
| | | self.LimitLV = 0
|
| | | self.CTGPrizeCount = 0
|
| | | self.CTGPrizeList = list()
|
| | | self.UseGoldPrizeCount = 0
|
| | | self.UseGoldPrizeList = list()
|
| | | self.UseMoneyType = 0
|
| | | self.UseMoneyPrizeCount = 0
|
| | | self.UseMoneyPrizeList = list()
|
| | | self.TurnItemCount = 0
|
| | | self.TurnItemList = list()
|
| | | self.GoodItemCount = 0
|
| | |
| | | length += 1
|
| | | length += 4 * self.CTGPrizeCount
|
| | | length += 1
|
| | | length += 4 * self.UseGoldPrizeCount
|
| | | length += 1
|
| | | length += 4 * self.UseMoneyPrizeCount
|
| | | length += 1
|
| | | for i in range(self.TurnItemCount):
|
| | | length += self.TurnItemList[i].GetLength()
|
| | |
| | | data = CommFunc.WriteBYTE(data, self.CTGPrizeCount)
|
| | | for i in range(self.CTGPrizeCount):
|
| | | data = CommFunc.WriteDWORD(data, self.CTGPrizeList[i])
|
| | | data = CommFunc.WriteBYTE(data, self.UseGoldPrizeCount)
|
| | | for i in range(self.UseGoldPrizeCount):
|
| | | data = CommFunc.WriteDWORD(data, self.UseGoldPrizeList[i])
|
| | | data = CommFunc.WriteBYTE(data, self.UseMoneyType)
|
| | | data = CommFunc.WriteBYTE(data, self.UseMoneyPrizeCount)
|
| | | for i in range(self.UseMoneyPrizeCount):
|
| | | data = CommFunc.WriteDWORD(data, self.UseMoneyPrizeList[i])
|
| | | data = CommFunc.WriteBYTE(data, self.TurnItemCount)
|
| | | for i in range(self.TurnItemCount):
|
| | | data = CommFunc.WriteString(data, self.TurnItemList[i].GetLength(), self.TurnItemList[i].GetBuffer())
|
| | |
| | | LimitLV:%d,
|
| | | CTGPrizeCount:%d,
|
| | | CTGPrizeList:%s,
|
| | | UseGoldPrizeCount:%d,
|
| | | UseGoldPrizeList:%s,
|
| | | UseMoneyType:%d,
|
| | | UseMoneyPrizeCount:%d,
|
| | | UseMoneyPrizeList:%s,
|
| | | TurnItemCount:%d,
|
| | | TurnItemList:%s,
|
| | | GoodItemCount:%d,
|
| | |
| | | self.LimitLV,
|
| | | self.CTGPrizeCount,
|
| | | "...",
|
| | | self.UseGoldPrizeCount,
|
| | | self.UseMoneyType,
|
| | | self.UseMoneyPrizeCount,
|
| | | "...",
|
| | | self.TurnItemCount,
|
| | | "...",
|
| | |
| | | ("ActNum", c_ubyte), #活动编号
|
| | | ("CanUseCount", c_ubyte), #可转盘次数
|
| | | ("CTGTotal", c_int), #累计充值额度
|
| | | ("UseGoldTotal", c_int), #累计消费仙玉额度
|
| | | ("UseMoneyTotal", c_int), #累计消费货币额度
|
| | | ("TurnItemState", c_int), #转盘物品已抽中记录,按转盘物品编号二进制位代表是否已抽中
|
| | | ("GetItemNum", c_ubyte), #本次抽中的物品编号,非转盘结果时为0,大于0时为通知本次转到的物品编号
|
| | | ]
|
| | |
| | | self.ActNum = 0
|
| | | self.CanUseCount = 0
|
| | | self.CTGTotal = 0
|
| | | self.UseGoldTotal = 0
|
| | | self.UseMoneyTotal = 0
|
| | | self.TurnItemState = 0
|
| | | self.GetItemNum = 0
|
| | | return
|
| | |
| | | ActNum:%d,
|
| | | CanUseCount:%d,
|
| | | CTGTotal:%d,
|
| | | UseGoldTotal:%d,
|
| | | UseMoneyTotal:%d,
|
| | | TurnItemState:%d,
|
| | | GetItemNum:%d
|
| | | '''\
|
| | |
| | | self.ActNum,
|
| | | self.CanUseCount,
|
| | | self.CTGTotal,
|
| | | self.UseGoldTotal,
|
| | | self.UseMoneyTotal,
|
| | | self.TurnItemState,
|
| | | self.GetItemNum
|
| | | )
|
| | |
| | | ("BYTE", "IsDayReset", 0),
|
| | | ("BYTE", "CTGTypeEffValue", 0),
|
| | | ("list", "CTGPrizeList", 0),
|
| | | ("list", "UseGoldPrizeList", 0),
|
| | | ("BYTE", "UseMoneyType", 0),
|
| | | ("list", "UseMoneyPrizeList", 0),
|
| | | ("list", "LibChooseCountList", 0),
|
| | | ("list", "SuperItemLimitRule", 0),
|
| | | ("dict", "CommItemLib", 0),
|
| | |
| | | self.IsDayReset = 0
|
| | | self.CTGTypeEffValue = 0
|
| | | self.CTGPrizeList = []
|
| | | self.UseGoldPrizeList = []
|
| | | self.UseMoneyType = 0
|
| | | self.UseMoneyPrizeList = []
|
| | | self.LibChooseCountList = []
|
| | | self.SuperItemLimitRule = []
|
| | | self.CommItemLib = {}
|
| | |
| | | def GetIsDayReset(self): return self.IsDayReset # 是否每天重置
|
| | | def GetCTGTypeEffValue(self): return self.CTGTypeEffValue # 充值有效类型值
|
| | | def GetCTGPrizeList(self): return self.CTGPrizeList # 累计充值奖励次数
|
| | | def GetUseGoldPrizeList(self): return self.UseGoldPrizeList # 累计消费X仙玉奖励次数
|
| | | def GetUseMoneyType(self): return self.UseMoneyType # 累计消费货币类型
|
| | | def GetUseMoneyPrizeList(self): return self.UseMoneyPrizeList # 累计消费X货币奖励次数
|
| | | def GetLibChooseCountList(self): return self.LibChooseCountList # 各道具库选择个数
|
| | | def GetSuperItemLimitRule(self): return self.SuperItemLimitRule # 终极库产出万分率|至少X次后可产出
|
| | | def GetCommItemLib(self): return self.CommItemLib # 普通道具库 {(世界等级A,世界等级B):[[可选物品ID, 个数, 是否拍品], ...], ...}
|
| | |
| | |
|
| | | return
|
| | |
|
| | | def OnPlayerUseGold(curPlayer, addUseGold):
|
| | | ## 玩家消耗仙玉
|
| | | def OnPlayerUseGold(curPlayer, moneyType, addUseGold):
|
| | | ## 玩家消耗货币
|
| | |
|
| | | if addUseGold <= 0:
|
| | | return
|
| | |
| | | if not ipyData:
|
| | | continue
|
| | |
|
| | | useGoldPrizeList = ipyData.GetUseGoldPrizeList()
|
| | | if moneyType != ipyData.GetUseMoneyType():
|
| | | continue
|
| | | |
| | | useMoneyPrizeList = ipyData.GetUseMoneyPrizeList()
|
| | | nowUseGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TurntableUseGold % actNum)
|
| | | if nowUseGold >= max(useGoldPrizeList):
|
| | | GameWorld.DebugLog("转盘活动消耗仙玉已达最大记录,actNum=%s,nowUseGold=%s,maxUseGoldValue=%s" |
| | | % (actNum, nowUseGold, max(useGoldPrizeList)))
|
| | | if nowUseGold >= max(useMoneyPrizeList):
|
| | | GameWorld.DebugLog("转盘活动消耗货币已达最大记录,actNum=%s,moneyType=%s,nowUseGold=%s,maxUseMoneyValue=%s" |
| | | % (actNum, moneyType, nowUseGold, max(useMoneyPrizeList)))
|
| | | continue
|
| | |
|
| | | updUseGold = nowUseGold + addUseGold
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TurntableUseGold % actNum, updUseGold)
|
| | | GameWorld.DebugLog("转盘活动消耗仙玉,actNum=%s,nowUseGold=%s,updUseGold=%s,addUseGold=%s" |
| | | % (actNum, nowUseGold, updUseGold, addUseGold))
|
| | | GameWorld.DebugLog("转盘活动消耗货币,actNum=%s,moneyType=%s,nowUseGold=%s,updUseGold=%s,addUseGold=%s" |
| | | % (actNum, moneyType, nowUseGold, updUseGold, addUseGold))
|
| | |
|
| | | addTurntableCount = 0
|
| | | for useGold in useGoldPrizeList:
|
| | | for useGold in useMoneyPrizeList:
|
| | | if updUseGold < useGold:
|
| | | break
|
| | |
|
| | |
| | | playerActInfo.ActNum = actNum
|
| | | playerActInfo.CanUseCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TurntableCanUseCount % actNum)
|
| | | playerActInfo.CTGTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TurntableCTGValue % actNum)
|
| | | playerActInfo.UseGoldTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TurntableUseGold % actNum)
|
| | | playerActInfo.UseMoneyTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TurntableUseGold % actNum)
|
| | | playerActInfo.TurnItemState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TurntableItemState % actNum)
|
| | | playerActInfo.GetItemNum = getItemNum
|
| | | NetPackCommon.SendFakePack(curPlayer, playerActInfo)
|
| | |
| | | clientPack.LimitLV = ipyData.GetLVLimit()
|
| | | clientPack.CTGPrizeList = [CommFunc.RMBToCoin(floatRMB) for floatRMB in ipyData.GetCTGPrizeList()]
|
| | | clientPack.CTGPrizeCount = len(clientPack.CTGPrizeList)
|
| | | clientPack.UseGoldPrizeList = ipyData.GetUseGoldPrizeList()
|
| | | clientPack.UseGoldPrizeCount = len(clientPack.UseGoldPrizeList)
|
| | | clientPack.UseMoneyType = ipyData.GetUseMoneyType()
|
| | | clientPack.UseMoneyPrizeList = ipyData.GetUseMoneyPrizeList()
|
| | | clientPack.UseMoneyPrizeCount = len(clientPack.UseMoneyPrizeList)
|
| | |
|
| | | numCountList = ipyData.GetLibChooseCountList()
|
| | | numCountTotal = sum([numCount for numCount in numCountList])
|