Уроки моддинга
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. Раздел 03. MAIN.SCM

00063. Работа со стартерами ( MAIN.SCM - Часть 2 )

Работа со стартерами ( MAIN.SCM - Часть 2 )|В предыдущем уроке мы рассмотрели запуск миссий по очереди. Сегодня мы попытаемся сделать возможность выбора миссий. То есть нам будет предоставлено два маркера и зависимости от выбранного маркера будет запускается та или иная миссия.|wmysterio|wmysterio||||Что бы это сделать нам необходимо создать несколько стартеров. Обычно миссии делят на части: миссии Свита, миссии СЖ, миссии ОG и т.п. Мы поступим также.

Давайте у нас будут миссии СЖ и Свита. Как и в предыдущем уроке, нам понадобятся глобальные переменные для каждого стартера. Допустим это будут "$MISSION_CJ_TOTAL" и "$MISSION_SWIT_TOTAL". Они будут равны нулю в начале игры. Так же мы должны завести переменные для координат маркера. Создадим такое в потоке "MAIN":

//...
$MISSION_CJ_TOTAL = 0
$MARKER_X_CJ = 2498.2966
$MARKER_Y_CJ = -1684.5094
$MARKER_Z_CJ = 12.41

$MISSION_SWIT_TOTAL = 0
$MARKER_X_SWEET = 2516.5918
$MARKER_Y_SWEET = -1674.5015
$MARKER_Z_SWEET = 12.973
//...

Теперь нам необходимо создать стартера для каждой части. Первый поток будет стартером для миссий CJ. Допустим там будет 5 миссий ( номера 0, 1, 2, 3, 4 ):

:STARTER_CJ
thread 'STARTER_CJ'
wait 0
$MARKER_CJ = marker.CreateIconAndSphere(15, $MARKER_X_CJ, $MARKER_Y_CJ, $MARKER_Z_CJ)
 
:STARTER_CJ_1
wait 0
if AND
not actor.Dead($PLAYER_ACTOR)
not actor.Driving($PLAYER_ACTOR)
8A0C: not player $PLAYER_CHAR on_jetpack
8741: not actor $PLAYER_ACTOR busted
then
 if
 $ONMISSION == 0
 then
 if AND
 $MISSION_CJ_TOTAL == 0
 0102: actor $PLAYER_ACTOR in_sphere $MARKER_X_CJ $MARKER_Y_CJ $MARKER_Z_CJ radius 2.0 2.0 2.0 sphere 0 stopped_on_foot
 then
 jump @STARTER_CJ_2 
 end
 if AND
 $MISSION_CJ_TOTAL == 1
 0102: actor $PLAYER_ACTOR in_sphere $MARKER_X_CJ $MARKER_Y_CJ $MARKER_Z_CJ radius 2.0 2.0 2.0 sphere 0 stopped_on_foot
 then
 jump @STARTER_CJ_3 
 end 
 if AND
 $MISSION_CJ_TOTAL == 2
 0102: actor $PLAYER_ACTOR in_sphere $MARKER_X_CJ $MARKER_Y_CJ $MARKER_Z_CJ radius 2.0 2.0 2.0 sphere 0 stopped_on_foot
 then
 jump @STARTER_CJ_4 
 end 
 if AND
 $MISSION_CJ_TOTAL == 3 
 0102: actor $PLAYER_ACTOR in_sphere $MARKER_X_CJ $MARKER_Y_CJ $MARKER_Z_CJ radius 2.0 2.0 2.0 sphere 0 stopped_on_foot
 then
 jump @STARTER_CJ_5 
 end
 if AND
 $MISSION_CJ_TOTAL == 4
 0102: actor $PLAYER_ACTOR in_sphere $MARKER_X_CJ $MARKER_Y_CJ $MARKER_Z_CJ radius 2.0 2.0 2.0 sphere 0 stopped_on_foot
 then
 jump @STARTER_CJ_6 
 end
 end
end
jump @STARTER_CJ_1

:STARTER_CJ_2
wait 0
Marker.Disable($MARKER_CJ)
00BE: text_clear_all
03E6: remove_text_box
00BA: show_text_styled GXT 'MISS_01' time 1000 style 2
fade 0 1000
wait 2000
start_mission 0
end_thread

:STARTER_CJ_3
wait 0
Marker.Disable($MARKER_CJ)
00BE: text_clear_all
03E6: remove_text_box
00BA: show_text_styled GXT 'MISS_02' time 1000 style 2
fade 0 1000
wait 2000
start_mission 1 
end_thread

