10367 【越南】【英语】【BT】【砍树】仙盟攻城战-服务端(奖励增加支持仙官;优化称号、仙官、膜拜关联逻辑及配置;支持物品激活仙盟徽章;C026C028增加Job信息;)
15个文件已修改
1个文件已添加
238 ■■■■■ 已修改文件
PySysDB/PySysDBG.h 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GMT_GetFamilyByServerID.py 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossFamilyGCZ.py 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameXiangong.py 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyEmblem.py 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_FamilyEmblem.py 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PySysDB/PySysDBG.h
@@ -424,6 +424,18 @@
    BYTE        LimitVIPLV;    //需要VIP等级
};
//物品表
struct tagChinItem
{
    DWORD        _ItemID;    //物品ID
    BYTE        ItemType;    //物品类型
    DWORD        Effect1;    //道具使用效果1
    DWORD        EffectValueA1;    //效果1的a值
    DWORD        EffectValueB1;    //效果1的b值
    DWORD        EffectValueC1;    //效果1的c值
};
//NPC表
struct tagChinNPC
@@ -1587,6 +1599,8 @@
    DWORD        TitleID;    //称号ID
    list        AwardItemList;    //晋级仙宫奖励物品列表
    char        MailKey;    //仙官通知邮件
    BYTE        WorshipType;    //膜拜类型
    DWORD        WorshipValue;    //膜拜值
};
//缥缈仙域表
ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
@@ -462,7 +462,7 @@
Def_Billboard_MaxCnt = 100
#---------------------------------------------------------------------
#请求类型(需要和MapServer中的一致)
Def_QueryType_Count = 55
Def_QueryType_Count = 56
(
queryType_sqtPlayer,                  #查询玩家
queryType_sqtFamilyWar,               #家族战
@@ -519,6 +519,7 @@
queryType_EnterFB,                    #进入副本
queryType_NPCInfo,                    #查询NPCInfo
queryType_NPCCnt,                     #查询NPC数量
queryType_FamilyEmblem,               #仙盟徽章
) = range(0, Def_QueryType_Count)
#------------------------------------------------------------------------------ 
#家族某行为类型保存的条数
@@ -925,3 +926,8 @@
                   ShareDefine.TYPE_Price_FamilyFlagWarPoint:Def_ItemID_FamilyFlagWarPoint,
                   }
#写死的物品类型都放这边
Def_ItemType_Title = 4           #称号
#写死的物品效果ID都放这边------请按数值顺序存放
Def_Effect_AddDienstgrad = 204   #使用物品获得称号
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -19460,6 +19460,7 @@
class  tagGCFamilyGCZBatScenePlayer(Structure):
    PlayerID = 0    #(DWORD PlayerID)
    Name = ""    #(char Name[33])
    Job = 0    #(BYTE Job)
    Face = 0    #(DWORD Face)
    FacePic = 0    #(DWORD FacePic)
    data = None
@@ -19472,6 +19473,7 @@
        self.Clear()
        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
@@ -19479,6 +19481,7 @@
    def Clear(self):
        self.PlayerID = 0
        self.Name = ""
        self.Job = 0
        self.Face = 0
        self.FacePic = 0
        return
@@ -19487,6 +19490,7 @@
        length = 0
        length += 4
        length += 33
        length += 1
        length += 4
        length += 4
@@ -19496,6 +19500,7 @@
        data = ''
        data = CommFunc.WriteDWORD(data, self.PlayerID)
        data = CommFunc.WriteString(data, 33, self.Name)
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        return data
@@ -19504,12 +19509,14 @@
        DumpString = '''
                                PlayerID:%d,
                                Name:%s,
                                Job:%d,
                                Face:%d,
                                FacePic:%d
                                '''\
                                %(
                                self.PlayerID,
                                self.Name,
                                self.Job,
                                self.Face,
                                self.FacePic
                                )
@@ -19800,6 +19807,7 @@
    PlayerID = 0    #(DWORD PlayerID)
    Name = ""    #(char Name[33])//参与玩家名字
    FamilyLV = 0    #(BYTE FamilyLV)//参与时的家族职位
    Job = 0    #(BYTE Job)
    Face = 0    #(DWORD Face)//基本脸型
    FacePic = 0    #(DWORD FacePic)//头像框
    FightPower = 0    #(DWORD FightPower)//战力,求余亿部分
@@ -19821,6 +19829,7 @@
        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.FamilyLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
@@ -19837,6 +19846,7 @@
        self.PlayerID = 0
        self.Name = ""
        self.FamilyLV = 0
        self.Job = 0
        self.Face = 0
        self.FacePic = 0
        self.FightPower = 0
@@ -19853,6 +19863,7 @@
        length = 0
        length += 4
        length += 33
        length += 1
        length += 1
        length += 4
        length += 4
@@ -19872,6 +19883,7 @@
        data = CommFunc.WriteDWORD(data, self.PlayerID)
        data = CommFunc.WriteString(data, 33, self.Name)
        data = CommFunc.WriteBYTE(data, self.FamilyLV)
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        data = CommFunc.WriteDWORD(data, self.FightPower)
@@ -19889,6 +19901,7 @@
                                PlayerID:%d,
                                Name:%s,
                                FamilyLV:%d,
                                Job:%d,
                                Face:%d,
                                FacePic:%d,
                                FightPower:%d,
@@ -19904,6 +19917,7 @@
                                self.PlayerID,
                                self.Name,
                                self.FamilyLV,
                                self.Job,
                                self.Face,
                                self.FacePic,
                                self.FightPower,
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GMT_GetFamilyByServerID.py
@@ -23,15 +23,19 @@
def OnExec(orderId, gmCmdDict):
    serverIDList = eval(gmCmdDict.get("serverIDList", '[]')) 
    queryCnt = GameWorld.ToIntDef(gmCmdDict.get("queryCnt", '0')  , 100)
    GameWorld.DebugLog("GMT_GetFamilyByServerID queryCnt=%s, %s, %s" % (queryCnt, serverIDList, gmCmdDict))
    page = GameWorld.ToIntDef(gmCmdDict.get("page", '0')  , 1)
    queryCnt = min(queryCnt, 100)
    GameWorld.DebugLog("GMT_GetFamilyByServerID queryCnt=%s,page=%s, %s, %s" % (queryCnt, page, serverIDList, gmCmdDict))
    
    isCrossServer = GameWorld.IsCrossServer()
    familyMgr = GameWorld.GetFamilyManager()
    if isCrossServer:
        sortFamilyIDList, totalCnt = PlayerFamily.SortCrossFamily(serverIDList, queryCnt)
        sortFamilyIDList, totalCnt = PlayerFamily.SortCrossFamily(serverIDList, queryCnt, page)
    else:
        sortFamilyIDList = PlayerFamily.GetSortFamilyIDList()
        totalCnt = len(sortFamilyIDList)
        startIndex = (page - 1) * queryCnt
        sortFamilyIDList = sortFamilyIDList[startIndex:startIndex + queryCnt], totalCnt
        
    retCnt = 0
    familyList = []
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossFamilyGCZ.py
@@ -28,6 +28,7 @@
import NetPackCommon
import PyDataManager
import PlayerControl
import GameXiangong
import PyGameData
import ChConfig
import ChPlayer
@@ -2262,6 +2263,7 @@
        scenePlayer = ChPyNetSendPack.tagGCFamilyGCZBatScenePlayer()
        scenePlayer.PlayerID = playerID
        scenePlayer.Name = joinMember.playerName
        scenePlayer.Job = joinMember.job
        scenePlayer.Face = joinMember.face
        scenePlayer.FacePic = joinMember.facePic
        clientPack.PlayerInfoList.append(scenePlayer)
@@ -2545,6 +2547,9 @@
        return
    
    __clientServer_GetAward_Ret(zoneID, playerID, serverGroupID, actID, awardType, billRank, playerAwardItemList)
    serverIDList = actInfo.get(ShareDefine.ActKey_ServerIDRangeList, [])
    GameXiangong.AddXiangongPlayerByItem(playerAwardItemList, playerID, serverIDList, billRank)
    return
