hxp
2024-12-13 82913849bb18101c411c39bd14df207f656dd49d
10345 【英文】推金币优化(改为同步抽中位置编号)
4个文件已修改
76 ■■■■ 已修改文件
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuperDiscount.py 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -48826,8 +48826,7 @@
class  tagMCTuijinbiInfo(Structure):
    Head = tagHead()
    DrawType = 0    #(BYTE DrawType)// 本次抽奖奖励类型,为0时表示非抽奖同步;1-金币;2-仙玉币;3-红包;4-超级奖励
    DrawCount = 0    #(DWORD DrawCount)// 本次抽奖奖励数量
    DrawNum = 0    #(BYTE DrawNum)// 本次抽中位置,为0时表示非抽奖同步
    PoolPrizeCnt = 0    #(BYTE PoolPrizeCnt)
    PoolPrizeList = list()    #(vector<tagMCTuijinbiPool> PoolPrizeList)// 台面奖池信息列表,每次都完整通知
    data = None
@@ -48841,8 +48840,7 @@
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.DrawType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.DrawCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.DrawNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.PoolPrizeCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.PoolPrizeCnt):
            temPoolPrizeList = tagMCTuijinbiPool()
@@ -48855,8 +48853,7 @@
        self.Head.Clear()
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x05
        self.DrawType = 0
        self.DrawCount = 0
        self.DrawNum = 0
        self.PoolPrizeCnt = 0
        self.PoolPrizeList = list()
        return
@@ -48865,7 +48862,6 @@
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 4
        length += 1
        for i in range(self.PoolPrizeCnt):
            length += self.PoolPrizeList[i].GetLength()
@@ -48875,8 +48871,7 @@
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.DrawType)
        data = CommFunc.WriteDWORD(data, self.DrawCount)
        data = CommFunc.WriteBYTE(data, self.DrawNum)
        data = CommFunc.WriteBYTE(data, self.PoolPrizeCnt)
        for i in range(self.PoolPrizeCnt):
            data = CommFunc.WriteString(data, self.PoolPrizeList[i].GetLength(), self.PoolPrizeList[i].GetBuffer())
@@ -48885,15 +48880,13 @@
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                DrawType:%d,
                                DrawCount:%d,
                                DrawNum:%d,
                                PoolPrizeCnt:%d,
                                PoolPrizeList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.DrawType,
                                self.DrawCount,
                                self.DrawNum,
                                self.PoolPrizeCnt,
                                "..."
                                )
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -48826,8 +48826,7 @@
class  tagMCTuijinbiInfo(Structure):
    Head = tagHead()
    DrawType = 0    #(BYTE DrawType)// 本次抽奖奖励类型,为0时表示非抽奖同步;1-金币;2-仙玉币;3-红包;4-超级奖励
    DrawCount = 0    #(DWORD DrawCount)// 本次抽奖奖励数量
    DrawNum = 0    #(BYTE DrawNum)// 本次抽中位置,为0时表示非抽奖同步
    PoolPrizeCnt = 0    #(BYTE PoolPrizeCnt)
    PoolPrizeList = list()    #(vector<tagMCTuijinbiPool> PoolPrizeList)// 台面奖池信息列表,每次都完整通知
    data = None
@@ -48841,8 +48840,7 @@
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.DrawType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.DrawCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.DrawNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.PoolPrizeCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.PoolPrizeCnt):
            temPoolPrizeList = tagMCTuijinbiPool()
@@ -48855,8 +48853,7 @@
        self.Head.Clear()
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x05
        self.DrawType = 0
        self.DrawCount = 0
        self.DrawNum = 0
        self.PoolPrizeCnt = 0
        self.PoolPrizeList = list()
        return
@@ -48865,7 +48862,6 @@
        length = 0
        length += self.Head.GetLength()
        length += 1
        length += 4
        length += 1
        for i in range(self.PoolPrizeCnt):
            length += self.PoolPrizeList[i].GetLength()
@@ -48875,8 +48871,7 @@
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.DrawType)
        data = CommFunc.WriteDWORD(data, self.DrawCount)
        data = CommFunc.WriteBYTE(data, self.DrawNum)
        data = CommFunc.WriteBYTE(data, self.PoolPrizeCnt)
        for i in range(self.PoolPrizeCnt):
            data = CommFunc.WriteString(data, self.PoolPrizeList[i].GetLength(), self.PoolPrizeList[i].GetBuffer())
@@ -48885,15 +48880,13 @@
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                DrawType:%d,
                                DrawCount:%d,
                                DrawNum:%d,
                                PoolPrizeCnt:%d,
                                PoolPrizeList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.DrawType,
                                self.DrawCount,
                                self.DrawNum,
                                self.PoolPrizeCnt,
                                "..."
                                )
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py
@@ -1687,6 +1687,26 @@
    return plusPieList
## 从列表中产生物品,[[几率,object], ....],万分率
#  @param itemList 待选列表
#  @return 抽中索引, 抽中元素           索引-1代表没有抽中
def GetResultIndexByRandomList(randList):
    if not randList:
        return -1, None
    randRate = random.randint(0, randList[-1][0])
    for index in range(0, len(randList)):
        element = randList[index]
        if not element:
            continue
        cmpRate = element[0]
        if randRate > cmpRate:
            continue
        return index, element[1]
    return -1, None
