Demo Recorder

Demo Recorder 2.4.1

Нет прав для скачивания
Сообщения
190
Реакции
16
Помог
1 раз(а)
Просьба заменить строчку в плагине:
client_cmd(id, "stop;record ^"%s^"", name);
На:
client_cmd(id, "stop; wait; wait; record ^"%s^"", name);

Тогда будет записывать.
Заранее спасибо.
 
Последнее редактирование:
Сообщения
19
Реакции
7
Код:
L 02/08/2019 - 16:21:39: Info (map "DE_Dust2_Santorini_Export_B1") (file "addons/amxmodx/logs/error_20190208.log")
L 02/08/2019 - 16:21:39: replace() buffer not big enough (33>=31)
L 02/08/2019 - 16:21:39: [AMXX] Run time error 10 (plugin "demo_rec.amxx") (native "replace") - debug not enabled!
L 02/08/2019 - 16:21:39: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
 

GIT

Сообщения
82
Реакции
6
Помог
2 раз(а)
fantom, вопрос общего характера , а что лучше по нагрузке плагин ставить или hltv ?
 
Сообщения
2,491
Реакции
2,790
Помог
61 раз(а)
GIT, это разные вещи. Этот плагин выигрывает по нагрузке. Но по практичности ровно так же проигрывает перед хлтв
 
Сообщения
81
Реакции
9
Помог
3 раз(а)
fantom,
L 02/24/2019 - 02:37:54: Start of error session.
L 02/24/2019 - 02:37:54: Info (map "de_dust2_2x2_b_new") (file "addons/amxmodx/logs/error_20190224.log")
L 02/24/2019 - 02:37:54: replace() buffer not big enough (34>=31)
L 02/24/2019 - 02:37:54: [AMXX] Displaying debug trace (plugin "demo_recorder.amxx", version "2.4.0")
L 02/24/2019 - 02:37:54: [AMXX] Run time error 10: native error (native "replace")
L 02/24/2019 - 02:37:54: [AMXX] [0] demo_recorder.sma::HookChangeFormat (line 35)
L 02/24/2019 - 02:37:54: [AMXX] [1] demo_recorder.sma::plugin_cfg (line 27)
 
Сообщения
2,491
Реакции
2,790
Помог
61 раз(а)
TwinG4_20,
Код:
- new Float:Timeout = 5.0, DemoName[32] = "Demo";
+ new Float:Timeout = 5.0, DemoName[64] = "Demo";
 
Сообщения
48
Реакции
151
Немного критики, если никто не против:

  1. Непонятно, для чего глобальным переменным давать значения по умолчанию, когда эти же значения вписаны по умолчанию в кварах.
  2. Зачем создавать лишнюю переменную внутри plugin_init для поинтера, когда можно сделать так:
    C++:
    bind_pcvar_float(create_cvar("amx_demo_timeout", "5.0", .has_min = true, .min = 0.0), Timeout);
  3. Непонятно, для чего вот это:
    C++:
    public plugin_cfg() {
        Timeout = get_cvar_float("amx_demo_timeout");
        HookChangeFormat(get_cvar_pointer("amx_demo_format"));
    }
    если используется бинд в переменную (при любом изменении, значение указанной глобальной переменной будет меняться тоже, и на момент срабатывания plugin_cfg в том числе). Хук на изменение сработает тоже.
  4. Непонятно, для чего в обработчике хука изменения значения (HookChangeFormat) получать значение через поинтер, когда в обработчик прилетает а) старое значение, б) новое значение:
    Код:
    - public HookChangeFormat(const pcvar) {
    + public HookChangeFormat(const pcvar, const oldValue[], const newValue[]) {
    -    get_pcvar_string(pcvar, DemoName, charsmax(DemoName));
    +    copy(DemoName, charsmax(DemoName), newValue);
    
        new map[32];
        get_mapname(map, charsmax(map));
        replace(DemoName, charsmax(DemoName), "%mapname%", map);
    }
  5. У тебя в кваре указано минимальное значение в 0.0, т.е. меньше оно быть не может, поэтому условие можно сделать и таким:
    C++:
    public client_putinserver(id) {
        if (!is_user_bot(id) && !is_user_hltv(id)) {
            if (Timeout) {
                set_task(Timeout, "TaskRecord", id);
            } else {
                TaskRecord(id);
            }
        }
    }
    Можно и так:
    Код:
    !Timeout && TaskRecord(id);
    Timeout && set_task(Timeout, "TaskRecord", id);
  6. Советую юзать replace_stringex
 
Сообщения
2,491
Реакции
2,790
Помог
61 раз(а)
Kaido Ren, 1, 2, 3 - попробуй изменить значение квара в консоли без прописи в конфиг. После этого изменить карту. Если сделат как ты предлагаешь (что также верно в некой мере), то получим значения кваров одни, а в плагине переменные другие. Эти манипуляции сделаны именно для такого случая.
4. Те же яйца только в профиль. Сначала так же сделал через copy. По сути ничего не изменится как в одном случае так и во втором.
5. Читабельность в твоем варианте значительно ниже. Ну и если учесть микрооптимизации, то у тебя два сравнения вместо одного как у меня.
6. Учту
 
Сообщения
327
Реакции
289
Помог
9 раз(а)
1, 2, 3 - попробуй изменить значение квара в консоли без прописи в конфиг. После этого изменить карту. Если сделат как ты предлагаешь (что также верно в некой мере), то получим значения кваров одни, а в плагине переменные другие. Эти манипуляции сделаны именно для такого случая.
C++:
Timeout = get_cvar_float("amx_demo_timeout");
Да и то- непонятная конструкция.. че к чему) Зечем из поинтера получать и зачем квары, которые не пишутся в конфиге для возможности их восстановления
bind_pcvar_float(pcvar, Timeout);
а не какую-то мифическую бесполезную цифру. К чему она здесь- непонятно
C++:
new Float:Timeout = 5.0
ахахх.. крч, сам голову сломал всего этого
Зарегистрировали квар, забиндиля для получения значений при изменении
 
Сообщения
2,491
Реакции
2,790
Помог
61 раз(а)
zhorzh78, И что случилось от того что в переменную загнано сразу деф значение? Что то существенное поменялось? Это та же история как с #unused. Я делаю так ибо для меня это явное определение. Меня так научили програмировать. Всегда должно в коде быть все ясно и понятно. Я конешн опонимаю что в мире АМХХ скриптинга в целом принято делать микрооптимизации из разряда непойми что, но выглядит более умно. Или зачем писать variable == 0 если можна просто !variable. Но все это не явное приведение типов. В таких языках как PHP и JS можна напоротся на такие багы, что и не снились при таком подходе. Посему я все равно буду делать явные определения и буду четко осознавать что у мен творится в коде, чем буду надеятся что там будет 0 или еще какая то дургая непонятная фигня.
13 Мар 2019
В принципе должен признать свою ошибку. Видимо я либо плохо тестировал раньше или недавно изменили, но при бинде мы сразу же получим значение
https://github.com/alliedmodders/am...846ae37cbcd6d572/amxmodx/CvarManager.cpp#L397
 
Сообщения
48
Реакции
151
У меня этот бинд работал еще в то время, когда у Аркшайна был отдельный модуль с менеджером кваров, откуда и пришли эти функции. Значение получалось сразу. Так что, вероятно, ты где-то не доглядел при тестах.
 
Сообщения
51
Реакции
3
Здравствуйте, подскажите пожалуйста как отключить сообщение в чате о записи демки?
 
Сообщения
27
Реакции
-7
H1GH,
Код:
#include <amxmodx>

new Float:Timeout = 5.0, DemoName[32] = "Demo";

public plugin_init() {
    register_plugin("Demo Recorder", "2.4.0", "F@nt0M");

    new pcvar;
    pcvar = create_cvar(
        .name = "amx_demo_timeout",
        .string = "5.0",
        .has_min = true,
        .min_val = 0.0
    );
    bind_pcvar_float(pcvar, Timeout);

    pcvar = create_cvar(
        .name = "amx_demo_format",
        .string = "Demo-%mapname%"
    );
    hook_cvar_change(pcvar, "HookChangeFormat");
}

public plugin_cfg() {
    Timeout = get_cvar_float("amx_demo_timeout");
    HookChangeFormat(get_cvar_pointer("amx_demo_format"));
}

public HookChangeFormat(const pcvar) {
    get_pcvar_string(pcvar, DemoName, charsmax(DemoName));

    new map[32];
    get_mapname(map, charsmax(map));
    replace(DemoName, charsmax(DemoName), "%mapname%", map);
}

public client_putinserver(id) {
    if (!is_user_bot(id) && !is_user_hltv(id)) {
        if (Timeout > 0.0) {
            set_task(Timeout, "TaskRecord", id);
        } else {
            TaskRecord(id);
        }
    }
}

public client_disconnected(id) {
    remove_task(id)
}

public TaskRecord(id) {
    if (is_user_connected(id)) {
        client_cmd(id, "stop;wait;wait;record ^"%s^"", DemoName);
        set_task(5.0, "TaskShowMessage", id);
    }
}
 
Сообщения
1,175
Реакции
2,144
Помог
57 раз(а)
poduna, H1GH,
Код:
- set_task(5.0, "TaskShowMessage", id);
Ещё это надо убрать, а то ошибки повалят
 
Сообщения
162
Реакции
4
Помог
3 раз(а)
name-%date%-%time%-%mapname% такой формат записи будет верным?или доступен только %mapname%?
 
Сообщения
2,491
Реакции
2,790
Помог
61 раз(а)
Dmitriy Korolev, доступен только mapname. Время и дату убрано в одном из обновлений
 

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

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