def __clientServer_GetAward_Ret(zoneID, playerID, serverGroupID, actID, awardType, awardValue, awardItemList):
@@ -2616,6 +2621,9 @@
                paramList = [billRank]
                PlayerCompensation.SendMailByKey("FamilyGCZAwardHurt", [playerID], playerAwardItemList, paramList, crossMail=True)
                
                serverIDList = ipyData.GetServerIDRangeList()
                GameXiangong.AddXiangongPlayerByItem(playerAwardItemList, playerID, serverIDList, billRank)
        # 仙盟积分名次奖励
        if not joinMember.awardState&pow(2, AwwardType_FamilyScore):
            joinMember.awardState = joinMember.awardState | pow(2, AwwardType_FamilyScore)
@@ -2628,6 +2636,9 @@
            if playerAwardItemList:
                paramList = [billRank]
                PlayerCompensation.SendMailByKey("FamilyGCZAwardScore", [playerID], playerAwardItemList, paramList, crossMail=True)
                serverIDList = ipyData.GetServerIDRangeList()
                GameXiangong.AddXiangongPlayerByItem(playerAwardItemList, playerID, serverIDList, billRank)
                
        # 竞猜奖励
        if not joinMember.awardState&pow(2, AwwardType_Guess):
@@ -2917,6 +2928,7 @@
        defMem.PlayerID = playerID
        defMem.Name = joinMember.playerName
        defMem.FamilyLV = joinMember.fmLV
        defMem.Job = joinMember.job
        defMem.Face = joinMember.face
        defMem.FacePic = joinMember.facePic
        defMem.FightPower = joinMember.fightPower % ChConfig.Def_PerPointValue
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameXiangong.py
@@ -15,6 +15,7 @@
#"""Version = 2024-09-04 16:30"""
#-------------------------------------------------------------------------------
import GameWorship
import ShareDefine
import PyDataManager
import NetPackCommon
@@ -54,6 +55,58 @@
            return True
    return False
def AddXiangongPlayerByItem(awardItemList, playerID, serverIDList, rank=None):
    ## 根据奖励的物品信息自动发放仙官,仅跨服服务器
    if not GameWorld.IsCrossServer():
        return
    titleID, titleItemID = 0, 0
    for itemInfo in awardItemList:
        itemID = itemInfo[0]
        ipyData = IpyGameDataPY.GetIpyGameData("ChinItem", itemID)
        if not ipyData:
            continue
        itemType = ipyData.GetItemType()
        if itemType != ChConfig.Def_ItemType_Title:
            continue
        effID = ipyData.GetEffect1()
        if effID != ChConfig.Def_Effect_AddDienstgrad:
            continue
        titleID = ipyData.GetEffectValueA1()
        titleItemID = itemID
        break
    if not titleID:
        GameWorld.DebugLog("奖励没有给称号,不用处理称号仙官! %s" % str(awardItemList), playerID)
        return
    xiangongID = GetTitleXiangongID(titleID)
    if not xiangongID:
        GameWorld.DebugLog("奖励的称号没有对应仙官不处理! titleItemID=%s,titleID=%s" % (titleItemID, titleID), playerID)
        return
    GameWorld.Log("根据奖励称号物品晋升仙官: titleItemID=%s,titleID=%s,xiangongID=%s" % (titleItemID, titleID, xiangongID), playerID)
    AddXiangongPlayer(xiangongID, playerID, serverIDList, rank)
    return
def GetTitleXiangongID(titleID):
    ## 获取称号对应的仙宫ID
    TitleXiangongIDDict = IpyGameDataPY.GetConfigEx("TitleXiangongID")
    if not TitleXiangongIDDict:
        TitleXiangongIDDict = {}
        ipyDataMgr = IpyGameDataPY.IPY_Data()
        for index in range(ipyDataMgr.GetXiangongCount()):
            ipyData = ipyDataMgr.GetXiangongByIndex(index)
            xiangongID = ipyData.GetXiangongID()
            tID = ipyData.GetTitleID()
            if not tID:
                continue
            TitleXiangongIDDict[tID] = xiangongID
        IpyGameDataPY.SetConfigEx("TitleXiangongID", TitleXiangongIDDict)
        GameWorld.Log("加载称号ID对应仙宫ID: %s" % TitleXiangongIDDict)
    return TitleXiangongIDDict.get(titleID, 0)
def AddXiangongPlayer(xiangongID, playerID, serverIDList, rank=None, syncDict=None):
    ## 添加新晋仙官玩家
    if not xiangongID:
@@ -85,11 +138,19 @@
        paramList = [rank, titleID, addQiyun]
        PlayerCompensation.SendMailByKey(ipyData.GetMailKey(), [playerID], addItemList, paramList, crossMail=True)
        
    # 同步激活膜拜
    worshipType = ipyData.GetWorshipType()
    worshipValue = ipyData.GetWorshipValue()
    if worshipType:
        GameWorship.AddWorshipPlayer(worshipType, worshipValue, playerID, serverIDList)
    if isinstance(syncDict, dict):
        if xiangongID not in syncDict:
            syncDict[xiangongID] = []
        newRecDataList = syncDict[xiangongID]
        newRecDataList.append(recData)
    else:
        SendNewXiangongPlayerToClientServer({xiangongID:[recData]})
    return
def SendNewXiangongPlayerToClientServer(syncDict):
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -351,6 +351,15 @@
                        ("BYTE", "LimitVIPLV", 0),
                        ),
                "ChinItem":(
                        ("DWORD", "ItemID", 1),
                        ("BYTE", "ItemType", 0),
                        ("DWORD", "Effect1", 0),
                        ("DWORD", "EffectValueA1", 0),
                        ("DWORD", "EffectValueB1", 0),
                        ("DWORD", "EffectValueC1", 0),
                        ),
                "ChinNPC":(
                        ("DWORD", "NPCID", 1),
                        ("char", "NPCName", 0),
@@ -1262,6 +1271,8 @@
                        ("DWORD", "TitleID", 0),
                        ("list", "AwardItemList", 0),
                        ("char", "MailKey", 0),
                        ("BYTE", "WorshipType", 0),
                        ("DWORD", "WorshipValue", 0),
                        ),
                "FairyDomain":(
@@ -1769,6 +1780,20 @@
    def GetLimitMagicWeapon(self): return self.attrTuple[2] # 需要解锁法宝ID DWORD
    def GetLimiRealmLV(self): return self.attrTuple[3] # 需要境界等级 WORD
    def GetLimitVIPLV(self): return self.attrTuple[4] # 需要VIP等级 BYTE
# 物品表
class IPY_ChinItem():
    def __init__(self):
        self.attrTuple = None
        return
    def GetItemID(self): return self.attrTuple[0] # 物品ID DWORD
    def GetItemType(self): return self.attrTuple[1] # 物品类型 BYTE
    def GetEffect1(self): return self.attrTuple[2] # 道具使用效果1 DWORD
    def GetEffectValueA1(self): return self.attrTuple[3] # 效果1的a值 DWORD
    def GetEffectValueB1(self): return self.attrTuple[4] # 效果1的b值 DWORD
    def GetEffectValueC1(self): return self.attrTuple[5] # 效果1的c值 DWORD
# NPC表
class IPY_ChinNPC():
@@ -3096,7 +3121,9 @@
    def GetMoneyValue(self): return self.attrTuple[3] # 货币值 DWORD
    def GetTitleID(self): return self.attrTuple[4] # 称号ID DWORD
    def GetAwardItemList(self): return self.attrTuple[5] # 晋级仙宫奖励物品列表 list
    def GetMailKey(self): return self.attrTuple[6] # 仙官通知邮件 char
    def GetMailKey(self): return self.attrTuple[6] # 仙官通知邮件 char
    def GetWorshipType(self): return self.attrTuple[7] # 膜拜类型 BYTE
    def GetWorshipValue(self): return self.attrTuple[8] # 膜拜值 DWORD
# 缥缈仙域表
class IPY_FairyDomain():
@@ -3200,6 +3227,7 @@
        self.__LoadFileData("ActFeastWish", onlyCheck)
        self.__LoadFileData("ActFeastTravel", onlyCheck)
        self.__LoadFileData("FuncOpenLV", onlyCheck)
        self.__LoadFileData("ChinItem", onlyCheck)
        self.__LoadFileData("ChinNPC", onlyCheck)
        self.__LoadFileData("PlayerLV", onlyCheck)
        self.__LoadFileData("VipPrivilege", onlyCheck)
@@ -3745,6 +3773,13 @@
        self.CheckLoadData("FuncOpenLV")
        return self.ipyFuncOpenLVCache[index]
    def GetChinItemCount(self):
        self.CheckLoadData("ChinItem")
        return self.ipyChinItemLen
    def GetChinItemByIndex(self, index):
        self.CheckLoadData("ChinItem")
        return self.ipyChinItemCache[index]
    def GetChinNPCCount(self):
        self.CheckLoadData("ChinNPC")
        return self.ipyChinNPCLen
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py
@@ -3027,10 +3027,11 @@
            return cmp(GetMemberJoinTime(member1), GetMemberJoinTime(member2))
    return ret
def SortCrossFamily(serverIDList, top=0):
def SortCrossFamily(serverIDList, getCnt=0, page=1):
    ''' 跨服仙盟排序, 排序规则: 总战力  > 等级 > ID
    @param serverIDList: 仙盟所属区服ID范围列表
    @param top: 返回排序靠前x个仙盟,0则全部返回
    @param getCnt: 返回排序靠前x个仙盟,0则全部返回
    @param page: 第几页
    '''
    familyList = []
    familyManager = GameWorld.GetFamilyManager()
@@ -3042,7 +3043,10 @@
        familyList.append(family)
    familyList.sort(key=lambda f: (GetFamilyTotalFightPower(f), f.GetLV(), f.GetID()), reverse=True)
    totalCnt = len(familyList)
    return familyList[:top] if top else familyList, totalCnt
    if getCnt:
        startIndex = (page - 1) * getCnt
        return familyList[startIndex:startIndex + getCnt], totalCnt
    return familyList, totalCnt
    
#---------------------------------------------------------------------
##通知地图服务器, 玩家家族属性刷新
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyEmblem.py
@@ -85,7 +85,8 @@
def AddFamilyEmblem(familyID, emblemID, setExpireTimes=None):
    ## 添加仙盟徽章
    # @param setExpireTimes: 指定的有效时长秒,0-永久,>0-有效时长秒;没有指定时直接读配置进行累加
    if not familyID or not emblemID:
        return
    ipyData = IpyGameDataPY.GetIpyGameData("FamilyEmblem", emblemID)
    if not ipyData:
        return
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
@@ -52,6 +52,7 @@
import GameWorldBoss
import GameWorldFamilyWar
#import PlayerFamilyTech
import PlayerFamilyEmblem
import PlayerFamilyZhenfa
import PlayerFamilyRedPacket
import PlayerFamilyZhenbaoge
@@ -268,6 +269,13 @@
        PlayerFamily.PlayerExecLeaderImpeach(curPlayer, tick)
        return
    
    elif queryType == ChConfig.queryType_FamilyEmblem:
        #玩家激活仙盟徽章
        familyID = curPlayer.GetFamilyID()
        emblemID = GameWorld.ToIntDef(sendCMD)
        PlayerFamilyEmblem.AddFamilyEmblem(familyID, emblemID)
        return
    #角色改名
    elif queryType == ChConfig.queryType_UpdatePlayerName:
        UpdatePlayerName.MapServer_UpdatePlayerName(curPlayer, sendCMD, tick)
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -1409,11 +1409,12 @@
                       Def_WorshipType_CrossXianXiaMJ, # 跨服秘境寻宝 4
                       Def_WorshipType_CrossHorsePetTrain, # 跨服骑宠养成 5
                       Def_WorshipType_CrossGubaoTrain, # 跨服古宝养成 6
                       ) = range(1, 1 + 6)
                       Def_WorshipType_FamilyGCZ, # 仙盟攻城战 7
                       ) = range(1, 1 + 7)
#跨服膜拜类型
Def_WorshipTypeCross = [Def_WorshipType_CrossChampionship, Def_WorshipType_CrossBossTrial, Def_WorshipType_CrossXianXiaMJ, 
                        Def_WorshipType_CrossHorsePetTrain, Def_WorshipType_CrossGubaoTrain,
                        Def_WorshipType_CrossHorsePetTrain, Def_WorshipType_CrossGubaoTrain, Def_WorshipType_FamilyGCZ,
                        ]
#玩家记录类型
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -541,6 +541,7 @@
Def_Effect_FacePic = 275   #头像框物品;A值-头像框ID
Def_Effect_EmojiPack = 276   #表情包物品;A值-表情包ID
Def_Effect_RecycleItemMoney = 277   #回收物品转化为货币; A值-直接给货币物品ID;B值-货币数量
Def_Effect_FamilyEmblem = 278   #激活仙盟徽章; A值-徽章ID;
#----以下未使用或代码依然存在的---
Def_Effect_ItemGiveGongXun = 1920        #使用道具给予功勋
Def_Effect_ItemGiveRuneJH = 1925       #使用道具给予符印精华
@@ -2636,7 +2637,7 @@
#---------------------------------------------------------------------
#请求类型(需要和GameServer中的一致)
Def_QueryType_Count = 55
Def_QueryType_Count = 56
(
queryType_sqtPlayer,                  #查询玩家
queryType_sqtFamilyWar,               #家族战
@@ -2693,6 +2694,7 @@
queryType_EnterFB,                    #进入副本
queryType_NPCInfo,                    #查询NPCInfo
queryType_NPCCnt,                     #查询NPC数量
queryType_FamilyEmblem,               #仙盟徽章
) = range(0, Def_QueryType_Count)
#------------------------------------------------------------------------------ 
#---------------------------------------------------------------------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -19460,6 +19460,7 @@
class  tagGCFamilyGCZBatScenePlayer(Structure):
    PlayerID = 0    #(DWORD PlayerID)
    Name = ""    #(char Name[33])
    Job = 0    #(BYTE Job)
    Face = 0    #(DWORD Face)
    FacePic = 0    #(DWORD FacePic)
    data = None
