Grand Theft Auto: San Andreas
  

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

Можно ли как - нибудь добавить миниган в аммунацию? Что нужно прописывать в main.scm. Если кто знает, растолкуйте всё по порядку, какая строка отвечает за вкладку (гранаты, винтовки и т.д.).
VovanFitisov #
2
А так собирать не судьба? В игре три постоянных места спавна пулемета, еще одно появляется после прохождения заданий Торино и одно внутри военной базы, в которую можно попасть только по заданию. Насобирать много патронов за пол часа легко. К чему эти махинации? Ох уже это поколение. Совсем обленились все.
Дело в том, что я хочу научиться прописывать оружие в магазин, для того, чтобы потом прописывать новое оружие в магазин. А добавление минигана может быть отличным примером.
Dyabda
Видал на каком-то видосе миниган в аммунации стоимостью 10 К. Добавить миниган в аммунацию без вылетов, наверно, не получится, а попробовать заменить строчку с другим оружием на строчку с миниганом может сработать. По идее, все доступное для покупки оружие находится в файле shopping.dat, в нем хранятся цены оружия, количество покупаемых патронов; тут могут быть строчки с тяжелым оружием, в том числе и с миниганом, но они не используются в игре. Главное сделай копию этого файла, в случае, если будешь пытаться заменить какую-нибудь пушку на миниган. Насчет результата не знаю, я не пробовал заменять строчки, пробовал только менять количество патронов.
VovanFitisov #
0
thunder5, тогда для этого есть коды.
GeimeR1000000000X
1. Дайте пожалуйста ссылку на видео.
2. Вылеты будут наврятли, я играл уже на сборке, в которой добавляется миниган, он прописан там в main.scm, но ковырять его - это слишком муторно и в 100 раз лучше попросить помощи, ибо в том main.scm очень и очень много модов напихали.
3. В файле shopping.dat указываются цены и патроны, в main.scm прописывается оружие для покупки в аммунации, но там надо использовать код, который я как раз и ищу.
4. Насчёт замены, опять надо ковыряться в main.scm, проблема в том что я не знаю нужного кода, который надо заменять.
Ссылку и название видео не знаю, наткнулся по случайности пару лет назад, когда не шарил в интернете. В main.scm не лазил, поэтому не представляю, как там все закодировано. Но если так хочется добавить, то придется потрудиться, инструкции, похоже, мало кто знает.
К счастью, мне уже дали код, правда я не пойму, что там за что отвечает. Вот ссылка кому интересно: https://pastebin.com/zjVNzqcn
Чтобы код работал, нужно создать текстовый документ, вставить в него весь код, а после скомпилировать. После этого у нас получится Main.scm и script.img, их перенести в папку Data\Script.
ILdar07 #
3
Итак, пришло время расширить ассортимент 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ж
ILdar07
Дайте пожалуйста ссылку на Script.img. При компилировании вашего документа в Main.scm, Script.img не создаётся.
Alexander_Vesker #
0
скачать редактор сохранений и добавить любое оружие
Sub_Zero95
Мы обсуждаем не оружие у CJ, а оружие в ассортименте у Амму-нации.
ILdar07 #
0
Dyabda писал:
При компилировании вашего документа в Main.scm, Script.img не создаётся.

Потому что это не Main.scm, а его часть. Вам нужно открыть оригинальный Main.scm (или его исходник), найти в нём скрипт Амму-нации и заменить его целиком.
Вот на всякий случай Script.img, но всё равно нужен Main.scm.
Опытные скриптеры, прошу вашей помощи.
Решил добавить 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
ILdar07 #
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

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




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



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

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

В архиве:
• текстовый fxt для названий нового оружия (по-моему, новый текст в игру добавлять проще через cleo; папку CLEO_TEXT кидать в CLEO)
• исходный main, из которого можно получить main.scm и script.img
• shopping.dat; что с ним делать, думаю понятно.
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 И т.д.
Что это значит и для чего это нужно?
И ещё, можно ли добавить новую категорию в магазин?
ILdar07 #
2
Dyabda писал:
Вы не прописали для каждого нового оружия следующее

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

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

Добавьте 11, вместо 6-го пропишите биту. Да, будет странно, зато без багов.
Можно ли увеличить данный лимит?

Не знаю. Можете обратиться на форум за помощью.
почему у одного оружия есть номер [0] [1] [2] и т.д., а у другого нету

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

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

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

Да, мы ведь выше это обсуждали уже.
ILdar07
Объясните пожалуйста ещё раз, как можно создать новую категорию, просто я не совсем понял это.
ILdar07 #
2
Dyabda писал:
как можно создать новую категорию

У меня создана категория Melee, можете взять её за пример. Во-первых, метка создания:
05A9: $2450($9616,12s) = 'MELEE'
$9616 += 1
$9597 += 1
05A9: $2450($9616,12s) = 'GYM1_1' // для новой категории
$9616 += 1 // для новой категории
$9597 += 1 // для новой категории
0084: $2515 = $9616

Во-вторых, метка заполнения:
if
05AD: s$9549 == 'MELEE'
else_jump @AMUNAT_12509 // здесь нужен прыжок на новую категорию

:AMUNAT_12509
if
05AD: s$9549 == 'GYM1_1' // проверка, что игрок выбрал эту категорию
else_jump @AMUNAT_12616 // тут прыжок на метку чуть ниже с опкодом 0084: $2515 = $9661, если номер метки отличается, исправьте
05A9: s$2450[0] = 'BRASSKN' // название оружия
$9633[0] = 1 // номер оружия
$9661 = 1 // количество товаров
ILdar07
Спасибо за помощь, но у меня возникла трудность.
В Амму-нации пропал весь текст, просто чёрное меню. Делал всё по примеру.
Название новой категории 'HV_1'
Вот код скрипта
Спойлер
http://www.mediafire.com/file/mwew6u408vh6q84/Script.txt
ILdar07 #
2
Dyabda писал:
В Амму-нации пропал весь текст, просто чёрное меню.

:AMUNAT_12371
if
05AD: s$9549 == 'MELEE'
jf @AMUNAT_12578
// тут должен быть прыжок на следующую категорию, т.е. @AMUNAT_12579

:AMUNAT_11010
05A9: $2450($9616,12s) = 'MELEE'
$9616 += 1
$9597 += 1
05A9: $2450($9616,12s) = 'HV_1'
$9616 += 1
$9597 += 1
0084: $2515 = $9616
if // удалить
05AD: s$9549 == 'MELEE' // удалить
else_jump @AMUNAT_12579 // удалить

Последние три строки тут не нужны.

05A9: s2450[0] = "Hammer"
Где значок доллара в переменной? Должно быть так: s$2450[0]. А вместо двойных кавычек одинарные: 'Hammer'.
ILdar07
Спасибо, всё успешно работает.
Появился вопрос: Как можно создать свою Амму-Нацию, для того чтобы там торговали лишь оружием, прописанным в shooping.dat (item *оружие*). К примеру можно таким образом создать магазин холодного оружия.
Так же, там должны быть лишь новые категории. Если вы знаете как это сделать, пожалуйста напишите.
Заранее благодарен.
Нечто подобное уже реализовывали, мне удалось вскрыть их main.scm и взять оттуда код скрипта Амму-нации.
Но ничего не понятно, они как-то по другому это реализовали. Так же в самом моде я не заметил бага с битой. Если вы сможете разобраться в этом, то ниже будет ссылка на этот код.
Спойлер
http://www.mediafire.com/file/7pgoa358a41mshk/AMUNAT.txt
http://www.mediafire.com/file/5ankxa4qwtlraoe/HWARE.txt
http://www.mediafire.com/file/sv0tajxsxdg63u4/shopping.dat
Первая ссылка - на код Амму-нации
Вторая ссылка - на код, который разработчики модификации прописали для нового магазина холодного оружия (Он действует как и амму-нация, но в нём свои категории)
Третья ссылка - на Shopping.dat от данного мода.

И ещё, за что отвечает данная строка?
08D6: set_panel $2419 column 0 alignment 1
08DB: set_panel $2419 column 0 header 'DUMMY' data s$2450[0] s$2450[1] s$2450[2] s$2450[3] s$2450[4] s$2450[5] s$2450[6] s$2450[7] s$2450[8] s$2450[9] s$2450[10] s$2450[11]
$2420 = 1
ILdar07
Нашёл ещё 1 скрипт Амму-нации уже от другого мода. В нём автор мода добавил в стандартные секции новое оружие, но строки выглядят не так, как у скрипта, который вы писали. Так же в shopping.dat с припиской "item" он добавил каждое добавленное оружие. Данный код чем-то напоминает код выше.
Спойлер
https://www.mediafire.com/?dxnugpj6h6ag1ur
В архиве:
AMUNAT.txt - код скрипта Амму-нации
Shopping.dat
ILdar07 #
2
Dyabda писал:
08D6: set_panel $2419 column 0 alignment 1

Задаёт выравнивание текста в меню.
08DB: set_panel $2419 column 0 header 'DUMMY' data s$2450[0] s$2450[1] s$2450[2] s$2450[3] s$2450[4] s$2450[5] s$2450[6] s$2450[7] s$2450[8] s$2450[9] s$2450[10] s$2450[11]

Заполнение меню. 'DUMMY' – заголовок (пустой). После data пункты по порядку, у каждой переменной свой пункт, то есть оружие.
ILdar07
Спасибо, появился ещё вопрос: (Простите за мою любопытность) как можно добавить оружие во вкладку SMG, вы её вроде не переписывали. Пробовал сделать так же как и с другими вкладками, но появились проблемы с меню. Как правильно добавить в эту вкладку новое оружие?
И ещё, пожалуйста разберитесь со скриптами выше, мне там ничего не понятно, а у вас есть опыт и знания. Наверное всем будет интересно узнать, как можно ещё добавлять новое оружие без бага с битой да и вообще создавать свою Амму-Нацию.
Заранее спасибо.
ILdar07 #
2
Dyabda писал:
Наверное всем будет интересно узнать, как можно ещё добавлять новое оружие без бага с битой да и вообще создавать свою Амму-Нацию.

Кроме Вас, я никого не вижу.
ILdar07
Наверняка найдутся такие люди.
ILdar07
Похоже, вы оказались правы, никому кроме меня не интересно это в данном топике (((.
Жаль что вы не хотите продолжить помощь.
Но всё же, большое спасибо вам за помощь, оказанную ранее.
Спустя столь долгое время я успел изучить скриптинг и я нашёл способ добавить новое оружие в Амму-Нацию, использовав оригинальный код. Если кому-нибудь всё ещё интересна эта тема, то я не против объяснить, как это сделать.
B
i
u
Спойлер