From c0c57b36817a87c7f80ca67cb604f1f2c91cab30 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 30 十二月 2025 15:50:06 +0800
Subject: [PATCH] 16 卡牌服务端(Hero 命令增加一键满级;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Hero.py |  202 +++++++++++++++++++++++++++++++------------------
 1 files changed, 127 insertions(+), 75 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 e1aefba..40a8692 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
@@ -44,12 +44,13 @@
         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, "清未生效: Hero clear [是否包含生效卡]")
+        #GameWorld.DebugAnswer(curPlayer, "清空武将: ClearPack 35")
         GameWorld.DebugAnswer(curPlayer, "新增武将: MakeItemCount 英雄ID [个数]")
         GameWorld.DebugAnswer(curPlayer, "阵容上阵: Hero f 阵容ID [武将ID ...]")
         GameWorld.DebugAnswer(curPlayer, "阵容武将: Hero h 阵容ID 武将ID 等级 星级 突破等级 觉醒等级 皮肤")
         GameWorld.DebugAnswer(curPlayer, "阵容满级: Hero h 阵容ID 1")
+        GameWorld.DebugAnswer(curPlayer, "一键满级: Hero max [指定等级 星级 突破 觉醒]")
+        GameWorld.DebugAnswer(curPlayer, "清空武将: Hero clear [是否包含生效卡]")
         return
     
     PlayerOnline.GetOnlinePlayer(curPlayer).RefreshRoleAttr()
@@ -60,6 +61,11 @@
     # 阵容上阵
     if value == "f":
         __oneKeyLineup(curPlayer, msgList)
+        return
+    
+    # 一键满级
+    if value == "max":
+        __oneKeyMax(curPlayer, msgList)
         return
     
     # 阵容武将
@@ -140,6 +146,9 @@
                 if curItem.GetUserAttr(ShareDefine.Def_IudetHeroCardEffective):
                     continue
             curItem.Clear()
+            
+        if isAll:
+            PlayerOnline.GetOnlinePlayer(curPlayer).SetEffectiveCardDict({}) # 清空生效缓存
         return
         
     # 宿缘
@@ -236,6 +245,44 @@
         GameWorld.DebugAnswer(curPlayer, "设置武将觉醒: %s,itemIndex=%s" % (awakeLV, itemIndex))
         
     PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate(heroItem) # GM修改
+    return
+
+def __oneKeyMax(curPlayer, msgList):
+    ## 一键满级: Hero max [指定等级 星级 突破 觉醒]
+    setLV = msgList[2] if len(msgList) > 2 else None
+    setStar = msgList[3] if len(msgList) > 3 else None
+    setBreakLV = msgList[4] if len(msgList) > 4 else None
+    setAwakeLV = msgList[5] if len(msgList) > 5 else None
+    
+    heroIDList = []
+    ipyDataMgr = IpyGameDataPY.IPY_Data()
+    for index in range(ipyDataMgr.GetHeroCount()):
+        ipyData = ipyDataMgr.GetHeroByIndex(index)
+        if not ipyData.GetPlayerCanUse():
+            continue
+        heroIDList.append(ipyData.GetHeroID())
+        
+    curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptHero)
+    for index in range(curPack.GetCount()):
+        heroItem = curPack.GetAt(index)
+        if not heroItem or heroItem.IsEmpty():
+            continue
+        heroID = heroItem.GetItemTypeID()
+        if heroID in heroIDList:
+            heroIDList.remove(heroID)
+            
+    # 给没有的武将
+    for heroID in heroIDList:
+        ItemControler.GivePlayerItem(curPlayer, heroID, 1, False)
+        
+    # 设置一键满
+    for index in range(curPack.GetCount()):
+        heroItem = curPack.GetAt(index)
+        if not heroItem or heroItem.IsEmpty():
+            continue
+        __setHeroItem(curPlayer, heroItem, setLV, setStar, setBreakLV, setAwakeLV)
+        
+    GameWorld.DebugAnswer(curPlayer, "一键OK!")
     return
 
 def __oneKeyLineup(curPlayer, msgList):
@@ -347,79 +394,84 @@
         heroItem = curPack.GetAt(itemIndex)
         if not heroItem or heroItem.IsEmpty():
             continue
-        heroID = heroItem.GetItemTypeID()
-        heroIpyData = IpyGameDataPY.GetIpyGameData("Hero", heroID)
-        if not heroIpyData:
-            continue
-        quality = heroIpyData.GetQuality()
-        qualityIpyData = IpyGameDataPY.GetIpyGameData("HeroQuality", quality)
-        if not qualityIpyData:
-            continue
-        singleItem = heroItem.GetItem()
-        
-        # 天赋        
-        if setAwakeLV != None:
-            awakeLV = setAwakeLV
-            if not IpyGameDataPY.GetIpyGameData("HeroQualityAwake", quality, awakeLV):
-                GameWorld.DebugAnswer(curPlayer, "觉醒等级不存在:%s 品质:%s" % (awakeLV, quality))
-                return
-        else:
-            awakeLV = 0
-            for aLV in range(1, 100):
-                if not IpyGameDataPY.GetIpyGameDataNotLog("HeroQualityAwake", quality, aLV):
-                    break
-                awakeLV = aLV
-        PlayerHero.SetHeroAwakeLV(heroItem, awakeLV, False)
-        
-        doCnt = 0
-        awakeRandCnt = singleItem.GetUserAttrCount(ShareDefine.Def_IudetHeroTalentIDAwakeRand)
-        while awakeRandCnt and doCnt <= 10:
-            doCnt += 1
-            selectIndex = random.randint(0, awakeRandCnt - 1)
-            PlayerHero.doSelectAwakeTalent(curPlayer, itemIndex, selectIndex, False)
-            awakeRandCnt = singleItem.GetUserAttrCount(ShareDefine.Def_IudetHeroTalentIDAwakeRand)
-            
-        # 突破
-        if setBreakLV != None:
-            breakLV = setBreakLV
-            if not IpyGameDataPY.GetIpyGameData("HeroQualityBreak", quality, breakLV):
-                GameWorld.DebugAnswer(curPlayer, "突破等级不存在:%s 品质:%s" % (breakLV, quality))
-                return
-        else:
-            breakLV = 0
-            for bLV in range(1, 100):
-                if not IpyGameDataPY.GetIpyGameDataNotLog("HeroQualityBreak", quality, bLV):
-                    break
-                breakLV = bLV
-        PlayerHero.SetHeroBreakLV(curPlayer, heroItem, breakLV, False)
-        
-        # 星级
-        starMax = PlayerHero.GetHeroStarMax(heroItem)
-        if setStar != None:
-            updStar = min(setStar, starMax)
-        else:
-            updStar = starMax
-        PlayerHero.DoHeroUpdStar(curPlayer, heroItem, updStar, False)
-        
-        # 等级
-        lvMax = PlayerHero.GetHeroLVMax(heroItem)
-        if setLV != None:
-            updHeroLV = min(setLV, lvMax)
-        else:
-            updHeroLV = lvMax
-        singleItem.SetUserAttr(ShareDefine.Def_IudetHeroLV, updHeroLV)
-        
-        # 皮肤
-        skinIDList = heroIpyData.GetSkinIDList()
-        if setSkinID != None:
-            if setSkinID not in skinIDList:
-                GameWorld.DebugAnswer(curPlayer, "皮肤不存在:%s 品质:%s" % (heroID, setSkinID))
-                return
-            skinIndex = skinIDList.index(setSkinID)
-            singleItem.SetUserAttr(ShareDefine.Def_IudetHeroSkin, skinIndex)      
-            
-        heroItem.Sync_Item()
-        PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate(heroItem) # GM修改阵容
+        __setHeroItem(curPlayer, heroItem, setLV, setStar, setBreakLV, setAwakeLV, setSkinID)
         
     GameWorld.DebugAnswer(curPlayer, "设置阵容武将OK")
     return
