| | |
| | | singleItem.SetUserAttr(ShareDefine.Def_IudetHeroAwakeLV, 0)
|
| | | if singleItem.GetUserAttr(ShareDefine.Def_IudetHeroSkin):
|
| | | singleItem.SetUserAttr(ShareDefine.Def_IudetHeroSkin, 0)
|
| | | if singleItem.GetUserAttr(ShareDefine.Def_IudetHeroPosNum):
|
| | | singleItem.SetUserAttr(ShareDefine.Def_IudetHeroPosNum, 0)
|
| | |
|
| | | if singleItem.GetUserAttrCount(ShareDefine.Def_IudetHeroTalentID):
|
| | | singleItem.ClearUserAttr(ShareDefine.Def_IudetHeroTalentID)
|
| | |
| | | singleItem.ClearUserAttr(ShareDefine.Def_IudetHeroTalentWashID)
|
| | | if singleItem.GetUserAttrCount(ShareDefine.Def_IudetHeroTalentIDAwakeRand):
|
| | | singleItem.ClearUserAttr(ShareDefine.Def_IudetHeroTalentIDAwakeRand)
|
| | | if singleItem.GetUserAttrCount(ShareDefine.Def_IudetHeroLineup):
|
| | | singleItem.ClearUserAttr(ShareDefine.Def_IudetHeroLineup)
|
| | |
|
| | | InitHeroTalent(singleItem)
|
| | | return
|
| | |
| | | heroIpyData = IpyGameDataPY.GetIpyGameData("Hero", heroID)
|
| | | if not heroIpyData:
|
| | | return
|
| | | heroIndex = heroIpyData.GetHeroIndex()
|
| | | heroActState = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_HeroActState, heroIndex)
|
| | | if not heroActState:
|
| | | GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_HeroActState, heroIndex, 1)
|
| | | GameWorld.DebugLog("首次激活武将: heroID=%s,heroIndex=%s" % (heroID, heroIndex), curPlayer.GetPlayerID())
|
| | | |
| | | if not GetHeroActivite(curPlayer, heroID):
|
| | | SetHeroActivite(curPlayer, heroID, 1)
|
| | | GameWorld.DebugLog("首次激活武将: heroID=%s" % (heroID), curPlayer.GetPlayerID())
|
| | | #首次获得图鉴额外逻辑 ...
|
| | | Sync_HeroInfo(curPlayer, [heroID])
|
| | | |
| | | return
|
| | |
|
| | | def GetHeroActivite(curPlayer, heroID):
|
| | | ## 武将状态
|
| | | # @return: 0-未激活;1-武将已获得,可激活;2-图鉴已激活
|
| | | actState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBook % heroID) % 10
|
| | | return actState
|
| | |
|
| | | def SetHeroActivite(curPlayer, heroID, isAct=1):
|
| | | ## 设置武将已获得,可激活状态
|
| | | bookState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBook % heroID)
|
| | | actState = bookState % 10
|
| | | if isAct:
|
| | | if actState:
|
| | | return
|
| | | actState = 1
|
| | | else:
|
| | | actState = 0
|
| | | updBookState = GameWorld.SetValue(bookState, 1, 1, actState)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HeroBook % heroID, updBookState)
|
| | | GameWorld.DebugLog("设置武将激活状态:%s,bookState=%s,updBookState=%s" % (isAct, bookState, updBookState), curPlayer.GetPlayerID())
|
| | | return
|
| | |
|
| | | def GetHeroBookInitState(curPlayer, heroID):
|
| | | ## 武将图鉴激活状态
|
| | | initState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBook % heroID) % 10
|
| | | return initState > 1
|
| | | def SetHeroBookInitState(curPlayer, heroID, isAct=1):
|
| | | ## 设置武将图鉴激活状态
|
| | | bookState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBook % heroID)
|
| | | actState = bookState % 10
|
| | | if isAct:
|
| | | actState = 2
|
| | | else:
|
| | | actState = 1 if actState else 0
|
| | | updBookState = GameWorld.SetValue(bookState, 1, 1, actState)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HeroBook % heroID, updBookState)
|
| | | GameWorld.DebugLog("设置武将图鉴激活状态:%s,bookState=%s,updBookState=%s" % (isAct, bookState, updBookState), curPlayer.GetPlayerID())
|
| | | return
|
| | |
|
| | | def GetHeroBookStarLV(curPlayer, heroID):
|
| | | ## 武将图鉴星级等级
|
| | | bookState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBook % heroID)
|
| | | return GameWorld.GetValue(bookState, 4, 3)
|
| | | def SetHeroBookStarLV(curPlayer, heroID, starLV):
|
| | | ## 设置武将图鉴星级等级,支持三位数 0~999 级
|
| | | bookState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBook % heroID)
|
| | | updBookState = GameWorld.SetValue(bookState, 4, 3, starLV)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HeroBook % heroID, updBookState)
|
| | | GameWorld.DebugLog("设置武将图鉴星级等级:%s,bookState=%s,updBookState=%s" % (starLV, bookState, updBookState), curPlayer.GetPlayerID())
|
| | | return
|
| | |
|
| | | def GetHeroBookBreakLV(curPlayer, heroID):
|
| | | ## 武将图鉴突破等级
|
| | | bookState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBook % heroID)
|
| | | return GameWorld.GetValue(bookState, 7, 3)
|
| | | def SetHeroBookBreakLV(curPlayer, heroID, breakLV):
|
| | | ## 设置武将图鉴突破等级,支持三位数 0~999 级
|
| | | bookState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBook % heroID)
|
| | | updBookState = GameWorld.SetValue(bookState, 7, 3, breakLV)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HeroBook % heroID, updBookState)
|
| | | GameWorld.DebugLog("设置武将图鉴突破等级:%s,bookState=%s,updBookState=%s" % (breakLV, bookState, updBookState), curPlayer.GetPlayerID())
|
| | | return
|
| | |
|
| | | def GetHeroItem(curPlayer, itemIndex):
|
| | |
| | | if heroItem.GetType() != ChConfig.Def_ItemType_Hero:
|
| | | return
|
| | | return heroItem
|
| | |
|
| | | def GetHeroLineupPosNum(heroItem, lineupID=ShareDefine.Lineup_Main):
|
| | | ## 获取英雄所在阵型站位
|
| | | # @param lineupID: 阵型ID,默认主阵型
|
| | | # @return: 0-没有在该阵型;>0-在该阵型中的站位编号
|
| | | lineupCount = heroItem.GetUserAttrCount(ShareDefine.Def_IudetHeroLineup)
|
| | | if not lineupCount:
|
| | | return 0
|
| | | for lpIndex in range(lineupCount)[::-1]:
|
| | | lineupValue = heroItem.GetUserAttrByIndex(ShareDefine.Def_IudetHeroLineup, lpIndex)
|
| | | #阵容类型*10000+阵型类型*100+位置编号
|
| | | if lineupValue / 10000 != lineupID:
|
| | | continue
|
| | | return lineupValue % 100
|
| | | return 0
|
| | |
|
| | | #// B2 30 武将升级 #tagCSHeroLVUP
|
| | | #
|
| | |
| | | GameWorld.DebugLog("武将升级: itemIndex=%s,heroID=%s,updHeroLV=%s" % (itemIndex, heroID, updHeroLV), playerID)
|
| | | heroItem.SetUserAttr(ShareDefine.Def_IudetHeroLV, updHeroLV)
|
| | |
|
| | | # 刷属性,之后扩展
|
| | | |
| | | # 刷属性
|
| | | if GetHeroLineupPosNum(heroItem, ShareDefine.Lineup_Main):
|
| | | RefreshLordAttr(curPlayer)
|
| | | return
|
| | |
|
| | | def GetHeroLVMax(heroItem):
|
| | |
| | | % (itemIndex, heroID, useItemIndex, useHeroID), playerID)
|
| | | if heroID != useHeroID:
|
| | | GameWorld.DebugLog("武将材料非本体,无法升星!", playerID)
|
| | | return
|
| | | if useItem.GetIsLocked():
|
| | | GameWorld.DebugLog("材料卡锁定中,无法升星! useItemIndex=%s,heroID=%s" % (useItemIndex, heroID), playerID)
|
| | | return
|
| | | washIDCnt = heroItem.GetUserAttrCount(ShareDefine.Def_IudetHeroTalentWashID)
|
| | | if washIDCnt:
|
| | |
| | | __DoHeroStarTalentUp(item, addStar)
|
| | | heroItem.Sync_Item()
|
| | |
|
| | | # 刷属性,之后扩展
|
| | | |
| | | # 刷属性
|
| | | if GetHeroLineupPosNum(heroItem, ShareDefine.Lineup_Main):
|
| | | RefreshLordAttr(curPlayer)
|
| | | return
|
| | |
|
| | | def __DoHeroStarTalentUp(singleItem, addLV):
|
| | |
| | | GameWorld.DebugLog("武将突破: itemIndex=%s,heroID=%s,nextBreakLV=%s" % (itemIndex, heroID, nextBreakLV), playerID)
|
| | | SetHeroBreakLV(heroItem, nextBreakLV)
|
| | |
|
| | | # 刷属性,之后扩展
|
| | | |
| | | # 刷属性
|
| | | if GetHeroLineupPosNum(heroItem, ShareDefine.Lineup_Main):
|
| | | RefreshLordAttr(curPlayer)
|
| | | return
|
| | |
|
| | | def SetHeroBreakLV(heroItem, breakLV):
|
| | |
| | | GameWorld.DebugLog("武将觉醒: itemIndex=%s,heroID=%s,nextBreakLV=%s" % (itemIndex, heroID, nextAwakeLV), playerID)
|
| | | SetHeroAwakeLV(heroItem, nextAwakeLV)
|
| | |
|
| | | # 刷属性,之后扩展
|
| | | |
| | | # 刷属性
|
| | | if GetHeroLineupPosNum(heroItem, ShareDefine.Lineup_Main):
|
| | | RefreshLordAttr(curPlayer)
|
| | | return
|
| | |
|
| | | def SetHeroAwakeLV(heroItem, awakeLV):
|
| | |
| | |
|
| | | heroItem.Sync_Item()
|
| | |
|
| | | # 刷属性,之后扩展
|
| | | |
| | | # 刷属性
|
| | | if GetHeroLineupPosNum(heroItem, ShareDefine.Lineup_Main):
|
| | | RefreshLordAttr(curPlayer)
|
| | | return
|
| | |
|
| | | #// B2 35 武将洗炼 #tagCSHeroWash
|
| | |
| | | heroItem.Sync_Item()
|
| | | GameWorld.DebugLog("武将洗炼替换! itemIndex=%s,heroID=%s,washIDList=%s" % (itemIndex, heroID, washIDList))
|
| | |
|
| | | # 刷属性,之后扩展
|
| | | |
| | | # 刷属性
|
| | | if GetHeroLineupPosNum(heroItem, ShareDefine.Lineup_Main):
|
| | | RefreshLordAttr(curPlayer)
|
| | | return
|
| | |
|
| | | #// B2 36 武将换肤 #tagCSHeroWearSkin
|
| | |
| | | heroIpyData = IpyGameDataPY.GetIpyGameData("Hero", heroID)
|
| | | if not heroIpyData:
|
| | | return
|
| | | skinNPCIDList = heroIpyData.GetSkinNPCIDList()
|
| | | skinIDList = heroIpyData.GetSkinIDList()
|
| | | if skinIndex > 0: # 0的为默认皮肤,不做限制
|
| | | if skinIndex >= len(skinNPCIDList):
|
| | | if skinIndex >= len(skinIDList):
|
| | | GameWorld.DebugLog("该武将不存在该皮肤! heroID=%s,skinIndex=%s" % (heroID, skinIndex))
|
| | | return
|
| | | skinState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroSkin % heroID)
|
| | |
| | | heroItem.SetUserAttr(ShareDefine.Def_IudetHeroSkin, skinIndex)
|
| | |
|
| | | # 刷属性
|
| | | |
| | | if GetHeroLineupPosNum(heroItem, ShareDefine.Lineup_Main):
|
| | | RefreshLordAttr(curPlayer)
|
| | | |
| | | return
|
| | |
|
| | | def ActiveHeroSkin(curPlayer, heroID, skinIndex, isActive=True):
|
| | |
| | | % (heroID, skinIndex, skinState, updState), curPlayer.GetPlayerID())
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_HeroSkin % heroID, updState)
|
| | | Sync_HeroInfo(curPlayer, [heroID])
|
| | | |
| | | RefreshLordAttr(curPlayer)
|
| | | return
|
| | |
|
| | | #// B4 12 战斗阵型保存 #tagCSHeroBattlePosSave
|
| | | #// B2 37 武将图鉴激活升级 #tagCSHeroBookUP
|
| | | #
|
| | | #struct tagCSHeroBattlePos
|
| | | #struct tagCSHeroBookUP
|
| | | #{
|
| | | # tagHead Head;
|
| | | # DWORD HeroID; //武将ID
|
| | | # WORD ItemIndex; //关联武将物品所在武将背包索引,激活时可不用发
|
| | | # BYTE BookType; //图鉴激活类型: 0-初始激活;1-星级升级;2-突破等级升级
|
| | | #};
|
| | | def OnHeroBookUP(index, clientData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | heroID = clientData.HeroID
|
| | | itemIndex = clientData.ItemIndex
|
| | | bookType = clientData.BookType
|
| | | |
| | | if bookType == 1:
|
| | | __doHeroBookStarLVUP(curPlayer, heroID, itemIndex)
|
| | | elif bookType == 2:
|
| | | __doHeroBookBreakLVUP(curPlayer, heroID, itemIndex)
|
| | | else:
|
| | | __doHeroBookAct(curPlayer, heroID)
|
| | | return
|
| | |
|
| | | def __doHeroBookAct(curPlayer, heroID):
|
| | | ## 图鉴激活
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | if GetHeroBookInitState(curPlayer, heroID):
|
| | | GameWorld.DebugLog("该武将图鉴已激活! heroID=%s" % heroID, playerID)
|
| | | return
|
| | | GameWorld.DebugLog("武将图鉴激活! heroID=%s" % heroID, playerID)
|
| | | heroIpyData = IpyGameDataPY.GetIpyGameData("Hero", heroID)
|
| | | if not heroIpyData:
|
| | | return
|
| | | quality = heroIpyData.GetQuality()
|
| | | qualityIpyData = IpyGameDataPY.GetIpyGameData("HeroQuality", quality)
|
| | | if not qualityIpyData:
|
| | | return
|
| | | if GetHeroActivite(curPlayer, heroID) != 1:
|
| | | GameWorld.DebugLog("武将未获得过,不可激活图鉴! heroID=%s" % (heroID), playerID)
|
| | | return
|
| | | SetHeroBookInitState(curPlayer, heroID, 1)
|
| | | |
| | | awardMoneyInfo = qualityIpyData.GetBookActAwardMoney()
|
| | | if awardMoneyInfo and len(awardMoneyInfo) == 2:
|
| | | moneyType, moneyValue = awardMoneyInfo
|
| | | if moneyType and moneyValue:
|
| | | PlayerControl.GiveMoney(curPlayer, moneyType, moneyValue, "HeroBookAct")
|
| | | |
| | | Sync_HeroInfo(curPlayer, [heroID])
|
| | | |
| | | RefreshLordAttr(curPlayer)
|
| | | return
|
| | |
|
| | | def __doHeroBookStarLVUP(curPlayer, heroID, itemIndex):
|
| | | ## 图鉴星级升级
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | heroItem = GetHeroItem(curPlayer, itemIndex)
|
| | | if not heroItem:
|
| | | return
|
| | | if heroItem.GetItemTypeID() != heroID:
|
| | | GameWorld.DebugLog("非该武将图鉴关联物品! heroID=%s,itemID=%s" % (heroID, heroItem.GetItemTypeID()), playerID)
|
| | | return
|
| | | heroStar = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroStar)
|
| | | bookStar = GetHeroBookStarLV(curPlayer, heroID)
|
| | | if bookStar >= heroStar:
|
| | | GameWorld.DebugLog("该武将图鉴星级已达当前英雄星级! heroID=%s,bookStar=%s,heroStar=%s" % (heroID, bookStar, heroStar), playerID)
|
| | | return
|
| | | GameWorld.DebugLog("武将图鉴星级升级! heroID=%s,bookStar=%s,heroStar=%s" % (heroID, bookStar, heroStar), playerID)
|
| | | SetHeroBookStarLV(curPlayer, heroID, bookStar + 1)
|
| | | Sync_HeroInfo(curPlayer, [heroID])
|
| | | |
| | | RefreshLordAttr(curPlayer)
|
| | | return
|
| | |
|
| | | def __doHeroBookBreakLVUP(curPlayer, heroID, itemIndex):
|
| | | ## 图鉴突破升级
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | heroItem = GetHeroItem(curPlayer, itemIndex)
|
| | | if not heroItem:
|
| | | return
|
| | | if heroItem.GetItemTypeID() != heroID:
|
| | | GameWorld.DebugLog("非该武将图鉴关联物品! heroID=%s,itemID=%s" % (heroID, heroItem.GetItemTypeID()), playerID)
|
| | | return
|
| | | heroBreakLV = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroBreakLV)
|
| | | bookBreakLV = GetHeroBookBreakLV(curPlayer, heroID)
|
| | | if bookBreakLV >= heroBreakLV:
|
| | | GameWorld.DebugLog("该武将图鉴突破等级已达当前英雄突破等级! heroID=%s,bookBreakLV=%s,heroBreakLV=%s" % (heroID, bookBreakLV, heroBreakLV), playerID)
|
| | | return
|
| | | GameWorld.DebugLog("武将图鉴突破升级! heroID=%s,bookBreakLV=%s,heroBreakLV=%s" % (heroID, bookBreakLV, heroBreakLV), playerID)
|
| | | SetHeroBookBreakLV(curPlayer, heroID, bookBreakLV + 1)
|
| | | Sync_HeroInfo(curPlayer, [heroID])
|
| | | |
| | | RefreshLordAttr(curPlayer)
|
| | | return
|
| | |
|
| | | #// B2 38 武将锁定 #tagCSHeroLock
|
| | | #
|
| | | #struct tagCSHeroLock
|
| | | #{
|
| | | # tagHead Head;
|
| | | # WORD ItemIndex; //武将物品所在武将背包位置索引
|
| | | # BYTE IsLock; //0-解锁;1-锁定
|
| | | #};
|
| | | def OnHeroLock(index, clientData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | itemIndex = clientData.ItemIndex
|
| | | isLock = clientData.IsLock
|
| | | heroItem = GetHeroItem(curPlayer, itemIndex)
|
| | | if not heroItem:
|
| | | return
|
| | | heroItem.SetIsLocked(1 if isLock else 0)
|
| | | return
|
| | |
|
| | | #// B4 12 战斗阵容保存 #tagCSHeroLineupSave
|
| | | #
|
| | | #struct tagCSHeroLineupPos
|
| | | #{
|
| | | # WORD ItemIndex; //武将物品所在武将背包位置索引
|
| | | # BYTE PosNum; //1~n上阵位置编号
|
| | | #};
|
| | | #
|
| | | #struct tagCSHeroBattlePosSave
|
| | | #struct tagCSHeroLineupSave
|
| | | #{
|
| | | # tagHead Head;
|
| | | # BYTE FuncType; //布阵功能类型:0-默认主阵型;其他待扩展,如某个活动的防守阵型
|
| | | # BYTE LineupID; //阵容ID:1-主阵容;其他待扩展,如某个防守阵容
|
| | | # BYTE ShapeType; //本阵容阵型,0为默认阵型,可扩展不同的阵型
|
| | | # BYTE PosCnt;
|
| | | # tagCSHeroBattlePos HeroPosList[PosCnt]; // 保存的阵型,只要发送最终的阵型武将位置即可
|
| | | # tagCSHeroLineupPos HeroPosList[PosCnt]; // 保存的阵容,只发送最终的阵容武将位置即可
|
| | | #};
|
| | | def OnHeroBattlePosSave(index, clientData, tick):
|
| | | def OnHeroLineupSave(index, clientData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | funcType = clientData.FuncType
|
| | | lineupID = clientData.LineupID
|
| | | shapeType = clientData.ShapeType
|
| | | heroPosList = clientData.HeroPosList
|
| | |
|
| | | heroPosDict = {}
|
| | |
| | | posNum = posInfo.PosNum
|
| | | itemIndex = posInfo.ItemIndex
|
| | | if itemIndex in indexList:
|
| | | # 单英雄只能一个位置,一个位置只能对应唯一英雄单位
|
| | | # 单武将只能一个位置,一个位置只能对应唯一武将单位
|
| | | continue
|
| | | indexList.append(itemIndex)
|
| | | heroPosDict[posNum] = itemIndex
|
| | |
|
| | | # 主阵型
|
| | | if funcType == 0:
|
| | | MainBattlePosSave(curPlayer, heroPosDict)
|
| | | |
| | | # 其他待扩展
|
| | | elif funcType == 1:
|
| | | pass
|
| | | if lineupID not in ShareDefine.LineupList:
|
| | | GameWorld.DebugLog("不存在该阵容,无法保存! lineupID=%s" % lineupID)
|
| | | return
|
| | |
|
| | | return
|
| | |
|
| | | def MainBattlePosSave(curPlayer, heroPosDict):
|
| | | GameWorld.DebugLog("保留主战斗阵型: %s" % heroPosDict, curPlayer.GetPlayerID())
|
| | | GameWorld.DebugLog("保存阵容: lineupID=%s, %s" % (lineupID, heroPosDict), curPlayer.GetPlayerID())
|
| | | curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptHero)
|
| | | # 直接重置旧阵型
|
| | | delCount = 0
|
| | | syncItemDict = {}
|
| | | for index in range(curPack.GetCount()):
|
| | | heroItem = curPack.GetAt(index)
|
| | | if not heroItem or heroItem.IsEmpty():
|
| | | continue
|
| | | if not heroItem.GetUserAttr(ShareDefine.Def_IudetHeroPosNum):
|
| | | lineupCount = heroItem.GetUserAttrCount(ShareDefine.Def_IudetHeroLineup)
|
| | | if not lineupCount:
|
| | | continue
|
| | | item = heroItem.GetItem()
|
| | | item.ClearUserAttr(ShareDefine.Def_IudetHeroPosNum)
|
| | | |
| | | for lpIndex in range(lineupCount)[::-1]:
|
| | | lineupValue = item.GetUserAttrByIndex(ShareDefine.Def_IudetHeroLineup, lpIndex)
|
| | | #阵容类型*10000+阵型类型*100+位置编号
|
| | | if lineupValue / 10000 != lineupID:
|
| | | continue
|
| | | item.DelUserAttr(ShareDefine.Def_IudetHeroLineup, lineupValue)
|
| | | delCount += 1
|
| | | if delCount >= ShareDefine.LineupObjMax:
|
| | | break
|
| | | syncItemDict[index] = heroItem
|
| | | |
| | | # 更新新阵型
|
| | | heroIDList = []
|
| | | for posNum, itemIndex in heroPosDict.items():
|
| | | if itemIndex < 0 or itemIndex >= curPack.GetCount():
|
| | | continue
|
| | | heroItem = curPack.GetAt(itemIndex)
|
| | | if not heroItem or heroItem.IsEmpty():
|
| | | continue
|
| | | itemID = heroItem.GetItemTypeID()
|
| | | if itemID in heroIDList:
|
| | | GameWorld.DebugLog("同个武将只能上阵一个! itemIndex=%s,itemID=%s" % (itemIndex, itemID))
|
| | | continue
|
| | | heroIDList.append(itemID)
|
| | | item = heroItem.GetItem()
|
| | | item.SetUserAttr(ShareDefine.Def_IudetHeroPosNum, posNum)
|
| | | lineupValue = lineupID * 10000 + shapeType * 100 + posNum
|
| | | item.AddUserAttr(ShareDefine.Def_IudetHeroLineup, lineupValue)
|
| | | if itemIndex not in syncItemDict:
|
| | | syncItemDict[itemIndex] = heroItem
|
| | |
|
| | | ResetHeroPack(curPlayer)
|
| | | # 主阵容修改时重整背包
|
| | | if lineupID == ShareDefine.Lineup_Main:
|
| | | ResetHeroPack(curPlayer)
|
| | | else:
|
| | | for syncItem in syncItemDict.values():
|
| | | syncItem.Sync_Item()
|
| | | |
| | | RefreshLordAttr(curPlayer)
|
| | | return
|
| | |
|
| | | def ResetHeroPack(curPlayer):
|
| | |
| | | ItemControler.ResetItem(curPlayer, ShareDefine.rptHero, 0, 0, tick)
|
| | | return
|
| | |
|
| | | def RefreshLordAttr(curPlayer):
|
| | | ## 刷新主公属性
|
| | | CalcHeroItemAddAttr(curPlayer)
|
| | | return
|
| | |
|
| | | def CalcHeroItemAddAttr(curPlayer):
|
| | | #allAttrListPet = [{} for _ in range(4)]
|
| | | return
|
| | |
|
| | | def RefreshLineupHeroAttr(curPlayer):
|
| | | ## 刷新阵容武将属性
|
| | | |
| | | # 计算阵容总战力 = 角色总战力为主阵容战力,需同步计算不同阵容战力
|
| | | return
|
| | |
|
| | | def CaclHeroCardAttr():
|
| | | return
|
| | |
|
| | | def Sync_HeroInfo(curPlayer, heroIDList=None):
|
| | | if heroIDList != None:
|
| | | syncHeroIDList = heroIDList
|
| | |
| | | heroIpyData = IpyGameDataPY.GetIpyGameData("Hero", heroID)
|
| | | if not heroIpyData:
|
| | | continue
|
| | | heroIndex = heroIpyData.GetHeroIndex()
|
| | | heroActState = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_HeroActState, heroIndex)
|
| | | if not heroActState and heroIDList == None:
|
| | | if heroIDList == None and not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBook % heroID):
|
| | | continue
|
| | |
|
| | | hero = ChPyNetSendPack.tagSCHero()
|
| | | hero.HeroID = heroID
|
| | | hero.IsActive = heroActState
|
| | | hero.SkinState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroSkin % heroID)
|
| | | hero.BookInitState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroBook % heroID) % 10
|
| | | hero.BookStarLV = GetHeroBookStarLV(curPlayer, heroID)
|
| | | hero.BookBreakLV = GetHeroBookBreakLV(curPlayer, heroID)
|
| | | syncInfoList.append(hero)
|
| | |
|
| | | if not syncInfoList:
|