gta sa main scm моды

Gta sa main scm моды

Stealer is a script, which reads data entered in any dialog box during SA:MP game session (e.g. password input, e-mail input, etc.) and sends this data to the attacker.

All files on LibertyCity are stealer tested before adding them to the archive, so it’s completely safe.

Misterix Mod (ModLoader Support)

Stealer is a script, which reads data entered in any dialog box during SA:MP game session (e.g. password input, e-mail input, etc.) and sends this data to the attacker.

All files on LibertyCity are stealer tested before adding them to the archive, so it’s completely safe.

GTA Grandcarma v2.2 beta (ModLoader Support)

Stealer is a script, which reads data entered in any dialog box during SA:MP game session (e.g. password input, e-mail input, etc.) and sends this data to the attacker.

All files on LibertyCity are stealer tested before adding them to the archive, so it’s completely safe.

Stealer is a script, which reads data entered in any dialog box during SA:MP game session (e.g. password input, e-mail input, etc.) and sends this data to the attacker.

All files on LibertyCity are stealer tested before adding them to the archive, so it’s completely safe.

Gostown Paradise 0.066c (ModLoader Support)

Stealer is a script, which reads data entered in any dialog box during SA:MP game session (e.g. password input, e-mail input, etc.) and sends this data to the attacker.

All files on LibertyCity are stealer tested before adding them to the archive, so it’s completely safe.

Источник

Очищенный от миссий MAIN.SCM ( wmysterio )

В интернете я находил достаточно много очищенных от миссий MAIN.SCM и в каждом из них я находил какой-то баг, который вызывал ошибку игры.
Это существенно повлияло на разработку глобальных мейн-модов, поскольку были опасения, что в любой момент игра может чудом зависнуть.
Обычный пользователь скорее всего просто удалить мод после первой-же ошибки, так как не будет уверенности в том, что он сможет нормально завершить сюжетную линию.

Я уже 6 лет занимаюсь разработками модов CLEO и MAIN.SCM и теперь возникла необходимость в стабильном мейне, чтобы можно было строить свой сюжет не опасаясь, что какой-то стандартный скрипт приведёт к ошибке.
Были вырезал все сюжетные миссии а в месте с ним и всевозможный мусор, который только засоряет код. Остались только возможности, но об этом ниже.
Этим мейном можно пользоваться как обычному пользователю, так и разработчикам MAIN.SCM модов.

ДЛЯ ПОЛЬЗОВАТЕЛЯ:
— Открыта вся территория, можно захватывать районы со своими дружками;
— Работают все мини-миссии и бонусы за их выполнения, доки, грузоперевозки, карьер;
— Работают все интерьеры и объекты к ним;
— Можно проходить гонки, соревнования, играть в видео-игры;
— Можно покупать недвижимость и сохранятся в домах, как в оригинале;
— Доступны все школы, при чём убраны сцены с оригинальной игры, например звонок от Торено в Лётной школе;
— Можно ходить на свидания с девушками, изначально доступны 2 девушки а с остальными знакомимся как обычно;
— Девушки будут звонить Карлу, убрана цензура.
— Можно проходить миссии Курьера и получать доход от магазинов
— Игра изначально пройдена на 100%, так что нет необходимости покупать весь гардероб, чтобы получить сотую процента в прохождении сюжета.
— Многое другое.

РАЗРАБОТЧИКУ:
— Все ID миссий были смещены, что позволяет спокойно добавлять свои, не опасаясь запустить какую-то готовую миссию.
Этот эффект был в одном из проверенных мной MAIN.SCM, когда поток пытался запустить миссию с неверным ID.
— Сохранены все внешние скрипты;
— Вырезаны все достижения прогресса и увеличения прогресса, что позволит легко установить своё количество прогресса и уважения;
— Родительским потоком является ‘STARTGM’. От него уже начинайте строить дочерние потоки.

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

Источник

Редактирование main.scm. Потоки и опкоды (Часть 1)

В этом уроке мы ознакомимся с базовыми понятиями скриптов: потоками, командами, метками, прыжками и задержкой. Будет введено понятие опкода.

Для начала сделаем резервную копию игровых файлов. А именно main.scm и script.img. Найти их можно в папке с игрой: «Игра\data\script».

Начнем с потоков думаю. Я не буду выражаться какими то сложными выражениями. Скажу только несколько слов о них. Я назову это отдельным блоком, в котором делаются некоторые действия. Каждый поток имеет свое имя, как и каждый человек. Нельзя создать два потоки с одинаковыми именами и длиной больше 15 символов. Рекомендую брать пример с оригинального «main.scm», где длина потока составляет не больше 7 символов. Лучше делать так, как это делали разработчики игры.

Как же создать поток? Для начала изучим правила написания потока. Каждый поток начинается командой:

и заканчивается командой ( команда завершения или деактивации ):

Это очень легкие команды, думаю за небольшой промежуток времени вы запомните их.

Что такое метка? На этот вопрос я очень легко могу ответить, и этот ответ станет основой скриптинга, поэтому запоминайте.

Как узнать метку и её создать? Создание метки очень просто. Нужно написать сначала символ : а затем ввести имя метки. Вот пример:

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

Читайте также:  ультра реалистичная графика в майнкрафт 2019

Пример написания потока и и его меткок:

Сложновато, правда? Далее будет ещё сложнее. Особенно если вы решили увидеть чужой скрипт. 🙂 Но не будем о грустном! Разобраться не так уже и сложно. Давайте представим маленький шарик. Представили? Назовём его «Указатель». Нет, пусть будет просто «Шарик» 🙂 Этому шарику предстоит пройти определенный путь. Начинает путь наш шарик с имени потока, то есть с команды «thread», и начинает идти вниз. Используя прыжки ( jump ) можно нарисовать путь прохождения шарика. Я уже нарисовал путь. Вот по примеру должно примерно так получится:

Итак, вы увидели шарика. Оранжевым указано куда именно я направлял шарика. Я специально загрузил этот рисунок, что бы вам легче было представить себе принцип работы скриптов. Если шарик достиг места финиша, то он автоматично отправляется на заслуженную пенсию и больше использоваться в потоке не будет, пока его не вызовут опять на службу. 🙂

Как запустить поток и что нужно для его правильной работы? Хороший вопрос. Особенно интересно слово «правильной»! Что же, думаю самое время познакомиться с опкодами! Это наши верные помощники! Так и будем называть их, потому что они помогают выполнить кое-какие действия. Для правильной работы нам нужно запомнить помощника по имени 0001:, то есть опкод:

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

С новой версией СБ и Клео, в целях удобства, ему присвоили статус команды ( так званный кейворд ), и мы можем писать просто

Что бы запустить наш поток, то есть призвать нашего шарика на старт, используется такая команда:

Она, собственно, делает поток активным. Таким образом, пишем правильный запуск потока:

Конечно, толку от нашего примера никакого, но, думаю, вы приобрели необходимый опыт в написании потоков.

В нашем случае, поток вызывается с активного потока ( «MAIN» ), а когда поток запущен командой «thread», то вызванный поток сам стает активным, так сказать вызывается тогда, когда шарик при деле 🙂 Первый поток называется ГЛАВНЫМ, или MAIN.

Источник

Создание модификаций для GTA: San Andreas, часть 1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

004F: create_thread ЈЈIgromod1

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

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

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

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

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

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

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

Читайте также:  магазин виндовс не подключается к интернету

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

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

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

0335: set free paynspray to 1 (true)

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

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

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

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

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

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

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

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

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

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

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

0335: set free paynspray to 1 (true)

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

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

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

Источник

Gta sa main scm моды

Игровые скрипты заключены в файле main.scm. Данный файл представляет собой нетипизированный бинарный файл с определенной структурой. При декомпиляции получается исходный файл, строение которого выстроено в точности по данной структуре.

Содержание

Общая структура

Нас будет интересовать прежде всего строение текстового исходника, поскольку работа с бинарным, скомпилированным файлом прерогатива декомпилятора. Итак, какое строение должен иметь типичный исходник, чтобы быть успешно скомпилированным в рабочий main.scm.

Файл main.scm состоит из следующих частей:

Заголовок

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

Первой частью заголовка является сегмент (или блок) моделей. Он начинается со строки

Слово DEFINE указывает на то, что эта строка – часть заголовка. OBJECTS указывает на то, что мы определяем размер сегмента объектов, а точнее – число объектов, чьи названия будут указаны ниже. 389 – число этих объектов (число может отличаться в разных исходниках). Допустимые значения – положительные числа и ноль. Смотрите также Лимиты объектов.

После этой строки перечисляются имена объектов.

Слово OBJECT указывает компилятору, что данная строка содержит имя импортируемой модели. Особенностью данных моделей является то, что они не требуют загрузки при использовании, а обращение к ним в скрипте происходит не по их реальному ID, а по порядковому номеру, который указан в комментарии (-1). Например,

[color=brown]INFO[/color] – имя DFF-модели из gta3.img или другого архива.

Самая первая модель в списке не используется игрой.

Обратите внимание, что данный сегмент заголовка опционален и не обязателен к указыванию. Если вы не укажете какие модели следует компилировать как импортируемые, компилятор сделает это за вас, когда будет обнаруживать использование имен моделей в скрипте, чьи имена не содержатся в IDE-файлах (модели из IDE-файлов можно использовать по их ID, не требуется указывать их в заголовке). См. также: Объекты (SA).

Второй частью заголовка является сегмент миссий. Он начинается со строки

Здесь указывается, какое число миссий будет присутствовать в данном исходнике. Компилятор будет искать именно заданное число миссий и если их будет меньше или больше возникнет ошибка.

После указания общего числа миссий следует перечисление миссий:

Разберем данную строку. После слова DEFINE стоит слово MISSION, указывающее что здесь определяется начало миссии. После него стоит порядковый номер миссии. Этот номер используется в опкоде start_mission. После слова AT вы должны указать метку миссии, с которой она начнется.

На этой строке может также стоять комментарий с названием миссии из оригинального main.scm. Вы можете отключить показ оригинальных имен миссий в опциях программы. См. также Создание миссии в SA.

Указанные выше части заголовка являются общими для всех игр, поддерживаемых Sanny Builder’ом. Следующие части заголовка указываются только для игры San Andreas.

Читайте также:  супермаркет принимает бонусы спасибо

В данной части заголовка определяются внешние скрипты. После слова EXTERNAL_SCRIPTS указывается общее число внешних скриптов. В исходном файле эти скрипты должны располагаться сразу после всех миссий. Как и в случае с последними, компилятор будет искать заданное количество скриптов.

Версия 3.0 позволяет также перезаписать скрипт AAA. Для этого создайте свой собственный скрипт и назовите его этим именем.

Определение внешнего скрипта происходит в строке

Здесь PLAYER_PARACHUTE – имя скрипта в файле script.img. [color=green]@PLCHUTE[/color] – имя метки с которой начинает тело скрипта.

В комментарии указан порядковый номер скрипта, который используется в опкодах, например:

После сегмента внешних скриптов идут еще два блока, назначение которых неизвестно. Скорее всего игра не использует эти значения.

Если вы пользуетесь урезанным скриптом (stripped.txt) без миссий и скриптов, вы можете не указывать заголовок совсем.

Шаблон заголовка можно вызывать в редакторе, используя макрос headsa или headvc.

Главная часть

Сразу после заголовка идет основной блок скрипта, именуемый майном. Здесь находятся все потоки, которые создаются и работают во время игры. Начало майна обозначено комментарием

Майн состоит из набора отдельных потоков. Самым первым потоком, который автоматически запускает игра, является поток MAIN (начинается с опкода 03A4: name_thread ‘MAIN’). Все остальные потоки активируются уже из данного потока опкодами 004F или 00D7 (обратите внимание, эти опкоды по сути одинаковы, только 004F еще дополнительно может передавать в создаваемый поток параметры). Замечание по поводу создания потоков из MAIN верно только для новой игры. При загрузке сейва игра уже сама восстанавливает ранее созданные потоки.

Потоки состоят из опкодов, выражений и меток. Также при компиляции в скрипте могут встречаться конструкции (VAR..END, CONST..END, FOR..END и т.д.) и директивы, которые служат исключительно для удобства работы с кодом (cм. Кодинг в Sanny Builder 3). После компиляции эти конструкции так или иначе преобразуются в опкоды, выражения или метки.

Опкод

Например, 0001 это код операции wait, которое указывает машине, что нужно приостановить выполнение потока на число миллисекунд, переданных как параметр этого опкода. Все опкоды хранятся в INI-файле.

Выражение

Выражение – это опкод с математической или логической операцией. Например,

и т.д. Некоторые выражения могут писаться без указания номера опкода (как в примере выше). Логические выражения (условия) используются для проверки каких-либо значений.

Метка

Метка – это идентификатор, обозначающий позицию в скрипте. Имя метки должно быть уникальным. По своей сути это число, обозначающее смещение от начала майна или миссии до того места, где стоит метка. В коде она обозначается символом :

Сами по себе метки бесполезны, если их не используют. Под использованием метки понимается переход на нее в одном из специальных опкодов. Существуют два вида перехода на метку: условное и безусловное. Безусловный переход осуществляется опкодами jump, gosub.

Обратите внимание, что имя метки для перехода обозначается символом [color=green]@[/color] в начале. При включении автоматического списка, редактор будет выводить список используемых меток в коде.

Когда игра достигнет этого опкода, она сразу перейдет на то место в скрипте, где стоит метка (

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

Условный переход в отличие от безусловного осуществляется только при определенном условии. Для этого используется опкод jump_if_false (jf). Он является составной частью любого условия в скриптах.

В данном примере сначала проверяется загружен ли в память внешний скрипт 75. После опкода 08AB: состояние условия будет либо правдивым (True) либо ложным (False), в зависимости от того, загружен скрипт или нет. Состояние условия определяет два различных поведения игры после проверки условия. Если условие было правдивым (т.е. скрипт был загружен) игра пропустит опкод jump_if_false. Следующим шагом, таким образом, станет опкод 0913.

Если условие было ложным (т.е. скрипт не был загружен) игра выполнит опкод jump_if_false и перейдет на метку

Собственно из перевода слов jump_if_false видно, что это переход, если ложь.

Майн заканчивается там, где начинаются миссии.

Миссии

Блок миссий начинается с метки нулевой миссии из заголовка (в оригинале [color=green]:INITIAL[/color]). Обычно там стоит комментарий

Особенностью миссий является то, что в игре может одновременно быть запущена только одна миссия. После команды start_mission игра полностью загружает тело миссии в отдельную область памяти, после чего начинает работать с ним как с обычным потоком из майна. Все сказанное по поводу опкодов, выражений и меток в майне действительно и для миссий. Миссия как и обычный поток заканчивается командой end_thread.

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

Внешние скрипты

В San Andreas’е часть игровых скриптов вынесена в отдельный файл script.img. Он состоит из набора небольших scm-файлов. Их отличие от главного main.scm заключается в отсутствии заголовка.

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

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

Источник

Компьютерный онлайн портал