Alx_Yago пишет:
Блин, а я-то думал, существует простая строчка, типа:
$gameActors.actor(actorId).addParam(paramId, n)
только с параметром типа changeEelementRate
Не? Ну наверняка же есть что-то такое?
Нет такой возможности. По умолчанию движок исходит из предположения, что особенности неизменны и не добавляются по ходу игры.
Чтобы добавлять их по ходу игры, нужно написать плагин.
Собственно, я взял и написал, вот:
GRB_AdditionalActorTraits.js
Внимание! Если вы копируете плагин отсюда, убедитесь, что в текстовом редакторе выбрана кодировка «UTF-8 без BOM». (Блокнот стал её поддерживать только с обновления Windows 10 Build 1903 (19H1). UTF-8 из большинства версий Блокнота не будет работать, т.к. она с BOM!)
Если вы скопируете в других кодировках, возможны проблемы с кириллицей (если в ANSI-кодировке), а то и вообще плагин не запустится (если в кодировках UTF-8 с BOM, UTF-16/двухбайтовый Юникод и т.д.).
Рекомендуемый способ скачивания плагина: щёлкните по ссылке
GRB_AdditionalActorTraits.js правой кнопкой мыши и выберите «Сохранить по ссылке как...» (или похожий вариант, зависит от перевода браузера). Код ниже — для быстрого ознакомления и на случай, если ссылки перестанут работать.
/*:
* @plugindesc Additional actor traits
* @author Garbata Team
*
* @help Adds a way to assign new actor traits
* during the game. The traits are saved in the savefiles.
*
* This plugin is placed into public domain according to the CC0 public domain
* dedication. See https://creativecommons.org/publicdomain/zero/1.0/ for more
* information.
*
* Plugin page (in Ukrainian): https://рпг.укр/GRB_AdditionalActorTraits
*/
/*:uk
* @plugindesc Додактові особливості героїв та героїнь
* @author Команда Гарбата
*
* @help Додає можливість вказати нові особливості героїнь
* та героїв під час гри. Особливості записуються під час запису гри.
*
* Цей плагін передано до суспільного надбання згідно з CC0. Детальніше див.
* на сторінці https://creativecommons.org/publicdomain/zero/1.0/deed.uk
*
* Сторінка плагіну: https://рпг.укр/GRB_AdditionalActorTraits
*/
/*:be
* @plugindesc Дадактовыя асаблівасці герояў і гераінь
* @author Garbata Team
*
* @help Дадае магчымасць задаць новыя асаблівасці герояў
* і гераінь пад час гульні. Асаблівасці запісваюцца падчас запісу гульні.
*
* Гэты плагін пярэданы ў грамадскі набытак згодна з CC0. Падрабязней гл. на
* старонцы https://creativecommons.org/publicdomain/zero/1.0/deed.be
*
* Старонка плагіна (па-ўкраінску): https://рпг.укр/GRB_AdditionalActorTraits
*/
/*:ru
* @plugindesc Дополнительные особенности героинь и героев
* @author Garbata Team
*
* @help Добавляет возможность задать новые особенности героев
* и героинь во время игры. Особенности сохраняются при сохранении игры.
*
* Этот плагин передан в общественное достояние согласно CC0. Подробнее см. на
* странице https://creativecommons.org/publicdomain/zero/1.0/deed.ru
*
* Страница плагина (на украинском): https://рпг.укр/GRB_AdditionalActorTraits
*/
(function () {
var Game_Actor_traitObjects = Game_Actor.prototype.traitObjects;
Game_Actor.prototype.traitObjects = function() {
var objects = Game_Actor_traitObjects.call(this);
if (this.grbAdditionalTraitsObject) {
objects.push(this.grbAdditionalTraitsObject);
}
return objects;
};
/**
* Clears additional trait list.
* Optional 'code' parameter allows to remove only traits
* with a specific code.
*
* Note you can only remove the traits added with this plugin.
*
* @param {Number} [code] Code of the traits to remove (if omitted,
* all the additional traits are removed)
*/
Game_Actor.prototype.grbClearTraits = function (code) {
if (code === undefined) {
this.grbAdditionalTraitsObject = {'traits': []};
} else {
if (this.grbAdditionalTraitsObject) {
var o = this.grbAdditionalTraitsObject.traits;
o.traits = o.traits.filter(function (trait) {
return trait.code !== code;
});
}
}
};
/**
* Adds an additional trait to the additional trait list.
*
* @param {Number} code Code of the trait to be added
* @param {Number} dataId Data ID of the trait to be added
* @param {Number} [value] Value of the trait to be added
*/
Game_Actor.prototype.grbAddTrait = function (code, dataId, value) {
if (!this.grbAdditionalTraitsObject) {
this.grbAdditionalTraitsObject = {'traits': []};
}
if (value === undefined) {
value = 1;
};
this.grbAdditionalTraitsObject.traits.push({
'code': code,
'dataId': dataId,
'value': value
});
};
/**
* Removes an additional trait that was previously added
* by this plugin.
*
* @param {Number} code Code of the trait.
* @param {Number} dataId Data ID of the trait.
* @param {Number} [value] Value of the trait.
*/
Game_Actor.prototype.grbRemoveTrait = function (code, dataId, value) {
if (!this.grbAdditionalTraitsObject) {
this.grbAdditionalTraitsObject = {'traits': []};
}
var o = this.grbAdditionalTraitsObject;
o.traits = o.traits.filter(function (trait) {
var codeMatches = trait.code === code;
var dataIdMatches = trait.dataId === dataId;
var valueMatches = true;
if (value !== undefined) {
valueMatches = trait.value === value;
}
return !(codeMatches && dataIdMatches && valueMatches);
});
};
})();
Если его подключить, можно будет снизить коэффициент элемента до нуля таким скриптом:
$gameActors.actor(1).grbAddTrait(Game_BattlerBase.TRAIT_ELEMENT_RATE, 2, 0.0)
//вместо 1 напишите № героя
//вместо 2 напишите № элемента
И можно будет добавить сопротивление состоянию таким скриптом:
$gameActors.actor(1).grbAddTrait(Game_BattlerBase.TRAIT_STATE_RESIST, 4)
//вместо 1 напишите № героя
//вместо 4 напишите № состояния
Чтобы убрать особенность, замените в коде grbAddTrait на grbRemoveTrait. Убрать можно только те особенности, которые добавлены через этот плагин. Убрать особенности, установленные в БД, таким образом нельзя.
Ещё можно убрать все параметры, добавленные через этот плагин (сбросить к состоянию из БД) таким скриптом:
$gameActors.actor(1).grbClearTraits()
//вместо 1 напишите № героя
Если будут баги — пишите, исправлю.