hxp
2024-12-13 d47077546e4948ae10be4859b9fb0953dc021d3a
10345 【英文】推金币优化(改为后端处理)
4个文件已修改
1个文件已添加
386 ■■■■ 已修改文件
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Tuijinbi.py 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuperDiscount.py 188 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -48785,11 +48785,11 @@
#------------------------------------------------------
# AA 05 推金币信息 #tagMCTuijinbiInfo
class  tagMCTuijinbiMoney(Structure):
class  tagMCTuijinbiPool(Structure):
    _pack_ = 1
    _fields_ = [
                  ("MoneyType", c_ubyte),
                  ("MoneyValue", c_int),
                  ("PrizeType", c_ubyte),    # 台面奖励类型: 1-金币;2-仙玉币
                  ("PrizeCount", c_int),    # 数量,每次都同步台面的总数量
                  ]
    def __init__(self):
@@ -48802,32 +48802,34 @@
        return _pos + self.GetLength()
    def Clear(self):
        self.MoneyType = 0
        self.MoneyValue = 0
        self.PrizeType = 0
        self.PrizeCount = 0
        return
    def GetLength(self):
        return sizeof(tagMCTuijinbiMoney)
        return sizeof(tagMCTuijinbiPool)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AA 05 推金币信息 //tagMCTuijinbiInfo:
                                MoneyType:%d,
                                MoneyValue:%d
                                PrizeType:%d,
                                PrizeCount:%d
                                '''\
                                %(
                                self.MoneyType,
                                self.MoneyValue
                                self.PrizeType,
                                self.PrizeCount
                                )
        return DumpString
class  tagMCTuijinbiInfo(Structure):
    Head = tagHead()
    AwardMoneyCount = 0    #(BYTE AwardMoneyCount)
    AwardMoneyList = list()    #(vector<tagMCTuijinbiMoney> AwardMoneyList)// 累计获得货币信息列表
    DrawType = 0    #(BYTE DrawType)// 本次抽奖奖励类型,为0时表示非抽奖同步;1-金币;2-仙玉币;3-红包;4-超级奖励
    DrawCount = 0    #(DWORD DrawCount)// 本次抽奖奖励数量
    PoolPrizeCnt = 0    #(BYTE PoolPrizeCnt)
    PoolPrizeList = list()    #(vector<tagMCTuijinbiPool> PoolPrizeList)// 台面奖池信息列表,每次都完整通知
    data = None
    def __init__(self):
@@ -48839,11 +48841,13 @@
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.AwardMoneyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.AwardMoneyCount):
            temAwardMoneyList = tagMCTuijinbiMoney()
            _pos = temAwardMoneyList.ReadData(_lpData, _pos)
            self.AwardMoneyList.append(temAwardMoneyList)
        self.DrawType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.DrawCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PoolPrizeCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.PoolPrizeCnt):
            temPoolPrizeList = tagMCTuijinbiPool()
            _pos = temPoolPrizeList.ReadData(_lpData, _pos)
            self.PoolPrizeList.append(temPoolPrizeList)
        return _pos
    def Clear(self):
@@ -48851,36 +48855,46 @@
        self.Head.Clear()
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x05
        self.AwardMoneyCount = 0
        self.AwardMoneyList = list()
        self.DrawType = 0
        self.DrawCount = 0
        self.PoolPrizeCnt = 0
        self.PoolPrizeList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        for i in range(self.AwardMoneyCount):
            length += self.AwardMoneyList[i].GetLength()
        length += 4
        length += 1
        for i in range(self.PoolPrizeCnt):
            length += self.PoolPrizeList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.AwardMoneyCount)
        for i in range(self.AwardMoneyCount):
            data = CommFunc.WriteString(data, self.AwardMoneyList[i].GetLength(), self.AwardMoneyList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.DrawType)
        data = CommFunc.WriteDWORD(data, self.DrawCount)
        data = CommFunc.WriteBYTE(data, self.PoolPrizeCnt)
        for i in range(self.PoolPrizeCnt):
            data = CommFunc.WriteString(data, self.PoolPrizeList[i].GetLength(), self.PoolPrizeList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                AwardMoneyCount:%d,
                                AwardMoneyList:%s
                                DrawType:%d,
                                DrawCount:%d,
                                PoolPrizeCnt:%d,
                                PoolPrizeList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.AwardMoneyCount,
                                self.DrawType,
                                self.DrawCount,
                                self.PoolPrizeCnt,
                                "..."
                                )
        return DumpString
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4309,6 +4309,9 @@
# 至尊卡1折折扣,英文版专用
Def_PDict_TuiJinbiBanTime = "TuiJinbiBanTime"  # 推金币超级推板购买时间戳
Def_PDict_TuiJinbiMoney = "TuiJinbiMoney_%s"  # 推金币累计获得货币数,参数(货币类型)
Def_PDict_TuiJinbiSign = "TuiJinbiSign"  # 玩家标记: 0-未标记;1-新玩家;2-老版本前端玩家
Def_PDict_TuiJinbiCnt = "TuiJinbiCnt"  # 累计推金币次数
Def_PDict_TuiJinbiPool = "TuiJinbiPool_%s"  # 推金币台面奖池奖励类型数,参数(奖励类型)
# 成就 Def_PDictType_Success
Def_PDict_Success_AwardRecord = "Succ_AwardRecord_%s" # 成就领奖记录,参数(key编号),按索引位存储0-未领,1-已领
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -48785,11 +48785,11 @@
#------------------------------------------------------
# AA 05 推金币信息 #tagMCTuijinbiInfo
class  tagMCTuijinbiMoney(Structure):
class  tagMCTuijinbiPool(Structure):
    _pack_ = 1
    _fields_ = [
                  ("MoneyType", c_ubyte),
                  ("MoneyValue", c_int),
                  ("PrizeType", c_ubyte),    # 台面奖励类型: 1-金币;2-仙玉币
                  ("PrizeCount", c_int),    # 数量,每次都同步台面的总数量
                  ]
    def __init__(self):
@@ -48802,32 +48802,34 @@
        return _pos + self.GetLength()
    def Clear(self):
        self.MoneyType = 0
        self.MoneyValue = 0
        self.PrizeType = 0
        self.PrizeCount = 0
        return
    def GetLength(self):
        return sizeof(tagMCTuijinbiMoney)
        return sizeof(tagMCTuijinbiPool)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// AA 05 推金币信息 //tagMCTuijinbiInfo:
                                MoneyType:%d,
                                MoneyValue:%d
                                PrizeType:%d,
                                PrizeCount:%d
                                '''\
                                %(
                                self.MoneyType,
                                self.MoneyValue
                                self.PrizeType,
                                self.PrizeCount
                                )
        return DumpString
