Çözüldü Otomatik Sohbet Banı Tüm Haritayı Banlıyor

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

Üye
Üye
Mesaj
225
Çözümler
8
Beğeni
55
Puan
704
Ticaret Puanı
0
otomatik chat banı sistemini kurdum, herhangi bir oyuncu küfür ettğinde aynı haritadaki tüm oyuncuları banlıyor fonksiyonu aşağıya yapıştırıyorum yardımcı olabilecek var mı ?

Kod:
Genişlet Daralt Kopyala
void CInputMain::BlockChatInsult(LPCHARACTER ch, const char * data)
{
    long bantime = 60 * 1; // 1 minute
    // long bantime = 60 * 60; // 1 hour
    // long bantime = 60 * 60 * 24; // 1 day
    if (ch)
        ch->AddAffect(AFFECT_BLOCK_CHAT, POINT_NONE, 0, AFF_NONE, bantime, 0, true);
}
 
Çözüm
Şu kodları şöyle değiştirip deneyebilir misin?
Not: denemedim, tamamen deneysel :D

Arat
C++:
Genişlet Daralt Kopyala
                    CPythonNetworkStream& paket=CPythonNetworkStream::Instance();
                    if (paket.IsInsultIn(p))
                    {
                        paket.BLOCK_INSULT();
                        return false;
                    }

Değiş
C++:
Genişlet Daralt Kopyala
                    CPythonNetworkStream& paket=CPythonNetworkStream::Instance();

                    if (paket.IsInsultIn(p))
                    {
                        CInstanceBase* pkInstMain=rkChrMgr.GetMainInstancePtr();
                     
                        if (kChat.dwVID == pkInstMain->GetVirtualID())
                        {...
Bu fonksiyonda bi yanlışlık yok. ch dediği zaten ilgili karakteri belirtir.

BlockChatInsult bu fonksiyonun çağrıldığı kodları inceleyin isterseniz
 
2 kısım var bunlardan biri değilse salıyorum bu sistemi çok yordu aksam aksam :)
kod1:
Genişlet Daralt Kopyala
bool CPythonNetworkStream::BLOCK_INSULT()
{
    if (!__CanActMainInstance())
        return true;
   
    TPacketCGChatInsult kPacket;
    kPacket.header = HEADER_CG_INSULT_BLOCK;

    if (!Send(sizeof(kPacket), &kPacket))
    {
        Tracen("BLOCK_INSULT Error");
        return false;
    }

    return SendSequence();
}

kod2:
Genişlet Daralt Kopyala
                #ifdef ENABLE_CHECK_INSULT
                {
                    CPythonNetworkStream& paket=CPythonNetworkStream::Instance();
                    if (paket.IsInsultIn(p))
                    {
                        paket.BLOCK_INSULT();
                        return false;
                    }
                }
                #else
                    __FilterInsult(p, strlen(p));
                #endif
 
Sistemi aldığınız yeri veya komple sistemi paylaşırsanız bir göz atalım, bu şekilde bulmak güç.
 
Linkleri görebilmek için giriş yap veya kayıt ol.


Konu linki:
Linkleri görebilmek için giriş yap veya kayıt ol.


Sanırım sorun sistemde çok fazla kodlama bilmiyorum kendi bilgilerimlede çözemedim çok fazla kod içermiyor ama anlamadım

bu arada ilginiz için teşekkürler
 

Dosya Eklentileri

Bu sistemde sorun var. RecvChat üzerinden kontrol etmiş. Yani birisi bağırmada küfür etse tüm oyunculara ban atacak.
Normal konuşmada küfür etse görüş açısındaki tüm oyunculara atacak.
 
Şu kodları şöyle değiştirip deneyebilir misin?
Not: denemedim, tamamen deneysel :D

Arat
C++:
Genişlet Daralt Kopyala
                    CPythonNetworkStream& paket=CPythonNetworkStream::Instance();
                    if (paket.IsInsultIn(p))
                    {
                        paket.BLOCK_INSULT();
                        return false;
                    }

Değiş
C++:
Genişlet Daralt Kopyala
                    CPythonNetworkStream& paket=CPythonNetworkStream::Instance();

                    if (paket.IsInsultIn(p))
                    {
                        CInstanceBase* pkInstMain=rkChrMgr.GetMainInstancePtr();
                     
                        if (kChat.dwVID == pkInstMain->GetVirtualID())
                        {
                            paket.BLOCK_INSULT();
                        }

                        return false;
                    }
 
Çözüm
Şu kodları şöyle değiştirip deneyebilir misin?
Not: denemedim, tamamen deneysel :D

Arat
C++:
Genişlet Daralt Kopyala
                    CPythonNetworkStream& paket=CPythonNetworkStream::Instance();
                    if (paket.IsInsultIn(p))
                    {
                        paket.BLOCK_INSULT();
                        return false;
                    }

Değiş
C++:
Genişlet Daralt Kopyala
                    CPythonNetworkStream& paket=CPythonNetworkStream::Instance();

                    if (paket.IsInsultIn(p))
                    {
                        CInstanceBase* pkInstMain=rkChrMgr.GetMainInstancePtr();
                    
                        if (kChat.dwVID == pkInstMain->GetVirtualID())
                        {
                            paket.BLOCK_INSULT();
                        }

                        return false;
                    }
Yardım için teşekkür ederim sorun çözüldü,ancak client te syserr verdi.
0519 00:27:12304 :: Phase Game does not handle this header (header: 4, last: 4, 4)

Sorun teşkil etmiyorsa kullanmalımıyım sistemi ?
 
Sorun çıkartmaz ancak çözmek isterseniz if bloğunu ilgili kod satırını kapsayacak şekilde genişletebilirsiniz.
 
C++:
Genişlet Daralt Kopyala
                    CPythonNetworkStream& paket=CPythonNetworkStream::Instance();
                    CInstanceBase* pkInstMain=rkChrMgr.GetMainInstancePtr();

                    if (kChat.dwVID == pkInstMain->GetVirtualID())
                    {
                        if (paket.IsInsultIn(p))
                        {
                            paket.BLOCK_INSULT();
                            return false;
                        }
                    }
                    else
                    {
                         __FilterInsult(p, strlen(p));
                    }
 
C++:
Genişlet Daralt Kopyala
                    CPythonNetworkStream& paket=CPythonNetworkStream::Instance();
                    CInstanceBase* pkInstMain=rkChrMgr.GetMainInstancePtr();

                    if (kChat.dwVID == pkInstMain->GetVirtualID())
                    {
                        if (paket.IsInsultIn(p))
                        {
                            paket.BLOCK_INSULT();
                            return false;
                        }
                    }
                    else
                    {
                         __FilterInsult(p, strlen(p));
                    }
Elinize sağlık sorun tamamen çözülmüştür konu kapanabilir :)
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Üst