Çözüldü Düz Vuruş | Sekme Vurmama Durumu

  • Konuyu açan Konuyu açan kostak98
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 7
  • Gösterim Gösterim 161
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ı.

kostak98

Üye
Üye
Mesaj
73
Çözümler
2
Beğeni
12
Puan
449
Ticaret Puanı
0
Herkese iyi forumlar, tam olarak emin olmamakla birlikte pozisyon güncellemesinin geç olması yada pozisyonun güncellenmemesiyle ilgili bir durum gibi ama bilmiyorum.
Saldırı hızı yokken herşey normal asla sorun yok ancak tüm saldırı imkanlarından faydalandıktan sonra savaşçı sura gibi sektirme durumunu tam işleyen karakterlerde ilk 4 vuruştan sonrası vurmuyor düzgün düz vuruşlar. ancak ninjada durum farklı o gayet iyi bu durumun fixi varmı yada neyi kontrol etmeliyim sizce?



 
Çözüm
Log ekleye ekleye sorunun kaynağına gittim distance 170 ile sınırlandırılmış ancak savaşçının sektirmesi sonrası distance 260a kadar cıkıyor bu yüzdende result 0 çıkıyordu.

Fix:
Genişlet Daralt Kopyala
bool battle_distance_valid_by_xy(long x, long y, long tx, long ty)
{
long distance = DISTANCE_APPROX(x - tx, y - ty);
if (distance > 260)
    return false;
return true;
}

battle.cpp olması lazım yada char_battle.cpp
saldırı hızından ya da başka bir sebepten dolayı server tarafında CHARACTER::Attack içerisindeki kontrollerden biri saldırıyı engelliyor, ilk olarak returnlardan önce hepsine log ya da chat mesajı ekleyip hangisinden kaynaklandığını bulmalısın sonrasında neyden kaynaklıysa ona göre bir çözüm bulabiliriz
 
saldırı hızından ya da başka bir sebepten dolayı server tarafında CHARACTER::Attack içerisindeki kontrollerden biri saldırıyı engelliyor, ilk olarak returnlardan önce hepsine log ya da chat mesajı ekleyip hangisinden kaynaklandığını bulmalısın sonrasında neyden kaynaklıysa ona göre bir çözüm bulabiliriz
C++:
Genişlet Daralt Kopyala
bool CHARACTER::Attack(LPCHARACTER pkVictim, BYTE bType)
{
    if (test_server)
        sys_log(0, "[TEST_SERVER] Attack : %s type %d, MobBattleType %d", GetName(), bType, !GetMobBattleType() ? 0 : GetMobAttackRange());
    //PROF_UNIT puAttack("Attack");
    if (!CanMove())
        return false;
//AntiSafeZoneFix
    SECTREE    *sectree = NULL;
    SECTREE    *vsectree = NULL;
    sectree = GetSectree();
    vsectree = pkVictim->GetSectree();

    if (sectree && vsectree){
        if (sectree->IsAttr(GetX(), GetY(), ATTR_BANPK) || vsectree->IsAttr(pkVictim->GetX(), pkVictim->GetY(), ATTR_BANPK)) {
            if (GetDesc()) {
                LogManager::instance().HackLog("ANTISAFEZONE", this);
                GetDesc()->DelayedDisconnect(3);
            }
        }
    }
//AntiSafeZoneFix
//pazara vurma fix
    if (pkVictim->GetMyShop())
        return false;

    // CASTLE
    if (IS_CASTLE_MAP(GetMapIndex()) && false == castle_can_attack(this, pkVictim))
        return false;
    // CASTLE

    DWORD dwCurrentTime = get_dword_time();

    if (IsPC())
    {
        if (IS_SPEED_HACK(this, pkVictim, dwCurrentTime))
            return false;

        if (bType == 0 && dwCurrentTime < GetSkipComboAttackByTime())
            return false;
    }
    else
    {
        MonsterChat(MONSTER_CHAT_ATTACK);
    }

    pkVictim->SetSyncOwner(this);

    if (pkVictim->CanBeginFight())
        pkVictim->BeginFight(this);

    int iRet;

    if (bType == 0)
    {
        //
        // 일반 공격
        //
        switch (GetMobBattleType())
        {
            case BATTLE_TYPE_MELEE:
            case BATTLE_TYPE_POWER:
            case BATTLE_TYPE_TANKER:
            case BATTLE_TYPE_SUPER_POWER:
            case BATTLE_TYPE_SUPER_TANKER:
                iRet = battle_melee_attack(this, pkVictim);
                break;

            case BATTLE_TYPE_RANGE:
                FlyTarget(pkVictim->GetVID(), pkVictim->GetX(), pkVictim->GetY(), HEADER_CG_FLY_TARGETING);
                iRet = Shoot(0) ? BATTLE_DAMAGE : BATTLE_NONE;
                break;

            case BATTLE_TYPE_MAGIC:
                FlyTarget(pkVictim->GetVID(), pkVictim->GetX(), pkVictim->GetY(), HEADER_CG_FLY_TARGETING);
                iRet = Shoot(1) ? BATTLE_DAMAGE : BATTLE_NONE;
                break;

            default:
                sys_err("Unhandled battle type %d", GetMobBattleType());
                iRet = BATTLE_NONE;
                break;
        }
    }
    else
    {
        if (IsPC() == true)
        {
            if (dwCurrentTime - m_dwLastSkillTime > 1500)
            {
                sys_log(1, "HACK: Too long skill using term. Name(%s) PID(%u) delta(%u)",
                        GetName(), GetPlayerID(), (dwCurrentTime - m_dwLastSkillTime));
                return false;
            }
        }

        sys_log(1, "Attack call ComputeSkill %d %s", bType, pkVictim?pkVictim->GetName():"");
        iRet = ComputeSkill(bType, pkVictim);
    }

    //if (test_server && IsPC())
    //    sys_log(0, "%s Attack %s type %u ret %d", GetName(), pkVictim->GetName(), bType, iRet);
    if (iRet == BATTLE_DAMAGE || iRet == BATTLE_DEAD)
    {
        OnMove(true);
        pkVictim->OnMove();

        // only pc sets victim null. For npc, state machine will reset this.
        if (BATTLE_DEAD == iRet && IsPC())
            SetVictim(NULL);

        return true;
    }

    return false;
}
kod böyle
 
En son bir moderatör tarafından düzenlenmiş:
Log ekleye ekleye sorunun kaynağına gittim distance 170 ile sınırlandırılmış ancak savaşçının sektirmesi sonrası distance 260a kadar cıkıyor bu yüzdende result 0 çıkıyordu.

Fix:
Genişlet Daralt Kopyala
bool battle_distance_valid_by_xy(long x, long y, long tx, long ty)
{
long distance = DISTANCE_APPROX(x - tx, y - ty);
if (distance > 260)
    return false;
return true;
}

battle.cpp olması lazım yada char_battle.cpp
 
En son bir moderatör tarafından düzenlenmiş:
Çözüm
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst