121 【武将】武将系统-服务端(阵容通知B124)
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B1 24 阵容信息 #tagSCLineupInfo
|
| | |
|
| | | class tagSCLineup(Structure):
|
| | | LineupID = 0 #(BYTE LineupID)// 阵容ID
|
| | | ShapeType = 0 #(BYTE ShapeType)// 阵型
|
| | | HeroCnt = 0 #(BYTE HeroCnt)
|
| | | HeroItemIndexList = list() #(vector<WORD> HeroItemIndexList)// 所在武将背包索引+1列表 [站位1物品索引+1, 站位2, ...],站位无武将时为0
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.LineupID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.ShapeType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.HeroCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.HeroCnt):
|
| | | value,_pos=CommFunc.ReadWORD(_lpData,_pos)
|
| | | self.HeroItemIndexList.append(value)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.LineupID = 0
|
| | | self.ShapeType = 0
|
| | | self.HeroCnt = 0
|
| | | self.HeroItemIndexList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 1
|
| | | length += 1
|
| | | length += 1
|
| | | length += 2 * self.HeroCnt
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteBYTE(data, self.LineupID)
|
| | | data = CommFunc.WriteBYTE(data, self.ShapeType)
|
| | | data = CommFunc.WriteBYTE(data, self.HeroCnt)
|
| | | for i in range(self.HeroCnt):
|
| | | data = CommFunc.WriteWORD(data, self.HeroItemIndexList[i])
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | LineupID:%d,
|
| | | ShapeType:%d,
|
| | | HeroCnt:%d,
|
| | | HeroItemIndexList:%s
|
| | | '''\
|
| | | %(
|
| | | self.LineupID,
|
| | | self.ShapeType,
|
| | | self.HeroCnt,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagSCLineupInfo(Structure):
|
| | | Head = tagHead()
|
| | | LineupCnt = 0 #(BYTE LineupCnt)
|
| | | LineupList = list() #(vector<tagSCLineup> LineupList)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xB1
|
| | | self.Head.SubCmd = 0x24
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.LineupCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.LineupCnt):
|
| | | temLineupList = tagSCLineup()
|
| | | _pos = temLineupList.ReadData(_lpData, _pos)
|
| | | self.LineupList.append(temLineupList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xB1
|
| | | self.Head.SubCmd = 0x24
|
| | | self.LineupCnt = 0
|
| | | self.LineupList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | for i in range(self.LineupCnt):
|
| | | length += self.LineupList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.LineupCnt)
|
| | | for i in range(self.LineupCnt):
|
| | | data = CommFunc.WriteString(data, self.LineupList[i].GetLength(), self.LineupList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | LineupCnt:%d,
|
| | | LineupList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.LineupCnt,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagSCLineupInfo=tagSCLineupInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCLineupInfo.Head.Cmd,m_NAtagSCLineupInfo.Head.SubCmd))] = m_NAtagSCLineupInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B1 06 通知玩家向目标点移动 #tagMCNotifyPlayerMove
|
| | |
|
| | | class tagMCNotifyPlayerMove(Structure):
|
| | |
| | | # 离线过久恢复为非跨服状态
|
| | | if PlayerControl.GetCrossMapID(curPlayer):
|
| | | PlayerControl.SetCrossMapID(curPlayer, 0)
|
| | | |
| | | |
| | | __FirstLoginOnEnter(curPlayer)
|
| | | |
| | | TurnAttack.OnPlayerLogin(curPlayer)
|
| | | SyncGuideState(curPlayer)
|
| | |
|
| | |
| | | PlayerPrestigeSys.OnLogin(curPlayer)
|
| | | #DataRecordPack.DR_PlayerLogin(curPlayer)
|
| | | EventReport.WriteEvent_login(curPlayer)
|
| | | |
| | | __FirstLoginOnEnter(curPlayer)
|
| | |
|
| | | # 合服首登处理
|
| | | __DoMixServerFirstLogin(curPlayer)
|
| | |
| | | PlayerOnline.GetOnlinePlayer(curPlayer).SetCalcAttr(ChConfig.Def_CalcAttr_HeroBook, heroBookAttrDict)
|
| | | return
|
| | |
|
| | | def RefreshLineupHeroAttr(curPlayer):
|
| | | ## 刷新阵容武将属性
|
| | | |
| | | # 计算阵容总战力 = 角色总战力为主阵容战力,需同步计算不同阵容战力
|
| | | return
|
| | |
|
| | | def CaclHeroCardAttr():
|
| | | return
|
| | |
|
| | | def Sync_HeroInfo(curPlayer, heroIDList=None):
|
| | | if heroIDList != None:
|
| | | syncHeroIDList = heroIDList
|
| | |
| | | clientPack.HeroCnt = len(clientPack.HeroInfoList)
|
| | | NetPackCommon.SendFakePack(curPlayer, clientPack)
|
| | | return
|
| | |
|
| | | def Sync_Lineup(curPlayer, lineupID=None):
|
| | | if lineupID:
|
| | | syncIDList = [lineupID]
|
| | | else:
|
| | | syncIDList = ShareDefine.LineupList
|
| | | |
| | | lineupList = []
|
| | | olPlayer = PlayerOnline.GetOnlinePlayer(curPlayer)
|
| | | for lineupID in syncIDList:
|
| | | lineup = olPlayer.GetLineup(lineupID)
|
| | | if not lineup:
|
| | | continue
|
| | | |
| | | posNumItemIndexDict = {v:k for k, v in lineup.heroItemDict.items()}
|
| | | heroItemIndexList = [] # 所在武将背包索引+1列表 [站位1物品索引+1, 站位2, ...],站位无武将时为0
|
| | | for posNum in range(1, 1 + ShareDefine.LineupObjMax):
|
| | | if posNum in posNumItemIndexDict:
|
| | | heroItemIndexList.append(posNumItemIndexDict[posNum] + 1)
|
| | | else:
|
| | | heroItemIndexList.append(0)
|
| | | packLineup = ChPyNetSendPack.tagSCLineup()
|
| | | packLineup.LineupID = lineup.lineupID
|
| | | packLineup.ShapeType = lineup.shapeType
|
| | | packLineup.HeroItemIndexList = heroItemIndexList
|
| | | packLineup.HeroCnt = len(packLineup.HeroItemIndexList)
|
| | | lineupList.append(packLineup)
|
| | | |
| | | if not lineupList:
|
| | | return
|
| | | |
| | | clientPack = ChPyNetSendPack.tagSCLineupInfo()
|
| | | clientPack.LineupList = lineupList
|
| | | clientPack.LineupCnt = len(clientPack.LineupList)
|
| | | NetPackCommon.SendFakePack(curPlayer, clientPack)
|
| | | return
|
| | |
| | | self.fightPower = 0 # 阵容总战力
|
| | | return
|
| | |
|
| | | def UpdLineup(self, heroItemDict, shapeType=0, refreshForce=False):
|
| | | def UpdLineup(self, heroItemDict, shapeType=0, refreshForce=False, syncLineup=True):
|
| | | '''变更阵容时更新
|
| | | @param heroItemDict: 武将背包索引信息 {itemIndex:posNum, ...}
|
| | | @param shapeType: 阵型
|
| | |
| | | self.heroItemDict = heroItemDict
|
| | | GameWorld.DebugLog("更新阵容: lineupID=%s,%s" % (self.lineupID, heroItemDict), self.playerID)
|
| | | self.RefreshLineupAttr(refreshForce)
|
| | | if syncLineup and self.olPlayer.curPlayer:
|
| | | PlayerHero.Sync_Lineup(self.olPlayer.curPlayer, self.lineupID)
|
| | | return
|
| | |
|
| | | def FreeLineupHero(self):
|
| | |
| | | # 获取其他绑定该阵容的功能,如红颜、灵兽等
|
| | |
|
| | | shapeType = lineShapeTypeDict.get(lineupID, 0)
|
| | | lineup.UpdLineup(heroItemDict, shapeType)
|
| | | lineup.UpdLineup(heroItemDict, shapeType, syncLineup=False)
|
| | |
|
| | | PlayerHero.Sync_Lineup(curPlayer)
|
| | | return
|
| | |
|
| | | def doCalcAllAttr(curPlayer):
|