Экономим время — тестирование и проверка плагинов

Сообщения
67
Реакции
85
Приветствую, уважаемые участники форума dev-cs.ru Хочу поделится своим опытом с теми, кто часто занимается проверкой/тестированием/отладкой плагинов. Цель этой статьи — сохранить самый ценный ресурс — Ваше Время.

Все мы учимся на своих ошибках и приобретаем бесценный опыт. Оглядываясь назад, я могу сказать, что потратил довольно много времени на тестирование многих мелочей, когда можно было бы использовать это время с большой пользой. Здесь я опишу многие приёмы, которые пришли ко мне с опытом и позволили значительно сократить время на проверку плагинов. Статья может быть полезна как тем, кто занимается созданием плагинов, так и просто владельцам серверов, предпочитающим тестировать плагины перед установкой на свой сервер.

По ходу статьи постоянно идут отсылки на приложения (выделены оранжевым).
Приложения прикреплены в виде архиве, внизу первого сообщения темы.
Или их можно загрузить здесь: https://drive.google.com/file/d/1Cplk4hnnj0RGGkiNEtW3jjdlAH_FrM5m/view
Помимо приложений, архив по ссылке выше включает в себя версию статьи в формате PDF.

Перед началом уточню, что большинство тестов я проводил с ботами при отключенном интернете. Адресом сервера был 192.168.0.1:27016
Часто бывает нужным быстро сделать рестарт. И я написал для себя простой плагин rr.amxx для тестового сервера – введя в консоль команду rr происходит рестарт раундов на сервере.

Смотрите приложение 1: rr.sma или код ниже
C-like:
#include <amxmodx>

public plugin_init()
{
    register_plugin("RESTART [TEST]", "1.0", "Leo_[BH]")

    register_concmd("rr", "restart")
}

public restart()
{
    server_cmd("sv_restart 1")
}

Альтернатива: бинд amx_cvar sv_restart 1 на любую клавишу, например,
bind p "amx_cvar sv_restart 1"

Но я уже на автомате могу набрать комбинацию клавиш ~ rr Enter ~, по этому пользуюсь первым вариантом.
Чтобы наступил следующий раунд, самый просто способ это просто убить всех игроков. kk.amx – используются консольные команды qq или kk или bot_kill (последнее, конечно, не обязательно :] )

Смотрите приложение 2: kk.sma или код ниже
C-like:
#include <amxmodx>

public plugin_init()
{
    register_plugin("KILL ALL [TEST]", "1.0", "Leo_[BH]")

    register_concmd("qq", "KillAll")
    register_concmd("kk", "KillAll")
//    register_concmd("bot_kill", "KillAll")
}

public KillAll()
{
    for(new i = 1; i < 33; i++)
    {
        if(is_user_alive(i)) user_kill(i)
    }
}

Дополнительно:можете забиндить на клавишу, к примеру:
bind x kk

Альтернативный вариант: написать плагин для окончания раунда по такой-же или иной команде.
Настроенный плагин team_join позволит не тратить время на такую мелочь как выбор команды и скина игрока.
Оригинальный плагин: https://forums.alliedmods.net/showthread.php?t=69819

Настройки:
tjm_join_team 4
tjm_switch_team 0
tjm_class_t 5
tjm_class_ct 5
tjm_block_change 0

Рекомедую изменить настройки в самом исходном коде (изменить квары по умолчанию).

Еще из-за этого плагина боты помирают после подключения к игре, используйте модифицированную мною версию этого плагина (готовое решение, настройки уже выставлены, ботов будем игнорировать):

Смотрите приложение 3: team_join.sma
<moddir>\resource\GameMenu.res можно отредактировать, вставив туда пункт быстрого подключения к любимому серверу... или тестовому серверу, в нашем случае.

Смотрите приложение 4: gamemenu

Как результат, можно подключаться к серверу быстрее, не открывая диалогового окна Find Servers. А также быстро делать переподключения (альтернатива: reconnect).
Делаем автоконнект к серверу, пару вариантов:

I. Создать файл конфигурации autoexec.cfg в директории мода.
Наполнить содержимым: Connect 192.168.0.1:27016

II. Установить параметры запуска игры:
+Connect 192.168.0.1:27016

