| | |
| | | #------------------------------------------------------
|
| | | # 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):
|
| | |
| | | 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):
|
| | |
| | | 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):
|
| | |
| | | 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
|
| | |
| | | # 至尊卡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-已领
|
| | |
| | | #------------------------------------------------------
|
| | | # 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):
|
| | |
| | | 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):
|
| | |
| | | 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):
|
| | |
| | | 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
|
New file |
| | |
| | | #!/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
|
| | |
|
| | |
|
| | |
| | | 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
|
| | |
|
| | |
| | | #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
|
| | |
|