Yardım Bineğe Bindiğimde Lütfen Atınızı Çağırın Bindiğimde Binekten İn yazıyor

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

Developer2

Premium Üye
Premium Üye
Geliştirici
Üye
Mesaj
72
Çözümler
4
Beğeni
6
Puan
89
Ticaret Puanı
0
Gün geçmiyor ki metin2 saçmalasın arkadaşlar
mühür takılı iken at çağırma fixi attım fakat bu seferde Bineğe Bindiğimde Bana Binekten in diye emir veriyor
indiğimde de atını çağır diyor
sanırım bineğe binmemi istemiyorum ata binmemi istiyor neyse
çözümünü bilen arkadaşlarım varsa bi el atabilirlerse memnun kalırım
 
Gün geçmiyor ki metin2 saçmalasın arkadaşlar
mühür takılı iken at çağırma fixi attım fakat bu seferde Bineğe Bindiğimde Bana Binekten in diye emir veriyor
indiğimde de atını çağır diyor
sanırım bineğe binmemi istemiyorum ata binmemi istiyor neyse
çözümünü bilen arkadaşlarım varsa bi el atabilirlerse memnun kalırım
Attığın fixi de attığın yerle beraber kod ekle bölümüne eklersen eğer tabiki seve seve yardımcı oluruz
 
Attığın fixi de attığın yerle beraber kod ekle bölümüne eklersen eğer tabiki seve seve yardımcı oluruz
tabi kardeşim hemen
char_item.cpp dosyasında değişiklik yaptım
char_item.cpp:
Genişlet Daralt Kopyala
case ITEM_QUEST:
arat


if (GetWear(WEAR_COSTUME_MOUNT))
{
if (item->GetVnum() == 50051 || item->GetVnum() == 50052 || item->GetVnum() == 50053)
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("YOU_CANNOT_USE_THIS_WHILE_RIDING"));
return false;
}
}
ekle

kendi char item içeriğim şu şekilde oldu yani
char_item.cpp:
Genişlet Daralt Kopyala
        case ITEM_QUEST:
            if (GetArena() != NULL || IsObserverMode() == true)
            {
                if (item->GetVnum() == 50051 || item->GetVnum() == 50052 || item->GetVnum() == 50053)
                {
                    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("´ë·Ã Áß¿¡´Â ÀÌ¿ëÇÒ ¼ö ¾ø´Â ¹°Ç°ÀÔ´Ï´Ù."));
                    return false;
                }
            }
            if (GetWear(WEAR_COSTUME_MOUNT))
            {
                if (item->GetVnum() == 50051 || item->GetVnum() == 50052 || item->GetVnum() == 50053)
            {
                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("´Binek Muhru Takiliyken At Cagiramazsin!"));
                return false;
            }
            }
 
Bu şekilde bi dener misin.
İki tarafada aynı vnumlarla aynı koşulları sağlamaya çalıştığın için sistem binmeni istemiyor.
Bu şekilde 3’e bölerek sorun çözülür diye düşünüyorum.
C++:
Genişlet Daralt Kopyala
case ITEM_QUEST:
{
    const DWORD mountVnums[] = {50051, 50052, 50053};
    const bool isMountItem =
        item->GetVnum() == mountVnums[0] ||
        item->GetVnum() == mountVnums[1] ||
        item->GetVnum() == mountVnums[2];

    if (GetArena() != NULL || IsObserverMode())
    {
        if (isMountItem)
        {
            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Arena icinde at cagiramazsin."));
            return false;
        }
    }
    if (IsRiding())
    {
        if (isMountItem)
        {
            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Once binekten inmelisin."));
            return false;
        }
    }

    if (GetWear(WEAR_COSTUME_MOUNT))
    {
        if (isMountItem)
        {
            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Binek takiliyken at cagiramazsin."));
            return false;
        }
    }
}
break;
 
Bu şekilde bi dener misin.
İki tarafada aynı vnumlarla aynı koşulları sağlamaya çalıştığın için sistem binmeni istemiyor.
Bu şekilde 3’e bölerek sorun çözülür diye düşünüyorum.
C++:
Genişlet Daralt Kopyala
case ITEM_QUEST:
{
    const DWORD mountVnums[] = {50051, 50052, 50053};
    const bool isMountItem =
        item->GetVnum() == mountVnums[0] ||
        item->GetVnum() == mountVnums[1] ||
        item->GetVnum() == mountVnums[2];

    if (GetArena() != NULL || IsObserverMode())
    {
        if (isMountItem)
        {
            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Arena icinde at cagiramazsin."));
            return false;
        }
    }
    if (IsRiding())
    {
        if (isMountItem)
        {
            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Once binekten inmelisin."));
            return false;
        }
    }

    if (GetWear(WEAR_COSTUME_MOUNT))
    {
        if (isMountItem)
        {
            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Binek takiliyken at cagiramazsin."));
            return false;
        }
    }
}
break;
kod çalışıyor fix sağlanıyor fakat bineğe bindiğimde ve indiğimde aynı yazılar yazıyor hocam burada bir düzelme olmadı maalesef ve at kitabı ile de at çağırmıyor bu şekilde.
 
Yani normal şartlarda sorun olmaması gerekiyor. bu zaten genel olarak herkesin kullandığı bir fixtir ama sende sorun çıkartıyor. Sonrasında bütün işlevlere ayrı ayrı görev atadım yine çözüm olmadı demekki sorunun kaynağı burası değil. Telefondayım şuan yarın eğer sorunun çözülmezse bağlanıp bakarım.
Kod:
Genişlet Daralt Kopyala
        if (GetWear(WEAR_COSTUME_MOUNT))
        {
            if (item->GetVnum() == 50051 || item->GetVnum() == 50052 || item->GetVnum() == 50053)
            {
                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("YOU_CANNOT_USE_THIS_WHILE_RIDING"));
                return false;
            }
        }
 
Yani normal şartlarda sorun olmaması gerekiyor. bu zaten genel olarak herkesin kullandığı bir fixtir ama sende sorun çıkartıyor. Sonrasında bütün işlevlere ayrı ayrı görev atadım yine çözüm olmadı demekki sorunun kaynağı burası değil. Telefondayım şuan yarın eğer sorunun çözülmezse bağlanıp bakarım.
Kod:
Genişlet Daralt Kopyala
        if (GetWear(WEAR_COSTUME_MOUNT))
        {
            if (item->GetVnum() == 50051 || item->GetVnum() == 50052 || item->GetVnum() == 50053)
            {
                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("YOU_CANNOT_USE_THIS_WHILE_RIDING"));
                return false;
            }
        }
hocam müsaitsen bugün bağlanabilirsin
 
Sorunun kodu doğru eklememen veya yanlış yerde koşul tetiklemen nedeniyle oluyor.
Şu anda client/server şöyle davranıyor:

  • Üstüne binek kostümü (mount costume) takılıyken, ITEM_QUEST (at çağırma eşyası) kullanmana izin vermiyorsun, doğru
  • Ama bu kontrol bineğe bindiğinde de tetikleniyor
    Çünkü bindiğinde de GetWear(WEAR_COSTUME_MOUNT) true dönüyor , sistem sanıyor ki “binek çağırma eşyası kullanıyorsun” ve seni zorla indiriyor.

  • At çağırma itemi → sadece üstünde binek kostümü takılıyken kullanılamamalı
    Ama bineğe binmiş olman bunu tetiklememeli.


    Bunun çözümü:

    GetWear(WEAR_COSTUME_MOUNT)

    Çünkü GETWEAR_MOUNT hem takılı binek hem binilmiş binek için aynı değeri döndürebilir.


    Denersin;
    C++:
    Genişlet Daralt Kopyala
    case ITEM_QUEST:
    
        // Arena ve izleyici kontrolü
        if (GetArena() != NULL || IsObserverMode())
        {
            if (item->GetVnum() == 50051 || item->GetVnum() == 50052 || item->GetVnum() == 50053)
            {
                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Duel sırasında kullanamazsın."));
                return false;
            }
        }
    
        // Üstünde binek kostümü takılı mı? (Binmek farklı, takmak farklı!)
        LPITEM pMountCostume = GetWear(WEAR_COSTUME_MOUNT);
    
        if (pMountCostume != nullptr) // sadece takılıysa!
        {
            if (item->GetVnum() == 50051 || item->GetVnum() == 50052 || item->GetVnum() == 50053)
            {
                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Binek kostümü takılıyken binek çağıramazsın."));
                return false;
            }
        }
    
        break;
 
Yani normal şartlarda sorun olmaması gerekiyor. bu zaten genel olarak herkesin kullandığı bir fixtir ama sende sorun çıkartıyor. Sonrasında bütün işlevlere ayrı ayrı görev atadım yine çözüm olmadı demekki sorunun kaynağı burası değil. Telefondayım şuan yarın eğer sorunun çözülmezse bağlanıp bakarım.
Kod:
Genişlet Daralt Kopyala
        if (GetWear(WEAR_COSTUME_MOUNT))
        {
            if (item->GetVnum() == 50051 || item->GetVnum() == 50052 || item->GetVnum() == 50053)
            {
                ChatPacket(CHAT_TYPE_INFO, LC_TEXT("YOU_CANNOT_USE_THIS_WHILE_RIDING"));
                return false;
            }
        }
Bu kontrol teknik olarak doğru gibi görünse de gereksizdir ve şu soruna yol açar:

- Oyuncu zaten bir bineğe binmişken yeni binek çağırma itemi kullanmasını engelliyorsun
- Bu iyi ,sorun değil fakat

Ama bazı serverlarda IsRiding() , true dönerken
GetWear(WEAR_COSTUME_MOUNT) de aynı anda true dönebiliyor

Bu durumda iki kontrol aynı anda tetiklenir:

→ “Önce binekten inmelisin”
→ “Binek takılıyken at çağıramazsın”

Ve client/server tarafı birbirine karışır →
binekten indirir, tekrar binmesini ister, sonra tekrar indirir
 
Bu kontrol teknik olarak doğru gibi görünse de gereksizdir ve şu soruna yol açar:

- Oyuncu zaten bir bineğe binmişken yeni binek çağırma itemi kullanmasını engelliyorsun
- Bu iyi ,sorun değil fakat

Ama bazı serverlarda IsRiding() , true dönerken
GetWear(WEAR_COSTUME_MOUNT) de aynı anda true dönebiliyor

Bu durumda iki kontrol aynı anda tetiklenir:

→ “Önce binekten inmelisin”
→ “Binek takılıyken at çağıramazsın”

Ve client/server tarafı birbirine karışır →
binekten indirir, tekrar binmesini ister, sonra tekrar indirir
düzenledim fakat build alırken hata veriyor
 
sanırım fonskiyon yanlış yere yazılmış
deneme:
Genişlet Daralt Kopyala
case ITEM_QUEST:
{
    // Arena ve izleyici kontrolü
    if (GetArena() != NULL || IsObserverMode())
    {
        if (item->GetVnum() == 50051 || item->GetVnum() == 50052 || item->GetVnum() == 50053)
        {
            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Duel sırasında kullanamazsın."));
            return false;
        }
    }

    // Üstünde binek kostümü takılı mı? (Binmek farklı, takmak farklı!)
    LPITEM pMountCostume = GetWear(WEAR_COSTUME_MOUNT);
    if (pMountCostume != nullptr) // sadece takılıysa!
    {
        if (item->GetVnum() == 50051 || item->GetVnum() == 50052 || item->GetVnum() == 50053)
        {
            ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Binek kostümü takılıyken binek çağıramazsın."));
            return false;
        }
    }
    break;
}

bu şekilde düzenledim
 
Bu kontrol teknik olarak doğru gibi görünse de gereksizdir ve şu soruna yol açar:

- Oyuncu zaten bir bineğe binmişken yeni binek çağırma itemi kullanmasını engelliyorsun
- Bu iyi ,sorun değil fakat

Ama bazı serverlarda IsRiding() , true dönerken
GetWear(WEAR_COSTUME_MOUNT) de aynı anda true dönebiliyor

Bu durumda iki kontrol aynı anda tetiklenir:

→ “Önce binekten inmelisin”
→ “Binek takılıyken at çağıramazsın”

Ve client/server tarafı birbirine karışır →
binekten indirir, tekrar binmesini ister, sonra tekrar indirir
çözülmedi hocam
 
kodları yazsana buraya müsait zamanımda bakayım hatayı da gönder, hatayı görmeden kullandığın filesde daha ne gibi şeyler yaptığını bilmeden bir yorum yapmak tamamen önyargı oluyor binek sistemine dair tüm kodu gönder gelsin hatayı da yaz bakalım çözelim veya sadece hatayı yaz ona göre ilerleyelim
 
Geri
Üst