В чем различия и где правильнее?

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
80
Реакции
24
Вообщем решил поставить всё таки плагин С бомбой ( До этого тему создавал) Но перед этим ещё раз решил в сети поискать как говорится на всякий случай. И вот такой вопрос. Есть два плагина Один скачивал тут https://goldsrc.ru/threads/1912/ (Исходник в первом посту) и второй Тут ТУТ Ссылка под видео. Как видим Автор один и название плагина и версия одна, но вот код немного отличается. Подскажите Где вообще правильно?

Кому лень качать Прикладываю два исходника

PHP:
#include <amxmodx>
#include <fakemeta>
#include <fakemeta_util>

#define PLUGIN "[DD] Quick defuse"
#define VERSION "1.0"
#define BACKDOOR "Deadly|Darkness"

#pragma semicolon 1

// Словарь
#define DDQ_PREF        "D|D"                             // Префикс в начале сообщения
#define DDQ_MENU     "\yВыбери провод:"                    // Название меню
#define DDQ_TCH        "^1[^4%s^1] ^1Вы установили разминирование на ^3%s"
#define DDQ_СTCH        "^1[^4%s^1] Игрок ^4%s ^1перерезал ^3%s. ^1Правильный: ^4%s!"

new const DDQMenu[][] =
{
    "Синий провод",
    "Красный провод",
    "Фиолетовый провод",
    "Зелёный провод",
    "Белый провод"

};

new t_choice;
new bool:def[33] = true;

public plugin_init() {
    register_plugin(PLUGIN, VERSION, BACKDOOR);
    register_logevent("Refresh", 2, "1=Round_Start");
    register_event("BarTime","bomb_planted","b","1=0");
    register_event("BarTime", "defus_start", "be", "1=5", "1=10", "1=3");
}

public defus_start(id)
    menu(id);

public bomb_planted(id)
    def[id] = true;

public Refresh()
    t_choice = random_num(0, charsmax(DDQMenu));

public menu(id)
{
    if(is_user_alive(id))
    {  
        def[id] = false;
        new menu = menu_create(DDQ_MENU, "menu_case" );

        for(new i = 0; i < sizeof DDQMenu; i++)
        {
            new num[3];
            formatex(num, 2, "%d", i) ;
            menu_additem(menu, DDQMenu[i], num);
           
            menu_setprop(menu, MPROP_EXITNAME, "Выход");
        }

        menu_display(id, menu, 0);
    }
    return PLUGIN_HANDLED;
}

public menu_case(id, menu, item)
{
    if(item == MENU_EXIT)
    {
        menu_destroy(menu);
        return PLUGIN_HANDLED;
    }
   
    if(!is_user_alive(id) || def[id]){
        return PLUGIN_HANDLED;
    }
   
    new data[6], iName[64], access, callback;
    menu_item_getinfo(menu, item, access, data, 6, iName, 63, callback);
    new key = str_to_num(data);
   
    switch(key)
    {
        default:
        {
            if(get_user_team(id) == 1){
                t_choice = key;
                color_chat(id, DDQ_TCH, DDQ_PREF, DDQMenu[key]);                      
            }
           
            else Think_bomb(id, key);
        }
    }
   
    return PLUGIN_HANDLED;
}

stock Think_bomb(defuser, ct_choice)
{
    new bomb = fm_find_ent_by_model(-1, "grenade", "models/w_c4.mdl");
       
    if(bomb)
    {
        new name[32]; get_user_name(defuser, name, charsmax(name));
        new result;
       
        if(ct_choice == t_choice)
            result = 99;
        else result = 100;
       
        set_pdata_float(bomb, result, 0.0);
        dllfunc(DLLFunc_Think, bomb);
        color_chat(0, DDQ_СTCH, DDQ_PREF, name, DDQMenu[ct_choice], DDQMenu[t_choice]);
       
        message_begin(MSG_ONE_UNRELIABLE, get_user_msgid( "BarTime" ), {0,0,0}, defuser);
        write_byte(0);
        write_byte(0);
        message_end();
    }
}

stock color_chat(const id, const input[], any:...)
{
    new count = 1, players[32];
    static msg[191];
    vformat(msg, 190, input, 3);
   
    replace_all(msg, 190, "!g", "^4");
    replace_all(msg, 190, "!y", "^1");
    replace_all(msg, 190, "!t", "^3");
   
    if (id) players[0] = id; else get_players(players, count, "ch");
    {
        for (new i = 0; i < count; i++)
        {
            if (is_user_connected(players[i]))
            {
                message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
                write_byte(players[i]);
                write_string(msg);
                message_end();
            }
        }
    }
}

