Yardım karakterlerin savrulmama problemi

  • Konuyu açan Konuyu açan mehmet07
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 5
  • Gösterim Gösterim 123
Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.

mehmet07

Üye
Üye
Mesaj
221
Çözümler
3
Beğeni
35
Puan
439
Ticaret Puanı
0
Karakterler birbirine düz vuruşlarıyla ilk 10 ile 20 saniye civarı savrulmuyorlar itilmiyorlar...
ışınlanıp gelince 5-10 saniye düz vuruşlarında yada at üstünden birbirine vuruşlarında yine savrulmuyorlar sonradan savrulma başlıyor 5-10 sn vurduktan sonra. Bunun nedeni ne olabilir acaba.


problemin videosu
 
Son düzenleme:
Karakter koruma olayından kaynaklanıyor. Ölüm, ışınlanma vb durumlarda karaktere otomatik 5 saniyelik koruma atanıyor. Çözüm için en basiti kontrol ekleyip uyarı mesajı eklemek ve bu süreç içinde gelen talepleri sistemsel reddetmek.
 
Karakter koruma olayından kaynaklanıyor. Ölüm, ışınlanma vb durumlarda karaktere otomatik 5 saniyelik koruma atanıyor. Çözüm için en basiti kontrol ekleyip uyarı mesajı eklemek ve bu süreç içinde gelen talepleri sistemsel reddetmek.
yada ışınlanma işleminden sonraki kısımda bulunan korumayı kaldırabiliriz fakat senin dediğin bir tık daha güvenli ama ilerde oyuncular bundan sıkılabilir tercih meselesi tamamen artık
 
yada ışınlanma işleminden sonraki kısımda bulunan korumayı kaldırabiliriz fakat senin dediğin bir tık daha güvenli ama ilerde oyuncular bundan sıkılabilir tercih meselesi tamamen artık
diğer türlüde çok absürt sorunlara neden olabilir diye düşündüğümden bu şekilde önerdim. yani korumasız bir noktaya ışınlanınca başına toplanıp taciz etmeler gibi.
 
Buna Güçlü Beden Kaymada Fix Denilir Bu Fixsi Uygularmısınız



Güçlü Beden Kaymada Fix:
Genişlet Daralt Kopyala
//client src gamelib ActorInstanceSync.cpp açılır. alttaki kod bloğu komple değiltirilir



//değiştirilecek kod bloğu başlangıç

void CActorInstance::__Push(int x, int y)
{
    /*if (IsResistFallen()) Alta Alindi Like Rubinum
    return;*/

    //DWORD dwVID=GetVirtualID();
    //Tracenf("VID %d SyncPixelPosition %d %d", dwVID, x, y);      

    const D3DXVECTOR3& c_rv3Src = GetPosition();
    const D3DXVECTOR3 c_v3Dst = D3DXVECTOR3(x, -y, c_rv3Src.z);
    const D3DXVECTOR3 c_v3Delta = c_v3Dst - c_rv3Src;

    const int LoopValue = 100;
    const D3DXVECTOR3 inc = c_v3Delta / LoopValue;

    D3DXVECTOR3 v3Movement(0.0f, 0.0f, 0.0f);

    IPhysicsWorld* pWorld = IPhysicsWorld::GetPhysicsWorld();

    if (!pWorld)
    {
        return;
    }

    for (int i = 0; i < LoopValue; ++i)
    {
        if (pWorld->isPhysicalCollision(c_rv3Src + v3Movement))
        {
            ResetBlendingPosition();
            return;
        }
        v3Movement += inc;
    }


    SetBlendingPosition(c_v3Dst);

    if (IsResistFallen() || IsPushing())
    {
        return;
    }

    if (!IsUsingSkill())
    {
        int len = sqrt(c_v3Delta.x*c_v3Delta.x + c_v3Delta.y*c_v3Delta.y);
        if (len>150.0f)
        {
            InterceptOnceMotion(CRaceMotionData::NAME_DAMAGE_FLYING);
            PushOnceMotion(CRaceMotionData::NAME_STAND_UP);
        }
    }
}
//değiştirilecek kod bloğu bitişi


//ihtiyaç olursa diye alttaki kodları da ekliyorum.
void CActorInstance::TEMP_Push(int x, int y)
{
    __Push(x, y);
}

bool CActorInstance::__IsSyncing()
{
    if (IsDead())
        return TRUE;

    if (IsStun())
        return TRUE;

    if (IsPushing())
        return TRUE;

    return FALSE;
}

bool CActorInstance::IsPushing()
{
    return m_PhysicsObject.isBlending();
}
 
Geri
Üst