Войти на сайт

Авторизация, ждите ...
×

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

Уменьшение Хп Стоимости за счет пассивных скилов 6 года 6 мес. назад #99662

  • Sefirot
  • Sefirot аватар
  • Вне сайта
  • Бывалый
  • Сообщений: 86
  • Спасибо получено: 23
  • Проект месяца 2 местоВетеран
Rpg maker mv
скрипт YEP_skill_core
Нужна помощь. Хочу уменьшить размер стоимости всех способностей расходующих ХП, за счет пассивного навыка (YEP_Auto Passive states).
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Dmy

Уменьшение Хп Стоимости за счет пассивных скилов 6 года 6 мес. назад #99664

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

Я написал код, чтобы состояния меняли цена умений в HP. Сохраните его в какой-то файл в папке plugins в файле с расширением js (например, "Sefirot_HpCostMultiplier.js") и подключите как плагин после YEP_SkillsCore:
//Код ниже в общественном достоянии согласно 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%>

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

Уменьшение Хп Стоимости за счет пассивных скилов 6 года 6 мес. назад #99667

  • Sefirot
  • Sefirot аватар
  • Вне сайта
  • Бывалый
  • Сообщений: 86
  • Спасибо получено: 23
  • Проект месяца 2 местоВетеран
Спасибо, сейчас буду пробовать
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Dmy
Модераторы: NeKotZima
Время создания страницы: 0.197 секунд