на главную
об игре
Grand Theft Auto: San Andreas 26.10.2004

Новое оружие в аммунации

Можно ли как - нибудь добавить миниган в аммунацию? Что нужно прописывать в main.scm. Если кто знает, растолкуйте всё по порядку, какая строка отвечает за вкладку (гранаты, винтовки и т.д.).

Комментарии: 32
Ваш комментарий

Итак, пришло время расширить ассортимент Aмму-Hации. Скрипт я нашёл на gtaforums.com, спасибо ZAZ, он переделал оригинал в более удобоваримый вид под очищенный main.scm + я кое-что улучшил сам.

исходник

К сожалению, тут есть запрещённые слова: CA5INO, поэтому вот ссылка.

Разберём основные моменты.

:AMUNAT

thread 'AMUNAT'

Объявляем-обнуляем все требуемые переменные, загружаем модель продавца.

:AMUNAT_677

0059: $AMMU_Z_AIM_CAMERA += $AMMU_Z_OFFSET

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

$AMMU_SELLER = Actor.Create

060B: set_actor

Создаём продавца.
Сразу после этого, вплоть до :AMUNAT_2226, условия для постепенного открытия новых пушек по мере прохождения сюжета.
В метке AMUNAT_2282 прописана анимация для продавца, как он стоит за прилавком.

:AMUNAT_2395

jump @AMUNAT_2789

Здесь прописано поведение торгаша, если его атакует игрок.

:AMUNAT_3056

:AMUNAT_3336

Тут прописано, что будет, если встать на маркер: отключается радар, камера встаёт на прилавок.
Теперь самое интересное.

:AMUNAT_4525

:AMUNAT_4850

Здесь мы получаем (или задаём сами) в зависимости от выбранной строчки информацию об оружии: название (s$AMMU_WEAPON_NAME), цена ($AMMU_WEAPON_COST), группа ($AMMU_SELECTED_WEAPON_WEAPON_GROUP) – нужна для того, чтобы предупредить игрока о замене, и ID модели ($AMMU_SELECTED_WEAPON_MODEL).
Инфу скрипт получает из shopping.dat, если там оружие не прописано, тогда оно будет выдаваться бесплатно. Поэтому есть два пути: либо прописать там, либо тут. Вот пример последнего:

if
04A3: $AMMU_SELECTED_WEAPON == 38 // номер оружия (не путать с ID модели)
jf @AMUNAT_4785
05A9: s$AMMU_WEAPON_NAME = 'MINIGU' // ссылка на запись в gxt (название)
$AMMU_WEAPON_COST = 2200 // цена
$AMMU_SELECTED_WEAPON_WEAPON_GROUP = 8 // группа
$AMMU_SELECTED_WEAPON_MODEL = 362 // ID модели
jump @AMUNAT_4850
:AMUNAT_4882

:AMUNAT_5097

Здесь задаётся анимация, типа продавец лезет под прилавок за товаром.
Далее загружаем модель из полученного ранее ID, создаём её и цепляем к рукам продавца.
В метке AMUNAT_5623 прописано как раз то самое предупреждение о замене.
Потом анимация, типа продавец достаёт из-под прилавка товар.

:AMUNAT_6655

:AMUNAT_7223

Тут куча проверок: сколько патронов, денег и брони – дабы не превысить лимит.
Дальше идёт создание меню торговли.

:AMUNAT_9050

:AMUNAT_9840

Здесь для каждого оружия задаётся своя анимация, как его продавец достаёт и держит потом.

:AMUNAT_9842

:AMUNAT_10284

Ну а здесь задаётся анимация, как его продавец убирает обратно.
Эти две анимации можно не задавать, игра у меня не вылетела, но был такой глюк:

С метки AMUNAT_10286 по сути начинается заполнение меню торговли. И я честно пытался добавить в уже имеющуюся категорию новый пункт, но ничего не вышло. Возможно, это даже невозможно, вот так.
И где-то после последней категории ('GUN8') можно добавить свою:

:AMUNAT_11210
$9661 = 35 // номер нового оружия
$9662 = 36 // номер нового оружия
$9663 = 37 // номер нового оружия
$9664 = 38 // номер нового оружия
$9606 = 3
05A9: $2450($9616,12s) = 'GYM1_1' // название категории – запись в gxt
$9616 += 1
$9615 = 1
$9597 += 1
0084: $2515 = $9616
:AMUNAT_11366

:AMUNAT_11766

Здесь выводится помощь и заголовок меню, видимо для каждой точки сбыта задумывалось своё уникальное имя.

:AMUNAT_11768

:AMUNAT_13162

