From 7bd89df4994934b9a5810e6b62383e6773b8339b Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 12 十月 2023 20:28:47 +0800
Subject: [PATCH] 9952 【BT0.1】【主干】仙盟修改(传功)
---
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py | 93 +++++
ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py | 114 ++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini | 6
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py | 7
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py | 60 +++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 320 +++++++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyParty.py | 91 -----
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 60 +++
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 320 +++++++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 2
11 files changed, 981 insertions(+), 93 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
index 5e60744..cc8227f 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -13853,6 +13853,66 @@
#------------------------------------------------------
+# A6 15 传功操作 #tagCMChuangongOP
+
+class tagCMChuangongOP(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("OPType", c_ubyte), # 操作类型:1-邀请;2-回应;3-领奖;
+ ("PlayerID", c_int), # 目标玩家ID;回应时为邀请方玩家ID
+ ("OPData", c_ubyte), # 操作数据,可选:回应时为是否同意
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xA6
+ self.SubCmd = 0x15
+ 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 = 0x15
+ self.OPType = 0
+ self.PlayerID = 0
+ self.OPData = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMChuangongOP)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A6 15 传功操作 //tagCMChuangongOP:
+ Cmd:%s,
+ SubCmd:%s,
+ OPType:%d,
+ PlayerID:%d,
+ OPData:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.OPType,
+ self.PlayerID,
+ self.OPData
+ )
+ return DumpString
+
+
+m_NAtagCMChuangongOP=tagCMChuangongOP()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMChuangongOP.Cmd,m_NAtagCMChuangongOP.SubCmd))] = m_NAtagCMChuangongOP
+
+
+#------------------------------------------------------
# A6 11 家族改名 #tagCMRenameFamily
class tagCMRenameFamily(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 2ee07d9..d792422 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -985,6 +985,190 @@
#------------------------------------------------------
+# A4 11 传功邀请信息 #tagGCChuangongInviteInfo
+
+class tagGCChuangongInviteInfo(Structure):
+ Head = tagHead()
+ PlayerID = 0 #(DWORD PlayerID)// 发起邀请的玩家ID
+ NameLen = 0 #(BYTE NameLen)
+ Name = "" #(String Name)// 发起邀请的玩家名,size = NameLen
+ LV = 0 #(WORD LV)// 玩家等级
+ Job = 0 #(BYTE Job)// 玩家职业
+ RealmLV = 0 #(WORD RealmLV)// 玩家境界等级
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xA4
+ self.Head.SubCmd = 0x11
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+ self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xA4
+ self.Head.SubCmd = 0x11
+ self.PlayerID = 0
+ self.NameLen = 0
+ self.Name = ""
+ self.LV = 0
+ self.Job = 0
+ self.RealmLV = 0
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 4
+ length += 1
+ length += len(self.Name)
+ length += 2
+ length += 1
+ length += 2
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteDWORD(data, self.PlayerID)
+ data = CommFunc.WriteBYTE(data, self.NameLen)
+ data = CommFunc.WriteString(data, self.NameLen, self.Name)
+ data = CommFunc.WriteWORD(data, self.LV)
+ data = CommFunc.WriteBYTE(data, self.Job)
+ data = CommFunc.WriteWORD(data, self.RealmLV)
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ PlayerID:%d,
+ NameLen:%d,
+ Name:%s,
+ LV:%d,
+ Job:%d,
+ RealmLV:%d
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.PlayerID,
+ self.NameLen,
+ self.Name,
+ self.LV,
+ self.Job,
+ self.RealmLV
+ )
+ return DumpString
+
+
+m_NAtagGCChuangongInviteInfo=tagGCChuangongInviteInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChuangongInviteInfo.Head.Cmd,m_NAtagGCChuangongInviteInfo.Head.SubCmd))] = m_NAtagGCChuangongInviteInfo
+
+
+#------------------------------------------------------
+# A4 12 传功开始 #tagGCChuangongStart
+
+class tagGCChuangongStart(Structure):
+ Head = tagHead()
+ PlayerID = 0 #(DWORD PlayerID)// 一起传功的玩家ID
+ NameLen = 0 #(BYTE NameLen)
+ Name = "" #(String Name)// 玩家名,size = NameLen
+ LV = 0 #(WORD LV)// 玩家等级
+ Job = 0 #(BYTE Job)// 玩家职业
+ RealmLV = 0 #(WORD RealmLV)// 玩家境界等级
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xA4
+ self.Head.SubCmd = 0x12
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+ self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xA4
+ self.Head.SubCmd = 0x12
+ self.PlayerID = 0
+ self.NameLen = 0
+ self.Name = ""
+ self.LV = 0
+ self.Job = 0
+ self.RealmLV = 0
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 4
+ length += 1
+ length += len(self.Name)
+ length += 2
+ length += 1
+ length += 2
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteDWORD(data, self.PlayerID)
+ data = CommFunc.WriteBYTE(data, self.NameLen)
+ data = CommFunc.WriteString(data, self.NameLen, self.Name)
+ data = CommFunc.WriteWORD(data, self.LV)
+ data = CommFunc.WriteBYTE(data, self.Job)
+ data = CommFunc.WriteWORD(data, self.RealmLV)
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ PlayerID:%d,
+ NameLen:%d,
+ Name:%s,
+ LV:%d,
+ Job:%d,
+ RealmLV:%d
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.PlayerID,
+ self.NameLen,
+ self.Name,
+ self.LV,
+ self.Job,
+ self.RealmLV
+ )
+ return DumpString
+
+
+m_NAtagGCChuangongStart=tagGCChuangongStart()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChuangongStart.Head.Cmd,m_NAtagGCChuangongStart.Head.SubCmd))] = m_NAtagGCChuangongStart
+
+
+#------------------------------------------------------
# A4 0A 假仙盟信息 #tagGCFakeFamilyInfo
class tagGCFakeFamilyInfo(Structure):
@@ -26194,6 +26378,142 @@
#------------------------------------------------------
+# A5 10 传功奖励结果 #tagMCChuangongResult
+
+class tagMCChuangongItem(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("ItemID", c_int),
+ ("ItemCount", 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.ItemID = 0
+ self.ItemCount = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCChuangongItem)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A5 10 传功奖励结果 //tagMCChuangongResult:
+ ItemID:%d,
+ ItemCount:%d
+ '''\
+ %(
+ self.ItemID,
+ self.ItemCount
+ )
+ return DumpString
+
+
+class tagMCChuangongResult(Structure):
+ Head = tagHead()
+ FromLV = 0 #(WORD FromLV)// 传功前等级
+ ToLV = 0 #(WORD ToLV)// 传功后等级
+ Exp = 0 #(DWORD Exp)// 获得经验求余亿部分
+ ExpPoint = 0 #(DWORD ExpPoint)// 获得经验整除亿部分
+ ItemCount = 0 #(BYTE ItemCount)
+ AwardItemList = list() #(vector<tagMCChuangongItem> AwardItemList)// 奖励物品列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xA5
+ self.Head.SubCmd = 0x10
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.FromLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ToLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.Exp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.ExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.ItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.ItemCount):
+ temAwardItemList = tagMCChuangongItem()
+ _pos = temAwardItemList.ReadData(_lpData, _pos)
+ self.AwardItemList.append(temAwardItemList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xA5
+ self.Head.SubCmd = 0x10
+ self.FromLV = 0
+ self.ToLV = 0
+ self.Exp = 0
+ self.ExpPoint = 0
+ self.ItemCount = 0
+ self.AwardItemList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 2
+ length += 2
+ length += 4
+ length += 4
+ length += 1
+ for i in range(self.ItemCount):
+ length += self.AwardItemList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteWORD(data, self.FromLV)
+ data = CommFunc.WriteWORD(data, self.ToLV)
+ data = CommFunc.WriteDWORD(data, self.Exp)
+ data = CommFunc.WriteDWORD(data, self.ExpPoint)
+ data = CommFunc.WriteBYTE(data, self.ItemCount)
+ for i in range(self.ItemCount):
+ data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ FromLV:%d,
+ ToLV:%d,
+ Exp:%d,
+ ExpPoint:%d,
+ ItemCount:%d,
+ AwardItemList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.FromLV,
+ self.ToLV,
+ self.Exp,
+ self.ExpPoint,
+ self.ItemCount,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagMCChuangongResult=tagMCChuangongResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCChuangongResult.Head.Cmd,m_NAtagMCChuangongResult.Head.SubCmd))] = m_NAtagMCChuangongResult
+
+
+#------------------------------------------------------
# A5 02 家族活跃令兑换结果 #tagMCFamilyActivityExchangeResult
class tagMCFamilyActivityExchangeResult(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py
index 34a2da9..44b1b6d 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py
@@ -3617,3 +3617,96 @@
PlayerControl.NotifyCode(curPlayer, "jiazu_pan_500807")
return
+
+##--------------------------------------- 仙盟传功 --------------------------------------------------
+def MapServer_FamilyChuangong(curPlayer, msgList):
+ msgType, msgData = msgList
+
+ if msgType == "Invite":
+ tagPlayerID = msgData[0]
+ __DoChuangong_Invite(curPlayer, tagPlayerID)
+ return
+
+ if msgType == "Response":
+ tagPlayerID, isOK = msgData
+ __DoChuangong_Response(curPlayer, tagPlayerID, isOK)
+ return
+
+ return
+
+def __CheckChuangongPlayer(curPlayer, tagPlayerID):
+ curFamily = curPlayer.GetFamily()
+ if not curFamily:
+ return
+ tagMember = curFamily.FindMember(tagPlayerID)
+ if not tagMember:
+ GameWorld.DebugLog("非盟友无法传功! tagPlayerID=%s" % tagPlayerID, curPlayer.GetPlayerID())
+ return
+ tagPlayer = tagMember.GetPlayer()
+ if not tagPlayer:
+ PlayerControl.NotifyCode(curPlayer, "FairyFeastPlayerOffline")
+ return
+ return tagPlayer
+
+def __DoChuangong_Invite(curPlayer, tagPlayerID):
+ ## 邀请
+ playerID = curPlayer.GetPlayerID()
+ tagPlayer = __CheckChuangongPlayer(curPlayer, tagPlayerID)
+ if not tagPlayer:
+ return
+ invitePlayerIDList = PyGameData.g_chuangongPlayerDict.get(playerID, [])
+ if tagPlayerID not in invitePlayerIDList:
+ invitePlayerIDList.append(tagPlayerID)
+ PyGameData.g_chuangongPlayerDict[playerID] = invitePlayerIDList
+ clientPack = ChPyNetSendPack.tagGCChuangongInviteInfo()
+ clientPack.Clear()
+ clientPack.PlayerID = curPlayer.GetPlayerID()
+ clientPack.Name = curPlayer.GetName()
+ clientPack.NameLen = len(clientPack.Name)
+ clientPack.LV = curPlayer.GetLV()
+ clientPack.Job = curPlayer.GetJob()
+ clientPack.RealmLV = curPlayer.GetOfficialRank()
+ NetPackCommon.SendFakePack(tagPlayer, clientPack)
+ GameWorld.DebugLog("邀请传功: tagPlayerID=%s, %s" % (tagPlayerID, PyGameData.g_chuangongPlayerDict), playerID)
+ return
+
+def __DoChuangong_Response(curPlayer, tagPlayerID, isOK):
+ ## 相应
+ playerID = curPlayer.GetPlayerID()
+ tagPlayer = __CheckChuangongPlayer(curPlayer, tagPlayerID)
+ if not tagPlayer:
+ return
+ invitePlayerIDList = PyGameData.g_chuangongPlayerDict.get(tagPlayerID, [])
+ if not isOK:
+ if playerID in invitePlayerIDList:
+ invitePlayerIDList.remove(playerID)
+ PyGameData.g_chuangongPlayerDict[tagPlayerID] = invitePlayerIDList
+ GameWorld.DebugLog("拒绝传功: tagPlayerID=%s, %s" % (tagPlayerID, PyGameData.g_chuangongPlayerDict), playerID)
+ return
+ if not invitePlayerIDList:
+ PlayerControl.NotifyCode(curPlayer, "TagHadFinishChuangong")
+ return
+ if playerID not in invitePlayerIDList:
+ GameWorld.DebugLog("不在对方邀请列表了,无法传功: tagPlayerID=%s, %s" % (tagPlayerID, invitePlayerIDList), playerID)
+ return
+ PyGameData.g_chuangongPlayerDict.pop(tagPlayerID)
+
+ # 通知双方开始传功
+ __NotifyChuangongStart(curPlayer, tagPlayer)
+ __NotifyChuangongStart(tagPlayer, curPlayer)
+ return
+
+def __NotifyChuangongStart(curPlayer, tagPlayer):
+ clientPack = ChPyNetSendPack.tagGCChuangongStart()
+ clientPack.Clear()
+ clientPack.PlayerID = tagPlayer.GetPlayerID()
+ clientPack.Name = tagPlayer.GetName()
+ clientPack.NameLen = len(clientPack.Name)
+ clientPack.LV = tagPlayer.GetLV()
+ clientPack.Job = tagPlayer.GetJob()
+ clientPack.RealmLV = tagPlayer.GetOfficialRank()
+ NetPackCommon.SendFakePack(curPlayer, clientPack)
+ return
+
+##--------------------------------------------------------------------------------------------------
+
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
index fdc8c07..e290111 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
@@ -913,6 +913,13 @@
return
PlayerFamilyZhenfa.MapServer_FamilyZhenfa(curPlayer, eval(resultName))
return
+ #仙盟传功
+ if callName =="FamilyChuangong":
+ curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
+ if not curPlayer:
+ return
+ PlayerFamily.MapServer_FamilyChuangong(curPlayer, eval(resultName))
+ return
#骑宠BOSS结束
if callName =="HorsePetBossOver":
PlayerHorsePetBoss.HorsePetBossKilled(int(resultName))
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py b/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py
index d08db50..b61d39b 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py
@@ -84,6 +84,7 @@
g_familyPartyTopInfo = [] #仙盟宴会答题王 [playerID,名字]
g_partyheroAnswerDict = {} #仙盟宴会玩家答对题目数量 {playerid:答题数量,..}
g_familyAnswerPlayerIDDict = {} #仙盟宴会玩家参与答题数量 {playerID:[题目ID, ...], ...}
+g_chuangongPlayerDict = {} #传功玩家信息 {playerID:[目标玩家ID, ...], ...}
g_redPacketMgr = None # RedPacketMgr
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index 14dec80..bc2e56f 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 = 7
+RegisterPackCount = 8
PacketCMD_1=0xA6
PacketSubCMD_1=0x01
@@ -219,6 +219,10 @@
PacketSubCMD_7=0x13
PacketCallFunc_7=OnFamilyAffairOP
+PacketCMD_8=0xA6
+PacketSubCMD_8=0x15
+PacketCallFunc_8=OnChuangongOP
+
;家族仓库
[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 5a2d2bc..ec4a3de 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3782,8 +3782,6 @@
#仙盟宴会
Def_Player_Dict_FamilyPartyJoinSign = "FamilyPartyJoinSign" # 今日参与宴会标记
Def_Player_Dict_FamilyPartyAnswerCnt = "FamilyPartyAnswerCnt" # 答题数量
-Def_Player_Dict_FamilyPartySitState = "FamilyPartySitState" # 是否已打坐传功
-Def_Player_Dict_FamilyPartyHelpSitCount = "FamilyPartyHelpSitCount" # 已经帮助传功次数
Def_Player_Dict_FamilyPartyCollectState = "FamilyPartyCollectState" # 是否已采集
Def_Player_Dict_FamilyPartyTotalExp = "FamilyPartyTotalExp" # 获得的总经验
Def_Player_Dict_FamilyPartyTotalExpPoint = "FamilyPartyTotalExpPoint" # 获得的总经验点
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index 5e60744..cc8227f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -13853,6 +13853,66 @@
#------------------------------------------------------
+# A6 15 传功操作 #tagCMChuangongOP
+
+class tagCMChuangongOP(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("OPType", c_ubyte), # 操作类型:1-邀请;2-回应;3-领奖;
+ ("PlayerID", c_int), # 目标玩家ID;回应时为邀请方玩家ID
+ ("OPData", c_ubyte), # 操作数据,可选:回应时为是否同意
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xA6
+ self.SubCmd = 0x15
+ 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 = 0x15
+ self.OPType = 0
+ self.PlayerID = 0
+ self.OPData = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMChuangongOP)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A6 15 传功操作 //tagCMChuangongOP:
+ Cmd:%s,
+ SubCmd:%s,
+ OPType:%d,
+ PlayerID:%d,
+ OPData:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.OPType,
+ self.PlayerID,
+ self.OPData
+ )
+ return DumpString
+
+
+m_NAtagCMChuangongOP=tagCMChuangongOP()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMChuangongOP.Cmd,m_NAtagCMChuangongOP.SubCmd))] = m_NAtagCMChuangongOP
+
+
+#------------------------------------------------------
# A6 11 家族改名 #tagCMRenameFamily
class tagCMRenameFamily(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 2ee07d9..d792422 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -985,6 +985,190 @@
#------------------------------------------------------
+# A4 11 传功邀请信息 #tagGCChuangongInviteInfo
+
+class tagGCChuangongInviteInfo(Structure):
+ Head = tagHead()
+ PlayerID = 0 #(DWORD PlayerID)// 发起邀请的玩家ID
+ NameLen = 0 #(BYTE NameLen)
+ Name = "" #(String Name)// 发起邀请的玩家名,size = NameLen
+ LV = 0 #(WORD LV)// 玩家等级
+ Job = 0 #(BYTE Job)// 玩家职业
+ RealmLV = 0 #(WORD RealmLV)// 玩家境界等级
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xA4
+ self.Head.SubCmd = 0x11
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+ self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xA4
+ self.Head.SubCmd = 0x11
+ self.PlayerID = 0
+ self.NameLen = 0
+ self.Name = ""
+ self.LV = 0
+ self.Job = 0
+ self.RealmLV = 0
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 4
+ length += 1
+ length += len(self.Name)
+ length += 2
+ length += 1
+ length += 2
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteDWORD(data, self.PlayerID)
+ data = CommFunc.WriteBYTE(data, self.NameLen)
+ data = CommFunc.WriteString(data, self.NameLen, self.Name)
+ data = CommFunc.WriteWORD(data, self.LV)
+ data = CommFunc.WriteBYTE(data, self.Job)
+ data = CommFunc.WriteWORD(data, self.RealmLV)
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ PlayerID:%d,
+ NameLen:%d,
+ Name:%s,
+ LV:%d,
+ Job:%d,
+ RealmLV:%d
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.PlayerID,
+ self.NameLen,
+ self.Name,
+ self.LV,
+ self.Job,
+ self.RealmLV
+ )
+ return DumpString
+
+
+m_NAtagGCChuangongInviteInfo=tagGCChuangongInviteInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChuangongInviteInfo.Head.Cmd,m_NAtagGCChuangongInviteInfo.Head.SubCmd))] = m_NAtagGCChuangongInviteInfo
+
+
+#------------------------------------------------------
+# A4 12 传功开始 #tagGCChuangongStart
+
+class tagGCChuangongStart(Structure):
+ Head = tagHead()
+ PlayerID = 0 #(DWORD PlayerID)// 一起传功的玩家ID
+ NameLen = 0 #(BYTE NameLen)
+ Name = "" #(String Name)// 玩家名,size = NameLen
+ LV = 0 #(WORD LV)// 玩家等级
+ Job = 0 #(BYTE Job)// 玩家职业
+ RealmLV = 0 #(WORD RealmLV)// 玩家境界等级
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xA4
+ self.Head.SubCmd = 0x12
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+ self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xA4
+ self.Head.SubCmd = 0x12
+ self.PlayerID = 0
+ self.NameLen = 0
+ self.Name = ""
+ self.LV = 0
+ self.Job = 0
+ self.RealmLV = 0
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 4
+ length += 1
+ length += len(self.Name)
+ length += 2
+ length += 1
+ length += 2
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteDWORD(data, self.PlayerID)
+ data = CommFunc.WriteBYTE(data, self.NameLen)
+ data = CommFunc.WriteString(data, self.NameLen, self.Name)
+ data = CommFunc.WriteWORD(data, self.LV)
+ data = CommFunc.WriteBYTE(data, self.Job)
+ data = CommFunc.WriteWORD(data, self.RealmLV)
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ PlayerID:%d,
+ NameLen:%d,
+ Name:%s,
+ LV:%d,
+ Job:%d,
+ RealmLV:%d
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.PlayerID,
+ self.NameLen,
+ self.Name,
+ self.LV,
+ self.Job,
+ self.RealmLV
+ )
+ return DumpString
+
+
+m_NAtagGCChuangongStart=tagGCChuangongStart()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCChuangongStart.Head.Cmd,m_NAtagGCChuangongStart.Head.SubCmd))] = m_NAtagGCChuangongStart
+
+
+#------------------------------------------------------
# A4 0A 假仙盟信息 #tagGCFakeFamilyInfo
class tagGCFakeFamilyInfo(Structure):
@@ -26194,6 +26378,142 @@
#------------------------------------------------------
+# A5 10 传功奖励结果 #tagMCChuangongResult
+
+class tagMCChuangongItem(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("ItemID", c_int),
+ ("ItemCount", 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.ItemID = 0
+ self.ItemCount = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCChuangongItem)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A5 10 传功奖励结果 //tagMCChuangongResult:
+ ItemID:%d,
+ ItemCount:%d
+ '''\
+ %(
+ self.ItemID,
+ self.ItemCount
+ )
+ return DumpString
+
+
+class tagMCChuangongResult(Structure):
+ Head = tagHead()
+ FromLV = 0 #(WORD FromLV)// 传功前等级
+ ToLV = 0 #(WORD ToLV)// 传功后等级
+ Exp = 0 #(DWORD Exp)// 获得经验求余亿部分
+ ExpPoint = 0 #(DWORD ExpPoint)// 获得经验整除亿部分
+ ItemCount = 0 #(BYTE ItemCount)
+ AwardItemList = list() #(vector<tagMCChuangongItem> AwardItemList)// 奖励物品列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xA5
+ self.Head.SubCmd = 0x10
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.FromLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.ToLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.Exp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.ExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.ItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.ItemCount):
+ temAwardItemList = tagMCChuangongItem()
+ _pos = temAwardItemList.ReadData(_lpData, _pos)
+ self.AwardItemList.append(temAwardItemList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xA5
+ self.Head.SubCmd = 0x10
+ self.FromLV = 0
+ self.ToLV = 0
+ self.Exp = 0
+ self.ExpPoint = 0
+ self.ItemCount = 0
+ self.AwardItemList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 2
+ length += 2
+ length += 4
+ length += 4
+ length += 1
+ for i in range(self.ItemCount):
+ length += self.AwardItemList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteWORD(data, self.FromLV)
+ data = CommFunc.WriteWORD(data, self.ToLV)
+ data = CommFunc.WriteDWORD(data, self.Exp)
+ data = CommFunc.WriteDWORD(data, self.ExpPoint)
+ data = CommFunc.WriteBYTE(data, self.ItemCount)
+ for i in range(self.ItemCount):
+ data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ FromLV:%d,
+ ToLV:%d,
+ Exp:%d,
+ ExpPoint:%d,
+ ItemCount:%d,
+ AwardItemList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.FromLV,
+ self.ToLV,
+ self.Exp,
+ self.ExpPoint,
+ self.ItemCount,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagMCChuangongResult=tagMCChuangongResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCChuangongResult.Head.Cmd,m_NAtagMCChuangongResult.Head.SubCmd))] = m_NAtagMCChuangongResult
+
+
+#------------------------------------------------------
# A5 02 家族活跃令兑换结果 #tagMCFamilyActivityExchangeResult
class tagMCFamilyActivityExchangeResult(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyParty.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyParty.py
index 4815f80..aa664fc 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyParty.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_FamilyParty.py
@@ -32,10 +32,7 @@
import PyGameData
import ItemCommon
import ItemControler
-import Item_AddLV
-import PlayerTalk
import PlayerActivity
-import PlayerWeekParty
import PlayerTongTianLing
#---战盟副本---
@@ -47,8 +44,6 @@
GameWorld.DebugLog("重置仙盟宴会相关数据,含传功!", curPlayer.GetPlayerID())
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyPartyJoinSign, 0)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyPartyAnswerCnt, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyPartySitState, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyPartyHelpSitCount, 0)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyPartyCollectState, 0)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyPartyTotalExp, 0)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyPartyTotalExpPoint, 0)
@@ -273,7 +268,6 @@
# @remarks 用于通知阵营比分条
def DoFBHelp(curPlayer, tick, isSyncPlayerID=False):
gameWorld = GameWorld.GetGameWorld()
- chuangongActionState = gameWorld.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_DailyActionState % ShareDefine.DailyActionID_FamilyChuanGong)
partyActionState = gameWorld.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_DailyActionState % ShareDefine.DailyActionID_FamilyParty)
playerID = curPlayer.GetPlayerID()
@@ -289,9 +283,8 @@
#totalPoint += IpyGameDataPY.GetFuncCfg('PartyReward') #加参与奖
totalPoint += addPoint * curAnswerCnt
hasCollect = int(curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyPartyCollectState) or not partyActionState) # 非活动期间也同步已采集,前端根据此状态控制按钮显隐
- hasSit = int(curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyPartySitState) or not chuangongActionState) # 非活动期间也同步已传功,前端根据此状态控制按钮显隐
- helpDict = {FBCommon.Help_exp:exp, FBCommon.Help_expPoint:expPoint, FBCommon.Help_score:totalPoint, "hasCollect":hasCollect, "hasSit":hasSit}
+ helpDict = {FBCommon.Help_exp:exp, FBCommon.Help_expPoint:expPoint, FBCommon.Help_score:totalPoint, "hasCollect":hasCollect}
if PyGameData.g_familyPartyInfo:
rankList = []
for i, info in enumerate(PyGameData.g_familyPartyInfo[0], 1):
@@ -386,7 +379,6 @@
# @return 无意义
def DoExitFB(curPlayer, tick):
global g_familyMapPlayerIDDict
- __GiveSitAward(curPlayer)
lineID = GameWorld.GetGameWorld().GetLineID()
playerID = curPlayer.GetID()
if playerID in g_familyMapPlayerIDDict.get(lineID, []):
@@ -407,88 +399,7 @@
# @param tick 当前时间
# @return None
def DoFBAction(curPlayer, actionType, actionInfo, tick):
- gameWorld = GameWorld.GetGameWorld()
- playerID = curPlayer.GetID()
- if actionType == 0: #邀请打坐
- tagPlayerID = actionInfo
- if curPlayer.GetPlayerAction() in [IPY_GameWorld.paSit, IPY_GameWorld.paPreparing]:
- GameWorld.DebugLog('邀请打坐,玩家已处于打坐或采集状态', playerID)
- return
- hasSit = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyPartySitState)
- if hasSit:
- GameWorld.Log('邀请打坐,玩家已打坐过一次', playerID)
- return
-
- copyMapPlayerManager = GameWorld.GetMapCopyPlayerManager()
- tagPlayer = copyMapPlayerManager.FindPlayerByID(tagPlayerID)
- if not tagPlayer:
- GameWorld.DebugLog('邀请%s打坐,该玩家不在副本里' % tagPlayerID, playerID)
- PlayerControl.NotifyCode(curPlayer, 'PartySitFail')
- return
- gameWorld.SetGameWorldDict(FBPlayerDict_TagPlayerID % playerID, tagPlayerID)
- curPlayer.StopMove()
- curPlayer.Sit()
-# if not gameWorld.GetGameWorldDictByKey(FBPlayerDict_HasSit % tagPlayerID):
-# if tagPlayer.GetPlayerAction() not in [IPY_GameWorld.paSit, IPY_GameWorld.paPreparing]:
-# tagPlayer.StopMove()
-# tagPlayer.Sit()
- elif actionType == 1: #打坐结束给奖励
- if not __GiveSitAward(curPlayer):
- return
-
- DoFBHelp(curPlayer, 0)
-
-
return
-
-def __GiveSitAward(curPlayer):
- #给打坐奖励
- gameWorld = GameWorld.GetGameWorld()
- playerID = curPlayer.GetID()
- hasSit = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyPartySitState)
- if hasSit:
- GameWorld.Log('打坐结束给奖励,玩家已打坐过一次', playerID)
- return
- if curPlayer.GetPlayerAction() != IPY_GameWorld.paSit:
- GameWorld.Log('打坐结束给奖励,玩家不在打坐状态', playerID)
- return
- curPlayer.Stand()
- reLV = curPlayer.GetLV()
- worldlv = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv)
- giveLV = eval(IpyGameDataPY.GetFuncCompileCfg('FamilyPartySitAward', 2))
- addExp = 0
- if giveLV:
- addExp = Item_AddLV.DoAddLVEx(curPlayer, giveLV, True, True, 0)
- reLV = curPlayer.GetLV()
- reExp = PlayerControl.GetPlayerReExp(curPlayer)
- giveExp = eval(IpyGameDataPY.GetFuncCompileCfg('FamilyPartySitAward'))
- if giveExp:
- PlayerControl.PlayerControl(curPlayer).AddExp(giveExp, ShareDefine.Def_ViewExpType_SysEx)
-
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyPartySitState, 1)
- PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_FamilyChuanGong)
- PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_FamilyChuanGong, 1)
- PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_ChuanGong, 1)
- DoFBHelp(curPlayer, 0)
-
- #帮助传功奖励
- helpSitActivityAward = IpyGameDataPY.GetFuncEvalCfg('FamilyPartySitAward', 3)
- if helpSitActivityAward and len(helpSitActivityAward) == 2:
- helpFamilyActivity, maxHelpAwardCount = helpSitActivityAward
- helpThanks = IpyGameDataPY.GetFuncCfg('FamilyPartySitAward', 4) % (helpFamilyActivity, maxHelpAwardCount)
- sitThanks = helpThanks.decode(ShareDefine.Def_Game_Character_Encoding).encode(GameWorld.GetCharacterEncoding())
- tagPlayerID = gameWorld.GetGameWorldDictByKey(FBPlayerDict_TagPlayerID % playerID)
- PlayerTalk.TalkPrivateByID(curPlayer, tagPlayerID, sitThanks)
- tagPlayer = GameWorld.GetMapCopyPlayerManager().FindPlayerByID(tagPlayerID)
- if tagPlayer:
- helpCount = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyPartyHelpSitCount) + 1
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyPartyHelpSitCount, helpCount)
- GameWorld.DebugLog("帮助传功奖励: sitPlayerID=%s,tagPlayerID=%s,helpCount=%s" % (playerID, tagPlayerID, helpCount))
- if helpCount <= maxHelpAwardCount:
- PlayerControl.GiveMoney(tagPlayer, ShareDefine.TYPE_Price_FamilyActivity, helpFamilyActivity)
-
- GameWorld.DebugLog(' 传功结束,giveLV=%s, giveExp=%s, worldlv=%s' % (giveLV, giveExp, worldlv))
- return True
def DoAddFamilyMemberFamilyActivity(familyID, addFamilyActivity):
playerManager = GameWorld.GetPlayerManager()
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 e03761f..43f0e35 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
@@ -31,6 +31,10 @@
import PlayerFamilyTech
import PlayerFamilyRedPacket
import PlayerFamilyZhenfa
+import PlayerTongTianLing
+import PlayerWeekParty
+import PlayerActivity
+import ItemControler
import SkillCommon
import BuffSkill
import ItemCommon
@@ -1184,3 +1188,113 @@
return
##--------------------------------------------------------------------------------------------------
+##--------------------------------------- 仙盟传功 --------------------------------------------------
+#// A6 15 传功操作 #tagCMChuangongOP
+#
+#struct tagCMChuangongOP
+#{
+# tagHead Head;
+# BYTE OPType; // 操作类型:1-邀请;2-回应;3-领奖;
+# DWORD PlayerID; // 目标玩家ID;回应时为邀请方玩家ID
+# BYTE OPData; // 操作数据,可选:回应时为是否同意
+#};
+def OnChuangongOP(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ opType = clientData.OPType
+ tagPlayerID = clientData.PlayerID
+ opData = clientData.OPData
+
+ if tagPlayerID and curPlayer.GetPlayerID() == tagPlayerID:
+ GameWorld.DebugLog("不能自己传功")
+ return
+
+ if opType == 1:
+ __Chuangong_Invite(curPlayer, tagPlayerID)
+ elif opType == 2:
+ __Chuangong_Response(curPlayer, tagPlayerID, opData)
+ elif opType == 3:
+ __Chuangong_GetAward(curPlayer)
+ return
+
+def SendGameServer_FamilyChuangong(curPlayer, msgType, msgData):
+ playerID = curPlayer.GetPlayerID()
+ GameWorld.DebugLog("传功同步GameServer: msgType=%s,%s" % (msgType, msgData), playerID)
+ msgInfo = str([msgType, msgData])
+ GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(playerID, 0, 0, "FamilyChuangong", msgInfo, len(msgInfo))
+ return
+
+def __CheckCanChuangong(curPlayer):
+ playerID = curPlayer.GetPlayerID()
+ remainCnt = PlayerActivity.GetDailyActionrRemainCnt(curPlayer, ShareDefine.DailyActionID_FamilyChuanGong)
+ if remainCnt <= 0:
+ GameWorld.DebugLog("没有传功次数了", playerID)
+ return
+ openServerDayLimit = IpyGameDataPY.GetFuncCfg("FamilyChuangong", 1)
+ if openServerDayLimit:
+ openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
+ if openServerDay > openServerDayLimit:
+ GameWorld.DebugLog("当前开服天不能传功: openServerDay=%s > %s" % (openServerDay, openServerDayLimit), playerID)
+ return
+ return True
+
+def __Chuangong_Invite(curPlayer, tagPlayerID):
+ ## 传功邀请
+ if not __CheckCanChuangong(curPlayer):
+ return
+ SendGameServer_FamilyChuangong(curPlayer, "Invite", [tagPlayerID])
+ return
+
+def __Chuangong_Response(curPlayer, tagPlayerID, isOK):
+ ## 传功回应
+ SendGameServer_FamilyChuangong(curPlayer, "Response", [tagPlayerID, isOK])
+ return
+
+def __Chuangong_GetAward(curPlayer):
+ ## 传功领奖
+ if not __CheckCanChuangong(curPlayer):
+ return
+ PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_FamilyChuanGong, 1)
+
+ playerID = curPlayer.GetPlayerID()
+ fromLV = curPlayer.GetLV()
+
+ # 给经验
+ totalExp = 0
+ giveRound = IpyGameDataPY.GetFuncCfg("FamilyChuangong", 3)
+ worldlv = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv)
+ playerControl = PlayerControl.PlayerControl(curPlayer)
+ for index in range(giveRound):
+ reLV = curPlayer.GetLV()
+ reExp = PlayerControl.GetPlayerReExp(curPlayer)
+ giveExp = eval(IpyGameDataPY.GetFuncCompileCfg("FamilyChuangong", 2))
+ finalAddExp = playerControl.AddExp(giveExp, ShareDefine.Def_ViewExpType_SysEx)
+ totalExp += finalAddExp
+ GameWorld.DebugLog("传功经验: 轮次=%s,reLV=%s,reExp=%s,finalAddExp=%s, %s" % (index, reLV, reExp, finalAddExp, totalExp), playerID)
+
+ PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_FamilyChuanGong, 1)
+ PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_ChuanGong, 1)
+
+ # 给物品
+ giveItemList = IpyGameDataPY.GetFuncEvalCfg("FamilyChuangong", 4)
+ ItemControler.GivePlayerItemOrMail(curPlayer, giveItemList)
+
+ # 同步结果
+ syncItemList = []
+ for itemID, itemCount, _ in giveItemList:
+ syncItem = ChPyNetSendPack.tagMCChuangongItem()
+ syncItem.Clear()
+ syncItem.ItemID = itemID
+ syncItem.ItemCount = itemCount
+ syncItemList.append(syncItem)
+ clientPack = ChPyNetSendPack.tagMCChuangongResult()
+ clientPack.Clear()
+ clientPack.FromLV = fromLV
+ clientPack.ToLV = curPlayer.GetLV()
+ clientPack.Exp = totalExp % ChConfig.Def_PerPointValue
+ clientPack.ExpPoint = totalExp / ChConfig.Def_PerPointValue
+ clientPack.AwardItemList = syncItemList
+ clientPack.ItemCount = len(clientPack.AwardItemList)
+ NetPackCommon.SendFakePack(curPlayer, clientPack)
+ return
+
+##--------------------------------------------------------------------------------------------------
--
Gitblit v1.8.0