Sosyal açıldı! Bir göz at → Hemen gir →

BİLGİLENDİRME 2383 Nxwile Gameserver Patlama Fix-3

xahta

KY Saygın Üye
Coder
Yardımsever
KAYIT
10 Şub 2025
Mesajlar
634
Çözümler
13
Tepki puanı
466
Merhaba ,

Ko-yardim üzerinden paylaşılan 2383 Nxwile source'nin hatalarını fixlemekteyim.
Bugünkü fixlemeniz gereken önemli bir kaynak dosyası paylaşacağım.
Aşağıda resimde paylaştığım gibi croshbow itemlerini bu source'de elimize takamıyorduk size bunu fixlemeyi göstereceğim.
1743803492634.png

Gamedefine.cpp'ye giriyoruz ve ctrl+f ile isCrossBow yazarak aratıyoruz ve karşımıza çıkan INLINE bool isBow ve INLINE bool isCrossBow yazan satırlara aşağıdaki kodu yapıştırıyoruz.




{
1743896331622.png


Sonrasında aşağıda @solomonkane 'ninde bahsettiği gibi magicintance.cpp'ye girip
MagicInstance::ExecuteType2 satırını bulup aşağıda verdiğim benzeyen kısmı ile değiştiriyorsunuz.

if (pType->iNum != 107656
&& pType->iNum != 108656
&& pType->iNum != 207656
&& pType->iNum != 208656)
{
if (pType->bNeedArrow > 0)
{
_ITEM_TABLE pTable = _ITEM_TABLE();
if (pSkillCaster->isPlayer())
{
if (TO_USER(pSkillCaster)->isWeaponsDisabled())
return false;

pTable = TO_USER(pSkillCaster)->GetItemPrototype(LEFTHAND);

if (pTable.isnull() || !pTable.isBow())
{
pTable = TO_USER(pSkillCaster)->GetItemPrototype(RIGHTHAND);

if (pTable.isnull() || !pTable.isCrossBow())
return false;
}
}
else
{
pTable = g_pMain->GetItemPtr(TO_NPC(pSkillCaster)->m_iWeapon_1);
if (pTable.isnull())
return false;
}

if (!pTable.isnull())
range = pTable.m_sRange;
}
else
{
range = pSkill.sRange;
}
}
else
{
range = pSkill.sRange * 2;
}


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Ardından ctrl + f ile -- if (pCaster->isRogue() && pSkill.iUseItem != 370007000 && pCaster->GetZoneID() != ZONE_CHAOS_DUNGEON) ile aratıyoruz.

Aşağıdaki kodu öncekiyle değiştiriyoruz.


if (pCaster->isRogue() && pSkill.iUseItem != 370007000 && pCaster->GetZoneID() != ZONE_CHAOS_DUNGEON)
{
if (pSkill.bType[0] == 2 || (pSkill.bType[0] == 1 && !isEskrimaSkills()))
{
_ITEM_TABLE pLeftHand = TO_USER(pSkillCaster)->GetItemPrototype(LEFTHAND);
_ITEM_TABLE pRightHand = TO_USER(pSkillCaster)->GetItemPrototype(RIGHTHAND);

if (pSkill.bType[0] == 2)
{
if ((pLeftHand.isnull() && pRightHand.isnull()) || ((!pLeftHand.isnull() && !pLeftHand.isBow()) || (!pRightHand.isnull() && !pRightHand.isCrossBow())))
return SkillUseResult::SkillUseFail;
}
else if (pSkill.bType[0] == 1 && !isEskrimaSkills())
{
if (isBlowArrowSkills())
{
if ((pLeftHand.isnull() && pRightHand.isnull()) || ((!pLeftHand.isnull() && !pLeftHand.isBow()) || (!pRightHand.isnull() && !pRightHand.isCrossBow())))
return SkillUseResult::SkillUseFail;
}
else if ((pLeftHand.isnull() && pRightHand.isnull()) || ((!pLeftHand.isnull() && pLeftHand.isBow()) || (!pRightHand.isnull() && pRightHand.isCrossBow())))
return SkillUseResult::SkillUseFail;
}
if (!pLeftHand.isnull())
{
if (pLeftHand.isDagger() && pSkill.bType[0] == 2)
return SkillUseResult::SkillUseFail;

if (!isBlowArrowSkills() && pLeftHand.isBow() && (pSkill.bType[0] == 1 || pSkill.bType[1] == 1) && pSkill.bCastTime == 0)
return SkillUseResult::SkillUseFail;
}
if (!pRightHand.isnull())
{
if (pRightHand.isDagger() && pSkill.bType[0] == 2)
return SkillUseResult::SkillUseFail;
if (pRightHand.isCrossBow() && (pSkill.bType[0] == 1 || pSkill.bType[1] == 1) && pSkill.bCastTime == 0)
return SkillUseResult::SkillUseFail;
}
}

if (bOpcode == (uint8)MagicOpcode::MAGIC_EFFECTING && pSkill.bType[0] == 2)
return SkillUseResult::SkillUseOK;
}


Derleyip sorunumuzu çözüyoruz hayırlı olsun.
 

Ekli dosyalar

  • 1743896238081.png
    1743896238081.png
    24.3 KB · Görüntüleme: 180
Son düzenleme:

ko-net

KY Üye
KAYIT
23 Ara 2024
Mesajlar
18
Tepki puanı
4
Merhaba ,

Ko-yardim üzerinden paylaşılan 2383 Nxwile source'nin hatalarını fixlemekteyim.
Bugünkü fixlemeniz gereken önemli bir kaynak dosyası paylaşacağım.
Aşağıda resimde paylaştığım gibi croshbow itemlerini bu source'de elimize takamıyorduk size bunu fixlemeyi göstereceğim.
Ekli dosyayı görüntüle 6569
Gamedefine.cpp'ye giriyoruz ve ctrl+f ile isCrossBow yazarak aratıyoruz ve karşımıza çıkan INLINE bool isBow ve INLINE bool isCrossBow yazan satırlara aşağıdaki kodu yapıştırıyoruz.

INLINE bool isBow() { return GetKind() == WEAPON_KIND_BOW; } // sadece yay - xahta the fix
INLINE bool isCrossBow() { return GetKind() == WEAPON_KIND_CROSSBOW; } // sadece crossbow - xahta the fix

Bu kodlarla croshbow ve yayı ayırmış oluyoruz.

Sonrasında İtemhandler.cpp'ye giriyoruz ve ctrl+f ile isCrossBow yazarak aratıyoruz ve aşağıdaki satırda hem isbow hedme isCrossBow olan güncellemeyi göreceksiniz. Orayada aşağıda verdiğim kodları yazıp yer değiştriyorsunuz.

// Yay (bow) sadece sol ele takılmalı - xahta the fix
if (bDstPos != LEFTHAND && pTable.isBow()) // sadece yay - xahta the fix
{
printf("Slot Fail->isBow User: %s\n", GetName().c_str());
goto fail_return;
}

// Crossbow sadece sağ ele takılmalı - - xahta the fix
if (bDstPos != RIGHTHAND && pTable.isCrossBow()) // sadece crossbow
{

Derleyip sorunumuzu çözüyoruz hayırlı olsun.
Peki crossbow ile ok atabiliyormusun hocam magicinstance de de sorun olabilir sanırım
 

solomonkane

KY Saygın Üye
Coder
Yardımsever
KAYIT
21 Şub 2024
Mesajlar
488
Çözümler
3
Tepki puanı
342
Konum
Palmiye Adaları
Güzel yere değildin Akşam kontrol ederim. Bowu baz alarak ilerleriz. Test ettin mi sen?
tamamen magicInstance.cpp düzeltilecek aranacak yerler orası
bool MagicInstance::ExecuteType2() giriyorsun dostum

sende
Kod:
 pTable = TO_USER(pSkillCaster)->GetItemPrototype(RIGHTHAND);
olacak onun altını

Kod:
 if (pTable.isnull() || !pTable.isCrossBow())
                return false;
düzeltiyorsun
sonra arat
Kod:
if (pCaster->isRogue() && pSkill.iUseItem != 370007000 && pCaster->GetZoneID() != ZONE_CHAOS_DUNGEON)


alt tarafı yapıştır devam et
Kod:
if (pCaster->isRogue() && pSkill.iUseItem != 370007000 && pCaster->GetZoneID() != ZONE_CHAOS_DUNGEON)
{
    if (pSkill.bType[0] == 2 || (pSkill.bType[0] == 1 && !isEskrimaSkills()))
    {
        _ITEM_TABLE pLeftHand = TO_USER(pSkillCaster)->GetItemPrototype(LEFTHAND);
        _ITEM_TABLE pRightHand = TO_USER(pSkillCaster)->GetItemPrototype(RIGHTHAND);

        if (pSkill.bType[0] == 2)
        {
            if ((pLeftHand.isnull() && pRightHand.isnull()) || ((!pLeftHand.isnull() && !pLeftHand.isBow()) || (!pRightHand.isnull() && !pRightHand.isCrossBow())))
                return SkillUseResult::SkillUseFail;
        }
        else if (pSkill.bType[0] == 1 && !isEskrimaSkills())
        {
            if (isBlowArrowSkills())
            {
                if ((pLeftHand.isnull() && pRightHand.isnull()) || ((!pLeftHand.isnull() && !pLeftHand.isBow()) || (!pRightHand.isnull() && !pRightHand.isCrossBow())))
                    return SkillUseResult::SkillUseFail;
            }
            else if ((pLeftHand.isnull() && pRightHand.isnull()) || ((!pLeftHand.isnull() && pLeftHand.isBow()) || (!pRightHand.isnull() && pRightHand.isCrossBow())))
                return SkillUseResult::SkillUseFail;
        }
        if (!pLeftHand.isnull())
        {
            if (pLeftHand.isDagger() && pSkill.bType[0] == 2)
                return SkillUseResult::SkillUseFail;

            if (!isBlowArrowSkills() && pLeftHand.isBow() && (pSkill.bType[0] == 1 || pSkill.bType[1] == 1) && pSkill.bCastTime == 0)
                return SkillUseResult::SkillUseFail;
        }
        if (!pRightHand.isnull())
        {
            if (pRightHand.isDagger() && pSkill.bType[0] == 2)
                return SkillUseResult::SkillUseFail;
            if (pRightHand.isCrossBow() && (pSkill.bType[0] == 1 || pSkill.bType[1] == 1) && pSkill.bCastTime == 0)
                return SkillUseResult::SkillUseFail;
        }
    }

    if (bOpcode == (uint8)MagicOpcode::MAGIC_EFFECTING && pSkill.bType[0] == 2)
        return SkillUseResult::SkillUseOK;
}

ücret 1000.tl :XXXXXXXXXXXXXXXXD

ücretli yaparım xxxxxxxxxxxxd
discord ekle xxxxxxxxxxxxxxxd


selametle
 

xahta

KY Saygın Üye
Coder
Yardımsever
KAYIT
10 Şub 2025
Mesajlar
634
Çözümler
13
Tepki puanı
466
tamamen magicInstance.cpp düzeltilecek aranacak yerler orası
bool MagicInstance::ExecuteType2() giriyorsun dostum

sende
Kod:
 pTable = TO_USER(pSkillCaster)->GetItemPrototype(RIGHTHAND);
olacak onun altını

Kod:
 if (pTable.isnull() || !pTable.isCrossBow())
                return false;
düzeltiyorsun
sonra arat
Kod:
if (pCaster->isRogue() && pSkill.iUseItem != 370007000 && pCaster->GetZoneID() != ZONE_CHAOS_DUNGEON)


alt tarafı yapıştır devam et
Kod:
if (pCaster->isRogue() && pSkill.iUseItem != 370007000 && pCaster->GetZoneID() != ZONE_CHAOS_DUNGEON)
{
    if (pSkill.bType[0] == 2 || (pSkill.bType[0] == 1 && !isEskrimaSkills()))
    {
        _ITEM_TABLE pLeftHand = TO_USER(pSkillCaster)->GetItemPrototype(LEFTHAND);
        _ITEM_TABLE pRightHand = TO_USER(pSkillCaster)->GetItemPrototype(RIGHTHAND);

        if (pSkill.bType[0] == 2)
        {
            if ((pLeftHand.isnull() && pRightHand.isnull()) || ((!pLeftHand.isnull() && !pLeftHand.isBow()) || (!pRightHand.isnull() && !pRightHand.isCrossBow())))
                return SkillUseResult::SkillUseFail;
        }
        else if (pSkill.bType[0] == 1 && !isEskrimaSkills())
        {
            if (isBlowArrowSkills())
            {
                if ((pLeftHand.isnull() && pRightHand.isnull()) || ((!pLeftHand.isnull() && !pLeftHand.isBow()) || (!pRightHand.isnull() && !pRightHand.isCrossBow())))
                    return SkillUseResult::SkillUseFail;
            }
            else if ((pLeftHand.isnull() && pRightHand.isnull()) || ((!pLeftHand.isnull() && pLeftHand.isBow()) || (!pRightHand.isnull() && pRightHand.isCrossBow())))
                return SkillUseResult::SkillUseFail;
        }
        if (!pLeftHand.isnull())
        {
            if (pLeftHand.isDagger() && pSkill.bType[0] == 2)
                return SkillUseResult::SkillUseFail;

            if (!isBlowArrowSkills() && pLeftHand.isBow() && (pSkill.bType[0] == 1 || pSkill.bType[1] == 1) && pSkill.bCastTime == 0)
                return SkillUseResult::SkillUseFail;
        }
        if (!pRightHand.isnull())
        {
            if (pRightHand.isDagger() && pSkill.bType[0] == 2)
                return SkillUseResult::SkillUseFail;
            if (pRightHand.isCrossBow() && (pSkill.bType[0] == 1 || pSkill.bType[1] == 1) && pSkill.bCastTime == 0)
                return SkillUseResult::SkillUseFail;
        }
    }

    if (bOpcode == (uint8)MagicOpcode::MAGIC_EFFECTING && pSkill.bType[0] == 2)
        return SkillUseResult::SkillUseOK;
}

ücret 1000.tl :XXXXXXXXXXXXXXXXD

ücretli yaparım xxxxxxxxxxxxd
discord ekle xxxxxxxxxxxxxxxd


selametle
Haha bide o var dimi ücretli yapabilirim inadına ücretsiz paylaşımlar devam ?
 

Mstk59

KY Saygın Üye
Coder
Yardımsever
Server Sahibi
KAYIT
12 May 2021
Mesajlar
483
Çözümler
9
Tepki puanı
520
Yaş
32
ücretli yaparım .d
dc: zeplin59
1 yıl önce tamamen fixlediğim sorunlar so easy .d

şakası bir yana emeğine sağlık kardeş güzel şeyler bunlar
 

TanrımKutsal

KY Cezalı Üye
KAYIT
6 Nis 2025
Mesajlar
5
Tepki puanı
0
tamamen magicInstance.cpp düzeltilecek aranacak yerler orası
bool MagicInstance::ExecuteType2() giriyorsun dostum

sende
Kod:
 pTable = TO_USER(pSkillCaster)->GetItemPrototype(RIGHTHAND);
olacak onun altını

Kod:
 if (pTable.isnull() || !pTable.isCrossBow())
                return false;
düzeltiyorsun
sonra arat
Kod:
if (pCaster->isRogue() && pSkill.iUseItem != 370007000 && pCaster->GetZoneID() != ZONE_CHAOS_DUNGEON)


alt tarafı yapıştır devam et
Kod:
if (pCaster->isRogue() && pSkill.iUseItem != 370007000 && pCaster->GetZoneID() != ZONE_CHAOS_DUNGEON)
{
    if (pSkill.bType[0] == 2 || (pSkill.bType[0] == 1 && !isEskrimaSkills()))
    {
        _ITEM_TABLE pLeftHand = TO_USER(pSkillCaster)->GetItemPrototype(LEFTHAND);
        _ITEM_TABLE pRightHand = TO_USER(pSkillCaster)->GetItemPrototype(RIGHTHAND);

        if (pSkill.bType[0] == 2)
        {
            if ((pLeftHand.isnull() && pRightHand.isnull()) || ((!pLeftHand.isnull() && !pLeftHand.isBow()) || (!pRightHand.isnull() && !pRightHand.isCrossBow())))
                return SkillUseResult::SkillUseFail;
        }
        else if (pSkill.bType[0] == 1 && !isEskrimaSkills())
        {
            if (isBlowArrowSkills())
            {
                if ((pLeftHand.isnull() && pRightHand.isnull()) || ((!pLeftHand.isnull() && !pLeftHand.isBow()) || (!pRightHand.isnull() && !pRightHand.isCrossBow())))
                    return SkillUseResult::SkillUseFail;
            }
            else if ((pLeftHand.isnull() && pRightHand.isnull()) || ((!pLeftHand.isnull() && pLeftHand.isBow()) || (!pRightHand.isnull() && pRightHand.isCrossBow())))
                return SkillUseResult::SkillUseFail;
        }
        if (!pLeftHand.isnull())
        {
            if (pLeftHand.isDagger() && pSkill.bType[0] == 2)
                return SkillUseResult::SkillUseFail;

            if (!isBlowArrowSkills() && pLeftHand.isBow() && (pSkill.bType[0] == 1 || pSkill.bType[1] == 1) && pSkill.bCastTime == 0)
                return SkillUseResult::SkillUseFail;
        }
        if (!pRightHand.isnull())
        {
            if (pRightHand.isDagger() && pSkill.bType[0] == 2)
                return SkillUseResult::SkillUseFail;
            if (pRightHand.isCrossBow() && (pSkill.bType[0] == 1 || pSkill.bType[1] == 1) && pSkill.bCastTime == 0)
                return SkillUseResult::SkillUseFail;
        }
    }

    if (bOpcode == (uint8)MagicOpcode::MAGIC_EFFECTING && pSkill.bType[0] == 2)
        return SkillUseResult::SkillUseOK;
}

ücret 1000.tl :XXXXXXXXXXXXXXXXD

ücretli yaparım xxxxxxxxxxxxd
discord ekle xxxxxxxxxxxxxxxd


selametle

Kanka eski biraz güncellen :), whatsap da qel yaz, yeni güncellen vereyim sağ, sol sistemi düzelttim :)
 

xahta

KY Saygın Üye
Coder
Yardımsever
KAYIT
10 Şub 2025
Mesajlar
634
Çözümler
13
Tepki puanı
466
ücretli yaparım .d
dc: zeplin59
1 yıl önce tamamen fixlediğim sorunlar so easy .d

şakası bir yana emeğine sağlık kardeş güzel şeyler bunlar
=) haha eyv. reis. sizdende bekleriz bu incelikleri :) yazılımcı değilim öğrendiğimi paylaşıyorum.
 
Anasayfa Kayıt ol Giriş yap
Üst Alt