From cb45ad934671c0c54c1024f834e630109dfa5c73 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 14 四月 2025 15:01:13 +0800
Subject: [PATCH] 10367 【越南】【英语】【BT】【砍树】仙盟攻城战-服务端(增加查看其他指定仙盟/跨服仙盟支持;增加领取点赞奖励;修改仙盟轮次伤害计算规则受当前城池剩余生命影响;)
---
ServerPython/CoreServerGroup/GameServer/PyNetPack.ini | 6
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossFamilyGCZ.py | 62 +++-
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py | 3
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py | 72 +++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActFamilyGCZ.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py | 52 ++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 240 ++++++++++++++++++
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 52 ++++
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 1
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 240 ++++++++++++++++++
11 files changed, 706 insertions(+), 25 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/PyNetPack.ini b/ServerPython/CoreServerGroup/GameServer/PyNetPack.ini
index 2f79136..fb350d6 100644
--- a/ServerPython/CoreServerGroup/GameServer/PyNetPack.ini
+++ b/ServerPython/CoreServerGroup/GameServer/PyNetPack.ini
@@ -39,7 +39,7 @@
Writer = Alee
Releaser = Alee
RegType = 0
-RegisterPackCount = 10
+RegisterPackCount = 11
PacketCMD_1=0xA4
PacketSubCMD_1=0x01
@@ -81,6 +81,10 @@
PacketSubCMD_10=0x13
PacketCallFunc_10=OnChangeFamilyEmblem
+PacketCMD_11=0xA4
+PacketSubCMD_11=0x14
+PacketCallFunc_11=OnViewTagFamily
+
[GameWorldFamilyWar]
ScriptName = GameWorldLogic\GameWorldFamilyWar.py
Writer = hxp
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
index 102b350..939ec1a 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -1026,6 +1026,58 @@
#------------------------------------------------------
+# A4 14 查看目标仙盟 #tagCGViewTagFamily
+
+class tagCGViewTagFamily(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("TagFamilyID", c_int), # 目标仙盟ID,支持查看跨服仙盟
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xA4
+ self.SubCmd = 0x14
+ 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 = 0xA4
+ self.SubCmd = 0x14
+ self.TagFamilyID = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCGViewTagFamily)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A4 14 查看目标仙盟 //tagCGViewTagFamily:
+ Cmd:%s,
+ SubCmd:%s,
+ TagFamilyID:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.TagFamilyID
+ )
+ return DumpString
+
+
+m_NAtagCGViewTagFamily=tagCGViewTagFamily()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGViewTagFamily.Cmd,m_NAtagCGViewTagFamily.SubCmd))] = m_NAtagCGViewTagFamily
+
+
+#------------------------------------------------------
# A9 03 关注BOSS刷新 #tagCGAttentionBoss
class tagCGAttentionBoss(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 7d19ab1..a86e5bf 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -2712,6 +2712,246 @@
#------------------------------------------------------
+# A4 13 查看目标仙盟返回信息 #tagGCTagFamilyInfo
+
+class tagGCTagFamilyMember(Structure):
+ PlayerID = 0 #(DWORD PlayerID)
+ NameLen = 0 #(BYTE NameLen)
+ Name = "" #(String Name)//size = NameLen
+ FamilyLV = 0 #(BYTE FamilyLV)//家族成员等级
+ LV = 0 #(WORD LV)
+ Job = 0 #(BYTE Job)//职业
+ Face = 0 #(DWORD Face)//头像
+ FacePic = 0 #(DWORD FacePic)//头像外框
+ OfficialRank = 0 #(BYTE OfficialRank)//境界
+ FightPower = 0 #(DWORD FightPower)//成员战力,求余亿部分
+ FightPowerEx = 0 #(DWORD FightPowerEx)//成员战力,整除亿部分
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+ self.FamilyLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.OfficialRank,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ return _pos
+
+ def Clear(self):
+ self.PlayerID = 0
+ self.NameLen = 0
+ self.Name = ""
+ self.FamilyLV = 0
+ self.LV = 0
+ self.Job = 0
+ self.Face = 0
+ self.FacePic = 0
+ self.OfficialRank = 0
+ self.FightPower = 0
+ self.FightPowerEx = 0
+ return
+
+ def GetLength(self):
+ length = 0
+ length += 4
+ length += 1
+ length += len(self.Name)
+ length += 1
+ length += 2
+ length += 1
+ length += 4
+ length += 4
+ length += 1
+ length += 4
+ length += 4
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteDWORD(data, self.PlayerID)
+ data = CommFunc.WriteBYTE(data, self.NameLen)
+ data = CommFunc.WriteString(data, self.NameLen, self.Name)
+ data = CommFunc.WriteBYTE(data, self.FamilyLV)
+ data = CommFunc.WriteWORD(data, self.LV)
+ data = CommFunc.WriteBYTE(data, self.Job)
+ data = CommFunc.WriteDWORD(data, self.Face)
+ data = CommFunc.WriteDWORD(data, self.FacePic)
+ data = CommFunc.WriteBYTE(data, self.OfficialRank)
+ data = CommFunc.WriteDWORD(data, self.FightPower)
+ data = CommFunc.WriteDWORD(data, self.FightPowerEx)
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ PlayerID:%d,
+ NameLen:%d,
+ Name:%s,
+ FamilyLV:%d,
+ LV:%d,
+ Job:%d,
+ Face:%d,
+ FacePic:%d,
+ OfficialRank:%d,
+ FightPower:%d,
+ FightPowerEx:%d
+ '''\
+ %(
+ self.PlayerID,
+ self.NameLen,
+ self.Name,
+ self.FamilyLV,
+ self.LV,
+ self.Job,
+ self.Face,
+ self.FacePic,
+ self.OfficialRank,
+ self.FightPower,
+ self.FightPowerEx
+ )
+ return DumpString
+
+
+class tagGCTagFamilyInfo(Structure):
+ Head = tagHead()
+ FamilyID = 0 #(DWORD FamilyID)
+ FamilyName = "" #(char FamilyName[33])//家族名称
+ FamilyLV = 0 #(WORD FamilyLV)//家族等级
+ BroadcastLen = 0 #(WORD BroadcastLen)//公告
+ Broadcast = "" #(String Broadcast)//size = BroadcastLen
+ MemberCount = 0 #(WORD MemberCount)//人数
+ Member = list() #(vector<tagGCTagFamilyMember> Member)//size = MemberCount
+ FightPower = 0 #(DWORD FightPower)//仙盟总战力,求余亿部分
+ FightPowerEx = 0 #(DWORD FightPowerEx)//仙盟总战力,整除亿部分
+ EmblemID = 0 #(DWORD EmblemID)//徽章ID
+ ServerID = 0 #(DWORD ServerID)//仙盟区服ID
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xA4
+ self.Head.SubCmd = 0x13
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.FamilyName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+ self.FamilyLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.BroadcastLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.Broadcast,_pos = CommFunc.ReadString(_lpData, _pos,self.BroadcastLen)
+ self.MemberCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ for i in range(self.MemberCount):
+ temMember = tagGCTagFamilyMember()
+ _pos = temMember.ReadData(_lpData, _pos)
+ self.Member.append(temMember)
+ self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.EmblemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xA4
+ self.Head.SubCmd = 0x13
+ self.FamilyID = 0
+ self.FamilyName = ""
+ self.FamilyLV = 0
+ self.BroadcastLen = 0
+ self.Broadcast = ""
+ self.MemberCount = 0
+ self.Member = list()
+ self.FightPower = 0
+ self.FightPowerEx = 0
+ self.EmblemID = 0
+ self.ServerID = 0
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 4
+ length += 33
+ length += 2
+ length += 2
+ length += len(self.Broadcast)
+ length += 2
+ for i in range(self.MemberCount):
+ length += self.Member[i].GetLength()
+ length += 4
+ length += 4
+ length += 4
+ length += 4
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteDWORD(data, self.FamilyID)
+ data = CommFunc.WriteString(data, 33, self.FamilyName)
+ data = CommFunc.WriteWORD(data, self.FamilyLV)
+ data = CommFunc.WriteWORD(data, self.BroadcastLen)
+ data = CommFunc.WriteString(data, self.BroadcastLen, self.Broadcast)
+ data = CommFunc.WriteWORD(data, self.MemberCount)
+ for i in range(self.MemberCount):
+ data = CommFunc.WriteString(data, self.Member[i].GetLength(), self.Member[i].GetBuffer())
+ data = CommFunc.WriteDWORD(data, self.FightPower)
+ data = CommFunc.WriteDWORD(data, self.FightPowerEx)
+ data = CommFunc.WriteDWORD(data, self.EmblemID)
+ data = CommFunc.WriteDWORD(data, self.ServerID)
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ FamilyID:%d,
+ FamilyName:%s,
+ FamilyLV:%d,
+ BroadcastLen:%d,
+ Broadcast:%s,
+ MemberCount:%d,
+ Member:%s,
+ FightPower:%d,
+ FightPowerEx:%d,
+ EmblemID:%d,
+ ServerID:%d
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.FamilyID,
+ self.FamilyName,
+ self.FamilyLV,
+ self.BroadcastLen,
+ self.Broadcast,
+ self.MemberCount,
+ "...",
+ self.FightPower,
+ self.FightPowerEx,
+ self.EmblemID,
+ self.ServerID
+ )
+ return DumpString
+
+
+m_NAtagGCTagFamilyInfo=tagGCTagFamilyInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTagFamilyInfo.Head.Cmd,m_NAtagGCTagFamilyInfo.Head.SubCmd))] = m_NAtagGCTagFamilyInfo
+
+
+#------------------------------------------------------
#A4 01 查看申请入会的玩家信息 #tagGCViewFamilyRequestInfo
class tagtMemberInfo(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossFamilyGCZ.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossFamilyGCZ.py
index c5ac94a..115236e 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossFamilyGCZ.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossFamilyGCZ.py
@@ -90,7 +90,8 @@
AwwardType_Guess, # 竞猜
AwwardType_PlayerHurt, # 个人伤害排行
AwwardType_FamilyScore, # 仙盟积分排行
-) = range(3)
+AwwardType_Like, # 点赞
+) = range(4)
class FamilyGCZFighter(object):
@@ -1287,9 +1288,13 @@
value5 = joinFamily.serverID
groupValue1 = joinFamily.zoneID
groupValue2 = GetRoundHurtGroupID(joinFamily.batType, joinFamily.groupNum)
- roundTotalHurt = sum(joinFamily.cityWall.fighterHurtDict.values())
- cmpValue = roundTotalHurt / ChConfig.Def_PerPointValue
- cmpValue2 = roundTotalHurt % ChConfig.Def_PerPointValue
+ memHurtTotal = sum(joinFamily.cityWall.fighterHurtDict.values())
+ cityRemainHPPer = joinFamily.cityWall.hp / float(joinFamily.cityWall.hpMax)
+ familyRoundHurt = eval(IpyGameDataPY.GetFuncCompileCfg("FamilyGCZCity", 3))
+ GameWorld.DebugLog("计算仙盟轮次伤害榜值: familyID=%s,familyRoundHurt=%s,memHurtTotal=%s,cityRemainHPPer=%s, %s/%s"
+ % (dataID, familyRoundHurt, memHurtTotal, cityRemainHPPer, joinFamily.cityWall.hp, joinFamily.cityWall.hpMax))
+ cmpValue = familyRoundHurt / ChConfig.Def_PerPointValue
+ cmpValue2 = familyRoundHurt % ChConfig.Def_PerPointValue
cmpValue3 = joinFamily.sortWeight
CrossBillboard.UpdCrossBillboard(ShareDefine.Def_CBT_FamilyGCZRoundHurt, groupValue1, dataID, name1, name2, type2, value1, value2,
cmpValue, cmpValue2, cmpValue3, groupValue2=groupValue2, id2=id2, autoSort=True, value3=value3, value5=value5)
@@ -1855,7 +1860,11 @@
% (remainHurtTotal, killCnt, curCity.atkReportDict, tagCity.defReportDict))
GameWorld.DebugLog("cityHP=%s/%s,atkedGuardIDList=%s" % (tagCity.hp, tagCity.hpMax, atkedGuardIDList))
-
+ if tagFamilyID:
+ tagJoinFamily = zone.GetZoneJoinFamily(tagFamilyID)
+ if tagJoinFamily:
+ UndFamilyRoundHurtBillboard(tagJoinFamily) # 榜单伤害受城池血量影响,所以被攻击方也要更新榜单
+
for memID, memHurt in memHurtDict.items():
GameWorld.DebugLog("攻击方成员输出: memID=%s,%s" % (memID, memHurt))
joinMember = zone.GetZoneJoinMember(memID)
@@ -1875,6 +1884,8 @@
if not curCity.IsBroken():
UndFamilyRoundHurtBillboard(curJoinFamily)
+ else:
+ GameWorld.DebugLog(" 攻击方仙盟城池已被摧毁,不再累加本轮仙盟伤害榜值! familyID=%s" % curFamilyID)
if not CheckXiuluoCity(zoneID, curRound, batType, groupNum, gmPlayerID):
Sync_FamilyGCZBatSceneInfo(zoneID, batType, groupNum)
@@ -2052,6 +2063,9 @@
hurtDict[tagCityID] = oneHurtTotal # 飘血按伤害
# 通知被攻击盟成员大本营城池信息
if tagCity.familyID:
+ tagJoinFamily = zone.GetZoneJoinFamily(tagCity.familyID)
+ if tagJoinFamily:
+ UndFamilyRoundHurtBillboard(tagJoinFamily) # 榜单伤害受城池血量影响,所以被攻击方也要更新榜单
Sync_FamilyGCZCampInfo(zoneID, tagCity.familyID, defMemIDList=atkedGuardIDList)
Sync_FamilyGCZBatCityInfo(zoneID, batType, groupNum, tagCityID, AtkRet_OK, playerID, oneHurtTotal, killCnt)
@@ -2467,7 +2481,11 @@
# 竞猜
if awardType == AwwardType_Guess:
awardTemplateID = ipyDataInfo.get("GuessTemplateID", 0)
- __clientServer_GetAward_Guess(zoneID, playerID, serverGroupID, actID, state, awardType, awardTemplateID)
+ playerAwardID, awardItemList = GetGuessAwardInfo(zoneID, state, awardTemplateID, playerID)
+ if not awardItemList:
+ GameWorld.ErrLog("仙盟攻城战玩家没有竞猜奖励! zoneID=%s" % (zoneID), playerID)
+ return
+ __clientServer_GetAward_Ret(zoneID, playerID, serverGroupID, actID, awardType, playerAwardID, awardItemList)
return
gczMgr = GetFamilyGCZMgr()
@@ -2497,6 +2515,12 @@
billboardType = ShareDefine.Def_CBT_FamilyGCZScore
awardTemplateID = ipyDataInfo.get("FamilyTemplateID", 0)
+ # 点赞奖励
+ elif awardType == AwwardType_Like:
+ awardItemList = IpyGameDataPY.GetFuncEvalCfg("FamilyGCZGuess", 4)
+ __clientServer_GetAward_Ret(zoneID, playerID, serverGroupID, actID, awardType, 0, awardItemList)
+ return
+
else:
return
@@ -2518,30 +2542,22 @@
if not playerAwardItemList:
return
- GameWorld.Log("仙盟攻城战玩家请求领取奖励! zoneID=%s,awardType=%s,playerAwardItemList=%s"
- % (zoneID, awardType, playerAwardItemList), playerID)
-
- joinMember.awardState = joinMember.awardState | pow(2, awardType) # 标记已推送
- msgInfo = {"zoneID":zoneID, "playerID":playerID, "actID":actID, "awardType":awardType, "awardValue":billRank,
- "awardItemList":playerAwardItemList, "fmLV":fmLV}
- Send_CrossServerMsg_FamilyGCZ("FamilyGCZAward", msgInfo, [serverGroupID])
+ __clientServer_GetAward_Ret(zoneID, playerID, serverGroupID, actID, awardType, billRank, playerAwardItemList)
return
-def __clientServer_GetAward_Guess(zoneID, playerID, serverGroupID, actID, state, awardType, guessTemplateID):
- ## 竞猜领奖
- playerAwardID, awardItemList = GetGuessAwardInfo(zoneID, state, guessTemplateID, playerID)
- if not awardItemList:
- GameWorld.ErrLog("仙盟攻城战玩家没有竞猜奖励! zoneID=%s" % (zoneID), playerID)
- return
- GameWorld.Log("仙盟攻城战玩家请求领取竞猜奖励! zoneID=%s,playerAwardID=%s,awardItemList=%s"
- % (zoneID, playerAwardID, awardItemList), playerID)
-
+def __clientServer_GetAward_Ret(zoneID, playerID, serverGroupID, actID, awardType, awardValue, awardItemList):
+ ## 同步子服领奖结果
gczMgr = GetFamilyGCZMgr()
zone = gczMgr.GetActZone(zoneID)
joinMember = zone.GetZoneJoinMember(playerID)
+ fmLV = 0
if joinMember:
+ fmLV = joinMember.fmLV
joinMember.awardState = joinMember.awardState | pow(2, awardType) # 标记已推送
- msgInfo = {"zoneID":zoneID, "playerID":playerID, "actID":actID, "awardType":awardType, "awardValue":playerAwardID, "awardItemList":awardItemList}
+ GameWorld.Log("仙盟攻城战玩家请求领取奖励! zoneID=%s,awardType=%s,awardValue=%s,awardItemList=%s"
+ % (zoneID, awardType, awardValue, awardItemList), playerID)
+ msgInfo = {"zoneID":zoneID, "playerID":playerID, "actID":actID, "awardType":awardType, "awardValue":awardValue,
+ "awardItemList":awardItemList, "fmLV":fmLV}
Send_CrossServerMsg_FamilyGCZ("FamilyGCZAward", msgInfo, [serverGroupID])
return
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py
index 5d1ff92..89c19a8 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py
@@ -235,6 +235,9 @@
elif msgType == ShareDefine.ClientServerMsg_SyncFamilyInfo:
PlayerFamily.ClientServerMsg_SyncFamilyInfo(serverGroupID, msgData)
+ elif msgType == ShareDefine.ClientServerMsg_QueryCrossFamily:
+ PlayerFamily.ClientServerMsg_QueryCrossFamily(serverGroupID, msgData)
+
elif msgType == ShareDefine.ClientServerMsg_FamilyGCZ:
CrossFamilyGCZ.ClientServerMsg_FamilyGCZ(serverGroupID, msgData)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py
index ff60117..d190580 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py
@@ -919,6 +919,63 @@
PlayerFamilyEmblem.OnChangeFamilyEmblem(curPlayer, changeEmblemID)
return
+#// A4 14 查看目标仙盟 #tagCGViewTagFamily
+#
+#struct tagCGViewTagFamily
+#{
+# tagHead Head;
+# DWORD TagFamilyID; // 目标仙盟ID,支持查看跨服仙盟
+#};
+def OnViewTagFamily(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ playerID = curPlayer.GetPlayerID()
+ tagFamilyID = clientData.TagFamilyID
+ clientPack = __GetTagFamilyInfoPack(tagFamilyID)
+ if not clientPack:
+ # 发送跨服服务器查询,可能是跨服仙盟
+ dataMsg = {"playerID":playerID, "tagFamilyID":tagFamilyID}
+ CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_QueryCrossFamily, dataMsg)
+ return
+ NetPackCommon.SendFakePack(curPlayer, clientPack)
+ return
+
+def __GetTagFamilyInfoPack(tagFamilyID):
+ ## 获取查看目标仙盟同步封包
+ familyManager = GameWorld.GetFamilyManager()
+ family = familyManager.FindFamily(tagFamilyID)
+ if not family:
+ return
+ clientPack = ChPyNetSendPack.tagGCTagFamilyInfo()
+ clientPack.FamilyID = tagFamilyID
+ clientPack.FamilyName = family.GetName()
+ clientPack.FamilyLV = family.GetLV()
+ clientPack.Broadcast = family.GetBroadcast()
+ clientPack.BroadcastLen = len(clientPack.Broadcast)
+ clientPack.Member = []
+ for index in range(family.GetCount()):
+ curMember = family.GetAt(index)
+ mem = ChPyNetSendPack.tagGCTagFamilyMember()
+ mem.PlayerID = curMember.GetPlayerID()
+ mem.Name = curMember.GetName()
+ mem.NameLen = len(mem.Name)
+ mem.FamilyLV = curMember.GetFamilyLV()
+ mem.LV = curMember.GetLV()
+ mem.Job = curMember.GetJob()
+ mem.Face = curMember.GetFace()
+ mem.FacePic = curMember.GetFacePic()
+ mem.OfficialRank = curMember.GetOfficialRank()
+ fightPower = GetMemberFightPower(curMember)
+ mem.FightPower = fightPower % ChConfig.Def_PerPointValue
+ mem.FightPowerEx = fightPower / ChConfig.Def_PerPointValue
+ clientPack.Member.append(mem)
+ clientPack.MemberCount = len(clientPack.Member)
+ familyFightPower = GetFamilyTotalFightPower(family)
+ clientPack.FightPower = familyFightPower % ChConfig.Def_PerPointValue
+ clientPack.FightPowerEx = familyFightPower / ChConfig.Def_PerPointValue
+ clientPack.EmblemID = GetFamilyEmblemID(family)
+ clientPack.ServerID = family.GetServerID()
+ return clientPack
+
#class IPY_CFamilyChangeBroadcast
#{
#public:
@@ -4193,3 +4250,18 @@
return
+def ClientServerMsg_QueryCrossFamily(serverGroupID, msgData):
+ ## 子服查询跨服仙盟
+ playerID = msgData["playerID"]
+ tagFamilyID = msgData.get("tagFamilyID", 0)
+ if tagFamilyID:
+ clientPack = __GetTagFamilyInfoPack(tagFamilyID)
+ if clientPack:
+ NetPackCommon.SendFakePackByCross({playerID:serverGroupID}, clientPack)
+ else:
+ PlayerControl.NotifyCodeCross(serverGroupID, playerID, "TagFamilyNotExist")
+ return
+
+ # 可扩展查看跨服仙盟列表信息...
+
+ return
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index 0eeba7b..8dd11aa 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -1744,6 +1744,7 @@
ClientServerMsg_QueryXiangong = "QueryXiangong" # 查看仙宫仙名录
ClientServerMsg_LianqiScore = "LianqiScore" # 炼器积分
ClientServerMsg_SyncFamilyInfo = "SyncFamilyInfo" # 仙盟信息同步
+ClientServerMsg_QueryCrossFamily = "QueryCrossFamily" # 查询跨服仙盟
ClientServerMsg_FamilyGCZ = "FamilyGCZ" # 仙盟攻城战
#跨服广播类型定义
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index 102b350..939ec1a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -1026,6 +1026,58 @@
#------------------------------------------------------
+# A4 14 查看目标仙盟 #tagCGViewTagFamily
+
+class tagCGViewTagFamily(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("TagFamilyID", c_int), # 目标仙盟ID,支持查看跨服仙盟
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xA4
+ self.SubCmd = 0x14
+ 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 = 0xA4
+ self.SubCmd = 0x14
+ self.TagFamilyID = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCGViewTagFamily)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A4 14 查看目标仙盟 //tagCGViewTagFamily:
+ Cmd:%s,
+ SubCmd:%s,
+ TagFamilyID:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.TagFamilyID
+ )
+ return DumpString
+
+
+m_NAtagCGViewTagFamily=tagCGViewTagFamily()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGViewTagFamily.Cmd,m_NAtagCGViewTagFamily.SubCmd))] = m_NAtagCGViewTagFamily
+
+
+#------------------------------------------------------
# A9 03 关注BOSS刷新 #tagCGAttentionBoss
class tagCGAttentionBoss(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 7d19ab1..a86e5bf 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -2712,6 +2712,246 @@
#------------------------------------------------------
+# A4 13 查看目标仙盟返回信息 #tagGCTagFamilyInfo
+
+class tagGCTagFamilyMember(Structure):
+ PlayerID = 0 #(DWORD PlayerID)
+ NameLen = 0 #(BYTE NameLen)
+ Name = "" #(String Name)//size = NameLen
+ FamilyLV = 0 #(BYTE FamilyLV)//家族成员等级
+ LV = 0 #(WORD LV)
+ Job = 0 #(BYTE Job)//职业
+ Face = 0 #(DWORD Face)//头像
+ FacePic = 0 #(DWORD FacePic)//头像外框
+ OfficialRank = 0 #(BYTE OfficialRank)//境界
+ FightPower = 0 #(DWORD FightPower)//成员战力,求余亿部分
+ FightPowerEx = 0 #(DWORD FightPowerEx)//成员战力,整除亿部分
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.NameLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
+ self.FamilyLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.OfficialRank,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ return _pos
+
+ def Clear(self):
+ self.PlayerID = 0
+ self.NameLen = 0
+ self.Name = ""
+ self.FamilyLV = 0
+ self.LV = 0
+ self.Job = 0
+ self.Face = 0
+ self.FacePic = 0
+ self.OfficialRank = 0
+ self.FightPower = 0
+ self.FightPowerEx = 0
+ return
+
+ def GetLength(self):
+ length = 0
+ length += 4
+ length += 1
+ length += len(self.Name)
+ length += 1
+ length += 2
+ length += 1
+ length += 4
+ length += 4
+ length += 1
+ length += 4
+ length += 4
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteDWORD(data, self.PlayerID)
+ data = CommFunc.WriteBYTE(data, self.NameLen)
+ data = CommFunc.WriteString(data, self.NameLen, self.Name)
+ data = CommFunc.WriteBYTE(data, self.FamilyLV)
+ data = CommFunc.WriteWORD(data, self.LV)
+ data = CommFunc.WriteBYTE(data, self.Job)
+ data = CommFunc.WriteDWORD(data, self.Face)
+ data = CommFunc.WriteDWORD(data, self.FacePic)
+ data = CommFunc.WriteBYTE(data, self.OfficialRank)
+ data = CommFunc.WriteDWORD(data, self.FightPower)
+ data = CommFunc.WriteDWORD(data, self.FightPowerEx)
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ PlayerID:%d,
+ NameLen:%d,
+ Name:%s,
+ FamilyLV:%d,
+ LV:%d,
+ Job:%d,
+ Face:%d,
+ FacePic:%d,
+ OfficialRank:%d,
+ FightPower:%d,
+ FightPowerEx:%d
+ '''\
+ %(
+ self.PlayerID,
+ self.NameLen,
+ self.Name,
+ self.FamilyLV,
+ self.LV,
+ self.Job,
+ self.Face,
+ self.FacePic,
+ self.OfficialRank,
+ self.FightPower,
+ self.FightPowerEx
+ )
+ return DumpString
+
+
+class tagGCTagFamilyInfo(Structure):
+ Head = tagHead()
+ FamilyID = 0 #(DWORD FamilyID)
+ FamilyName = "" #(char FamilyName[33])//家族名称
+ FamilyLV = 0 #(WORD FamilyLV)//家族等级
+ BroadcastLen = 0 #(WORD BroadcastLen)//公告
+ Broadcast = "" #(String Broadcast)//size = BroadcastLen
+ MemberCount = 0 #(WORD MemberCount)//人数
+ Member = list() #(vector<tagGCTagFamilyMember> Member)//size = MemberCount
+ FightPower = 0 #(DWORD FightPower)//仙盟总战力,求余亿部分
+ FightPowerEx = 0 #(DWORD FightPowerEx)//仙盟总战力,整除亿部分
+ EmblemID = 0 #(DWORD EmblemID)//徽章ID
+ ServerID = 0 #(DWORD ServerID)//仙盟区服ID
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xA4
+ self.Head.SubCmd = 0x13
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.FamilyID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.FamilyName,_pos = CommFunc.ReadString(_lpData, _pos,33)
+ self.FamilyLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.BroadcastLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.Broadcast,_pos = CommFunc.ReadString(_lpData, _pos,self.BroadcastLen)
+ self.MemberCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ for i in range(self.MemberCount):
+ temMember = tagGCTagFamilyMember()
+ _pos = temMember.ReadData(_lpData, _pos)
+ self.Member.append(temMember)
+ self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.FightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.EmblemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.ServerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xA4
+ self.Head.SubCmd = 0x13
+ self.FamilyID = 0
+ self.FamilyName = ""
+ self.FamilyLV = 0
+ self.BroadcastLen = 0
+ self.Broadcast = ""
+ self.MemberCount = 0
+ self.Member = list()
+ self.FightPower = 0
+ self.FightPowerEx = 0
+ self.EmblemID = 0
+ self.ServerID = 0
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 4
+ length += 33
+ length += 2
+ length += 2
+ length += len(self.Broadcast)
+ length += 2
+ for i in range(self.MemberCount):
+ length += self.Member[i].GetLength()
+ length += 4
+ length += 4
+ length += 4
+ length += 4
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteDWORD(data, self.FamilyID)
+ data = CommFunc.WriteString(data, 33, self.FamilyName)
+ data = CommFunc.WriteWORD(data, self.FamilyLV)
+ data = CommFunc.WriteWORD(data, self.BroadcastLen)
+ data = CommFunc.WriteString(data, self.BroadcastLen, self.Broadcast)
+ data = CommFunc.WriteWORD(data, self.MemberCount)
+ for i in range(self.MemberCount):
+ data = CommFunc.WriteString(data, self.Member[i].GetLength(), self.Member[i].GetBuffer())
+ data = CommFunc.WriteDWORD(data, self.FightPower)
+ data = CommFunc.WriteDWORD(data, self.FightPowerEx)
+ data = CommFunc.WriteDWORD(data, self.EmblemID)
+ data = CommFunc.WriteDWORD(data, self.ServerID)
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ FamilyID:%d,
+ FamilyName:%s,
+ FamilyLV:%d,
+ BroadcastLen:%d,
+ Broadcast:%s,
+ MemberCount:%d,
+ Member:%s,
+ FightPower:%d,
+ FightPowerEx:%d,
+ EmblemID:%d,
+ ServerID:%d
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.FamilyID,
+ self.FamilyName,
+ self.FamilyLV,
+ self.BroadcastLen,
+ self.Broadcast,
+ self.MemberCount,
+ "...",
+ self.FightPower,
+ self.FightPowerEx,
+ self.EmblemID,
+ self.ServerID
+ )
+ return DumpString
+
+
+m_NAtagGCTagFamilyInfo=tagGCTagFamilyInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCTagFamilyInfo.Head.Cmd,m_NAtagGCTagFamilyInfo.Head.SubCmd))] = m_NAtagGCTagFamilyInfo
+
+
+#------------------------------------------------------
#A4 01 查看申请入会的玩家信息 #tagGCViewFamilyRequestInfo
class tagtMemberInfo(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActFamilyGCZ.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActFamilyGCZ.py
index d90726d..64d3b20 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActFamilyGCZ.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActFamilyGCZ.py
@@ -475,7 +475,7 @@
return
def GetFamilyGCZAward(curPlayer, awardType, tick):
- ## 领奖 0-竞猜奖励;1-个人排行奖励;2-仙盟排名奖励;
+ ## 领奖 0-竞猜奖励;1-个人排行奖励;2-仙盟排名奖励;3-点赞
playerID = curPlayer.GetPlayerID()
awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FamilyGCZAwardState)
if awardState&pow(2, awardType):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 0eeba7b..8dd11aa 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -1744,6 +1744,7 @@
ClientServerMsg_QueryXiangong = "QueryXiangong" # 查看仙宫仙名录
ClientServerMsg_LianqiScore = "LianqiScore" # 炼器积分
ClientServerMsg_SyncFamilyInfo = "SyncFamilyInfo" # 仙盟信息同步
+ClientServerMsg_QueryCrossFamily = "QueryCrossFamily" # 查询跨服仙盟
ClientServerMsg_FamilyGCZ = "FamilyGCZ" # 仙盟攻城战
#跨服广播类型定义
--
Gitblit v1.8.0