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