Как написать моды на гта сан андреас

34 Kb

Любому игростроевцу, который захочет сделать мод для San Andreas, придется продираться через густые скриптовые заросли. Ведь с помощью скриптов можно изменить практически любую игровую составляющую. Хотите добавить в SA безбашенную мини-игру? Не вопрос. Желаете сделать собственный ролик на игровом движке или новую миссию? Тоже не проблема. Главное, научиться разбираться в принципах скриптописания.

Теорию и общие вопросы мы регулярно разбираем в “Самопале” (смотрите цикл статей “Игровое программирование”), на страницах же “Мастерской” займемся целенаправленным изучением скриптового языка конкретно GTA: SA.

Сегодня мы разберемся с основами языка программирования игры и научимся создавать несложные модификации. Самая популярная и распространенная программа для скриптинга под San Andreas — SAMB. Возможности этого редактора безграничны. Впрочем, нет, есть одно серьезное ограничение — ваша фантазия. Но тут мы вам, увы, не помощники. Зато разобраться в редакторе поможем легко. Забирайте SAMB с нашего диска и внемлите.

Важное отступление. При написании скриптов очень большое значение имеет количество пробелов, которое стоит между теми или иными элементами скрина. В статье для удобства восприятия везде стоит по одному пробелу, но если вы хотите, чтобы мод работал, число пробелов должно быть “правильным”. Для этого отправляйтесь на наш диск, где выложены исходные скрипты.

Первый запуск

Во время первого запуска редактора вам необходимо указать директорию с установленной игрой, после чего программа запустится автоматически (в ранних версиях редактора директорию указывать не нужно). Ознакомимся с интерфейсом программы.

Большую часть редактора занимает текстовое окно (пока оно серое), где мы и будем создавать что-то новое или редактировать уже существующее. Над этим окном располагается очень удобная панель инструментов. Откройте файл main.scm, располагающийся в подпапке игры: Data/Script — для этого в панели инструментов щелкните на значок папки со стрелочкой или зайдите в пункт меню File/Open. Перед вами появится подобие проводника Windows.

В правом окне вы должны указать путь к файлу main.scm. Например: C:GamesGtaSandatascript. После этого напротив поля File type выберите SCM-файлы. В результате в левом окне появится файл main.scm.

Щелкните по нему один раз и нажмите OK. Перед вами появится еще одно меню, в котором необходимо указать путь хранения файла (можно выбрать любой путь). Когда вы определитесь с местом хранения scm-файла, смело нажмите кнопку OK еще раз. Подождите несколько минут, пока программа переведет машинный код в читабельный язык программирования игры.

Синтаксис редактора

Ознакомимся с синтаксисом редактора. Если не соблюдать элементарные правила написания скриптов, то программа будет выдавать массу ошибок. Она просто не поймет, что вы хотите ей сказать.

Все миссии в GTA: SA представляют собой массу связанных между собой команд. Любая строка с необходимой командой, в свою очередь, состоит из трех частей, например 0417: start_mission $test.

35 Kb

Не горим и в воде не тонем!

Разберем эту строчку более подробно:

0417: — это код команды;

start_mission — сама команда, игнорируется редактором;

$test — переменная или число (числа).

Еще один пример: 03D8: show save screen. (03D8: — код команды; show save screen — команда).

Совсем не обязательно запоминать коды всех команд. В редактор встроена подсказка. Например, если вы напишите ключевое слово boat (лодка) и нажмете клавишу F1, программа автоматически подберет нужную команду:

02D3: boat $A88 drive to 171.0578 942.3843 6.0

Нажав клавишу F1 еще несколько раз, редактор будет подбирать коды команд с интересующим вас словом до тех пор, пока не закончатся все варианты. На слово boat будет выведено следующее:

02D3: boat $A88 drive to 171.0578 942.3843 6.0

02DB: set boat $A88 speed to 10.0

02D3: boat $A88 drive to 171.0578 942.3843 6.0

043a: start boat foam animation ;; never used in VC

043b: update boat $cutsceneanim foam animation ;; never used in SA

02D3: boat $A88 drive to 171.0578 942.3843 6.0

Чтобы посмотреть ключевые слова, как, например, в случае с лодкой, откройте документ Keywords, поставляющийся вместе с редактором.

Создание модификаций

Мы плавно подошли к самому ответственному моменту: созданию собственных модификаций. Для начала разберемся, из чего состоит файл любой миссий в San Andreas.

Файл main.scm состоит из четырех частей.

1 часть. Ставит размер памяти для скриптов — нужно только для редактора.

2 часть. Список используемых объектов в игре и скриптах.

3 часть. Указатели на миссии и внутриигровые блоки.

4 часть. Собственно код миссий, мини-игр, путей самолетов/вертолетов.

Пока нас не будут интересовать первые два блока — они не нужны, если вы не собираетесь создавать мегасложную миссию или совершенно новую игру.

Чтобы создать новую модификацию, нужно знать, как и с чего начать и чем закончить проект. Щелкните по “биноклю” в панели инструментов, в меню поиска введите 004F: create_thread ЈЈ и нажмите кнопку Find. Вы увидите список неизвестных пока вам команд. Давайте разберем на примере, как пишется мод.

004F: create_thread ЈЈIgromod1

004F: — это, как мы говорили чуть выше, код команды.

create_thread ЈЈ — это сама команда, отвечающая за создание потока, программы, ответственной за выполнение какого-либо действия, изменять команду нельзя!

Igromod1 — название нашего мода в файле main.scm.

52 Kb

Cj — настоящий медик. Хирург или патологоанатом…

Найдите то место, где заканчивается последняя команда, начинающаяся c 004F, и ниже вставьте свою строчку: 004F: create_thread ЈЈIgromod1;.

Обратите внимание, что символ ЈЈ необходимо копировать только из других команд: то, что вы напишете сами, программа не примет и выдаст ошибку при компиляции!

Далее в меню поиска (для быстрого вызова нажмите клавишу CTRL+F) введите слово orig и снова нажмите кнопку Find. Над строчкой:

;————-Mission 0—————

вы будете размещать все свои модификации, мини-игры, но не миссии — насчет этого будет отдельный разговор.

Любой блок, подпрограмма или мод начинается со строки Igromod1. Она играет роль идентификатора названия, которое вы писали выше. Название Igromod1 должно соответствовать названию Igromod1 в строке 004F: create_thread ЈЈIgromod1;.

Если названия не совпадут, то при компиляции — переводе языка программирования в машинный код игры — редактор снова выдаст ошибку, что блок не найден.

Ниже нужно написать строку с задержкой на определенное время, чтобы игра не зависла: 0001: wait 0 ms.

В моем случае задержка составила 0 мс, но если, например, вам нужно, чтобы какое-то действие выполнялось не сразу, то задержку можно увеличить.

Дальше начинается чистой воды эксперимент: Например, вы можете установить у игрока бесконечный бег:

0330: set player $PLAYER_CHAR infinite run to 1 (true)

Или сделать его (игрока, конечно) пожароустойчивым:

055D: make player $PLAYER_CHAR fireproof 1

А ведь можно и перекрашиваться совершенно бесплатно:

0335: set free paynspray to 1 (true)

Дадим игроку побольше денег — с ними в SA всегда были проблемы:

0109: player $PLAYER_CHAR money += 9000000

Вам мало брони и жизней — увеличим их стартовый набор на 100 единиц, мало не покажется:

035F: set_actor $PLAYER_ACTOR armour_to 100

055E: set_player $PLAYER_CHAR max_health += 100

Зачем ждать, пока нам в игре любезно предоставят реактивный ранец, создадим его около нашего дома (gRoove Famile Streets) сами!

032B: $jet = create_weapon_pickup 370 15 ammo 1 at 2488.562 -1666.864 12.8757

