Вопросы по созданию КЛЕО-скриптов
|
|
Den_spb | Дата: Пятница, 27.05.2011, 01:02 | Сообщение # 616 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Иван, алгоритм здесь будет такой: 1.Сначала надо создать объект-магнит (ID не помню, поищи в gta3.img по слову magnet). 2.Далее перебираем пул транспортных средств с целью поиска машины, соприкасающейся с объектом-магнитом (если такая в данный момент имеется). 3.В случае успешного поиска (существует машина, соприкасающаяся с магнитом), прицепляем машину к магниту. Реализуется примерно так: Code ... if gosub @Search_collided_vehicle then 0939: attach_car 1@ to_object 0@ with_offset 0.0 0.0 -0.8 rotation 0.0 0.0 180.0 end ... :Search_collided_vehicle // Функция поиска машины, соприкасающейся с объектом. Разместить за пределами основного кода. if 0AE2: 1@ = random_vehicle_near_point 0.0 0.0 0.0 in_radius 6000.0 find_next 0 pass_wrecked 1 //IF and SET then repeat if 0897: car 1@ collided_with_object 0@ then 0485: return_true return end until 8AE2: not 1@ = random_vehicle_near_point 0.0 0.0 0.0 in_radius 6000.0 find_next 1 pass_wrecked 1 //IF and SET end 1@ = -1 8485: return_false return
|
|
| |
izerli | Дата: Пятница, 27.05.2011, 08:27 | Сообщение # 617 |
Группа: Проверенные
Сообщений: 90
Статус: Offline
| спасибо. и еще такой вопрос в тему: при создании магнита тросса же не будет? как его можно создать?
|
|
| |
Den_spb | Дата: Суббота, 28.05.2011, 03:55 | Сообщение # 618 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Троса наверное не будет. Как его создать - не знаю.
|
|
| |
walk | Дата: Суббота, 28.05.2011, 13:28 | Сообщение # 619 |
Группа: Проверенные
Сообщений: 96
Статус: Offline
| izerli, на форуме билдера как-то такое обсуждалось, поищи в общих вопросах, правда там было создание троса, по которому спецназ спускался с вертолёта, но в принципе тебе и это поможет
|
|
| |
Den_spb | Дата: Суббота, 28.05.2011, 15:43 | Сообщение # 620 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Для создания верёвки в опкодеCode 0503: create_actor_on_rope_with_pedtype 27 model #SWAT at -2016.6697 168.5686 27.6875 handle_as 0@ вызывается функция 0x556B40. Нужно только определить её параметры.
|
|
| |
ILYALION | Дата: Суббота, 28.05.2011, 16:46 | Сообщение # 621 |
Группа: Проверенные
Сообщений: 325
Статус: Offline
| Есть ли такая проверка: поезд данного типа существует? Добавлено (28.05.2011, 16:46) --------------------------------------------- И как его потом записать в переменную?
|
|
| |
Den_spb | Дата: Суббота, 28.05.2011, 17:00 | Сообщение # 622 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Quote (ILYALION) Есть ли такая проверка: поезд данного типа существует? В одно действие такая задача не решается. Нужно проверить каждое из всех существующих в данный момент транспортных средств (автомобили, байки, вагоны поездов, лодки, самолёты, вертолёты) на соответствие заданным критериям. Пример - поиск первого вагона трамвайного состава в скрипте "Улучшение движения трамваев":Code :SEARCH_TRAM if 0AE2: TRAM = random_vehicle_near_point 0.0 0.0 0.0 in_radius 6000.0 find_next 0 pass_wrecked 1 //IF and SET then repeat if 0137: car TRAM model == 449 // сначала проверяем по ИД модели, является ли транспортное средство трамвайным вагоном then 0A97: TRAM_STRUCT = car TRAM struct TRAM_STRUCT += 0x5D0 0A8D: TRAM_STRUCT = read_memory TRAM_STRUCT size 4 virtual_protect 0 if TRAM_STRUCT == 0 // потом проверяем, является ли вагон первым в составе then 0485: return_true return end end until 8AE2: not TRAM = random_vehicle_near_point 0.0 0.0 0.0 in_radius 6000.0 find_next 1 pass_wrecked 1 //IF and SET end TRAM = -1 8485: return_false return
|
|
| |
ILYALION | Дата: Суббота, 28.05.2011, 17:16 | Сообщение # 623 |
Группа: Проверенные
Сообщений: 325
Статус: Offline
| Я из этого примера так и не понял . Можете ли Вы дать мне пример того, что если у поезда второй вагон (если считать, что локомотив это нулевой вагон) freight(id 537), то этот поезд записывается в переменную?
|
|
| |
Den_spb | Дата: Воскресенье, 29.05.2011, 00:58 | Сообщение # 624 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Вот пример:Code ... if gosub @SEARCH then // поезд найден. Действия, которые нужно над ним произвести пишем здесь. end ...
:SEARCH // функция поиска поезда. Разместить за пределами основного кода. if 0AE2: 0@ = random_vehicle_near_point 0.0 0.0 0.0 in_radius 6000.0 find_next 0 pass_wrecked 1 //IF and SET then repeat 0A97: 1@ = car 0@ struct 0A8E: 2@ = 1@ + 1424 // int 0A8D: 2@ = read_memory 2@ size 1 virtual_protect 0 if 2@ == 6 // проверяем, является ли транспорт вагоном поезда then 0A8E: 2@ = 1@ + 0x5D0 // int 0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0 if 2@ == 0 // проверяем, является ли вагон нулевым в составе then 078A: 2@ = get_train 0@ carriage 2 handle if 056E: car 2@ defined // проверяем, существует ли второй вагон в составе then if 0137: car 2@ model == 537 // проверяем модель второго вагона then 0485: return_true return end end end end unti l 8AE2: not 0@ = random_vehicle_near_point 0.0 0.0 0.0 in_radius 6000.0 find_next 1 pass_wrecked 1 //IF and SET end 0@ = -1 8485: return_false return
|
|
| |
DK22Pac | Дата: Воскресенье, 29.05.2011, 12:12 | Сообщение # 625 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Денис, у меня такая проблема. Я пишу код, где камера в опр. время "застывает". Дальше я креплю обьект к гг, и в координаты этого обьекта ставлю таргет пойнт. Дальше, если расстояние между позицией камеры и таргетом меньше за 20.0, то я хочу в цикле (плавно) увеличить это расстояние до 20.0 Но надо, чтобы камера двигалась по прямой таргет-розиция. Для этого я нашёл угол между линией камеры и горизонтом. Посчитал синус - для У координаты и косинус для Х. Ещё написал код для перемещения по оси Z. Потом в цикле добавляю эти координаты. Но в игре камера сразу отдаляется на радиус 20.0 и потом иногда трясется.Добавлено (29.05.2011, 12:12) ---------------------------------------------
Code 068E: get_camera_target_point_to 3@ 4@ 5@ 068D: get_camera_position_to 0@ 1@ 2@ 0087: 10@ = 3@ 0087: 11@ = 4@ 0087: 12@ = 5@ 0063: 10@ -= 0@ 0063: 11@ -= 1@ 0063: 12@ -= 2@
0087: 13@ = 3@ 0087: 13@ = 4@ 0063: 13@ -= 0@ 0063: 14@ -= 1@ 0604: get_Z_angle_for_point 13@ 14@ store_to 15@ // Z 02F7: 16@ = cos 15@ // (float) + X 02F6: 17@ = sin 15@ // (float) + Y 0087: 18@ = 5@ 0063: 18@ -= 2@ 0509: 19@ = distance_between_XY 0@ 1@ and_XY 3@ 4@ 0604: get_Z_angle_for_point 18@ 19@ store_to 20@ // Z if or 20@ == 90.0 20@ == -90.0 then goto @skip else if 20@ > 90.0 then while 20@ > 90.0 dec(20@, 90.0) end else while 20@ < -90.0 inc(20@, 90.0) end end end :skip div(20@, 90.0) 20@ = 1.0 mul(16@, 0.0001) // X mul(17@, 0.0001) // Y //mul(20@, 0.0001) // Z while 32@ < 5500 //0003: shake_camera 0 050A: 21@ = distance_between_XYZ 0@ 1@ 2@ and_XYZ 3@ 4@ 5@ if 21@ < 20.0 then 005B: 0@ += 16@ 005B: 1@ += 17@ 005B: 2@ += 20@ camera.SetPosition(0@, 1@, 2@, 0.0, 0.0, 0.0) object.StorePos(31@, 3@, 4@, 5@) camera.PointAt(3@, 4@, 5@, 2) 068E: get_camera_target_point_to 3@ 4@ 5@ 0087: 10@ = 0@ 0087: 11@ = 1@ 0087: 12@ = 2@ 0063: 10@ -= 3@ 0063: 11@ -= 4@ 0063: 12@ -= 5@ continue end 0087: 0@ = 3@ 0087: 1@ = 4@ 0087: 2@ = 5@ 005B: 0@ += 10@ 005B: 1@ += 11@ 005B: 2@ += 12@ camera.SetPosition(0@, 1@, 2@, 0.0, 0.0, 0.0) object.StorePos(31@, 3@, 4@, 5@) camera.PointAt(3@, 4@, 5@, 2) wait 0 end
|
|
| |
Den_spb | Дата: Воскресенье, 29.05.2011, 13:54 | Сообщение # 626 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Смотри внимательнее код. Вижу как минимум один косяк:Quote while 32@ < 5500 //0003: shake_camera 0 050A: 21@ = distance_between_XYZ 0@ 1@ 2@ and_XYZ 3@ 4@ 5@ if 21@ < 20.0 then 005B: 0@ += 16@ 005B: 1@ += 17@ 005B: 2@ += 20@ camera.SetPosition(0@, 1@, 2@, 0.0, 0.0, 0.0) object.StorePos(31@, 3@, 4@, 5@) camera.PointAt(3@, 4@, 5@, 2) 068E: get_camera_target_point_to 3@ 4@ 5@ 0087: 10@ = 0@ 0087: 11@ = 1@ 0087: 12@ = 2@ 0063: 10@ -= 3@ 0063: 11@ -= 4@ 0063: 12@ -= 5@ continue end Здесь получается бесконечный цикл (т.к. длина орта камеры всегда меньше 20.0) и без wait-а (игра зависнет).
|
|
| |
DK22Pac | Дата: Воскресенье, 29.05.2011, 16:11 | Сообщение # 627 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| С кодом уже разобрался. Там вообще много ошибок было.
|
|
| |
sexy | Дата: Воскресенье, 29.05.2011, 16:35 | Сообщение # 628 |
Группа: Пользователи
Сообщений: 23
Статус: Offline
| А можно проверить запущена ли катсцена.
|
|
| |
walk | Дата: Воскресенье, 29.05.2011, 17:33 | Сообщение # 629 |
Группа: Проверенные
Сообщений: 96
Статус: Offline
| sexy, 06B9: cutscene_data_loaded скорей всего этим
|
|
| |
sexy | Дата: Воскресенье, 29.05.2011, 21:07 | Сообщение # 630 |
Группа: Пользователи
Сообщений: 23
Статус: Offline
| Что означают опкоды: 08ea 08fd 099e 0a3d 0733Добавлено (29.05.2011, 21:07) --------------------------------------------- Да так и есть с катсценами
|
|
| |