Сервер и Скрипты
Думаю многие из Вас, в той или иной мере, уже неоднократно встречались со скриптами на разных серверах. И, возможно, у многих даже возникало желание самим написать скрипт или запустить сервер со скриптами.
Итак, что вам в этом нелегком деле может помочь:
- Начальные понятия о программировании (достаточно даже знаний на уровне школьной программы), желательно в Pascal (поскольку скриптовый язык, используемый в Soldat, это на 99% стандартный Pascal);
- Базовые знания английского языка, для самостоятельного чтения инструкций, описаний, примеров, руководств (как обычно, вся техническая документация доступна преимущественно на английском языке);
- Терпение, выдержка, готовность долгие часы разбираться с неработающим кодом.
Часть I: Как добавить скрипт на Ваш сервер.
Подготовка сервера
1) Убедитесь в том, что у Вас есть
2) Извлеките содержимое архива (пример: «С:\Soldat\SoldatServer\»).
3) Откройте файл server.ini и убедитесь в том, что скриптинг разрешен (Scripting=1).
Установка скрипта
В текущей версии движка ScriptCore v2 максимальное количество запущенных скриптов равно 255. Но не стоит этим злоупотреблять, так как большое количество скриптов увеличивает нагрузку на процессор и память серверной машины.
Ниже перечислены шаги по установке новых скриптов на Ваш выделенный сервер (версия 2.6.2 или выше):
1) Скачайте скрипт, который хотите установить.
2) Откройте директорию выделенного сервера и перейдите в папку «Scripts». (пример: «С:\Soldat\SoldatServer\Scripts\»).
Если Вы скачали архив со скриптом в котором находятся только *.pas-файлы и Includes.txt, извлеките содержимое архива в НОВУЮ папку в директорию «Scripts». Дайте ей имя, связанное со скриптом который в ней будет (пример: «..\Scripts\NewScript»).
Если же Вы скачали архив, в котором уже есть подпапка, то просто извлеките его содержимое в директорию «Scripts».
3) Запустите Ваш сервер (soldatserver.exe). В консоли должна будет появится строчка, показывающая, что добавленный скрипт успешно скомпилировался: "Compiling NewScript -> Core.pas..."
4) Вот и всё! Если файла «Includes.txt» нет в подпапке со скриптом, то этот скрипт не будет запускаться севером. Подсказка: чтобы выключить какой-либо скрипт, достаточно переименовать файл «Includes.txt» из подпапки нужного скрипта, например в «_Includes.txt». Для включения скрипта – переименуйте его обратно в «Includes.txt»
Остановить работу сервера в Windows, можно нажав комбинацию клавиш [Ctrl + C] в окне консоли.
О том как скрыть консоль сервера в Windows, немного сказано
Часть II: It's alive, alive!
Ознакомление со скриптингом стоит начать с изучения доступных событий, функций, переменных, констант. Всё это можно найти на сайте у EnEsCe (разработчик выделенного сервера и скриптового ядра Soldat):
Потом можно посмотреть на примеры готовых скриптов на SoldatForums:
Если и после этого желание что-то написать не пропало – смело пробуйте сотворить свой 1й скрипт для Soldat.
Наиболее удобный и почти классический вариант – работа с вводом/выводом текста.
События ввода текстовых сообщений и команд от игроков связаны с вызовом процедур OnPlayerSpeak и OnPlayerCommand/i] соответственно.
Как видно из справки EnEsCe, параметрами передающимися в эти процедуры при их вызове являются:
[i]ID – идентификатор игрока, написавшего текст/команду
Text – само текстовое сообщение или команда
Значит для отслеживания ввода определенного сообщения, Вам нужно проверять содержимое переменной Text в процедуре OnPlayerSpeak.
Вывод текста в консоль игры осуществляется с помощью функции WriteConsole.
Поэтому простейший пример скрипта может выглядеть так:
function OnPlayerSpeak(ID: Byte; Text: string): boolean; |
begin |
if Text = 'hi' then |
WriteConsole(0, 'Hello there!', $EE81FAA1); |
end; |
появится сообщение от сервера ”Hello there!”
$EE81FAA1 - цвет в формате AA RR GG BB (Alpha, Red, Green, Blue)
С этим всё понятно. Можно добавить больше интерактива. В качестве следующего примера рассмотрим такой скрипт:
«Как сделать так, чтобы игроки могли добавлять ботов на сервер сами? Например, зашел игрок, а там пусто. Он пишет +bot и появляется бот, еще +bot - добавляется ещё один бот и т.д. Зашел какой-нить игрок, он пишет команду -bot и бот убирается»
Немножко изменив условие, напишем скрипт, позволяющий любому игроку добавить/удалить бота командами /bot+ и /bot- соответственно.
function OnPlayerCommand(ID: byte; Text: string): boolean;
var i: byte; begin if (Text = '/bot+') and (NumBots < 4) then begin Command('/addbot ' + RandomBot); WriteConsole(0, 'Bot has been added.', $EE81FAA1); end else if Text = '/bot-' then begin for i:= 1 to 32 do if GetPlayerStat(i, 'Human') = False then begin KickPlayer(i); WriteConsole(0, 'Bot has been deleted.', $EE81FAA1); break; end; end; Result := false; end; |
Примечания:
NumBots - внутренняя переменная, содержащая количество ботов на сервере
Command - функция, для отправки команды серверу
RandomBot - функция, возвращающая произвольное имя бота (из доступных на сервере)
32 - максимально допустимое количество игроков на сервере
GetPlayerStat - функция, возвращающая разные характеристики заданного игрока. В нашем случае, узнаем является ли проверяемый игрок человеком (если нет, то это бот и его можно удалять)
Не путайте команды с сообщениями в чате. Для ввода команды, нужно нажимать кнопку «/».
Можно сказать, что с написанием скриптов немного ознакомились. А теперь давайте взглянем на содержимое папки «Scripts», но со стороны разработчика. В ней должна быть подпапка «Default», содержимое которой изменять не нужно! Файлы с расширением *.pas – это файлы скрипта. «Includes.txt» - определяет список файлов, которые будут компилироваться. Откройте «Includes.txt» и обратите внимание, что здесь записано имя каждого из *.pas-файлов. Так же заметьте, что перед «SocketCore.pas» стоят «//» (символы комментария). Это означает, что «SocketCore.pas» не будет включен в список компилируемых файлов.
Что ж, давайте установим скрипт для добавления/удаления ботов. Для начала, создайте новую папку для скрипта в директории «Scripts». Пусть это будет «..\Scripts\Bots». После этого, создайте в ней файлы «Includes.txt» и, собственно, сам файл с кодом «Bots.pas». В него и вставьте приведенный выше код. А в «Includes.txt» впишите строку: Bots.pas. После этого можно запускать сервер и радоваться, что всё работает.
FAQ:
Q: Какой текстовый редактор лучше использовать?
A: Любой, каким вам удобнее пользоваться. Можно и в блокноте писать, можно и в спец. редакторе для кодеров (с поддержкой синтаксиса Pascal, ясное дело), например
Q: Где можно почитать о скриптах и посмотреть на готовые примеры?
A: Вот некоторые ссылки
Q: Почему нужно запускать сначала сервер, а потом клиент?
A: Если Вы используете настройки по-умолчанию (у клиента и у сервера порт 23073) и запустите сначала клиент, а потом сервер, то клиент займет сокет первым и сервер не сможет получить соединение из-за того, что сокет занят. Если Вы используете измененные настройки или запускаете сначала клиент, а потом сервер, то такой проблемы не должно быть.