| | |
| | | import ShareDefine
|
| | | import IpyGameDataPY
|
| | | import PlayerControl
|
| | | import ItemControler
|
| | | import PlayerOnline
|
| | | import GameWorld
|
| | | import ChConfig
|
| | | import random
|
| | |
|
| | | ## GM命令执行入口
|
| | | # @param curPlayer 当前玩家
|
| | |
| | | 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":
|
| | |
| | |
|
| | | return
|
| | |
|
| | | def __oneKeyLineup(curPlayer, msgList):
|
| | | ## 阵容上阵: Hero f 阵容ID [武将ID ...]
|
| | | lineupID = msgList[1] if len(msgList) > 1 else 0
|
| | | heroIDList = list(set(msgList[2:])) # 去重,单阵容武将ID不能重复
|
| | | |
| | | 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(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
|