GTA.ru > Сервер > Cкриптинг в MTA: DeathMath > Первое руководство Добро пожаловать на первое обучающее руководство по MTA скриптингу. С нашим коротким руководством мы попробуем вам показать, как скриптить в LUA используя наши функции, шаг за шагом, использования небольших кодовых фрагментов, объяснения функций и логики использующаяся в коде. Мы будем так же включать обучающее видео с каждым руководством, таким образом, Вы сможете фактически видеть то, что делает весь код. Давайте начнём наше первое обучение: Выбираемые пользователем пункты перемещения. На этой неделе мы будет писать скрипт, позволяющий пользователям создавать их собственные пункты перемещения. Более определённо мы собираемся позволить игрокам создавать целевой маркер, маркер назначения и переместить себя чтобы они могли проверить пункты перемещения на правильность. Обучающее видео: scriptvideo1.wmv - (640x480, 30fps, 5mb) Готовый скрипт: script1.lua MTA скриптинг – полностью базируемый на событиях (events). События (Events) действительно динамические и фактически, Вы можете сделать собственные с помощью ваших скриптов, но в этом примере мы будем использовать уже созданные, из которых MTA использует приблизительно 40. События “вызываются”, когда в игре случаются определённые вещи. Мы можем связать наши собственные функции с любым событием (вызывая функцию, называемую addEventHandler ). Каждое событие может иметь любое число “подсобытий” или ни одного!Мы создадим нашу первую функцию и назовём её Script_onResourceLoad, которую мы установим вызываемой, когда сервер загрузит ресурс (resource) содержащий карту с помощью события onResourceLoad . Мы рассмотрим как MTA "ресурсы" правильно работают в следующем посте.Затем мы создадим новый глобальную кнопку, которая будет включать, и выключать скрипт. Мы вызываем bindKey , чтобы назначить кнопку I к функции "modeIO" мы должны все же создать.Конечно, мы хотим эту кнопку для каждого игрока, который находится в настоящее время на нашем сервере, таким образом, мы устанавливаем маленький цикл:
Заметьте, что теперь мы закончили функцию ключевым словом end .Мы забываем кое-что: вышеупомянутая функция вызывается только один раз (при загрузке карты), таким образом, любые игроки, которые присоединяются, впоследствии будут нуждаться так же в доступной кнопке I . Для этого мы можем использовать событие onPlayerJoin , которое вызывается каждый раз, когда присоединяется игрок:
Наша глобальная кнопка необходима, таким образом, любые другие привязывания, мы будем использовать ниже, и не будет сталкиваться ни с одними из оригинальных средств управления и наоборот (такие как кнопки мыши, для выстрела и прицела), когда включён скрипт. Определение точки перемещения с кнопками, возможно, будет трудно (и для скриптов). И идеально, мы хотели бы использовать курсор мыши. К счастью, MTA имеет в наличие хорошие функции курсора, включая showCursor который мы и будем использовать сейчас.Давайте создадим функцию "modeIO", которую мы упоминали выше:
Теперь мы имеем три функции и доступный курсор мыши, самое простое это назначить каждую функцию на разные кнопки мыши. Это мы и собираемся сделать. MTA имеет событие называемое onPlayerClick , которое позволяет скриптёрам получать XYZ-координаты в точной позиции курсора при клике пользователя. Разумеется, это событие возможно, только если видим курсор.Давайте начнём нашу главную функцию Script_onPlayerClick которую мы привяжем с событием onPlayerClick :
Прежде чем мы это сделаем, вам нужно немного понимать, как работают MTA элементы (идентично "объектам" в других играх). MTA для всего использует элементы. Маркеры, объекты, транспорт, игроки и т.п. - это всё элементы. Это легко, потому что означает, что вы не должны проверять тип элементов каждый раз перед запросом функции. Например: если вы хотите уничтожить или установить позицию маркера, транспорт или какой то объект, просто вызовите destroyElement или setElementPosition .Мы хотим только 2 маркера (для игрока), маркер "teleport" (телепорта) и маркер "destination" (назначения). Благодаря этому скрипт будет оставаться лёгким, обеспечивая достаточно многие функциональные возможности. Чтобы разрешить 2 маркера для игрока, мы будет хранить ID маркера, который мы создаём для каждого игрока, используя setElementData .Если пользователь нажимает левую кнопку мыши, мы создаём маркер названный "teleport" который будет нашим порталом для телепортирования нас. Если пользователь нажимает правую кнопку мыши, мы создаём маркер "destination" который будет предназначаться для портала. Давайте сделаем левую и правую кнопку мыши функциональными:
Мы используем setElementData , чтобы хранить некоторые данные для маркера. Позже вы увидите, что это тривиально, чтобы восстановить владельца и тип маркера.setElementData и его "партнёрская" функция getElementData оба взаимодействуют с элементами сохранения данных которые имеет функция. Эти сохранения действуют как хранилища данных, которые остаются приложенными к элементу. Вы можете поместить значения в это хранилище с кнопками, используя setElementData и позже получить к ним доступ, используя getElementData .Помимо создания маркеров, также полезно иметь функцию перемещения, таким образом, игрок сможет телепортироватся (и сделать маркеры) где он захочет.
Если вы задаетесь вопросом, какое исходное ( source ) слово: это относится к элементу, активировавшее событие, в данном случае игрок. Исходное (source ) слово доступно или все события, в некоторых случаях являются несоответствующими.Маркеры, которые мы только что создали, имеют свои собственные события. Чтобы позволить скрипту знать, что маркер был "поражён" (затронут) игроком, мы может использовать событие onMarkerHit . Исходное (source ) слово будет присвоено маркеру, который запустил событие:
Теперь мы используем данные, которые мы установили в функции Script_onPlayerClick выше, чтобы видеть какой это маркер. Это может быть или или "телепорт" ("teleport") или "назначения" ("destination").Конечно, мы что-то делаем, только если игрок поражает маркер "телепортирования" ("teleport").
Наконец, мы сделаем некоторую чистку для каждого игрока. В конце концов, мы не хотим, чтобы какие то маркеры оставались поблизости после того, как игрок покинул сервер. Как и событие onPlayerJoin , имеется так же событие onPlayerQuit которое вызывается каждый раз когда игрок покидает сервер:
На этом первое мини-руководство подходит к концу, следите за дальнейшими поступлениями на нашем сайте. |
|
Copyright © | наверх | главная | e-mail | ||