From a0dd1dc92bb2f6eb7067a624df20a9c326ecde87 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 06 二月 2026 22:14:54 +0800
Subject: [PATCH] 66 【公会】基础主体-服务端(修改A619,A523封包结构;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMingge.py |   72 +++++++++++++++++++++++++++++++-----
 1 files changed, 62 insertions(+), 10 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMingge.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMingge.py
index ffbfad7..8d50d2e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMingge.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerMingge.py
@@ -16,6 +16,7 @@
 #-------------------------------------------------------------------------------
 
 import GameWorld
+import PlayerPreset
 import PlayerControl
 import ItemControler
 import IpyGameDataPY
@@ -49,7 +50,8 @@
 def OnMinggeTuiyan(index, clientData, tick):
     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
     tyCount = clientData.Count
-    DoMinggeTuiyan(curPlayer, tyCount)
+    if not DoMinggeTuiyan(curPlayer, tyCount):
+        ItemCommon.SyncMakeItemAnswer(curPlayer, ShareDefine.Def_mitMGTuiyan, ChConfig.Def_ComposeState_Fail, 0)
     return
 
 def GetMGColorRateList(curPlayer):
@@ -180,7 +182,9 @@
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MGGanwuLV, updLV)
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MGGanwuExp, updExp)
     Sync_MinggeInfo(curPlayer)
-    return
+    
+    ItemCommon.SyncMakeItemAnswer(curPlayer, ShareDefine.Def_mitMGTuiyan, ChConfig.Def_ComposeState_Sucess, succCount)
+    return True
 
 #// B2 51 命格分解 #tagCSMinggeDecompose
 #
@@ -193,6 +197,7 @@
 def OnMinggeDecompose(index, clientData, tick):
     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
     __doDecomposeMingge(curPlayer, clientData.IndexList)
+    ItemCommon.SyncMakeItemAnswer(curPlayer, ShareDefine.Def_mitMinggeEquip, ChConfig.Def_ComposeState_Sucess, 0)
     return
 
 def __doDecomposeMingge(curPlayer, itemIndexList):
@@ -246,9 +251,8 @@
     isAutoDec = clientData.AutoDec
     GameWorld.DebugLog("命格装备替换: mgNum=%s,itemIndex=%s,isAutoDec=%s" % (mgNum, itemIndex, isAutoDec), playerID)
     
-    openNum = IpyGameDataPY.GetFuncCfg("MinggeCfg", 1)
-    if mgNum < 1 or mgNum > openNum:
-        GameWorld.DebugLog("命格套编号不支持! mgNum=%s" % mgNum, playerID)
+    if not PlayerPreset.GetFuncPresetIDState(curPlayer, mgNum, ShareDefine.FuncPreset_Mingge):
+        GameWorld.DebugLog("命格套方案未解锁! mgNum=%s" % mgNum, playerID)
         return
     
     mgTuiyanPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptMGTuiyan)
@@ -291,7 +295,9 @@
         __doDecomposeMingge(curPlayer, [itemIndex])
         
     # 刷属性
-    RefreshMinggeAttr(curPlayer)
+    RefreshMinggeAttr(curPlayer, mgNum)
+    
+    ItemCommon.SyncMakeItemAnswer(curPlayer, ShareDefine.Def_mitMinggeEquip, ChConfig.Def_ComposeState_Sucess, itemIndex)
     return
 
 #// B2 53 命格祈灵#tagCSMinggeQiling
@@ -338,12 +344,58 @@
     Sync_MinggeInfo(curPlayer)
     return
 
-def RefreshMinggeAttr(curPlayer):
-    #CalcMinggeAttr(curPlayer)
-    PlayerOnline.GetOnlinePlayer(curPlayer).RefreshRoleAttr()
+def RefreshMinggeAttr(curPlayer, mgNum=0):
+    CalcMinggeAttr(curPlayer, mgNum)
+    PlayerOnline.GetOnlinePlayer(curPlayer).RefreshByFuncPreset(ShareDefine.FuncPreset_Mingge, mgNum)
     return
 
-def CalcMinggeAttr(curPlayer):
+def GetMGNumPackIndexList(mgNum):
+    mgCnt = len(ChConfig.Def_MGGuayuType)
+    startIndex = (mgNum - 1) * mgCnt
+    endIndex = startIndex + mgCnt
+    return range(startIndex, endIndex)
+
+def CalcMinggeAttr(curPlayer, mgNum=0):
+    
+    playerID = curPlayer.GetPlayerID()
+    funcPresetType = ShareDefine.FuncPreset_Mingge
+    if not mgNum:
+        ipyDataList = IpyGameDataPY.GetIpyGameDataList("PresetUnlock", funcPresetType)
+        mgPresetIDList = range(1, 1 + len(ipyDataList)) if ipyDataList else []
+    else:
+        mgPresetIDList = [mgNum]
+        
+    olPlayer = PlayerOnline.GetOnlinePlayer(curPlayer)
+    equipPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptMGGuayu)
+    for mgPresetID in mgPresetIDList:
+        
+        attrDict, skillLVDict = {}, {}
+        if not PlayerPreset.GetFuncPresetIDState(curPlayer, mgPresetID, funcPresetType):
+            olPlayer.SetCalcAttr(ChConfig.Def_CalcAttr_Mingge, attrDict, skillLVDict, presetID=mgPresetID)
+            continue
+        
+        for index in GetMGNumPackIndexList(mgPresetID):
+            if index < 0 or index >= equipPack.GetCount():
+                continue
+            curEquip = equipPack.GetAt(index)
+            if not curEquip or curEquip.IsEmpty():
+                continue
+            
+            legendAttrIDCnt = curEquip.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrID)
+            legendAttrValueCnt = curEquip.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValue)
+            for i in xrange(min(legendAttrIDCnt, legendAttrValueCnt)):
+                attrID = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrID, i)
+                attrValue = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValue, i)
+                attrDict[attrID] = attrDict.get(attrID, 0) + attrValue
+                
+            for i in xrange(curEquip.GetUserAttrCount(ShareDefine.Def_IudetAddSkillID)):
+                skillID = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetAddSkillID, i)
+                if skillID:
+                    skillLVDict[skillID] = skillLVDict.get(skillID, 0) + 1
+                    
+        GameWorld.DebugLog("命格属性: %s,skillLVDict=%s,mgPresetID=%s" % (attrDict, skillLVDict, mgPresetID), playerID)
+        olPlayer.SetCalcAttr(ChConfig.Def_CalcAttr_Mingge, attrDict, skillLVDict, presetID=mgPresetID)
+        
     return
 
 def Sync_MinggeInfo(curPlayer):

--
Gitblit v1.8.0