+        
+def __setHeroItem(curPlayer, heroItem, setLV=None, setStar=None, setBreakLV=None, setAwakeLV=None, setSkinID=None):
+    heroID = heroItem.GetItemTypeID()
+    heroIpyData = IpyGameDataPY.GetIpyGameData("Hero", heroID)
+    if not heroIpyData:
+        return
+    quality = heroIpyData.GetQuality()
+    qualityIpyData = IpyGameDataPY.GetIpyGameData("HeroQuality", quality)
+    if not qualityIpyData:
+        return
+    singleItem = heroItem.GetItem()
+    
+    # 天赋        
+    if setAwakeLV != None:
+        awakeLV = setAwakeLV
+        if not IpyGameDataPY.GetIpyGameData("HeroQualityAwake", quality, awakeLV):
+            GameWorld.DebugAnswer(curPlayer, "觉醒等级不存在:%s 品质:%s" % (awakeLV, quality))
+            return
+    else:
+        awakeLV = 0
+        for aLV in range(1, 100):
+            if not IpyGameDataPY.GetIpyGameDataNotLog("HeroQualityAwake", quality, aLV):
+                break
+            awakeLV = aLV
+    PlayerHero.SetHeroAwakeLV(heroItem, awakeLV, False)
+    
+    doCnt = 0
+    awakeRandCnt = singleItem.GetUserAttrCount(ShareDefine.Def_IudetHeroTalentIDAwakeRand)
+    while awakeRandCnt and doCnt <= 10:
+        doCnt += 1
+        selectIndex = random.randint(0, awakeRandCnt - 1)
+        itemIndex = heroItem.GetItemPlaceIndex()
+        PlayerHero.doSelectAwakeTalent(curPlayer, itemIndex, selectIndex, False)
+        awakeRandCnt = singleItem.GetUserAttrCount(ShareDefine.Def_IudetHeroTalentIDAwakeRand)
+        
+    # 突破
+    if setBreakLV != None:
+        breakLV = setBreakLV
+        if not IpyGameDataPY.GetIpyGameData("HeroQualityBreak", quality, breakLV):
+            GameWorld.DebugAnswer(curPlayer, "突破等级不存在:%s 品质:%s" % (breakLV, quality))
+            return
+    else:
+        breakLV = 0
+        for bLV in range(1, 100):
+            if not IpyGameDataPY.GetIpyGameDataNotLog("HeroQualityBreak", quality, bLV):
+                break
+            breakLV = bLV
+    PlayerHero.SetHeroBreakLV(curPlayer, heroItem, breakLV, False)
+    
+    # 星级
+    starMax = PlayerHero.GetHeroStarMax(heroItem)
+    if setStar != None:
+        updStar = min(setStar, starMax)
+    else:
+        updStar = starMax
+    PlayerHero.DoHeroUpdStar(curPlayer, heroItem, updStar, False)
+    
+    # 等级
+    lvMax = PlayerHero.GetHeroLVMax(heroItem)
+    if setLV != None:
+        updHeroLV = min(setLV, lvMax)
+    else:
+        updHeroLV = lvMax
+    singleItem.SetUserAttr(ShareDefine.Def_IudetHeroLV, updHeroLV)
+    
+    # 皮肤
+    skinIDList = heroIpyData.GetSkinIDList()
+    if setSkinID != None:
+        if setSkinID not in skinIDList:
+            GameWorld.DebugAnswer(curPlayer, "皮肤不存在:%s 品质:%s" % (heroID, setSkinID))
+            return
+        skinIndex = skinIDList.index(setSkinID)
+        singleItem.SetUserAttr(ShareDefine.Def_IudetHeroSkin, skinIndex)      
+        
+    heroItem.Sync_Item()
+    PlayerOnline.GetOnlinePlayer(curPlayer).OnHeroItemUpate(heroItem) # GM修改阵容
+    return

--
Gitblit v1.8.0