- Mesaj
- 1.026
- Çözümler
- 35
- Beğeni
- 1.080
- Puan
- 1.339
- Ticaret Puanı
- 0
İyi akşamlar,
Sunucumda bütün taşları stacklenebilir yapmak istiyorum. Item proto'dan stackable flaglerini ayarladım. Komut ile stackli taş alabiliyorum. Char_item.cpp içinden remove item kodunu da itemden 1 eksilt ile değiştirdim. Yani eşyaya taş basıldığında tüm taşları silmek yerine 1 eksiltiyor.
Ancak sorun şu ki envanterde iki taşı üst üste sürüklediğimde "Bu taşı eklemek için slot yok" hatası alıyorum. Yani taşlar stacklenebilir ama sürükle bırak yöntemi taşları stacklemek yerine taşı diğer taşa eklemeye çalışıyor. Bunu nasıl çözebilirim?
Sunucumda bütün taşları stacklenebilir yapmak istiyorum. Item proto'dan stackable flaglerini ayarladım. Komut ile stackli taş alabiliyorum. Char_item.cpp içinden remove item kodunu da itemden 1 eksilt ile değiştirdim. Yani eşyaya taş basıldığında tüm taşları silmek yerine 1 eksiltiyor.
Ancak sorun şu ki envanterde iki taşı üst üste sürüklediğimde "Bu taşı eklemek için slot yok" hatası alıyorum. Yani taşlar stacklenebilir ama sürükle bırak yöntemi taşları stacklemek yerine taşı diğer taşa eklemeye çalışıyor. Bunu nasıl çözebilirim?
char_item.cpp'deki taşlarla ilgili kısım:
case ITEM_METIN:
{
LPITEM item2;
if (!IsValidItemPosition(DestCell) || !(item2 = GetItem(DestCell)))
return false;
if (item2->IsExchanging())
return false;
if (item2->GetType() == ITEM_PICK) return false;
if (item2->GetType() == ITEM_ROD) return false;
int i;
for (i = 0; i < ITEM_SOCKET_MAX_NUM; ++i)
{
DWORD dwVnum;
if ((dwVnum = item2->GetSocket(i)) <= 2)
continue;
TItemTable * p = ITEM_MANAGER::instance().GetTable(dwVnum);
if (!p)
continue;
if (item->GetValue(5) == p->alValues[5])
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("같은 종류의 메틴석은 여러개 부착할 수 없습니다."));
return false;
}
}
if (item2->GetType() == ITEM_ARMOR)
{
if (!IS_SET(item->GetWearFlag(), WEARABLE_BODY) || !IS_SET(item2->GetWearFlag(), WEARABLE_BODY))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 메틴석은 장비에 부착할 수 없습니다."));
return false;
}
}
else if (item2->GetType() == ITEM_WEAPON)
{
if (!IS_SET(item->GetWearFlag(), WEARABLE_WEAPON))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("이 메틴석은 무기에 부착할 수 없습니다."));
return false;
}
}
else
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("부착할 수 있는 슬롯이 없습니다."));
return false;
}
for (i = 0; i < ITEM_SOCKET_MAX_NUM; ++i)
if (item2->GetSocket(i) >= 1 && item2->GetSocket(i) <= 2 && item2->GetSocket(i) >= item->GetValue(2))
{
// 석 확률
if (number(1, 100) <= 30)
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("메틴석 부착에 성공하였습니다."));
item2->SetSocket(i, item->GetVnum());
}
else
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("메틴석 부착에 실패하였습니다."));
item2->SetSocket(i, ITEM_BROKEN_METIN_VNUM);
}
LogManager::instance().ItemLog(this, item2, "SOCKET", item->GetName());
item->SetCount(item->GetCount() - 1);
break;
}
if (i == ITEM_SOCKET_MAX_NUM)
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("부착할 수 있는 슬롯이 없습니다."));
}
break;