52 Kb

То, что вы должны увидеть при успешной декомпиляции скрипта.

Загадочные цифры 2488.562 -1666.864 12.8757 представляют собой координаты, по которым будет создан jetpack. О координатах и других непонятных цифрах в этой команде речь пойдет во второй статье цикла.

Думаю, быстрая перезарядка ствола придется всем по вкусу:

0331: unknown_player $PLAYER_CHAR set_fast_reload 1

Самое время научиться менять привычную одежку игрока. Изменить одежду главного героя на любую другую не так сложно. Для смены одежды игрока используются вместе две нижеуказанные команды:

087B: set_player $PLAYER_CHAR clothes «VEST» «VEST» 17

070D: $PLAYER_CHAR

Первая задает игроку определенную одежду, а вторая “обновляет” модельку персонажа.

Дадим игроку возможность рассекать по всему игровому миру без ограничений с самого начала игры:

0629: change_stat 181 (islands unlocked) to 4

И напоследок повысим скиллы персонажа до максимума:

062A: change_stat 165 (energy) to 999.0 ; float

062A: change_stat 23 (muscle) to 999.0 ; float

062A: change_stat 21 (fat) to 0.0 ; float

062A: change_stat 163 (health upgrade) to 999.0 ; float

062A: change_stat 160 (driving skill) to 999.0 ; float

062A: change_stat 229 (bike skill) to 999.0 ; float

062A: change_stat 223 (pilot skill) to 999.0 ; float

062A: change_stat 230 (cycling skill) to 999.0 ; float

Завершение проекта

Знаний для создания первого несложного мода вам уже хватит. Но чтобы модификация заработала, нужно еще написать команду, которая завершит работу после создания всех бонусных вещей. Выглядит она так: 004E: end thread.

49 Kb

Вид на наше творение из игры.

Если вы решили создать мод, содержащий все модификации, описанные в статье, то в итоге у вас должно получиться следующее:

:Igromod1

0001: wait 0 ms

0330: set player $PLAYER_CHAR infinite run to 1 (true)

055D: make player $PLAYER_CHAR fireproof 1

0335: set free paynspray to 1 (true)

032B: $jet = create_weapon_pickup 370 15 ammo 1 at 2488.562 -1666.864 12.8757

0109: player $PLAYER_CHAR money += 9000000

035F: set_actor $PLAYER_ACTOR armour_to 100

055E: set_player $PLAYER_CHAR max_health += 100

0629: change_stat 181 (islands unlocked) to 4

062A: change_stat 165 (energy) to 999.0 ; float

062A: change_stat 23 (muscle) to 999.0 ; float

062A: change_stat 21 (fat) to 0.0 ; float

062A: change_stat 163 (health upgrade) to 999.0 ; float

062A: change_stat 160 (driving skill) to 999.0 ; float

062A: change_stat 229 (bike skill) to 999.0 ; float

062A: change_stat 223 (pilot skill) to 999.0 ; float

062A: change_stat 230 (cycling skill) to 999.0 ; float

087B: set_player $PLAYER_CHAR clothes «countrytr» «countrytr» 17

070D: $PLAYER_CHAR

004E: end thread

Последние штрихи — нажмите клавишу F7, редактор скомпилирует файл в формат, привычный для игры. Скопируйте его из папки, в которой хранится main.scm (путь для хранения файла main.txt и будущего main.scm вы указывали во второй менюшке, появляющейся при открытии файла main.scm из директории Data/Script установленной игры) в папку Data/Script игры. После чего запускайте San Andreas — и можете играть в модификацию.

* * *

Мы изучили основы скриптового языка GTA: SA. Научились работать с редактором SAMB. Даже с этим базовым уровнем знаний вы уже можете экспериментировать, используя данные текстового файла Keywords.

Мы прощаемся с вами до следующей статьи (будет опубликована в одном из ближайших выпусков “Мастерской”), в которой наши модостроительные интересы значительно расширятся — мы научимся манипулировать персонажами и транспортными средствами, создавать свои видеоролики, познакомимся с понятием цикличности и освоим еще множество интереснейших возможностей.

N1KО

Что такое скриптинг?

От слова script – сценарий, то есть последовательность каких-либо действий. А скриптинг – процесс создания этой последовательности. Для GTA это значит: писать миссии либо более простые вещи (например, давать игроку новые возможности). Тех, кто пишет скрипты, называют скриптерами. Основа любого скрипта – это опкоды (операционные коды), а они сами базируются на переменных, в которые записываются нужные для правильной работы скрипта значения (цифровые, то есть числа целые 1, 2, -1, -2… либо дробные, обязательно с точкой 1.2, -2.3; или аналоговые, то есть люди, авто, объекты). Могут иметь вид 0@, 1@, 2@…33@ или $0, $1, $2… или $»текст на латинице без пробелов и кавычек». Разница между @ и $ такая: первые переменные действуют лишь в рамках одного скрипта (или потока), а вторые можно спокойно использовать на всём протяжении main.scm (наглядный пример: $PLAYER_CHAR).
Как записать значение в переменную?
2@ = 0 // в переменную 2@ записан нуль
00BF: $1 = current_time_hours, $2 = current_time_minutes // в переменные $1, $2 записано текущее игровое время (часы, минуты соответственно).
009A: 2@ = create_actor_pedtype 4 model #MALE01 at 0.0 0.0 0.0 // в переменную 2@ записан актёр
00A5: 0@ = create_car #PONY at 0.0 0.0 0.0 // в переменную 0@ записана машина
Переменную, в которую записывают актёра или авто, принято называть именем. Т.е. в примерах выше 2@ – имя актёра, 0@ – имя транспорта.


Как открыть main.scm?

Самая удобная программа – Sanny Builder. Свежую версию можно найти на sannybuilder.com, и там же на форуме задать интересующий вопрос. Полезные советы: 1) если курсор стоит на модели (она отличается символом # в начале), то в нижней панели слева появляется ID; 2) в современном SB есть много ключевых слов, набрав которые и поставив точку, можно получить список доступных действий, например: Actor, Car, Model; 3) нажатие Сtrl+Alt+1 вызовет Редактор координат, где при запущенной игре будет отображаться текущее положение игрока, а также его можно использовать как телепорт; 4) нажатие Сtrl+Alt+2 вызовет список опкодов; 5) если компиляция скрипта выдала ошибку, не спеши кликать ОК, если не знаешь причину бага, а нажми для начала Помощь; 6) при первом запуске программы нажми F10 или зайди в Сервис > Настройки и выбери себе язык и обязательно укажи папку GTA SA.


 Как писать миссии?

Подробная справка прилагается к SB. Вызвать можно нажатием F12 или Справка > Помощь.


 Как припарковать транспорт и поставить пикап?

Проще через IPL, но некоторым не нравится, что там иногда угол поворота машины бывает не тот, который нужен. И главное: для этих опкодов модель загружать не нужно.
09E2: 0@ = parked_car_generator_w_numberplate #BF400 -1 -1 0 alarm 0 door_lock 0 0 10000 plate «HOMEP_69» at X Y Z angle 0.0 // или…
014B: 0@ = init_parked_car_generator #BF400 -1 -1 1 alarm 0 door_lock 0 0 10000 at X Y Z angle 0.0 // 0@ – имя автогенератора, #BF400 – модель авто (можно писать ID, т.е. в данном случае 581), 2 цифры далее – цвет, X Y Z – координаты, 0.0 – угол; plate – номерной знак (в кавычках, не больше 8 латинских символов)
014C: set_parked_car_generator 0@ cars_to_generate_to 101 // это включает генератор, если вместо 101 написать 0, машина появляться не будет
Для пикапа:
0213: $0 = create_pickup #INFO type 3 at X Y Z // обычный пикап-значок
032B: $0 = create_weapon_pickup #teargas type 15 ammo 15 at X Y Z // оружие
$0 – имя пикапа, #INFO и #teargas – модель (оружие или значок, можно ID); type – тип (3 – одноразовый, 15 – многоразовый); ammo – количество боеприпасов; X Y Z – координаты
Как изменить оружие банд и число гангстеров в определённом районе?
0237: set_gang 0 weapons_to 23 32 1 // 0 – ID банды (0 == Ballas, 1 == Grove Street Families, 2 == Los Santos Vagos, 3 == San Fierro Rifa, 4 == Da Nang Boys, 5 == Mafia, 6 == Mountain Cloud Triad, 7 == Varrio Los Aztecas); 23 32 1 – это оружие (0 – кулaки, 1 – кастет, 2 – клюшка для гольфа, 3 – дубинка для копов, 4 – ножик, 5 – бита, 6 – лопата, 7 – кий, 8 – кaтaнa, 9 – пила, с 10 до 14 – дилдо и цветы, 15 – трость, 16 – гранаты, 17 – слезоточивый газ, 18 – мoлoтoвы, 22 – пистолет, 23 – с глушаком, 24 – Desert Eagle, 25 – дробоган, 26 – обрез, 27 – мощный дробоган, 28 – Mac 10, 29 – MP5, 30 – AK47, 31 – M4, 32 – Tec9, 33 – винтовка, 34 – снайперка, 35 – РПУ, 36 – ракетница с самонаводкой, 37 – огнемёт, 38 – старый добрый Mиниган, 41 – баллончик с краской, 42 – огнетушитель)
076C: set_zone ‘SUN1’ gang 1 density_to 30 // SUN1 – имя района (см. в Справке SB: Документация по SCM > GTA SA > Типы зон); 1 – знакомый ID; 30 – плотность (в процентах от населения этого района)


 Какие есть особые опкоды?

015D: set_gamespeed 0.0 // скорость игры (1.0 – обычная; этот опкод используется в режиме Bullet Time)
01EB: set_traffic_density_multiplier_to 0.0 // отключает движение на дорогах
0110: clear_player $PLAYER_CHAR wanted_level // очистить уровень розыска
01F7: set_player $PLAYER_CHAR ignored_by_cops 1 // копы игнорируют
02AB: set_actor $PLAYER_ACTOR immunities BP 1 FP 1 EP 1 CP 1 MP 1 // установить иммунитет
0330: set_player $PLAYER_CHAR infinite_run 1 // бесконечный спринт
0331: set_player $PLAYER_CHAR fast_reload 1 // быстрая перезарядка оружия (не у всех видов)
0335: enable_free_respray 1 // халявные перекраски
03BF: set_player $PLAYER_CHAR ignored_by_everyone 1 // все игнорируют
03DE: set_pedestrians_density_multiplier_to 0.0 // отключает людской поток на улицах
055D: make_player $PLAYER_CHAR fireproof 1 // огнеупорность
0572: enable_taxi_nitros 1 // все такси с азотоускорением
0629: change_integer_stat 181 to 4 // можно свободно гулять по SA без звёзд розыска
0631: put_actor 0@ in_group $PLAYER_GROUP // актёр будет следовать за игроком
0632: release_group $PLAYER_GROUP // отпустить актёров из группы
06C8: enable_riot 1 // включает бунт (только в LS)
06D0: enable_emergency_traffic 0 // отключает спецслужбы
07A7: put_jetpack_on_actor $PLAYER_ACTOR // джетпак
0879: enable_gang_wars 1 // включает войну за территории
08C6: set_actor $PLAYER_ACTOR stay_on_bike 1 // игрок не падает с байка
08FD: enable_heat_visuals 1 // включение (0 – выключение) эффекта «жарка» при высокой температуре окружающей среды
09C7: change_player $PLAYER_CHAR model_to #MODEL // замена своей модели (сначала надо загрузить новую)
09E6: set_burglary_houses_accessible 1 // доступ в жилые дома
09E9: car 3@ add_single_nitro // одноразовый нитроазот
0A24: enable_military_zones_wanted_level 1 // отключение охраны на военных зонах
0A3D: enable_prostitutes_pay_you 1 // шлюхи платят тебе


 Как убрать эффект NFS MW в моде Night Crimes?

1) открыть в SB файл data/script/main.scm
2) найти строку create_thread @Noname_9 (Сtrl+F)
3) удалить либо закомментировать (Сtrl+Q), чтобы игра игнорировала поток Noname_9
4) компилировать (F6) и запустить игру (F8)
P.S. Для проверки, тот ли это поток, найди Noname_9, там должно быть написано
02E3: 12@ = car $11883 speed
if
12@ >= 30.0
else_jump @Noname_9


 Как изменить количество денег?

