External scripts

Скриптинг GTA. Инструкции по скриптингу в GTA.
Сообщение
Автор
Аватара пользователя
Не в сети
Vovka
Автор темы
Продвинутый
    • Подробная инфа
      • Сообщения: 70
        Зарегистрирован: 28 ноя 2011, 08:07
        Поблагодарили: 4 раза
        Репутация: 3

#1 Сообщение Vovka » 16 ноя 2011, 14:14

Во-первых скажу что это вообще такое.
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 // возвращаемся в начало, для повторного запуска скрипта после сохранения.

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


Аватара пользователя
Не в сети
kostya
Игрок
    • Подробная инфа
      • Сообщения: 21
        Зарегистрирован: 28 ноя 2011, 02:56
        Репутация: 0

Re: External scripts

#2 Сообщение kostya » 04 янв 2012, 13:04

Всё это конечно хорошо, :good:


Вернуться в «Скриптинг в GTA San Andreas»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость