hxp
2025-08-04 fd3137f3c58f6fb5f53c0bfc38c55c74e7709f72
121 【武将】武将系统-服务端(阵容通知B124)
4个文件已修改
189 ■■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -44314,6 +44314,137 @@
#------------------------------------------------------
# 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):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -505,7 +505,9 @@
        # 离线过久恢复为非跨服状态
        if PlayerControl.GetCrossMapID(curPlayer):
            PlayerControl.SetCrossMapID(curPlayer, 0)
    __FirstLoginOnEnter(curPlayer)
    TurnAttack.OnPlayerLogin(curPlayer)
    SyncGuideState(curPlayer)
    
@@ -538,8 +540,6 @@
    PlayerPrestigeSys.OnLogin(curPlayer)
    #DataRecordPack.DR_PlayerLogin(curPlayer)
    EventReport.WriteEvent_login(curPlayer)
    __FirstLoginOnEnter(curPlayer)
    
    # 合服首登处理
    __DoMixServerFirstLogin(curPlayer)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
@@ -1220,15 +1220,6 @@
    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
@@ -1266,3 +1257,39 @@
    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
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
@@ -62,7 +62,7 @@
        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: 阵型
@@ -72,6 +72,8 @@
        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):
@@ -384,8 +386,9 @@
        # 获取其他绑定该阵容的功能,如红颜、灵兽等
        
        shapeType = lineShapeTypeDict.get(lineupID, 0)
        lineup.UpdLineup(heroItemDict, shapeType)
        lineup.UpdLineup(heroItemDict, shapeType, syncLineup=False)
        
    PlayerHero.Sync_Lineup(curPlayer)
    return
def doCalcAllAttr(curPlayer):