Callback Lim10Ata\Flatix\xfwidgets::gethtml is invalid (error_invalid_class).

Hera Süresinin Bitmesine Rağmen Oyunda Kaybolmaması

Jetain

New member
Katılım
2 Kas 2023
Mesajlar
26
Tepkime puanı
2
Puanları
1
Merhaba arkadaşlar öncelikle pek bu tarz hazır kod içerikli konular pek paylaşmıyorum. Sebebi belli olsa da kısaca bazı kişilerin şu hayatta hep keser mantığında çalışıyor olmasından dolayı.

Şimdi bu konu hem bir sorunu en basit şekilde nasıl çözer ya da kaynağını nasıl buluruz olayını da içerecek.
Öncelikle source içerisinde ya da oyunda karşılaştığımız bir sorunu ben nasıl çözüyorum ya da en azından çözüm için nereyi düzenlemem gerektiğini nasıl buluyorum ondan bahsedeceğim.

Benim kullandığım yöntem sorun kaynağı olabilecek yerlere konsol çıktıları ekleyerek işlemlerin nereye kadar gidebildiğini, nerede takıldığını ya da nereden nereye atladığını görmekten başka bir şey değil.




Şimdi sorunumuz Hera Scroll süresi bitse dahi karakter üzerinden gitmiyor. Bu işlemi öncelikle source içerisinde neresi kontrol ediyor onu bilmemiz ya da bulmamız gerekecek.



Hera bir transform scroll olduğu için Magic6 içerisinde yer alan bir skill koduna sahip. Bu yüzden de bu skili kontrol eden fonksiyonlar source içerisindeki

Kod:
MagicInstance::ExecuteType6( ve MagicInstance::Type6Cancel

bölümleri. Bir tanesi skill basılırken gerekli kontrolleri yapıyor diğeri ise skill biterken ya da fare ile kendimiz zorla silmek istediğimizde gerekli kontrolleri yapıyor.



Şimdi gelelim sorunlu yeri nasıl tespit ettiğimize;

Paylaşımda olan sourceler içerisindeki fonksiyon aşağıdaki gibi. Dolayısı ile biz bu fonksiyonda işlemler nereye kadar ilerliyor ona bakacağız.

Kod:
void MagicInstance::Type6Cancel(bool bForceRemoval /* = false*//)

{

    printf("%s: Type6Cancel is working 1\n", pSkillCaster->GetName().c_str());

    // NPCs cannot transform.

    if (pSkillCaster == nullptr

        || !pSkillCaster->isPlayer()

        || (!bForceRemoval && !TO_USER(pSkillCaster)->isTransformed()))

        return;



    printf("%s: Type6Cancel is working 2\n", pSkillCaster->GetName().c_str());

    CUser * pUser = TO_USER(pSkillCaster);

    _MAGIC_TYPE6 * pType = g_pMain->m_Magictype6Array.GetData(nSkillID);



    if (pType == nullptr)

        return;

 

    printf("%s: Type6Cancel is working 3\n", pSkillCaster->GetName().c_str());

    if (pUser->isSiegeTransformation())

        pUser->m_bRegeneType = REGENE_NORMAL;



    Packet result(WIZ_MAGIC_PROCESS, uint8(MagicOpcode::MAGIC_CANCEL_TRANSFORMATION));

    // TODO: Reset stat changes, recalculate stats.

    pUser->m_transformationType = Unit::TransformationType::TransformationNone;

    pUser->m_sTransformHpchange = false;

    pUser->m_sTransformMpchange = false;



    pUser->Send(&result);

    pUser->SetUserAbility();

    pUser->RemoveSavedMagic(pUser->m_bAbnormalType);

    pUser->StateChangeServerDirect(3, ABNORMAL_NORMAL);

    printf("%s: Type6Cancel is working 4\n", pSkillCaster->GetName().c_str());

}
 
Üst