| | |
| | | #struct tagCMEquipDecompose
|
| | | #{
|
| | | # tagHead Head;
|
| | | # BYTE IndexCount; //材料所在背包索引的数量
|
| | | # BYTE IndexList[IndexCount]; //材料所在背包索引列表
|
| | | # BYTE Count; //材料所在背包索引的数量
|
| | | # WORD IndexList[Count]; //材料所在背包索引列表
|
| | | # DWORD ItemIDList[Count]; //材料所在背包物品ID列表
|
| | | # BYTE IsAuto; //是否自动分解
|
| | | #};
|
| | |
|
| | | ## 玩家分解装备封包 A5 08
|
| | | # @param playerIndex 玩家索引
|
| | | # @param clientData 客户端封包
|
| | |
| | | # @return None
|
| | | def OnDoEquipDecompose(index, clientData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | |
| | | if not clientData.Count:
|
| | | return
|
| | | eatIndexList = clientData.IndexList
|
| | | |
| | | EatItems(curPlayer, eatIndexList)
|
| | | eatItemIDList = clientData.ItemIDList
|
| | | isAuto = clientData.IsAuto
|
| | | EatItems(curPlayer, eatIndexList, eatItemIDList, isAuto)
|
| | | return
|
| | |
|
| | | # 吞噬物品, 返回被吞数量
|
| | | def EatItems(curPlayer, eatIndexList):
|
| | | drDelItemList, totalAddExp, delAllCnt = __GetCanEatItemInfo(curPlayer, eatIndexList)
|
| | | def EatItems(curPlayer, eatIndexList, eatItemIDList, isAuto=False):
|
| | | if len(eatIndexList) != len(eatItemIDList):
|
| | | return 0, 0
|
| | | drDelItemList, totalAddExp, delAllCnt = __GetCanEatItemInfo(curPlayer, eatIndexList, eatItemIDList)
|
| | | if not totalAddExp:
|
| | | GameWorld.DebugLog(" 装备吸收 没有可吞噬物品!")
|
| | | return 0, 0
|
| | |
| | | PlayerControl.SendMailByKey("DefaultLackSpace", [curPlayer.GetPlayerID()], prizeItemList)
|
| | | else:
|
| | | for giveItemID, itemCnt in giveItemIDDict.items():
|
| | | ItemControler.GivePlayerItem(curPlayer, giveItemID, itemCnt, True, [IPY_GameWorld.rptItem], True)
|
| | | ItemControler.GivePlayerItem(curPlayer, giveItemID, itemCnt, 0, [IPY_GameWorld.rptItem])
|
| | |
|
| | | #同步客户端
|
| | | Sync_EDLVInfo(curPlayer, jsonItemList)
|
| | | # 流向
|
| | | saveDataDict = {"ExpBefore":Exp, "AddTotalExp":reduceTotalExp, "ExpAfter":updExp,
|
| | | "DelItemList(ItemID,delCnt,baseExp,addExp)":drDelItemList}
|
| | | "DelItemList(ItemID,delCnt,baseExp,addExp)":drDelItemList, 'isAuto':isAuto}
|
| | | DataRecordPack.DR_ClassUpSystem(curPlayer, "EquipDecomposeUp", updLV, saveDataDict)
|
| | |
|
| | | #EventReport.WriteEvent__lv(curPlayer, LV, updLV, Exp, updExp)
|
| | |
| | | ##获取可以吞噬的物品信息
|
| | | # @param curPlayer: 玩家实例
|
| | | # @return [可吞噬的物品列表], 最大可提供的经验
|
| | | def __GetCanEatItemInfo(curPlayer, expIndexList):
|
| | | def __GetCanEatItemInfo(curPlayer, expIndexList, eatItemIDList):
|
| | | eatItemList = []
|
| | | totalAddExp = 0
|
| | | allitemCnt = 0
|
| | | petEatItemAddExpPer = PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_EatItem)
|
| | | itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
|
| | | for index in expIndexList:
|
| | | for i, index in enumerate(expIndexList):
|
| | | eatItem = itemPack.GetAt(index)
|
| | |
|
| | | if not eatItem or eatItem.IsEmpty():
|
| | | continue
|
| | |
|
| | | eatItemID = eatItem.GetItemTypeID()
|
| | | if eatItemIDList[i] != eatItemID:
|
| | | GameWorld.ErrLog(' 装备分解客户端发的物品索引与实际物品ID不对应 index=%s,eatItemID=%s,wantEatItemID=%s'%(index, eatItemID, eatItemIDList[i]))
|
| | | continue
|
| | | if eatItem.GetType() == ChConfig.Def_ItemType_EquipDecomposeExp:
|
| | | curEff = eatItem.GetEffectByIndex(0)
|
| | | baseExp = curEff.GetEffectValue(0)
|
| | | else:
|
| | | elif ItemCommon.CheckItemIsEquip(eatItem):
|
| | | itemColor = eatItem.GetItemColor()
|
| | | itemClass = eatItem.GetLV()
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("PetEatEquip", itemColor, itemClass)
|
| | |
| | | GameWorld.DebugLog(" tagPetEatEquip.txt,未配置该物品! eatItemID=%s, EquipColor=%s,EquipClass=%s" % (eatItemID, itemColor, itemClass))
|
| | | continue
|
| | | baseExp = ipyData.GetExp()
|
| | | |
| | | else:
|
| | | GameWorld.ErrLog(' 不可分解的道具index=%s eatItemID=%s'%(index, eatItemID))
|
| | | continue
|
| | | itemCnt = eatItem.GetCount() # 装备一般默认1,如是经验道具则一般可叠加
|
| | | addExp = baseExp * itemCnt
|
| | |
|