ORESULT AbilityInlay::CanUseAbility(Obj_Human* pHuman) { __ENTER_FUNCTION Assert( pHuman ); AbilityOpera* pAbilityOpera; pAbilityOpera = pHuman->GetAbilityOpera(); Assert( pAbilityOpera ); ORESULT res; res = Ability::CanUseAbility(pHuman); if( res != OR_OK ) { return res; } CHAR MaterialBagIndex1 = (CHAR)pAbilityOpera->m_BagPos[2]; CHAR MaterialBagIndex2 = (CHAR)pAbilityOpera->m_BagPos[3]; if( (pAbilityOpera->m_BagPos[0] < 0) || (pAbilityOpera->m_BagPos[0] >= MAX_BAG_SIZE) || (pAbilityOpera->m_BagPos[1] < 0) || (pAbilityOpera->m_BagPos[1] >= MAX_BAG_SIZE) || (MaterialBagIndex1>= MAX_BAG_SIZE)|| (MaterialBagIndex2>= MAX_BAG_SIZE) ) { Assert(FALSE); return OR_ERROR; } Item* pGemItem = HumanItemLogic::GetBagItem( pHuman, pAbilityOpera->m_BagPos[0] ); Item* pEquipItem = HumanItemLogic::GetBagItem( pHuman, pAbilityOpera->m_BagPos[1] ); Item* pMaterialItem1 = NULL; Item* pMaterialItem2 = NULL; if( MaterialBagIndex1 != -1 ) { pMaterialItem1 = HumanItemLogic::GetBagItem( pHuman, pAbilityOpera->m_BagPos[2] ); Assert( pMaterialItem1 != NULL ); } if( MaterialBagIndex2 != -1 ) { pMaterialItem2 = HumanItemLogic::GetBagItem( pHuman, pAbilityOpera->m_BagPos[3] ); Assert( pMaterialItem2 != NULL ); } Assert( (pGemItem != NULL) && (pEquipItem != NULL) ); if( (pGemItem->IsLock()) || (pEquipItem->IsLock()) || (pGemItem->IsPWLock()) || (pEquipItem->IsPWLock()) || (pGemItem->GetItemClass() != ICLASS_GEM) || (pEquipItem->GetItemClass() != ICLASS_EQUIP) ) { return OR_STUFF_LACK; } //if( pHuman->__GetAbilityLevel(pAbilityOpera->m_AbilityID) < pGemItem->GetItemQual() ) //{ // return OR_NO_LEVEL; //} if( IsGemConflict(pHuman, pAbilityOpera->m_BagPos[0], pAbilityOpera->m_BagPos[1]) == FALSE ) { return OR_GEM_CONFLICT; } LuaInterface* pLuaInterface; pLuaInterface = pHuman->getScene()->GetLuaInterface(); if( pEquipItem->GetGemSlotMax() <= pEquipItem->GetEquipGemCount() || pLuaInterface->ExeScript_DDD( ABILITY_LOGIC_SCRIPT, DEF_GEM_COUNT_CHECK, (INT)pHuman->getScene()->SceneID(), (INT)pHuman->GetID(), (INT)pAbilityOpera->m_BagPos[1] ) ) { return OR_GEM_SLOT_LACK; } if( pLuaInterface->ExeScript_DDDD( ABILITY_LOGIC_SCRIPT, DEF_IS_GEM_FIT_EQUIP, (INT)pHuman->getScene()->SceneID(), (INT)pHuman->GetID(), pGemItem->GetItemTableIndex(), pAbilityOpera->m_BagPos[1] ) == 0 ) { // 判断宝石和装备是否匹配 return OR_GEM_NOT_FIT_EQUIP; } return OR_OK; __LEAVE_FUNCTION return OR_ERROR; }