Альтернативным вариантом могу назвать возможность запуска сервера не через hlds.exe, а с помощью клиенто-сервера (просто на клиенте установить metamod, amxmodx и запускать как новую игру)
Приложенный мною admin_nolog.amxx – то же, что и admin.amxx с amxmodx 1.8.2, только без функции логирования администраторов, входящих на сервер. Зачем? Функцией log_amx я часто пользуюсь для записи отладочной информации плагинов, и желаю чтобы ничего лишнего в журналах (логах) не было. На локальном тестовом сервере ведь все равно кроме вас никого с админов не будет.

Смотрите приложение 6: admin_nolog.sma

P.S. - я просто закомментировал все строки log_amx в плагине admin.sma
Если вы используете amxmodx новой версии, можете сделать то же самое.

P.S.2 – Надеюсь, вы внимательны и не забудете заменить в amxmodx/configs/plugins.ini строку admin.amxx на admin_nolog.amxx
Один из простейших, но в то же время полезнейших плагинов, которые я когда-либо делал. Загрузили новую карту на сервер, а прописывать её в maps.ini благодаря больше плагину не нужно.
Смотрите приложение 7: mapslist_generator.sma или загрузите плагин отсюда

Описание плагина: Плагин считывает все файлы c расширением .bsp в директории maps и вставляет их названия в текстовый файл карт сервера, то есть в maps.ini | Это снимает с вас задачу ручной прописи названия каждой карты в maps.ini | Как результат, установка новых карт на ваш сервер станет быстрее и проще.
mp_freezetime 0
mp_startmoney 16000

Это не требует объяснений, но все-равно напомню, что для тест сервера есть смысл убрать freeze time вовсе, а стартовое количество денег увеличить до максимума (в большинстве случаев). В остальном руководитесь правилом: лучше настроить один раз server.cfg, чем постоянно менять переменные.

P.S. - на ReGameDll настройка ведется в файле game.cfg, а не server.cfg
Смысл плагина - показать вам такие данные как ваш ник, ip, steamid и права доступа сразу после входа на сервер. Главное здесь, права доступа. Ведь иногда требуется проверить кое-что с правами админа или без них. Плагин напомнит вам,не забыли ли вы отключить себе привилегии для специальной проверки, а потом снова их включить. Чтобы вы не теряли драгоценные минуты, пытаясь понять, а «почему же оно не работает?».

Смотрите приложение 9: status_me.sma

Альтернатива: консольная команда, бинд команды amx_who
Это уже классика тестов в играх. Напишите себе плагин на бессмертие, неуязвимость или огромное количество ХП. Поунижайте ботов XD

Альтернатива: sv_cheats 1
Подберите одну или несколько карт, которые отлично бы подошли для тестов.
Мне идеально подошла карта aim_2stories
Прозрачные стены позволяют не напрягаться на сражения с ботами, а компактность карты позволяет проводить тесты быстро
Конечно, если вам нужно тестировать что-то с бомбой или заложниками, вы будете использовать другую карту
Я уже научился чуть ли на автомате вводить такие комбинации клавиш, как:
~ qq ► ~
~ rr ► ~
~ q ↑ ►

Подробнее:
~ qq ► ~
тильда qq Enter тильда — убить всех

~ rr ► ~
тильда rr Enter тильда — рестарт раунда

~ q ↑ ►
тильда q стрелка_вверх Enter — выбор команды quit в консоле и выход с игры

Знаете, а ведь комбинация ~ q ↑ ► быстрее чем навести мышью на «Quit» в меню…

Но ускорить такие мелочи можно еще больше. Можно создать в игровом меню «быстрые команды». Можно сделать бинды, дабы нажатий всего одной клавиши исполнять то или иное действие. Может у вас многокнопочная мышь, и это станет еще проще. Идей по автоматизации исполнения однородный действий довольно много, можете делиться своими.
Компиляция плагинов по одному на горячую клавишу через NotePad++ прямо в директорию plugins тестового сервера банально сэкономят вам время на «вырезать/вставить». Как настроить NotePad++ на быстрое компилирование плагинов, описано в статье:

https://c-s.net.ua/forum/topic68457.html
http://amx-x.ru/viewtopic.php?f=9&t=11916

Этот подход очень хорош, когда работаете с плагинами по одному. Но имейте ввиду, что когда вам нужно скомпилировать сразу большое количество плагинов, лучше их закинуть у scripting и запустить compile.exe
Everything — наше всё.
Leo_[BH]

Это волшебная программа. Не могу передать словами, сколько времени она мне сэкономила и продолжает экономить каждый день. Она у меня на горячую клавишу Win+1 стоит. Это не просто так. Моё личное мнение — это самая полезная программа в мире для работы на ПК.

Everything – поисковый движок, который индексирует все файлы на накопителях т позволяет производить "живой поиск" по всем вашим файлам. Забудьте о такой схеме доступа к файлу, как [Мой компьютер — Диск X – выбор директории — выбор субдиректории]. Вы знаете имя файла. Вы владеете навыком печати на клавиатуре. Программа предоставит вам всё за мгновение. После знакомства в программой, я не представляю возможным работу за компьютером без Everything. Здесь я говорю о работе за ПК вообще, выходя далеко за границы этой статьи.

Загрузить программу Everything бесплатно с официального сайта разработчика: https://www.voidtools.com/
Потратив много времени на тестирование каждой мелочи с мимимальным толком (особенно много я занимался сборками зомби-модов), я понял, что с таким подходом моя эффективность крайне низка. По этому хочу посоветовать не повторять моих ошибок, а организовывать для себя список, куда записывать «Всё, что нужно проверить» в порядке нумерации. Это можно делать на бумаге, или в электронном виде — на ваше усмотрение. Советую проводить только глобальные тесты, когда накопился солидный список того, что требуется протестировать.

Этот подход стоить применять к разработке чего-то крупного, например, сборок или больших модов.
В конце концов, можно передать ответственность за проверку плагинов другим людям, которые заинтересованы в этом. Но это больше подходит для крупных плагинов и модов. Главное: составляйте чёткий и обширный список всего того, что нужно проверить. Как это организовать, уже думайте сами.
  • Есть такой интересный плагин как Potti - a controllable fakeplayer - контролируемые фейковые игроки, вроде ботов, только их можно заставить повторять действия за вами
  • Если нужно запустить несколько окон клиента с под Windows можно использовать билд 4554 нон-стим с модифицированным hl.exe или использовать SteamChangerByOstrogAndKotik
  • Используйте xFakePlayers для удобного тестирование на ботах
Ну, надеюсь вы умеете пользоваться ботами, командами bot_stop, bot_zombie, bot_knives_only и т. п. Знаете, как включать режим отладки плагинов (debug) и зачем он нужен. Знаете, что RegisterHam на ботов просто так не действовал до amxmodx 1.9 (например, можно использовать cs_ham_bots_api, или лучше функционал reapi). Умеете запускать rehlds-сервер с параметром -bots и знаете за что отвечает liblist.gam

В целом, я поделился своим опытом, и не против увидеть в комментариях насколько полезной для вас была эта статья, а также практические советы, которыми можно расширить эту статью.
Цените своё время.
С уважением, Leo_[BH].
 

Вложения

Последнее редактирование:

ssx

Сообщения
270
Реакции
71
Ещё частенько нужно в несколько окон запустить кс. Для этих целей с под винды юзаю 4554 нон-стим билд с модифицированным hl.exe.
 
Сообщения
658
Реакции
230
Помог
11 раз(а)
ssx, для несколько окон достаточно запустить кс с SteamChangerByOstrogAndKotik. позволяет хоть 20 запустить
 
Сообщения
1,668
Реакции
1,495
Помог
24 раз(а)
В один-то собрать никак? Как будто бы это такое удовольствие прописывать плагины при тестах.
 
