Bağırmada Sahte Bot Sistemi

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

gyokitolowe1903

Level 1
Katılım
6 Eki 2024
Konular
4
Mesajlar
30
Online süresi
10g 40233s
Reaksiyon Skoru
23
Altın Konu
0
Başarım Puanı
36
TM Yaşı
1 Yıl 6 Ay 15 Gün
MmoLira
2,236
DevLira
6

Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. HEMEN TIKLA!

Python:
#include "stdafx.h"
#include "char.h"
#include "char_manager.h"
#include "utils.h"
#include <fstream>
#include <string>
#include <vector>
#include <thread>
#include <chrono>
#include <unordered_map>
#include <atomic>
#include <algorithm>
#include <random>

struct FakeMessage
{
    std::string char_name;
    std::string message;
};

static std::vector<FakeMessage> g_fake_messages;
static std::unordered_map<std::string, CHARACTER*> g_dummy_characters;

static std::atomic<bool> g_auto_shout_enabled{ true };
static std::thread g_shout_thread;
static std::atomic<bool> g_thread_running{ false };

static const std::string g_txt_path = "/home/game/sahte_mesaj.txt";

void LoadFakeMessages()
{
    g_fake_messages.clear();

    std::ifstream file(g_txt_path);
    if (!file.is_open())
    {
        sys_err("SAHTE_MESAJ: Dosya acilamadi: %s", g_txt_path.c_str());
        return;
    }

    std::string line;
    while (std::getline(file, line))
    {
        size_t space_pos = line.find(' ');
        if (space_pos != std::string::npos)
        {
            std::string name = line.substr(0, space_pos);
            std::string msg = line.substr(space_pos + 1);

            if (!name.empty() && !msg.empty())
                g_fake_messages.push_back({ name, msg });
        }
    }

    sys_log(0, "SAHTE_MESAJ: %zu sahte mesaj yüklendi.", g_fake_messages.size());
}

CHARACTER* CreateDummyCharacter(const std::string& charName)
{
    auto it = g_dummy_characters.find(charName);
    if (it != g_dummy_characters.end())
        return it->second;

    CHARACTER_MANAGER& chm = CHARACTER_MANAGER::instance();
    CHARACTER* ch = chm.CreateCharacter();
    if (!ch)
    {
        sys_err("SAHTE_MESAJ: Dummy karakter yaratılamadı: %s", charName.c_str());
        return nullptr;
    }

    ch->SetName(charName.c_str());
    ch->SetDummy(true);
    ch->SetInvisible(true);
    ch->WarpSet(0, 100, 100);

    g_dummy_characters[charName] = ch;
    sys_log(0, "SAHTE_MESAJ: Dummy yaratıldı: %s", charName.c_str());
    return ch;
}

void SendFakeShout(const FakeMessage& fm)
{
    if (!g_auto_shout_enabled)
        return;

    CHARACTER* ch = CreateDummyCharacter(fm.char_name);
    if (ch)
    {
        ch->ChatPacket(CHAT_TYPE_SHOUT, fm.message.c_str());
        sys_log(0, "SAHTE_MESAJ: %s -> %s", fm.char_name.c_str(), fm.message.c_str());
    }
}

void AutoShoutLoop()
{
    LoadFakeMessages();

    g_thread_running = true;

    std::random_device rd;
    std::mt19937 g(rd());

    while (g_auto_shout_enabled)
    {
        std::vector<FakeMessage> shuffled = g_fake_messages;
        std::shuffle(shuffled.begin(), shuffled.end(), g);

        for (const auto& fm : shuffled)
        {
            SendFakeShout(fm);
            std::this_thread::sleep_for(std::chrono::milliseconds(100));
        }

        for (int i = 0; i < 15 && g_auto_shout_enabled; ++i)
            std::this_thread::sleep_for(std::chrono::seconds(1));
    }

    g_thread_running = false;
}

void StartAutoShout()
{
    if (g_thread_running)
        return;

    g_auto_shout_enabled = true;
    g_shout_thread = std::thread(AutoShoutLoop);
    g_shout_thread.detach();
}

void StopAutoShout()
{
    g_auto_shout_enabled = false;

    int wait = 0;
    while (g_thread_running && wait++ < 20)
        std::this_thread::sleep_for(std::chrono::milliseconds(100));
}

bool DummyCharacterRecvPrivateMessage(CHARACTER* ch, const char* fromName, const char* message)
{
    std::string chName = ch->GetName();

    if (g_dummy_characters.find(chName) != g_dummy_characters.end())
    {
        sys_log(0, "SAHTE_MESAJ PM (ignored): %s -> %s : %s", fromName, chName.c_str(), message);
        return true;
    }

    return false;
}

bool HandleAutoShoutCommand(CHARACTER* ch, const char* cmd)
{
    if (!ch->IsGM())
        return false;

    std::string command(cmd);

    if (command == "/reloadsahtemesaj")
    {
        LoadFakeMessages();
        ch->ChatPacket(CHAT_TYPE_INFO, "Sahte mesaj listesi yeniden yüklendi.");
        return true;
    }
    else if (command == "/sahtemesaj start")
    {
        StartAutoShout();
        ch->ChatPacket(CHAT_TYPE_INFO, "Sahte mesaj sistemi başlatıldı.");
        return true;
    }
    else if (command == "/sahtemesaj stop")
    {
        StopAutoShout();
        ch->ChatPacket(CHAT_TYPE_INFO, "Sahte mesaj sistemi durduruldu.");
        return true;
    }

    return false;
}

Yeni bir cpp oluşturun sahte_mesaj.cpp isminde.

Cpp yi makefile eklemeyi unutmayın.


/game/sahte_mesaj.txt Oluştur içine

Testtest merhaba
Ggg sa

Diye sıradan eklemeler yapabilirsiniz.

Komutlar:
sahtemesaj start, /sahtemesaj stop, /reloadsahtemesaj

//
Python:
Char cpp Arat
bool do_chat(CHARACTER* ch, const char* cmd)
{
Fonksiyonun içine hemen başına ekle

if (HandleAutoShoutCommand(ch, cmd))
    return true;


Sonra tekrar char cpp arat
bool RecvWhisper(CHARACTER* ch, const char* fromName, const char* message)
{
Yine fonksiyonun hemen başına ekle


if (DummyCharacterRecvPrivateMessage(ch, fromName, message))
    return true;
 
Son düzenleme:
24 saat içerisinde kanıt ekleyiniz.
 
Bunu oyunda olan event sistemiyle yapmak çok daha basit oluyor, ayrıca mesaj göndermek için karakter oluşturmanıza da gerek yok
 
Bunu oyunda olan event sistemiyle yapmak çok daha basit oluyor, ayrıca mesaj göndermek için karakter oluşturmanıza da gerek yok
Önceden öyle kullanıyordum fakat yüksek onlinede sayıyı arttırınca şaşırdı kendini
 
Önceden öyle kullanıyordum fakat yüksek onlinede sayıyı arttırınca şaşırdı kendini
Online sayısı ile ilgili olmamalı durum 1 tane event schedule ediyoruz günün sonunda 1xN kadar mesaj gidiyor clientlara belirlediğimiz her saniye farklı bir yükü yok
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

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