Con eso quedas tal cual esta la configuración inicial donde no deja reparar en los NPC. acá te paso mi código completo de esa función a ver si te funciona:
int CItemManager::RepairItem(LPOBJ lpObj,CItem* lpItem,int slot,int type) // OK
{
if (lpObj->Interface.type == INTERFACE_TRADE||
lpObj->Interface.type == INTERFACE_WAREHOUSE||
//--
lpObj->Interface.type == INTERFACE_TRADE && lpObj->Interface.type == INTERFACE_SHOP ||
lpObj->Interface.type == INTERFACE_WAREHOUSE && lpObj->Interface.type == INTERFACE_SHOP ||
//--
lpObj->Interface.type == INTERFACE_TRADE && lpObj->Interface.type == INTERFACE_WAREHOUSE && lpObj->Interface.type == INTERFACE_SHOP)
{
gNotice.GCNoticeSend(lpObj->Index,1,0,0,0,0,0,gMessage.GetMessage(492));
return 0;
}
if(lpItem->m_Slot == 0xFF || INVENTORY_WEAR_RANGE(lpItem->m_Slot) == 0)
{
return 0;
}
if(lpItem->m_Index == GET_ITEM(0,41)) // Minning Axe
{
return 0;
}
if(gItemStack.GetItemMaxStack(lpItem->m_Index) > 0)
{
return 0;
}
if(lpItem->m_Slot == 8 && lpItem->m_Index != GET_ITEM(13,4))
{
return 0;
}
if(lpItem->IsLuckyItem() != 0 || lpItem->m_IsPeriodicItem != 0 || lpItem->IsPentagramItem() != 0)
{
return 0;
}
//if(lpItem->m_Index == GET_ITEM(4,7) || lpItem->m_Index == GET_ITEM(4,15)) // Bolt,Arrow
//{
// return 0;
//}
if(lpItem->m_Index >= GET_ITEM(12,130) && lpItem->m_Index <= GET_ITEM(12,135)) // Mini Wings
{
return 0;
}
if(lpObj->Interface.type != INTERFACE_TRAINER && (lpItem->m_Index == GET_ITEM(13,4) || lpItem->m_Index == GET_ITEM(13,5)))
{
return 0;
}
if(lpItem->m_Index == GET_ITEM(13,20) && (lpItem->m_Level >= 0 && lpItem->m_Level <= 2)) // Wizard's Ring,Starter Ring
{
return 0;
}
if(lpItem->m_Index == GET_ITEM(13,10) || (lpItem->m_Index >= GET_ITEM(13,38) && lpItem->m_Index <= GET_ITEM(13,42)) || lpItem->m_Index == GET_ITEM(13,68) || lpItem->m_Index == GET_ITEM(13,76) || lpItem->m_Index == GET_ITEM(13,122)) // Rings
{
return 0;
}
int money = this->GetItemRepairMoney(lpItem,type);
money = ((money<0)?0:money);
if(lpObj->Money < ((DWORD)money))
{
return 0;
}
lpObj->Money -= money;
lpItem->Convert(lpItem->m_Index,lpItem->m_Option1,lpItem->m_Option2,lpItem->m_Option3,lpItem->m_NewOption,lpItem->m_SetOption,lpItem->m_JewelOfHarmonyOption,lpItem->m_ItemOptionEx,lpItem->m_SocketOption,lpItem->m_SocketOptionBonus);
lpItem->m_Durability = lpItem->m_BaseDurability;
if(INVENTORY_WEAR_RANGE(slot) != 0 && lpItem->CheckDurabilityState() != 0)
{
gObjectManager.CharacterCalcAttribute(lpObj->Index);
}
this->GCItemDurSend(lpObj->Index,slot,(BYTE)lpItem->m_Durability,0);
if(lpItem->m_Index == GET_ITEM(13,4))
{
GCPetItemInfoSend(lpObj->Index,1,0,slot,lpItem->m_PetItemLevel,lpItem->m_PetItemExp,(BYTE)lpItem->m_Durability);
}
if(lpItem->m_Index == GET_ITEM(13,5))
{
GCPetItemInfoSend(lpObj->Index,0,0,slot,lpItem->m_PetItemLevel,lpItem->m_PetItemExp,(BYTE)lpItem->m_Durability);
}
return lpObj->Money;
}