Сообщения
2,720
Реакции
2,997
Помог
60 раз(а)
Плагин считывает все файлы в разрешении .bsp
Наверное с расширением.
Настроенный плагин team_join позволит не тратить время на такую мелочь как выбор команды и скина игрока.
ReGameDLL это делает кварами.
. Настройка server.cfg под тест-сервер mp_freezetime 0
mp_startmoney 16000
CVar'ы от gamedll прописываются в game.cfg
Напишите себе плагин на бессмертие, неуязвимость или огромное количество ХП.
А можно и упомянуть о sv_cheats 1
Компиляция плагинов по одному на горячую клавишу через NotePad++
У нас так же есть статья для Notepad++ & Visual Studio Code. Кому как, но порой и скрипт поправить на компиляцию "проекта" необходимо.
Знаете, что RegisterHam на ботов просто так не действует (например, можно использовать cs_ham_bots_api
А еще лучше читать документацию к актуальному релизу как минимум. Давно уже сделали поддержку ботов в ham.

Говоришь о экономии времени... И ниразу не упомянул xFakePlayers от ZeaL.
:dntknw:
20 Мар 2019
Я по такому заголовку ожидал увидеть нечто большее.
Что-то подобное написанию юнит-тестов.
На деле же плагины, зачем-то заменяющие бинды в клиенте, костыли для amxx 1.8.2 и ссылки, по которым можно найти магазин плагинов авторских.

Как итог: для новичков - передача опыта, нагромождение костылей.
Для остальных пользы не несёт, или мне одному так показалось.

Быть может и не хватает такого рода комплексных статей, но сдаётся мне координально по другому должны выглядеть.
21 Мар 2019
На сколько понимаю, не хватает в сообществе объяснения настройки переменных окружения для системы (допустим, путь до компилятора пакета AMXX, путь до инклудов reapi).

Никто так и не объяснил, как писать проект на нормальном уровне с использованием GIT, приведением к автоматизации.
 
Сообщения
67
Реакции
85
wopox1337, мнгогое что я описал здесь, писал по памяти, чем пользовался давно, по этому здесь все по большему счёту с актуальностью на amxmodx 1.8.2 еще до rehlds.

Как итог: для новичков - передача опыта, нагромождение костылей.
Для остальных пользы не несёт, или мне одному так показалось.
В целом так и есть, статья больше полезна для новичков. Ты опытный в этом, тебе особо ничего нового здесь не открылось.

Быть может и не хватает такого рода комплексных статей, но сдаётся мне координально по другому должны выглядеть. На сколько понимаю, не хватает в сообществе объяснения настройки переменных окружения для системы (допустим, путь до компилятора пакета AMXX, путь до инклудов reapi). Никто так и не объяснил, как писать проект на нормальном уровне с использованием GIT, приведением к автоматизации.
А с этим согласен, мало полезных и объёмных обучающих материалов по этой теме. Во многом приходится разбираться самому. Были бы статьи, прогресс обучения бы значительно быстрее. Так берите инициативу в свои руки, создавайте обучающий материал. Создавайте лучше меня.
21 Мар 2019
В один-то собрать никак? Как будто бы это такое удовольствие прописывать плагины при тестах.
В случае, когда нужно провести проверки на рабочем сервере (не тестовом) я использую этот plugins-test.ini
Закидываю его в amxmodx/configs, рядом с plugins.ini
После проверки, удаляю файл plugins-test.ini с сервера и делаю его перегазгузку.

В директории amxmodx/configs все ini-файлы, имена которых начинаются на plugins- являются списком подгружаемых плагинов
(можете вспомнить plugins-zplague.ini - сначала подгружаются из списка plugins.ini, потом plugins-zplague.ini - так вот это фишка самого amxmodx, а не плагинов или модов).
Этим (plugins-test.ini) я пользуюсь часто на финальных этапах по работе сборки сервера, устанавливая это клиентам на время.
rmap.amxx
rr.amxx
kk.amxx
disable_motd.amxx
team_join.amxx
status_me.amxx
; test_origin.amxx
hidefireinthehole.amxx
; prokreedz_hook.amxx
В архиве есть еще один плагин, который я не описывал ранее: rmap. Смысл простой, по команде rmap в консоль меняется карта на de_dust2. Менять карту ведь на сервере часто приходится, после каждого внесенного изменения.
Плагин mapslist_generator.amxx я уже устанавливаю всем своим клиентам, и прописываю его в главный plugins.ini
22 Мар 2019
  • Potti - a controllable fakeplayer (контролируемые фейковые игроки, вроде ботов, только их можно заставить повторять действия за вами)
  • Упоминание xFakePlayers (благодарность wopox1337)
  • Информация о возможности запуска нескольких клиентов кс одновременно (благодарность ssx и благодарность Limboo)
 

Вложения

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

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