Уроки моддинга
GTA Script GeneratorЗадать вопрос
  • О сайте
    • Проекту помогали
  • GTA SA, VC, III (PC, Classic)
    • Раздел 01. Основы
      • Общие сведения об уроках и минимальный набор программ
      • Установка Sanny Builder. Базовые настройки
      • Синтаксис, комментарии, опкоды, команды. Ключевые слова
      • Типы данных. Литералы. Константы
      • Типы проектов
      • Переменные. Операторы
      • 00012. Редактирование main.scm. Переменные (Часть 3)
      • 000175. Трюк с локальными массивами
      • 00073. Переменные, как члены класса. Коментарии в поиске опкодов. Макросы
      • 00017. Условия в Sanny Builder (Часть 1)
      • 00018. Условия в Sanny Builder (Часть 2)
      • 00019. Условия в Sanny Builder (Часть 3)
      • 000181. Условия в Sanny Builder (Часть 4)
      • 00045. Циклы (Часть 1 - while)
      • 00047. Циклы ( Часть 2 - for )
      • 00049. Циклы ( Часть 3 - repeat ). Вложенные циклы
      • 00087. Таблицы переходов
      • 00059. Подключение текстовых файлов, scm-функции
      • 000155. Использование SCM-функций (опкод 0AB1)
      • 000162. Используем scm-функции в качестве проверок
      • Координаты. Угол. Получение координат и угла Z
      • 000154. Вся правда о wait 0
    • Раздел 02. CLEO
      • Текст
        • 000158. Динамическая GXT-таблица или виртуальные GXT-записи
        • 00033. Работа с текстом
      • Игрок
        • 00021. Одежда СЖ
      • Транспорт
        • 00026. Создание транспорта
        • 000115. Работа с грузовиками и прицепами
        • 000172. Эктра-части автомобилей
        • 00042. Всё о поездах
        • 00080. Тюнинг транспорта, работа с компонентами тюнинга
        • 00029. Транспорт и команды, свойственны ему
        • 00046. Плавающие и лётные средства передвижения
        • 00082. Работа с частями автомобиля
      • Актёры
        • 000152. Заставляем актёра говорить. Аудио-таблицы
        • 000177. Трюк со специальными актёрами
        • 00020. Типы пешеходов, номера банд и отношение между ними
        • 00024. Модель. Создание актёра
        • 00028. Актёры и команды, свойственны им. Команды для игрока
        • 00056. Специальные актёры
        • 00060. События актёров
        • 00084. Модели поведения актёров
      • Объекты
        • 00030. Объекты и команды, свойственны им
        • 00025. Создание объекта
        • 000142. Метание объектов
      • 00027. Пикапы
      • 00031. Маркеры и сферы
      • 000122. Типы чекпоинтов, маркеров. Детальный обзор
      • 00055. Cleo. Основные понятия, отличия от main'а, простые примеры
      • 00061. Cleo-миссии
      • 00064. Работа со стартерами ( Cleo - Часть 1 )
      • 00065. Работа со стартерами ( Cleo - Часть 2 )
      • 00083. Запуск другого потока с Cleo-скрипта
      • 00079. Немного о глобальных CLEO-переменных
      • 00066. Работа со стартерами ( Дополнительные условия )
      • 000137. Группы в GTA San Andreas
      • 00098. Последовательность в анимации
      • 000120. Пути пешеходов и анимационные пути
      • 000178. RRR-файлы в GTA SA. Как их делать и использовать-
      • 000180. Длинные последовательности в анимации
      • 00022. Типы зон. Аудио-зоны
      • 00023. Работа с клавишами. Делаем сохранение
      • 00037. Анимация. Основные команды и примеры их использования
      • 00041. Работа с интерьерами
      • 00036. Катсцены и всё, что необходимо для примитивного видеоролика
      • 000174. Снова статистика игрока
      • 00040. Как создать свой чит-
      • 00090. Работа с гаражами
      • 000176. Выделение памяти
      • 00076. Статистика игрока
      • 00094. Пропуск видеороликов
      • 00072. Работа со светом. Прожектор
      • 00092. Работа с файлами ( форматированное чтение )
      • 00093. Работа с файлами ( Дозапись )
      • 00071. Визуальные эффекты в GTA San Andreas
      • 00069. Взрывы и всё, что связано с огнём.
      • 00086. Движения объектов и эффектов
      • 00068. Использование RC
      • 00067. Использование турелей
      • 00057. Работа с INI-файлами ( запись и считывание )
      • 00044. Работа с панелями ( таблицами )
      • 00043. Работа с аудио
      • 00038. Рисование на экране (Часть 1 - Текст)
      • 00039. Рисование на экране (Часть 2 - Текстуры)
    • Раздел 03. MAIN.SCM
      • 0009. Редактирование main.scm. Потоки и опкоды (Часть 1)
      • 00014. Редактирование main.scm. Потоки и опкоды (Часть 2)
      • 00013. Редактирование main.scm. Потоки и опкоды (Часть 3)
      • 00062. Работа со стартерами ( MAIN.SCM - Часть 1 )
      • 00063. Работа со стартерами ( MAIN.SCM - Часть 2 )
      • 00054. Внешние скрипты в main.scm
      • 00050. Статус-тексты
      • 00053. Таймеры
      • 00035. Делаем простую миссию
    • Раздел 04. Разное
      • 00088. Интересные опкоды (Часть 1)
      • 00089. Интересные опкоды (Часть 2)
      • Интересное в скриптинге
      • 000167. Интересное в скриптинге. Часть 2
      • 00081. Защита скриптов, снятие слабой защиты
      • 000157. Защита скриптов,снятие её + Подробнее об $NOSOURCE
      • 000121. Варианты использования main.scm
      • 000179. Избавляемся от "ёлочек"
      • 000171. Контроль за перемещениями мыши
      • 000182. Колода карт в GTA San Andreas
      • Работа с магазинами
      • 00091. Создания собственных классов и кейвордов
      • 00085. Работа с битами переменных
      • 00051. Работа с HEX. HEX-буфер
      • 00097. Написания DLL библиотек и использование их с скриптах
    • Раздел 05. Игровая память
      • 00058. Работа с игровой памятью (Часть 1- статические адреса)
      • 00074. Динамические адреса памяти. ( Часть 1 - структура актёра )
      • 00075. Динамические адреса памяти. ( Часть 2 - структура автомобиля )
      • 00077. Динамические адреса памяти. ( Часть 3 - структура объекта )
      • 00096. Игровая память. Динамические адреса (структура weapon.dat)
    • Раздел 06. Алгоритмы и примеры
      • 000153. Пример полноценной миссии "Ограбление"
      • 00095. Как сделать нервометр-
      • 00052. Пример полноценной миссии "Взрывчатка"
      • 000114. Делаем спидометр!
      • 000161. Очень длинные миссии в main.scm
      • 000112. Делаем графическое меню
      • 000113. Делаем гоночную миссию ( SARMC v0.9 )
      • 000133. Делаем диалоги в миссиях
      • 00032. Делаем простой скрипт (приходим к точке и убиваем нужную цель)
    • Раздел 07. Plugin SDK (SA)
      • Простейший плагин
      • Работа с массивами объектов
      • Рисуем
      • Короны
      • Класс шрифта (CFont)
    • Раздел 08. Руководство по программам
      • Руководство по использованию программы GTA-SA Crazy IMG Editor
      • Руководство по использованию программы Ped Editor
      • Руководство по использованию программы Rus2gxtCoder
      • Руководство по использованию программы FXT Editor
      • Руководство по использованию программы GTA Animation Manager
      • Руководство по использованию программы TXD Workshop
      • Руководство по использованию программы GTA GXT Editor
      • Руководство по использованию Map Editor
      • Руководство по использованию программы MapCleaner
  • GTA 4 (PC)
    • Раздел 01. ScriptHookDotNet
      • Всё, что необходимо перед началом скриптинга GTA 4
      • Создание проекта и его открытие
      • Наш первый скрипт. Необходимые условия его написания
      • 000102. Метки и прыжки
      • 00034. Что такое Blip- Основные комадны
      • 000107. Обзор класса GAME
      • 000108. Обзор класса PLAYER(Часть 1)
      • 000109. Обзор класса PLAYER(Часть 2)
      • 000110. Обзор класса PLAYER(Часть 3)
      • 000111. Vector - Что это такое и с чем его едят
      • 000116. Обзор класса World
      • 000117. Обзор класса Model
      • 000118. Обзор класса Vehicles
      • 000119. Обзор класса Ped
      • 000126. Pickup в GTA 4
      • 000127. Обзор класса Group
      • 000141. Списки в c#. Запуск нескольких скритов в GTA 4
  • Программирование
    • C#
      • 000103. Типы данных в C#. Базовые операции над ними.
      • 000104. Блочные конструкции. Условия
      • 000105. Блочные конструкции. Циклы
      • 000106. Массивы и структуры
      • 000123. Блочные конструкции. Перечисления
      • 000124. Блочные конструкции. Оператор управдения swith
      • 000125. Блочные конструкции. Цикл foreach
      • 000128. Как делать функции c#- Часть 1
      • 000129. Как делать функции c#- Часть 2
      • 000130. Альтернативные условия
      • 000131. Как делать функции c#- Часть 3
      • 000132. ООП в c# Часть 1
      • 000135. ООП в c# Часть 2 - Полиморфизм
      • 000136. Как делать функции c#- Часть 4
      • 000138. Детальнее о static
      • 000139. Блочные конструкции. Исключения
      • 000140. Делегаты и события в c#
      • 000143. Знакомство с формами
      • 000144. Панель элементов
      • 000149. Кнопки, Текст-боксы и метки
      • 000151. Запуск другой формы из основной, ListBox, MenuStrip
      • 000160. Сериализация и десериализация XML в c#
      • 000163. Консоль. Основные команды
      • 000165. Цикл foreach для своих классов
      • 000168. Перегрузка операторов в c#
      • 000169. Анонимные и динамические типы в c#
      • 000170. Анонимные функции и лямбда-выражения в c#
      • 000173. C# введение в Linq
      • 00048. Детальнее о ref, out и checked
      • 000150. Подключаем dll-библиотеку, работа с файлами
    • C++
      • Выбор среды компилирования, типы данных, первая программа
      • Математика, адреса данных
  • Полезные ссылки
    • Уроки от Vital (видео)
    • База опкодов (SBL)
    • Сайт Sanny Builder
    • Сайт CLEO
  • На удаление
    • Раздел 99. Старые уроки
      • 00010. Управление Sanny Builder и её особенности
      • 0000. Всё, что необходимо перед началом скриптинга
      • 000156. Вступление в скриптинг GTA 3
Powered by GitBook
On this page

Was this helpful?

  1. GTA SA, VC, III (PC, Classic)
  2. Раздел 02. CLEO

000178. RRR-файлы в GTA SA. Как их делать и использовать-

Previous000120. Пути пешеходов и анимационные путиNext000180. Длинные последовательности в анимации

Last updated 3 years ago

Was this helpful?

RRR-файлы в GTA SA. Как их делать и использовать?|В этом уроке мы познакомимся с очередным типом файлов. Научимся их создавать и использовать в игре.|wmysterio|wmysterio||||Привет, друзья! Сегодня мы будем изучать файлы путей автомобилей, которые имеют расширение "RRR". Эти файлы являются бинарными и обычно хранятся в IMG-архиве за адресом:

X:\GTA SA\data\Paths\carrec.img

Главное преимущество таких путей в том, что они гарантируют нам точное поведение автомобиля от начала маршрута, до его конца. Обычно мы можем обойтись и без них, заставляя машину ехать куда надо через скрипт, но иногда ситуация бывает настолько специфичной, что реализовать всё скриптом просто невозвожно или результаты слишком не предсказуемы.

Вот для таких случаев часто и создают RRR-файлы, которые хранят все точки маршрута со всеми углами машины, параметрами двигателя, моменты когда она притормаживает и всё в таком духе. В итоге мы имеем так называемый "Playback record", который мы будем называть маршрутом.

Главный недостаток ( а иногда и преимущество ), что автомобиль теряет физические свойства. Иными словами будет выполнять воспроизведение маршрута в таком виде, в котором он был записан. Если между точками находятся автомобили или другие объекты, то машина будет проходить сквозь них, а другой транспорт будет отскакивать, как от поезда.

Для начала научимся создавать путь. Для этого часто используют старенький скрипт от Seemann'а, который имеет название . Его желательно открыть ( исходники прилагаются ) и настроить под себя. В основном нужно настраивать 3 параметра:

Константа
Значение

REC_INTERVAL_MS

Отвечает за то, как часто будет делаться новая запись точки маршрута. Чем значение меньше, тем чаще будет добавлятся точка.

FILE_PATH

Путь к выходному файлу.

KEY_REC

Код клавиши, которая запускает и останавливает запись маршрута ( в сочетании с клавишей Shift` )

Скрипт работает по следующему принципу: садимся в нужный транспорт, нажимаем клавиши Shift+<kbd>R. Далее начинаем ехать как и куда Вам угодно. Скрипт будет записывать точки маршрута. Когда нужно остановится, нажимаем эту комбинацию клавиш ещё раз и путь готов!

× **ВАЖНО:** имя файла обязательно должно содержать числа, больше за ноль! Рекомендую сначала проверить доступность имени в архиве ( нужно, чтобы такого файла небыло ), чтобы случайно не перезаписать существующий файл.× **Примечание:** рекомендую для записи маршрута использовать тот же транспорт, что Вы планируете создавать в скрипте. Иначе могут быть нестыковки.

Для успешной загрузки такого пути, нам необходимо добавить его в "carrec.img" спомощью любого IMG-редактора. Ну и с конце писать скрипт. Рассмотрим базовые опкоды для работы с RRR-путями:

// Загружает путь
07C0: load_path 908

// Проверка: путь загрузился?
07C1: path 908 available

// Выгружает путь с памяти
0873: release_path 908

908 в этом случае является именем файла, поэтому всегда сохраняйте файлы с числовым именем, как уже было сказано выше. После этого мы можем заставить транспорт воспроизвести наш путь следующими опкодами:

// Машина будет ехать по загруженному пути:
05EB: assign_car $hCar to_path 908

// Машина будет ехать по загруженному пути.
// Как только путь достигнет конца, воспроизведение начнётся сначала
085E: assign_car $hCar to_looped_path 908

// Проверка: транспорт едет по какому-то пути?
060E: car $hCar assigned_to_path

// Установить скорость воспроизведения пути. Значения могут быть от 0.0 до 1.0!
// Увы, маршрут по времени выполнения будет чуть быстрее, поэтому лучше устанавливать
// скорость, которая будет более-менее соответствовать скорости в момент записи пути.
06FD: set_car $hCar speed_on_path_to 1.0

// Пропускает маршрут. Я не тестировал этот опкод, но догадываюсь, что значение 1.0
// отвечает за позицию, в которой остановить машину ( по времени выполнения ).
// Значения могут быть от 0.0 до 1.0!
0706: advance_car $hCar further_along_path 1.0

// Останавливает воспроизведение маршрута и устанавливает его в конец пути по времени.
06C5: release_car $hCar from_path

Поскольку маршрут сам по себе является "записью воспроизведения", скорость мы приравниваем к общей длительности маршрута. Это дополнительно позволяет нам использовать опкоды, которые бывают пелезными при определённых обстоятельствах:

// Окончательно останавливает воспроизведение маршрута
05EC: release_car $hCar from_path

// Приостанавливает воспроизведение маршрута ( ставит на паузу )
05ED: freeze_car $hCar while_on_path

// Продолжает воспроизведение маршрута ( отмена паузы )
05EE: unfreeze_car $hCar while_on_path

Следующие опкоды я не тестировал, поэтому их описания могут быть неточными:

// Воспроизводит путь, но управление осуществляется с помощью искусственного интеллекта
0705: car $hCar assign_to_path 908 and_drive_normal

// Изменяет способ воспроизведения со строгого на искусственный интеллект
099B: unknown_enable_car $hCar collision_on_path

Здесь важно отметить, что воспроизведение маршрута перемещает машину в позицию первой точки пути, поэтому для более плавного перехода лучше создавать машину в тех же координатах.

Ну и, наконец, пример скрипта, где машина будет ехать по записанному маршруту:

{$CLEO}

// ! Нужно создать путь 900

:PATH
thread 'PATH'
wait 5000
Model.Load(#COMET) 
07C0: load_path 900
038B: load_requested_models

:PATH_CHECK1
wait 0
if and 
Model.Available(#COMET) 
07C1: path 900 available
jf @PATH_CHECK1 
0@ = Car.Create(#COMET, -1596.8551, -1604.5587, 35.8839)
Car.Angle(0@) = 293.6649 
0430: put_actor $PLAYER_ACTOR into_car 0@ passenger_seat 0 
Model.Destroy(#COMET)
05EB: assign_car 0@ to_path 900
06FD: set_car 0@ speed_on_path_to 0.97

:PATH_CHECK2
wait 0
if
8256: not player $PLAYER_CHAR defined
then
jump @PATH_CAR_CLEAR
end
if
856E: not car 0@ defined
then
jump @PATH_RELEASE
end
if or
00DB: actor $PLAYER_ACTOR in_car 0@
01C1: car 0@ stopped
then
jump @PATH_CAR_CLEAR
end
jump @PATH_CHECK2 

:PATH_CAR_CLEAR
if
056E: car 0@ defined
then 
06C5: release_car 0@ from_path
Car.RemoveReferences(0@)
end

:PATH_RELEASE
0873: release_path 900
0A93: end_custom_thread

Надеюсь, этот материал был для Вас полезным. На этом у меня всё. С Вами попрежднему - wmysterio.|1125|1|0|38913452png640359320`180``||rrr_fajly_v_gta_sa_kak_ikh_delat_i_ispolzovat|1510794350

Этим способом я делал гонки для мода '', где соперник использовал путь, тем самым его "интеллект" был намного выше, чем могли бы быть без такого маршрута:

Carrec.cs
Проект "Неизвестный": Чёрный список