- Mesaj
- 702
- Çözümler
- 41
- Beğeni
- 171
- Puan
- 609
- Ticaret Puanı
- 0
Server taraflı efsun botunda otomatik olarak efsun almayı kapatmak istiyorum. Sanırım bu kod bloğundan oluyor yardımcı olabilir misiniz? Ben pasif etmeme rağmen efsun almadan efsun basıyor.
C++:
oid CSwitchbot::SwitchItems()
{
for (uint8_t bSlot = 0; bSlot < SWITCHBOT_SLOT_COUNT; ++bSlot)
{
if (!m_table.active[bSlot])
{
continue;
}
m_table.finished[bSlot] = false;
const uint32_t item_id = m_table.items[bSlot];
LPITEM pkItem = ITEM_MANAGER::Instance().Find(item_id);
if (!pkItem)
{
continue;
}
LPCHARACTER pkOwner = pkItem->GetOwner();
if (!pkOwner)
{
return;
}
if (CheckItem(pkItem, bSlot))
{
LPDESC desc = pkOwner->GetDesc();
if (desc)
{
char bufs[255];
int32_t len = snprintf(bufs, sizeof(bufs), LC_TEXT("%s Name %d Slot"), pkItem->GetName(), bSlot + 1);
TPacketGCWhisper pack;
pack.bHeader = HEADER_GC_WHISPER;
pack.bType = WHISPER_TYPE_SYSTEM;
pack.wSize = sizeof(TPacketGCWhisper) + len;
strlcpy(pack.szNameFrom, "[Efsun Botu]", sizeof(pack.szNameFrom));
pkOwner->GetDesc()->BufferedPacket(&pack, sizeof(pack));
pkOwner->GetDesc()->Packet(bufs, len);
}
SetActive(bSlot, false);
m_table.finished[bSlot] = true;
if (!HasActiveSlots())
{
Stop();
}
else
{
CSwitchbotManager::Instance().SendSwitchbotUpdate(m_table.player_id);
}
}
else
{
bool stop = false;
if (SWITCHBOT_PRICE_TYPE == 1)
{
for (const auto& itemVnum : c_arSwitchingItems)
{
if (pkOwner->CountSpecifyItem(itemVnum) >= 1)
{
stop = false;
}
else if (pkOwner->CountSpecifyItem(itemVnum) < 1)
{
if (pkOwner->GetGold() >= 100000)
{
pkOwner->PointChange(POINT_GOLD, -100000);
pkOwner->AutoGiveItem(71084, 200);
stop = false;
}
else
{
pkOwner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("yeterli para yok, efsun alinamadi."));
}
}
}
}
else if (SWITCHBOT_PRICE_TYPE == 2)
{
if (pkOwner->GetGold() >= SWITCHBOT_PRICE_AMOUNT)
{
stop = false;
}
}
if (stop)
{
Stop();
if (SWITCHBOT_PRICE_TYPE == 1)
{
pkOwner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Switchbot stopped. Out of switchers."));
}
else
{
pkOwner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Switchbot stopped. Not enough money."));
}
return;
}
if (SWITCHBOT_PRICE_TYPE == 1)
{
for (const auto& itemVnum : c_arSwitchingItems)
{
#ifdef UK_ENABLE_SPECIAL_STORAGE
LPITEM pkItem = pkOwner->FindSpecifyItemAttr(itemVnum);
#else
LPITEM pkItem = pkOwner->FindSpecifyItem(itemVnum);
#endif
if (pkItem)
{
pkItem->SetCount(pkItem->GetCount() - 1);
break;
}
}
}
else if (SWITCHBOT_PRICE_TYPE == 2)
{
pkOwner->PointChange(POINT_GOLD, -SWITCHBOT_PRICE_AMOUNT);
}
pkItem->ChangeAttribute();
SendItemUpdate(pkOwner, bSlot, pkItem);
}
}
}