#!/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("¸ÃÌ××°²ÄÁϷdzÈ×°£¬²»¿ÉÓÃÓÚ½ø½×!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("¸ÃÌ××°²ÄÁϷDZ¾Ö°Òµ£¬²»¿ÉÓÃÓÚ½ø½×!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