From db6559bba9fef7a33f6f6e68863ca30eb428df68 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 16 四月 2025 14:50:43 +0800
Subject: [PATCH] 10367 【越南】【英语】【BT】【砍树】仙盟攻城战-服务端(奖励增加支持仙官;优化称号、仙官、膜拜关联逻辑及配置;支持物品激活仙盟徽章;C026C028增加Job信息;)

---
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameXiangong.py |   61 ++++++++++++++++++++++++++++++
 1 files changed, 61 insertions(+), 0 deletions(-)

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):

--
Gitblit v1.8.0