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