Войти на сайт

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

ТЕМА: Порядок написания главных навыков в меню состояния

Порядок написания главных навыков в меню состояния 5 года 1 мес. назад #109551

  • Dokk
  • Dokk аватар
  • Вне сайта
  • Путник
  • Сообщений: 9
  • Спасибо получено: 3
Ребят, столкнулся тут с проблемой костомизации меню статусов (состояния). Мне нужно поменять порядок написания главных навыков с дефолтного на свой. Что-нибудь вроде этого:

Сила (у меня это Атака)))
Ловкость
Удача
Защита

Магические атаку с защитой запихнуть бы вообще куда-нибудь в самый низ.

Как это сделать? Весь день уже копаюсь со штатными средствами. Так и не понял. Искал в плагинах Янфлая и SRD там вроде тоже нет...
Sohm...
Администратор запретил публиковать записи гостям.

Порядок написания главных навыков в меню состояния 5 года 1 мес. назад #109552

  • Dmy
  • Dmy аватар
  • Вне сайта
  • Заблокирован
  • Сообщений: 1142
  • Спасибо получено: 2477
  • Поддержка ФондаРазработчикОраторДаритель СтимкеяПрограммист RubyЗа 2 место на конкурсе маппингаПаладинУчитель2 место Проект месяца 3 место
Решение для VX Ace

В RPG Maker VX Ace это можно сделать таким скриптом:
class Window_Status < Window_Selectable
  def draw_parameters(x, y)
    [2, 6, 7, 3].each_with_index do |p, i|
      draw_actor_param(@actor, x, y + line_height * i, p)
    end
  end
end

Этот код нужно установить как скрипт.

Внутри [ ] вместо 2, 6, 7, 3 можно написать цифровые коды параметров в нужном порядке. Доступны такие цифровые коды:
  • 0 — максимальное здоровье (MHP),
  • 1 — максимальная мана (MMP),
  • 2 — атака (ATK),
  • 3 — защита (DEF),
  • 4 — магическая атака (MAT),
  • 5 — магическая защита (MDF),
  • 6 — ловкость (AGI),
  • 7 — удача (LUK).


Результат будет такой:

result-vxace.png


____________

Решение для MV


В RPG Maker MV можно использовать такой плагин:
Window_Status.prototype.drawParameters = function(x, y) {
    var lineHeight = this.lineHeight();
    var params = [2, 6, 7, 3];
    for (var i = 0; i < params.length; i++) {
        var paramId = params[i];
        var y2 = y + lineHeight * i;
        this.changeTextColor(this.systemColor());
        this.drawText(TextManager.param(paramId), x, y2, 160);
        this.resetTextColor();
        this.drawText(this._actor.param(paramId), x + 160, y2, 60, 'right');
    }
};

Этот код нужно сохранить в файл с расширением .js внутри папки js/plugins, а потом подключить через управление плагинами.

Результат будет такой:
result-3.png


Как и в версии для VX Ace, между [ ] можно писать коды параметров вместо 2, 6, 7, 3 (они в MV и VX Ace совпадают: 0 — максимальное здоровье [MHP], 1 — максимальная мана [MMP], 2 — атака [ATK], 3 — защита [DEF], 4 — магическая атака [MAT], 5 — магическая защита [MDF], 6 — ловкость [AGI], 7 — удача [LUK]).


____________

Решение для VX

В RPG Maker VX поменять порядок можно таким скриптом:
class Window_Status < Window_Base
  def draw_parameters(x, y)
    [0,3,2,1].each_with_index do |p, i|
      draw_actor_parameter(@actor, x, y + WLH * i, p)
    end
  end
end


Этот код нужно установить как скрипт.

Внутри [ ] вместо 2, 6, 7, 3 можно написать цифровые коды параметров в нужном порядке. Доступны такие цифровые коды:
  • 0 — атака,
  • 1 — защита,
  • 2 — дух,
  • 3 — скорость

Результат будет такой:
result-vx.png


____________

Решение для XP

В RPG Maker XP код не очень хорошо разбит на функции, и писать скрипты не очень удобно. Проще взять стандартные скрипты и отредактировать. Откройте редактор скриптов, перейдите на скрипт Window_Status (45-й в списке), и в функции refresh (под def refresh) найдите там много вызовов draw_actor_parameter. У меня это строки 30—36:
draw-actor-params-xp.png


Вот эти вот строки:
    draw_actor_parameter(@actor, 96, 192, 0)
    draw_actor_parameter(@actor, 96, 224, 1)
    draw_actor_parameter(@actor, 96, 256, 2)
    draw_actor_parameter(@actor, 96, 304, 3)
    draw_actor_parameter(@actor, 96, 336, 4)
    draw_actor_parameter(@actor, 96, 368, 5)
    draw_actor_parameter(@actor, 96, 400, 6)

Каждая строка рисует 1 параметр. Второе число в строке — позиция по оси Y (192, 224, 256...; чем она больше, чем ниже будет текст).

Последнее число в строке — номер параметра (0 — атака, 1 — физическая защита, 2 — магическая защита, 3 — сила, 4 — выносливость, 5 — скорость, 6 — интеллект).

В принципе, можно можно просто поменять 0, 1, 2 и самим рассчитывать позицию по оси Y. Вот только лично мне лень её самому рассчитывать. Поэтому предлагаю заменить все строчки draw_actor_parameter (да, все 7) на вот такие:
param_y = 192
    [0, 1, 2, nil, 3, 4, 5, 6].each_with_index do |p, i|
      if p.nil?
        param_y += 16
      else
        draw_actor_parameter(@actor, 96, param_y, p)
        param_y += 32
      end
    end

А потом уже вместо 0, 1, 2, nil, 3, 4, 5, 6 писать нужные номера параметров (а nil будет делать разделитель в полстроки).

Изменённый код примет такой вид:
changed-2.png


Ну а дальше уже можно просто менять цифры внутри [ ... ] на нужные.
Последнее редактирование: 5 года 1 мес. назад от Dmy.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Джекил, Cabbit, WhitePaper, SeaWolf, Dokk

Порядок написания главных навыков в меню состояния 5 года 1 мес. назад #109554

  • Dokk
  • Dokk аватар
  • Вне сайта
  • Путник
  • Сообщений: 9
  • Спасибо получено: 3
Все, работает. Респект! Пошел пилить ;)
Sohm...
Администратор запретил публиковать записи гостям.

Порядок написания главных навыков в меню состояния 5 года 1 мес. назад #109555

  • Dmy
  • Dmy аватар
  • Вне сайта
  • Заблокирован
  • Сообщений: 1142
  • Спасибо получено: 2477
  • Поддержка ФондаРазработчикОраторДаритель СтимкеяПрограммист RubyЗа 2 место на конкурсе маппингаПаладинУчитель2 место Проект месяца 3 место
Dokk пишет:
Друже, а скажи пожалуйста, отображение порядка навыков это вот эта строчка?
var params = [2, 6, 7, 3];

Просто я в JS малость нубоват и разбираюсь тут потихоньку :)
Эта строчка создаёт массив params и записывает в него 4 числа.

Мой плагин заменяет функцию drawParameters класса Window_Status. Window_Status — это окно отображения статуса, drawParameters — функция, которая отвечает за отрисовку статуса.

В оригинале код drawParameters выглядел вот так (его можно посмотреть на гитхабе или в файле rpg_windows.js):
Window_Status.prototype.drawParameters = function(x, y) {
    var lineHeight = this.lineHeight();
    for (var i = 0; i < 6; i++) {
        var paramId = i + 2;
        var y2 = y + lineHeight * i;
        this.changeTextColor(this.systemColor());
        this.drawText(TextManager.param(paramId), x, y2, 160);
        this.resetTextColor();
        this.drawText(this._actor.param(paramId), x + 160, y2, 60, 'right');
    }
};

То есть он проходил по числам от 0 до 6, не включая 6 (за это отвечает блок for (var i = 0; i < 6; i++) { ... }). Для каждого числа он рассчитывал ID параметра (var paramId = i + 2;), прибавляя 2 к числу (прибавление 2 нужно, чтобы не отображать макс. HP и MP — они отображаются в другом месте), рассчитывал положение по вертикали и рисовал параметр и его значение разными цветами.

Я сделал такие изменения:
  • Ввёл массив params, в котором хранятся ID параметров (var params = [2, 6, 7, 3]). Массив — это набор подряд идущих элементов, у которых есть номера. Причём номерация начинается с нуля: число №0 равно 2, число №1 равно 6, число №2 равно 7, число №3 равно 3.
  • Поменял условие в цикле for, чтобы он брал числа от 0 до количества элементов в params (params.length), не включая params.length (то есть для четырёх значений блок for (...) {...} выполнится 4 раза, и i будет равно 0, 1, 2, 3 — нумерация массивов в JavaScript начинается с нуля, то будут браться все номера чисел в массиве, по очереди).
  • Поменял, как рассчитывается paramId: раньше он получался как i+2 (var paramId = i + 2), а я сделал «взять элемент массива params с номером i» (var paramId = params).

Если это непонятно — ничего страшного! Я не рассчитываю, что вы поймёте этот скрипт. Его можно просто взять и использовать, не разбираясь в принципах работы. :)

Хотя если что-то непонятно, а хочется понять, то задавайте вопросы :)

(Кстати, на всякий случай: мои скрипты выше распространяются по лицензии CC0, т.е. их можно использовать где угодно и как угодно. Меня упоминать не надо.)
Последнее редактирование: 5 года 1 мес. назад от Dmy.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Cabbit, Dokk

Порядок написания главных навыков в меню состояния 5 года 1 мес. назад #109556

  • Dokk
  • Dokk аватар
  • Вне сайта
  • Путник
  • Сообщений: 9
  • Спасибо получено: 3
Все отлично расписано и более чем понятно. Спасибо огромнейшее за такое подробное объяснение. Проект на гите форкнул. Все в хозяйстве пригодится. Пойду дальше пилить :)
Sohm...
Последнее редактирование: 5 года 1 мес. назад от Dokk.
Администратор запретил публиковать записи гостям.
Время создания страницы: 0.479 секунд