8298 【恺英】【后端】基础套装极/仙/神进阶
8297 【恺英】【后端】雷罚/灵玉装备进阶
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 30 装备神装进阶 #tagCMEquipEvolve
|
| | |
|
| | | class tagCMEquipEvolve(Structure):
|
| | | Head = tagHead()
|
| | | EquipIndex = 0 #(BYTE EquipIndex)// 要进阶的装备在装备背包中索引
|
| | | NeedEquipIDIndex = 0 #(BYTE NeedEquipIDIndex)// 所需固定装备B在背包中索引
|
| | | NeedItemIDIndexCnt = 0 #(BYTE NeedItemIDIndexCnt)// 附加材料在背包中索引个数
|
| | | NeedItemIDIndex = list() #(vector<BYTE> NeedItemIDIndex)// 附加材料在背包的索引列表
|
| | | NeedSuitIndexCnt = 0 #(BYTE NeedSuitIndexCnt)// 所需套装材料在背包中索引个数
|
| | | NeedSuitIndex = list() #(vector<BYTE> NeedSuitIndex)// 所需套装材料在背包的索引列表
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0x30
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.EquipIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.NeedEquipIDIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.NeedItemIDIndexCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.NeedItemIDIndexCnt):
|
| | | value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
|
| | | self.NeedItemIDIndex.append(value)
|
| | | self.NeedSuitIndexCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.NeedSuitIndexCnt):
|
| | | value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
|
| | | self.NeedSuitIndex.append(value)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0x30
|
| | | self.EquipIndex = 0
|
| | | self.NeedEquipIDIndex = 0
|
| | | self.NeedItemIDIndexCnt = 0
|
| | | self.NeedItemIDIndex = list()
|
| | | self.NeedSuitIndexCnt = 0
|
| | | self.NeedSuitIndex = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 1
|
| | | length += 1
|
| | | length += 1 * self.NeedItemIDIndexCnt
|
| | | length += 1
|
| | | length += 1 * self.NeedSuitIndexCnt
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.EquipIndex)
|
| | | data = CommFunc.WriteBYTE(data, self.NeedEquipIDIndex)
|
| | | data = CommFunc.WriteBYTE(data, self.NeedItemIDIndexCnt)
|
| | | for i in range(self.NeedItemIDIndexCnt):
|
| | | data = CommFunc.WriteBYTE(data, self.NeedItemIDIndex[i])
|
| | | data = CommFunc.WriteBYTE(data, self.NeedSuitIndexCnt)
|
| | | for i in range(self.NeedSuitIndexCnt):
|
| | | data = CommFunc.WriteBYTE(data, self.NeedSuitIndex[i])
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | EquipIndex:%d,
|
| | | NeedEquipIDIndex:%d,
|
| | | NeedItemIDIndexCnt:%d,
|
| | | NeedItemIDIndex:%s,
|
| | | NeedSuitIndexCnt:%d,
|
| | | NeedSuitIndex:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.EquipIndex,
|
| | | self.NeedEquipIDIndex,
|
| | | self.NeedItemIDIndexCnt,
|
| | | "...",
|
| | | self.NeedSuitIndexCnt,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMEquipEvolve=tagCMEquipEvolve()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMEquipEvolve.Head.Cmd,m_NAtagCMEquipEvolve.Head.SubCmd))] = m_NAtagCMEquipEvolve
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | #A3 01 装备强化 #tagEquipPlus
|
| | |
|
| | | class tagEquipPlus(Structure):
|
| | |
| | | PacketSubCMD_2=0x26
|
| | | PacketCallFunc_2=OnEquipWashAttrChangeOK
|
| | |
|
| | | ;装备进阶
|
| | | [EquipEvolve]
|
| | | ScriptName = Event\EventSrc\Operate_EquipEvolve.py
|
| | | Writer = hxp
|
| | | Releaser = hxp
|
| | | RegType = 0
|
| | | RegisterPackCount = 1
|
| | |
|
| | | PacketCMD_1=0xA3
|
| | | PacketSubCMD_1=0x30
|
| | | PacketCallFunc_1=OnEquipWashEvolve
|
| | |
|
| | | ;NPC
|
| | | [NPCCommon]
|
| | |
| | | ItemDel_ChatBubbleBox, # 激活聊天气泡框
|
| | | ItemDel_GatherSoul, # 聚魂分解
|
| | | ItemDel_CoatDecompose, # 时装分解
|
| | | ItemDel_2037,
|
| | | ItemDel_EquipEvolve, # 装备进阶
|
| | | ItemDel_EquipStarUp, # 装备升星
|
| | | ItemDel_EquipPlusEvolve, # 装备强化进化
|
| | | ItemDel_LingQiEquipBreak, # 灵器突破
|
| | |
| | | ItemDel_ChatBubbleBox:"ChatBubbleBox",
|
| | | ItemDel_GatherSoul:"GatherSoul",
|
| | | ItemDel_CoatDecompose:"CoatDecompose",
|
| | | ItemDel_EquipEvolve:"EquipEvolve",
|
| | | ItemDel_EquipStarUp:"EquipStarUp",
|
| | | ItemDel_EquipPlusEvolve:"EquipPlusEvolve",
|
| | | ItemDel_LingQiEquipBreak:"LingQiEquipBreak",
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 30 装备神装进阶 #tagCMEquipEvolve
|
| | |
|
| | | class tagCMEquipEvolve(Structure):
|
| | | Head = tagHead()
|
| | | EquipIndex = 0 #(BYTE EquipIndex)// 要进阶的装备在装备背包中索引
|
| | | NeedEquipIDIndex = 0 #(BYTE NeedEquipIDIndex)// 所需固定装备B在背包中索引
|
| | | NeedItemIDIndexCnt = 0 #(BYTE NeedItemIDIndexCnt)// 附加材料在背包中索引个数
|
| | | NeedItemIDIndex = list() #(vector<BYTE> NeedItemIDIndex)// 附加材料在背包的索引列表
|
| | | NeedSuitIndexCnt = 0 #(BYTE NeedSuitIndexCnt)// 所需套装材料在背包中索引个数
|
| | | NeedSuitIndex = list() #(vector<BYTE> NeedSuitIndex)// 所需套装材料在背包的索引列表
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0x30
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.EquipIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.NeedEquipIDIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.NeedItemIDIndexCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.NeedItemIDIndexCnt):
|
| | | value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
|
| | | self.NeedItemIDIndex.append(value)
|
| | | self.NeedSuitIndexCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.NeedSuitIndexCnt):
|
| | | value,_pos=CommFunc.ReadBYTE(_lpData,_pos)
|
| | | self.NeedSuitIndex.append(value)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0x30
|
| | | self.EquipIndex = 0
|
| | | self.NeedEquipIDIndex = 0
|
| | | self.NeedItemIDIndexCnt = 0
|
| | | self.NeedItemIDIndex = list()
|
| | | self.NeedSuitIndexCnt = 0
|
| | | self.NeedSuitIndex = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 1
|
| | | length += 1
|
| | | length += 1 * self.NeedItemIDIndexCnt
|
| | | length += 1
|
| | | length += 1 * self.NeedSuitIndexCnt
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.EquipIndex)
|
| | | data = CommFunc.WriteBYTE(data, self.NeedEquipIDIndex)
|
| | | data = CommFunc.WriteBYTE(data, self.NeedItemIDIndexCnt)
|
| | | for i in range(self.NeedItemIDIndexCnt):
|
| | | data = CommFunc.WriteBYTE(data, self.NeedItemIDIndex[i])
|
| | | data = CommFunc.WriteBYTE(data, self.NeedSuitIndexCnt)
|
| | | for i in range(self.NeedSuitIndexCnt):
|
| | | data = CommFunc.WriteBYTE(data, self.NeedSuitIndex[i])
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | EquipIndex:%d,
|
| | | NeedEquipIDIndex:%d,
|
| | | NeedItemIDIndexCnt:%d,
|
| | | NeedItemIDIndex:%s,
|
| | | NeedSuitIndexCnt:%d,
|
| | | NeedSuitIndex:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.EquipIndex,
|
| | | self.NeedEquipIDIndex,
|
| | | self.NeedItemIDIndexCnt,
|
| | | "...",
|
| | | self.NeedSuitIndexCnt,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMEquipEvolve=tagCMEquipEvolve()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMEquipEvolve.Head.Cmd,m_NAtagCMEquipEvolve.Head.SubCmd))] = m_NAtagCMEquipEvolve
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | #A3 01 装备强化 #tagEquipPlus
|
| | |
|
| | | class tagEquipPlus(Structure):
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package Event.EventSrc.Operate_EquipEvolve
|
| | | #
|
| | | # @todo:装备神装进阶
|
| | | # @author hxp
|
| | | # @date 2019-10-07
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 装备神装进阶
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2019-10-07 19:00"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import GameWorld
|
| | | import ItemCommon
|
| | | import IPY_GameWorld
|
| | | import PlayerControl
|
| | | import IpyGameDataPY
|
| | | import ItemControler
|
| | | import ShareDefine
|
| | | import ChConfig
|
| | | import ChEquip
|
| | |
|
| | |
|
| | | #// A3 30 装备神装进阶 #tagCMEquipEvolve
|
| | | #
|
| | | #struct tagCMEquipEvolve
|
| | | #{
|
| | | # tagHead Head;
|
| | | # BYTE EquipIndex; // 要进阶的装备在装备背包中索引
|
| | | # BYTE NeedEquipIDIndex; // 所需固定装备B在背包中索引
|
| | | # BYTE NeedItemIDIndexCnt; // 附加材料在背包中索引个数
|
| | | # BYTE NeedItemIDIndex[NeedItemIDIndexCnt]; // 附加材料在背包的索引列表
|
| | | # BYTE NeedSuitIndexCnt; // 所需套装材料在背包中索引个数
|
| | | # BYTE NeedSuitIndex[NeedSuitIndexCnt]; // 所需套装材料在背包的索引列表
|
| | | #};
|
| | | def OnEquipWashEvolve(index, clientData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | equipIndex = clientData.EquipIndex
|
| | | needEquipIDIndex = clientData.NeedEquipIDIndex
|
| | | needItemIDIndexList = clientData.NeedItemIDIndex
|
| | | needSuitIndexList = clientData.NeedSuitIndex
|
| | | |
| | | equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
|
| | | curEquip = equipPack.GetAt(equipIndex)
|
| | | if not ItemCommon.CheckItemCanUse(curEquip):
|
| | | return
|
| | | equipItemID = curEquip.GetItemTypeID()
|
| | | equipClassLV = ItemCommon.GetItemClassLV(curEquip)
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("EquipShenEvolve", equipItemID)
|
| | | if not ipyData:
|
| | | return
|
| | | evolveEquipID = ipyData.GetEvolveEquipID()
|
| | | needItemIDInfo = ipyData.GetEvolveNeedItemIDInfo()
|
| | | needSuitCount = ipyData.GetEvolveNeedSuitCount()
|
| | | needEquipID = ipyData.GetEvolveNeedEquipID()
|
| | | |
| | | evolveEquipItemData = GameWorld.GetGameData().GetItemByTypeID(evolveEquipID)
|
| | | if not evolveEquipItemData:
|
| | | return
|
| | | |
| | | # 验证所需材料
|
| | | itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
|
| | | needItemCount = 0
|
| | | if needItemIDInfo:
|
| | | needItemCount = __CheckNeedItem(curPlayer, needItemIDInfo, needItemIDIndexList, itemPack)
|
| | | if needItemCount == None:
|
| | | return
|
| | | |
| | | if needSuitCount:
|
| | | if not __CheckNeedSuitEquip(curPlayer, needSuitCount, equipClassLV, needSuitIndexList, itemPack):
|
| | | return
|
| | | |
| | | if needEquipID:
|
| | | if not __CheckNeedEquipID(curPlayer, needEquipID, needEquipIDIndex, itemPack):
|
| | | return
|
| | | |
| | | drDict = {"equipItemID":equipItemID, "evolveEquipID":evolveEquipID}
|
| | | # 扣除材料
|
| | | if needItemCount:
|
| | | ItemCommon.ReduceItem(curPlayer, itemPack, needItemIDIndexList, needItemCount, |
| | | False, ChConfig.ItemDel_EquipEvolve, drDict)
|
| | | |
| | | if needSuitCount:
|
| | | ItemCommon.ReduceItem(curPlayer, itemPack, needSuitIndexList, needSuitCount, |
| | | False, ChConfig.ItemDel_EquipEvolve, drDict)
|
| | | |
| | | if needEquipID:
|
| | | ItemCommon.ReduceItem(curPlayer, itemPack, [needEquipIDIndex], 1, |
| | | False, ChConfig.ItemDel_EquipEvolve, drDict)
|
| | | |
| | | # 原装备替换成进阶装备
|
| | | evolveEquip = ItemControler.GetOutPutItemObj(evolveEquipID, curPlayer=curPlayer)
|
| | | if not evolveEquip:
|
| | | return
|
| | | curEquip.AssignItem(evolveEquip)
|
| | | curPlayer.Sync_MakeItemAnswer(ShareDefine.Def_mitEquipEvolve, ChConfig.Def_ComposeState_Sucess)
|
| | | GameWorld.DebugLog("进阶神装成功! equipItemID=%s,evolveEquipID=%s" % (equipItemID, evolveEquipID), playerID)
|
| | | |
| | | #刷新属性
|
| | | ChEquip.RefreshPlayerEquipAttribute(curPlayer, equipClassLV)
|
| | | playControl = PlayerControl.PlayerControl(curPlayer)
|
| | | playControl.RefreshPlayerAttrState()
|
| | | return
|
| | |
|
| | | def __CheckNeedItem(curPlayer, needItemIDInfo, needItemIDIndexList, itemPack):
|
| | | ## 检查所需额外材料物品
|
| | | |
| | | playerID = curPlayer.GetPlayerID()
|
| | | needItemID, needItemCount = needItemIDInfo
|
| | | maxPackCount = itemPack.GetCount()
|
| | | totalCount = 0
|
| | | for index in needItemIDIndexList:
|
| | | if index >= maxPackCount:
|
| | | GameWorld.DebugLog("该物品材料格子索引不存在!无法进阶!index=%s,maxPackCount=%s" |
| | | % (index, maxPackCount), playerID)
|
| | | return
|
| | | curItem = itemPack.GetAt(index)
|
| | | if not ItemCommon.CheckItemCanUse(curItem):
|
| | | GameWorld.DebugLog("该物品材料不可使用!无法进阶! index=%s" % (index), playerID)
|
| | | return
|
| | | itemID = curItem.GetItemTypeID()
|
| | | if itemID != needItemID:
|
| | | GameWorld.DebugLog("该物品材料不可用于进阶!index=%s,itemID=%s != needItemID=%s" |
| | | % (index, itemID, needItemID), playerID)
|
| | | return
|
| | | totalCount += curItem.GetCount()
|
| | | |
| | | if totalCount < needItemCount:
|
| | | GameWorld.DebugLog("所需额外材料个数不足,无法进阶! needItemIDIndexList=%s,totalCount=%s < needItemCount=%s" |
| | | % (needItemIDIndexList, totalCount, needItemCount), playerID)
|
| | | return
|
| | | |
| | | return needItemCount
|
| | |
|
| | |
|
| | | def __CheckNeedSuitEquip(curPlayer, needSuitCount, equipClassLV, needSuitIndexList, itemPack):
|
| | | ## 检查所需套装材料
|
| | | |
| | | playerID = curPlayer.GetPlayerID()
|
| | | maxPackCount = itemPack.GetCount()
|
| | | totalCount = 0
|
| | | for index in needSuitIndexList:
|
| | | if index >= maxPackCount:
|
| | | GameWorld.DebugLog("该套装格子索引不存在!无法进阶!index=%s,maxPackCount=%s" |
| | | % (index, maxPackCount), playerID)
|
| | | return
|
| | | curItem = itemPack.GetAt(index)
|
| | | if not ItemCommon.CheckItemCanUse(curItem):
|
| | | GameWorld.DebugLog("该套装不可使用!无法进阶! index=%s" % (index), playerID)
|
| | | return
|
| | | classLV = ItemCommon.GetItemClassLV(curItem)
|
| | | if classLV != equipClassLV:
|
| | | GameWorld.DebugLog("该套装材料阶不相同,不可用于进阶!index=%s,classLV=%s != equipClassLV=%s" |
| | | % (index, classLV, equipClassLV), playerID)
|
| | | return
|
| | | color = curItem.GetItemColor()
|
| | | if color != ChConfig.Def_Quality_Orange:
|
| | | GameWorld.DebugLog("该套装材料非橙装,不可用于进阶!index=%s,color=%s" % (index, color), playerID)
|
| | | return
|
| | | suieID = curItem.GetSuiteID()
|
| | | if not suieID:
|
| | | GameWorld.DebugLog("该套装材料非套装装备,不可用于进阶!index=%s,suieID=%s" % (index, suieID), playerID)
|
| | | return
|
| | | if not ItemCommon.CheckJob(curPlayer, curItem):
|
| | | GameWorld.DebugLog("该套装材料非本职业,不可用于进阶!index=%s" % (index), playerID)
|
| | | return
|
| | | totalCount += 1
|
| | | |
| | | if totalCount < needSuitCount:
|
| | | GameWorld.DebugLog("所需套装个数不足,无法进阶! needSuitIndexList=%s,totalCount=%s < needSuitCount=%s" |
| | | % (needSuitIndexList, totalCount, needSuitCount), playerID)
|
| | | return
|
| | | |
| | | return True
|
| | |
|
| | | def __CheckNeedEquipID(curPlayer, needEquipID, needEquipIDIndex, itemPack):
|
| | | ## 检查所需额外装备
|
| | | |
| | | playerID = curPlayer.GetPlayerID()
|
| | | maxPackCount = itemPack.GetCount()
|
| | | if needEquipIDIndex >= maxPackCount:
|
| | | GameWorld.DebugLog("该额外装备索引不存在!无法进阶!needEquipIDIndex=%s,maxPackCount=%s" |
| | | % (needEquipIDIndex, maxPackCount), playerID)
|
| | | return
|
| | | curItem = itemPack.GetAt(needEquipIDIndex)
|
| | | if not ItemCommon.CheckItemCanUse(curItem):
|
| | | GameWorld.DebugLog("该额外装备不可使用!无法进阶! needEquipIDIndex=%s" % (needEquipIDIndex), playerID)
|
| | | return
|
| | | itemID = curItem.GetItemTypeID()
|
| | | if itemID != needEquipID:
|
| | | GameWorld.DebugLog("该额外装备ID错误,不可用于进阶!needEquipIDIndex=%s,itemID=%s != needEquipID=%s" |
| | | % (needEquipIDIndex, itemID, needEquipID), playerID)
|
| | | return
|
| | | |
| | | return True
|
| | |
|
| | |
|