Войти на сайт

Авторизация, ждите ...
×
Правила раздела:
1 Задавайте конкретные вопросы. Для болтовни есть свободный раздел.
2 По возможности давайте конкретные ответы.
3 Один вопрос=одна тема. Если хотите задать ещё вопрос, то начинайте новую тему.
4 Название темы должно составлять сам вопрос, и быть максимально конкретным. Рекомендуется начинать тему словами "Как", "Что", "Почему". А первый пост повторяет вопрос и даёт расширенные сведения.
5 Рекомендуется указывать версию мейкера (2000, 2003, RMXP, RMVX, ACE, IGM, и.т.д.. Это важно, и всё равно ведь спросят.
6 Темы "Пара вопросов", "Помогите", и подобные им - самый лёгкий путь к бану.
7 Поиск находится вверху справа.
А. Названия подразделов этого раздела уточняются. Советы принимаются.

ТЕМА: Магазин - как убрать Купить Продать Отмена? [MZ]

Магазин - как убрать Купить Продать Отмена? [MZ] 2 нед. 4 дн. назад #131113

  • spbker
  • spbker аватар
  • Вне сайта
  • Мастер
  • Сообщений: 179
  • Спасибо получено: 34
  • Проект месяца 3 местоПроект месяца 2 место
Можно ли поправить основной скрипт, чтобы при входе в магазин сразу показывал товары?
Убрать вкладки "купить", "продать", "отмена".
Последнее редактирование: 2 нед. 4 дн. назад от AnnTenna. Причина: уточнила вопрос
Администратор запретил публиковать записи гостям.

Магазин - как убрать Купить Продать Отмена? [MZ] 1 нед. 4 дн. назад #131156

  • Aristarx13
  • Aristarx13 аватар
  • Вне сайта
  • Путник
  • Третий закон: «Любая достаточно развитая технология неотличима от магии». А. Кларк.
  • Сообщений: 9
  • Спасибо получено: 11
Уточнение:
Если предполагается редактирование основных файлов проекта из папки js, то это настоятельно не рекомендуется. Дело в том, что можно напортачить, и забыть где делал правки. Другое дело плагины и скрипты, их можно отключать.

Теперь по проблеме.

1.
Отключить вкладки легко даже скриптом перед командой Магазин.
Например:
Window_ShopCommand.prototype.maxCols = function() {
return NaN;
};
Но это даст при входе конструкцию из пустых окон. Только после нажатия Enter (или другой подтверждающей клавиши) появятся товары. Требуется больше кода. Поэтому лучше использовать конкретные, небольшие, целевые плагины без лишних наворотов, так как это повышает вероятность конфликта с другими плагинами.

2.
Я написал код, который решает эту проблему, создавая другую, явную из вопроса: А куда девать ненужный товар? Выбрасывать? Тем не менее вот он этот код:
(() => {

//Fast Buy Shop - магазин быстрой покупки.

// Количество колонок для главных вкладок магазина
// Чтобы удалить вкладку «Купить» введите: return NaN
Window_ShopCommand.prototype.maxCols = function() {
return 1;
};

// Убираем ненужные вкладки, оставляем только "Купить"
Window_ShopCommand.prototype.makeCommandList = function() {
// Заменяем текст на вкладке "Купить" значением переменной.
// Перед командой события вызывающего Магазин, введите скрипт,
// например: $gameVariables.setValue(10, "Магазин «Пятёрочка»");
const commandText = $gameVariables.value(10); // Берём значение из переменной, к примеру, с индексом 10.
this.addCommand(commandText, "buy");
};

// При старте сразу активируем окно покупки
Scene_Shop.prototype.start = function() {
//this._commandWindow.hide();
Scene_MenuBase.prototype.start.call(this);
this.commandBuy(); // Сразу запускаем обработку "Купить"
};

// Выход из списка покупного товара сразу на карту
Scene_Shop.prototype.onBuyCancel = function() {
return SceneManager.goto(Scene_Map);
};

// Убираем скрытие окна покупок при вызове команды "Купить"
const _commandBuy = Scene_Shop.prototype.commandBuy;
Scene_Shop.prototype.commandBuy = function() {
_commandBuy.call(this);
this._buyWindow.show();
this._buyWindow.activate(); // Активируем окно покупок
this._statusWindow.show();
this._commandWindow.deactivate();
};
})();

Я допустил некоторую вольность в концепции, и объясню почему.
После удаления вкладок, остаётся пустое, некрасивое окно, которое, кстати, тоже можно удалить, раскомментировав 21 строку ( //this._commandWindow.hide(); ). В результате в верхнем ряду останется только денежное окно (наши наличные), которое смотрится не очень симметрично.
Поэтому я советую не удалять пустое окошко, а заполнить его значением выбранной вами переменной. Да, я предлагаю пожертвовать одной из 5000 переменных.
Логика следующая:
- подключаем указанный (большой) код как плагин;
- в событии, перед командой «Магазин» вводим команду «Скрипт» и в ней прописываем, например, такой скрипт с переменной: $gameVariables.setValue(10, "Магазин «Пятёрочка»");
- в плагине убеждаемся, что на 8 строке прописано: return 1; а на 21 строке, команда //this._commandWindow.hide(); как здесь закомментированна;
- заходим в игру и убеждаемся, что теперь у магазина появилось название.
Примечание:
- в приведённом коде-плагине установлена переменная с индексом 10. Вы можете использовать другой номер переменной, но тогда в плагине на 15 строке ( const commandText = $gameVariables.value(10); ) нужно 10-ку поменять на используемый вами номер переменной;
- так как в переменную можно ввести разные типы данных (но чаще число или в данном случае строку), то это значение и будет выведено в командном окне для вкладок;
- если вы решили использовать для разных магазинов разные названия, то скрипт с переменной нужно прописывать перед каждым вызовом команды «Магазин», редактируя лишь строчное значение (имя магазина). Строка в переменной всегда заключается в кавычки (лапки).

3.
Альтернативное решение (вдруг пригодится).
Как-то раз, просматривая один японский, на данный момент уже пол-года как не существующий мейкерский сайт ( tm.lucky-duet.com ) я наткнулся на пост неизвестного мейкериста с ником youtu. Он выложил свой плагин, даже не поставив в нём своё авторство, вольно разрешающий использовать плагин в коммерческих и любых других целях. Это плагин (для MZ) позволяет при заходе в магазин сразу видеть товары для покупки, а переместив курсор на вкладку продажи, - и предметы для продажи тоже. Но для перемещения по списку товаров требовалось нажатие подтверждающей клавиши (например Enter) и тогда видимые изначально товары становились подсвеченными и активными для выбора. В настройке плагина можно было скрыть показ клавиши «Отмена».
Ниже прилагаю локализованный на русский (с японского) код плагина.
//=============================================================================
// ShopDisplay.js
//
// @PUBLIC DOMAIN
//
// Version
// 1.0.0 2025/01/02
//
//=============================================================================

/*:
* @plugindesc При входе в Магазин сразу видны товары для покупки.
* @target MZ
*
* @param Скрыть вкладку Отмена
* @desc Удаление вкладки «Отмена».
* @type boolean
* @default false
*
* @help
* Во вкладках Магазина (Купить, Продать или Отмена) отображается каждое
* соответствующее окно.
* Вы можете свободно использовать, изменять и распространять его, как в
* коммерческих, так и в некоммерческих целях. Кредит не требуется.
*
*/

(() => {

const parameters = PluginManager.parameters('ShopDisplay');
const DisableCancel = Boolean(parameters === 'true');

//キャンセル消去
Window_ShopCommand.prototype.maxCols = function() {
if(DisableCancel){
return 2;
} else {
return 3;
}
};

Window_ShopCommand.prototype.makeCommandList = function() {
this.addCommand(TextManager.buy, "buy");
this.addCommand(TextManager.sell, "sell", !this._purchaseOnly);
if(!DisableCancel){
this.addCommand(TextManager.cancel, "cancel");
}
};

//選択中項目監視
Scene_Shop.prototype.update = function() {
Scene_MenuBase.prototype.update.call(this);
this.commandIndexCheck();
};

Scene_Shop.prototype.commandIndexCheck = function() {
if (this._commandWindow && this._commandWindow.active) {
if (this._commandWindow.index() == 0) {
this._categoryWindow.hide();
this._sellWindow.hide();
this._buyWindow.show();
this._statusWindow.show();
}
if (this._commandWindow.index() == 1) {
this._buyWindow.hide();
this._statusWindow.hide();
this._categoryWindow.show();
this._sellWindow.show();
};
if (this._commandWindow.index() == 2) {
this._categoryWindow.hide();
this._sellWindow.hide();
this._buyWindow.hide();
this._statusWindow.hide();
this._dummyWindow.show();
};
}
};


//ウィンドウ表示調整
const _Scene_Shop_prototype_createDummyWindow = Scene_Shop.prototype.createDummyWindow
Scene_Shop.prototype.createDummyWindow = function() {
_Scene_Shop_prototype_createDummyWindow.call(this);
this._dummyWindow.hide();
};

const _Scene_Shop_prototype_commandBuy = Scene_Shop.prototype.commandBuy
Scene_Shop.prototype.commandBuy = function() {
_Scene_Shop_prototype_commandBuy.call(this);
this._categoryWindow.hide();
this._sellWindow.hide();
};

const Scene_Shop_prototype_commandSell = Scene_Shop.prototype.commandSell
Scene_Shop.prototype.commandSell = function() {
Scene_Shop_prototype_commandSell.call(this);
this._buyWindow.hide();
this._statusWindow.hide();
};

const _Scene_Shop_prototype_onBuyCancel = Scene_Shop.prototype.onBuyCancel
Scene_Shop.prototype.onBuyCancel = function() {
_Scene_Shop_prototype_onBuyCancel.call(this);
this._dummyWindow.hide();
this._buyWindow.show();
this._statusWindow.show();
};

const _Scene_Shop_prototype_onCategoryCancel = Scene_Shop.prototype.onCategoryCancel
Scene_Shop.prototype.onCategoryCancel = function() {
_Scene_Shop_prototype_onCategoryCancel.call(this);
this._dummyWindow.hide();
this._categoryWindow.show();
this._sellWindow.show();
};

})();
Вложения:
Последнее редактирование: 1 нед. 4 дн. назад от Aristarx13. Причина: ошибка
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: spbker, VarVarKa, Alx_Yago
Время создания страницы: 0.187 секунд