Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Викторина для администраторов

, Администратор может задавать вопросы викторины и выдавать награды
Статус пользователя iplague
сообщение 23.12.2019, 15:43
Сообщение #1
Стаж: 11 лет

Сообщений: 12
Благодарностей: 9
Полезность: 0

Добрый день. Набросал себе плагин викторины, использую, игрокам нравится. Может кому пригодится.
Версия амх - 190.
Для 182 дописать
Код
#include <dhudmessages>
Как работает?
Администратор:
say !ответ_на_вопрос (например, say !4)
say ?вопрос (например, Сколько будет 2+2)
Ответ засчитывается автоматически (хук чата), поэтому плагин в списке должен быть выше других плагинов, хукающих чат (транслиты и тд)
Кириллица чувствительна к регистру ("Коля" и "коля" - два разных ответа).
Латинские буквы переводятся в нижний регистр ("Nikola", "nIKOLA", "nIkOlA" - засчитываются одинаково).
Команда для открытия менюшки give_bonus (консольная)
Доступ - ADMIN_BAN (строка 32)
Код. Строка 45-47 пишем свои награды в меню, строка 67 - выдаём награды, например, деньги, опыт
Код
#include <amxmodx>
#include <amxmisc>
#include <cstrike>

new QUESION[180];
new ANSWER[180];
new NAME[32];
new bool:IsQuestion = false;
new bool:IsAnswer = false;
new WINNER = 0;

public plugin_init()
{
    register_clcmd("say", "hook_say");
    register_clcmd("givebonus", "give_bonus");
    register_menucmd(register_menuid("give_bonus"), (1<<0|1<<1|1<<2|1<<5|1<<9), "handler_give_bonus");
}

public client_disconnected(id)
{
    if(id == WINNER)
    {
        WINNER = 0;
        if(task_exists(213321213))
            remove_task(213321213);
        ChatColor(0,"^4[В]^1 победитель вышел с сервера!");
    }
}

public give_bonus(id)
{
    if(~get_user_flags(id) & ADMIN_BAN)
        return PLUGIN_HANDLED;
    
    static pos, szMenu[512], keys;
    keys = (1<<0)|(1<<1)|(1<<2)|(1<<5)|(1<<9);
    pos = 0;

    pos += formatex( szMenu[pos], charsmax(szMenu)-pos, "\yМеню викторины^n");
    if(WINNER == 0)
        pos += formatex( szMenu[pos], charsmax(szMenu)-pos, "\wПобедитель: \dещё нет^n");
    else
        pos += formatex( szMenu[pos], charsmax(szMenu)-pos, "\wПобедитель: %s^n",NAME);

    pos += formatex( szMenu[pos], charsmax(szMenu)-pos, "%s1. Выдать награду 1^n", WINNER ? "\w" : "\d");
    pos += formatex( szMenu[pos], charsmax(szMenu)-pos, "%s2. Выдать награду 2^n", WINNER ? "\w" : "\d");
    pos += formatex( szMenu[pos], charsmax(szMenu)-pos, "%s3. Выдать награду 3^n", WINNER ? "\w" : "\d");
    pos += formatex( szMenu[pos], charsmax(szMenu)-pos, "\wВопрос: %s^n",IsQuestion ? QUESION : "\dНе задан");
    pos += formatex( szMenu[pos], charsmax(szMenu)-pos, "\wОтвет: %s^n",IsAnswer ? ANSWER : "\dНе задан");
    pos += formatex( szMenu[pos], charsmax(szMenu)-pos, "%s6. Завершить и вывести ответ на экран^n^n^n",IsAnswer ? "\w" : "\d");
    pos += formatex( szMenu[pos], charsmax(szMenu)-pos, "0. Выход");
    return show_menu(id, keys, szMenu, -1, "give_bonus");
}

public handler_give_bonus(id, item)
{
    switch(item)
    {
        case 0..2:
        {
            if(!WINNER)
                return PLUGIN_HANDLED;
            
            if(task_exists(213321213))
                remove_task(213321213);
            
            // Выдаём награду
            
            set_dhudmessage(random(255), random(255), random(255), -1.0, 0.40, 0, 0.0, 6.0, 0.1, 2.6 );
            show_dhudmessage(0, " Админ выдал награду");
            log_to_file("VICTORY.txt", " Админ выдал награду");
            ChatColor(0,"^4[В]^1 Админ выдал награду");
            WINNER = 0;
            format(NAME,179,"");
            return PLUGIN_HANDLED;
        }
        case 5:
        {
            if(IsQuestion && IsAnswer)
            {
                if(task_exists(213321213))
                    remove_task(213321213);
                set_dhudmessage(random(255), random(255), random(255), -1.0, 0.40, 0, 0.0, 5.0, 0.1, 1.6 );
                show_dhudmessage(0, "Викторина завершена!^nОтвет: %s", ANSWER);
                ChatColor(0,"^4[В]^1 завершена! Ответ: %s", ANSWER);
                log_to_file("VICTORY.txt","Викторина завершена! Ответ: %s", ANSWER);
                format(QUESION,179,"");
                format(ANSWER,179,"");
                IsAnswer = false;
                IsQuestion = false;
                WINNER = 0;
                format(NAME,179,"");
                return PLUGIN_HANDLED;
            }
        }
        case 9: return PLUGIN_HANDLED;
    }
    return PLUGIN_HANDLED;
}