Последняя часть – заполнение категорий.

:AMUNAT_12461 // начало оригинального куска
if
05AD: s$9549 == 'GUN8'
jf @AMUNAT_12559 // тут прыжок на нашу новую категорию

:AMUNAT_12486
if
001C: $9605 > $9661
jf @AMUNAT_12682
078C: get_shopping_item_with_textureCRC $9632($9661,1i) nametag_to s$AMMU_WEAPON_NAME
05A9: $2450($9661,12s) = s$AMMU_WEAPON_NAME
0084: $9633($9661,3i) = $9632($9661,1i)
$9661 += 1
jump @AMUNAT_12486 // конец оригинального куска

:AMUNAT_12559 // новая категория
if
05AD: s$9549 == 'GYM1_1' // проверка, что игрок выбрал её
jf @AMUNAT_12682
05A9: s$2450[0] = 'ROCKET' // название оружия
05A9: s$2450[1] = 'ROCKHS' // название оружия
05A9: s$2450[2] = 'FLAMET' // название оружия
05A9: s$2450[3] = 'MINIGU' // название оружия
$9633[0] = 35 // номер оружия
$9633[1] = 36 // номер оружия
$9633[2] = 37 // номер оружия
$9633[3] = 38 // номер оружия
$9661 = 4 // количество пунктов, очевидно
jump @AMUNAT_12682

:AMUNAT_12682
0084: $2515 = $9661

Названия оружия, которого нет в продаже и в shopping.dat, из оригинального gxt:
'BASEBAT' — 6eиc6oльнaя 6итa
'CHAINSA' — 6eн3oпилa
'DESERT7' — парашут (хоть это и название миссии, но что мешает использовать его в своих целях?)
'KATANA' — кaтaнa
'KNIFE' — нoж

3

ILdar07
Дайте пожалуйста ссылку на Script.img. При компилировании вашего документа в Main.scm, Script.img не создаётся.

0

Dyabda писал:

При компилировании вашего документа в Main.scm, Script.img не создаётся.

Потому что это не Main.scm, а его часть. Вам нужно открыть оригинальный Main.scm (или его исходник), найти в нём скрипт Амму-нации и заменить его целиком.
Вот на всякий случай Script.img, но всё равно нужен Main.scm.

0

Дело в том, что я хочу научиться прописывать оружие в магазин, для того, чтобы потом прописывать новое оружие в магазин. А добавление минигана может быть отличным примером.

0

Dyabda
Видал на каком-то видосе миниган в аммунации стоимостью 10 К. Добавить миниган в аммунацию без вылетов, наверно, не получится, а попробовать заменить строчку с другим оружием на строчку с миниганом может сработать. По идее, все доступное для покупки оружие находится в файле shopping.dat, в нем хранятся цены оружия, количество покупаемых патронов; тут могут быть строчки с тяжелым оружием, в том числе и с миниганом, но они не используются в игре. Главное сделай копию этого файла, в случае, если будешь пытаться заменить какую-нибудь пушку на миниган. Насчет результата не знаю, я не пробовал заменять строчки, пробовал только менять количество патронов.

0

GeimeR1000000000X
1. Дайте пожалуйста ссылку на видео.
2. Вылеты будут наврятли, я играл уже на сборке, в которой добавляется миниган, он прописан там в main.scm, но ковырять его - это слишком муторно и в 100 раз лучше попросить помощи, ибо в том main.scm очень и очень много модов напихали.
3. В файле shopping.dat указываются цены и патроны, в main.scm прописывается оружие для покупки в аммунации, но там надо использовать код, который я как раз и ищу.
4. Насчёт замены, опять надо ковыряться в main.scm, проблема в том что я не знаю нужного кода, который надо заменять.

0

thunder5, тогда для этого есть коды.

0

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

0

К счастью, мне уже дали код, правда я не пойму, что там за что отвечает. Вот ссылка кому интересно: https://pastebin.com/zjVNzqcn
Чтобы код работал, нужно создать текстовый документ, вставить в него весь код, а после скомпилировать. После этого у нас получится Main.scm и script.img, их перенести в папку Data\Script.

0

скачать редактор сохранений и добавить любое оружие

0

Sub_Zero95
Мы обсуждаем не оружие у CJ, а оружие в ассортименте у Амму-нации.

0

Опытные скриптеры, прошу вашей помощи.
Решил добавить 2-е новые пушки в новый раздел (Там где миниган, огнемёт и т.д.)
С первой пушкой всё хорошо, но со второй проблемы, вместо неё торговец достаёт мне биту, хотя я прописал балончик, в чём заключается проблема?
Исходник брал отсюда: https://pastebin.com/zjVNzqcn

