Как создать дефматчНет
ничего проще. Открываем Pawno и нажимаем New. Вот он, Ваш первый
скрипт. Чтобы запустить его, надо сначала его сохранить (большинство
людей сохраняют в директорию "/samp/gamemodes/src/", но будет проще
(для локального тестирования) сохранить его в "/samp/gamemodes/").
Затем кликните по кнопке с изображением синей стрелочки. Это действие
компилирует Ваш файл .pwn в файл .amx, который появится в том же
каталоге, однако чтобы запустить его в игре, этот файл должен лежать в
"/samp/gamemodes/" (теперь понятно, зачем было сохранять Ваш скрипт в
этом каталоге - теперь не придется ничего никуда переносить в ручную,
все уже на своих местах после компиляции). Теперь, чтобы опробовать
свой новый мод, Вы должны настроить локальный сервер и сменить игровой
режим (наберите "changemode " в окне сервера).
Если все прошло
удачно, когда подключитесь к своему серверу через клиент sa-mp, в игре
Вы окажетесь снаружи казино в Las Venturas. К сожалению Вы не сможете
выбрать себе персонажа, так как на данный момент доступен только один,
но это можно будет легко исправить в будущем. Кроме того это не очень
уж и интересный ДМ – из оружия у Вас только кулаки а вокруг ни души. Но
это локальный сервер и по поводу второй проблемы на данный момент
ничего нельзя поделать.
Следующим шагом, который Вы скорее всего
захотите сделать, будет добавление в игровой режим оружия
(контролируется на основе «каждому классу свое»). Каждый игрок,
которого Вы выберете в начале игры (или позже в случае замены) будет
принимать значение "класса". У классов может быть одинаковое оружие,
или у всех разное, или комбинация. Вы назначаете оружие для каждого
класса отдельно. Поэтому, чтобы дать всем классам одинаковое оружие,
Вам просто нужно скопировать информацию об оружии и добавить ее к
описанию каждого из существующих в Вашем игровом режиме классов. Это
действие обеспечит сбалансированную игру, хотя играть будет не так
интересно, если все будут бегать с одинаковым оружием. Однако выбор
остается за Вами. В редакторе найдите следующую строку:
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
Это описание класса, параметры в том же порядке: AddPlayerClass(Player model, X, Y, Z, A, Weapon 0, Ammo 0, Weapon 1, Ammo 1, Weapon 2, Ammo 2);
Модель
персонажа можно взять из файла "peds.ide". "X", "Y" и "Z" – это
координаты места появления игрока в игре, после выбора персонажа. "A" –
это угол, под которым игрок будет развернут (направление камеры). Есть
только одна точка появления для каждого класса, однако это можно обойти
с помощью других средств, которые будут рассмотрены позже. Номера
оружия можно узнать здесь. А цифры рядом с ammo – это точное количество
патронов к каждому оружию, которым будет располагать игрок (у оружия
ближнего боя количество патронов всегда 0).
Теперь скопируйте эту строку: AddPlayerClass(102, 1958.3783, 1343.1572, 15.3746, 269.1425, 5, 0, 22, 100, 32, 50);
И
поместите ее под той, что Вы нашли в Вашем скрипте. Теперь в игре у Вас
будет выбор между CJ (без оружия) и Balla (с бейсбольной битой,
пистолетом и Tec9). Если хотите, можете сами дать оружие для CJ или
добавить больше других классов с другим оружием.
Примечание:
некоторое оружие, которое перечислено на странице по ссылке выше, рядом
с которым есть пометка "(crashes if you try to fire)" или "(Unusable)"
не работает в данной версии SA-MP. В список оружия, которое нельзя
использовать, входят и гранаты, однако эта досадность будет исправлена
в будущем.
Узнаём координаты, углы и ID моделей
Вам,
возможно, захочется изменить координаты появления игроков, чтобы они
все не появлялись в одном и том же месте. Если оставить как есть, то ДМ
выйдет не самый интересный, а так же это идеальная возможность для
кемперства. В этом деле нам поможет Режим Отладки. Запустите
"samp_debug.exe" в основном каталоге с игрой и когда бы Вам ни
потребовалось, напишите "/save" прямо в игре (для этого нажмите "t" или
тильду, чтобы вызвать строку чата). Это действие сохранит Ваше текущее
положение в игре (в координатах), угол и ID игрока в файл
"savedpositions.txt" в основном каталоге игры SA. Чтобы изменить
персонажа в Режиме Отладки нажимайте F11 и F12, переключаясь по кругу
между доступными в данном моде моделями.
Знакомство с функциями и callbacks
Прежде,
чем мы продолжим, Вы должны узнать, что такое callbacks, или
callback`и. Это – массивы кода, внутри Вашего игрового режима,
представляющие из себя нечто похожее на следующее:
public OnPlayerDisconnect(playerid) { printf("OnPlayerDisconnect(%d)", playerid); return 1; } Это
- OnPlayerDisconnect callback, который означает, что эта секция кода
будет запускаться при отключении игрока от сервера. Если Вы захотите,
чтобы появлялось большое сообщение о том, что тот или иной игрок
покидает сервер, то Вы добавляете для этого код именно в этот массив.
Все callback`и, которые использует игра (кроме 2, они используются в
filterscripts, а не в gamemodes. О них мы рассказывать не будем),
находятся в Вашем файле. Вы не сможете сделать другие. Большинство из
них появляется так же, как и та, что выше. Но некоторые из них
("OnPlayerCommandText", "OnPlayerRequestClass", "OnGameModeInit" и
"main" (который является не совсем callback`ом и нигде больше не
фигурирует, кроме как на титульном экране вашего игрового режима))
призваны заставлять игровой режим работать или показать игрокам, что
нужно делать. Вы так же можете использовать и другие, похожие блоки (на
те, о которых ниже), которые выглядят так же, но являются вызываемыми
функциями. Они должны быть вызваны Вами самим. Вот функция "IMadeThis"
(обратите внимание на полное отсутствие пробелов).
public IMadeThis() { // Это однострочный комментарий, он будет проигнорирован
/* Это многострочный комментарий */
print("This will be printed to the server window"); return 0; } Вы,
должно быть, обратили внимание на небольшое описание комментариев. Все,
что находится в строке за "//" будет игнорироваться. То же будет
происходить и с текстом между "/*" и "*/". Так как функция не
вызывается игрой, мы должны вызвать ее сами с помощью callback, это
смертельно просто, совсем так же, как вы вызываете большинство команд в
своем коде. Итак, если вы добавите строку:
IMadeThis(); В Ваш OnPlayerDisconnect callback (она должно находиться между "{" и "}", а так же перед "return 1;") она
должна запускаться как функция и печатать сообщение в окне сервера,
когда Вы покидаете сервер во время игры (помните, что другие вещи,
описанные там, будут игнорироваться). Мы не хотели, чтобы что-либо
печаталось в окне сервера и все "print" и "printf" функции, что были в
файле, удалены скриптером. Только строки, заключенные между фигурными
скобками находятся в функции/callback`е (функция относится к
callback`ам так же, как будто они - специальный случай функции), строка
выше - имя функции. "public" подразумевает, что функция может быть
выполнена любым другим кусочком кода, это в основном означает, что ваш
код может быть выполнен, когда Вы вызываете функцию по имени. Мы не
волнуемся о частных функциях, поскольку они вообще не используются в
SA-MP. Скобки после имени функции включают список параметров, мы не
охватили их все, но Вы можете увидеть пример их использования в
некоторых из callback`ов в вашем чистом скрипте. Отметим, что эти
параметры автоматически передаются, когда игра вызывает функцию. Если
мы используем сторонние функции (то есть не callback`и), и мы хотим
использовать некоторые параметры, мы должны будем передать их
непосредственно. Одна крошечная вещь, которая должна быть упомянута, -
то, что все строки, кроме строк с фигурными скобками (и даже они при
определенных обстоятельствах, но они будут охвачены позже), и строки
непосредственно перед открытой скобкой (фигурные скобки могут быть в
конце той строки или, как показано здесь, на новой строке), требуют
постановки в своем конце точки с запятой, чтобы обозначить конец
процесса.
Хотите, что бы ваша свадьба прошла на ура? Ведущий на свадьбу сможет все это устроить. Подробности на сайте www.f-b-r.net
|