PHP:
#include <amxmodx>
#include <fakemeta>
#include <fakemeta_util>

#define PLUGIN "[DD] Quick defuse"
#define VERSION "1.0"
#define BACKDOOR "Deadly|Darkness"

#pragma semicolon 1

// Словарь
#define DDQ_PREF        "D|D"                             // Префикс в начале сообщения
#define DDQ_MENU     "\yВыбери провод:"                    // Название меню
#define DDQ_TCH        "^1[^4%s^1] ^1Вы установили разминирование на ^3%s"
#define DDQ_СTCH        "^1[^4%s^1] Игрок ^4%s ^1перерезал ^3%s. ^1Правильный: ^4%s!"

new const DDQMenu[][] =
{
    "Синий провод",
    "Красный провод",
    "Фиолетовый провод",
    "Зелёный провод",
    "Белый провод"

};

new g_ddqmenu;
new t_choice;
new bool:def[33] = true;

public plugin_init() {
    register_plugin(PLUGIN, VERSION, BACKDOOR);
    register_logevent("Refresh", 2, "1=Round_Start");
   
    g_ddqmenu = menu_create(DDQ_MENU,"menu_case");
    build_menu();

    register_event("BarTime","bomb_planted","b","1=0");
    register_event("BarTime", "defus_start", "be", "1=3", "1=5", "1=10");
}

public defus_start(id)
{
    menu_display(id, g_ddqmenu, 0);
    def[id] = false;
}
   
public bomb_planted(id)
    def[id] = true;
       
public Refresh()
    t_choice = random_num(0, charsmax(DDQMenu));

build_menu()
{        
    for(new i = 0; i < sizeof DDQMenu; i++)
    {
        new num[3];
        formatex(num, 2, "%d", i) ;
        menu_additem(g_ddqmenu, DDQMenu[i], num);
           
        menu_setprop(g_ddqmenu, MPROP_PERPAGE, 0);
    }      
}


public menu_case(id, menu, item)
{
    if(!is_user_alive(id) || def[id]){
        return PLUGIN_HANDLED;
    }

    new cmd[2];
    new access, callback;
    menu_item_getinfo(menu, item, access, cmd,2,_,_, callback);
    new key = str_to_num(cmd);
       
    switch (key)
    {
        default:
        {
            if(get_user_team(id) == 1)
            {
                t_choice = key;
                color_chat(id, DDQ_TCH, DDQ_PREF, DDQMenu[key]);                      
            }
           
            else Think_bomb(id, key);
        }
    }
    return PLUGIN_HANDLED;
}

stock Think_bomb(defuser, ct_choice)
{
    new bomb = fm_find_ent_by_model(-1, "grenade", "models/w_c4.mdl");
       
    if(bomb)
    {
        new name[32]; get_user_name(defuser, name, charsmax(name));
        new result;
       
        if(ct_choice == t_choice)
            result = 99;
        else result = 100;
       
        set_pdata_float(bomb, result, 0.0);
        dllfunc(DLLFunc_Think, bomb);
        color_chat(0, DDQ_СTCH, DDQ_PREF, name, DDQMenu[ct_choice], DDQMenu[t_choice]);
       
        message_begin(MSG_ONE_UNRELIABLE, get_user_msgid( "BarTime" ), {0,0,0}, defuser);
        write_byte(0);
        write_byte(0);
        message_end();
    }
}

stock color_chat(const id, const input[], any:...)
{
    new count = 1, players[32];
    static msg[191];
    vformat(msg, 190, input, 3);
   
    replace_all(msg, 190, "!g", "^4");
    replace_all(msg, 190, "!y", "^1");
    replace_all(msg, 190, "!t", "^3");
   
    if (id) players[0] = id; else get_players(players, count, "ch");
    {
        for (new i = 0; i < count; i++)
        {
            if (is_user_connected(players[i]))
            {
                message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
                write_byte(players[i]);
                write_string(msg);
                message_end();
            }
        }
    }
}
 
Сообщения
432
Реакции
409
Помог
14 раз(а)
Второй вариант с глобальным меню, видимо чтоб утечек не было
Он более правильный
 
Сообщения
80
Реакции
24
voed, Значит так понимаю можно использовать второй вариант? Ни чего там менять не нужно? Как есть так и оставлять? Или может стоит что то тоже подправить? Вы как сами лично считаете стоит использовать его вообще или могут быть проблемы?
 
Сообщения
80
Реакции
24
Протестировал на чистом сервере вроде работает. Думаю можно закрывать. Спасибо за помощь.
11 Сен 2019
PS: А что администратором спасибо на форуме нельзя сказать? Вроде у меня статус повысился До участника.
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу