Привет всем, у меня тут проблема небольшая, хочу сделать чтобы военные спускались по верёвке с вертолёта, создал верт и верёвку, а они не спускаются а падают с верёвке, может надо какую-то анимацию к ним применить?
Вот создал я чела и он если в него стреляет кто нибудь но не CJ вобще никак не отвечает. Мне нужно что бы он в ответ стрелял
Это тоже можно реализовать, работая с моделью поведения актера(Decision Maker). В моём скрипте это выглядит так: 060A: create_decision_maker_type 3 store_to 8@ 0708: reset_decision_maker 8@ event 9 0709: set_decision_maker 8@ on_event 9 taskID 1000 unknown 100.0 100.0 chance 100.0 unknown 100.0 0 1 060B: set_actor 1@ decision_maker_to 8@ И удаляем сведения о модели поведения вот такой строкой: 065C: release_decision_maker 8@ Конечно, тебе нужно поставить свои локальные переменные, в которые ты запишешь своего актера и модель поведения, у меня это - 1@ и 8@
Как мне известно этот опкод задаёт модель поведения пед'а. Но при попытке атаки, актёр всё равно приседает или поднимает руки. Как сделать, что бы актёр был бесстрашным?
wmysterio, этот опкод хоть и задает модель поведения, но совсем бесстрашным он актера не делает. Как я понял, нужно задавать самому реакцию актера на определённые события. Я вот что сделал: 060A: create_decision_maker_type 3 store_to 8@ 0708: reset_decision_maker 8@ event 9 // тут сбрасываем стоковую реакцию актера на событие. 0708: reset_decision_maker 8@ event 31 0709: set_decision_maker 8@ on_event 9 taskID 1000 unknown 100.0 100.0 chance 100.0 unknown 100.0 0 1 // если актер поврежден другим педом, то он убьет его. 0709: set_decision_maker 8@ on_event 31 taskID 257 unknown 100.0 100.0 chance 100.0 unknown 100.0 0 1 // если на актёра нацелились, то ему, впринципе, всё равно=) 060B: set_actor 1@ decision_maker_to 8@
И можно удалить сведения о модели поведения таким опкодом: 065C: release_decision_maker 8@
SUPMAN, со схемой работы с Decision Maker я, например, ознакомился здесь: http://gtamodding.ru/wiki/Decision_Maker А так же Den_spb дал ссылку на 100-ой странице форума Мне это очень помогло! Пытаюсь научиться скриптингу)
Дата: Четверг, 29.03.2012, 19:28 | Сообщение # 3005
Создатель
Группа: Администраторы
Сообщений: 2242
Статус: Offline
Quote (Scripter100)
Привет всем, у меня тут проблема небольшая, хочу сделать чтобы военные спускались по верёвке с вертолёта, создал верт и верёвку, а они не спускаются а падают с верёвке, может надо какую-то анимацию к ним применить?
Подскажите, есть ли возможность привязать к транспорту обьект который создан игроком во время игры? например как взрывпакет..( ты его кидаешь на машину и он двигаеться вместе с машиной) Пеку пироги
Всем привет! Мне нужна помощь. К примеру у меня есть скрипт
Code
:HOTKEY if 0AB0: key_pressed 110 jf @HOTKEY jump @SCTIPT
:SCRIPT // Тут код jump @SCRIPT_2
:SCRIPT_2 // Тут код jump @HKEY_CHECK
:HKEY_CHECK if 0AB0: key_pressed 111 jump @HOTKEY
Скажите, как сделать так, чтобы когда я нажму кнопку скрипт мгновенно прекращал свою работу, и после этого я мог запустить его опять. Сколько ни пытался - ничего не получается. P.S. потоков (SCRIPT_x) может быть ОЧЕНЬ много.
Скажите, как сделать так, чтобы когда я нажму кнопку скрипт мгновенно прекращал свою работу, и после этого я мог запустить его опять. Сколько ни пытался - ничего не получается. P.S. потоков (SCRIPT_x) может быть ОЧЕНЬ много.
:SCRIPT_2 wait 0 gosub @HKEY_CHECK // code wait 0 jump @NEXT_LABEL // тут переходим на следующий лейбл, если есть необходимость и таковой имеется.
Немного объясню о чём идет речь. Первый лейбл,(HOTKEY), как и прежде, разрешает развитие скрипту, только в случае, если нажата клавиша 110. Если она все же нажата, то скрипт переходит к выполнению лейбла SCRIPT, который в свою очередь выполнится лишь тогда, когда выполнится лейбл HKEY_CHECK. К лейблу HKEY_CHECK мы приходи посредством gosub. Если условие HKEY_Check не выполняется и клавиша 111 нажата, то выполнение скрипта прекращается и переходит к лейблу HOTKEY. Только это не значит, что пропадут все модели и всё такое... Просто скрипт прекратит свою работу, пока снова не нажмёте key 110. Если же условие выполняется, то затем и лейбл SCRIPT выполняется, после него SCRIPT_2, если также пройдет проверка HKEY_CHECK. И так далее с любым кол-вом лейблов Пытаюсь научиться скриптингу)
Сообщение отредактировал Vadik7 - Пятница, 30.03.2012, 17:05
Вы не так поняли. мне надо привязать обьект к авто чтоб оффсет был не от центра авто а от центра игрока. например обьект создаёться перед игроком, а потом привязуеться к авто сохраняя старые координаты. ПРИМЕР: когда кидаешь взрывпакет на авто то он цепляеться к машине там куда кидает игрок а не с оффсетом от центра машины. а когда машина едет, пакет двигаеться с ней. мне нужен принцип взрывпакета. если кто знает напишите Извините, не знаю как точно обьяснить чего я хочу добиться(
Добавлено (31.03.2012, 14:46) --------------------------------------------- или скажите есть ли возможность записать в оффсет расстояние между уже созданным обьектом и авто к которому он будет привязан
Пересчитать координаты из одной системы в другую (мировая система координат -> система координат машины) можно путём определённых вычислений. Проще воспользоваться новым опкодом 0D10 от DK22Pac: http://modsforgta.ucoz.ru/forum/12-62-1
Посмотрел внимательнее - 0D10 не подойдёт, т.к. пересчитывает оффсеты в мировые координаты (аналогично стандартным опкодам "store coords with offsets"). Нужный опкод (с противоположным действием) появится в следующей версии библиотеки, а пока можно применить другой способ, правда более сложный.
Код, переводящий мировые координаты в оффсеты относительно транспорта 29@:
0AA5: call 0x7F2070 num_params 2 pop 2 3@ 5@ 0AA5: call 0x59C790 num_params 3 pop 3 4@ 5@ 6@
// В переменные 7@ 8@ 9@ запишутся оффсеты относительно транспорта 29@
....
:inverse_matrix // Этот кусок разместить в самом конце скрипта, чтобы на него не могло перейти исполнение кода hex 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 end
Номера переменных можно заменить на свои, но координаты во всех случаях должны быть записаны в 3 последовательные переменные (например, 0@ 1@ 2@, 7@ 8@ 9@, 20@ 21@ 22@ и т.д.)
А матрица - это просто таблица с числами. В игре матрицы обычно используются для хранения координат векторов, т.е. описывают позицию и углы поворота оъекта.
Это стандартные опкоды КЛЕО4. Если Sanny Builder их не распознаёт, то надо переустановить КЛЕО4. В окне инсталлятора должна быть включена галка "Sanny Builder data files" (что-то вроде этого).
Den_spb, Вот я уже достиг чего хотел. итоговый опкод 0681: attach_object 11@ to car 25@ with offset 7@ 8@ 9@ rotation 0.0 0.0 0.0 Теперь главный вопрос.. как определить постоянное число на оси оборота z? (х и у мне не нужны) я что только не пробовал... и angle актера записывать в z, и angle первоначального обьекта еще до привязки к авто... когда играю обьект привязывает случайное число (0, 90, 180, 270) не знаю, может это делаеться таким же сложным методом как ты мне расписал недавно((( зато я рад что основную часть благодаря тебе выполнил Пеку пироги
Углы в 0681, как и координаты, указываются локальные (т.е. они отсчитываются в системе координат машины). Если Х и Y углами можно пренебречь (машина не перевёрнута и не стоит на очень крутой горке), то локальный Z угол объекта можно определить как разницу между мировым Z углом объекта и мировым Z углом машины.
Ой чую сегодня ночью мне спать не прийдеться) ахахаха. Если будет результат то обязательно его покажу
Добавлено (03.04.2012, 21:31) --------------------------------------------- Ой чую сегодня ночью мне спать не прийдеться) ахахаха. Если будет результат то обязательно его покажу
Добавлено (04.04.2012, 00:18) --------------------------------------------- Всё! всё удалось точно как я хотел! Спасибо тебе огромное, с меня подарочек вконтакте если дашь ссылку на свою страницу.
Углы в 0681, как и координаты, указываются локальные (т.е. они отсчитываются в системе координат машины). Если Х и Y углами можно пренебречь (машина не перевёрнута и не стоит на очень крутой горке), то локальный Z угол объекта можно определить как разницу между мировым Z углом объекта и мировым Z углом машины.
Den_spb, поражают твои познания, дружище Картинку прикольную нарисовал. Я что думаю - то, что изображено на рисунке стрелочками - это векторы в трёхмерной системе координат, и над этими векторами могут также быть проведены все операции (сложение, вычитание, умножение и деление и др.) И положение любого объекта в игре в каждый промежуток времени описывается вектором(скорее всего единичным, так как я думаю, что длина его здесь не важна). Зная, как вектор проходит через объект, в теории можно прицепить объект к другому объекту так, как нужно нам. Может, возможно через эту систему работать с мировыми координатами объекта, т.е. координатами векторов, задающих положение объекта в пространстве Пытаюсь научиться скриптингу)
Для представления углов поворота объекта используется не один, а три единичных вектора, жёстко связанных с объектом - Right (X), Top (Y), At (Z). Если все три угла поворота объекта равны нулю, то вектора направлены в те же стороны, куда направлены мировые (глобальные) оси координат, т.е. Right - на восток, Top - на север, Z - в зенит. Координаты единичных векторов и координаты самого объекта (координаты радиус-вектора объекта) хранятся в матрице (таблице) позиционирования и вращения данного объекта, которая выглядит так:
Матрицы и вектора, как и обычные числа, можно складывать и перемножать. Это применяется, например, для пересчёта координат из одной системы в другую - о чём шла речь выше.
Для проверки усвоения этого вопроса могу предложить задачу: X и Y углы поворота объекта равны нулю, Z угол поворота объекта равен z. Заполнить недостающие значения (?) в матрице:
Code
? ? 0.0 0 -sin(z) ? ? 0 ? ? ? 0 PosX PosY PosZ 0
Углы отсчитываются против часовой стрелки, если смотреть навстречу соответствующей оси.
Сообщение отредактировал Den_spb - Четверг, 05.04.2012, 21:07
Для представления углов поворота объекта используется не один, а три единичных вектора, жёстко связанных с объектом - Right (X), Top (Y), At (Z). Если все три угла поворота объекта равны нулю, то вектора направлены в те же стороны, куда направлены мировые (глобальные) оси координат, т.е. Right - на восток, Top - на север, Z - в зенит. Координаты единичных векторов и координаты самого объекта (координаты радиус-вектора объекта) хранятся в матрице (таблице) позиционирования и вращения данного объекта, которая выглядит так: Code
Матрицы и вектора, как и обычные числа, можно складывать и перемножать. Это применяется, например, для пересчёта координат из одной системы в другую - о чём шла речь выше.
Den_spb, спасибо за объяснения, теперь мне более менее понятно, как задаётся положение объекта в пространстве Но, вот как это всё работает в матрице, я что-то не догоняю В частности, меня ввело в ступор, что, например в матрице есть столбцы и RightX и RightY и RightZ, хотя ведь единичный вектор Right (X). Так то тригонометрию вроде могу вспомнить, а вот в какую сторону углы отсчитывать точно не понял. По принципу, если ось считать стрелой, и она летит на нас и будет изображена на чертеже как окружность с точкой в центре..? Пытаюсь научиться скриптингу)
В частности, меня ввело в ступор, что, например в матрице есть столбцы и RightX и RightY и RightZ, хотя ведь единичный вектор Right (X).
Любой вектор на плоскости задаётся двумя координатами, а в пространстве - тремя, т.е. RightX, RightY и RightZ - координаты вектора Right. Координаты могут иметь различные значения (в зависимости от текущего направления вектора), но т.к. длина единичного вектора всегда равна 1.0 (как ты правильно отметил), то должно выполняться условие: SQRT(RightX^2 + RightY^2 + RightZ^2) = 1.0 SQRT - квадратный корень, ^2 - возведение в квадрат.
Quote (Vadik7)
а вот в какую сторону углы отсчитывать точно не понял. По принципу, если ось считать стрелой, и она летит на нас и будет изображена на чертеже как окружность с точкой в центре..?
Да, совершенно верно. Как отсчитывается угол Z - показано на картинке выше (векторы At машины и объекта, а также мировая ось Z направлены на нас). Другие два угла отсчитываются аналогично.
Сообщение отредактировал Den_spb - Пятница, 06.04.2012, 04:15