Уменьшение Хп Стоимости за счет пассивных скилов

Ветеран Проект месяца 2 место
Больше
8 года 7 мес. назад #99662 от Sefirot
Rpg maker mv
скрипт YEP_skill_core
Нужна помощь. Хочу уменьшить размер стоимости всех способностей расходующих ХП, за счет пассивного навыка (YEP_Auto Passive states).
Спасибо сказали: Dmy

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Ветеран Поддержка Фонда Разработчик Проект месяца 3 место Учитель Оратор Даритель Стимкея 2 место За 2 место на конкурсе маппинга Программист Ruby Паладин
Больше
8 года 7 мес. назад - 8 года 7 мес. назад #99664 от Dmy
YEP_AutoPassiveStates добавляет определённое состояние (<Passive State: x>, где x — это ID) при определённых условиях. То есть мы можем менять цену в здоровье (hpCost) в зависимости от состояния независимо от того, было это состояние добавлено с помощью YEP_AutoPassiveStates или как-то ещё.

Я написал код, чтобы состояния меняли цена умений в HP. Сохраните его в какой-то файл в папке plugins в файле с расширением js (например, "Sefirot_HpCostMultiplier.js") и подключите как плагин после YEP_SkillsCore:
Code:
//Код ниже в общественном достоянии согласно Creative Commons Zero. Автор разрешает //делать с ним что угодно, в том числе заявлять, что вы сами его написали. //Функция, которая проверяет примечание у одного состояния и устанавливает //sefirotHpCostMultiplier в зависимости от <HP Cost Multiplier: n%> function sefirotSetHpConstMultiplier(state) { //По умолчанию цена в HP умножается на 1 (т.е. не меняется) state.sefirotHpCostMultiplier = 1; //разбиваем примечание на строки var notetagLines = state.note.split(/[\r\n]+/); for (var i = 0; i < notetagLines.length; i++) { var line = notetagLines[i]; var matchedPercent = line.match(/<(?:HP Cost Multiplier):\s+(\d+(?:\.\d+)?)%>/i); if (matchedPercent) { //Если в конце есть знак %, то делим коэффициент на 100 state.sefirotHpCostMultiplier = parseFloat(matchedPercent[1]) / 100.0; } var matchedExact = line.match(/<(?:HP Cost Multiplier):\s+(\d+(?:\.\d+)?)>/i); if (matchedExact) { //Если в конце нет знака %, то присваиваем значение дословно state.sefirotHpCostMultiplier = parseFloat(matchedExact[1]); } } } //Переопределяем isDatabaseLoaded, чтобы он читал примечание <HP Cost Multiplier: n%> var Sefirot_DataManager_isDatabaseLoaded = DataManager.isDatabaseLoaded; var notetagsProcessed = false; DataManager.isDatabaseLoaded = function() { if (!Sefirot_DataManager_isDatabaseLoaded.call(this)) { return false; } if (!notetagsProcessed) { //проходимся по всем состояниям и присваиваем им sefirotHpCostMultiplier //в зависимости от строчки в примечании <HP Cost Multiplier: n%> for (var i = 1; i < $dataStates.length; i++) { sefirotSetHpConstMultiplier($dataStates[i]); } notetagsProcessed = true; } return true; } // Перепишем функцию skillHpCost, чтобы она меняла hpCost // согласно параметру из примечания // Мы переписываем функцию из YEP_SkillsCore, так что этот // код должен выполняться ПОСЛЕ YEP_SkillsCore var Sefirot_Game_BattlerBase_skillHpCost = Game_BattlerBase.prototype.skillHpCost Game_BattlerBase.prototype.skillHpCost = function (skill) { var hpCost = Sefirot_Game_BattlerBase_skillHpCost.call(this, skill); //Проходимся по активным состояниям и умножаем hpCost на sefirotHpCostMultiplier this.states().forEach(function (state) { hpCost *= state.sefirotHpCostMultiplier; }); //Если получилось дробное число, округлим его вверх return Math.ceil(hpCost); }

Чтобы с этим кодом увеличить стоимость умений в здоровье вдвое, добавьте в примечание (notetag) к состоянию такую строчку:
<HP Cost Multiplier: 200%>
А чтобы уменьшить наполовину, такую:
<HP Cost Multiplier: 50%>

Я проверял этот код, и у меня он работает. Но если что-то не работает, пишите сюда, будем разбираться. :)
Последнее редактирование: 8 года 7 мес. назад пользователем Dmy.
Спасибо сказали: AnnTenna, Sefirot, Green-Leo, VarVarKa

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Ветеран Проект месяца 2 место
Больше
8 года 7 мес. назад #99667 от Sefirot
Спасибо, сейчас буду пробовать
Спасибо сказали: Dmy

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.095 секунд
Работает на Kunena форум