0109: player $PLAYER_CHAR money += X // X – положительное или отрицательное целое число, в зависимости от которого денег прибавят или отнимут


 Как сделать, чтобы актёр или автомобиль шёл по определённому пути?

05D6: clear_scmpath
05D7: add_point_to_scmpath X Y Z // X Y Z – координаты добавляемой точки в маршруте
05D8: AS_assign_scmpath to_actor $PLAYER_ACTOR flags 4 0 // для актёра: 4 – скорость (до 7)
06BB: set_actor -1 drive_car 1@ speed 10.0 along_SCM_path // для машины: 10.0 – скорость


 Как выбрать случайного пешехода?

:Noname
wait 0
if and
06FF: any_ped_near_actor $PLAYER_ACTOR in_range 20.0 // радиус
Player.Defined($PLAYER_CHAR)
else_jump @Noname
0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to -1 closest_ped_to 1@
if
not 1@ == -1
else_jump @Noname


 Как сделать чтобы банды не приставали?

0746: set_acquaintance 1 of_actors_pedtype 7 to_actors_pedtype 0
0746: set_acquaintance 1 of_actors_pedtype 8 to_actors_pedtype 0
0746: set_acquaintance 1 of_actors_pedtype 9 to_actors_pedtype 0
0746: set_acquaintance 1 of_actors_pedtype 10 to_actors_pedtype 0
0746: set_acquaintance 1 of_actors_pedtype 11 to_actors_pedtype 0
0746: set_acquaintance 1 of_actors_pedtype 12 to_actors_pedtype 0
0746: set_acquaintance 1 of_actors_pedtype 13 to_actors_pedtype 0
0746: set_acquaintance 1 of_actors_pedtype 14 to_actors_pedtype


 Как сделать актёра другом или врагом?

077A: set_actor $Actor acquaintance 4 to_actors_pedtype 0 // acquaintance бывают такие: 1 – уважение, 2 – симпатия, 3 – неприязнь, 4 – вражда


Что такое CLEO?

Библиотека CLEO шагнула в новое измерение, и перед нами четвертая версия этого проекта. Теперь библиотека CLEO поддерживает игры GTA III и GTA VC, что это открывает новые возможности для разработчиков скриптов на данных платформах.

Возможности

Новые опкоды
CLEO 4 имеет в наличии 100 полезных опкодов, которые позволяют работать с внешними файлами, изменять данные в памяти игры, вызывать игровые функции со своими параметрами, а также многое другое. В четвертой версии появились новые опкоды для работы со звуками, форматирования текста, была добавлена возможность выводить на экран тексты без использования внешних текстовых файлов (.gxt, .fxt). Чтобы оценить новые достижения и использовать их в ваших скриптах, установите последнюю версию библиотеки CLEO 4.

Плагины

CLEO-плагины — это обычные DLL-файлы, но имеющие расширение .CLEO. При запуске библиотека CLEO ищет в папке <игра>CLEO файлы с данным расширением и пытается загрузить их. В случае удачной загрузки плагин начинает работать и выполнять те функции, для которых он написан.

