Страница 1 из 1

External scripts [Уроки по созданию модов GTA SA]

Добавлено: 21 фев 2019, 20:58
Vovka
Во-первых скажу что это вообще такое. External script - это тот же самый поток(thread), таким способом можно поставить почти любой скрипт, например спидометр, только добавляется он и запускается почти так же как и миссия. Для него так же как и для миссий нужен тригер или по-русски стартер.

Во-вторых External script загружается по необходимости. В игре External script это: парашют, магазины, бильярд, баскетбол, управление кранами и т.д.

После сохранения External script завершает свою работу, и его надо запускать снова. Количество допустимых External script’ов 82-е штуки.

Теперь на примере покажу добавления External script.
1) Ищем в майне такую строчку: DEFINE EXTERNAL_SCRIPTS ХХ (ХХ любое число от 0 до 82-ух) добавляем к ХХ одну еденицу, напремер было 78, стало 79. Это мы обьявили кол-во External script.

2) Ищем в майне такую строчку: 0914: init_external_script 0 (PLAYER_PARACHUTE) Пролистываем в низ до последнего такого опкода. Теперь вставляем 0914: init_external_script ХХ (My_script) // где ХХ число от последнего опкода(0914), но с прибавленой еденицей, например было 77, стало 78. Имейте в виду что, отчёт начинается с 0, а не с еденици. Этим действием мы дали порядковый номер нашему скрипту.

3) Теперь переходим в самый конец майна. И добавляем наш скрипт, например возьмем скрипт штрафа.


//-------------External script ХХ (My_script)---------------
:AREST_2
thread 'AREST_2'
wait 1000
0004: $cost_of_property_damaged_2_all = 0 // integer values

:AREST_2_1
wait 100
if
Player.Defined($PLAYER_CHAR)
else_jump @AREST_2_1
if
0038: $ONMISSION == 0
else_jump @AREST_2_1
if
010F: player $PLAYER_CHAR wanted_level > 0
else_jump @AREST_2_1
wait 1000
0004: $cost_of_property_damaged_1 = 0 // integer values
0004: $cost_of_property_damaged = 0 // integer values
04F7: status_text $cost_of_property_damaged 0 line 1 'BB_18' // Score

:AREST_2_2
wait 1000
00D6: if
8741: NOT (unknown) $PLAYER_ACTOR
jf @AREST_2_minus_1
if and
010F: player $PLAYER_CHAR wanted_level > 0
8118: NOT actor $PLAYER_ACTOR dead
jf @AREST_3_1
0653: $cost_of_property_damaged = stat 125 // float
008C: $cost_of_property_damaged = float_to_integer $cost_of_property_damaged
0060: $cost_of_property_damaged -= $cost_of_property_damaged_2_all // integer values
jump @AREST_2_2

:AREST_2_minus_1
wait 500
0058: $cost_of_property_damaged_1 += $cost_of_property_damaged // integer values
0010: $cost_of_property_damaged_1 *= 2 // integer values
0060: $cost_of_property_damaged -= $cost_of_property_damaged_1 // integer values
0109: player $PLAYER_CHAR money += $cost_of_property_damaged
0151: remove_status_text $cost_of_property_damaged
wait 500
0653: $cost_of_property_damaged_2_all = stat 125 // float
008C: $cost_of_property_damaged_2_all = float_to_integer $cost_of_property_damaged_2_all
jump @AREST_2_1

:AREST_3_1
wait 1000
0151: remove_status_text $cost_of_property_damaged
0653: $cost_of_property_damaged_2_all = stat 125 // float
008C: $cost_of_property_damaged_2_all = float_to_integer $cost_of_property_damaged_2_all
jump @AREST_2_1


4) А вот это стартер скрипта: Добавляется как обычный thread (ХХ - это порядковый номер нашего скрипта, не забудьте поменать на нужную цифру) Учтите, что для запуска скрипта желательно "главное" условие, т.е. для скрипта штрафа это условие является:
010F: player $PLAYER_CHAR wanted_level > 0 (имеет ли Cj хотябы одну звезду розыска)
И когда звёзд у игрока нет, то именно стартёр прекращяет действие скрипта, и запустит его когда игрок наберёт хотябы одну звезду.

:MAIN_4340
thread "zapusk_ExSCRIPTS"
wait 250
00D6: if
010F: player $PLAYER_CHAR wanted_level > 0 // проверяем наличие звёзд
004D: jump_if_false @MAIN_4414
0926: $EXTERNAL_SCRIPT_STATUS = external_script_status 0 (My_script) //получаем статус нашего скрипта.
00D6: if
0038: $EXTERNAL_SCRIPT_STATUS == 0 // проверяем на включенность, если он не включен то включаем.
004D: jump_if_false @MAIN_4340
08A9: load_external_script XX (My_script) //загружаем скрипт
00D6: if
08AB: external_script XX (My_script) loaded //проверяем, загрузился ли скрипт
004D: jump_if_false @MAIN_4340
0913: run_external_script XX // включаем скрипт
0002: jump @MAIN_4340 // возвращаемся в начало, для повторного запуска скрипта после сохранения.

:MAIN_4414
090F: end_external_script XX (My_script) //завершаем работу скрипта в случаи необходимости.
0002: jump @MAIN_4340 // возвращаемся в начало, для повторного запуска скрипта после сохранения.

Экспериментируйте.

External scripts [Уроки по созданию модов GTA SA]

Добавлено: 23 фев 2019, 16:20
Гость
Всё это конечно хорошо, :)