Reklam
// Opcode çakışmasını önlemek için benzersiz bir numara atıyoruz.
#define WIZ_NPC_FALL 254
// CBot.h (public metotlar arasına ekleyin)
class CBot : public Unit
{
public:
// Bu tanım, Unit sınıfındaki metodu geçersiz kılacağımızı belirtir.
virtual void SendDeathAnimation(Unit* pKiller = nullptr);
// ... diğer metotlar ...
};
// CBot.cpp dosyası içine, diğer metotların arasına ekleyin:
void CBot::SendDeathAnimation(Unit* pKiller /*= nullptr*/)
{
// Doğru paket olan WIZ_NPC_FALL'u (254) kullanıyoruz.
Packet result(WIZ_NPC_FALL);
// Botun ID'sini pakete ekle
result << GetID();
// Çevredeki kullanıcılara göndererek animasyonu tetikle
SendToRegion(&result);
}
void CBot::OnDeath(Unit* pKiller)
{
if (m_bResHpType == USER_DEAD)
return;
// 1. Önce botu ölü olarak işaretle
m_bResHpType = USER_DEAD;
m_BotState = BOT_DEAD;
isReset(false);
// 2. Şimdi animasyonu gönder (client artık botun öldüğünü bilir)
SendDeathAnimation(pKiller);
// 3. Ölüm efekti aktifse uygula
if (g_pMain->UserDeathEffect)
ShowEffect(492027); // oyuncu ölme efekti
// 4. Katili işle
if (pKiller != nullptr)
{
if (pKiller->isPlayer())
{
CUser* pUserKiller = TO_USER(pKiller);
if (pUserKiller != nullptr)
OnDeathKilledPlayer(pUserKiller);
}
else if (pKiller->isNPC())
{
CNpc* pNpcKiller = TO_NPC(pKiller);
if (pNpcKiller != nullptr)
OnDeathKilledNpc(pNpcKiller);
}
else if (pKiller->isBot())
{
CBot* pBotKiller = TO_BOT(pKiller);
if (pBotKiller != nullptr)
OnDeathKilledBot(pBotKiller);
}
else
{
printf("OnDeath warning\n");
TRACE("OnDeath warning\n");
}
}
// 5. Ölüm sonrası sıfırlama işlemleri
InitOnDeath(pKiller);
}
######### BU KISIM DA DEGISSE IYI OLUR #########
void CBot::SendDeathAnimation(Unit* pKiller /*= nullptr*/)
{
// Bölge kontrolü: güvenlik önlemi
if (GetRegion() == nullptr)
return;
// 254: WIZ_NPC_FALL - ölüm animasyonu paketi
Packet result(WIZ_NPC_FALL);
// Botun ID'si
result << GetID();
// Kimin öldürdüğü bilgisi (isteğe bağlı)
if (pKiller != nullptr)
result << uint16(pKiller->GetID());
else
result << uint16(0);
// Bölgedeki tüm oyunculara gönder
SendToRegion(&result);
}
teşekkürler hocam,verdiğiniz tüm bilgilerin hepsi gereksiz ve dolaylı
void CBot::OnDeath(Unit* pKiller)
içerisine
if (m_bResHpType == USER_DEAD)
return;
m_bResHpType = USER_DEAD;
m_BotState = BOT_DEAD;
kısmının hemen altına
if (isDead())
SendDeathAnimation();
eklemeniz yeterli olacaktır, artık botlar öldüğü zaman direk animasyona girecektir.
DİPNOT: animasyonun tamamen tamamlanması için botlara respawn süresi eklemelisiniz min. 6 saniye şeklinde.