bikral 1
bikral
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Bvural41 1
Bvural41
ShadowFon 1
ShadowFon
mavzermete 1
mavzermete
YazilimMühendisi 1
YazilimMühendisi
Fethi Polat 1
Fethi Polat
InfernoShade 1
InfernoShade
Hikaye Ekle
Kaynak ikonu

Oyuncu Engelleme Sistemi 2025-06-05

indirmek için izniniz yok
  • Konuyu başlatan Konuyu başlatan Mr. Kio
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 43
  • Görüntüleme Görüntüleme 9K

HERAKLES Otomatik Avlı kalıcı sunucu. 19 Haziran'da açılıyor. Atius & Wizard güvencesiyle hemen kayıt ol, ön kayıt ödülleri aktif. HEMEN TIKLA!

Uzun zamandır metin2 ile ilgilenmiyordum şu sıralar yine bi göz atasım geldi baktım @Luigina uzun zaman sonra
makara konusu açmış :D gülüp keyfim yerine geldi bir kaç bir şey paylaşayım dedim o yüzden ona daha çok teşekkür edin 👹
Sisteme geçelim.
Başlıkta gördüğünüz gibi oyuncu engelleme sistemi lakin fazlasıyla kapsamlı yaklaşık 1 sene önce yazmıştım.
Metin2 kitlesi malum küfür şikayetleri bitmiyordu.
Şimdi bir dallama geldi size küfür etti engellediniz sonucu ne oluyor hemen açıklayalım.
* İki tarafta birbirine grup davetiyesi gönderemez.
* Eğer profil görüntüleme sisteminiz varsa iki tarafta birbirine istek atamaz.
* İki tarafta birbirine ticaret isteği gönderemez.
* İki tarafta birbirine lonca davetiyesi gönderemez.
* İki tarafta birbirine PM gönderemez.
* İki tarafa da normal chatte yazdıkları gözükmez.
* İki tarafın bağırması birbirine gözükmez.
* Engellediğiniz kişi arkadaşınızsa iki tarafta da arkadaşlık silinir.

EK
Sistemi yazarken messenger_managerde olan bir kaç hatayı düzelttim diye hatırlıyorum. Yanlış hatırlamıyorsam bir de sql leak çözmüş olmam gerekiyor.
Arkadaş listesinde engellenenler listesi mevcut.
Burdan engel attığınız kişiyi kaldırabilir veya isim yazarakta engelleyebilirsiniz.
Ek olarak targetta da engelleme seçeneği mevcut.
Ben isim izi kullanmadığım için normalde bunla alakalı bir düzenleme yapmamıştım. Yabancı forumda bir kullanıcı isim izi kullandığını belirtti o yüzden güncelleme getirdim github'dan güncel versiyonunu indirirseniz problem olmayacaktır. Kişi ismini değiştirse bile hala engelli olarak kalır.
Yapmanız gerekenleri buraya da yazayım. (Github'dan yeni indirdiyseniz zaten dosyalarda bu düzenleme mevcut yapmanıza gerek yok)

Kod:
// Open player_block.h
// Search:

    auto DeletePlayerBlock(const std::string &strBlockingPlayerName, const std::string &strBlockedPlayerName) -> void;

// Add below:

    auto ChangeName(const std::string &strOldName, const std::string &strNewName) -> void;

// Open player_block.cpp
// Search:

auto CPlayerBlock::DeletePlayerBlock(const std::string &strBlockingPlayerName, const std::string &strBlockedPlayerName) -> void
{
    DBManager::Instance().DirectQuery("DELETE FROM player.player_block_list WHERE blockingplayername = '%s' AND blockedplayername = '%s'", strBlockingPlayerName.c_str(), strBlockedPlayerName.c_str());
}

// Add below:

auto CPlayerBlock::ChangeName(const std::string &strOldName, const std::string &strNewName) -> void
{
    auto it = m_map_PlayerBlock.find(strOldName);
    if (it != m_map_PlayerBlock.end())
    {
        m_map_PlayerBlock[strNewName] = std::move(it->second);
        m_map_PlayerBlock.erase(it);
    }

    for (auto &it : m_map_PlayerBlock)
    {
        auto it2 = it.second.find(strOldName);
        if (it2 != it.second.end())
        {
            it.second.erase(it2);
            it.second.emplace(strNewName);
        }
    }

    DBManager::Instance().DirectQuery("UPDATE player.player_block_list SET blockingplayername = '%s' WHERE blockingplayername = '%s'", strNewName.c_str(), strOldName.c_str());
    DBManager::Instance().DirectQuery("UPDATE player.player_block_list SET blockedplayername = '%s' WHERE blockedplayername = '%s'", strNewName.c_str(), strOldName.c_str());

    sys_log(0, "PLAYER_BLOCK: ChangeName: %s -> %s", strOldName.c_str(), strNewName.c_str());
}

// Open questlua_pc.cpp

// Add includes:

#ifdef ENABLE_PLAYER_BLOCK_SYSTEM
#include "player_block.h"
#endif

// Search:

        /* delete messenger list */
        MessengerManager::instance().RemoveAllList(ch->GetName());

// Add below:

#ifdef ENABLE_PLAYER_BLOCK_SYSTEM
        /* player block list */
        CPlayerBlock::Instance().ChangeName(ch->GetName(), szName);
#endif
@Luigina biraz paket nasıl yazılıyor görelim demi :XD
 
Son düzenleme:

En Çok Reaksiyon Alan Mesajlar

Official'a yakın her şeyi yapmaya çalışmışsın :) Sanırım tek eksiği engellediğin karakterin dans animasyonlarını göstermemek kalmış.
onuda PythonNetworkStreamCommand.cpp içinde ActEmotion() kullanılan yerlerin üstüne ekledin mi eksiğin yok gibi.

Eline sağlık
Öğeyi görmek için üye olmalısınız.

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst