From 6ea360dc4f9abb3a07a1d4575736e6e5eb66844b Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 16 四月 2025 15:02:44 +0800
Subject: [PATCH] 10367 【越南】【英语】【BT】【砍树】仙盟攻城战-服务端(奖励增加支持仙官;优化称号、仙官、膜拜关联逻辑及配置;支持物品激活仙盟徽章;C026C028增加Job信息;)
---
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossFamilyGCZ.py | 12 +++
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py | 37 +++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 5
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameXiangong.py | 61 +++++++++++++++
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py | 8 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 14 +++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py | 1
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 14 +++
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyEmblem.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_FamilyEmblem.py | 34 ++++++++
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py | 10 +
ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py | 8 +
ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GMT_GetFamilyByServerID.py | 8 +
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 5
PySysDB/PySysDBG.h | 14 +++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 4
16 files changed, 225 insertions(+), 13 deletions(-)
diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h
index 6af94ad..9234b42 100644
--- a/PySysDB/PySysDBG.h
+++ b/PySysDB/PySysDBG.h
@@ -435,6 +435,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
@@ -1588,6 +1600,8 @@
DWORD TitleID; //称号ID
list AwardItemList; //晋级仙宫奖励物品列表
char MailKey; //仙官通知邮件
+ BYTE WorshipType; //膜拜类型
+ DWORD WorshipValue; //膜拜值
};
//缥缈仙域表
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py b/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
index 390086e..bf33cbb 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
@@ -455,7 +455,7 @@
Def_Billboard_MaxCnt = 100
#---------------------------------------------------------------------
#请求类型(需要和MapServer中的一致)
-Def_QueryType_Count = 55
+Def_QueryType_Count = 56
(
queryType_sqtPlayer, #查询玩家
queryType_sqtFamilyWar, #家族战
@@ -512,6 +512,7 @@
queryType_EnterFB, #进入副本
queryType_NPCInfo, #查询NPCInfo
queryType_NPCCnt, #查询NPC数量
+queryType_FamilyEmblem, #仙盟徽章
) = range(0, Def_QueryType_Count)
#------------------------------------------------------------------------------
#家族某行为类型保存的条数
@@ -910,3 +911,8 @@
ShareDefine.TYPE_Price_GongdePoint:Def_ItemID_GongdePoint,
}
+#写死的物品类型都放这边
+Def_ItemType_Title = 4 #称号
+
+#写死的物品效果ID都放这边------请按数值顺序存放
+Def_Effect_AddDienstgrad = 204 #使用物品获得称号
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 32bce9a..09cf4ac 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -19453,6 +19453,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
@@ -19465,6 +19466,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
@@ -19472,6 +19474,7 @@
def Clear(self):
self.PlayerID = 0
self.Name = ""
+ self.Job = 0
self.Face = 0
self.FacePic = 0
return
@@ -19480,6 +19483,7 @@
length = 0
length += 4
length += 33
+ length += 1
length += 4
length += 4
@@ -19489,6 +19493,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
@@ -19497,12 +19502,14 @@
DumpString = '''
PlayerID:%d,
Name:%s,
+ Job:%d,
Face:%d,
FacePic:%d
'''\
%(
self.PlayerID,
self.Name,
+ self.Job,
self.Face,
self.FacePic
)
@@ -19793,6 +19800,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)//战力,求余亿部分
@@ -19814,6 +19822,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)
@@ -19830,6 +19839,7 @@
self.PlayerID = 0
self.Name = ""
self.FamilyLV = 0
+ self.Job = 0
self.Face = 0
self.FacePic = 0
self.FightPower = 0
@@ -19846,6 +19856,7 @@
length = 0
length += 4
length += 33
+ length += 1
length += 1
length += 4
length += 4
@@ -19865,6 +19876,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)
@@ -19882,6 +19894,7 @@
PlayerID:%d,
Name:%s,
FamilyLV:%d,
+ Job:%d,
Face:%d,
FacePic:%d,
FightPower:%d,
@@ -19897,6 +19910,7 @@
self.PlayerID,
self.Name,
self.FamilyLV,
+ self.Job,
self.Face,
self.FacePic,
self.FightPower,
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GMT_GetFamilyByServerID.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GMT_GetFamilyByServerID.py
index 7aebf12..3b1a85d 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/GMT_GetFamilyByServerID.py
+++ b/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 = []
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossFamilyGCZ.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossFamilyGCZ.py
index f804b7e..7900f53 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossFamilyGCZ.py
+++ b/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
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameXiangong.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameXiangong.py
index 05f33e9..bab8d80 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameXiangong.py
+++ b/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):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
index 2c5868c..f7e807e 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -359,6 +359,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),
@@ -1263,6 +1272,8 @@
("DWORD", "TitleID", 0),
("list", "AwardItemList", 0),
("char", "MailKey", 0),
+ ("BYTE", "WorshipType", 0),
+ ("DWORD", "WorshipValue", 0),
),
"FairyDomain":(
@@ -1783,6 +1794,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():
@@ -3098,7 +3123,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():
@@ -3203,6 +3230,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)
@@ -3754,6 +3782,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
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py
index d190580..e779af4 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamily.py
+++ b/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
#---------------------------------------------------------------------
##通知地图服务器, 玩家家族属性刷新
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyEmblem.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyEmblem.py
index 87b8a0a..cff7771 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFamilyEmblem.py
+++ b/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
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
index c892648..042c5aa 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
+++ b/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
@@ -267,6 +268,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)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index dff54b9..98a2f4d 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -1421,11 +1421,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,
]
#玩家记录类型
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 31582df..496afc2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -534,6 +534,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)
#------------------------------------------------------------------------------
#---------------------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 32bce9a..09cf4ac 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -19453,6 +19453,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
@@ -19465,6 +19466,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
@@ -19472,6 +19474,7 @@
def Clear(self):
self.PlayerID = 0
self.Name = ""
+ self.Job = 0
self.Face = 0
self.FacePic = 0
return
@@ -19480,6 +19483,7 @@
length = 0
length += 4
length += 33
+ length += 1
length += 4
length += 4
@@ -19489,6 +19493,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
@@ -19497,12 +19502,14 @@
DumpString = '''
PlayerID:%d,
Name:%s,
+ Job:%d,
Face:%d,
FacePic:%d
'''\
%(
self.PlayerID,
self.Name,
+ self.Job,
self.Face,
self.FacePic
)
@@ -19793,6 +19800,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)//战力,求余亿部分
@@ -19814,6 +19822,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)
@@ -19830,6 +19839,7 @@
self.PlayerID = 0
self.Name = ""
self.FamilyLV = 0
+ self.Job = 0
self.Face = 0
self.FacePic = 0
self.FightPower = 0
@@ -19846,6 +19856,7 @@
length = 0
length += 4
length += 33
+ length += 1
length += 1
length += 4
length += 4
@@ -19865,6 +19876,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)
@@ -19882,6 +19894,7 @@
PlayerID:%d,
Name:%s,
FamilyLV:%d,
+ Job:%d,
Face:%d,
FacePic:%d,
FightPower:%d,
@@ -19897,6 +19910,7 @@
self.PlayerID,
self.Name,
self.FamilyLV,
+ self.Job,
self.Face,
self.FacePic,
self.FightPower,
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
index 4454f18..bb5a064 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
+++ b/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", # 增加聚灵效率
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_FamilyEmblem.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_FamilyEmblem.py
new file mode 100644
index 0000000..d6181c6
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_FamilyEmblem.py
@@ -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
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index dff54b9..98a2f4d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -1421,11 +1421,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,
]
#玩家记录类型
--
Gitblit v1.8.0