From d47077546e4948ae10be4859b9fb0953dc021d3a Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 13 十二月 2024 17:57:32 +0800
Subject: [PATCH] 10345 【英文】推金币优化(改为后端处理)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 68 +++++---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Tuijinbi.py | 59 ++++++++
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 68 +++++---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuperDiscount.py | 188 +++++++++++++++++++++-----
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 3
5 files changed, 294 insertions(+), 92 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index d7ff35e..0a6ecb5 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/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
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 86c4180..2727e40 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/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-已领
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index d7ff35e..0a6ecb5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/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
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Tuijinbi.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Tuijinbi.py
new file mode 100644
index 0000000..3d56e4a
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Tuijinbi.py
@@ -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
+
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuperDiscount.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuperDiscount.py
index ecbf8e8..4a39626 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuperDiscount.py
+++ b/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
--
Gitblit v1.8.0