:STARTER_CJ_4
wait 0
Marker.Disable($MARKER_CJ)
00BE: text_clear_all
03E6: remove_text_box
00BA: show_text_styled GXT 'MISS_03' time 1000 style 2
fade 0 1000
wait 2000
start_mission 2 
end_thread

:STARTER_CJ_5
wait 0
Marker.Disable($MARKER_CJ)
00BE: text_clear_all
03E6: remove_text_box
00BA: show_text_styled GXT 'MISS_04' time 1000 style 2
fade 0 1000
wait 2000
start_mission 3 
end_thread

:STARTER_CJ_6
wait 0
Marker.Disable($MARKER_CJ)
00BE: text_clear_all
03E6: remove_text_box
00BA: show_text_styled GXT 'MISS_05' time 1000 style 2
fade 0 1000
wait 2000
start_mission 4 
end_thread

Аналогично создаём поток для миссий Свита:

:STARTER_SWIT
thread 'STARTER_SWIT'
wait 0
$MARKER_SWIT = marker.CreateIconAndSphere(38, $MARKER_X_SWEET, $MARKER_Y_SWEET, $MARKER_Z_SWEET)
 
:STARTER_SWIT_1
wait 0
if AND
not actor.Dead($PLAYER_ACTOR)
not actor.Driving($PLAYER_ACTOR)
8A0C: not player $PLAYER_CHAR on_jetpack
8741: not actor $PLAYER_ACTOR busted
then
 if
 $ONMISSION == 0
 then
 if AND
 $MISSION_SWIT_TOTAL == 0
 0102: actor $PLAYER_ACTOR in_sphere $MARKER_X_SWIT $MARKER_Y_SWIT $MARKER_Z_SWIT radius 2.0 2.0 2.0 sphere 0 stopped_on_foot
 then
 jump @STARTER_SWIT_2
 end
 if AND
 $MISSION_SWIT_TOTAL == 1
 0102: actor $PLAYER_ACTOR in_sphere $MARKER_X_SWIT $MARKER_Y_SWIT $MARKER_Z_SWIT radius 2.0 2.0 2.0 sphere 0 stopped_on_foot
 then
 jump @STARTER_SWIT_3 
 end 
 if AND
 $MISSION_SWIT_TOTAL == 2
 0102: actor $PLAYER_ACTOR in_sphere $MARKER_X_SWIT $MARKER_Y_SWIT $MARKER_Z_SWIT radius 2.0 2.0 2.0 sphere 0 stopped_on_foot
 then
 jump @STARTER_SWIT_4 
 end 
 if AND
 $MISSION_SWIT_TOTAL == 3
 0102: actor $PLAYER_ACTOR in_sphere $MARKER_X_SWIT $MARKER_Y_SWIT $MARKER_Z_SWIT radius 2.0 2.0 2.0 sphere 0 stopped_on_foot
 then
 jump @STARTER_SWIT_5 
 end
 if AND
 $MISSION_SWIT_TOTAL == 4
 0102: actor $PLAYER_ACTOR in_sphere $MARKER_X_SWIT $MARKER_Y_SWIT $MARKER_Z_SWIT radius 2.0 2.0 2.0 sphere 0 stopped_on_foot
 then
 jump @STARTER_SWIT_6 
 end
 end
end
jump @STARTER_SWIT_1

:STARTER_SWIT_2
wait 0
Marker.Disable($MARKER_SWIT)
00BE: text_clear_all
03E6: remove_text_box
00BA: show_text_styled GXT 'MISS_06' time 1000 style 2
fade 0 1000
wait 2000
start_mission 5
end_thread

:STARTER_SWIT_3
wait 0
Marker.Disable($MARKER_SWIT)
00BE: text_clear_all
03E6: remove_text_box
00BA: show_text_styled GXT 'MISS_07' time 1000 style 2
fade 0 1000
wait 2000
start_mission 6
end_thread

:STARTER_SWIT_4
wait 0
Marker.Disable($MARKER_SWIT)
00BE: text_clear_all
03E6: remove_text_box
00BA: show_text_styled GXT 'MISS_08' time 1000 style 2
fade 0 1000
wait 2000
start_mission 7
end_thread

:STARTER_SWIT_5
wait 0
Marker.Disable($MARKER_SWIT)
00BE: text_clear_all
03E6: remove_text_box
00BA: show_text_styled GXT 'MISS_09' time 1000 style 2
fade 0 1000
wait 2000
start_mission 8
end_thread

