From 1fb002af86296eeb89a18cc2a3eba4d090d1e94b Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 09 一月 2026 15:52:04 +0800
Subject: [PATCH] 271 【内政】古宝系统-服务端(修复古宝共鸣存在未激活古宝时激活共鸣0星属性bug;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Hero.py | 334 ++++++++++++++++++++++++++++++++++++++----------------
1 files changed, 233 insertions(+), 101 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 1c9827d..9f66fe3 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,15 +38,19 @@
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, "清空武将: ClearPack 35")
+ 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 ...]")
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()
@@ -57,6 +61,11 @@
# 阵容上阵
if value == "f":
__oneKeyLineup(curPlayer, msgList)
+ return
+
+ # 一键满级
+ if value == "max":
+ __oneKeyMax(curPlayer, msgList)
return
# 阵容武将
@@ -78,6 +87,7 @@
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):
@@ -85,17 +95,29 @@
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
@@ -113,29 +135,87 @@
PlayerHero.ActiveHeroSkin(curPlayer, heroID, skinIndex, isActive)
return
+ if value == "clear":
+ isAll = value2
+ backPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptHero)
+ for i in range(backPack.GetCount()):
+ curItem = backPack.GetAt(i)
+ if not curItem or curItem.IsEmpty():
+ continue
+ if not isAll:
+ if curItem.GetUserAttr(ShareDefine.Def_IudetHeroCardEffective):
+ continue
+ curItem.Clear()
+
+ if isAll:
+ PlayerOnline.GetOnlinePlayer(curPlayer).SetEffectiveCardDict({}) # 清空生效缓存
+ 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)
@@ -145,22 +225,64 @@
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
+ 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 __oneKeyMax(curPlayer, msgList):
+ ## 一键满级: Hero max [指定等级 星级 突破 觉醒]
+ setLV = msgList[1] if len(msgList) > 1 else None
+ setStar = msgList[2] if len(msgList) > 2 else None
+ setBreakLV = msgList[3] if len(msgList) > 3 else None
+ setAwakeLV = msgList[4] if len(msgList) > 4 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):
@@ -238,7 +360,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
@@ -272,79 +394,89 @@
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([itemIndex])
+ __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()
+
+ # 重置
+ PlayerHero.InitHeroItem(singleItem)
+
+ # 天赋
+ awakeLVMax = 0
+ for aLV in range(1, 100):
+ if not IpyGameDataPY.GetIpyGameDataNotLog("HeroQualityAwake", quality, aLV):
+ break
+ awakeLVMax = aLV
+ if setAwakeLV != None:
+ awakeLV = min(setAwakeLV, awakeLVMax)
+ if not IpyGameDataPY.GetIpyGameData("HeroQualityAwake", quality, awakeLV):
+ #GameWorld.DebugAnswer(curPlayer, "觉醒等级不存在:%s 品质:%s" % (awakeLV, quality))
+ awakeLV = 0
+ else:
+ awakeLV = awakeLVMax
+ 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)
+
+ # 突破
+ breakLVMax = 0
+ for bLV in range(1, 100):
+ if not IpyGameDataPY.GetIpyGameDataNotLog("HeroQualityBreak", quality, bLV):
+ break
+ breakLVMax = bLV
+ if setBreakLV != None:
+ breakLV = min(setBreakLV, breakLVMax)
+ if not IpyGameDataPY.GetIpyGameData("HeroQualityBreak", quality, breakLV):
+ #GameWorld.DebugAnswer(curPlayer, "突破等级不存在:%s 品质:%s" % (breakLV, quality))
+ breakLV = 0
+ else:
+ breakLV = breakLVMax
+ 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 = max(1, 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