#!/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
|
|
|