:STARTER_SWIT_6
wait 0
Marker.Disable($MARKER_SWIT)
00BE: text_clear_all
03E6: remove_text_box
00BA: show_text_styled GXT 'MISS_010' time 1000 style 2
fade 0 1000
wait 2000
start_mission 9
end_thread

Номера миссий для Свита будут 5, 6, 7, 8, 9. Следовательно в списке "DEFINE MISSIONS" будут номера и метки миссий. Для примера пусть будет такой список:

//...
DEFINE MISSIONS 10
DEFINE MISSION 0 AT @MISSION_CJ_1
DEFINE MISSION 1 AT @MISSION_CJ_2
DEFINE MISSION 2 AT @MISSION_CJ_3
DEFINE MISSION 3 AT @MISSION_CJ_4
DEFINE MISSION 4 AT @MISSION_CJ_5
DEFINE MISSION 5 AT @MISSION_SWIT_1
DEFINE MISSION 6 AT @MISSION_SWIT_2
DEFINE MISSION 7 AT @MISSION_SWIT_3
DEFINE MISSION 8 AT @MISSION_SWIT_4
DEFINE MISSION 9 AT @MISSION_SWIT_5
//...

И, что бы метки появлялись в начале игры, активируем метки в потоке "MAIN":

//...
$MISSION_CJ_TOTAL = 0
$MARKER_X_CJ = 2498.2966
$MARKER_Y_CJ = -1684.5094
$MARKER_Z_CJ = 12.41

$MISSION_SWIT_TOTAL = 0
$MARKER_X_SWEET = 2516.5918
$MARKER_Y_SWEET = -1674.5015
$MARKER_Z_SWEET = 12.973

create_thread @STARTER_CJ
create_thread @STARTER_SWIT
end_thread
//...

Теперь при начале новой игры появляться 2 маркера с иконкой "CJ" и "S". Если стать на одну из них, то будут запускаться миссии в зависимости от того на какую метку стал игрок.

Таким образом мы предоставили игроку выбор. Это очень важно, так как если игрок никак не может выполнить миссию, то он может свободно двигаться дальше, пройдя другие миссии а затем вернутся и завершить миссию, на которой он застрял ранее.

Как сделать, что бы при прохождении 2-х миссий CJ, открывались миссии SWIT? Это очень просто сделать. В потоке "MAIN" удаляем или закомментируем строку "create_thread @STARTER_SWIT":

//...
$MISSION_CJ_TOTAL = 0
$MISSION_SWIT_TOTAL = 0
$MARKER_X_CJ = 2498.2966
$MARKER_Y_CJ = -1684.5094
$MARKER_Z_CJ = 12.41
$MARKER_X_SWEET = 2516.5918
$MARKER_Y_SWEET = -1674.5015
$MARKER_Z_SWEET = 12.973
create_thread @STARTER_CJ
//create_thread @STARTER_SWIT удаляем эту строчку и не позволяем запустится стартеру сначала игры
end_thread
//...

Дальше находим в блоке миссий "MISSION_CJ_2" и запускаем стартер для миссий Свита в месте, где миссия CJ считается пройденной. Вот код:

//...
:MISSION_CJ_2_29_57
increment_mission_attempts
$ONMISSION = 1
fade 1 1000
wait 1000

//
{ mission block }
//

gosub @MISSION_CJ_2_END
030C: progress_made += 1
00BA: show_text_styled GXT 'M_PASS' time 5000 style 1 // MISSION PASSED
$MISSION_CJ_TOTAL += 1
0318: set_latest_mission_passed 'MISS_02' // GXT mission name
create_thread @STARTER_SWIT // Вставляем запуск сюда
create_thread @STARTER_CJ
return

:MISSION_CJ_2_29_144
wait 0
gosub @MISSION_CJ_2_END
//...

Перерь в начале игры будет только миссии CJ. После прохождения 2-й миссии CJ появится маркер Свита и можно уже выполнять миссии Свита. По аналогии вы можете создать свои стартеры и миссии, но сначала продумайте ход событий :) В следующем уроке мы погорим о стартерах в Cleo. С вами был wmysterio, спасибо за внимание!|717|1|0||rabota_so_starterami_main_scm_chast_2|1499618913

Previous00062. Работа со стартерами ( MAIN.SCM - Часть 1 )Next00054. Внешние скрипты в main.scm

Last updated 3 years ago

Was this helpful?

Дальше нам уже нужно написать блок миссий. Они должны идти в том порядке, в котором написано в "DEFINE MISSIONS". Используя шаблон в предыдущем уроке напишем миссии для СJ и SWIT. Код блока я сохранин в текстовом файде, который можно скачать .

здесь