| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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):
|
| | |
| | |
|
| | | 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
|
| | |
|
| | | ##--------------------------------------------------------------------------------------------------
|
| | |
|
| | |
| | | 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))
|
| | |
| | | g_familyPartyTopInfo = [] #仙盟宴会答题王 [playerID,名字]
|
| | | g_partyheroAnswerDict = {} #仙盟宴会玩家答对题目数量 {playerid:答题数量,..}
|
| | | g_familyAnswerPlayerIDDict = {} #仙盟宴会玩家参与答题数量 {playerID:[题目ID, ...], ...}
|
| | | g_chuangongPlayerDict = {} #传功玩家信息 {playerID:[目标玩家ID, ...], ...}
|
| | |
|
| | | g_redPacketMgr = None # RedPacketMgr
|
| | |
|
| | |
| | | Writer = alee
|
| | | Releaser = alee
|
| | | RegType = 0
|
| | | RegisterPackCount = 7
|
| | | RegisterPackCount = 8
|
| | |
|
| | | PacketCMD_1=0xA6
|
| | | PacketSubCMD_1=0x01
|
| | |
| | | PacketSubCMD_7=0x13
|
| | | PacketCallFunc_7=OnFamilyAffairOP
|
| | |
|
| | | PacketCMD_8=0xA6
|
| | | PacketSubCMD_8=0x15
|
| | | PacketCallFunc_8=OnChuangongOP
|
| | |
|
| | | ;家族仓库
|
| | | [PlayerFamilyStore]
|
| | | ScriptName = Player\PlayerFamilyStore.py
|
| | |
| | | #仙盟宴会
|
| | | 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" # 获得的总经验点
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # 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):
|
| | |
| | | import PyGameData
|
| | | import ItemCommon
|
| | | import ItemControler
|
| | | import Item_AddLV
|
| | | import PlayerTalk
|
| | | import PlayerActivity
|
| | | import PlayerWeekParty
|
| | | import PlayerTongTianLing
|
| | |
|
| | | #---战盟副本---
|
| | |
| | | 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)
|
| | |
| | | # @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()
|
| | |
| | | #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):
|
| | |
| | | # @return 无意义
|
| | | def DoExitFB(curPlayer, tick):
|
| | | global g_familyMapPlayerIDDict
|
| | | __GiveSitAward(curPlayer)
|
| | | lineID = GameWorld.GetGameWorld().GetLineID()
|
| | | playerID = curPlayer.GetID()
|
| | | if playerID in g_familyMapPlayerIDDict.get(lineID, []):
|
| | |
| | | # @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()
|
| | |
| | | import PlayerFamilyTech
|
| | | import PlayerFamilyRedPacket
|
| | | import PlayerFamilyZhenfa
|
| | | import PlayerTongTianLing
|
| | | import PlayerWeekParty
|
| | | import PlayerActivity
|
| | | import ItemControler
|
| | | import SkillCommon
|
| | | import BuffSkill
|
| | | import ItemCommon
|
| | |
| | | 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
|
| | |
|
| | | ##--------------------------------------------------------------------------------------------------
|