@@ -19472,6 +19473,7 @@
        self.Clear()
        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        return _pos
@@ -19479,6 +19481,7 @@
    def Clear(self):
        self.PlayerID = 0
        self.Name = ""
        self.Job = 0
        self.Face = 0
        self.FacePic = 0
        return
@@ -19487,6 +19490,7 @@
        length = 0
        length += 4
        length += 33
        length += 1
        length += 4
        length += 4
@@ -19496,6 +19500,7 @@
        data = ''
        data = CommFunc.WriteDWORD(data, self.PlayerID)
        data = CommFunc.WriteString(data, 33, self.Name)
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        return data
@@ -19504,12 +19509,14 @@
        DumpString = '''
                                PlayerID:%d,
                                Name:%s,
                                Job:%d,
                                Face:%d,
                                FacePic:%d
                                '''\
                                %(
                                self.PlayerID,
                                self.Name,
                                self.Job,
                                self.Face,
                                self.FacePic
                                )
@@ -19800,6 +19807,7 @@
    PlayerID = 0    #(DWORD PlayerID)
    Name = ""    #(char Name[33])//参与玩家名字
    FamilyLV = 0    #(BYTE FamilyLV)//参与时的家族职位
    Job = 0    #(BYTE Job)
    Face = 0    #(DWORD Face)//基本脸型
    FacePic = 0    #(DWORD FacePic)//头像框
    FightPower = 0    #(DWORD FightPower)//战力,求余亿部分
@@ -19821,6 +19829,7 @@
        self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Name,_pos = CommFunc.ReadString(_lpData, _pos,33)
        self.FamilyLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.FightPower,_pos = CommFunc.ReadDWORD(_lpData, _pos)
@@ -19837,6 +19846,7 @@
        self.PlayerID = 0
        self.Name = ""
        self.FamilyLV = 0
        self.Job = 0
        self.Face = 0
        self.FacePic = 0
        self.FightPower = 0
