What's new
What's new

New messages New topics Systems Serverfiles 3D Models Web Scripting

Metin2Resources

👋 Welcome to Metin2 Resources — your hub for professional Metin2 server development.

Create a free account to access advanced systems, serverfiles, tutorials and connect with other developers.

🚀 Join today and start building better.

ITJA - A system that gives the GM the authority to chat ban any player they want

ITJA

Member
📜 Messages 18
👍 Reactions 0
🏆 Points 25
🌐 Website ugurkaya.work
cmd_general.cpp

Code:
ACMD(do_chatban_auth)
{
    char arg1[256];
    one_argument(argument, arg1, sizeof(arg1));

    if (!*arg1)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "Kullanım: /chatban_auth <karakter_ismi>");
        return;
    }

    LPCHARACTER target = CHARACTER_MANAGER::instance().FindPC(arg1);
    if (!target)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "Oyuncu bulunamadı.");
        return;
    }

    target->SetQuestFlag("chatban.authorized", 1);
    ch->ChatPacket(CHAT_TYPE_INFO, "%s artık chat ban yetkilisi oldu.", target->GetName());
    target->ChatPacket(CHAT_TYPE_INFO, "Artık chat ban yetkisine sahipsiniz. /chatban komutunu kullanabilirsiniz.");
}

do_chatban – Yetkili oyuncu ban atar

cmd_general.cpp

Code:
ACMD(do_chatban)
{
    char arg1[256];
    char arg2[256];
    two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));

    if (!*arg1 || !*arg2)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "Kullanım: /chatban <karakter_ismi> <süre_dk>");
        return;
    }

    // GM değilse yetki kontrolü
    if (ch->GetGMLevel() < GM_HIGH_WIZARD && ch->GetQuestFlag("chatban.authorized") != 1)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "Bu komutu kullanmak için yetkiniz yok.");
        return;
    }

    LPCHARACTER victim = CHARACTER_MANAGER::instance().FindPC(arg1);
    if (!victim)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "Oyuncu bulunamadı.");
        return;
    }

    int duration = atoi(arg2);
    if (duration <= 0)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "Geçersiz süre.");
        return;
    }

    time_t banEnd = get_global_time() + (duration * 60);
    victim->SetQuestFlag("chatban.end_time", banEnd);

    victim->ChatPacket(CHAT_TYPE_INFO, "Sohbet hakkınız %d dakika boyunca engellendi.", duration);
    ch->ChatPacket(CHAT_TYPE_INFO, "%s oyuncusuna %d dakika chat ban uyguladınız.", victim->GetName(), duration);
}

cmd_genaral.cpp

Code:
ACMD(do_chatban_revoke)
{
    char arg1[256];
    one_argument(argument, arg1, sizeof(arg1));

    if (!*arg1)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "Kullanım: /chatban_revoke <karakter_ismi>");
        return;
    }

    LPCHARACTER target = CHARACTER_MANAGER::instance().FindPC(arg1);
    if (!target)
    {
        ch->ChatPacket(CHAT_TYPE_INFO, "Oyuncu bulunamadı.");
        return;
    }

    target->SetQuestFlag("chatban.authorized", 0);
    ch->ChatPacket(CHAT_TYPE_INFO, "%s artık chat ban yetkisine sahip değil.", target->GetName());
    target->ChatPacket(CHAT_TYPE_INFO, "Chat ban yetkiniz kaldırıldı.");
}

cmd.cpp

Code:
{ "chatban", do_chatban, GM_PLAYER },
{ "chatban_auth", do_chatban_auth, GM_HIGH_WIZARD },
{ "chatban_revoke", do_chatban_revoke, GM_HIGH_WIZARD },

input_main.cpp
Code:
if (ch->GetQuestFlag("chatban.end_time") > get_global_time())
{
    ch->ChatPacket(CHAT_TYPE_INFO, "Sohbet yasağınız devam ediyor.");
    return;
}



GM olarak:

/chatban_auth ITJA


ITJA artık yetkili oldu.

Yetkili oyuncu olarak:

/chatban ITJA 10

ITJA Oyuncusu 10 dakika boyunca sohbet edemez.


GM olarak yetkiyi kaldırmak için:

/chatban_revoke ITJA

ITJAnın yetkisi geri alınır.


Ek Olarak:
Chat yasağını kaldırmak için kod satırı

cmd_genaral.cpp

Code:
ACMD(do_chatunban)
{
    char name[256];
    one_argument(argument, name, sizeof(name));

    if (!*name) {
        ch->ChatPacket(CHAT_TYPE_INFO, "Kullanım: /chatunban <oyuncu>");
        return;
    }

    if (ch->GetQuestFlag("chatban.isAuthorized") != 1 && ch->GetGMLevel() < GM_LOW_WIZARD) {
        ch->ChatPacket(CHAT_TYPE_INFO, "Bu komutu kullanma yetkiniz yok.");
        return;
    }

    LPCHARACTER victim = CHARACTER_MANAGER::instance().FindPC(name);
    if (!victim) {
        ch->ChatPacket(CHAT_TYPE_INFO, "Oyuncu bulunamadı.");
        return;
    }

    victim->SetQuestFlag("chatban.end_time", 0);
    victim->SetQuestFlag("chatban.isBanned", 0);
    victim->SetQuestFlag("chatban.reason", "");

    ch->ChatPacket(CHAT_TYPE_INFO, "%s adlı oyuncunun chat yasağı kaldırıldı.", victim->GetName());
    victim->ChatPacket(CHAT_TYPE_INFO, "Chat yasağınız kaldırıldı.");
}



cmd.cpp:


Code:
ACMD(do_chatunban);

TCommandInfo command_info[] = {
    { "chatunban",    do_chatunban,    GM_PLAYER, POS_DEAD, 0, NULL },

    // ...
};
 
Back
Top Bottom