Итак поeхали !!!
В тексте вы можете встретить слова в двойных кавычках,кавычки существуют только для удобства
чтения,писать их в контексте билдера не надо !!!
Для скриптинга в SA применяется программа Sanny Builer,дальше просто SB,есть ещё и BW's builder,
но про него я ещё не написал учебник.Всё,что Вы прочтёте относится к SB версии не меньше,чем
2.97.Если вы его ещё не закачали,то берите на http://www.sannybuilder.com
Запустите SB,в меню выбирите категорию "Tools",в ней найдите графу "Options",кликните на неё.
Появится окно,найдите там опцию "GTA SA directory" и укажите там путь к вашему установленному
SA,когда выбрали,то нажмите "OK".Нажмите "F5" и выбирите,где находится главный файл скрипта-
main.scm.Он лежит в:"Директория GTA SA/data/sript",следом нажмите "Open".
Вот он и раскомпилировался,и вы увидили кучу цифер и слов.Весь скрипт состоит из команд.Вся
команда записывается в одну строку.Раньше каждая команда состояла из опкода и параметров.
Например:
009A: $act = create_actor 4 #WMYCR at $x $y $z
009A-это опкод,он покзывает,какое действие должно выполнятся
$act-это актёр(или прсто чувак),
4-это тип актёра,типы описал в главе "Актёры",
#WMYCR-это модель актёра,
$x $y $z-это координаты актёра на карте,они должны всегда быть с точкой,т.е. должны быть округ-
лены как минимум до десятых.
009A: $act = 4 #WMYCR $x $y $z - я мог-бы написать и так,т.к. только параметры играют роль в
команде с опкодом,а в команде без опкода(о них позже) такого делать нельзя.
Весь раскомпилированный main.scm состоит из thread'ов,и миссий,которые в свою очередь,тоже явл.
thread'ами.Написание миссий-самое сложное в скриптинге.Thread'ы ещё называют потоками.Все
переменные (имена актёров,машин,координаты...)должны начинатся со знака $(можно использовать
во всём тексте Main'a),или они должны оканчиваться знаком @(можно использовать только в том
потоке,где объявили),по поводу типов данных всё написано в главе "Математика".
Сейчас (08.2006) в Sanny преимущественно используется новый тип опкодов без команд.Вот тот-же
самый опкод,что я описал раньше,но теперь под теперешний SB:
actor.Create($act,4,#WMYCR,$x,$y,$z)
Видите,практически тоже самое,только намного удобнеее,вам надо написать только кодовое слово,
типа actor,car или object ... ,затем поставить точку, и вы увидите небольшое меню,с действиями
которые можно делать с этим типом предмета.
Потоки состоят из label'ов.Label-это как-бы самостоятельная часть потока,label можно определить
по такому контексту : он стоит один в строке и начинается всегда с двоеточия,название любого
потока определяется по названию его первого label'a.
Чтобы создать поток надо найти строку с текстом create_thread,затем после неё в следующей строке
вставить create_thread @"Название вашего потока",кавычек не надо.Следом надо найти строку с
текстом -Mission 0- и перед ней написать :
1) Название того скрипта,который вы объявили командой create_thread @.
2) обязательно написать команду wait 0 ,вместо нуля можно написать любое время(в миллисекундах),
после которого пойдёт выполнение вашего потока.
3) Каждый поток должен заканчиваться строкой с текстом end_thread .
Например:
Я нашёл строки,частью которых есть выражение create_thread @,после них вставил строку
create_thread @Test
Затем нашёл строку -Mission 0-
Выше неё написал
:Test
wait 0
---------- Тут надо писать то,что делает поток -------------
end_thread
Чтобы использовать актёров,машины,объекты в своём потоке,надо сначало загрузить их модели.
Это делается с помощью нескольких команд:
1) model.load(#WMYCR) , где #WMYCR-модель актёра,которая нужна.
2) 038B: load_requested_models ,эта команда загружает ранее объявленые модели(у нас это модель
#WMYCR).
Можно написать сколько угодно model.load(#нужная модель),но после того,как вы объявили нужные
модели всегда надо писать команду 038B: load_requested_models,иначе игра вылетет.
Всегда надо писать проверку на загрузку модели,а то если модель ещё не загрузилась,а вы уже с ней
что-то делаете,то игра вылетит.Вот пример стандартного содержания потока (начало,загрузка моделей,проверка на загруженность,конец):
Как всегда создаём поток(как это делать писалось раньше),а теперь:
:Test //название потока или его 1-го label'a
wait 0 //ждём 0 миллисек.(1 сек.=1000 мсек.)
model.load(#нужная модель № 1)
model.load(#нужная модель № 2)
model.load(#нужная модель № n) //записываем нужные для потока модели
038B: load_requested_models //загружаем нужные для потока модели
:Test_2 //Это новый label
wait 0 //ждём 0 миллисек.
if and //if and-команда начала условия,все подусловия которого выполняются.
model.Available(#нужная модель № 1) // Подусловие
model.Available(#нужная модель № 2) // Подусловие
model.Available(#нужная модель № n) // Подусловие
jf @Test_2 // jf означ.,что если эти подусл. не выполнились,то
//-- Тут надо писать то,что делает поток -- выполнение потока переходит к началу проверки
Model.Destroy(#нужная модель № 1) // в конце каждого потока надо выгружать модели из
Model.Destroy(#нужная модель № 2) // памяти,а то они там остаются и загрязняют её
Model.Destroy(#нужная модель № n)
end_thread // Конец потока
По поводу условий всё написано в главе "Условия и переходы".
Чтобы применить всё,что вы написали надо нажать "F7" (компиляция),затем запустить SA,нажав "F8",
каждый раз после новой компиляции надо начинать новую игру,если будете грузить свои сохранения,
то игра в конце загрузки просто выдаст ошибку и вылетит.
Чтобы определить координаты в игре используется Coords Manager,это часть SB.Если SA запущен,то
по нажатию "F4",когда окно SB явл. активным,появится дополнительное окошко в окне SB,в котором
будут написаны координаты игрока,с помощью Coords Manager'a можно устанавливать координаты иг-
рока,просто введите нужные и нажмите "Set",и игрок переместится в заданную точку.