class  tagMCTuijinbiInfo(Structure):
    Head = tagHead()
    AwardMoneyCount = 0    #(BYTE AwardMoneyCount)
    AwardMoneyList = list()    #(vector<tagMCTuijinbiMoney> AwardMoneyList)// 累计获得货币信息列表
    DrawType = 0    #(BYTE DrawType)// 本次抽奖奖励类型,为0时表示非抽奖同步;1-金币;2-仙玉币;3-红包;4-超级奖励
    DrawCount = 0    #(DWORD DrawCount)// 本次抽奖奖励数量
    PoolPrizeCnt = 0    #(BYTE PoolPrizeCnt)
    PoolPrizeList = list()    #(vector<tagMCTuijinbiPool> PoolPrizeList)// 台面奖池信息列表,每次都完整通知
    data = None
    def __init__(self):
@@ -48839,11 +48841,13 @@
    def ReadData(self, _lpData, _pos=0, _Len=0):
        self.Clear()
        _pos = self.Head.ReadData(_lpData, _pos)
        self.AwardMoneyCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.AwardMoneyCount):
            temAwardMoneyList = tagMCTuijinbiMoney()
            _pos = temAwardMoneyList.ReadData(_lpData, _pos)
            self.AwardMoneyList.append(temAwardMoneyList)
        self.DrawType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.DrawCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.PoolPrizeCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.PoolPrizeCnt):
            temPoolPrizeList = tagMCTuijinbiPool()
            _pos = temPoolPrizeList.ReadData(_lpData, _pos)
            self.PoolPrizeList.append(temPoolPrizeList)
        return _pos
    def Clear(self):
@@ -48851,36 +48855,46 @@
        self.Head.Clear()
        self.Head.Cmd = 0xAA
        self.Head.SubCmd = 0x05
        self.AwardMoneyCount = 0
        self.AwardMoneyList = list()
        self.DrawType = 0
        self.DrawCount = 0
        self.PoolPrizeCnt = 0
        self.PoolPrizeList = list()
        return
    def GetLength(self):
        length = 0
        length += self.Head.GetLength()
        length += 1
        for i in range(self.AwardMoneyCount):
            length += self.AwardMoneyList[i].GetLength()
        length += 4
        length += 1
        for i in range(self.PoolPrizeCnt):
            length += self.PoolPrizeList[i].GetLength()
        return length
    def GetBuffer(self):
        data = ''
        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
        data = CommFunc.WriteBYTE(data, self.AwardMoneyCount)
        for i in range(self.AwardMoneyCount):
            data = CommFunc.WriteString(data, self.AwardMoneyList[i].GetLength(), self.AwardMoneyList[i].GetBuffer())
        data = CommFunc.WriteBYTE(data, self.DrawType)
        data = CommFunc.WriteDWORD(data, self.DrawCount)
        data = CommFunc.WriteBYTE(data, self.PoolPrizeCnt)
        for i in range(self.PoolPrizeCnt):
            data = CommFunc.WriteString(data, self.PoolPrizeList[i].GetLength(), self.PoolPrizeList[i].GetBuffer())
        return data
    def OutputString(self):
        DumpString = '''
                                Head:%s,
                                AwardMoneyCount:%d,
                                AwardMoneyList:%s
                                DrawType:%d,
                                DrawCount:%d,
                                PoolPrizeCnt:%d,
                                PoolPrizeList:%s
                                '''\
                                %(
                                self.Head.OutputString(),
                                self.AwardMoneyCount,
                                self.DrawType,
                                self.DrawCount,
                                self.PoolPrizeCnt,
                                "..."
                                )
        return DumpString
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Tuijinbi.py
New file
@@ -0,0 +1,59 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package GM.Commands.Tuijinbi
#
# @todo:推金币
# @author hxp
# @date 2024-12-13
# @version 1.0
#
# 详细描述: 推金币
#
#-------------------------------------------------------------------------------
#"""Version = 2024-12-13 18:00"""
#-------------------------------------------------------------------------------
import GameWorld
import PlayerControl
import PlayerSuperDiscount
import ChConfig
## GM命令执行入口
#  @param curPlayer 当前玩家
#  @param msgList 参数列表
#  @return None
#  @remarks 函数详细说明.
def OnExec(curPlayer, msgList):
    if not msgList:
        GameWorld.DebugAnswer(curPlayer, "重置推金币: Tuijinbi 0 [新老玩家标记]")
        GameWorld.DebugAnswer(curPlayer, "设置台面值: Tuijinbi p 类型 数量 类型 数量")
        GameWorld.DebugAnswer(curPlayer, "新老玩家标记: 1-新玩家; 2-老玩家")
        return
    value = msgList[0]
    if value == 0:
        sign = msgList[1] if len(msgList) > 1 else PlayerSuperDiscount.Sign_NewVerPlayer
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TuiJinbiSign, sign)
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TuiJinbiCnt, 0)
        for moneyType in PlayerSuperDiscount.PrizeMoneyTypeList:
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TuiJinbiMoney % moneyType, 0)
        for prizeType in [PlayerSuperDiscount.PrizeType_Gold, PlayerSuperDiscount.PrizeType_Xianyu]:
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TuiJinbiPool % prizeType, 0)
        PlayerSuperDiscount.SyncTuijinbiInfo(curPlayer)
        GameWorld.DebugAnswer(curPlayer, "重置推金币玩家标记:%s" % sign)
    elif value == "p":
        setValueList = msgList[1:]
        for index in range(len(setValueList) / 2):
            prizeType = setValueList[index * 2]
            prizeValue = setValueList[index * 2 + 1]
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TuiJinbiPool % prizeType, prizeValue)
            GameWorld.DebugAnswer(curPlayer, "设置台面Type:%s,个数:%s" % (prizeType, prizeValue))
        PlayerSuperDiscount.SyncTuijinbiInfo(curPlayer)
    return
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuperDiscount.py
@@ -20,11 +20,47 @@
import PlayerControl
import ChPyNetSendPack
import NetPackCommon
import ItemControler
import IPY_GameWorld
import ShareDefine
import ChConfig
import random
import time
PrizeType_Gold = 1 # 金币 = 10万铜钱
PrizeType_Xianyu = 2 # 仙玉币 = 10仙玉
PrizeType_Redpack = 3 # 红包
PrizeType_Super = 4 # 超级奖励
PrizeMoneyTypeList = [1, 2, 3] # 本功能可产出的货币类型
Sign_NewVerPlayer = 1 # 新版本后端处理玩家
Sign_OldVerPlayer = 2 # 老版本前端处理玩家
def __InitOldPlayerTjb(curPlayer):
    ## 老玩家推金币默认奖池处理
    if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TuiJinbiSign):
        #GameWorld.DebugLog("推金币玩家标记已处理: %s" % curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TuiJinbiSign), curPlayer.GetPlayerID())
        return
    sign = Sign_NewVerPlayer
    for moneyType in PrizeMoneyTypeList:
        if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TuiJinbiMoney % moneyType):
            sign = Sign_OldVerPlayer # 有实际获得过奖励视为老玩家
            break
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TuiJinbiSign, sign)
    if sign != Sign_OldVerPlayer:
        return
    # 给老玩家初始台面
    initPrizeList = IpyGameDataPY.GetFuncEvalCfg("EnSuperDiscount", 5)
    for prizeType, prizeCount in initPrizeList:
        if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TuiJinbiPool % prizeType):
            continue
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TuiJinbiPool % prizeType, prizeCount)
    GameWorld.Log("推金币老玩家设置初始台面数据: %s" % str(initPrizeList), curPlayer.GetPlayerID())
    return
def OnPlayerLogin(curPlayer):
    __InitOldPlayerTjb(curPlayer)
    SyncTuijinbiInfo(curPlayer)
    return
@@ -79,62 +115,138 @@
#struct     tagCMTuijinbi
#{
#    tagHead        Head;
#    BYTE        OpType;    // 操作类型: 0-抽奖;1-获得金币;2-激活至尊卡
#    DWORD        Value1;    // 类型1时为货币类型
#    DWORD        Value2;    // 类型1时为货币数值
#    BYTE        OpType;    // 操作类型: 0-抽奖;1-获得奖励;2-激活至尊卡
#    DWORD        Value1;    // 类型1时为奖励类型
#    DWORD        Value2;    // 类型1时为奖励数值
#};
def OnTuijinbi(index, clientData, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    playerID = curPlayer.GetPlayerID()
    opType = clientData.OpType
    value1 = clientData.Value1
    value2 = clientData.Value2
    
    if opType == 0:
        # 直接扣除次数,仅作为记录用,抽奖逻辑前端自己控制
        PlayerControl.PayMoney(curPlayer, ShareDefine.TYPE_Price_Tuijinbi, 1, isNotify=False)
        __DoDraw(curPlayer)
        
    elif opType == 1:
        moneyType = value1
        moneyValue = value2
        moneyUpperLimitDict = IpyGameDataPY.GetFuncEvalCfg("EnSuperDiscount", 3, {})
        if moneyType not in moneyUpperLimitDict:
            GameWorld.DebugLog("推金币没有配置获得该货币奖励上限! moneyType=%s" % moneyType, playerID)
            return
        moneyUpperLimit = moneyUpperLimitDict[moneyType]
        moneyTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TuiJinbiMoney % moneyType)
        updMoneyTotal = min(moneyTotal + moneyValue, moneyUpperLimit, ChConfig.Def_UpperLimit_DWord)
        giveMoney = updMoneyTotal - moneyTotal
        if giveMoney <= 0:
            GameWorld.ErrLog("推金币已达奖励上限! moneyType=%s,moneyTotal=%s" % (moneyType, moneyTotal), playerID)
            return
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TuiJinbiMoney % moneyType, updMoneyTotal)
        GameWorld.DebugLog("更新推金币奖励: moneyType=%s,moneyValue=%s,giveMoney=%s,updMoneyTotal=%s"
                           % (moneyType, moneyValue, giveMoney, updMoneyTotal), playerID)
        PlayerControl.GiveMoney(curPlayer, moneyType, giveMoney, "Tuijinbi")
        SyncTuijinbiInfo(curPlayer)
        __DoGivePrize(curPlayer, value1, value2)
        
    elif opType == 2:
        __DoActiveSuperDiscount(curPlayer)
        
    return
def SyncTuijinbiInfo(curPlayer):
    awardMoneyList = []
    moneyUpperLimitDict = IpyGameDataPY.GetFuncEvalCfg("EnSuperDiscount", 3, {})
    for moneyType in moneyUpperLimitDict.keys():
        moneyTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TuiJinbiMoney % moneyType)
        if not moneyTotal:
            continue
        moneyInfo = ChPyNetSendPack.tagMCTuijinbiMoney()
        moneyInfo.MoneyType = moneyType
        moneyInfo.MoneyValue = moneyTotal
        awardMoneyList.append(moneyInfo)
    if not awardMoneyList:
def __DoDraw(curPlayer):
    ## 抽奖
    if not PlayerControl.HaveMoney(curPlayer, ShareDefine.TYPE_Price_Tuijinbi, 1):
        return
    playerID = curPlayer.GetPlayerID()
    prizeSetList = IpyGameDataPY.GetFuncEvalCfg("PushCoin", 1) # 奖池 [[类型, 概率, 数量], ...]
    prizeRateList = []
    for setInfo in prizeSetList:
        prizeRateList.append([setInfo[1], [setInfo[0], setInfo[2]]])
    playerSign = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TuiJinbiSign)
    tuijinbiCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TuiJinbiCnt)
    GameWorld.DebugLog("推金币抽奖: playerSign=%s,tuijinbiCnt=%s,prizeRateList=%s" % (playerSign, tuijinbiCnt, prizeRateList), playerID)
    addPoolPrizeInfo = {} # 增加台面奖池信息
    drawInfo = GameWorld.GetResultByRandomList(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)
        # 首次附加默认初始奖励
        initPrizeList = IpyGameDataPY.GetFuncEvalCfg("EnSuperDiscount", 5)
        for prizeType, prizeCnt in initPrizeList:
            addPoolPrizeInfo[prizeType] = prizeCnt
        GameWorld.DebugLog("新手首次推额外奖励: %s" % addPoolPrizeInfo, playerID)
    if not drawInfo or len(drawInfo) != 2:
        return
    drawType, drawCount = drawInfo
    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)
        if randMoney and len(randMoney) == 2:
            __GiveMoney(curPlayer, randMoney[0], randMoney[1], True)
    # 超级奖励
    elif drawType == PrizeType_Super:
        randPrizeList = IpyGameDataPY.GetFuncEvalCfg("PushCoin", 2)
        randPrize = random.choice(randPrizeList)
        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)
        addPoolPrizeInfo[drawType] = addPoolPrizeInfo.get(drawType, 0) + drawCount
    for prizeType, addCnt in addPoolPrizeInfo.items():
        curCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TuiJinbiPool % prizeType)
        updCnt = curCnt + addCnt
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TuiJinbiPool % prizeType, updCnt)
        GameWorld.DebugLog("推金币更新台面: prizeType=%s,curCnt=%s,addCnt=%s,updCnt=%s" % (prizeType, curCnt, addCnt, updCnt), playerID)
    tuijinbiCnt += 1
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TuiJinbiCnt, tuijinbiCnt)
    GameWorld.DebugLog("更新累计推金币次数: %s" % (tuijinbiCnt), playerID)
    SyncTuijinbiInfo(curPlayer, drawType, drawCount)
    return
def __DoGivePrize(curPlayer, prizeType, prizeCount):
    if prizeType not in [PrizeType_Gold, PrizeType_Xianyu]:
        return
    curCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TuiJinbiPool % prizeType)
    giveCnt = min(prizeCount, curCnt)
    if not giveCnt:
        return
    updCnt = curCnt - giveCnt
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TuiJinbiPool % prizeType, updCnt)
    GameWorld.DebugLog("掉落更新台面: prizeType=%s,prizeCount=%s,curCnt=%s,giveCnt=%s,updCnt=%s"
                       % (prizeType, prizeCount, curCnt, giveCnt, updCnt), curPlayer.GetPlayerID())
    if prizeType == PrizeType_Gold:
        __GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, 100000 * giveCnt)
    elif prizeType == PrizeType_Xianyu:
        __GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, 10 * giveCnt)
    SyncTuijinbiInfo(curPlayer)
    return
def __GiveMoney(curPlayer, moneyType, moneyValue, notifyAward=False):
    moneyTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TuiJinbiMoney % moneyType)
    updMoneyTotal = min(moneyTotal + moneyValue, ChConfig.Def_UpperLimit_DWord)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TuiJinbiMoney % moneyType, updMoneyTotal)
    GameWorld.DebugLog("更新推金币累计奖励货币: moneyType=%s,moneyValue=%s,updMoneyTotal=%s"
                       % (moneyType, moneyValue, updMoneyTotal), curPlayer.GetPlayerID())
    PlayerControl.GiveMoney(curPlayer, moneyType, moneyValue, "Tuijinbi")
    if notifyAward:
        ItemControler.NotifyGiveAwardInfo(curPlayer, [], "Tuijinbi", moneyInfo={moneyType:moneyValue})
    return
def SyncTuijinbiInfo(curPlayer, drawType=0, drawCount=0):
    poolPrizeList = [] # 台面信息
    for prizeType in [PrizeType_Gold, PrizeType_Xianyu]:
        prizeCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TuiJinbiPool % prizeType)
        if not prizeCount:
            continue
        poolInfo = ChPyNetSendPack.tagMCTuijinbiPool()
        poolInfo.PrizeType = prizeType
        poolInfo.PrizeCount = prizeCount
        poolPrizeList.append(poolInfo)
    clientPack = ChPyNetSendPack.tagMCTuijinbiInfo()
    clientPack.AwardMoneyList = awardMoneyList
    clientPack.AwardMoneyCount = len(clientPack.AwardMoneyList)
    clientPack.DrawType = drawType
    clientPack.DrawCount = drawCount
    clientPack.PoolPrizeList = poolPrizeList
    clientPack.PoolPrizeCnt = len(clientPack.PoolPrizeList)
    NetPackCommon.SendFakePack(curPlayer, clientPack)
    return