[SourcePawn] Советы для новичков и профи (содержание)

Dragokas

Меценат
Сообщения
164
Реакции
137
Автор: SilverShot
Перевод и техническая редакция: Dragokas
Дополнения:
разработчики и сообщество SourceMod
Источник: AM
Перепубликация перевода на другие ресурсы запрещена!
Пожалуйста, внесите свой вклад в наполнение этой темы, советуя изменения, ссылки и другую информацию.

Ремарка от переводчика:
На перевод меня сподвигло желание донести до русскоязычной аудитории эту замечательную статью от SilverShot.
Автор имеет 10-летний опыт скриптинга для игр, в основном серии Left 4 Dead, и более 100 опубликованных работ.

К сожалению, маловероятно, что на AM статья будет обновляться, т.к. автор объявил о своём уходе со сцены.
Вероятно, я также перестану заниматься SourcePawn, т.к. мой сервер L4D1, некогда попадавший в TOP-1 мира по версии GameTracker, сейчас переживает не лучшие времена со значительным оттоком игроков, впрочем как и у всех, так что это может быть моим прощальным подарком сообществу. Я обещаю поддерживать тему какое-то время.
Будет круто добавить сюда лучшие практики из CS:GO и др. популярных игр. Давайте создадим отличную базу знаний общими усилиями!

Примечание: в статье есть множество отсылок на англоязычные источники. Их перевод мною не планируется. Однако, если вы нашли русскоязычный аналог, просьба сообщить в ЛС и я заменю ссылку.

Содержание:
Дополнения:​



Терминология:
Инфа от переводчика:​
Чтобы рядовой читатель не сбился среди множества новых понятий, я решил сделать вводную о взаимозаменяемости терминов и сокращений, которые используются далее в переводе.​
Напишите в комментариях, если вам требуются пояснения для других терминов.​
ТерминПеревод (аналоги)Описание
Scriptскрипт, скриптинг, кодингфайл с исходным кодом и сам процесс его написания
Cvar, ConVar (Console Variable)квар, переменная консолиСуществуют как собственные квары игры, так и создаваемые через SourceMod.
Handleхендл, дескрипторчисло, указывающее на системный объект внутри SM, через которое можно им манипулировать. Большинство других видов объектов - это производные от Handle (например, ConVar)
Entityэнтитя, сущностьвнутри-игровой объект, которым можно манипулировать через его индекс. Пример - клиент (игрок, CTerrorPlayer).
Propпроп. Применяется в 2 значениях:
- как свойство сущности (пример, - цвет ("color") - это имя свойства; Prop_Send / Prop_Data - типы свойств)
- как один из классов сущности (например, prop_dynamic). От класса зависит поведение сущности, набор доступных в ней свойств и пр.
Particleпартикль, частицаПример - огонь.
UserMessagesпользовательские сообщенияособый тип сообщений передаваемых по сети клиенту. Пример - сообщения чата
TempEntsвременные сущностипохожие по принципу с UserMessages, но предназначенные для графической составляющей, например, следы от пуль. Чем-то схожи с партиклями.
Spawnспаун, спавнитьсяпоявляться, создаваться
Patchпатчизменение в памяти процесса
Hookхук, хукатьставить прослушку на событие с дальнейшей возможностью (или без) его изменения
Detourдетур, обход, перехваттоже самое, только для функций игры. В отличие от хука, не предусмотрен игрой, и обычно ведёт к выполнению вашего кода вместо функции игры, с возможностью или без её продолжения
Callbackколбек, процедура обратного вызовафункция или процедура в вашем коде, указатель на которую вы передали. Она вызывается каждый раз при наступлении события / срабатывании условия.
Listen Server"слушающий" серверустановленный поверх вашей же игры
Local Dedicated Serverлокальный выделенный серверсервер на вашем ПК, установленный отдельно от файлов игрового клиента
Server Crashкреш, падениесерьезный сбой в функциях игры, ведущий к закрытию (и перезагрузке) сервера. Исходный процесс завершается.
Client Crashтоже самое, но для игрока (игрового клиента). При этом, сервер не обязательно падает.
Nativeнативчитайте далее по теме
Forwardфорвардчитайте далее по теме
ParserПарсеркод, реализующий разбор сложной структуры данных на отдельные компоненты
Init, InitializationИнициализацияначальная стадия, при которой объект получает все необходимые для его первичной работы свойства.
CompilationКомпиляцияпроцесс преобразования исходного кода (например, sp) в исполняемый код (smx) с инструкциями или псевдо-кодом, понятными для процессора либо транслирующей его промежуточной программы.
Validationпроверка, валидация, верификацияопределение объекта как такового, что является действительным, т.е. он существует и доступен для выполнения с ним некоторых действий.


1. Основы SourceMod и документация:
Я хочу подчеркнуть, на сколько сильно вам может помочь изучение большого числа различных плагинов и примеров при обучении языку.​
Используйте find для поиска кваров (cvar, консольных переменных) и команд, введя "find <ключевое слово>" в серверную или клиентскую консоль. Они могут возвращать разные результаты, например, квары специфические только для сервера или клиента.​
Новичкам в скриптинге:
Полезные ресурсы:
  • Scripting API Reference - Список всех функций, доступных в SourceMod.
  • Scripting API Reference - Тёмная тема.

  • SourceMod Development - "Эта категория содержит статьи о разработке расширений (extensions) для SourceMod" (продвинутый уровень)

  • Valve Wiki - Масса отличной информации, начиная от подробностей о сущностях (entities) вплоть до VScripts (CS:GO / L4D2).
    Нажмите на первую ссылку выше и выберите вашу конкретную игру.

  • Сторонние инструменты - например, распаковщики .VPK архивов, .nuc VScript декодеры, декомпиляторы .BSP карт в исходник и его запуск с помощью Hammer Editor - полезен, чтобы узнать, как карта выполняет те или иные действия.
    В CS:GO и L4D2 вам может захотеться воспользоваться плагином VScript File Replacer для декодирования и создания дампа VScripts.

  • Ещё больше сторонних инструментов - Перечень от Dragokas.

  • AlliedMods Cross-Reference - Различные SDK и исходный код AlliedMods для SourceMod и MetaMod.
  • HL2SDK - Для продвинутого исследования работы движка, там вы можете найти исходный код.

  • Plugin List - Поиск по всем плагинам.
Русскоязычные ресурсы:
 
Последнее редактирование:

DENFER

Пишу плагины за два биг тести и картошку фри..
Сообщения
142
Реакции
140
Где же ты был все это время ...
 
Сверху