From c280ced8be799a899efc78b21cc807d435ab6609 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 10 二月 2026 19:34:03 +0800
Subject: [PATCH] 66 【公会】基础主体-服务端(退出公会时间根据当前是否互通取对应的本服或跨服时间;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPreset.py |   43 +++++++++++++++++++++++++++++++++++--------
 1 files changed, 35 insertions(+), 8 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPreset.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPreset.py
index f5a5814..a800613 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPreset.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerPreset.py
@@ -23,6 +23,7 @@
 import IPY_GameWorld
 import NetPackCommon
 import PlayerOnline
+import PlayerHero
 import GameWorld
 import ChConfig
 
@@ -99,6 +100,15 @@
         infoDict = {"funcPresetType":funcPresetType, "presetID":presetID}
         if not PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, needGold, "FuncPresetUnlock", infoDict):
             return
+        
+    # 命格感悟等级
+    elif unlockType == 2:
+        needGWLV = unlockValue
+        ganwuLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MGGanwuLV)
+        if ganwuLV < needGWLV:
+            GameWorld.DebugLog("命格感悟等级不足无法解锁该预设! funcPresetType=%s,presetID=%s,ganwuLV=%s < %s" % (funcPresetType, presetID, ganwuLV, needGold))
+            return
+        
     else:
         return
     
@@ -169,7 +179,7 @@
     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
     batPresetID = clientData.BatPresetID
     funcPresetType = clientData.FuncPresetType
-    funcPresetID = clientData.PresetID
+    toPresetID = clientData.PresetID
     
     if funcPresetType == ShareDefine.FuncPreset_Battle:
         GameWorld.DebugLog("全局战斗预设不在此修改,请使用B263封包修改全局预设方案! funcPresetType=%s" % (funcPresetType))
@@ -179,19 +189,35 @@
         GameWorld.DebugLog("全局预设未解锁! batPresetID=%s" % batPresetID)
         return
     
-    if not GetFuncPresetIDState(curPlayer, funcPresetID, funcPresetType):
-        GameWorld.DebugLog("功能预设未解锁! funcPresetID=%s,funcPresetType=%s" % (funcPresetID, funcPresetType))
+    if not GetFuncPresetIDState(curPlayer, toPresetID, funcPresetType):
+        GameWorld.DebugLog("功能预设未解锁! toPresetID=%s,funcPresetType=%s" % (toPresetID, funcPresetType))
         return
     
-    if GetFuncPresetID(curPlayer, batPresetID, funcPresetType) == funcPresetID:
-        GameWorld.DebugLog("功能预设不变不处理! batPresetID=%s,funcPresetType=%s,funcPresetID=%s" % (batPresetID, funcPresetType, funcPresetID))
+    nowPresetID = GetFuncPresetID(curPlayer, batPresetID, funcPresetType)
+    if nowPresetID == toPresetID:
+        GameWorld.DebugLog("功能预设不变不处理! batPresetID=%s,funcPresetType=%s,toPresetID=%s" % (batPresetID, funcPresetType, toPresetID))
         return
     
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PresetFuncID % (batPresetID, funcPresetType), funcPresetID)
-    GameWorld.DebugLog("功能预设方案切换: batPresetID=%s,funcPresetType=%s,funcPresetID=%s" % (batPresetID, funcPresetType, funcPresetID))
+    GameWorld.DebugLog("功能预设方案切换: batPresetID=%s,funcPresetType=%s,nowPresetID=%s,toPresetID=%s" % (batPresetID, funcPresetType, nowPresetID, toPresetID))
+    
+    # 武将方案检查是否空,空的话强制复制当前
+    if funcPresetType == ShareDefine.FuncPreset_Hero:
+        olPlayer = PlayerOnline.GetOnlinePlayer(curPlayer)
+        heroPreset = olPlayer.GetHeroPreset(toPresetID)
+        if not heroPreset.heroItemDict:
+            nowHeroPreset = olPlayer.GetHeroPreset(nowPresetID)
+            itemIndexPosDict = {}
+            itemIndexPosDict.update(nowHeroPreset.heroItemDict)
+            GameWorld.DebugLog("该武将方案为空直接先复制当前方案! nowPresetID=%s,itemIndexPosDict=%s" % (nowPresetID, itemIndexPosDict))
+            PlayerHero.DoSaveHeroPreset(curPlayer, toPresetID, itemIndexPosDict)
+            
+        heroPreset.OnSwitch()
+        
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_PresetFuncID % (batPresetID, funcPresetType), toPresetID)
     
     # 刷属性
-    PlayerOnline.GetOnlinePlayer(curPlayer).RefreshBatPreset(batPresetID)
+    #PlayerViewCache.ResetCacheUpdTickByPresetSwitch(curPlayer, batPresetID)
+    PlayerOnline.GetOnlinePlayer(curPlayer).RefreshByFuncPreset(funcPresetType, toPresetID)
     
     Sync_FuncPresetSwitchInfo(curPlayer, batPresetID, funcPresetType)
     return
@@ -224,6 +250,7 @@
     GameWorld.DebugLog("全局战斗预设方案切换: batPresetType=%s,batPresetID=%s" % (batPresetType, batPresetID))
     
     # 刷属性
+    #PlayerViewCache.ResetCacheUpdTickByPresetSwitch(curPlayer, batPresetID)
     PlayerOnline.GetOnlinePlayer(curPlayer).RefreshBatPreset(batPresetID)
     
     Sync_BatPresetSwitchInfo(curPlayer, batPresetType)

--
Gitblit v1.8.0