CLEO 4 позволяет создавать новые опкоды, используя исходные коды CLEO SDK. В стартовом комплекте библиотеки можно найти три примера таких плагинов:
IniFiles.cleo — работа с INI файлами;
FileSystemOperations.cleo — работа с файлами и папками.
IntOperations.cleo — битовые операции над целыми

Процедура установки плагина очень проста: просто скопируйте файл в папку <игра>CLEO. Чтобы прекратить пользование плагином — удалите файл или измените его расширение. Список доступных плагинов можно найти на этой странице.

Добавление скриптов
Начиная с CLEO 3, в игру можно добавлять новые скрипты, написанные в редакторе Sanny Builder, без необходимости начала новой игры. Все, что требуется для добавления такого скрипта в игру — это поместить его в папку <игра>CLEO. После запуска новой или сохраненной игры скрипт начнет работу. Для удаления скрипта из игры — удалите соответствующий файл.

CLEO 4 разрабатывалась для трех версий exe: 1.0 us, 1.0 eu и 1.01 eu. Таким образом, существует 8 разных exe, с которыми совместима библиотека: 

Оригинальное имя
Описание
Версия игры
Размер

gta_sa.exe
оригинальный 1.0 us
1.0
14 405 632 байт

gta_sa.exe
публичный no-dvd 1.0 us
1.0
14 383 616 байт

gta_sa_compact.exe
listener’s exe
1.0
5 189 632 байт

gta_sa.exe
оригинальный 1.01 eu
1.01
14 405 632 байт

gta_sa.exe
публичный no-dvd 1.01 eu
1.01
15 806 464 байт

gta_sa.exe
версия от 1С
1.01
15 806 464 байт

gta_sa.exe
оригинальный 1.0 eu
1.0
неизвестно

gta_sa.exe
публичный no-dvd 1.0 eu 
1.0
14 386 176 байт


Установка

СLEO 4 распространяется в виде автоматического инсталлятора. Для установки библиотеки запустите инсталлятор и следуйте его инструкциям.

CLEO 4 использует 3 файла в работе: vorbisFile.dll, vorbishooked.dll, cleo.asi.

CLEO 4 для San Andreas для проигрывания звуковых файлов требует установленной библиотеки BASS.dll версии 2.4, которую можно скачать с официального сайта Un4seen Developments Ltd. Устанавливается BASS.dll очень просто — нужно просто скопировать файл bass.dll в корневую директорию игры GTA San Andreas.


Распространение библиотеки CLEO

Если вы написали скрипт, использующий библиотеку CLEO и (или) ее плагины, вы можете также распространять вместе с ним необходимые файлы. Вы можете указать ссылку на данную страницу, чтобы пояснить, как необходимо пользоваться библиотекой и сопутствующими файлами.

Первое, что должно быть у скриптера, это программа для компиляции/декомпиляции файла 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 патронов.

Итак, сегодня я буду рассказывать как я пишу мод на SAMP. Для начала разберёмся на каком языке пишут скрипты и моды для SAMP. Моды и скрипты в SAMP пишутся на языке PAWN. Pawn — это С-подобный скриптовый язык (как и lua) но, в отличии от lua, в Pawn скрипты именно компилируются,в байт код для запуска на абстрактной машине, а не интерпретируются как в Lua. Скажите — ну и что это даёт? А даёт это многое, например: компилятор pawn ещё до выполнение скрипта проверяет на наличие ошибок, и поэтому у вас никогда не будет внезапных ошибок в программе, также ещё скорость работы скрипта больше чем в том-же Lua, потому-что код скомпилирован в сразу понятный для машины код. Что такое pawn мы разобрались.

Давайте разберёмся с средой разработки, если в lua мы могли писать скрипты хоть в блокноте, то теперь нам нужна полноценная среда разработки.
1. Pawno — Очень простой редактор, в есть необходимый минимум чтобы писать скрипты на pawn.
blogentry-0-0-77889400-1489396166_thumb.png

Плюсы:
+ Малый размер (768 кб)
+ Идёт сразу с Samp server
+ Встроенный список функций из всех инклудов
+ Сразу есть все паблики и функции samp
Минусы:
— Подсветка синтаксиса сделана чисто для галочки (всего два цвета подсветки синий и чёрный)
— На windows начиная с vista надо запускать от имени админа
— На больших скриптах может вылетать

2. Notepad++ (с плагином nppexec) — Самый популярный редактор скриптов. Поддерживает плагины, и также множество языков программирования
blogentry-0-0-87342400-1489396159_thumb.png

Плюсы:
+ Расширяемость
+ Нормальная подсветка синтаксиса
+ Авто-табуляция кода
+ Удобная навигация по коду (можно сразу перейти к другой строке, и есть карта документа)
Минусы:
— Для поддержки pawn надо много чего настраивать.
— Нету Встроенного списока функций
Настройка плагина NppExec:
1. Выберите plugin manager
blogentry-0-0-71315900-1489396173_thumb.png
2. Откроется окно, ищём Nppexec, выбираем галочкой, жмём install, перезапускаем.
blogentry-0-0-41688900-1489396176_thumb.png
3. Должно появится в меню пункт, жмём
blogentry-0-0-59483000-1489396174_thumb.png
4. Откроется окно
blogentry-0-0-46710500-1489396175_thumb.png
вписываем туда код:

cd $(CURRENT_DIRECTORY) "Путь до pawncc.exe" "$(FILE_NAME)" -; -(

5. Нажимаем ok и компиляция начнётся

Но давайте перейдём к написанию программы «hello world!» Как я и сказал у меня samp вариант Pawn. Вот как выглядит hello world в pawn:

main(){	print("hello world!");}

Компилируем:
blogentry-18530-0-49339800-1489396885_thumb.png
Как видим, всё прошло успешно и компиляция завершена.

Вот как выглядела бы ошибка:
blogentry-18530-0-22886300-1489396999_thumb.png
С компиляцией разобрались, теперь нам надо запустить сервер, запускаем сервер и видем наше сообщение:
blogentry-18530-0-32421200-1489397235_thumb.png
Теперь хотелось-бы чтобы например: hello world писалось не в консоль сервра, а например игроку в чат. Для этого нужно использовать include, да-да как и в си или c++ pawn поддерживает include и константы #define, и даже команды пре-процесса #pragma. Теперь, давайте подключим include к нашему скрипту для того, чтобы подключить include надо в начале скрипта написать #include <a_samp>, тем самым мы подключили include для работы функций samp. Теперь мы можем создать код в нашем скрипте:

public OnPlayerConnect(playerid) // Создаём паблик чтобы при подключении игрока что-то происходило{	SendClientMessage(playerid, -1, "hello world"); // Функция отправки сообщения        return 1; // функция должна что-то возвращать}

Playerid — Ид игрока которому мы будем отправлять сообщение (в данном случае игроку который подключился к серверу)
-1 — Цвет сообщения (белый)
«hello world» — Строка которая будет отправляться.
Запускаем сервер, заходим в игру и видим наше сообщение:
blogentry-18530-0-26346100-1489398324_thumb.png
Ну вот и всё это был весь мой обзор языка pawn. ВНИМАНИЕ! Я некого не собираюсь учить (я сам учусь) это был просто мини-обзор языка Pawn. Потому-что никто на форуме не знает этот замечательный язык программирования. Если бы он был в OpenComputers я бы был рад!

Понравилась статья? Поделить с друзьями:
  • Как написать модуль ядра линукс
  • Как написать модуль числа на питоне
  • Как написать модуль пайтон
  • Как написать модуль на паскале
  • Как написать модуль для нри