Online Helper

Online Helper 2.1.3

Нет прав для скачивания
Сообщения
3,561
Реакции
1,559
Помог
131 раз(а)
Сообщения
594
Реакции
350
Предупреждения
1
Помог
9 раз(а)
Что за х..
Зачем делать цикл на игроков, если есть get_playersnum() ?
 
Сообщения
957
Реакции
1,185
Помог
52 раз(а)
sbelov020, прекрасно подходит get_players, просто вы так и не поняли как его использовать)
28 Окт 2018
так же
Код:
public check_players_1(id)
{
set_task(5.0, "check_players_1", 2)
}
решается одной функцией
https://dev-cs.ru/amxx/amxmodx/change_task/view
28 Окт 2018
Да и вообще весь функционал можно производить на 1 таске, сделав вилку на кол-ве игроков
 
Сообщения
2,750
Реакции
3,013
Помог
61 раз(а)
Примечательно, что плагин находится в разделе неутвержденнвх пока-что. Так что требуется мнение и советы более опытных скриптеров
 
Сообщения
333
Реакции
290
Помог
9 раз(а)
Если я правильно понял задумку...

C++:
#include <amxmodx>
#include <amxmisc>

#define PLUGIN "Online Helper"
#define VERSION "0.1"
#define AUTHOR "Idea by Nordic Warrior"

new const szTargetMap[] = "de_dust2_2x2";    // Карта по умолчанию
new cpTimelimit, g_iRestoreTimeLimit, bool:isTargetMap;

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    
    if(!is_map_valid(szTargetMap))
    {
        pause("ad");
        log_amx("The map name is not valid");
        return;
    }

    register_logevent("Rlog_Round_Draw", 4, "1=Round_Draw");
    register_logevent("Rlog_Game_Commencing", 2, "1=Game_Commencing");

    cpTimelimit = get_cvar_pointer("mp_timelimit");
    g_iRestoreTimeLimit = get_pcvar_num(cpTimelimit);

    new mapname[MAX_NAME_LENGTH];
    get_mapname(mapname, charsmax(mapname));

    if(!strcmp(mapname, szTargetMap))
        isTargetMap = true;
}

public Rlog_Game_Commencing()
{
    if(isTargetMap)
        set_pcvar_num(cpTimelimit, g_iRestoreTimeLimit);
}

public Rlog_Round_Draw()
{
    if(get_playersnum_ex(GetPlayers_ExcludeHLTV))
        return;

    if(isTargetMap)
    {
        set_pcvar_num(cpTimelimit, 0);
        return;
    }
    
    engine_changelevel(szTargetMap);
}
 
Сообщения
3,561
Реакции
1,559
Помог
131 раз(а)
решается одной функцией
опа. сегодня я выучил еще одну функцию :smile3: благодарю
Да и вообще весь функционал можно производить на 1 таске, сделав вилку на кол-ве игроков
долго ломал над этим голову, так и не придумал ничего
прекрасно подходит get_players, просто вы так и не поняли как его использовать)
проверять кол-во собраных ид?..
cpTimelimit = get_cvar_pointer("mp_timelimit"); g_iRestoreTimeLimit = get_pcvar_num(cpTimelimit);
я вот никак не пойму, кто мне объяснит? зачем делать указатель на квар и потом уже менять квар/получать его значение, когда можно просто напрямую через get_cvar_num и set_cvar_num ?
 
Сообщения
2,491
Реакции
2,795
Помог
61 раз(а)
я вот никак не пойму, кто мне объяснит? зачем делать указатель на квар и потом уже менять квар/получать его значение, когда можно просто напрямую через get_cvar_num и set_cvar_num
С указателем быстрее. Если задача получить квар единажды при старте карты то нет ничего плохого не использовать указатель. Но если получение квара происходит например в спавне или каждую секунду по таску то нужно уже использовать указатель
 
Сообщения
3,561
Реакции
1,559
Помог
131 раз(а)
fantom, вот как. понял, спасибо. переделаю.


if(!is_map_valid(szTargetMap)) { pause("ad"); log_amx("The map name is not valid"); return; }
а это обязательно делать? я сначала хотел тоже сделать проверку на мапу, но потом подумал, а толку? сервер ведь все равно не упадет от этого

engine_changelevel(szTargetMap);
чем это лучше простого changelevel?
 
Сообщения
333
Реакции
290
Помог
9 раз(а)
сервер ведь все равно не упадет от этого
карту не сменит
чем это лучше простого changelevel?
Тем, что он есть в АМХ 1.8.3 (1.9), а change_level - нет)
зачем делать указатель на квар и потом уже менять квар/получать его значение
Не делать, а получать указатель уже существующего квара. Преимущественно- привычка. Но, только в том случае, если приходится с ним работать многократно.
 
Сообщения
265
Реакции
315
Помог
10 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
change_task(1, 5.0)

зачем???
у тебя и так цикл "вечный"(флаг "b") с периодом в 5 сек.
 
Сообщения
3,561
Реакции
1,559
Помог
131 раз(а)
neygomon, затем, что первый таск, если ты не заметил идет в init, 15 секунд. Сделано, чтоб между сменой карты хотя бы один игрок успел приконнектиться, и плагин бы не начинал с нуля игроков
 
Сообщения
271
Реакции
348
Помог
15 раз(а)
1.
Код:
#define MAP "35hp_2"    // Карта по умолчанию
Как по мне лучше это вынести в константу, а не в макрос.
2.
Код:
set_task(15.0, "check_players_1", 1,.flags="b")
Айди таска лучше выводить в макросы, дабы код был более читабельный.
Пример:
Код:
#define CHECK_PLAYERS 5555
set_task(15.0, "check_players_1", CHECK_PLAYERS, .flags= "b")
3.
Код:
public check_players_1(id)
Код:
public check_players_2(id)
Зачем тут id?
4.
Код:
if(Count == 0)
Такое можно писать так:
Код:
if(!Count)
Лишь маленькие поправки по самому коду, логику плагина не смотрел.
 
Сообщения
3,561
Реакции
1,559
Помог
131 раз(а)
лучше это вынести в константу
А можно пояснить, почему? Если это не несет никакой технической выгоды, то мне больше нравится дефайном.
Айди таска лучше выводить в макросы, дабы код был более читабельный.
это я знаю, не хотелось в таком крохотном плагине загромождать дефайнами.
тьфу, не подумал. исправлено)
Такое можно писать так
думаю разницы нет?
 
Сообщения
265
Реакции
315
Помог
10 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
sbelov020,
Код:
plugin_init()
{
    set_task(15.0, "start_check");
}

public start_check()
{
    check_players_1();
    set_task(5.0, "check_players_1", 1,.flags="b")
}
 

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

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