Пятница, 26.04.2024, 23:56
Качественные скрипты, моды и дополнения для GTA без регистрации
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Форум » Игры серии ГТА » Скриптинг » Вопросы по созданию КЛЕО-скриптов (Вопросы по опкодам, кодингу и др.)
Вопросы по созданию КЛЕО-скриптов
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
Я из этого примера так и не понял sad . Можете ли Вы дать мне пример того, что если у поезда второй вагон (если считать, что локомотив это нулевой вагон) 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)
---------------------------------------------
Да так и есть с катсценами

 
Форум » Игры серии ГТА » Скриптинг » Вопросы по созданию КЛЕО-скриптов (Вопросы по опкодам, кодингу и др.)
Поиск: