Эта тема ещё не полностью раскрыта,поэтому опишу,наверное,самую малую её часть.
"External" в переводе с английского означает "внешний".Внешние скрипты - это скрипты хранящиеся в файле "script.img", который лежит в одной папке с "Main.scm",но для нас это не важно,
потому что любой билдер для Сан Андреаса поддерживает работу с внешними скриптами через
"Main.scm",наверняка Вы встречали в коде Main'a к-л информацию о внешних скриптах,весь конец
кода Main'a состоит из них,но про дописывание свох внешних скриптов потом.Сейчас я расскажу,
как использовать уже готовые,или как я модифицировал некоторые из них:
Давайте начнём с самого первого внешнего скрипта - парашут для игрока:
ПАРАШУТ ДЛЯ ИГРОКА
Покапавшись немного в нём я переписал его так,что как бы CJ не падал с парашутом,ему ничего
не будет,вот описание по установке:
1) Если вы не используете оригинальный Main.scm,то переходите ко второй части установки,а
если используете оригинальный,то сначало находим label ":INTRO_7264",затем в нём находим
строку с текстом "create_thread @A_TERM", и после нёё вставляем :
create_thread @MaxHealth
Затем находим строку с текстом --Mission 0-- и перед ней вставляем :
2 )Если максимальная жизнь игрока маленькая,как в самом начале,то создаём поток,там где
и всегда , с именем MaxHealth , затем находим строку с текстом --Mission 0-- и перед
ней вставляем :
Теперь компилируем,запускаем игру и падаем сколько влезет !!!
Если что-то непонятно,то вопросы ко мне на http://Missions.GTAmaps.net
ПАРАШУТ ДЛЯ АКТЁРОВ
Второй скрипт про парашут для актёров мало чем отличается от первого,вот только его можно
прицеплять.
Чтобы прицепить скрипт к актёру,надо сначало его загрузить:
08A9: load_external_script 1 (PARACHUTE) // весь список скриптов приведён в начале Main'a
После того,как мы загрузили скрипт,надо же ещё создать актёра,который будет его выполнять,
чтобы актёр использовал скрипт нужна данная команда:
1 - номер скрипта
-1 - что-то типа времени,если ставить 0,то вообще ничего не будет
-5.0 - скорость снижения актёра без парашута,если (-) поменять на (+),то актёр полетит вверх
10.0 -5.0 - вот эти 2 параметра указывают на принадлежность раскрытого парашута к игроку,
если их выставить по 0.0 ,то актёр будет лететь,как если игрок летит с нераскрытым пара-
шутом и мы жмём клавишу "Назад",предыдущий параметр скорости снижения уже не будет действо-
вать,если парашут раскрыт
-1.0 - а будет действовать вот этот,который показывает скорость снижения актёра с раскрытым
парашутом
5.25 - показывает на сколько сместится актёр,если парашут откроется
6.75 - это скорость смещения,поставьте 50(+) и увидите эффект ракеты !
1 - если 0,то актёр летит с нераскрытым парашутом,и все параметры должны быть выставлены
соответственно:
Можно менять только первый 0.0 скорость смещения вниз/вверх,если 1,то у актёра парашут от-
крыт,почитайте выше,а вообще-то этот параметр когда нужен,а когда нет.
$Act - имя актёра,который будет выполнять скрипт
Это очень непонятная команда,SB вообще пишет,что в ней 32 параметра должно быть,так что пой-
мите сами,что абсолютно всего я не знаю.
Вот вам пример:
create_thread @ParaTest // создаём поток
araTest // начинаем поток
wait 0 // ждём 0 мс,если не напишем,то может повиснуть
if // условие
player.Defined($PLAYER_CHAR) // проверка(игрок существует)
jf @ParaTest // если не существует,то прыгаем на начало
wait 3000 // ждём 3 сек
04C4: create_coordinate 1@ 2@ 3@ from_actor $PLAYER_ACTOR offset 0.0 0.0 1500.0
// создаём точку на большой высоте от игрока
0376: $Act = create_random_actor 1@ 2@ 3@ // создаём в этой точке случайного актёра
actor.LockInCurrentPosition($Act ) = true // закрепляем актёра в данной позиции
08A9: load_external_script 1 // загружаем наш скрипт
araTest_2 // создаём второй label
wait 0 // ждём 0 мс,если не напишем,то может повиснуть
if // условие
08AB: external_script 1 loaded // проверка(скрипт 1 уже загружен)
jf @ParaTest_2 // если ещё не загружен,то переходим на начало label'a
actor.LockInCurrentPosition($Act ) = false // делаем актёра не закреплённым
wait 400 // ждём немного
0913: run_external_script 1 -1 -59.0 0.0 0.0 0.0 0.0 0.0 0 $Act // запускаем скрипт с па-
// раметрами,соответствующими просому полёту
02A3: toggle_widescreen 1 // включаем широкий экран
araTest_3 // создаём третий label
wait 0 // ждём 0 мс,если не напишем,то может повиснуть
0819: 16@ = actor $Act distance_from_ground // измеряем расстояние от актёра до земли
04C4: create_coordinate 4@ 5@ 6@ from_actor $Act offset 0.0 -2.0 10.0 // создаём коорд-ы
camera.SetPosition(4@,5@,6@,0.0,0.0,0.0) // ставим по ним камеру
camera.OnPed($Act,15,2) // и направляем на актёра
if //
16@ < 200.0 проверка (если позиция актёра меньше,чем 200)
jf @ParaTest_3 // если проверка не выполнилась,т.е высота больше,чем 200,то прыгаем к на-
// чалу label'a
camera.Restore_WithJumpCut // восстанавливаем нормальную позицию камеры
02A3: toggle_widescreen 0 // выключаем широкий экран
actor.PutAt($Act,0.0,0.0,0.0) // помещаем актёра туда,откуда он больше не вернётся
actor.RemoveReferences($Act) // удаляем все сведения об актёре
end_thread // и завершаем поток
Ещё пример,но тут актёр уже летит на парашуте :
Комментировать небуду,потому что это практически тоже самое,что и предыдущий,скажу только,
что основное отличие в в строке 0913: run_external_script... Думаю,что сами разберётесь:
И под конец скажу,что:
0913: run_external_script 1 -1 -59.0 0.0 0.0 0.0 0.0 0.0 0 $Act // эту команду используйте,
чтобы получить эффект парашута,как в первом примере.
0913: run_external_script 1 -1 -5.0 10.0 -5.0 -1.0 5.25 6.75 1 $Act // эту команду исполь-
зуйте,чтобы получить эффект парашута,как во втором примере.
РАЗНЫЕ
Рассмоттрим скрипт "VENDING_MACHINE" про автомат напитков,тут интерестые только 2 вещи:
узнаём стат наетости CJ'я,это стат под номером 245 ,
команда блокировки клавиши: 07CC: player $PLAYER_CHAR disable_key_15 1
Но,увы,каким образом заставить эту команду работать,я не знаю,если вы узнаете как,то скажите
пожалуйста мне.
Ну давайте изменим ,хоть чуть-чуть, этот скрипт:
Ищем label с именем :VENDING_1210 ,находим в нём строку с текстом 0623: add 5 to_stat 245 ,
число 5 изменяем на ,допустим, 100 ,и там где написано $3396 += 30 ,меняем число 30 на 1000 .
Результат таков,что CJ будет пополнять своё здоровье по максимуму и сразу будет наедаться.
ДЕЙСТВИЯ НАД ВНЕШНИМИ СКРИПТАМИ
08E8: assign_external_script_handle 'DEALER' to_actor_model #BMYDRUG - данная команда
заставляет всех актёров с моделью #BMYDRUG выполнять скрипт 'DEALER',скрипт торговца крэком.