From fd3137f3c58f6fb5f53c0bfc38c55c74e7709f72 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 04 八月 2025 15:07:05 +0800
Subject: [PATCH] 121 【武将】武将系统-服务端(阵容通知B124)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py | 45 +++++++++--
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py | 7 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 131 ++++++++++++++++++++++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 6
4 files changed, 175 insertions(+), 14 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 4ddf44f..c44e72b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/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):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index fbcc07c..e026c22 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/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)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
index 8165538..2284597 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
+++ b/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
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
index 2a29643..e51d59f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
+++ b/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):
--
Gitblit v1.8.0