@@ -19853,6 +19863,7 @@
        length = 0
        length += 4
        length += 33
        length += 1
        length += 1
        length += 4
        length += 4
@@ -19872,6 +19883,7 @@
        data = CommFunc.WriteDWORD(data, self.PlayerID)
        data = CommFunc.WriteString(data, 33, self.Name)
        data = CommFunc.WriteBYTE(data, self.FamilyLV)
        data = CommFunc.WriteBYTE(data, self.Job)
        data = CommFunc.WriteDWORD(data, self.Face)
        data = CommFunc.WriteDWORD(data, self.FacePic)
        data = CommFunc.WriteDWORD(data, self.FightPower)
@@ -19889,6 +19901,7 @@
                                PlayerID:%d,
                                Name:%s,
                                FamilyLV:%d,
                                Job:%d,
                                Face:%d,
                                FacePic:%d,
                                FightPower:%d,
@@ -19904,6 +19917,7 @@
                                self.PlayerID,
                                self.Name,
                                self.FamilyLV,
                                self.Job,
                                self.Face,
                                self.FacePic,
                                self.FightPower,
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
@@ -739,6 +739,7 @@
                            ChConfig.Def_Effect_AddMagicWeaponUpExp:"Item_AddMagicWeaponUpExp", # 增加法宝升星经验
                            ChConfig.Def_Effect_ChatBubbleBox:"Item_ChatBubbleBox", # 激活聊天气泡框
                            ChConfig.Def_Effect_EmojiPack:"Item_EmojiPack",
                            ChConfig.Def_Effect_FamilyEmblem:"Item_FamilyEmblem",
                            ChConfig.Def_Effect_ItemGiveWeekPartyPoint:"Item_WeekPartyPoint", # 增加活动巡礼积分
                            ChConfig.Def_Effect_ItemGiveWeekPartyPoint1:"Item_WeekPartyPoint", # 增加活动巡礼积分
                            ChConfig.Def_Effect_AddRealmExpRate:"Item_AddRealmExpRate", # 增加聚灵效率
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_FamilyEmblem.py
New file
@@ -0,0 +1,34 @@
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package UseItem.Item_FamilyEmblem
#
# @todo:仙盟徽章
# @author hxp
# @date 2025-04-16
# @version 1.0
#
# 详细描述: 仙盟徽章
#
#-------------------------------------------------------------------------------
#"""Version = 2025-04-16 15:00"""
#-------------------------------------------------------------------------------
import ChConfig
import ItemCommon
import GameWorld
def UseItem(curPlayer, curRoleItem, tick):
    useItemEff = curRoleItem.GetEffectByIndex(0)
    emblemID = useItemEff.GetEffectValue(0)
    if emblemID == 0:
        return
    if not curPlayer.GetFamilyID():
        GameWorld.DebugLog("玩家没有仙盟,无法使用徽章物品!", curPlayer.GetPlayerID())
        return
    ItemCommon.DelItem(curPlayer, curRoleItem, 1, False, "FamilyEmblem", isForceDR=True)
    #通知GameServer激活
    sendMsg = str(emblemID)
    curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_FamilyEmblem, 0, '', sendMsg, len(sendMsg))
    return True
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -1409,11 +1409,12 @@
                       Def_WorshipType_CrossXianXiaMJ, # 跨服秘境寻宝 4
                       Def_WorshipType_CrossHorsePetTrain, # 跨服骑宠养成 5
                       Def_WorshipType_CrossGubaoTrain, # 跨服古宝养成 6
                       ) = range(1, 1 + 6)
                       Def_WorshipType_FamilyGCZ, # 仙盟攻城战 7
                       ) = range(1, 1 + 7)
#跨服膜拜类型
Def_WorshipTypeCross = [Def_WorshipType_CrossChampionship, Def_WorshipType_CrossBossTrial, Def_WorshipType_CrossXianXiaMJ, 
                        Def_WorshipType_CrossHorsePetTrain, Def_WorshipType_CrossGubaoTrain,
                        Def_WorshipType_CrossHorsePetTrain, Def_WorshipType_CrossGubaoTrain, Def_WorshipType_FamilyGCZ,
                        ]
#玩家记录类型