Четверг, 17.07.2025, 18:34
Приветствую Вас Гость | RSS
[•X•X•X•X•X•X•X•X•X• SRK •X•X•X•X•X•X•X•X•X•] - 193.107.179.214:7777
Главная | Урок №23 Двери Открыть по команде! - Форум | Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: DimanCC, Awesome, [Tuner_Life]Nikotin  
Урок №23 Двери Открыть по команде!
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;    
}


Вот в принципе и все.


я вернулся
 
  • Страница 1 из 1
  • 1
Поиск:

Поддержка пишите на наш форум:Walter & alisa