Спойлер

Добавленный код
Заменил строку у минигана
с else_jump @AMUNAT_5025 на else_jump @AMUNAT_4901

:AMUNAT_4901
if
04A3: $AMMU_SELECTED_WEAPON == 70 // == constant
else_jump @AMUNAT_4963
05A9: s$AMMU_WEAPON_NAME = 'RUGER' // s$ // Ruger
$AMMU_WEAPON_COST = 2200
$AMMU_SELECTED_WEAPON_WEAPON_GROUP = 4
$AMMU_SELECTED_WEAPON_MODEL = 382
jump @AMUNAT_5090

:AMUNAT_4963
if
04A3: $AMMU_SELECTED_WEAPON == 41 // == constant
else_jump @AMUNAT_5025
05A9: s$AMMU_WEAPON_NAME = 'SPRAY' // s$ // Spray Cran
$AMMU_WEAPON_COST = 2200
$AMMU_SELECTED_WEAPON_WEAPON_GROUP = 8
$AMMU_SELECTED_WEAPON_MODEL = 365
jump @AMUNAT_5090

В блок :AMUNAT_11555

$9665 = 70
$9666 = 41

В блок :AMUNAT_10016
04A3: $AMMU_SELECTED_WEAPON_MODEL == 382 // == constant
04A3: $AMMU_SELECTED_WEAPON_MODEL == 365 // == constant

В блок :AMUNAT_10534

04A3: $AMMU_SELECTED_WEAPON_MODEL == 382 // == constant
04A3: $AMMU_SELECTED_WEAPON_MODEL == 365 // == constant

Так же добавил в блок :AMUNAT_12918
$9633[4] = 70
$9638[5]= 41
и заменил $9661 = 4 на $9661 = 6

0

Dyabda писал:

в чём заключается проблема?

Во-первых, группа балончика 10, т.е.
$AMMU_SELECTED_WEAPON_WEAPON_GROUP = 10
Во-вторых, он не прописан в своей категории. Наверно, должно быть как-то так:
if
05AD: s$9549 == 'GYM1_1' // новая категория
jf @AMUNAT_12682
05A9: s$2450[0] = 'ROCKET'
05A9: s$2450[1] = 'ROCKHS'
05A9: s$2450[2] = 'FLAMET'
05A9: s$2450[3] = 'MINIGU'
05A9: s$2450[4] = 'RUGER'
05A9: s$2450[5] = 'SPRAY'
$9633[0] = 35
$9633[1] = 36
$9633[2] = 37
$9633[3] = 38
$9633[4] = 70
$9638[5]= 41
$9661 = 6

На будущее: лучше выкладывать весь скрипт Амму-нации, а то, как мы видим, номера меток сбиваются, и не совсем понятно, что где.

0

ILdar07
Спасибо, но к сожалению ничего не изменилось. Если вы хотите сами протестировать, просто добавьте 2 новых любых (Кроме биты) оружия. Мне кажется, тут что-то не так с переходом с метки RUGER`а на метку балончика.
jf @AMUNAT_4725
И ещё, не до конца понял как работают эти группы, я думал что они работают так:


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



0

Итак, мы научились добавлять в уже имеющиеся категории новое оружие. Точнее, мы не добавляем, а переписываем вручную все пункты. Но обо всём по порядку.
Dyabda писал:

в новой категории не предупреждают о замене

Я понял, почему. И убрал из скрипта много лишнего (например, информацию об оружии, которая на самом деле задаётся в других файлах). Всё-таки оружие нужно прописывать в shopping.dat для того, чтобы оно не доставалось игроку бесплатно.
Далее. Интересный момент с шестым пунктом в любой категории. То есть пятый и седьмой (и так далее, я больше восьми не проверял) работают нормально, а вот вместо шестого торгаш упорно суёт нам бейсбольную биту. Чудеса! Может, опять какие-то чёртовы лимиты, не знаю. Я схитрил немножечко, поставил биту в категорию ручного оружия, и этот глюк по сути там незаметен.

Спойлер

https://www.mediafire.com/?s22m22bruyeeu7p

В архиве:
• текстовый fxt для названий нового оружия (по-моему, новый текст в игру добавлять проще через cleo; папку CLEO_TEXT кидать в CLEO)
• исходный main, из которого можно получить main.scm и script.img
• shopping.dat; что с ним делать, думаю понятно.

0

ILdar07
Ещё раз спасибо за ответ.
Я обнаружил один неприятный баг. Как только я выбираю новое оружие в списке Амму-нации, продавец начинает спускаться к прилавку, после чего он зависает, то есть он не производит следующую анимацию и остаётся в таком положении (См. скриншот).


Нашёл причину проблемы: Вы не прописали для каждого нового оружия следующее -
04A3: $AMMU_SELECTED_WEAPON_MODEL == *ID модели оружия* // == constant
Ещё не понятно, почему торговец достаёт парашют не так как бронежилет, они ведь расположены в одном блоке
04A3: $AMMU_SELECTED_WEAPON_MODEL == 373 // == constant
04A3: $AMMU_SELECTED_WEAPON_MODEL == 371 // == constant
Узнать бы ещё, что там за лимиты и как их взломать, в FLA я ничего подобного найти не смог, а хочется в одну категорию добавить 10 пушек без биты.. Я уже видел мод, в котором каким - то чудом взломали этот лимит и там в одной категории до 6 пушек без биты. Но main.scm данного мода к сожалению защищён.
Так же обнаружил лимит на количество пушек в одной секции - 12, если добавить больше, их просто не будет видно. Можно ли увеличить данный лимит?
Ещё хотелось бы узнать, как правильно добавлять новое оружие в старые категории, просто не совсем понятно что тут:

05A9: s$2450[0] = 'BRASSKN' // s$
05A9: s$2450[1] = 'GOLFCLB' // s$
05A9: s$2450[2] = 'POOLCUE' // s$
05A9: s$2450[3] = 'SHOVEL' // s$
05A9: s$2450[4] = 'CHAINSA' // s$ // e¤œo£¡a
05A9: s$2450[5] = 'BASEBAT' // s$ // ežc˜o¡¬¤a® ˜ta
05A9: s$2450[6] = 'KATANA' // s$ // Kata¤a
05A9: s$2450[7] = 'KNIFE' // s$ // o›
$9633[0] = 1
$9633[1] = 2
$9633[2] = 7
$9633[3] = 6
$9637 = 9
$9638 = 5
$9639 = 8
$9640 = 4
$9661 = 8
Непонятно именно то, почему у одного оружия есть номер [0] [1] [2] и т.д., а у другого нету, и почему цифры разные: 9638, 9639, 9640 и т.д.?

Можно конечно же и самому попробовать, но будет лучше спросить у вас, т.к. у вас уже есть опыт в этом.
И ещё вопрос по поводу Shopping.dat. Для оружий там так же имеются вкладки с припиской "item".
Например: item m4, item ak47 И т.д.
Что это значит и для чего это нужно?
И ещё, можно ли добавить новую категорию в магазин?

0

Dyabda писал:

Вы не прописали для каждого нового оружия следующее

Ну я просто решил, что достаточно того, что это новое оружие уже прописано как положено в weapon.dat, где и указывается ID модели.

почему торговец достаёт парашют не так как бронежилет

Потому что у них разные модели. Следовательно, нужно редактировать саму модель в 3ds Max или попробовать другие анимации.

хочется в одну категорию добавить 10 пушек без биты

Добавьте 11, вместо 6-го пропишите биту. Да, будет странно, зато без багов.

Можно ли увеличить данный лимит?

Не знаю. Можете обратиться на форум за помощью.

почему у одного оружия есть номер [0] [1] [2] и т.д., а у другого нету

Всё просто. Мы указываем по порядку номер оружия в каждом пункте. Первому пункту соответствует переменная $9633, второму – $9634, третьему – $9635 и так далее. Как видим, цифра в скобках просто суммируется к «цифре» самой переменной. И $9637 это то же самое, что и $9633[4], $9638 – это $9633[5]. Просто компилятор меняет некоторые вещи на своё усмотрение. Но самое главное, в игре всё нормально.

почему цифры разные

Это не цифры, а переменные. У каждого пункта в категории должна быть своя переменная со своим оружием, логично?

Что это значит и для чего это нужно?

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

можно ли добавить новую категорию в магазин?

Да, мы ведь выше это обсуждали уже.

2

Спустя столь долгое время я успел изучить скриптинг и я нашёл способ добавить новое оружие в Амму-Нацию, использовав оригинальный код. Если кому-нибудь всё ещё интересна эта тема, то я не против объяснить, как это сделать.

0

Читаю вот это все, и все что я научился менять в коде это - цену и кол-во патронов

0

А так собирать не судьба? В игре три постоянных места спавна пулемета, еще одно появляется после прохождения заданий Торино и одно внутри военной базы, в которую можно попасть только по заданию. Насобирать много патронов за пол часа легко. К чему эти махинации? Ох уже это поколение. Совсем обленились все.

-2