Çözüldü Kod bloğunu sadece bir kez çalıştırmak istiyorum c++

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

asilords

MT Üye
MT Üye
Mesaj
475
Çözümler
18
Beğeni
138
Puan
749
Ticaret Puanı
0
c:
Genişlet Daralt Kopyala
    SECTREE * sectree = GetSectree();
    if (sectree && sectree->IsAttr(GetX(), GetY(), ATTR_BANPK))
    {
        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("güvenli alana girdiniz"));                                   
    }

Karekter hareket ettiğinde güvenli alana girerse "güvenli alana girdiniz" uyarısı verecek ancak normal olarak güvenli alanda her adım attığında ard arda "güvenli alana girdiniz" yazıyor bu uyarıyı nasıl bir kez yazdırabilirim?
 
Çözüm
char.h içinde:
C++:
Genişlet Daralt Kopyala
SetAggressive();

üstüne ekle:
C++:
Genişlet Daralt Kopyala
bool                safeArea;

verdiğin kodu aşağıdaki ile değiştir.:
C++:
Genişlet Daralt Kopyala
    SECTREE * sectree = GetSectree();
    if (sectree && sectree->IsAttr(GetX(), GetY(), ATTR_BANPK) && !safeArea)
    {
        safeArea = true;
        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("güvenli alana girdiniz"));                                
    }


oyuna girişlerde ve ışınlanmalarda sıfırlamak için input_login.cpp içine ekle(en sona):
C++:
Genişlet Daralt Kopyala
void CInputLogin::Entergame(LPDESC d, const char * data)
{
    [...]
    [...]
    [...]
    [...]
    [...]
    ch->safeArea = false;
}

Eğer güvenli alandan çıktığında da false olmasını istiyorsan else ekleyip tekrar false'a çevirebilirsin.
char.h içinde:
C++:
Genişlet Daralt Kopyala
SetAggressive();

üstüne ekle:
C++:
Genişlet Daralt Kopyala
bool                safeArea;

verdiğin kodu aşağıdaki ile değiştir.:
C++:
Genişlet Daralt Kopyala
    SECTREE * sectree = GetSectree();
    if (sectree && sectree->IsAttr(GetX(), GetY(), ATTR_BANPK) && !safeArea)
    {
        safeArea = true;
        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("güvenli alana girdiniz"));                                
    }


oyuna girişlerde ve ışınlanmalarda sıfırlamak için input_login.cpp içine ekle(en sona):
C++:
Genişlet Daralt Kopyala
void CInputLogin::Entergame(LPDESC d, const char * data)
{
    [...]
    [...]
    [...]
    [...]
    [...]
    ch->safeArea = false;
}

Eğer güvenli alandan çıktığında da false olmasını istiyorsan else ekleyip tekrar false'a çevirebilirsin.
 
Çözüm
static bool da kullanabilirsin;

static bool isfirst = true;

if (first)
{
...
isfirst = false;
}
 
char.h içinde:
C++:
Genişlet Daralt Kopyala
SetAggressive();

üstüne ekle:
C++:
Genişlet Daralt Kopyala
bool                safeArea;

verdiğin kodu aşağıdaki ile değiştir.:
C++:
Genişlet Daralt Kopyala
    SECTREE * sectree = GetSectree();
    if (sectree && sectree->IsAttr(GetX(), GetY(), ATTR_BANPK) && !safeArea)
    {
        safeArea = true;
        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("güvenli alana girdiniz"));                              
    }


oyuna girişlerde ve ışınlanmalarda sıfırlamak için input_login.cpp içine ekle(en sona):
C++:
Genişlet Daralt Kopyala
void CInputLogin::Entergame(LPDESC d, const char * data)
{
    [...]
    [...]
    [...]
    [...]
    [...]
    ch->safeArea = false;
}

Eğer güvenli alandan çıktığında da false olmasını istiyorsan else ekleyip tekrar false'a çevirebilirsin.
1:
Genişlet Daralt Kopyala
    SECTREE * sectree = GetSectree();
    if (sectree && sectree->IsAttr(GetX(), GetY(), ATTR_BANPK))
    {
        safeArea = true;
        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("guvenli bolgeye girdin"));
    }
    else
    {
        safeArea = false;
        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("savas bölgesine girdin"));
    }

char.h
bool safeArea;

Dediğiniz gibi yaptım sonuc aynı :(
 

Dosya Eklentileri

  • Ekran görüntüsü 2024-10-07 135958.webp
    Ekran görüntüsü 2024-10-07 135958.webp
    87 KB · Gösterim: 58
1:
Genişlet Daralt Kopyala
    SECTREE * sectree = GetSectree();
    if (sectree && sectree->IsAttr(GetX(), GetY(), ATTR_BANPK))
    {
        safeArea = true;
        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("guvenli bolgeye girdin"));
    }
    else
    {
        safeArea = false;
        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("savas bölgesine girdin"));
    }

char.h
bool safeArea;

Dediğiniz gibi yaptım sonuc aynı :(
if satırını gösterdiğim gibi güncellememişsin.

if (sectree && sectree->IsAttr(GetX(), GetY(), ATTR_BANPK) && !safeArea)
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst