Hikayeler

Reklam vermek için turkmmo@gmail.com

Bağırmada Sahte Bot Sistemi

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

gyokitolowe1903

Level 1
Üye
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)

Geri
Üst