From 82913849bb18101c411c39bd14df207f656dd49d Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 13 十二月 2024 19:25:19 +0800
Subject: [PATCH] 10345 【英文】推金币优化(改为同步抽中位置编号)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 19 +++------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py | 20 ++++++++++
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 19 +++------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuperDiscount.py | 18 ++++----
4 files changed, 41 insertions(+), 35 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 0a6ecb5..427682f 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/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,
"..."
)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 0a6ecb5..427682f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/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,
"..."
)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py
index 4c9ab35..edea7e9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorld.py
@@ -1686,6 +1686,26 @@
plusPieList.append((specRate, info))
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
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 4a39626..df08891 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuperDiscount.py
+++ b/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)
--
Gitblit v1.8.0