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

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
46
Реакции
9
Вообщем решил поставить всё таки плагин С бомбой ( До этого тему создавал) Но перед этим ещё раз решил в сети поискать как говорится на всякий случай. И вот такой вопрос. Есть два плагина Один скачивал тут 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();
            }
        }
    }
}
 
Сообщения
315
Реакции
257
Второй вариант с глобальным меню, видимо чтоб утечек не было
Он более правильный
 
Сообщения
46
Реакции
9
voed, Значит так понимаю можно использовать второй вариант? Ни чего там менять не нужно? Как есть так и оставлять? Или может стоит что то тоже подправить? Вы как сами лично считаете стоит использовать его вообще или могут быть проблемы?
 
Сообщения
46
Реакции
9
Протестировал на чистом сервере вроде работает. Думаю можно закрывать. Спасибо за помощь.
Среда в 00:08
PS: А что администратором спасибо на форуме нельзя сказать? Вроде у меня статус повысился До участника.
 
Статус
В этой теме нельзя размещать новые ответы.

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

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