Çözüldü Bi sorun hk mob kayma galiba

  • Konuyu açan Konuyu açan CuRSED
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 5
  • Gösterim Gösterim 184
Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Çözüm
NEW_ICEDAMAGE_SYSTEM Sistemin var. Muhtemelen karekterin pozisyonunu bozuyor.
Şu fonksiyonu ;
C++:
Genişlet Daralt Kopyala
int battle_melee_attack(LPCHARACTER ch, LPCHARACTER victim)
{
    if (test_server&&ch->IsPC())
        sys_log(0, "battle_melee_attack : [%s] attack to [%s]", ch->GetName(), victim->GetName());

    if (!victim || ch == victim)
        return BATTLE_NONE;

    if (test_server&&ch->IsPC())
        sys_log(0, "battle_melee_attack : [%s] attack to [%s]", ch->GetName(), victim->GetName());

    if (!battle_is_attackable(ch, victim))
        return BATTLE_NONE;

    if (test_server&&ch->IsPC())
        sys_log(0, "battle_melee_attack : [%s] attack to [%s]", ch->GetName(), victim->GetName());

    int distance =...
Şu konudaki atak sınırı aşılıyomu acaba ?
Birde battle.cpp eklermisin konuya.
 
Şu konudaki atak sınırı aşılıyomu acaba ?
Birde battle.cpp eklermisin konuya.
 
NEW_ICEDAMAGE_SYSTEM Sistemin var. Muhtemelen karekterin pozisyonunu bozuyor.
Şu fonksiyonu ;
C++:
Genişlet Daralt Kopyala
int battle_melee_attack(LPCHARACTER ch, LPCHARACTER victim)
{
    if (test_server&&ch->IsPC())
        sys_log(0, "battle_melee_attack : [%s] attack to [%s]", ch->GetName(), victim->GetName());

    if (!victim || ch == victim)
        return BATTLE_NONE;

    if (test_server&&ch->IsPC())
        sys_log(0, "battle_melee_attack : [%s] attack to [%s]", ch->GetName(), victim->GetName());

    if (!battle_is_attackable(ch, victim))
        return BATTLE_NONE;

    if (test_server&&ch->IsPC())
        sys_log(0, "battle_melee_attack : [%s] attack to [%s]", ch->GetName(), victim->GetName());

    int distance = DISTANCE_APPROX(ch->GetX() - victim->GetX(), ch->GetY() - victim->GetY());

    if (!victim->IsBuilding())
    {
        int max = 300;

        if (false == ch->IsPC())
        {
            max = (int) (ch->GetMobAttackRange() * 1.15f);
        }
        else
        {
            if (false == victim->IsPC() && BATTLE_TYPE_MELEE == victim->GetMobBattleType())
                max = MAX(300, (int) (victim->GetMobAttackRange() * 1.15f));
        }

        if (distance > max)
        {
            if (test_server)
                sys_log(0, "VICTIM_FAR: %s distance: %d max: %d", ch->GetName(), distance, max);

            return BATTLE_NONE;
        }
    }

    if (timed_event_cancel(ch))
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("전투가 시작 되어 취소 되었습니다."));

    if (timed_event_cancel(victim))
        victim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("전투가 시작 되어 취소 되었습니다."));

    ch->SetPosition(POS_FIGHTING);
    ch->SetVictim(victim);

    const PIXEL_POSITION & vpos = victim->GetXYZ();
    ch->SetRotationToXY(vpos.x, vpos.y);

    int dam;
    int ret = battle_hit(ch, victim, dam);
    return (ret);
}

Şu şekilde değiştirirmisin.

C++:
Genişlet Daralt Kopyala
int battle_melee_attack(LPCHARACTER ch, LPCHARACTER victim)
{
    if (test_server && ch->IsPC())
        sys_log(0, "battle_melee_attack : [%s] attack to [%s]", ch->GetName(), victim->GetName());

    if (!victim || ch == victim)
        return BATTLE_NONE;

    if (!battle_is_attackable(ch, victim))
        return BATTLE_NONE;

    int distance = DISTANCE_APPROX(ch->GetX() - victim->GetX(), ch->GetY() - victim->GetY());

    int max = 300;

    if (!victim->IsBuilding())
    {
        if (!ch->IsPC())
        {
            // Mob attack range
            max = (int)(ch->GetMobAttackRange() * 1.15f);
        }
        else
        {
            // Player vs melee mob
            if (!victim->IsPC() && BATTLE_TYPE_MELEE == victim->GetMobBattleType())
                max = MAX(300, (int)(victim->GetMobAttackRange() * 1.15f));
        }
    }

    if (distance > max || distance > 500)
    {
        if (test_server)
            sys_log(0, "BLOCKED ATTACK: %s -> %s (dist: %d, max: %d)",
                ch->GetName(), victim->GetName(), distance, max);

        return BATTLE_NONE;
    }

    if (timed_event_cancel(ch))
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("전투가 시작 되어 취소 되었습니다."));

    if (timed_event_cancel(victim))
        victim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("전투가 시작 되어 취소 되었습니다."));

    ch->SetPosition(POS_FIGHTING);
    ch->SetVictim(victim);

    const PIXEL_POSITION& vpos = victim->GetXYZ();
    ch->SetRotationToXY(vpos.x, vpos.y);

    int dam;
    int ret = battle_hit(ch, victim, dam);
    return ret;
}
 
Çözüm
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst