Awesome | Дата: Воскресенье, 04.03.2012, 16:32 | Сообщение # 1 |
 Генерал-майор
Группа: Проверенные
Сообщений: 70
Награды: 14
Репутация: 25
Статус: Offline
| В этом уроке я научу вас создавать простые двери, открываемые по команде. Таким же образом вы сможете потом ставить ворота и шлагбаумы. И начну я с фильтр скрипта Ingame Object Editor. (данный скрипт прилагается к учебнику). Почему именно он, когда предлагают много раз MTA Map Editor. Во-первых, это как один из простых способов расставить небольшое количество объектов, если ставить много объектов, на это уйдет больше времени, чем в MTA Map Editor. Во-вторых, это тоже было бы полезно знать. В-третьих, не нужно конвертировать код из map в pwn, все объекты будут в вашем моде вместе с этим фильтр скриптом. Доступ к его опциям имеет только RCON администратор, поэтому вам необходимо будет войти на сервер как RCON администратор. Начнем с создания двери. Войдите на сервер как RCON администратор. Итак, вот место куда мы, например, хотим поставить дверь. Мы можем поставить деревянную дверь с ID = 1491, это дверь, которая открывается когда ее толкаешь, но нам нет смысла сейчас ее ставить, потому что мы делаем закрытую дверь, которую нужно будет открыть по команде. Поставим дверь, например с ID = 1500. Итак, в чате пишем следующую команду /oadd 1500 door. Команда /oadd – добавляет новый объект, через пробел пишется ID объекта и далее имя объекта, любое. Итак, мы создали нашу дверь, но она оказалась в воздухе. Давайте ее опустим. Пишем следующую команду в чат: /omode m_z – эта команда позволит двигать дверь в двух направлениях (вверх или вниз). Дальше садимся на кнопку C и камера переключается на сам объект. Стрелками двигаем дверь вниз к полу. Итак, мы опустили дверь, мы можем снова нажать С, и встать в удобное вам место для обзора объекта и снова сесть. Дальше нам нужно повернуть дверь левее (исходя из рисунка). Пишем туже команду, но уже не m_z а m_xy. Это команда позволит двигать объект во все четыре стороны (вперед, назад, влево и вправо). Таким образом, двигаем дверь в дверной проем. Нам нужно записать куда-нибудь координаты этой двери в положении закрыто. Координаты этой двери находится в scriptfiles/oed/BREAD_OED.txt и выглядеть они будут следующим образом (чтобы не запутаться, после координат написано имя объекта, имеющего эти координаты, его мы не трогаем): Code 1500,371.234283,166.662429,1007.383850,0.000000,0.000000,0.000000,1
Итак, мы записали координаты в безопасное место. А теперь повернем дверь в положение открыто. Чтобы повернуть дверь, мы все также используем команду /o_mode, только теперь вместо m_xy пишем r_z. И поворачиваем дверь в такое положение: Теперь снова записываем те же координаты двери в положении закрыто. В координатах ничего не изменилось, кроме предпоследней цифры. Code 1500,371.234283,166.662429,1007.383850,0.000000,0.000000,93.000000,1
/o_mode r_z – позволяет нам вращать объект таким образом, чтобы дверь открывалась и закрывалась. Есть также r_xy – с помощью, которой уже вращаем дверь в другом направлении. Запомните m_z и m_xy – это перемещение по осям: z и xy, а r_z и r_xy – это вращение по тем же осям. Итак, мы получили координаты закрытой и открытой двери. Теперь мы можем удалить этот объект, т.к. у нас есть его координаты. Удаляем его командой /odel [имя объекта] в данном случае имя объекта – door, значит, пишем /odel door. Удаляем мы его для того, чтобы у нас не получилось 2 копии двери, т.к. одну дверь мы вставим в мод. Прежде чем приступить к делу объясню ниже приведенные цифры. Первая цифра означает ID модели, следующие 3 цифры это координаты положения объекта, далее идут 3 цифры это координаты вращения объекта, последняя цифра это видимость объекта. Code 1500,371.234283,166.662429,1007.383850,0.000000,0.000000,93.000000,1
Итак, приступим к написанию команды. Сначала в начале скрипта мы объявляем глобальную переменную, например door. Затем внутри автовызываемой функции OnGameModeInit – мы присваиваем этой переменной, созданный объект. Code cpd = CreateObject(1500,371.234283,166.662429,1007.383850,0.000000,0.000000,0.000000,300.0);
Видимость мы ставим 300.0, иначе вы будете видеть дверь, только подойдя к ней вплотную. Затем пишем две команды, одну для открытия двери, другую для закрытия: Code if(strcmp("/open", cmdtext, true, 10) == 0) { SetObjectRot(cpd,0.000000,0.000000,93.000000); return 1; } if(strcmp("/close", cmdtext, true, 10) == 0) { SetObjectRot(cpd,0.000000,0.000000,0.000000); return 1; }
В функции мы указывает координаты вращения, т.к. мы будем вращать объект. Недостаток этого скрипта только в том, что дверь открывается мгновенно. Все из-за того, что в функции SetObjectRot которая устанавливает координаты вращения объекта, нет последнего аргумента speed, который есть в функции MoveObject. MoveObject – передвигает объекты в указанное место и так как у него есть аргумент speed, передвигает он объекты плавно. На его основе делают выдвижные двери. Так вот, давайте сделаем раздвижные двери. Естественно нашу дверь нужно подвинуть немного вперед в дверной проем, чтобы, когда дверь открывалась, ручки двери не торчали из стены. Т.е мы заново получаем координаты открытой и закрытой двери. И теперь мы из полученных координат берем координаты положения, а не координаты вращения. Code if(strcmp("/open", cmdtext, true, 10) == 0) { MoveObject (cpd,372.531341,166.374206,1007.370971,2.0); return 1; } if(strcmp("/close", cmdtext, true, 10) == 0) { MoveObject(cpd,371.238067,166.374206,1007.370971,2.0); return 1; }
Вот в принципе и все.
я вернулся
|
|
| |