From c7de89ae0c2999d9d2585dc63df28eac36a443e1 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 04 九月 2024 19:09:09 +0800
Subject: [PATCH] 10249 【越南】【砍树】仙宫(增加累计消耗货币值同步;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 108 +++++++++++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 1
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 31 ++++++
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 108 +++++++++++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 1
7 files changed, 255 insertions(+), 0 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index a84b273..54a6785 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -51088,6 +51088,114 @@
#------------------------------------------------------
+# B1 16 累计消耗货币信息 #tagMCUseMoneyTotalInfo
+
+class tagMCUseMoneyTotal(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("MoneyType", c_ubyte), # 货币类型,仅同步需要记录的货币类型
+ ("UseTotal", c_int), # 累计消耗货币值
+ ]
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.MoneyType = 0
+ self.UseTotal = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCUseMoneyTotal)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// B1 16 累计消耗货币信息 //tagMCUseMoneyTotalInfo:
+ MoneyType:%d,
+ UseTotal:%d
+ '''\
+ %(
+ self.MoneyType,
+ self.UseTotal
+ )
+ return DumpString
+
+
+class tagMCUseMoneyTotalInfo(Structure):
+ Head = tagHead()
+ Count = 0 #(BYTE Count)
+ InfoList = list() #(vector<tagMCUseMoneyTotal> InfoList)
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xB1
+ self.Head.SubCmd = 0x16
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.Count):
+ temInfoList = tagMCUseMoneyTotal()
+ _pos = temInfoList.ReadData(_lpData, _pos)
+ self.InfoList.append(temInfoList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xB1
+ self.Head.SubCmd = 0x16
+ self.Count = 0
+ self.InfoList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ for i in range(self.Count):
+ length += self.InfoList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.Count)
+ for i in range(self.Count):
+ data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ Count:%d,
+ InfoList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.Count,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagMCUseMoneyTotalInfo=tagMCUseMoneyTotalInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCUseMoneyTotalInfo.Head.Cmd,m_NAtagMCUseMoneyTotalInfo.Head.SubCmd))] = m_NAtagMCUseMoneyTotalInfo
+
+
+#------------------------------------------------------
# B1 14 仙宫信息 #tagMCXiangongInfo
class tagMCXiangong(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index 7acf7d4..8de9197 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -1206,6 +1206,9 @@
39:"成就积分", 41:"仙桃", 42:"灵玉", 43:"凭证积分", 44:"聚魂精华", 45:"骑宠养成积分", 46:"古宝养成积分", 47:"天道果", 99:"代币"
}
+#需要记录累计消耗的货币类型
+UseTotalPriceTypeList = [TYPE_Price_TiandaoFruit]
+
#以下是旧的金钱类型
TYPE_Price_Magic_Integral = 101 # 魔方寻宝积分
TYPE_Price_GongXun = 105 # 功勋点
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index d1d7b53..e763535 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3740,6 +3740,7 @@
Def_PDict_MysticalShopLVRefreshCnt = "MysticalShopLVRefreshCnt" # 神秘商店等级段刷新次数
Def_PDict_MoneyMinus = "MoneyMinus_%s" # 货币对应负值, 参数[货币类型]
Def_PDict_Currency = "PlayerCurrency_%s" # 自定义货币类型, 参数[自定义货币类型]
+Def_PDict_UseMoneyTotal = "UseMoneyTotal_%s" # 累计消耗货币, 参数[货币类型]
Def_PDict_TJGSet = "TJGSet" # 脱机挂系统设定
Def_PDict_TJGDeadTime = "TJGDeadTime" # 脱机被杀时间
Def_PDict_TJGDeadPayTime = "TJGDeadPayTime" # 脱机被杀后可补偿的时间
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index a84b273..54a6785 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -51088,6 +51088,114 @@
#------------------------------------------------------
+# B1 16 累计消耗货币信息 #tagMCUseMoneyTotalInfo
+
+class tagMCUseMoneyTotal(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("MoneyType", c_ubyte), # 货币类型,仅同步需要记录的货币类型
+ ("UseTotal", c_int), # 累计消耗货币值
+ ]
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, stringData, _pos=0, _len=0):
+ self.Clear()
+ memmove(addressof(self), stringData[_pos:], self.GetLength())
+ return _pos + self.GetLength()
+
+ def Clear(self):
+ self.MoneyType = 0
+ self.UseTotal = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCUseMoneyTotal)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// B1 16 累计消耗货币信息 //tagMCUseMoneyTotalInfo:
+ MoneyType:%d,
+ UseTotal:%d
+ '''\
+ %(
+ self.MoneyType,
+ self.UseTotal
+ )
+ return DumpString
+
+
+class tagMCUseMoneyTotalInfo(Structure):
+ Head = tagHead()
+ Count = 0 #(BYTE Count)
+ InfoList = list() #(vector<tagMCUseMoneyTotal> InfoList)
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xB1
+ self.Head.SubCmd = 0x16
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.Count):
+ temInfoList = tagMCUseMoneyTotal()
+ _pos = temInfoList.ReadData(_lpData, _pos)
+ self.InfoList.append(temInfoList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xB1
+ self.Head.SubCmd = 0x16
+ self.Count = 0
+ self.InfoList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ for i in range(self.Count):
+ length += self.InfoList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.Count)
+ for i in range(self.Count):
+ data = CommFunc.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ Count:%d,
+ InfoList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.Count,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagMCUseMoneyTotalInfo=tagMCUseMoneyTotalInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCUseMoneyTotalInfo.Head.Cmd,m_NAtagMCUseMoneyTotalInfo.Head.SubCmd))] = m_NAtagMCUseMoneyTotalInfo
+
+
+#------------------------------------------------------
# B1 14 仙宫信息 #tagMCXiangongInfo
class tagMCXiangong(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index 61fe45c..615a2eb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -800,6 +800,7 @@
# 自定义货币值同步
PlayerControl.NotifyPlayerAllCurrency(curPlayer)
+ PlayerControl.NotifyUseMoneyTotal(curPlayer)
#通知基础属性
NotifyPlayerBasePoint(curPlayer)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index b8ac1de..dcd68df 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -2979,6 +2979,31 @@
NetPackCommon.SendFakePack(curPlayer, sendPack)
return
+def NotifyUseMoneyTotal(curPlayer, moneyTypeList=None):
+ if moneyTypeList:
+ notifyMoneyTypeList = moneyTypeList
+ else:
+ notifyMoneyTypeList = ShareDefine.UseTotalPriceTypeList
+
+ infoList = []
+ for moneyType in notifyMoneyTypeList:
+ useTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_UseMoneyTotal % moneyType)
+ if not useTotal and moneyTypeList == None:
+ continue
+ info = ChPyNetSendPack.tagMCUseMoneyTotal()
+ info.MoneyType = moneyType
+ info.UseTotal = useTotal
+ infoList.append(info)
+
+ if not infoList:
+ return
+
+ clientPack = ChPyNetSendPack.tagMCUseMoneyTotalInfo()
+ clientPack.Clear()
+ clientPack.InfoList = infoList
+ clientPack.Count = len(clientPack.InfoList)
+ NetPackCommon.SendFakePack(curPlayer, clientPack)
+ return
##玩家是否有钱款
# @param curPlayer 玩家实例
@@ -3223,6 +3248,12 @@
# @param quantity 消费数量
# @return None
def __PayMoneyAfter(curPlayer, type_Price, price, costType, infoDict, quantity, costVIPGold):
+ if type_Price in ShareDefine.UseTotalPriceTypeList:
+ useTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_UseMoneyTotal % type_Price)
+ useTotal = min(useTotal + price, ChConfig.Def_UpperLimit_DWord)
+ NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_UseMoneyTotal % type_Price, useTotal)
+ NotifyUseMoneyTotal(curPlayer, [type_Price])
+
#金子支付
if type_Price == IPY_GameWorld.TYPE_Price_Gold_Money:
__PayMoneyAfterByGoldMoney(curPlayer, type_Price, price, costType, infoDict, costVIPGold)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 7acf7d4..8de9197 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -1206,6 +1206,9 @@
39:"成就积分", 41:"仙桃", 42:"灵玉", 43:"凭证积分", 44:"聚魂精华", 45:"骑宠养成积分", 46:"古宝养成积分", 47:"天道果", 99:"代币"
}
+#需要记录累计消耗的货币类型
+UseTotalPriceTypeList = [TYPE_Price_TiandaoFruit]
+
#以下是旧的金钱类型
TYPE_Price_Magic_Integral = 101 # 魔方寻宝积分
TYPE_Price_GongXun = 105 # 功勋点
--
Gitblit v1.8.0