From 22bb99e929439653669b8b2e14325dcc865c7fe3 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 17 十月 2025 16:05:08 +0800
Subject: [PATCH] 66 【公会】基础主体-服务端(快速加入公会失败提示)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Hero.py | 251 ++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 233 insertions(+), 18 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 cb4faeb..1c9827d 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
@@ -18,8 +18,12 @@
import PlayerHero
import ShareDefine
import IpyGameDataPY
+import PlayerControl
+import ItemControler
+import PlayerOnline
import GameWorld
import ChConfig
+import random
## GM命令执行入口
# @param curPlayer 当前玩家
@@ -34,45 +38,71 @@
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 武将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, "新增武将: MakeItemCount 英雄ID [个数]")
+ GameWorld.DebugAnswer(curPlayer, "阵容上阵: Hero f 阵容ID [武将ID ...]")
+ GameWorld.DebugAnswer(curPlayer, "阵容武将: Hero h 阵容ID 武将ID 等级 星级 突破等级 觉醒等级 皮肤")
+ GameWorld.DebugAnswer(curPlayer, "阵容满级: Hero h 阵容ID 1")
return
+
+ PlayerOnline.GetOnlinePlayer(curPlayer).RefreshRoleAttr()
value = msgList[0]
value2 = msgList[1] if len(msgList) > 1 else 0
+ # 阵容上阵
+ if value == "f":
+ __oneKeyLineup(curPlayer, msgList)
+ return
+
+ # 阵容武将
+ if value == "h":
+ __lineupHero(curPlayer, msgList)
+ return
+
# 图鉴
if value == "t":
- isAct = 0
if not value2:
heroIDList = []
ipyDataMgr = IpyGameDataPY.IPY_Data()
for index in range(ipyDataMgr.GetHeroCount()):
ipyData = ipyDataMgr.GetHeroByIndex(index)
+ if not ipyData.GetPlayerCanUse():
+ continue
heroIDList.append(ipyData.GetHeroID())
else:
- isAct = msgList[2] if len(msgList) > 2 else 0
heroIDList = [value2]
-
- syncHeroIDList = []
- for heroID in heroIDList:
- heroIpyData = IpyGameDataPY.GetIpyGameData("Hero", heroID)
- if not heroIpyData:
- continue
- heroIndex = heroIpyData.GetHeroIndex()
- if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_HeroActState, heroIndex) == isAct:
- continue
- GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_HeroActState, heroIndex, isAct)
- syncHeroIDList.append(heroID)
- PlayerHero.Sync_HeroInfo(curPlayer, syncHeroIDList)
- if not value2:
+ if value2 == 0:
+ syncHeroIDList = []
+ for heroID in heroIDList:
+ if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBook % heroID):
+ continue
+ syncHeroIDList.append(heroID)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HeroBook % heroID, 0)
GameWorld.DebugAnswer(curPlayer, "重置图鉴OK!")
else:
- GameWorld.DebugAnswer(curPlayer, "设置武将(%s),激活(%s)" % (value2, isAct))
+ 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
# 皮肤
@@ -120,7 +150,7 @@
# 突破
if value == "b":
breakLV = msgList[2] if len(msgList) > 2 else 0
- PlayerHero.SetHeroBreakLV(heroItem, breakLV)
+ PlayerHero.SetHeroBreakLV(curPlayer, heroItem, breakLV)
GameWorld.DebugAnswer(curPlayer, "设置武将突破: %s,itemIndex=%s" % (breakLV, itemIndex))
return
@@ -133,3 +163,188 @@
return
+def __oneKeyLineup(curPlayer, msgList):
+ ## 阵容上阵: Hero f 阵容ID [武将ID ...]
+ lineupID = msgList[1] if len(msgList) > 1 else 0
+ 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
+
+ if not heroIDList:
+ GameWorld.DebugAnswer(curPlayer, "没有指定阵容武将ID列表!")
+ return
+
+ for heroID in heroIDList:
+ if not GameWorld.GetGameData().GetItemByTypeID(heroID):
+ GameWorld.DebugAnswer(curPlayer, "不存在该武将: %s" % heroID)
+ return
+
+ shapeType = 0
+ haveHeroIDList = []
+ curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptHero)
+ # 直接重置旧阵型
+ syncItemDict = {}
+ for index in range(curPack.GetCount()):
+ heroItem = curPack.GetAt(index)
+ if not heroItem or heroItem.IsEmpty():
+ continue
+ heroID = heroItem.GetItemTypeID()
+ if heroID in heroIDList and heroID not in haveHeroIDList:
+ haveHeroIDList.append(heroID)
+ lineupCount = heroItem.GetUserAttrCount(ShareDefine.Def_IudetHeroLineup)
+ if not lineupCount:
+ continue
+ item = heroItem.GetItem()
+ for lpIndex in range(lineupCount)[::-1]:
+ lineupValue = item.GetUserAttrByIndex(ShareDefine.Def_IudetHeroLineup, lpIndex)
+ if PlayerHero.GetLineupValue(lineupValue)[0] != lineupID:
+ continue
+ item.DelUserAttr(ShareDefine.Def_IudetHeroLineup, lineupValue)
+ syncItemDict[index] = heroItem
+
+ # 给没有的武将
+ for heroID in heroIDList:
+ if heroID in haveHeroIDList:
+ continue
+ if not ItemControler.GivePlayerItem(curPlayer, heroID, 1, False):
+ break
+
+ # 更新新阵型
+ heroItemDict = {}
+ updHeroIDList = []
+ for index in range(curPack.GetCount()):
+ heroItem = curPack.GetAt(index)
+ if not heroItem or heroItem.IsEmpty():
+ continue
+ heroID = heroItem.GetItemTypeID()
+ if heroID not in heroIDList:
+ continue
+ if heroID in updHeroIDList:
+ # 已经上过该武将了
+ continue
+ updHeroIDList.append(heroID)
+ posNum = heroIDList.index(heroID) + 1
+ item = heroItem.GetItem()
+ lineupValue = PlayerHero.ComLineupValue(lineupID, shapeType, posNum)
+ item.AddUserAttr(ShareDefine.Def_IudetHeroLineup, lineupValue)
+ if index not in syncItemDict:
+ syncItemDict[index] = heroItem
+ heroItemDict[index] = posNum
+
+ for syncItem in syncItemDict.values():
+ syncItem.Sync_Item()
+
+ lineup = PlayerOnline.GetOnlinePlayer(curPlayer).GetLineup(lineupID)
+ lineup.UpdLineup(heroItemDict, shapeType)
+ GameWorld.DebugAnswer(curPlayer, "阵容(%s)上阵OK: %s" % (lineupID, heroItemDict))
+ return
+
+def __lineupHero(curPlayer, msgList):
+ #阵容武将: Hero h 阵容ID 武将ID 等级 星级 突破等级 觉醒等级 皮肤
+ #阵容满级: Hero h 阵容ID 1
+ lineupID = msgList[1] if len(msgList) > 1 else 0
+ heroID = msgList[2] if len(msgList) > 2 else 0
+ setLV = msgList[3] if len(msgList) > 3 else None
+ setStar = msgList[4] if len(msgList) > 4 else None
+ setBreakLV = msgList[5] if len(msgList) > 5 else None
+ setAwakeLV = msgList[6] if len(msgList) > 6 else None
+ setSkinID = msgList[7] if len(msgList) > 7 else None
+
+ olPlayer = PlayerOnline.GetOnlinePlayer(curPlayer)
+ lineup = olPlayer.GetLineup(lineupID)
+ if heroID == 1:
+ setIndexList = lineup.heroItemDict.keys()
+ else:
+ lineupHero = lineup.GetLineupHeroByID(heroID)
+ if not lineupHero:
+ GameWorld.DebugAnswer(curPlayer, "该阵容不存在该武将: %s" % heroID)
+ return
+ setIndexList = [lineupHero.itemIndex]
+
+ curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptHero)
+ for itemIndex in setIndexList:
+ if itemIndex < 0 or itemIndex >= curPack.GetCount():
+ continue
+ 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])
+
+ GameWorld.DebugAnswer(curPlayer, "设置阵容武将OK")
+ return
--
Gitblit v1.8.0