public hook_say(id)
{
    new szSaid[180];
    read_args(szSaid, 179);
    remove_quotes(szSaid);
            
    if(szSaid[0] == '!')  // Записали ОТВЕТ
    {
        replace_all(szSaid,179,"!","");
        replace_all(szSaid,179," ","");
        
        if(~get_user_flags(id) & ADMIN_BAN)
            return PLUGIN_CONTINUE;
        if(WINNER)
        {
            ChatColor(id,"^4[В]^1 Сначала выдайте приз!");
            return PLUGIN_HANDLED;
        }
        format(ANSWER,179,"");
        ANSWER = szSaid;
        strtolower(ANSWER);

        IsAnswer = true;
        ChatColor(id,"^4[В]^1 Ответ: %s", ANSWER);
        log_to_file("VICTORY.txt","Ответ: %s", ANSWER);
        return PLUGIN_HANDLED;
    }
    
    else if(szSaid[0] == '?')  // Записали вопрос
    {
        replace_all(szSaid,179,"?","");
        if(~get_user_flags(id) & ADMIN_BAN)
            return PLUGIN_CONTINUE;
        if(WINNER)
        {
            ChatColor(id,"^4[В]^1 Сначала выдайте приз!");
            return PLUGIN_HANDLED;
        }
        if(!IsAnswer)
        {
            ChatColor(id,"^4[В]^1 Сначала укажите ответ!");
            return PLUGIN_HANDLED;
        }
        format(QUESION,179,"");
        QUESION = szSaid;
        ChatColor(id,"^4[В]^1 Вопрос: %s", QUESION);
        log_to_file("VICTORY.txt","Вопрос: %s", QUESION);
        IsQuestion = true;
        set_task(1.0, "taskHUD", 213321213, "", 0, "b");
        return PLUGIN_HANDLED;
    }
    
    if(!IsQuestion || WINNER)
        return PLUGIN_CONTINUE;
    
    strtolower(szSaid);
    
    if(strfind(szSaid, ANSWER) != -1)
    {
        if(task_exists(213321213))
        {
            WINNER = id;
            format(QUESION,179,"");
            format(NAME,179,"");
            get_user_name(id, NAME, 31);
            ChatColor(0,"^4[В]^1 %s ответил: %s", NAME, ANSWER);
            log_to_file("VICTORY.txt","%s ответил: ^3%s^1", NAME, ANSWER);
            IsQuestion = false;
            IsAnswer = false;
            return PLUGIN_HANDLED;
        }
    }
    return PLUGIN_CONTINUE;
}

public taskHUD()
{
    if(IsQuestion && !WINNER)
    {
        set_dhudmessage(random(255), random(255), random(255), -1.0, 0.20, 0, 0.0, 1.5, 0.1, 0.5 );
        show_dhudmessage(0, "Викторина:^n%s", QUESION);
    }
    
    if(!IsQuestion && WINNER)
    {
        set_dhudmessage(random(255), random(255), random(255), -1.0, 0.20, 0, 0.0, 1.5, 0.1, 0.5 );
        show_dhudmessage(0, "Ответ %s^nПобедитель %s", ANSWER, NAME);
    }
}

stock ChatColor(const id, const szMessage[], any:...)
{
    static pnum, players[32], szMsg[190], IdMsg;
    vformat(szMsg, charsmax(szMsg), szMessage, 3);
    
    if(!IdMsg) IdMsg = get_user_msgid("SayText");
    
    if(id)
    {
        if(!is_user_connected(id)) return 1;
        players[0] = id;
        pnum = 1;
    }
    else get_players(players, pnum, "ch");
    
    for(new i; i < pnum; i++)
    {
        message_begin(MSG_ONE, IdMsg, .player = players[i]);
        write_byte(players[i]);
        write_string(szMsg);
        message_end();
    }
    return 1;
}
Cкрины
Прикрепленное изображениеПрикрепленное изображениеПрикрепленное изображениеПрикрепленное изображение


Отредактировал: iplague, - 23.12.2019, 15:44


<3 war3ft mod
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 3 раз
   Цитировать сообщение
Статус пользователя TheArtemMaps
сообщение 27.12.2019, 16:03
Сообщение #2
Стаж: 6 лет 10 месяцев
Город: Киев

Сообщений: 703
Благодарностей: 64
Полезность: < 0

Крутой плагин мне нравится игрокам тоже!) thank_you2.gif


Register System <== Register System от m0skVi4a ;]
45.137.155.4:45265 <== сервер зомби
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: