From 321c3dbbf210501c148765031ec6550b594e8387 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 09 十月 2023 16:28:09 +0800
Subject: [PATCH] 9952 【BT0.1】【主干】仙盟修改(货币捐献;仙盟事务)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py | 248 +++++++++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini | 10
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py | 108 ++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 131 +++++++++
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 108 ++++++++
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 131 +++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 6
7 files changed, 737 insertions(+), 5 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
index 11c4858..0b592aa 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -14001,6 +14001,114 @@
#------------------------------------------------------
+# A6 13 家族事务操作 #tagCMFamilyAffairOP
+
+class tagCMFamilyAffairOP(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("OPType", c_ubyte), # 操作类型:1-刷新事务;2-开始事务;3-领取事务奖励;
+ ("AffairID", c_ushort), # 事务ID,可选
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xA6
+ self.SubCmd = 0x13
+ 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.Cmd = 0xA6
+ self.SubCmd = 0x13
+ self.OPType = 0
+ self.AffairID = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMFamilyAffairOP)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A6 13 家族事务操作 //tagCMFamilyAffairOP:
+ Cmd:%s,
+ SubCmd:%s,
+ OPType:%d,
+ AffairID:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.OPType,
+ self.AffairID
+ )
+ return DumpString
+
+
+m_NAtagCMFamilyAffairOP=tagCMFamilyAffairOP()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyAffairOP.Cmd,m_NAtagCMFamilyAffairOP.SubCmd))] = m_NAtagCMFamilyAffairOP
+
+
+#------------------------------------------------------
+# A6 12 家族捐献货币 #tagCMFamilyMoneyDonate
+
+class tagCMFamilyMoneyDonate(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("MoneyType", c_ubyte), # 捐献货币类型
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xA6
+ self.SubCmd = 0x12
+ 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.Cmd = 0xA6
+ self.SubCmd = 0x12
+ self.MoneyType = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMFamilyMoneyDonate)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A6 12 家族捐献货币 //tagCMFamilyMoneyDonate:
+ Cmd:%s,
+ SubCmd:%s,
+ MoneyType:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.MoneyType
+ )
+ return DumpString
+
+
+m_NAtagCMFamilyMoneyDonate=tagCMFamilyMoneyDonate()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyMoneyDonate.Cmd,m_NAtagCMFamilyMoneyDonate.SubCmd))] = m_NAtagCMFamilyMoneyDonate
+
+
+#------------------------------------------------------
# A6 09 家族仓库捐赠物品 #tagCMFamilyStoreDonate
class tagCMFamilyStoreDonate(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 0f37d31..becbb41 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -26246,6 +26246,129 @@
#------------------------------------------------------
+# A5 08 家族事务信息 #tagMCFamilyAffairInfo
+
+class tagMCFamilyAffair(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("AffairID", c_ushort), # 事务ID
+ ("Star", c_ubyte), # 星级
+ ("State", c_ubyte), # 状态:0-无;1-进行中;2-已完成
+ ("RemainDuration", c_ushort), # 剩余时长,秒,有剩余时间代表进行中
+ ]
+
+ 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.AffairID = 0
+ self.Star = 0
+ self.State = 0
+ self.RemainDuration = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCFamilyAffair)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A5 08 家族事务信息 //tagMCFamilyAffairInfo:
+ AffairID:%d,
+ Star:%d,
+ State:%d,
+ RemainDuration:%d
+ '''\
+ %(
+ self.AffairID,
+ self.Star,
+ self.State,
+ self.RemainDuration
+ )
+ return DumpString
+
+
+class tagMCFamilyAffairInfo(Structure):
+ Head = tagHead()
+ RefreshFreeCount = 0 #(BYTE RefreshFreeCount)// 今日已免费刷新次数
+ Count = 0 #(BYTE Count)
+ AffairInfoList = list() #(vector<tagMCFamilyAffair> AffairInfoList)// 事务列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xA5
+ self.Head.SubCmd = 0x08
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.RefreshFreeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.Count):
+ temAffairInfoList = tagMCFamilyAffair()
+ _pos = temAffairInfoList.ReadData(_lpData, _pos)
+ self.AffairInfoList.append(temAffairInfoList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xA5
+ self.Head.SubCmd = 0x08
+ self.RefreshFreeCount = 0
+ self.Count = 0
+ self.AffairInfoList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ length += 1
+ for i in range(self.Count):
+ length += self.AffairInfoList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.RefreshFreeCount)
+ data = CommFunc.WriteBYTE(data, self.Count)
+ for i in range(self.Count):
+ data = CommFunc.WriteString(data, self.AffairInfoList[i].GetLength(), self.AffairInfoList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ RefreshFreeCount:%d,
+ Count:%d,
+ AffairInfoList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.RefreshFreeCount,
+ self.Count,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagMCFamilyAffairInfo=tagMCFamilyAffairInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyAffairInfo.Head.Cmd,m_NAtagMCFamilyAffairInfo.Head.SubCmd))] = m_NAtagMCFamilyAffairInfo
+
+
+#------------------------------------------------------
# A5 07 家族boss副本玩家信息 #tagMCFamilyBosFBPlayerInfo
class tagMCFamilyBosFBPlayerInfo(Structure):
@@ -26322,6 +26445,7 @@
("Cmd", c_ubyte),
("SubCmd", c_ubyte),
("GetState", c_ubyte), #是否已领取
+ ("MoneyDonateCount", c_ubyte), #今日货币捐献次数
]
def __init__(self):
@@ -26339,6 +26463,7 @@
self.Cmd = 0xA5
self.SubCmd = 0x06
self.GetState = 0
+ self.MoneyDonateCount = 0
return
def GetLength(self):
@@ -26351,12 +26476,14 @@
DumpString = '''// A5 06 仙盟每日福利领取状态 //tagMCFamilyDayAward:
Cmd:%s,
SubCmd:%s,
- GetState:%d
+ GetState:%d,
+ MoneyDonateCount:%d
'''\
%(
self.Cmd,
self.SubCmd,
- self.GetState
+ self.GetState,
+ self.MoneyDonateCount
)
return DumpString
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index 56d1cca..585f309 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -189,7 +189,7 @@
Writer = alee
Releaser = alee
RegType = 0
-RegisterPackCount = 5
+RegisterPackCount = 7
PacketCMD_1=0xA6
PacketSubCMD_1=0x01
@@ -211,6 +211,14 @@
PacketSubCMD_5=0x06
PacketCallFunc_5=OnFamilyActivityExchange
+PacketCMD_6=0xA6
+PacketSubCMD_6=0x12
+PacketCallFunc_6=OnFamilyMoneyDonate
+
+PacketCMD_7=0xA6
+PacketSubCMD_7=0x13
+PacketCallFunc_7=OnFamilyAffairOP
+
;家族仓库
[PlayerFamilyStore]
ScriptName = Player\PlayerFamilyStore.py
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 9433b07..91a6e06 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3553,6 +3553,12 @@
Def_Player_Dict_UpdateFamilyNameItemIndex = "UpdateFamilyNameItemIndex" # 改名物品在背包的位置
Def_Player_Dict_UpdateFamilyName = "UpdateFamilyName" # 改名锁
Def_Player_Dict_FamilyDayAward = "FamilyDayAward" # 仙盟每日奖励领奖记录
+Def_Player_Dict_FamilyMoneyDonateCount = "FamilyMoneyDonateCount" # 仙盟今日货币捐献次数
+
+# 仙盟事务
+Def_Player_Dict_FamilyAffairRefreshFree = "FamilyAffairRefreshFree" # 今日已免费刷新事务次数
+Def_Player_Dict_FamilyAffairInfo = "FamilyAffairStar_%s" # 事务信息,星级*10+状态(0-无;1-进行中;2-已完成);参数(事务编号ID)
+Def_Player_Dict_FamilyAffairStartTime = "FamilyAffairStartTime_%s" # 事务开始时间戳,参数(事务编号ID)
Def_Player_Dict_DelPackIndex = "DelPackIndex215" # 装备回购不重排,只记录最旧的一个物品
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index 11c4858..0b592aa 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -14001,6 +14001,114 @@
#------------------------------------------------------
+# A6 13 家族事务操作 #tagCMFamilyAffairOP
+
+class tagCMFamilyAffairOP(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("OPType", c_ubyte), # 操作类型:1-刷新事务;2-开始事务;3-领取事务奖励;
+ ("AffairID", c_ushort), # 事务ID,可选
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xA6
+ self.SubCmd = 0x13
+ 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.Cmd = 0xA6
+ self.SubCmd = 0x13
+ self.OPType = 0
+ self.AffairID = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMFamilyAffairOP)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A6 13 家族事务操作 //tagCMFamilyAffairOP:
+ Cmd:%s,
+ SubCmd:%s,
+ OPType:%d,
+ AffairID:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.OPType,
+ self.AffairID
+ )
+ return DumpString
+
+
+m_NAtagCMFamilyAffairOP=tagCMFamilyAffairOP()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyAffairOP.Cmd,m_NAtagCMFamilyAffairOP.SubCmd))] = m_NAtagCMFamilyAffairOP
+
+
+#------------------------------------------------------
+# A6 12 家族捐献货币 #tagCMFamilyMoneyDonate
+
+class tagCMFamilyMoneyDonate(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("MoneyType", c_ubyte), # 捐献货币类型
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xA6
+ self.SubCmd = 0x12
+ 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.Cmd = 0xA6
+ self.SubCmd = 0x12
+ self.MoneyType = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMFamilyMoneyDonate)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A6 12 家族捐献货币 //tagCMFamilyMoneyDonate:
+ Cmd:%s,
+ SubCmd:%s,
+ MoneyType:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.MoneyType
+ )
+ return DumpString
+
+
+m_NAtagCMFamilyMoneyDonate=tagCMFamilyMoneyDonate()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMFamilyMoneyDonate.Cmd,m_NAtagCMFamilyMoneyDonate.SubCmd))] = m_NAtagCMFamilyMoneyDonate
+
+
+#------------------------------------------------------
# A6 09 家族仓库捐赠物品 #tagCMFamilyStoreDonate
class tagCMFamilyStoreDonate(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 0f37d31..becbb41 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -26246,6 +26246,129 @@
#------------------------------------------------------
+# A5 08 家族事务信息 #tagMCFamilyAffairInfo
+
+class tagMCFamilyAffair(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("AffairID", c_ushort), # 事务ID
+ ("Star", c_ubyte), # 星级
+ ("State", c_ubyte), # 状态:0-无;1-进行中;2-已完成
+ ("RemainDuration", c_ushort), # 剩余时长,秒,有剩余时间代表进行中
+ ]
+
+ 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.AffairID = 0
+ self.Star = 0
+ self.State = 0
+ self.RemainDuration = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCFamilyAffair)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A5 08 家族事务信息 //tagMCFamilyAffairInfo:
+ AffairID:%d,
+ Star:%d,
+ State:%d,
+ RemainDuration:%d
+ '''\
+ %(
+ self.AffairID,
+ self.Star,
+ self.State,
+ self.RemainDuration
+ )
+ return DumpString
+
+
+class tagMCFamilyAffairInfo(Structure):
+ Head = tagHead()
+ RefreshFreeCount = 0 #(BYTE RefreshFreeCount)// 今日已免费刷新次数
+ Count = 0 #(BYTE Count)
+ AffairInfoList = list() #(vector<tagMCFamilyAffair> AffairInfoList)// 事务列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xA5
+ self.Head.SubCmd = 0x08
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.RefreshFreeCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.Count):
+ temAffairInfoList = tagMCFamilyAffair()
+ _pos = temAffairInfoList.ReadData(_lpData, _pos)
+ self.AffairInfoList.append(temAffairInfoList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xA5
+ self.Head.SubCmd = 0x08
+ self.RefreshFreeCount = 0
+ self.Count = 0
+ self.AffairInfoList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ length += 1
+ for i in range(self.Count):
+ length += self.AffairInfoList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.RefreshFreeCount)
+ data = CommFunc.WriteBYTE(data, self.Count)
+ for i in range(self.Count):
+ data = CommFunc.WriteString(data, self.AffairInfoList[i].GetLength(), self.AffairInfoList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ RefreshFreeCount:%d,
+ Count:%d,
+ AffairInfoList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.RefreshFreeCount,
+ self.Count,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagMCFamilyAffairInfo=tagMCFamilyAffairInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFamilyAffairInfo.Head.Cmd,m_NAtagMCFamilyAffairInfo.Head.SubCmd))] = m_NAtagMCFamilyAffairInfo
+
+
+#------------------------------------------------------
# A5 07 家族boss副本玩家信息 #tagMCFamilyBosFBPlayerInfo
class tagMCFamilyBosFBPlayerInfo(Structure):
@@ -26322,6 +26445,7 @@
("Cmd", c_ubyte),
("SubCmd", c_ubyte),
("GetState", c_ubyte), #是否已领取
+ ("MoneyDonateCount", c_ubyte), #今日货币捐献次数
]
def __init__(self):
@@ -26339,6 +26463,7 @@
self.Cmd = 0xA5
self.SubCmd = 0x06
self.GetState = 0
+ self.MoneyDonateCount = 0
return
def GetLength(self):
@@ -26351,12 +26476,14 @@
DumpString = '''// A5 06 仙盟每日福利领取状态 //tagMCFamilyDayAward:
Cmd:%s,
SubCmd:%s,
- GetState:%d
+ GetState:%d,
+ MoneyDonateCount:%d
'''\
%(
self.Cmd,
self.SubCmd,
- self.GetState
+ self.GetState,
+ self.MoneyDonateCount
)
return DumpString
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
index af014ae..71cee19 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
@@ -154,6 +154,7 @@
def __OnEnterFamily(curPlayer, tick):
EventShell.EventResponse_OnFamily(curPlayer)
__OnFamilyLVBuffChange(curPlayer, tick)
+ __FamilyAffair_CheckReset(curPlayer)
PlayerFamilyTech.Sync_PlayerFamilyTechLV(curPlayer)
DelAddFamilyRecord(curPlayer)
GameLogic_FamilyWar.DoCheckChampionFamilyTitle(curPlayer)
@@ -623,7 +624,9 @@
return
#每日福利奖励
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyDayAward, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyMoneyDonateCount, 0)
Sync_FamilyDayRewardState(curPlayer)
+ __FamilyAffair_Refresh(curPlayer, True)
return
@@ -637,6 +640,7 @@
PlayerFamilyTech.Sync_PlayerFamilyTechLV(curPlayer)
SyncFamilyActivityInfo(curPlayer)
Sync_FamilyDayRewardState(curPlayer)
+ __FamilyAffair_CheckReset(curPlayer)
return
def FamilyPlayerOnLoginCross(curPlayer):
@@ -857,6 +861,7 @@
def Sync_FamilyDayRewardState(curPlayer):
clientPack = ChPyNetSendPack.tagMCFamilyDayAward()
clientPack.GetState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyDayAward)
+ clientPack.MoneyDonateCount = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyMoneyDonateCount)
NetPackCommon.SendFakePack(curPlayer, clientPack)
return
@@ -927,3 +932,246 @@
packData.Point = givePoint
NetPackCommon.SendFakePack(curPlayer, packData)
return
+
+#// A6 12 家族捐献货币 #tagCMFamilyMoneyDonate
+#
+#struct tagCMFamilyMoneyDonate
+#{
+# tagHead Head;
+# BYTE MoneyType; // 捐献货币类型
+#};
+def OnFamilyMoneyDonate(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ moneyType = clientData.MoneyType
+ playerID = curPlayer.GetPlayerID()
+
+ dailyDonateCountMax = IpyGameDataPY.GetFuncCfg('FamilyDonate', 3)
+ donateCount = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyMoneyDonateCount)
+ if dailyDonateCountMax and donateCount >= dailyDonateCountMax:
+ GameWorld.DebugLog("今日货币捐献次数已达上限. donateCount=%s" % donateCount, playerID)
+ return
+
+ donatePrizeInfo = IpyGameDataPY.GetFuncEvalCfg('FamilyDonate', 4, {})
+ if str(moneyType) not in donatePrizeInfo:
+ GameWorld.DebugLog("不存在该货币类型捐献: moneyType=%s" % moneyType, playerID)
+ return
+ needMoney, contribution, familyActivity = donatePrizeInfo[str(moneyType)]
+ if not PlayerControl.HaveMoney(curPlayer, moneyType, needMoney):
+ return
+
+ updDonateCount = donateCount + 1
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyMoneyDonateCount, updDonateCount)
+ Sync_FamilyDayRewardState(curPlayer)
+ GameWorld.DebugLog("货币捐献: moneyType=%s,needMoney=%s,updDonateCount=%s,contribution=%s,familyActivity=%s"
+ % (moneyType, needMoney, updDonateCount, contribution, familyActivity), playerID)
+
+ if contribution > 0:
+ AddPlayerFamilyActiveValue(curPlayer, contribution, True, ShareDefine.Def_AddFAVReason_FamilyDonateItem, True)
+
+ if familyActivity > 0:
+ PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_FamilyActivity, familyActivity)
+
+ return
+
+
+##--------------------------------------- 仙盟事务 --------------------------------------------------
+AffairState_None = 0 # 无
+AffairState_Underway = 1 # 进行中
+AffairState_Finish = 2 # 已完成
+
+#// A6 13 家族事务操作 #tagCMFamilyAffairOP
+#
+#struct tagCMFamilyAffairOP
+#{
+# tagHead Head;
+# BYTE OPType; // 操作类型:1-刷新事务;2-开始事务;3-领取事务奖励;
+# WORD AffairID; // 事务ID,可选
+#};
+def OnFamilyAffairOP(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ opType = clientData.OPType
+ affairID = clientData.AffairID
+
+ if opType == 1:
+ __FamilyAffair_Refresh(curPlayer)
+ elif opType == 2:
+ __FamilyAffair_Start(curPlayer, affairID)
+ elif opType == 3:
+ __FamilyAffair_GetAward(curPlayer, affairID)
+ return
+
+def __FamilyAffair_CheckReset(curPlayer):
+ ## 检查任务重置,登录,进入仙盟触发
+ info = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyAffairInfo % 1)
+ if not info:
+ # 任务1还没分配,默认强制重置
+ __FamilyAffair_Refresh(curPlayer, True)
+ else:
+ SyncFamilyAffairInfo(curPlayer)
+ return
+
+def __FamilyAffair_Refresh(curPlayer, isReset=False):
+ ## 刷新事务
+
+ playerID = curPlayer.GetPlayerID()
+ moneyType, moneyValue = 0, 0
+ dayRefreshFreeCount = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyAffairRefreshFree)
+ if not isReset:
+ freeCountMax = IpyGameDataPY.GetFuncCfg("FamilyAffair", 2)
+ if freeCountMax and dayRefreshFreeCount >= freeCountMax:
+ moneyType, moneyValue = IpyGameDataPY.GetFuncEvalCfg("FamilyAffair", 3)
+ if not PlayerControl.HaveMoney(curPlayer, moneyType, moneyValue):
+ return
+
+ sendMailAffairList = []
+ refreshAffairIDList = []
+ affairCountMax = IpyGameDataPY.GetFuncCfg("FamilyAffair", 1)
+ affairStarDict = IpyGameDataPY.GetFuncEvalCfg("FamilyAffair", 4)
+ maxStar = 0
+ starWeightList = []
+ for starStr, starInfo in affairStarDict.items():
+ star = int(starStr)
+ if star > maxStar:
+ maxStar = star
+ starWeightList.append([starInfo[0], star])
+
+ for affairID in range(1, affairCountMax + 1):
+ star, state = __GetAffairInfo(curPlayer, affairID)
+ if isReset:
+ # 重置时还在进行中的直接发奖励
+ if state == AffairState_Underway:
+ sendMailAffairList.append([affairID, star])
+ refreshAffairIDList.append(affairID)
+ else:
+ # 非重置只处理没有状态非最高星的
+ if state == AffairState_None and star < maxStar:
+ refreshAffairIDList.append(affairID)
+
+ GameWorld.DebugLog("刷新事务: isReset=%s,moneyType=%s,moneyValue=%s,dayRefreshFreeCount=%s"
+ % (isReset, moneyType, moneyValue, dayRefreshFreeCount), playerID)
+ GameWorld.DebugLog(" sendMailAffairList=%s" % sendMailAffairList, playerID)
+
+ for mailInfo in sendMailAffairList:
+ affairID, star = mailInfo
+ if str(star) not in affairStarDict:
+ continue
+ paramList = [affairID, star]
+ addItemList = affairStarDict[str(star)][2]
+ PlayerControl.SendMailByKey("FamilyAffairAward", [playerID], addItemList, paramList)
+
+ if isReset:
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyAffairRefreshFree, 0)
+ for affairID in range(1, affairCountMax + 1):
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyAffairInfo % affairID, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyAffairStartTime % affairID, 0)
+ else:
+ if moneyType and moneyValue:
+ PlayerControl.PayMoney(curPlayer, moneyType, moneyValue, "FamilyAffair")
+ else:
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyAffairRefreshFree, dayRefreshFreeCount + 1)
+
+ GameWorld.DebugLog(" starWeightList=%s" % starWeightList, playerID)
+ GameWorld.DebugLog(" refreshAffairIDList=%s" % refreshAffairIDList, playerID)
+ for affairID in refreshAffairIDList:
+ star = GameWorld.GetResultByWeightList(starWeightList, 1)
+ __SetAffairInfo(curPlayer, affairID, star, AffairState_None)
+ GameWorld.DebugLog(" 随机事务:affairID=%s,star=%s" % (affairID, star), playerID)
+
+ SyncFamilyAffairInfo(curPlayer)
+ return
+
+def __FamilyAffair_Start(curPlayer, affairID):
+ ## 开始事务
+ playerID = curPlayer.GetPlayerID()
+ star, state = __GetAffairInfo(curPlayer, affairID)
+ if not star:
+ return
+ if state != AffairState_None:
+ GameWorld.DebugLog("仙盟事务已经进行中或已完成,无法开始: affairID=%s,star=%s,state=%s" % (affairID, star, state), playerID)
+ return
+ startTime = int(time.time())
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyAffairStartTime % affairID, startTime)
+ __SetAffairInfo(curPlayer, affairID, star, AffairState_Underway)
+ GameWorld.DebugLog("仙盟事务开始: affairID=%s,star=%s,startTime=%s" % (affairID, star, startTime), playerID)
+ SyncFamilyAffairInfo(curPlayer, affairID)
+ return
+
+def __FamilyAffair_GetAward(curPlayer, affairID):
+ ## 领取事务奖励
+ playerID = curPlayer.GetPlayerID()
+ curTime = int(time.time())
+ affairStarDict = IpyGameDataPY.GetFuncEvalCfg("FamilyAffair", 4)
+ star, state = __GetAffairInfo(curPlayer, affairID)
+ if state != AffairState_Underway:
+ GameWorld.DebugLog("仙盟事务状态非进行中无法领取: affairID=%s,star=%s,state=%s" % (affairID, star, state), playerID)
+ SyncFamilyAffairInfo(curPlayer, affairID)
+ return
+ startTime = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyAffairStartTime % affairID)
+ remainDuration = __GetAffairRemainDuration(curPlayer, affairID, star, curTime, affairStarDict)
+ if remainDuration != 0:
+ GameWorld.DebugLog("仙盟事务当前剩余时长未完成: affairID=%s,remainDuration=%s,startTime=%s"
+ % (affairID, remainDuration, startTime), playerID)
+ SyncFamilyAffairInfo(curPlayer, affairID)
+ return
+ if str(star) not in affairStarDict:
+ return
+ addItemList = affairStarDict[str(star)][2]
+ if not ItemCommon.GiveAwardItem(curPlayer, addItemList):
+ return
+ __SetAffairInfo(curPlayer, affairID, star, AffairState_Finish)
+ GameWorld.DebugLog("仙盟事务领奖: affairID=%s,star=%s" % (affairID, star), playerID)
+ SyncFamilyAffairInfo(curPlayer, affairID)
+ return
+
+def __GetAffairInfo(curPlayer, affairID):
+ affairInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyAffairInfo % affairID)
+ star, state = affairInfo / 10, affairInfo % 10
+ return star, state
+def __SetAffairInfo(curPlayer, affairID, star, state):
+ info = star * 10 + state
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyAffairInfo % affairID, info)
+ return
+def __GetAffairRemainDuration(curPlayer, affairID, star, curTime, affairStarDict):
+ ## -1-未开始;>=0-剩余时长
+ startTime = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyAffairStartTime % affairID)
+ if not startTime:
+ return -1
+ starInfo = affairStarDict.get(str(star), [])
+ needDuration = starInfo[1] if len(starInfo) > 1 else 0
+ # 可扩展减时长属性
+ remainDuration = max(needDuration - (curTime - startTime), 0)
+ return remainDuration
+
+def SyncFamilyAffairInfo(curPlayer, affairID=None):
+ if affairID == None:
+ affairIDList = []
+ affairCountMax = IpyGameDataPY.GetFuncCfg("FamilyAffair", 1)
+ for affairID in range(1, affairCountMax + 1):
+ affairIDList.append(affairID)
+ else:
+ affairIDList = [affairID]
+
+ curTime = int(time.time())
+ affairStarDict = IpyGameDataPY.GetFuncEvalCfg("FamilyAffair", 4)
+ affairInfoList = []
+ for affairID in affairIDList:
+ star, state = __GetAffairInfo(curPlayer, affairID)
+ remainDuration = __GetAffairRemainDuration(curPlayer, affairID, star, curTime, affairStarDict)
+ affairInfo = ChPyNetSendPack.tagMCFamilyAffair()
+ affairInfo.AffairID = affairID
+ affairInfo.Star = star
+ affairInfo.State = state
+ affairInfo.RemainDuration = max(0, remainDuration)
+ affairInfoList.append(affairInfo)
+
+ if not affairInfoList:
+ return
+ clientPack = ChPyNetSendPack.tagMCFamilyAffairInfo()
+ clientPack.Clear()
+ clientPack.RefreshFreeCount = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyAffairRefreshFree)
+ clientPack.AffairInfoList = affairInfoList
+ clientPack.Count = len(clientPack.AffairInfoList)
+ NetPackCommon.SendFakePack(curPlayer, clientPack)
+ return
+
+##--------------------------------------------------------------------------------------------------
--
Gitblit v1.8.0