From c63ffd10aecb12b2e09dae603cf9a0f824f6482c Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 10 十二月 2025 15:46:15 +0800
Subject: [PATCH] 16 卡牌服务端(合成目标物品与材料物品不在同一背包时支持合成;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Hero.py |  138 +++++++++++++++++++++++++++++++++++-----------
 1 files changed, 105 insertions(+), 33 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Hero.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Hero.py
index 95f6e59..a11242a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Hero.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Hero.py
@@ -38,9 +38,12 @@
         GameWorld.DebugAnswer(curPlayer, "武将升星: Hero s 背包位置 升x星")
         GameWorld.DebugAnswer(curPlayer, "武将突破: Hero b 背包位置 设置等级")
         GameWorld.DebugAnswer(curPlayer, "武将觉醒: Hero a 背包位置 设置等级")
-        GameWorld.DebugAnswer(curPlayer, "武将图鉴: Hero t 武将ID 图鉴星级 图鉴突破等级")
-        GameWorld.DebugAnswer(curPlayer, "重置图鉴: Hero t 0")
+        #GameWorld.DebugAnswer(curPlayer, "武将图鉴: Hero t 武将ID 图鉴星级 图鉴突破等级")
+        GameWorld.DebugAnswer(curPlayer, "重置图鉴: Hero t 0 [重置阵容推荐]")
+        GameWorld.DebugAnswer(curPlayer, "重置重生: Hero r")
         GameWorld.DebugAnswer(curPlayer, "武将皮肤: Hero sk 武将ID 皮肤索引 是否解锁")
+        GameWorld.DebugAnswer(curPlayer, "重置宿缘: Hero sy 0")
+        GameWorld.DebugAnswer(curPlayer, "设置宿缘: Hero sy 宿缘ID 等级 [是否激活]")
         GameWorld.DebugAnswer(curPlayer, "清空武将: ClearPack 35")
         GameWorld.DebugAnswer(curPlayer, "新增武将: MakeItemCount 英雄ID [个数]")
         GameWorld.DebugAnswer(curPlayer, "阵容上阵: Hero f 阵容ID [武将ID ...]")
@@ -70,11 +73,14 @@
             ipyDataMgr = IpyGameDataPY.IPY_Data()
             for index in range(ipyDataMgr.GetHeroCount()):
                 ipyData = ipyDataMgr.GetHeroByIndex(index)
+                if not ipyData.GetPlayerCanUse():
+                    continue
                 heroIDList.append(ipyData.GetHeroID())
         else:
             heroIDList = [value2]
             
         if value2 == 0:
+            recommendReset = msgList[2] if len(msgList) > 2 else 0
             syncHeroIDList = []
             for heroID in heroIDList:
                 if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBook % heroID):
@@ -82,18 +88,36 @@
                 syncHeroIDList.append(heroID)
                 PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HeroBook % heroID, 0)
             GameWorld.DebugAnswer(curPlayer, "重置图鉴OK!")
-        else:
-            heroID = value2
-            syncHeroIDList = [heroID]
-            bookStarLV = msgList[2] if len(msgList) > 2 else 0
-            bookBreakLV = msgList[3] if len(msgList) > 3 else 0
-            if (bookStarLV or bookStarLV) and not PlayerHero.GetHeroBookInitState(curPlayer, heroID):
-                PlayerHero.SetHeroBookInitState(curPlayer, heroID, 1)
-            PlayerHero.SetHeroBookStarLV(curPlayer, heroID, bookStarLV)
-            PlayerHero.SetHeroBookBreakLV(curPlayer, heroID, bookBreakLV)
-            GameWorld.DebugAnswer(curPlayer, "设置武将(%s)图鉴星级(%s),突破(%s)" % (heroID, bookStarLV, bookBreakLV))
-            
+            if recommendReset:
+                syncIDList = []
+                ipyDataMgr = IpyGameDataPY.IPY_Data()
+                for index in range(ipyDataMgr.GetLineupRecommendCount()):
+                    ipyData = ipyDataMgr.GetLineupRecommendByIndex(index)
+                    recommendID = ipyData.GetRecommendID()
+                    if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroRecommend % recommendID):
+                        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HeroRecommend % recommendID, 0)
+                        syncIDList.append(recommendID)
+                PlayerHero.Sync_LineupRecommendInfo(curPlayer, syncIDList)
+                GameWorld.DebugAnswer(curPlayer, "重置推荐OK!")
+                
+        #else:
+        #    heroID = value2
+        #    syncHeroIDList = [heroID]
+        #    bookStarLV = msgList[2] if len(msgList) > 2 else 0
+        #    bookBreakLV = msgList[3] if len(msgList) > 3 else 0
+        #    if (bookStarLV or bookStarLV) and not PlayerHero.GetHeroBookInitState(curPlayer, heroID):
+        #        PlayerHero.SetHeroBookInitState(curPlayer, heroID, 1)
+        #    PlayerHero.SetHeroBookStarLV(curPlayer, heroID, bookStarLV)
+        #    PlayerHero.SetHeroBookBreakLV(curPlayer, heroID, bookBreakLV)
+        #    GameWorld.DebugAnswer(curPlayer, "设置武将(%s)图鉴星级(%s),突破(%s)" % (heroID, bookStarLV, bookBreakLV))
+        
         PlayerHero.Sync_HeroInfo(curPlayer, syncHeroIDList)
+        return
+    
+    # 重生
+    if value == "r":
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HeroAwakeRebirthCnt, 0)
+        PlayerHero.Sync_PlayerHeroInfo(curPlayer)
         return
     
     # 皮肤
@@ -104,29 +128,71 @@
         PlayerHero.ActiveHeroSkin(curPlayer, heroID, skinIndex, isActive)
         return
     
+    # 宿缘
+    if value == "sy":
+        syncIDList = []
+        if not value2:
+            ipyDataMgr = IpyGameDataPY.IPY_Data()
+            for index in range(ipyDataMgr.GetHeroFatesCount()):
+                ipyData = ipyDataMgr.GetHeroFatesByIndex(index)
+                fatesID = ipyData.GetFatesID()
+                if not PlayerHero.GetHeroFatesState(curPlayer, fatesID):
+                    continue
+                PlayerHero.SetHeroFatesState(curPlayer, fatesID, 0)
+                PlayerHero.SetHeroFatesLV(curPlayer, fatesID, 0)
+                syncIDList.append(fatesID)
+            GameWorld.DebugAnswer(curPlayer, "重置宿缘")
+        else:
+            fatesID = value2
+            fatesLV = msgList[2] if len(msgList) > 2 else 0
+            fatesState = msgList[3] if len(msgList) > 3 else None
+            ipyData = IpyGameDataPY.GetIpyGameData("HeroFates", fatesID)
+            if not ipyData:
+                GameWorld.DebugAnswer(curPlayer, "宿缘ID不存在: %s" % fatesID)
+                return
+            if fatesLV:
+                fatesQuality = ipyData.GetFatesQuality()
+                if not IpyGameDataPY.GetIpyGameData("HeroFatesQualityLV", fatesQuality, fatesLV):
+                    GameWorld.DebugAnswer(curPlayer, "宿缘品质(%s)等级(%s)不存在" % (fatesQuality, fatesLV))
+                    return
+            syncIDList.append(fatesID)
+            if fatesState != None:
+                PlayerHero.SetHeroFatesState(curPlayer, fatesID, fatesState)
+            else:
+                fatesState = PlayerHero.GetHeroFatesState(curPlayer, fatesID)
+            PlayerHero.SetHeroFatesLV(curPlayer, fatesID, fatesLV)
+            GameWorld.DebugAnswer(curPlayer, "设置宿缘ID=%s,LV=%s,State=%s" % (fatesID, fatesLV, fatesState))
+        PlayerHero.Sync_HeroFatesInfo(curPlayer, syncIDList)
+        PlayerHero.RefreshLordAttr(curPlayer)
+        return
+    
     itemIndex = value2
     heroItem = PlayerHero.GetHeroItem(curPlayer, itemIndex)
     if not heroItem:
         GameWorld.DebugAnswer(curPlayer, "不存在武将: itemIndex=%s" % itemIndex)
         return
     
+    heroID = heroItem.GetItemTypeID()
+    heroIpyData = IpyGameDataPY.GetIpyGameData("Hero", heroID)
+    if not heroIpyData:
+        return
+    quality = heroIpyData.GetQuality()
+    
     if value == 0:
         PlayerHero.InitHeroItem(heroItem.GetItem())
         heroItem.Sync_Item()
         GameWorld.DebugAnswer(curPlayer, "重置武将: itemIndex=%s" % (itemIndex))
-        return
-    
+        
     # 等级
-    if value == "l":
+    elif value == "l":
         heroLV = msgList[2] if len(msgList) > 2 else 1
         LVMax = PlayerHero.GetHeroLVMax(heroItem)
         heroLV = min(LVMax, heroLV)
         heroItem.SetUserAttr(ShareDefine.Def_IudetHeroLV, heroLV)
         GameWorld.DebugAnswer(curPlayer, "设置武将等级: %s,itemIndex=%s" % (heroLV, itemIndex))
-        return
-    
+        
     # 星级
-    if value == "s":
+    elif value == "s":
         addStar = msgList[2] if len(msgList) > 2 else 1
         curStar = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroStar)
         starMax = PlayerHero.GetHeroStarMax(heroItem)
@@ -136,29 +202,35 @@
         updStar = min(curStar + addStar, starMax)
         PlayerHero.DoHeroUpdStar(curPlayer, heroItem, updStar)
         GameWorld.DebugAnswer(curPlayer, "更新武将星级: %s,itemIndex=%s" % (updStar, itemIndex))
-        return
-    
+        
     # 突破
-    if value == "b":
+    elif value == "b":
         breakLV = msgList[2] if len(msgList) > 2 else 0
-        PlayerHero.SetHeroBreakLV(heroItem, breakLV)
+        if not IpyGameDataPY.GetIpyGameData("HeroQualityBreak", quality, breakLV):
+            GameWorld.DebugAnswer(curPlayer, "突破等级不存在:%s 品质:%s" % (breakLV, quality))
+            return
+        PlayerHero.SetHeroBreakLV(curPlayer, heroItem, breakLV)
         GameWorld.DebugAnswer(curPlayer, "设置武将突破: %s,itemIndex=%s" % (breakLV, itemIndex))
-        return
-    
+        
     # 觉醒
-    if value == "a":
+    elif value == "a":
         awakeLV = msgList[2] if len(msgList) > 2 else 0
+        if not IpyGameDataPY.GetIpyGameData("HeroQualityAwake", quality, awakeLV):
+            GameWorld.DebugAnswer(curPlayer, "觉醒等级不存在:%s 品质:%s" % (awakeLV, quality))
+            return
         PlayerHero.SetHeroAwakeLV(heroItem, awakeLV)
         GameWorld.DebugAnswer(curPlayer, "设置武将觉醒: %s,itemIndex=%s" % (awakeLV, itemIndex))
-        return
-    
+        
+    PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate(heroItem) # GM修改
     return
 
 def __oneKeyLineup(curPlayer, msgList):
     ## 阵容上阵: Hero f 阵容ID [武将ID ...]
     lineupID = msgList[1] if len(msgList) > 1 else 0
-    heroIDList = list(set(msgList[2:])) # 去重,单阵容武将ID不能重复
-    
+    heroIDList = []
+    for heroID in msgList[2:]: # 去重,单阵容武将ID不能重复
+        if heroID not in heroIDList:
+            heroIDList.append(heroID)
     if lineupID not in ShareDefine.LineupList:
         GameWorld.DebugAnswer(curPlayer, "不存在该阵容: %s" % lineupID)
         return
@@ -227,7 +299,7 @@
     for syncItem in syncItemDict.values():
         syncItem.Sync_Item()
         
-    lineup = PlayerOnline.GetOnlinePlayer(curPlayer).GetLineup(lineupID)
+    lineup = PlayerOnline.GetOnlinePlayer(curPlayer).GetLineup(lineupID, False)
     lineup.UpdLineup(heroItemDict, shapeType)
     GameWorld.DebugAnswer(curPlayer, "阵容(%s)上阵OK: %s" % (lineupID, heroItemDict))
     return
@@ -305,7 +377,7 @@
                 if not IpyGameDataPY.GetIpyGameDataNotLog("HeroQualityBreak", quality, bLV):
                     break
                 breakLV = bLV
-        PlayerHero.SetHeroBreakLV(heroItem, breakLV, False)
+        PlayerHero.SetHeroBreakLV(curPlayer, heroItem, breakLV, False)
         
         # 星级
         starMax = PlayerHero.GetHeroStarMax(heroItem)
@@ -333,7 +405,7 @@
             singleItem.SetUserAttr(ShareDefine.Def_IudetHeroSkin, skinIndex)      
             
         heroItem.Sync_Item()
-        PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate([itemIndex])
+        PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate(heroItem) # GM修改阵容
         
     GameWorld.DebugAnswer(curPlayer, "设置阵容武将OK")
     return

--
Gitblit v1.8.0