## 从列表中产生物品,[[几率,object], ....],万分率
#  @param itemList 待选列表
#  @return object
def GetResultByRandomList(randList, defValue=None):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuperDiscount.py
@@ -152,12 +152,12 @@
    GameWorld.DebugLog("推金币抽奖: playerSign=%s,tuijinbiCnt=%s,prizeRateList=%s" % (playerSign, tuijinbiCnt, prizeRateList), playerID)
    
    addPoolPrizeInfo = {} # 增加台面奖池信息
    drawInfo = GameWorld.GetResultByRandomList(prizeRateList)
    drawIndex, drawInfo = GameWorld.GetResultIndexByRandomList(prizeRateList)
    if playerSign == Sign_NewVerPlayer and not tuijinbiCnt: # 新版本玩家首次推
        for _ in range(100):
            if drawInfo and drawInfo[0] in [PrizeType_Gold, PrizeType_Xianyu]: # 首次只能产出金币或仙玉币
                break
            drawInfo = GameWorld.GetResultByRandomList(prizeRateList)
            drawIndex, drawInfo = GameWorld.GetResultIndexByRandomList(prizeRateList)
            
        # 首次附加默认初始奖励
        initPrizeList = IpyGameDataPY.GetFuncEvalCfg("EnSuperDiscount", 5)
@@ -168,13 +168,14 @@
    if not drawInfo or len(drawInfo) != 2:
        return
    drawType, drawCount = drawInfo
    GameWorld.DebugLog("抽到: drawIndex=%s,drawInfo=%s,drawType=%s,drawCount=%s" % (drawIndex, drawInfo, drawType, drawCount), playerID)
    PlayerControl.PayMoney(curPlayer, ShareDefine.TYPE_Price_Tuijinbi, 1, isNotify=False)    
    
    # 红包,直接给奖励
    if drawType == PrizeType_Redpack:
        randMoneyList = IpyGameDataPY.GetFuncEvalCfg("PushCoin", 3)
        randMoney = random.choice(randMoneyList)
        GameWorld.DebugLog("抽到红包直接给: %s" % str(randMoney), playerID)
        GameWorld.DebugLog("红包直接给: %s" % str(randMoney), playerID)
        if randMoney and len(randMoney) == 2:
            __GiveMoney(curPlayer, randMoney[0], randMoney[1], True)
            
@@ -182,12 +183,12 @@
    elif drawType == PrizeType_Super:
        randPrizeList = IpyGameDataPY.GetFuncEvalCfg("PushCoin", 2)
        randPrize = random.choice(randPrizeList)
        GameWorld.DebugLog("抽到超级奖励: %s" % str(randPrize), playerID)
        GameWorld.DebugLog("超级奖励: %s" % str(randPrize), playerID)
        if randPrize and len(randPrize) == 2:
            randPrizeType, randValue = randPrize
            addPoolPrizeInfo[randPrizeType] = addPoolPrizeInfo.get(randPrizeType, 0) + randValue
    else:
        GameWorld.DebugLog("抽到: drawType=%s,drawCount=%s" % (drawType, drawCount), playerID)
        GameWorld.DebugLog("添加奖池: drawType=%s,drawCount=%s" % (drawType, drawCount), playerID)
        addPoolPrizeInfo[drawType] = addPoolPrizeInfo.get(drawType, 0) + drawCount
            
    for prizeType, addCnt in addPoolPrizeInfo.items():
@@ -199,7 +200,7 @@
    tuijinbiCnt += 1
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TuiJinbiCnt, tuijinbiCnt)
    GameWorld.DebugLog("更新累计推金币次数: %s" % (tuijinbiCnt), playerID)
    SyncTuijinbiInfo(curPlayer, drawType, drawCount)
    SyncTuijinbiInfo(curPlayer, drawIndex + 1)
    return
def __DoGivePrize(curPlayer, prizeType, prizeCount):
@@ -231,7 +232,7 @@
        ItemControler.NotifyGiveAwardInfo(curPlayer, [], "Tuijinbi", moneyInfo={moneyType:moneyValue})
    return
def SyncTuijinbiInfo(curPlayer, drawType=0, drawCount=0):
def SyncTuijinbiInfo(curPlayer, drawNum=0):
    poolPrizeList = [] # 台面信息
    for prizeType in [PrizeType_Gold, PrizeType_Xianyu]:
        prizeCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TuiJinbiPool % prizeType)
@@ -243,8 +244,7 @@
        poolPrizeList.append(poolInfo)
        
    clientPack = ChPyNetSendPack.tagMCTuijinbiInfo()
    clientPack.DrawType = drawType
    clientPack.DrawCount = drawCount
    clientPack.DrawNum = drawNum
    clientPack.PoolPrizeList = poolPrizeList
    clientPack.PoolPrizeCnt = len(clientPack.PoolPrizeList)
    NetPackCommon.SendFakePack(curPlayer, clientPack)