From 83ea442cfaceaf76648c6ec948e4494a10e228db Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 12 九月 2024 17:01:40 +0800
Subject: [PATCH] 10261 【越南】【砍树】仙盟徽章,头像框,头像(动态),聊天气泡,聊天表情(增加仙盟徽章)
---
ServerPython/CoreServerGroup/GameServer/PyNetPack.ini | 6
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py | 25 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py | 63 ++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 11
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 63 ++++++
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 11
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyEmblem.py | 200 ++++++++++++++++++++
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py | 35 ++
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetFamilyInfo.py | 87 ++++----
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py | 2
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 4
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyAction.py | 45 ++++
PySysDB/PySysDBG.h | 9
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py | 1
18 files changed, 514 insertions(+), 58 deletions(-)
diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h
index 97a40c6..b9ad138 100644
--- a/PySysDB/PySysDBG.h
+++ b/PySysDB/PySysDBG.h
@@ -39,6 +39,15 @@
BYTE BossFBCnt; //BOSS副本次数
};
+//仙盟徽章表
+
+struct tagFamilyEmblem
+{
+ BYTE _EmblemID; //徽章ID
+ BYTE UnlockFamilyLV; //解锁仙盟等级,为0时代表其他方式解锁
+ DWORD ExpireMinutes; //有效时长,分钟
+};
+
//仙盟试炼伤血奖励表
struct tagFamilyBossHurtAward
diff --git a/ServerPython/CoreServerGroup/GameServer/PyNetPack.ini b/ServerPython/CoreServerGroup/GameServer/PyNetPack.ini
index 512e415..96477c9 100644
--- a/ServerPython/CoreServerGroup/GameServer/PyNetPack.ini
+++ b/ServerPython/CoreServerGroup/GameServer/PyNetPack.ini
@@ -39,7 +39,7 @@
Writer = Alee
Releaser = Alee
RegType = 0
-RegisterPackCount = 9
+RegisterPackCount = 10
PacketCMD_1=0xA4
PacketSubCMD_1=0x01
@@ -77,6 +77,10 @@
PacketSubCMD_9=0x12
PacketCallFunc_9=PySearchFamily
+PacketCMD_10=0xA4
+PacketSubCMD_10=0x13
+PacketCallFunc_10=OnChangeFamilyEmblem
+
[GameWorldFamilyWar]
ScriptName = GameWorldLogic\GameWorldFamilyWar.py
Writer = hxp
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
index 4265437..0f9e00f 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -379,6 +379,58 @@
#------------------------------------------------------
+# A4 13 修改家族徽章 #tagCGChangeFamilyEmblem
+
+class tagCGChangeFamilyEmblem(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("EmblemID", c_ubyte), # 更换的徽章ID
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xA4
+ self.SubCmd = 0x13
+ 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 = 0x13
+ self.EmblemID = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCGChangeFamilyEmblem)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A4 13 修改家族徽章 //tagCGChangeFamilyEmblem:
+ Cmd:%s,
+ SubCmd:%s,
+ EmblemID:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.EmblemID
+ )
+ return DumpString
+
+
+m_NAtagCGChangeFamilyEmblem=tagCGChangeFamilyEmblem()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGChangeFamilyEmblem.Cmd,m_NAtagCGChangeFamilyEmblem.SubCmd))] = m_NAtagCGChangeFamilyEmblem
+
+
+#------------------------------------------------------
# A4 08 查询家族行为信息 #tagCGQueryFamilyAction
class tagCGQueryFamilyAction(Structure):
@@ -712,6 +764,7 @@
Head = tagHead()
Name = "" #(char Name[33])
FakeID = 0 #(WORD FakeID)//假仙盟编号
+ EmblemID = 0 #(BYTE EmblemID)//选择徽章ID,解锁仙盟等级为1级的均为可选ID
data = None
def __init__(self):
@@ -725,6 +778,7 @@
_pos = self.Head.ReadData(_lpData, _pos)
self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
self.FakeID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.EmblemID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
return _pos
def Clear(self):
@@ -734,6 +788,7 @@
self.Head.SubCmd = 0x04
self.Name = ""
self.FakeID = 0
+ self.EmblemID = 0
return
def GetLength(self):
@@ -741,6 +796,7 @@
length += self.Head.GetLength()
length += 33
length += 2
+ length += 1
return length
@@ -749,18 +805,21 @@
data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
data = CommFunc.WriteString(data, 33, self.Name)
data = CommFunc.WriteWORD(data, self.FakeID)
+ data = CommFunc.WriteBYTE(data, self.EmblemID)
return data
def OutputString(self):
DumpString = '''
Head:%s,
Name:%s,
- FakeID:%d
+ FakeID:%d,
+ EmblemID:%d
'''\
%(
self.Head.OutputString(),
self.Name,
- self.FakeID
+ self.FakeID,
+ self.EmblemID
)
return DumpString
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index f208134..4a01742 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -2409,6 +2409,7 @@
WarRank = 0 #(BYTE WarRank)//联赛排名
TotalFightPower = 0 #(DWORD TotalFightPower)//总战力,不足1个亿的部分
TotalFightPowerEx = 0 #(DWORD TotalFightPowerEx)//总战力点,1点=1亿
+ EmblemID = 0 #(BYTE EmblemID)//徽章ID
data = None
def __init__(self):
@@ -2431,6 +2432,7 @@
self.WarRank,_pos = CommFunc.ReadBYTE(_lpData, _pos)
self.TotalFightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
self.TotalFightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.EmblemID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
return _pos
def Clear(self):
@@ -2448,6 +2450,7 @@
self.WarRank = 0
self.TotalFightPower = 0
self.TotalFightPowerEx = 0
+ self.EmblemID = 0
return
def GetLength(self):
@@ -2466,6 +2469,7 @@
length += 1
length += 4
length += 4
+ length += 1
return length
@@ -2485,6 +2489,7 @@
data = CommFunc.WriteBYTE(data, self.WarRank)
data = CommFunc.WriteDWORD(data, self.TotalFightPower)
data = CommFunc.WriteDWORD(data, self.TotalFightPowerEx)
+ data = CommFunc.WriteBYTE(data, self.EmblemID)
return data
def OutputString(self):
@@ -2502,7 +2507,8 @@
JoinAccept:%d,
WarRank:%d,
TotalFightPower:%d,
- TotalFightPowerEx:%d
+ TotalFightPowerEx:%d,
+ EmblemID:%d
'''\
%(
self.FamilyIndex,
@@ -2518,7 +2524,8 @@
self.JoinAccept,
self.WarRank,
self.TotalFightPower,
- self.TotalFightPowerEx
+ self.TotalFightPowerEx,
+ self.EmblemID
)
return DumpString
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetFamilyInfo.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetFamilyInfo.py
index 8454d86..fd72e8a 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetFamilyInfo.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/SetFamilyInfo.py
@@ -17,6 +17,7 @@
#---------------------------------------------------------------------
#"""Version = 2016-06-06 22:00"""
#---------------------------------------------------------------------
+import PlayerFamilyEmblem
import PlayerFamily
import GameWorld
#---------------------------------------------------------------------
@@ -28,7 +29,8 @@
Def_FamilyInfo_FightPower, # 设置家族总战力
Def_FamilyInfo_BossFood, # 设置家族兽粮
Def_FamilyInfo_WeekMissionMoney, # 本周任务资金
-) = range(6)
+Def_FamilyInfo_Emblem, # 徽章
+) = range(7)
#系统提示信息表
Def_MsgDict = {
@@ -38,11 +40,8 @@
Def_FamilyInfo_FightPower:'总战力',
Def_FamilyInfo_BossFood:'兽粮',
Def_FamilyInfo_WeekMissionMoney:'本周任务资金',
- "all":'所有属性',
+ Def_FamilyInfo_Emblem:'设置徽章',
}
-
-#设置全部属性时需要设置的属性类型, 一般用于快速测试用
-Def_SetAllFamilyInfoList = [Def_FamilyInfo_Money]
#---------------------------------------------------------------------
## 执行逻辑
# @param curPlayer 当前玩家
@@ -50,13 +49,14 @@
# @return None
# @remarks 函数详细说明.
def OnExec(curPlayer, cmdList):
- if len(cmdList) != 2:
+ if not cmdList:
helpStr = ""
for index, name in Def_MsgDict.items():
helpStr = helpStr + "%s-%s," % (index, name)
GameWorld.DebugAnswer(curPlayer, 'SetFamilyInfo 类型 数值')
GameWorld.DebugAnswer(curPlayer, '%s' % helpStr)
#GameWorld.DebugAnswer(curPlayer, ' 特殊: SetFamilyInfo all, 数值; 可设置所有战盟属性数值')
+ GameWorld.DebugAnswer(curPlayer, '设置徽章: %s 徽章ID [剩余时间秒]' % Def_FamilyInfo_Emblem)
return
curFamily = curPlayer.GetFamily()
@@ -65,12 +65,13 @@
GameWorld.DebugAnswer(curPlayer, 'SetFamilyInfo 错误 玩家无家族')
return
- funcType, funcValue = cmdList
- infoTypeList = [funcType]
- if funcType == "all":
- infoTypeList = Def_SetAllFamilyInfoList
-
- __SetFamilyInfoValue(curPlayer, curFamily, infoTypeList, funcValue)
+ funcType = cmdList[0]
+ funcValue = cmdList[1] if len(cmdList) > 1 else 0
+
+ if not __SetFamilyInfoValue(curPlayer, curFamily, funcType, funcValue, cmdList):
+ GameWorld.DebugAnswer(curPlayer, '设置家族%s 失败, 数值 = %s'%(Def_MsgDict[funcType], funcValue))
+ return
+
#通知客户端刷新
curFamily.Broadcast_FamilyChange()
#通知地图服务器刷新
@@ -79,44 +80,50 @@
GameWorld.DebugAnswer(curPlayer, '设置家族%s 成功, 数值 = %s'%(Def_MsgDict[funcType], funcValue))
return
-def __SetFamilyInfoValue(curPlayer, curFamily, infoTypeList, funcValue):
+def __SetFamilyInfoValue(curPlayer, curFamily, funcType, funcValue, cmdList):
isLVUP = False
isSort = False
-
- for funcType in infoTypeList:
+
+ if funcType == Def_FamilyInfo_LV:
+ curFamily.SetLV(funcValue)
+ isSort = True
- if funcType == Def_FamilyInfo_LV:
- curFamily.SetLV(funcValue)
- isSort = True
-
- elif funcType == Def_FamilyInfo_Money:
- curFamily.SetMoney(funcValue)
- isLVUP = True
- if funcValue == 0:
- PlayerFamily.SetCurWeekMissionMoney(curFamily, 0)
-
- elif funcType == Def_FamilyInfo_WarRank:
- PlayerFamily.SetFamilyWarRank(curFamily, funcValue)
- isSort = True
-
- elif funcType == Def_FamilyInfo_FightPower:
- PlayerFamily.SetFamilyTotalFightPower(curFamily, funcValue)
- isSort = True
-
- elif funcType == Def_FamilyInfo_BossFood:
- PlayerFamily.SetFamilyBossFood(curFamily, funcValue)
-
- elif funcType == Def_FamilyInfo_WeekMissionMoney:
+ elif funcType == Def_FamilyInfo_Money:
+ curFamily.SetMoney(funcValue)
+ isLVUP = True
+ if funcValue == 0:
PlayerFamily.SetCurWeekMissionMoney(curFamily, 0)
- else:
- GameWorld.DebugAnswer(curPlayer, 'SetFamilyInfo 错误 funcType = %s'%(funcType))
+ elif funcType == Def_FamilyInfo_WarRank:
+ PlayerFamily.SetFamilyWarRank(curFamily, funcValue)
+ isSort = True
+
+ elif funcType == Def_FamilyInfo_FightPower:
+ PlayerFamily.SetFamilyTotalFightPower(curFamily, funcValue)
+ isSort = True
+
+ elif funcType == Def_FamilyInfo_BossFood:
+ PlayerFamily.SetFamilyBossFood(curFamily, funcValue)
+
+ elif funcType == Def_FamilyInfo_WeekMissionMoney:
+ PlayerFamily.SetCurWeekMissionMoney(curFamily, 0)
+
+ elif funcType == Def_FamilyInfo_Emblem:
+ setExpireTimes = None
+ if len(cmdList) > 2:
+ setExpireTimes = cmdList[2]
+ if not PlayerFamilyEmblem.AddFamilyEmblem(curFamily.GetID(), funcValue, setExpireTimes):
+ return
+
+ else:
+ return
+
#自动升级战盟
if isLVUP:
if PlayerFamily.DoFamilyLvUp(curFamily):
isSort = False
if isSort:
PlayerFamily.DoFamilySort()
- return
+ return True
\ No newline at end of file
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
index 6d688c0..4f469c5 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldProcess.py
@@ -98,6 +98,7 @@
import IpyGameDataPY
import PlayerFamilyParty
import PlayerFamilyZhenfa
+import PlayerFamilyEmblem
import GameWorldFamilyWar
import GameWorldArena
import CrossLuckyCloudBuy
@@ -401,6 +402,7 @@
if curMinute % 5 == 0:
PlayerFamily.UpdFamilyTotalFightPower()
PlayerFamilyRedPacket.CheckDelRedpacketData()
+ PlayerFamilyEmblem.CheckExpireEmblem()
return
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
index 2a98b53..348090e 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -62,6 +62,12 @@
("BYTE", "BossFBCnt", 0),
),
+ "FamilyEmblem":(
+ ("BYTE", "EmblemID", 1),
+ ("BYTE", "UnlockFamilyLV", 0),
+ ("DWORD", "ExpireMinutes", 0),
+ ),
+
"FamilyBossHurtAward":(
("BYTE", "AwardType", 1),
("BYTE", "RecordIndex", 1),
@@ -1212,6 +1218,17 @@
def GetNeedMoney(self): return self.attrTuple[4] # 升级需要资金 DWORD
def GetWeekMissionMoneyMax(self): return self.attrTuple[5] # 每周任务最大可获得仙盟资金 DWORD
def GetBossFBCnt(self): return self.attrTuple[6] # BOSS副本次数 BYTE
+
+# 仙盟徽章表
+class IPY_FamilyEmblem():
+
+ def __init__(self):
+ self.attrTuple = None
+ return
+
+ def GetEmblemID(self): return self.attrTuple[0] # 徽章ID BYTE
+ def GetUnlockFamilyLV(self): return self.attrTuple[1] # 解锁仙盟等级,为0时代表其他方式解锁 BYTE
+ def GetExpireMinutes(self): return self.attrTuple[2] # 有效时长,分钟 DWORD
# 仙盟试炼伤血奖励表
class IPY_FamilyBossHurtAward():
@@ -2882,6 +2899,7 @@
self.__LoadFileData("CreateRoleLimitServer", onlyCheck)
self.__LoadFileData("WorldLV", onlyCheck)
self.__LoadFileData("Family", onlyCheck)
+ self.__LoadFileData("FamilyEmblem", onlyCheck)
self.__LoadFileData("FamilyBossHurtAward", onlyCheck)
self.__LoadFileData("FamilyZhenfa", onlyCheck)
self.__LoadFileData("MarketQuery", onlyCheck)
@@ -3217,6 +3235,13 @@
self.CheckLoadData("Family")
return self.ipyFamilyCache[index]
+ def GetFamilyEmblemCount(self):
+ self.CheckLoadData("FamilyEmblem")
+ return self.ipyFamilyEmblemLen
+ def GetFamilyEmblemByIndex(self, index):
+ self.CheckLoadData("FamilyEmblem")
+ return self.ipyFamilyEmblemCache[index]
+
def GetFamilyBossHurtAwardCount(self):
self.CheckLoadData("FamilyBossHurtAward")
return self.ipyFamilyBossHurtAwardLen
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py
index 9dc63bf..8b22ad5 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py
@@ -38,6 +38,7 @@
import PlayerBillboard
import PlayerActBossTrial
import PlayerCompensation
+import PlayerFamilyEmblem
import PlayerFamilyParty
import PlayerFamilySWRH
import PlayerViewCache
@@ -75,9 +76,9 @@
if not family:
return 0
return GetFamilyTotalFightPower(family)
-# 徽章
-def GetFamilyEmblem(curFamily): return curFamily.GetExtra6()
-def SetFamilyEmblem(curFamily, value): return curFamily.SetExtra6(value)
+# 徽章ID
+def GetFamilyEmblemID(curFamily): return curFamily.GetExtra6()
+def SetFamilyEmblemID(curFamily, emblemID): return curFamily.SetExtra6(emblemID)
# 公告修改次数
def GetFamilyBroadcastCnt(curFamily): return curFamily.GetExtra3()
@@ -270,7 +271,7 @@
# @param tick 当前时间
# @return None
# @remarks 函数详细说明.
-def DoCreateFamily(curPlayer, familyName, fakeIndex, tick):
+def DoCreateFamily(curPlayer, familyName, fakeIndex, tick, emblemID=0):
#---验证玩家属性---
curPlayerID = curPlayer.GetPlayerID()
@@ -327,12 +328,16 @@
if curFamily == None:
GameWorld.ErrLog("家族创建数目已满, 创建家族失败", curPlayerID)
return
- GameWorld.Log("创建仙盟: familyID=%s,playerID=%s" % (curFamily.GetID(), curPlayerID))
+ emblemIDList = PlayerFamilyEmblem.GetDefaultFamilyEmblemIDList()
+ if not emblemID or emblemID not in emblemIDList:
+ emblemID = random.choice(emblemIDList) # 从默认徽章中随机选择一个
+ GameWorld.Log("创建仙盟: familyID=%s,playerID=%s,emblemID=%s" % (curFamily.GetID(), curPlayerID, emblemID))
#---创建家族---
curFamily.SetServerID(GameWorld.GetAccIDServerID(curPlayer.GetAccID()))
curFamily.SetCreateTime(GameWorld.GetCurrentDataTimeStr())
curFamily.SetLV(1)
curFamily.SetAcceptJoin(ShareDefine.FamilyAcceptJoin_Agree) #设置收人方式为直接通过申请
+ SetFamilyEmblemID(curFamily, emblemID)
PyDataManager.GetFamilyStoreItemManager().DelFamilyStoreItemAll(curFamily.GetID())
#新创建的仙盟默认设置已处理过合服
@@ -597,6 +602,7 @@
# tagHead Head;
# char Name[33];
# WORD FakeID;
+# BYTE EmblemID; //选择徽章ID,解锁仙盟等级为1级的均为可选ID
#};
## 查看申请帮会的成员信息
# @param index 玩家索引
@@ -607,8 +613,9 @@
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
inputName = clientPack.Name
fakeIndex = clientPack.FakeID
+ emblemID = clientPack.EmblemID
#执行创建家族逻辑
- DoCreateFamily(curPlayer, inputName, fakeIndex, tick)
+ DoCreateFamily(curPlayer, inputName, fakeIndex, tick, emblemID)
#重置查看家族状态(仅创建家族时候重置, 其余状态由MapServer退出事件时重置)
__ClearViewFamilyState(curPlayer)
#玩家离开事件
@@ -744,6 +751,7 @@
totalFightPower = GetFamilyTotalFightPower(family)
familyView.TotalFightPower = totalFightPower % ChConfig.Def_PerPointValue
familyView.TotalFightPowerEx = totalFightPower / ChConfig.Def_PerPointValue
+ familyView.EmblemID = GetFamilyEmblemID(family)
return familyView
## 玩家模糊查询家族,0F 0D封包
@@ -824,6 +832,19 @@
break
familyViewPack.PageCount = len(familyViewPack.Family)
NetPackCommon.SendFakePack(curPlayer, familyViewPack)
+ return
+
+#// A4 13 修改家族徽章 #tagCGChangeFamilyEmblem
+#
+#struct tagCGChangeFamilyEmblem
+#{
+# tagHead Head;
+# BYTE EmblemID; // 更换的徽章ID
+#};
+def OnChangeFamilyEmblem(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ changeEmblemID = clientData.EmblemID
+ PlayerFamilyEmblem.OnChangeFamilyEmblem(curPlayer, changeEmblemID)
return
#class IPY_CFamilyChangeBroadcast
@@ -3774,7 +3795,7 @@
fightPower = GetFamilyTotalFightPower(curFamily)
value1 = fightPower / ChConfig.Def_PerPointValue
value2 = fightPower % ChConfig.Def_PerPointValue
- value3 = GetFamilyEmblem(curFamily)
+ value3 = GetFamilyEmblemID(curFamily)
value4 = curFamily.GetLV()
value5 = curFamily.GetServerID()
return {"id":familyID, "name":name, "id2":id2, "name2":name2, "value1":value1, "value2":value2,
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyAction.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyAction.py
index 356f27f..0528290 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyAction.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyAction.py
@@ -557,6 +557,51 @@
return
+def SendFamilyAction(familyActionData, curPlayer=None):
+
+ familyID = familyActionData.GetFamilyId()
+
+ actionInfoPack = ChPyNetSendPack.tagGCFamilyActionInfo()
+ actionInfoPack.Clear()
+ actionInfoPack.FamilyID = familyID
+ actionInfoPack.ActionType = familyActionData.GetActionType()
+ actionInfoPack.FamilyActionList = []
+
+ actionData = ChPyNetSendPack.tagGCFamilyAction()
+ actionData.Clear()
+ actionData.Time = familyActionData.GetTime()
+ actionData.Name = familyActionData.GetName()
+ actionData.NameLen = len(actionData.Name)
+ actionData.Value1 = familyActionData.GetValue1()
+ actionData.Value2 = familyActionData.GetValue2()
+ actionData.Value3 = familyActionData.GetValue3()
+ actionData.Value4 = familyActionData.GetValue4()
+ actionData.Value5 = familyActionData.GetValue5()
+ actionData.Value6 = familyActionData.GetValue6()
+ actionData.UseData = familyActionData.GetUseData()
+ actionData.UseDataLen = len(actionData.UseData)
+ actionInfoPack.FamilyActionList.append(actionData)
+
+ actionInfoPack.Count = len(actionInfoPack.FamilyActionList)
+
+ if curPlayer:
+ NetPackCommon.SendFakePack(curPlayer, actionInfoPack)
+ return
+
+ # 没有指定玩家的情况下通知全战盟
+ family = GameWorld.GetFamilyManager().FindFamily(familyID)
+ if not family:
+ return
+
+ for index in xrange(family.GetCount()):
+ curMember = family.GetAt(index)
+ curPlayer = curMember.GetPlayer()
+ #不在线
+ if curPlayer == None:
+ continue
+ NetPackCommon.SendFakePack(curPlayer, actionInfoPack)
+
+ return
## 删除时机: 1-降为普通成员;2-退出家族
def DelFamilyOfficerModelEquip(familyID, delPlayerID):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyEmblem.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyEmblem.py
new file mode 100644
index 0000000..da087bb
--- /dev/null
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyEmblem.py
@@ -0,0 +1,200 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package PlayerFamilyEmblem
+#
+# @todo:仙盟徽章
+# @author hxp
+# @date 2024-09-09
+# @version 1.0
+#
+# 详细描述: 仙盟徽章
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2024-09-09 15:30"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+import ShareDefine
+import PlayerFamilyAction
+import IpyGameDataPY
+import PlayerFamily
+
+import random
+import time
+
+def GetActionEmblemID(emblemActionObj): return emblemActionObj.GetValue1()
+def SetActionEmblemID(emblemActionObj, emblemID): return emblemActionObj.SetValue1(emblemID)
+def GetActionEmblemExpireTimes(emblemActionObj): return emblemActionObj.GetValue2()
+def SetActionEmblemExpireTimes(emblemActionObj, endTime): return emblemActionObj.SetValue2(endTime)
+
+def GetDefaultFamilyEmblemIDList():
+ ## 获取默认的仙盟徽章ID列表,即所有解锁等级为1的徽章ID
+ defaultEmblemIDList = []
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ for index in range(ipyDataMgr.GetFamilyEmblemCount()):
+ ipyData = ipyDataMgr.GetFamilyEmblemByIndex(index)
+ emblemID = ipyData.GetEmblemID()
+ if ipyData.GetUnlockFamilyLV() == 1:
+ defaultEmblemIDList.append(emblemID)
+ return defaultEmblemIDList
+
+def CheckExpireEmblem():
+ ## 检查过期的勋章
+
+ defaultEmblemIDList = []
+ curTime = int(time.time())
+ actionType = ShareDefine.Def_ActionType_FamilyEmblem
+ familyManager = GameWorld.GetFamilyManager()
+ familyActionMgr = GameWorld.GetFamilyActionManager()
+ for i in xrange(familyManager.GetCount()):
+ family = familyManager.GetAt(i)
+ if not family:
+ continue
+ familyID = family.GetID()
+ familyAction = familyActionMgr.GetFamilyAction(familyID, actionType)
+ for index in range(familyAction.Count())[::-1]: # 可能触发删除,倒序遍历
+ emblemActionObj = familyAction.At(index)
+ emblemID = GetActionEmblemID(emblemActionObj)
+ isExpired, endTime = IsEmblemExpired(emblemActionObj, curTime)
+ if not isExpired:
+ #GameWorld.Log("检查仙盟徽章未过期! familyID=%s,emblemID=%s,endTime=%s" % (familyID, emblemID, endTime))
+ continue
+ familyAction.DelAction(index)
+ GameWorld.Log("删除过期仙盟徽章! familyID=%s,emblemID=%s,endTime=%s" % (familyID, emblemID, endTime))
+ if PlayerFamily.GetFamilyEmblemID(family) == emblemID:
+ if not defaultEmblemIDList:
+ defaultEmblemIDList = GetDefaultFamilyEmblemIDList()
+ updEmblemID = random.choice(defaultEmblemIDList) if defaultEmblemIDList else 0
+ GameWorld.Log("仙盟佩戴徽章过期恢复随机默认徽章! familyID=%s,emblemID=%s,endTime=%s,updEmblemID=%s" % (familyID, emblemID, endTime, updEmblemID))
+ PlayerFamily.SetFamilyEmblemID(family, updEmblemID)
+ family.Broadcast_FamilyChange()
+ return
+
+def IsEmblemExpired(emblemActionObj, curTime):
+ ## 勋章是否过期
+ # @return: 是否过期, endTime
+
+ endTime = -1
+ if not emblemActionObj:
+ return True, endTime
+
+ createTime = emblemActionObj.GetTime()
+ expireTimes = GetEmblemExpireTimes(emblemActionObj)
+ if expireTimes == 0:
+ # 永久的
+ return False, 0
+
+ if expireTimes > 0:
+ endTime = createTime + expireTimes
+ if endTime >= curTime:
+ # 未过期
+ return False, endTime
+
+ return True, endTime
+
+def GetEmblemExpireTimes(emblemActionObj):
+ ## 获取勋章有效时长,秒
+ # @return: 0-永久;-1-无效;>0-有效秒数
+ expireTimes = GetActionEmblemExpireTimes(emblemActionObj) # 有效时长,秒
+ if not expireTimes:
+ emblemID = GetActionEmblemID(emblemActionObj)
+ ipyData = IpyGameDataPY.GetIpyGameData("FamilyEmblem", emblemID)
+ if not ipyData:
+ return -1
+ expireTimes = ipyData.GetExpireMinutes() * 60
+ return expireTimes
+
+def GetFamilyEmblemActionData(familyID, emblemID):
+ ## 获取仙盟时效徽章Action数据
+ actionType = ShareDefine.Def_ActionType_FamilyEmblem
+ familyAction = GameWorld.GetFamilyActionManager().GetFamilyAction(familyID, actionType)
+ for index in range(familyAction.Count()):
+ familyActionObj = familyAction.At(index)
+ if emblemID == familyActionObj.GetValue1():
+ return familyActionObj
+ return
+
+def AddFamilyEmblem(familyID, emblemID, setExpireTimes=None):
+ ## 添加仙盟徽章
+ # @param setExpireTimes: 指定的有效时长秒,0-永久,>0-有效时长秒;没有指定时直接读配置进行累加
+
+ ipyData = IpyGameDataPY.GetIpyGameData("FamilyEmblem", emblemID)
+ if not ipyData:
+ return
+ unlockFamilyLV = ipyData.GetUnlockFamilyLV()
+ if unlockFamilyLV:
+ GameWorld.Log("仙盟解锁的徽章不需要添加! familyID=%s,emblemID=%s" % (familyID, emblemID))
+ return
+ if setExpireTimes >= 0:
+ expireTimes = setExpireTimes
+ else:
+ expireTimes = ipyData.GetExpireMinutes() * 60
+ GameWorld.Log("添加仙盟徽章! familyID=%s,emblemID=%s,setExpireTimes=%s,expireTimes=%s"
+ % (familyID, emblemID, setExpireTimes, expireTimes))
+
+ curTime = int(time.time())
+ emblemActionObj = GetFamilyEmblemActionData(familyID, emblemID)
+ if not emblemActionObj:
+ actionType = ShareDefine.Def_ActionType_FamilyEmblem
+ familyAction = GameWorld.GetFamilyActionManager().GetFamilyAction(familyID, actionType)
+ emblemActionObj = familyAction.AddAction()
+ emblemActionObj.SetTime(curTime)
+ emblemActionObj.SetFamilyId(familyID)
+ emblemActionObj.SetActionType(actionType)
+ else:
+ isExpired, endTime = IsEmblemExpired(emblemActionObj, curTime)
+ if setExpireTimes >= 0:
+ emblemActionObj.SetTime(curTime)
+ GameWorld.Log("直接设置勋章剩余时长,重新设置获得时间! familyID=%s,emblemID=%s" % (familyID, emblemID))
+ elif isExpired:
+ emblemActionObj.SetTime(curTime)
+ GameWorld.Log("获得勋章时已过期,重新设置获得时间! familyID=%s,emblemID=%s,endTime=%s" % (familyID, emblemID, endTime))
+ else:
+ # 未过期,非永久的直接累加时长
+ if expireTimes > 0:
+ expireTimes += GetActionEmblemExpireTimes(emblemActionObj)
+ GameWorld.Log("获得勋章时未过期,累加有效时长! familyID=%s,emblemID=%s,expireTimes=%s" % (familyID, emblemID, expireTimes))
+
+ SetActionEmblemID(emblemActionObj, emblemID)
+ SetActionEmblemExpireTimes(emblemActionObj, expireTimes)
+
+ # 通知
+ PlayerFamilyAction.SendFamilyAction(emblemActionObj)
+ return emblemActionObj
+
+def OnChangeFamilyEmblem(curPlayer, emblemID):
+ ## 修改仙盟徽章
+ playerID = curPlayer.GetPlayerID()
+ curFamily = curPlayer.GetFamily()
+ if not curFamily:
+ return
+ familyID = curFamily.GetID()
+
+ if curFamily.GetLeaderID() != playerID:
+ GameWorld.DebugLog("只有盟主可以修改徽章!", playerID)
+ return
+
+ ipyData = IpyGameDataPY.GetIpyGameData("FamilyEmblem", emblemID)
+ if not ipyData:
+ return
+ unlockFamilyLV = ipyData.GetUnlockFamilyLV()
+
+ if unlockFamilyLV:
+ if curFamily.GetLV() < unlockFamilyLV:
+ GameWorld.DebugLog("仙盟等级不足,无法使用该徽章! emblemID=%s,unlockFamilyLV=%s"
+ % (emblemID, unlockFamilyLV), playerID)
+ return
+ else:
+ emblemActionObj = GetFamilyEmblemActionData(familyID, emblemID)
+ isExpired, endTime = IsEmblemExpired(emblemActionObj, int(time.time()))
+ if isExpired:
+ GameWorld.DebugLog("该徽章不存在或已过期! emblemID=%s,endTime=%s" % (emblemID, endTime), playerID)
+ return
+
+ GameWorld.DebugLog("更换仙盟徽章! familyID=%s,emblemID=%s" % (familyID, emblemID), playerID)
+ PlayerFamily.SetFamilyEmblemID(curFamily, emblemID)
+ PlayerFamily.SendPack_MapServer_PlayerFamilyRefresh(curFamily)
+ curFamily.Broadcast_FamilyChange()
+ return
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index 048b2f1..8ba4720 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -1483,7 +1483,8 @@
Def_ActionType_FamilyEvent, #记录家族事件12
Def_ActionType_BossTrialSubmit, #boss凭证提交 13
Def_ActionType_FamilyCTGAssist, #仙盟充值协助活动 14
- ) = range(0, 15)
+ Def_ActionType_FamilyEmblem, #仙盟时效徽章信息 15
+ ) = range(0, 16)
# 家族行为事件类型定义; Def_ActionType_FamilyEvent; 存与事件记录Value1
# 通用:time-时间;name-玩家;value1-事件类型
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index b0f48ea..4e66f6a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3637,6 +3637,7 @@
Def_Player_Dict_UpdateFamilyName = "UpdateFamilyName" # 改名锁
Def_Player_Dict_FamilyDayAward = "FamilyDayAward" # 仙盟每日奖励领奖记录
Def_Player_Dict_FamilyMoneyDonateCount = "FamilyMoneyDonateCount" # 仙盟今日货币捐献次数
+Def_Player_Dict_FamilyEmblemID = "FamilyEmblemID" # 仙盟徽章ID
# 仙盟事务
Def_Player_Dict_FamilyAffairRefreshFree = "FamilyAffairRefreshFree" # 今日已免费刷新事务次数
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index 4265437..0f9e00f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -379,6 +379,58 @@
#------------------------------------------------------
+# A4 13 修改家族徽章 #tagCGChangeFamilyEmblem
+
+class tagCGChangeFamilyEmblem(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("EmblemID", c_ubyte), # 更换的徽章ID
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xA4
+ self.SubCmd = 0x13
+ 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 = 0x13
+ self.EmblemID = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCGChangeFamilyEmblem)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A4 13 修改家族徽章 //tagCGChangeFamilyEmblem:
+ Cmd:%s,
+ SubCmd:%s,
+ EmblemID:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.EmblemID
+ )
+ return DumpString
+
+
+m_NAtagCGChangeFamilyEmblem=tagCGChangeFamilyEmblem()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGChangeFamilyEmblem.Cmd,m_NAtagCGChangeFamilyEmblem.SubCmd))] = m_NAtagCGChangeFamilyEmblem
+
+
+#------------------------------------------------------
# A4 08 查询家族行为信息 #tagCGQueryFamilyAction
class tagCGQueryFamilyAction(Structure):
@@ -712,6 +764,7 @@
Head = tagHead()
Name = "" #(char Name[33])
FakeID = 0 #(WORD FakeID)//假仙盟编号
+ EmblemID = 0 #(BYTE EmblemID)//选择徽章ID,解锁仙盟等级为1级的均为可选ID
data = None
def __init__(self):
@@ -725,6 +778,7 @@
_pos = self.Head.ReadData(_lpData, _pos)
self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
self.FakeID,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.EmblemID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
return _pos
def Clear(self):
@@ -734,6 +788,7 @@
self.Head.SubCmd = 0x04
self.Name = ""
self.FakeID = 0
+ self.EmblemID = 0
return
def GetLength(self):
@@ -741,6 +796,7 @@
length += self.Head.GetLength()
length += 33
length += 2
+ length += 1
return length
@@ -749,18 +805,21 @@
data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
data = CommFunc.WriteString(data, 33, self.Name)
data = CommFunc.WriteWORD(data, self.FakeID)
+ data = CommFunc.WriteBYTE(data, self.EmblemID)
return data
def OutputString(self):
DumpString = '''
Head:%s,
Name:%s,
- FakeID:%d
+ FakeID:%d,
+ EmblemID:%d
'''\
%(
self.Head.OutputString(),
self.Name,
- self.FakeID
+ self.FakeID,
+ self.EmblemID
)
return DumpString
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index f208134..4a01742 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -2409,6 +2409,7 @@
WarRank = 0 #(BYTE WarRank)//联赛排名
TotalFightPower = 0 #(DWORD TotalFightPower)//总战力,不足1个亿的部分
TotalFightPowerEx = 0 #(DWORD TotalFightPowerEx)//总战力点,1点=1亿
+ EmblemID = 0 #(BYTE EmblemID)//徽章ID
data = None
def __init__(self):
@@ -2431,6 +2432,7 @@
self.WarRank,_pos = CommFunc.ReadBYTE(_lpData, _pos)
self.TotalFightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
self.TotalFightPowerEx,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+ self.EmblemID,_pos = CommFunc.ReadBYTE(_lpData, _pos)
return _pos
def Clear(self):
@@ -2448,6 +2450,7 @@
self.WarRank = 0
self.TotalFightPower = 0
self.TotalFightPowerEx = 0
+ self.EmblemID = 0
return
def GetLength(self):
@@ -2466,6 +2469,7 @@
length += 1
length += 4
length += 4
+ length += 1
return length
@@ -2485,6 +2489,7 @@
data = CommFunc.WriteBYTE(data, self.WarRank)
data = CommFunc.WriteDWORD(data, self.TotalFightPower)
data = CommFunc.WriteDWORD(data, self.TotalFightPowerEx)
+ data = CommFunc.WriteBYTE(data, self.EmblemID)
return data
def OutputString(self):
@@ -2502,7 +2507,8 @@
JoinAccept:%d,
WarRank:%d,
TotalFightPower:%d,
- TotalFightPowerEx:%d
+ TotalFightPowerEx:%d,
+ EmblemID:%d
'''\
%(
self.FamilyIndex,
@@ -2518,7 +2524,8 @@
self.JoinAccept,
self.WarRank,
self.TotalFightPower,
- self.TotalFightPowerEx
+ self.TotalFightPowerEx,
+ self.EmblemID
)
return DumpString
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index 9581a1b..72d55c4 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -7253,6 +7253,10 @@
def GetAttr160(curPlayer): return 0
def SetAttr160(curPlayer, value): pass
+# 仙盟徽章ID
+def GetFamilyEmblemID(curPlayer): return curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyEmblemID)
+def SetFamilyEmblemID(curPlayer, emblemID): NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyEmblemID, emblemID)
+
# 仙盟事务速度加成
def GetAffairSpeedPer(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AffairSpeedPer)
def SetAffairSpeedPer(curPlayer, value): curPlayer.SetDict(ChConfig.Def_PlayerKey_AffairSpeedPer, value)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
index 24c06c9..cd82528 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
@@ -127,6 +127,9 @@
if curPlayer.GetFamilyLastWeekActiveValue() != refreshPack.GetLastWeekFamilyActiveValue():
curPlayer.SetFamilyLastWeekActiveValue(refreshPack.GetLastWeekFamilyActiveValue())
+ if hasattr(refreshPack, "GetExtra6") and PlayerControl.GetFamilyEmblemID(curPlayer) != refreshPack.GetExtra6():
+ PlayerControl.SetFamilyEmblemID(curPlayer, refreshPack.GetExtra6())
+
#---处理特殊逻辑, 进入退出家族---
if lastFamilyID != 0 and curPlayer.GetFamilyID() == 0:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
index 6ea032f..c102e68 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
@@ -171,6 +171,7 @@
curPlayerPropDict["Name"] = curPlayer.GetPlayerName()
curPlayerPropDict["FamilyID"] = curPlayer.GetFamilyID()
curPlayerPropDict["FamilyName"] = curPlayer.GetFamilyName()
+ curPlayerPropDict["FamilyEmblemID"] = PlayerControl.GetFamilyEmblemID(curPlayer)
curPlayerPropDict["TitleID"] = PlayerControl.GetTitleID(curPlayer)
curPlayerPropDict["CoupleName"] = PlayerControl.GetCoupleName(curPlayer)
curPlayerPropDict["FightPower"] = PlayerControl.GetFightPower(curPlayer)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 048b2f1..8ba4720 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -1483,7 +1483,8 @@
Def_ActionType_FamilyEvent, #记录家族事件12
Def_ActionType_BossTrialSubmit, #boss凭证提交 13
Def_ActionType_FamilyCTGAssist, #仙盟充值协助活动 14
- ) = range(0, 15)
+ Def_ActionType_FamilyEmblem, #仙盟时效徽章信息 15
+ ) = range(0, 16)
# 家族行为事件类型定义; Def_ActionType_FamilyEvent; 存与事件记录Value1
# 通用:time-时间;name-玩家;value1-事件类型
--
Gitblit v1.8.0