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

Введение в скриптинг [Уроки по созданию модов GTA SA]

Добавлено: 21 фев 2019, 20:58
Vovka
Первое, что должно быть у скриптера, это программа для компиляции/декомпиляции файла MAIN.SCM. Желательно пользоваться очищенным мейном, т.к. под оригинальный практически любой новый код рано или поздно вызовет ошибку.
Да и “читать” оригинальный мейн даже опытному скриптеру тяжело, поэтому берите чистый main.txt из этого архива.
Сразу советую скриптить в Sanny Builder (далее SB). На данный момент это самая лучшая (по моему мнению) программа с постоянными обновлениями.

ПОТОКИ (thread’s)
каждый поток начинается с двоеточия, например :MAIN_100
В каждом потоке c проверками должна быть задержка, например:
:MAIN_100
wait 100 ms
если пауза будет отсутствовать, то игра зависнет.

В конце каждого кода должна стоять команда end_thread, также, начиная новый поток, вы должны прописать ему название, например thread “MAIN”. Координаты узнаются с помощью позиции игрока. То есть если вы хотите, чтобы тачка стояла у дома CJ, то встаньте рядом с домом CJ и в SB нажмите Insert+CTRL+C и компилятор выдаст вам координаты :)

АКТЁРЫ (actor)
Под актёрами подразумеваются всё, от обычных пешеходов до игрока (player).
В игре их огромное количество, их ID начинается с 7 до 288.
Для создания требуется загрузить модель, также требуется проверка.

Набор команд:
Model.Load(30) //загрузка
Model.Available(30) //проверка
$10950 = Actor.Create(CivMale, 30, 0.0, 0.0, 0.0) //создание

Спец. Актёры (special actor)
По сути те же актёры, но для их создания используются специальные опкоды (команды). В остальном команды одинаковы.

Набор команд:
023C: load_special_actor 1 'RYDER2' //загрузка. Внимание, мы загружаем Райдера как спец. Актёра под номером “1”
023D: special_actor 1 loaded //проверка
$10950 = Actor.Create(CivMale, 290, 0.0, 0.0, 0.0) //создание
0296: unload_special_actor 1 //выгружаем из памяти актёра под номером “1”

ТРАНСПОРТ (car)
Под словом “car” подразумевается байк, лодка, тачка, самолёт и тд.
По сути, команды с байком и тачкой одинаковы, хотя бывают исключения.
Соответственно, для загрузки моделей используются одни и те же команды

Набор команд:
Model.Load(#ADMIRAL) //загрузка
Model.Available(#ADMIRAL) //проверка
0@ = Car.Create(#ADMIRAL, 0.0, 0.0, 0.0) //Создание

ИГРОК (player)
Как было сказано выше, большинство команд как для актёра, так и для игрока одинаковы. Однако есть специальные команды, созданные специально для Игрока
Перечислю самые часто используемые:
01B4: set_player $PLAYER_CHAR frozen_state 0 //замораживаем/размораж. игрока, обычно используется для заставок.

Player.Defined($PLAYER_CHAR) //проверка, существует ли игрок.
Player.Money($PLAYER_CHAR) += 200 //прибавляем денег игроку.
Player.ClearWantedLevel($PLAYER_CHAR) //очищаем уровень розыска.

ПРОВЕРКИ (оператор if)
Проверки-очень полезная вещь в скриптинге. И очень много опкодов, проверяющих различные параметры.
Например, если игрок находится вне миссии и у него меньше половины жизней, то пополняем ему здоровье,
Осуществляется это таким скриптом:

:MYLABEL_1
wait 100
thread "HEALTH"

:MYLABEL_2
wait 100
if AND

Player.Defined($PLAYER_CHAR) //существует ли игрок
$ONMISSION == 0 //не запущена ли миссия
8184: NOT actor $PLAYER_ACTOR health >= 50 //жизней меньше 50-и
jf @MYLABEL_2 //если эти условия неверны, то переходим в начало потока, если всё верно, то этот переход игнорируется.
055E: set_player $PLAYER_CHAR max_health += 500
0223: set_actor $PLAYER_ACTOR health_to 500
end_thread

ОБЪЕКТЫ (objects)
Через мейн можно создать любой объект, прописанный в IDE. Но сначала его нужно загрузить.
Вот основные команды для работы с ними:
Model.Load(#CIGAR) //загрузка
Model.Available(#CIGAR) //Проверка
// Обратите внимание, что для загрузки\проверки транспорта, объектов и подобного используются одинаковые //команды.
60@ = Object.Create(#CIGAR, 0.0, 0.0, 0.0) //Создание
Object.Destroy(60@) //Удаление

ПИКАПЫ (pickups)
В GTA существует множество различных пикапов, сейчас мы перечислим основные типы:
Это опкод создания пикапа:
0213: $669 = create_pickup #INFO type 3 at 0.0 0.0 0.0

Часть команды ‘Type’ означает время обновления пикапа:

1 – пикап для бронежилета.
2 – Полицейская Звездочка.
3 – Пикап появляется один раз.
4- Адреналин.
5 – Пикап сохранения.
15 – Пикап появляется через 6 часов после использования.

ПИКАПЫ ОРУЖИЯ (weapon pickups)

Если вы хотите создать пикап оружия, то команду следует оформить иным образом.
Для создания пикапа оружия ближнего боя следует использовать такую команду:
0213: $1 = create_pickup 341 type 15 at 0.0 0.0 0.0
Где ‘341’, это ID оружия (в данном случае бензопила).
Заметьте, при создании пикапа оружия загружать модель не надо (в отличие от того случая, если вам надо непосредственно дать оружие актёру).

Теперь перейдем к огнестрельному оружию:
Обратите внимание, тут используется уже другой опкод.
032B: $1 = create_weapon_pickup 366 15 ammo 999 at 0.0 0.0 0.0
‘366’ – ID оружия, параметр ‘ammo’, в данном случае 999, указывает кол-во патронов в оружии.

ОРУЖИЕ (weapons)
Чтобы дать определенному актеру оружие, следует использовать определенный опкод:
01B2: give_actor 2@ weapon 28 ammo 60 // Даём актёру 2@ оружие с ID 28 с амуницией 60
Обратите внимание, что прежде чем дать оружие актёру, его следует загрузить, более того, ID оружия при загрузке и ‘выдаче’ актёру разный, но weapons ID загрузки и создания можно узнать в help’e SB, но для удобства выкладываю их тут:

gift type weapons
10 321 #gun_dildo1
11 322 #gun_dildo2
12 323 #gun_vibe1
13 324 #gun_vibe2
14 325 #flowera
15 326 #gun_cane
melee weapons
1 331 #brassknuckle
2 333 #golfclub
3 334 #nitestick
4 335 #knifecur
5 336 #bat
6 337 #shovel
7 338 #poolcue
8 339 #katana
9 341 #chnsaw
projectiles
16 342 #grenade
17 343 #teargas
18 344 #molotov
handguns
22 346 #colt45
23 347 #silenced
24 348 #desert_eagle
shotguns
25 349 #chromegun
26 350 #sawnoff
27 351 #shotgspa
sub-machineguns
28 352 #micro_uzi
29 353 #mp5lng
machineguns
30 355 #ak47
31 356 #m4
32 372 #tec9
rifles
33 357 #cuntgun
34 358 #sniper
specials
35 359 #rocketla
36 360 #heatseek
37 361 #flame
38 362 #minigun
39 363 #satchel
41 365 #spraycan
42 366 #fire_ex
43 367 #camera
44 368 #nvgoggles
45 369 #irgoggles
46 371 #gun_para
Other
370 #jetpack

И так, вот пример загрузки и выдачи оружия актёру:

:LABEL
Model.Load(348)
:LABEL_2
if AND
Model.Available(348)
jf @LABEL_2
01B2: give_actor $PLAYER_ACTOR weapon 24 ammo 60
end_thread

Тут мы дали игроку Дезерт Игл с 60 патронов.