8721 【主干】【BT3】【后端】H.活动-合服庆典(转盘活动改为支持配置消耗的货币类型)

# Conflicts:
# ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
5个文件已修改
126 ■■■■■ 已修改文件
PySysDB/PySysDBPY.h 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActTurntable.py 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PySysDB/PySysDBPY.h
@@ -1798,7 +1798,8 @@
    BYTE        IsDayReset;    //是否每天重置
    BYTE        CTGTypeEffValue;    //充值有效类型值
    list        CTGPrizeList;    //累计充值奖励次数
    list        UseGoldPrizeList;    //累计消费X仙玉奖励次数
    BYTE        UseMoneyType;    //累计消费货币类型
    list        UseMoneyPrizeList;    //累计消费X货币奖励次数
    list        LibChooseCountList;    //各道具库选择个数
    list        SuperItemLimitRule;    //终极库产出万分率|至少X次后可产出
    dict        CommItemLib;    //普通道具库 {(世界等级A,世界等级B):[[可选物品ID, 个数, 是否拍品], ...], ...}
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -27292,8 +27292,9 @@
    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)
@@ -27322,10 +27323,11 @@
        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()
@@ -27357,8 +27359,9 @@
        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
@@ -27380,7 +27383,8 @@
        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()
@@ -27406,9 +27410,10 @@
        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())
@@ -27432,8 +27437,9 @@
                                LimitLV:%d,
                                CTGPrizeCount:%d,
                                CTGPrizeList:%s,
                                UseGoldPrizeCount:%d,
                                UseGoldPrizeList:%s,
                                UseMoneyType:%d,
                                UseMoneyPrizeCount:%d,
                                UseMoneyPrizeList:%s,
                                TurnItemCount:%d,
                                TurnItemList:%s,
                                GoodItemCount:%d,
@@ -27452,7 +27458,8 @@
                                self.LimitLV,
                                self.CTGPrizeCount,
                                "...",
                                self.UseGoldPrizeCount,
                                self.UseMoneyType,
                                self.UseMoneyPrizeCount,
                                "...",
                                self.TurnItemCount,
                                "...",
@@ -27481,7 +27488,7 @@
                  ("ActNum", c_ubyte),    #活动编号
                  ("CanUseCount", c_ubyte),    #可转盘次数
                  ("CTGTotal", c_int),    #累计充值额度
                  ("UseGoldTotal", c_int),    #累计消费仙玉额度
                  ("UseMoneyTotal", c_int),    #累计消费货币额度
                  ("TurnItemState", c_int),    #转盘物品已抽中记录,按转盘物品编号二进制位代表是否已抽中
                  ("GetItemNum", c_ubyte),    #本次抽中的物品编号,非转盘结果时为0,大于0时为通知本次转到的物品编号
                  ]
@@ -27503,7 +27510,7 @@
        self.ActNum = 0
        self.CanUseCount = 0
        self.CTGTotal = 0
        self.UseGoldTotal = 0
        self.UseMoneyTotal = 0
        self.TurnItemState = 0
        self.GetItemNum = 0
        return
@@ -27521,7 +27528,7 @@
                                ActNum:%d,
                                CanUseCount:%d,
                                CTGTotal:%d,
                                UseGoldTotal:%d,
                                UseMoneyTotal:%d,
                                TurnItemState:%d,
                                GetItemNum:%d
                                '''\
@@ -27531,7 +27538,7 @@
                                self.ActNum,
                                self.CanUseCount,
                                self.CTGTotal,
                                self.UseGoldTotal,
                                self.UseMoneyTotal,
                                self.TurnItemState,
                                self.GetItemNum
                                )
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -27292,8 +27292,9 @@
    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)
@@ -27322,10 +27323,11 @@
        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()
@@ -27357,8 +27359,9 @@
        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
@@ -27380,7 +27383,8 @@
        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()
@@ -27406,9 +27410,10 @@
        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())
@@ -27432,8 +27437,9 @@
                                LimitLV:%d,
                                CTGPrizeCount:%d,
                                CTGPrizeList:%s,
                                UseGoldPrizeCount:%d,
                                UseGoldPrizeList:%s,
                                UseMoneyType:%d,
                                UseMoneyPrizeCount:%d,
                                UseMoneyPrizeList:%s,
                                TurnItemCount:%d,
                                TurnItemList:%s,
                                GoodItemCount:%d,
@@ -27452,7 +27458,8 @@
                                self.LimitLV,
                                self.CTGPrizeCount,
                                "...",
                                self.UseGoldPrizeCount,
                                self.UseMoneyType,
                                self.UseMoneyPrizeCount,
                                "...",
                                self.TurnItemCount,
                                "...",
@@ -27481,7 +27488,7 @@
                  ("ActNum", c_ubyte),    #活动编号
                  ("CanUseCount", c_ubyte),    #可转盘次数
                  ("CTGTotal", c_int),    #累计充值额度
                  ("UseGoldTotal", c_int),    #累计消费仙玉额度
                  ("UseMoneyTotal", c_int),    #累计消费货币额度
                  ("TurnItemState", c_int),    #转盘物品已抽中记录,按转盘物品编号二进制位代表是否已抽中
                  ("GetItemNum", c_ubyte),    #本次抽中的物品编号,非转盘结果时为0,大于0时为通知本次转到的物品编号
                  ]
@@ -27503,7 +27510,7 @@
        self.ActNum = 0
        self.CanUseCount = 0
        self.CTGTotal = 0
        self.UseGoldTotal = 0
        self.UseMoneyTotal = 0
        self.TurnItemState = 0
        self.GetItemNum = 0
        return
@@ -27521,7 +27528,7 @@
                                ActNum:%d,
                                CanUseCount:%d,
                                CTGTotal:%d,
                                UseGoldTotal:%d,
                                UseMoneyTotal:%d,
                                TurnItemState:%d,
                                GetItemNum:%d
                                '''\
@@ -27531,7 +27538,7 @@
                                self.ActNum,
                                self.CanUseCount,
                                self.CTGTotal,
                                self.UseGoldTotal,
                                self.UseMoneyTotal,
                                self.TurnItemState,
                                self.GetItemNum
                                )
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1417,7 +1417,8 @@
                        ("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),
@@ -4792,7 +4793,8 @@
        self.IsDayReset = 0
        self.CTGTypeEffValue = 0
        self.CTGPrizeList = []
        self.UseGoldPrizeList = []
        self.UseMoneyType = 0
        self.UseMoneyPrizeList = []
        self.LibChooseCountList = []
        self.SuperItemLimitRule = []
        self.CommItemLib = {}
@@ -4808,7 +4810,8 @@
    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, 个数, 是否拍品], ...], ...}
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActTurntable.py
@@ -197,8 +197,8 @@
        
    return
def OnPlayerUseGold(curPlayer, addUseGold):
    ## 玩家消耗仙玉
def OnPlayerUseGold(curPlayer, moneyType, addUseGold):
    ## 玩家消耗货币
    
    if addUseGold <= 0:
        return
@@ -217,20 +217,23 @@
        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
            
@@ -460,7 +463,7 @@
    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)
@@ -492,8 +495,9 @@
    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])