Русское сообщество по скриптингу

DemoRecord (совет)  [Решено]

Все вопросы по работе и настройке AMXX и его плагинов.

Модератор: liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только вопросов по AMX Mod X и его плагинам.

DemoRecord (совет)

Сообщение Good Luck » 08 апр 2017, 20:08

Всем привет.

Хочу хоть немного научиться разбираться в написание плагинов и вот сделал "Demo Recording".

Плагин вроде бы работает, ошибок никаких нету.

Опытные ребята, подскажите все ли я верно сделал? Просто если плагин работает - это ещё не значит, что всё хорошо.

Если что-то нужно добавить, то подскажите, пожалуйста.

Главный вопрос нужна ли проверка на коннект и игнорирование ботов и hltv?

Код: Выделить всё
#include <amxmodx>

#define DEMONAME "bbgg"

public plugin_init()
{
    register_plugin("Demo Recording", "0,1", "asd");
    
    register_clcmd
("joinclass", "DemoTask");
    register_clcmd("menuselect", "DemoTask");
}

public DemoTask(id)
{
    set_task(10.0, "DemoRec", id);
}

public DemoRec(id)
{
    
    client_cmd
(id, "stop; record ^"%s^"", DEMONAME);    


Добавлено спустя 2 минуты 30 секунд:
В консоле вот, что написало, после начала записи демо:

Код: Выделить всё

Not recording a demo.
recording to bbgg.dem.
Completed demo
recording to bbgg.dem.
Аватара пользователя
Good Luck
 
Сообщения: 167
Зарегистрирован: 04 ноя 2011, 21:58
Откуда: Москва
Благодарил (а): 47 раз.
Поблагодарили: 2 раз.
Языки программирования: Counter-Strike 1.6

Re: DemoRecord (совет)

Сообщение Subb98 » 08 апр 2017, 20:22

Код: Выделить всё
#define DEMONAME "bbgg" 

>>

Код: Выделить всё
new const DEMONAME[] = "bbgg"

Обсуждение тут: Вы должны зарегистрироваться, чтобы видеть ссылки.

Достаточно будет зарегистрировать joinclass:

Код: Выделить всё
register_clcmd("joinclass""DemoTask"); 

Нужно добавить проверку на коннект:

Код: Выделить всё
public DemoRec(id)
{    
    if(
is_user_connected(id))
    {
        
client_cmd(id"stop; record ^"%s^""DEMONAME);
    }

И удаление задачи при дисконнекте:

Код: Выделить всё
public client_disconnect(id)
{
    
remove_task(id);
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: DemoRecord (совет)

Сообщение Good Luck » 08 апр 2017, 20:29

Subb98 писал(а):И удаление задачи при дисконнекте:

Код: Выделить всё
public client_disconnect(id)
{
    remove_task(id);

А если я не буду использовать set_task, а решу сразу демо писать, то значит и не нужно будет прописывать remove_task.
Верно?
Аватара пользователя
Good Luck
 
Сообщения: 167
Зарегистрирован: 04 ноя 2011, 21:58
Откуда: Москва
Благодарил (а): 47 раз.
Поблагодарили: 2 раз.
Языки программирования: Counter-Strike 1.6

Re: DemoRecord (совет)

Сообщение Subb98 » 08 апр 2017, 20:30

Good Luck писал(а):А если я не буду использовать set_task, а решу сразу демо писать, то значит и не нужно будет прописывать remove_task.
Верно?

Да.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: DemoRecord (совет)

Сообщение Good Luck » 08 апр 2017, 20:35

А здесь не нужно добавлять return PLUGIN_HANDLED?

Код: Выделить всё
public DemoRec(id)
{    
    if(
is_user_connected(id))
    {
        
client_cmd(id"stop; record ^"%s^""DEMONAME);
    }
}  


Вот так:

Код: Выделить всё
public DemoRec(id)
{    
    if(
is_user_connected(id))
    {
        
client_cmd(id"stop; record ^"%s^""DEMONAME);
    }
   return 
PLUGIN_HANDLED
}  
Аватара пользователя
Good Luck
 
Сообщения: 167
Зарегистрирован: 04 ноя 2011, 21:58
Откуда: Москва
Благодарил (а): 47 раз.
Поблагодарили: 2 раз.
Языки программирования: Counter-Strike 1.6

Re: DemoRecord (совет)

Сообщение Subb98 » 08 апр 2017, 20:41

Good Luck, нет.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: DemoRecord (совет)

Сообщение Good Luck » 08 апр 2017, 21:06

"Обсуждение тут: Холивар: #define, const и new const" - почитал! Большое спасибо!

Добавлено спустя 25 минут 9 секунд:
Тему открыл снова. Проблема такая.

Делаю, как сказал Вы должны зарегистрироваться, чтобы видеть ссылки.:

Достаточно будет зарегистрировать joinclass:

Код: Выделить всё
register_clcmd("joinclass""DemoTask"); 

И демо не работает (не записывается).

Вставлю 2 команды:
[
code=php]register_clcmd("joinclass", "StartDemo");
register_clcmd("menuselect", "StartDemo");[/code]
И демо сразу записывается, но в консоле появляются такие записи:

Код: Выделить всё
Not recording a demo.
recording to bbgg.dem.
Completed demo
recording to bbgg.dem.

Получается, что демо начало записываться. Потом остановилось. И потом снова началось записываться.

Быть может проще вызывать записать демо через set_task и putinserver, нежели по выбору команды?
Аватара пользователя
Good Luck
 
Сообщения: 167
Зарегистрирован: 04 ноя 2011, 21:58
Откуда: Москва
Благодарил (а): 47 раз.
Поблагодарили: 2 раз.
Языки программирования: Counter-Strike 1.6

Re: DemoRecord (совет)

Сообщение Subb98 » 08 апр 2017, 21:09

Good Luck, очевидно, что необходим set_task.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: DemoRecord (совет)

Сообщение Garey » 08 апр 2017, 21:13

Можно в принципе в первом spawn'е игрока т.к. до этого момента в принципе бессмысленно записывать часть игры.
Аватара пользователя
Garey
 
Сообщения: 85
Зарегистрирован: 24 дек 2010, 03:12
Благодарил (а): 4 раз.
Поблагодарили: 37 раз.

Re: DemoRecord (совет)

Сообщение Good Luck » 08 апр 2017, 21:19

Subb98 писал(а):Good Luck, очевидно, что необходим set_task.

Сделал с таском, но что-то все равно не работает...

Код: Выделить всё
#include <amxmodx>

new const ND[] = "bbgg";

public plugin_init()
{
    register_plugin("Demo Recording", "0.1", "asd");
    
    register_clcmd
("joinclass", "DemoTask");
}

public DemoTask(id)
{
    set_task(10.0, "DemoRec", id);
}

public DemoRec(id)
{
    
    if
(is_user_connected(id))
    {
        client_cmd(id, "stop; record ^"%s^"", ND);
    }
}
 

public client_disconnected
(id)
{
    remove_task(id);

Или вы имели ввиду не обойтись через task, который через "putinserver"?
Аватара пользователя
Good Luck
 
Сообщения: 167
Зарегистрирован: 04 ноя 2011, 21:58
Откуда: Москва
Благодарил (а): 47 раз.
Поблагодарили: 2 раз.
Языки программирования: Counter-Strike 1.6

След.

Вернуться в Вопросы по AMXX и его плагинам

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7