Project1
标题: 【插件改】为MOG_BattleHud添加状态回合数 [打印本页]
作者: jie119168 时间: 2022-12-15 19:19
标题: 【插件改】为MOG_BattleHud添加状态回合数
本帖最后由 jie119168 于 2024-2-28 20:01 编辑
用过MOG_BattleHud插件的你或许和我一样困扰于一个很劝退的问题,即是这个插件它创建的角色战斗窗口竟然不显示状态回合数,只是一个状态摆在那里不知道要持续多久。相关的求助贴在P1,rpgmaker forum都很多,却无人能回答。
今天我偶然翻到一篇神文在MTK project上https://mtk-project.jimdofree.co ... %E8%A9%B3%E7%B4%B0/
其详细叙述了如何为该插件添加状态回合的功能,同时我也对此方法进行了一定改进工作,希望能帮到一部分人。
被解决的问题:1.状态不显示回合数。 2.buff与debuff更新时下方状态列表不刷新状态。3.(新增)状态不显示堆叠数
解决思路:为Game_Battler的increaseBuff、decreaseBuff、eraseBuff、overwriteBuffTurns、updateBuffTurns分别添加need_refresh_bhud_states标记以触发刷新。将Triacontane的StateRingIcon插件中获取状态回合数与buff回合数的函数搬到MOG_BattleHud,挂在Game_BattlerBase上,最后在Refresh States2函数中调用它。
如果是已经魔改过度的,就只能手动加代码了,请参阅[具体过程],如果是Drill版可直接下载最底下文件覆盖。
具体过程:我们假定你手里有一份MOG_BattleHud.js
第一步
* @param States Adjust
* @parent ==状态==
* @desc ステートの間隔を自動調整する
* @default true
*
* @param States Turn
* @parent ==状态==
* @desc 味方ステートのターン数を表示する
* @default true
*
* @param States FontSize
* @parent ==状态==
* @desc 味方ステートのターン数のフォントサイズ
* @default 20
*
* @param States Turn X-Axis
* @parent ==状态==
* @desc 味方ステートのターン数のX座標調整
* @default 0
*
* @param States Turn Y-Axis
* @parent ==状态==
* @desc 味方ステートのターン数のY座標調整
* @default 0
*
* @param States Counter X-Axis
* @parent ==状态==
* @desc 味方ステートのターン数のX座標調整
* @default 0
*
* @param States Counter Y-Axis
* @parent ==状态==
* @desc 味方ステートのターン数のY座標調整
* @default 0
*
* @param State Color
* @parent ==状态==
* @type number
* @min 0
* @max 31
* @desc 状态颜色,如果有YEP状态核心设置了颜色,则遵循该插件的设置
* @default 0
* @param States Adjust
* @parent ==状态==
* @desc ステートの間隔を自動調整する
* @default true
*
* @param States Turn
* @parent ==状态==
* @desc 味方ステートのターン数を表示する
* @default true
*
* @param States FontSize
* @parent ==状态==
* @desc 味方ステートのターン数のフォントサイズ
* @default 20
*
* @param States Turn X-Axis
* @parent ==状态==
* @desc 味方ステートのターン数のX座標調整
* @default 0
*
* @param States Turn Y-Axis
* @parent ==状态==
* @desc 味方ステートのターン数のY座標調整
* @default 0
*
* @param States Counter X-Axis
* @parent ==状态==
* @desc 味方ステートのターン数のX座標調整
* @default 0
*
* @param States Counter Y-Axis
* @parent ==状态==
* @desc 味方ステートのターン数のY座標調整
* @default 0
*
* @param State Color
* @parent ==状态==
* @type number
* @min 0
* @max 31
* @desc 状态颜色,如果有YEP状态核心设置了颜色,则遵循该插件的设置
* @default 0
增加一部分控制状态回合数、堆叠数坐标与字体、颜色的插件参数
第二步
Moghunter.bhud_statesAdjust = String(Moghunter.parameters['States Adjust'] || true);
Moghunter.bhud_statesTurn = String(Moghunter.parameters['States Turn'] || true);
Moghunter.bhud_statesSize = Number(Moghunter.parameters['States FontSize'] || 20);
Moghunter.bhud_states_turn_x = Number(Moghunter.parameters['States Turn X-Axis'] || 0);
Moghunter.bhud_states_turn_y = Number(Moghunter.parameters['States Turn Y-Axis'] || 0);
Moghunter.bhud_states_counter_x = Number(Moghunter.parameters['States Counter X-Axis'] || 0);
Moghunter.bhud_states_counter_y = Number(Moghunter.parameters['States Counter Y-Axis'] || 0);
Moghunter.BSCTurnColor = Number(Moghunter.parameters['State Color']);
Moghunter.bhud_statesAdjust = String(Moghunter.parameters['States Adjust'] || true);
Moghunter.bhud_statesTurn = String(Moghunter.parameters['States Turn'] || true);
Moghunter.bhud_statesSize = Number(Moghunter.parameters['States FontSize'] || 20);
Moghunter.bhud_states_turn_x = Number(Moghunter.parameters['States Turn X-Axis'] || 0);
Moghunter.bhud_states_turn_y = Number(Moghunter.parameters['States Turn Y-Axis'] || 0);
Moghunter.bhud_states_counter_x = Number(Moghunter.parameters['States Counter X-Axis'] || 0);
Moghunter.bhud_states_counter_y = Number(Moghunter.parameters['States Counter Y-Axis'] || 0);
Moghunter.BSCTurnColor = Number(Moghunter.parameters['State Color']);
增加更多读取步骤,让插件获取到你的插件参数
第2.5步
//==============================
// * addNewState
//==============================
var _alias_mog_bhud_addState = Game_Battler.prototype.addState
Game_Battler.prototype.addState = function (stateId) {
_alias_mog_bhud_addState.call(this, stateId);
this.need_refresh_bhud_states = true;
};
//==============================
// * addNewState
//==============================
var _alias_mog_bhud_addState = Game_Battler.prototype.addState
Game_Battler.prototype.addState = function (stateId) {
_alias_mog_bhud_addState.call(this, stateId);
this.need_refresh_bhud_states = true;
};
原函数对addNewState添加的更新不够全面,无法在状态覆盖导致回合数变化时自动更新,故这里选择直接在addstate阶段添加更新标记,同时删去addNewState更改。
第三步
if (Imported.YEP_BuffsStatesCore) {
//==============================
// * setStateCounter
//==============================
var _alias_mog_bhud_setStateCounter = Game_BattlerBase.prototype.setStateCounter
Game_BattlerBase.prototype.setStateCounter = function (stateId, value) {
_alias_mog_bhud_setStateCounter.call(this, stateId, value);
this.need_refresh_bhud_states = true;
};
}
//==============================
// * increaseBuff
//==============================
var _alias_mog_bhud_increaseBuff = Game_BattlerBase.prototype.increaseBuff
Game_BattlerBase.prototype.increaseBuff = function (paramId) {
_alias_mog_bhud_increaseBuff.call(this, paramId);
this.need_refresh_bhud_states = true;
};
//==============================
// * decreaseBuff
//==============================
var _alias_mog_bhud_decreaseBuff = Game_BattlerBase.prototype.decreaseBuff
Game_BattlerBase.prototype.decreaseBuff = function (paramId) {
_alias_mog_bhud_decreaseBuff.call(this, paramId);
this.need_refresh_bhud_states = true;
};
//==============================
// * eraseBuff
//==============================
var _alias_mog_bhud_eraseBuff = Game_BattlerBase.prototype.eraseBuff
Game_BattlerBase.prototype.eraseBuff = function (paramId) {
_alias_mog_bhud_eraseBuff.call(this, paramId);
this.need_refresh_bhud_states = true;
};
//==============================
// * overwriteBuffTurns
//==============================
var _alias_mog_bhud_overwriteBuffTurns = Game_Battler.prototype.overwriteBuffTurns
Game_Battler.prototype.overwriteBuffTurns = function (paramId, turns) {
_alias_mog_bhud_overwriteBuffTurns.call(this, paramId, turns);
this.need_refresh_bhud_states = true;
};
//==============================
// * updateBuffTurns
//==============================
var _alias_mog_bhud_updateBuffTurns = Game_Battler.prototype.updateBuffTurns
Game_Battler.prototype.updateBuffTurns = function () {
_alias_mog_bhud_updateBuffTurns.call(this);
this.need_refresh_bhud_states = true;
};
Game_BattlerBase.prototype.getStateTurns = function () {
var stateTurns = this.states().map(function (state) {
if (state.iconIndex <= 0) {
return null;
} else if (state.autoRemovalTiming <= 0) {
return '';
} else {
var turns = this._stateTurns[state.id];
if (turns !== 0 && !turns) return '';
return Math.ceil(turns);//+ (state.autoRemovalTiming === 1 ? 1 : 0);
}
}, this);
return stateTurns.filter(function (turns) {
return turns !== null;
});
};
Game_BattlerBase.prototype.getBuffTurns = function () {
return this._buffTurns.filter(function (turns, index) {
return this._buffs[index] !== 0;
}, this);
};
Game_BattlerBase.prototype.getAllTurns = function () {
return this.getStateTurns().concat(this.getBuffTurns()).map(function (turn) {
return turn;
});
};
if (Imported.YEP_BuffsStatesCore) {
Game_BattlerBase.prototype.getStateCounters = function () {
var stateCounters = this.states().map(function (state) {
if (state.iconIndex <= 0) {
return null;
} else {
var counter = this.getStateCounter(state.id);
if (counter !== 0 && !counter) return '';
return Math.ceil(counter);//+ (state.autoRemovalTiming === 1 ? 1 : 0);
}
}, this);
return stateCounters.filter(function (counter) {
return counter !== null;
});
};
Game_BattlerBase.prototype.getBuffCounters = function () {
return this.getBuffTurns().map(function (counter) {
return '';
});
};
Game_BattlerBase.prototype.getAllCounters = function () {
return this.getStateCounters().concat(this.getBuffCounters()).map(function (counter) {
return counter;
});
};
}
if (Imported.YEP_BuffsStatesCore) {
//==============================
// * setStateCounter
//==============================
var _alias_mog_bhud_setStateCounter = Game_BattlerBase.prototype.setStateCounter
Game_BattlerBase.prototype.setStateCounter = function (stateId, value) {
_alias_mog_bhud_setStateCounter.call(this, stateId, value);
this.need_refresh_bhud_states = true;
};
}
//==============================
// * increaseBuff
//==============================
var _alias_mog_bhud_increaseBuff = Game_BattlerBase.prototype.increaseBuff
Game_BattlerBase.prototype.increaseBuff = function (paramId) {
_alias_mog_bhud_increaseBuff.call(this, paramId);
this.need_refresh_bhud_states = true;
};
//==============================
// * decreaseBuff
//==============================
var _alias_mog_bhud_decreaseBuff = Game_BattlerBase.prototype.decreaseBuff
Game_BattlerBase.prototype.decreaseBuff = function (paramId) {
_alias_mog_bhud_decreaseBuff.call(this, paramId);
this.need_refresh_bhud_states = true;
};
//==============================
// * eraseBuff
//==============================
var _alias_mog_bhud_eraseBuff = Game_BattlerBase.prototype.eraseBuff
Game_BattlerBase.prototype.eraseBuff = function (paramId) {
_alias_mog_bhud_eraseBuff.call(this, paramId);
this.need_refresh_bhud_states = true;
};
//==============================
// * overwriteBuffTurns
//==============================
var _alias_mog_bhud_overwriteBuffTurns = Game_Battler.prototype.overwriteBuffTurns
Game_Battler.prototype.overwriteBuffTurns = function (paramId, turns) {
_alias_mog_bhud_overwriteBuffTurns.call(this, paramId, turns);
this.need_refresh_bhud_states = true;
};
//==============================
// * updateBuffTurns
//==============================
var _alias_mog_bhud_updateBuffTurns = Game_Battler.prototype.updateBuffTurns
Game_Battler.prototype.updateBuffTurns = function () {
_alias_mog_bhud_updateBuffTurns.call(this);
this.need_refresh_bhud_states = true;
};
Game_BattlerBase.prototype.getStateTurns = function () {
var stateTurns = this.states().map(function (state) {
if (state.iconIndex <= 0) {
return null;
} else if (state.autoRemovalTiming <= 0) {
return '';
} else {
var turns = this._stateTurns[state.id];
if (turns !== 0 && !turns) return '';
return Math.ceil(turns);//+ (state.autoRemovalTiming === 1 ? 1 : 0);
}
}, this);
return stateTurns.filter(function (turns) {
return turns !== null;
});
};
Game_BattlerBase.prototype.getBuffTurns = function () {
return this._buffTurns.filter(function (turns, index) {
return this._buffs[index] !== 0;
}, this);
};
Game_BattlerBase.prototype.getAllTurns = function () {
return this.getStateTurns().concat(this.getBuffTurns()).map(function (turn) {
return turn;
});
};
if (Imported.YEP_BuffsStatesCore) {
Game_BattlerBase.prototype.getStateCounters = function () {
var stateCounters = this.states().map(function (state) {
if (state.iconIndex <= 0) {
return null;
} else {
var counter = this.getStateCounter(state.id);
if (counter !== 0 && !counter) return '';
return Math.ceil(counter);//+ (state.autoRemovalTiming === 1 ? 1 : 0);
}
}, this);
return stateCounters.filter(function (counter) {
return counter !== null;
});
};
Game_BattlerBase.prototype.getBuffCounters = function () {
return this.getBuffTurns().map(function (counter) {
return '';
});
};
Game_BattlerBase.prototype.getAllCounters = function () {
return this.getStateCounters().concat(this.getBuffCounters()).map(function (counter) {
return counter;
});
};
}
增加部分需要的函数,包括刷新,以及回合数获取。
由于YEP系列插件可能会允许你添加一些被动状态之类的,YEP系默认是不显示被动的状态回合,而Triacontane的StateRingIcon.js原样复制会导致显示文字‘NAN’,故我已经进行了相应调整,同理对回合结束消失状态和行动结束消失状态的回合数区分也注释掉了,不喜欢的话可以根据需要对2555行进行相应去注释。
第四步
Battle_Hud.prototype.refresh_states = function () {
this._states_data[0] = 0;
this._states_data[2] = 0;
if (this._turnSprite) this._turnSprite.bitmap.clear();
this._state_icon.visible = false;
if (this._battler.allIcons().length == 0) { this._states_data[1] = 0; return };
if (this._battler.allIcons()[this._states_data[1]]) {
this._states_data[0] = this._battler.allIcons()[this._states_data[1]];
this._state_icon.visible = true;
var turns = this._battler.getAllTurns();//ターン数取得
if (Imported.YEP_BuffsStatesCore) var counters = this._battler.getAllCounters();
var sx = this._states_data[0] % 16 * 32;
var sy = Math.floor(this._states_data[0] / 16) * 32;
this._state_icon.setFrame(sx, sy, 32, 32);
this._battler.need_refresh_bhud_states = false;
if (Moghunter.bhud_statesTurn) {//ステートターン数表示がONのとき
var sprite = new Sprite();
sprite.bitmap = new Bitmap(Sprite_StateIcon._iconWidth, Sprite_StateIcon._iconHeight);
sprite.bitmap.fontSize = Number(Moghunter.bhud_statesSize);
sprite.x = 0;
sprite.y = 0;
this._turnSprite = sprite;
this._state_icon.addChild(this._turnSprite);
var bitmap = this._turnSprite.bitmap;
// bitmap.clear();
bitmap.textColor = Imported.YEP_BuffsStatesCore ? SceneManager._scene._statusWindow.textColor(Yanfly.Param.BSCTurnColor) : SceneManager._scene._statusWindow.textColor(Moghunter.BSCTurnColor);
bitmap.drawText(turns[this._states_data[1]], -3 + Moghunter.bhud_states_turn_x, -6 + Moghunter.bhud_states_turn_y, bitmap.width, bitmap.height, 'right');
if (Imported.YEP_BuffsStatesCore) {
bitmap.textColor = SceneManager._scene._statusWindow.textColor(Yanfly.Param.BSCCounterColor);
bitmap.drawText(counters[this._states_data[1]], 0 + Moghunter.bhud_states_counter_x, 8 + Moghunter.bhud_states_counter_y, bitmap.width, bitmap.height, 'left');
}
};
};
this._states_data[1] += 1;
if (this._states_data[1] >= this._battler.allIcons().length) {
this._states_data[1] = 0
};
};
Battle_Hud.prototype.refresh_states = function () {
this._states_data[0] = 0;
this._states_data[2] = 0;
if (this._turnSprite) this._turnSprite.bitmap.clear();
this._state_icon.visible = false;
if (this._battler.allIcons().length == 0) { this._states_data[1] = 0; return };
if (this._battler.allIcons()[this._states_data[1]]) {
this._states_data[0] = this._battler.allIcons()[this._states_data[1]];
this._state_icon.visible = true;
var turns = this._battler.getAllTurns();//ターン数取得
if (Imported.YEP_BuffsStatesCore) var counters = this._battler.getAllCounters();
var sx = this._states_data[0] % 16 * 32;
var sy = Math.floor(this._states_data[0] / 16) * 32;
this._state_icon.setFrame(sx, sy, 32, 32);
this._battler.need_refresh_bhud_states = false;
if (Moghunter.bhud_statesTurn) {//ステートターン数表示がONのとき
var sprite = new Sprite();
sprite.bitmap = new Bitmap(Sprite_StateIcon._iconWidth, Sprite_StateIcon._iconHeight);
sprite.bitmap.fontSize = Number(Moghunter.bhud_statesSize);
sprite.x = 0;
sprite.y = 0;
this._turnSprite = sprite;
this._state_icon.addChild(this._turnSprite);
var bitmap = this._turnSprite.bitmap;
// bitmap.clear();
bitmap.textColor = Imported.YEP_BuffsStatesCore ? SceneManager._scene._statusWindow.textColor(Yanfly.Param.BSCTurnColor) : SceneManager._scene._statusWindow.textColor(Moghunter.BSCTurnColor);
bitmap.drawText(turns[this._states_data[1]], -3 + Moghunter.bhud_states_turn_x, -6 + Moghunter.bhud_states_turn_y, bitmap.width, bitmap.height, 'right');
if (Imported.YEP_BuffsStatesCore) {
bitmap.textColor = SceneManager._scene._statusWindow.textColor(Yanfly.Param.BSCCounterColor);
bitmap.drawText(counters[this._states_data[1]], 0 + Moghunter.bhud_states_counter_x, 8 + Moghunter.bhud_states_counter_y, bitmap.width, bitmap.height, 'left');
}
};
};
this._states_data[1] += 1;
if (this._states_data[1] >= this._battler.allIcons().length) {
this._states_data[1] = 0
};
};
Battle_Hud.prototype.refresh_states2 = function () {
this._state_icon.visible = false;
this._battler.need_refresh_bhud_states = false;
for (i = 0; i < this._stateIcons.length; i++) {
this._state_icon.removeChild(this._stateIcons[i]);
};
if (this._battler.allIcons().length == 0) { return };
this._state_icon.visible = true;
this._stateIcons = [];
var w = Window_Base._iconWidth;
var icons = this._battler.allIcons().slice(0, w);
var m = Math.min(Math.max(this._battler.allIcons().length, 0), Moghunter.bhud_statesMax);
//var align = Moghunter.bhud_statesAlign;
var pad = 4;//間隔
var iwidth = this._layout.bitmap.width;//枠幅
var simax = Math.floor(iwidth / w);//調整なし最大表示数
var adjx = Math.floor((iwidth - w) / m);//調整したときの間隔
var turns = this._battler.getAllTurns();//ターン数取得
if (Imported.YEP_BuffsStatesCore) var counters = this._battler.getAllCounters();
for (i = 0; i < m; i++) {
this._stateIcons[i] = new Sprite(this._state_img);
var sx = icons[i] % 16 * w;
var sy = Math.floor(icons[i] / 16) * w;
this._stateIcons[i].setFrame(sx, sy, w, w);
this._stateIcons[i].x = (w + pad) * i;//align左寄せ専用
if (Moghunter.bhud_statesAdjust) {//位置自動調整がONのときx変更
if (m >= simax) { //枠からはみ出る数なら詰める
this._stateIcons[i].x = adjx * i;
};
};
if (Moghunter.bhud_statesTurn) {//ステートターン数表示がONのとき
var sprite = new Sprite();
sprite.bitmap = new Bitmap(Sprite_StateIcon._iconWidth, Sprite_StateIcon._iconHeight);
sprite.bitmap.fontSize = Number(Moghunter.bhud_statesSize);
sprite.x = 0;
sprite.y = 0;
this._turnSprite = sprite;
this._stateIcons[i].addChild(this._turnSprite);
var bitmap = this._turnSprite.bitmap;
bitmap.clear();
bitmap.textColor = Imported.YEP_BuffsStatesCore ? SceneManager._scene._statusWindow.textColor(Yanfly.Param.BSCTurnColor) : SceneManager._scene._statusWindow.textColor(Moghunter.BSCTurnColor);
bitmap.drawText(turns[i], -3 + Moghunter.bhud_states_turn_x, -6 + Moghunter.bhud_states_turn_y, bitmap.width, bitmap.height, 'right');
if (Imported.YEP_BuffsStatesCore) {
bitmap.textColor = SceneManager._scene._statusWindow.textColor(Yanfly.Param.BSCCounterColor);
bitmap.drawText(counters[i], 0 + Moghunter.bhud_states_counter_x, 8 + Moghunter.bhud_states_counter_y, bitmap.width, bitmap.height, 'left');
}
};
// if (align === 1) {
// this._stateIcons[i].x = -((w + 4) * i);
// } else if (align === 2) {
// this._stateIcons[i].y = (w + 4) * i;
// } else if (align === 3) {
// this._stateIcons[i].y = -((w + 4) * i);
// } else {
// this._stateIcons[i].x = (w + 4) * i;
// };
this._state_icon.addChild(this._stateIcons[i]);
};
};
Battle_Hud.prototype.refresh_states2 = function () {
this._state_icon.visible = false;
this._battler.need_refresh_bhud_states = false;
for (i = 0; i < this._stateIcons.length; i++) {
this._state_icon.removeChild(this._stateIcons[i]);
};
if (this._battler.allIcons().length == 0) { return };
this._state_icon.visible = true;
this._stateIcons = [];
var w = Window_Base._iconWidth;
var icons = this._battler.allIcons().slice(0, w);
var m = Math.min(Math.max(this._battler.allIcons().length, 0), Moghunter.bhud_statesMax);
//var align = Moghunter.bhud_statesAlign;
var pad = 4;//間隔
var iwidth = this._layout.bitmap.width;//枠幅
var simax = Math.floor(iwidth / w);//調整なし最大表示数
var adjx = Math.floor((iwidth - w) / m);//調整したときの間隔
var turns = this._battler.getAllTurns();//ターン数取得
if (Imported.YEP_BuffsStatesCore) var counters = this._battler.getAllCounters();
for (i = 0; i < m; i++) {
this._stateIcons[i] = new Sprite(this._state_img);
var sx = icons[i] % 16 * w;
var sy = Math.floor(icons[i] / 16) * w;
this._stateIcons[i].setFrame(sx, sy, w, w);
this._stateIcons[i].x = (w + pad) * i;//align左寄せ専用
if (Moghunter.bhud_statesAdjust) {//位置自動調整がONのときx変更
if (m >= simax) { //枠からはみ出る数なら詰める
this._stateIcons[i].x = adjx * i;
};
};
if (Moghunter.bhud_statesTurn) {//ステートターン数表示がONのとき
var sprite = new Sprite();
sprite.bitmap = new Bitmap(Sprite_StateIcon._iconWidth, Sprite_StateIcon._iconHeight);
sprite.bitmap.fontSize = Number(Moghunter.bhud_statesSize);
sprite.x = 0;
sprite.y = 0;
this._turnSprite = sprite;
this._stateIcons[i].addChild(this._turnSprite);
var bitmap = this._turnSprite.bitmap;
bitmap.clear();
bitmap.textColor = Imported.YEP_BuffsStatesCore ? SceneManager._scene._statusWindow.textColor(Yanfly.Param.BSCTurnColor) : SceneManager._scene._statusWindow.textColor(Moghunter.BSCTurnColor);
bitmap.drawText(turns[i], -3 + Moghunter.bhud_states_turn_x, -6 + Moghunter.bhud_states_turn_y, bitmap.width, bitmap.height, 'right');
if (Imported.YEP_BuffsStatesCore) {
bitmap.textColor = SceneManager._scene._statusWindow.textColor(Yanfly.Param.BSCCounterColor);
bitmap.drawText(counters[i], 0 + Moghunter.bhud_states_counter_x, 8 + Moghunter.bhud_states_counter_y, bitmap.width, bitmap.height, 'left');
}
};
// if (align === 1) {
// this._stateIcons[i].x = -((w + 4) * i);
// } else if (align === 2) {
// this._stateIcons[i].y = (w + 4) * i;
// } else if (align === 3) {
// this._stateIcons[i].y = -((w + 4) * i);
// } else {
// this._stateIcons[i].x = (w + 4) * i;
// };
this._state_icon.addChild(this._stateIcons[i]);
};
};
最关键的一步,在refresh_states和refresh_states2函数内改造(注意,并不是增加两个新函数,代码里已经有这两个函数了,记得改掉就行),其实就是添加一定步骤以完成回合数显示。虽然MTK project只提供了refresh_states2函数的改法(即直线并排),不过我发挥主观能动性,马上想到了refresh_states函数的改进思路(即依次闪烁)。
(可选)第五步
添加一定的第三方兼容
if (Imported.Olivia_StateOlivia_StateTooltipDisplay) {
var _alias_wr_mogbattlehud_create_states = Battle_Hud.prototype.create_states
Battle_Hud.prototype.create_states = function () {
_alias_wr_mogbattlehud_create_states.call(this);
this._statusTooltipWindow = new Window_StateIconTooltip();
this.addChild(this._statusTooltipWindow);
}
var _alias_wr_mogbattlehud_create_states2 = Battle_Hud.prototype.create_states2
Battle_Hud.prototype.create_states2 = function () {
_alias_wr_mogbattlehud_create_states2.call(this);
this._statusTooltipWindow = new Window_StateIconTooltip();
this.addChild(this._statusTooltipWindow);
}
var _alias_wr_mogbattlehud_update_states = Battle_Hud.prototype.update_states
Battle_Hud.prototype.update_states = function () {
_alias_wr_mogbattlehud_update_states.call(this);
x = TouchInput._mouseOverX;
y = TouchInput._mouseOverY;
if (this.is_hover_over_icon(x, y) && this._battler.allIcons().length > 0) {
this._statusTooltipWindow.tooltipWindow()._battler = this._battler;
this._statusTooltipWindow.updateStateIconTooltipWindow();
};
};
var _alias_wr_mogbattlehud_update_states2 = Battle_Hud.prototype.update_states2
Battle_Hud.prototype.update_states2 = function () {
_alias_wr_mogbattlehud_update_states2.call(this);
x = TouchInput._mouseOverX;
y = TouchInput._mouseOverY;
if (this.is_hover_over_icon(x, y) && this._battler.allIcons().length > 0) {
this._statusTooltipWindow.tooltipWindow()._battler = this._battler;
this._statusTooltipWindow.updateStateIconTooltipWindow();
};
};
Battle_Hud.prototype.is_hover_over_icon = function (x, y) {
if (x >= this._state_icon.x &&
x <= this._state_icon.x + 32 &&
y >= this._state_icon.y &&
y <= this._state_icon.y + 32) {
return true;
}
else {
return false;
}
}
}
if (Imported.Olivia_StateOlivia_StateTooltipDisplay) {
var _alias_wr_mogbattlehud_create_states = Battle_Hud.prototype.create_states
Battle_Hud.prototype.create_states = function () {
_alias_wr_mogbattlehud_create_states.call(this);
this._statusTooltipWindow = new Window_StateIconTooltip();
this.addChild(this._statusTooltipWindow);
}
var _alias_wr_mogbattlehud_create_states2 = Battle_Hud.prototype.create_states2
Battle_Hud.prototype.create_states2 = function () {
_alias_wr_mogbattlehud_create_states2.call(this);
this._statusTooltipWindow = new Window_StateIconTooltip();
this.addChild(this._statusTooltipWindow);
}
var _alias_wr_mogbattlehud_update_states = Battle_Hud.prototype.update_states
Battle_Hud.prototype.update_states = function () {
_alias_wr_mogbattlehud_update_states.call(this);
x = TouchInput._mouseOverX;
y = TouchInput._mouseOverY;
if (this.is_hover_over_icon(x, y) && this._battler.allIcons().length > 0) {
this._statusTooltipWindow.tooltipWindow()._battler = this._battler;
this._statusTooltipWindow.updateStateIconTooltipWindow();
};
};
var _alias_wr_mogbattlehud_update_states2 = Battle_Hud.prototype.update_states2
Battle_Hud.prototype.update_states2 = function () {
_alias_wr_mogbattlehud_update_states2.call(this);
x = TouchInput._mouseOverX;
y = TouchInput._mouseOverY;
if (this.is_hover_over_icon(x, y) && this._battler.allIcons().length > 0) {
this._statusTooltipWindow.tooltipWindow()._battler = this._battler;
this._statusTooltipWindow.updateStateIconTooltipWindow();
};
};
Battle_Hud.prototype.is_hover_over_icon = function (x, y) {
if (x >= this._state_icon.x &&
x <= this._state_icon.x + 32 &&
y >= this._state_icon.y &&
y <= this._state_icon.y + 32) {
return true;
}
else {
return false;
}
}
}
行了,到此为止,你可以运行你的工程测试一下战斗了。相信你也会和我一样有这样的效果:
2022.12.16 修正了refresh_states的方法以保证不会让回合数数字重叠
2023.4.12 增加了在使用YEP状态核心时显示状态层数(counter)的需求
2023.5.18 修正了状态叠加时不更新回合数的情况
2023.5.20 增加了状态回合数与堆叠颜色调整(一般遵循YEP状态核心,如果没有可以自己给),增加坐标分别调整,避免了回合数达到2-3位数时显示不全问题
2024.2.7 修改了状态回合的坐标默认位置,增加对Olivia_StateOlivia_StateTooltipDisplay的兼容
如下文件提供给版本比较正常的MOG_Battlehud使用者,以Drill版为准,基本可直接覆盖
MOG_BattleHud.zip
(22.89 KB, 下载次数: 144)
注意:如果同时使用YEP状态核心,请将MOG_Battlehud插件放在更下层
作者: woliebe 时间: 2022-12-15 21:36
高级了,但是先存着,谢谢大大
作者: nhycs01 时间: 2022-12-15 22:11
本帖最后由 nhycs01 于 2022-12-15 22:18 编辑
大佬,可以直接将修改后的插件发出来吗,万分感谢!
用的是(Drill_up翻译+优化)的版本,跟大佬的插件位置完全对不上。
作者: jie119168 时间: 2022-12-15 22:24
你能保证将全部内容塞进去在大致位置即可,除了最后两个函数要保证覆盖式改动
错位是不会导致bug的,不过我文件刚更新好,你可以对照着看看
作者: nhycs01 时间: 2022-12-15 23:49
大佬这么厉害,能不能修改一下,让状态图标显示在SV角色头顶?
我好像在以前看到过别人的截图,但是忘了在哪里了。论坛搜索遍了也没有。
MOG的自带状态实在不太好用,要么只显示一个,然后交替闪烁,这样一旦状态较多时,实际体验并不好,需要盯着状态框看半天。当然也可以排列,但是碍于角色面板的原因,如果角色多,状态多时,面板排列会显得很乱。如果能在SV角色头顶显示就太棒了!
作者: jie119168 时间: 2022-12-16 00:06
我是和YEP_BuffsStatesCore连用的,可以显示敌我双方的状态在SV顶上。
和MOG系没有冲突
作者: jie119168 时间: 2022-12-16 22:19
修正了依次闪烁型的refresh_states函数会显示数字重叠的问题,请及时更正插件!
作者: nhycs01 时间: 2022-12-19 14:03
大佬好,感谢你的回复。但是我使用YEP_BuffsStatesCore这个插件为什么SV角色头顶不会出现图标呢?只在下面的状态栏会显示。
请问是哪里没有设置好?插件我使用默认设置的
作者: jie119168 时间: 2022-12-19 20:00
本帖最后由 jie119168 于 2022-12-19 20:24 编辑
YEP的battle engine core 。核心插件就行,可以不用buffstate,但是结合YEP_BuffsStatesCore才能做到给这个SV上状态图标加上回合数
作者: nhycs01 时间: 2022-12-19 20:31
我两种情况都试过了:
1单独用Battle engine core ,
2配合BuffsStatesCore用,
两种方式都试过了,还是不行,状态永远显示在下方。不会显示在SV角色头顶,大佬可以贴一张图看看插件在哪里需要设置吗?
作者: jie119168 时间: 2022-12-19 21:24
本帖最后由 jie119168 于 2022-12-19 21:52 编辑
插件即插即用,如果还是不行这问题就超出我的能力范围了,你如果不能提供更为细致的信息我也没法分析个所以然。个人猜测可能是以下几个之一:
1.插件Buffstatecore的Show Enemy Icons没true,但是默认值就是true,应可排除
2.插件顺序错误,我实测发现顺序并不太影响这个部分。我的顺序是YEP战斗核心-YEP状态核心-MOGhud
3.你用了其它战斗相关插件,其中存在会导致本功能失效的函数.这就需要你先关闭别的插件完成检查了
4.你的MV版本小于1.61,你的插件版本较旧之类的(YEP战斗核心1.51,状态核心1.16),这个就太乱了不好说
抱歉,我刚才没怎么测试,实际上你除了要按上述两个插件,另外需要一个YEP_X_VisualStateFX,这个是最关键的。加了这个就好了
作者: jie119168 时间: 2022-12-19 21:55
还有问题的话不方便解释可以另外开贴发问
作者: jie119168 时间: 2023-4-12 20:54
新增了在图标左下角支持显示YEP状态核心的层数counter功能,并微调了定义数字坐标位置的方式,其余部分没有调整。
有这方面显示需求的可以下新版。
作者: 贝尔沃夫 时间: 2023-5-9 22:35
有些奇怪的bug……原来也是用的mog_battlehud没问题,不知道为什么。
作者: jie119168 时间: 2023-5-10 00:07
是否是下载的附件,还是直接加的代码?
如果是下载的附件有问题,那可能会是插件冲突,需要你提供一下插件列表我看看
作者: 贝尔沃夫 时间: 2023-5-10 20:49
我尝试直接下载替换和直接加代码都出现了这个问题。
但之前用原版的没有这个问题,还是说我缺少了某个额外插件?
我先把目前的插件列表发给你。
作者: 贝尔沃夫 时间: 2023-5-12 16:03
本帖最后由 贝尔沃夫 于 2023-5-12 16:13 编辑
不过好像在原版mog_BattleHud,也可以不加任何代码就做到显示回合数,不过比较累,要一个个在状态备注里面写上:
<Custom Regenerate Effect>
target.setStateCounter();
<Custom Regenerate Effect>
这一条应该就好。
作者: 贝尔沃夫 时间: 2023-5-12 16:12
至于buff叠层数,我发现原版moghub插件代码也可以变相显示……
首先定义一个代表层数的变量:
target._du = target._du || 0;
然后根据状态技能效果给他叠层数:
target._du += 3;
然后在显示时带上这个变量层数:
target.setStateCounter(3, target._du);
这样的方式似乎也能达到显示层数和回合数的效果。
作者: LaVanaPordego 时间: 2023-5-12 22:47
大佬好,感谢你的插件,但我在使用过后发现所有自定义资源都不能加载,显示fail to load Battle__ui_hud 文件夹下的一张undefined图片,但是我插件里所有的图片都已经配齐了
如果添加一张叫做undefined的图片,那么运行游戏后战斗界面全部与该插件相关的资源都会变成这张undefined的图片
所有图像包括新加的undefined都是PNG,不影响旧版mog-drill插件运行
想问问大佬哪里出了问题
作者: jie119168 时间: 2023-5-12 23:16
资源加载这块很难说。
你可以告诉我原来你用的battlehud是什么版本的,并且试试自己手动改一下原版js文件,
可能就不会出问题了。
其它battlehud版本我也没怎么研究过
作者: LaVanaPordego 时间: 2023-5-13 14:02
先用了在本贴下载的,然后换了一个新的mog+drillup版本的battlehub试着自己按帖子内容修改了,都出现了同样的问题
不知道怎么解决,暂时先换回原插件了,还是感谢大佬
作者: jie119168 时间: 2023-5-13 19:21
我也试出了你的问题,你需要避免以下问题。
1.不要更改插件名称,名称严格为MOG_BattleHud.js
2.直接导入本贴开头我提供的插件可能会更改资源调用,所以此时应当注意调整资源名称,例如Drill第一个资源名为【drill_战斗窗口-整体布局】,可能会被变更为【战斗窗口-整体布局】导致undefined
作者: jie119168 时间: 2023-5-13 19:29
本帖最后由 jie119168 于 2023-5-13 19:32 编辑
是这样的,如果你同时使用了YEP系列插件,需要将MOG_BATTLEHUD插件放在至少YEP状态核心以下
原因是状态层数的读取需要调用状态核心的函数,所以存在依赖关系。
如果你不使用状态核心,倒是没有这个顺序要求
作者: LaVanaPordego 时间: 2023-5-13 20:48
本帖最后由 LaVanaPordego 于 2023-5-13 21:10 编辑
懂了,我觉得我遇到的问题是第一个情况,谢谢楼主
编辑:试过了,已解决,再次感谢
作者: jie119168 时间: 2023-5-20 00:19
新版更新干掉了若干错误并增加了调整自由度,欢迎试用
作者: dunklen.f 时间: 2023-6-8 21:36
前几天的这个帖子也是给 MOG_BattleHud 加回合数,跟楼主一样的功能哎,是不是楼主的马甲
作者: jie119168 时间: 2023-6-10 12:31
感谢推荐,外网RM论坛的这作者写的WR_MOG_BattleHud_StatesPatch(以下简称statespatch)我也看过。
我的插件(简称魔改Battlehud)修改与他的存在一定的区别,所以感兴趣的可以选择其中更适合自己的用:
1.StatesPatch以附属插件形式增强MOGbattlehud的状态回合数功能,而我在本帖介绍的是直接改MOGbattlehud本体。魔改Battlehud方法好处是可以适用于版本更复杂的MOGbattlehud。
2.StatesPatch依赖YEP战斗核心和状态核心,本帖魔改Battlehud不依赖这两个插件也可运作。
3.StatesPatch支持Olivia_StateTooltipDisplay插件对显示状态说明的扩展;魔改Battlehud并没有该支持。
4.StatesPatch目前只支持状态显示模式为“依次闪烁”的回合数显示,作者可能以后会增加“并排显示”;魔改Battlehud支持两种都显示。
5.魔改Battlehud支持在加入YEP状态核心时显示状态堆叠层数
作者: nep草莓布丁 时间: 2023-6-28 18:49
大佬,我按照你的教程魔改了原版mog_Battlehud,现在counter能显示出来了,但是回合数还是无法显示,想问下是哪个方面出了问题呢?
作者: jie119168 时间: 2023-6-29 12:28
改完的插件发我,我测试一下
作者: nep草莓布丁 时间: 2023-7-1 16:09
感谢大佬,改过的详见附件
-
-
MOG_BattleHud-Manual added.rar
18.55 KB, 下载次数: 5
作者: jie119168 时间: 2023-7-4 23:32
我试了一下,可以正常显示的。
如果你显示不出来,最好进插件管理器一次,然后在该插件点一下确定以应用新参数。
只改js不进插件管理器会出错的。
作者: 猛男粗大黑 时间: 2024-2-24 11:25
大佬,你提供的附件没法下载,显示该附件无法读取
作者: 猛男粗大黑 时间: 2024-3-2 18:07
大佬,有没有MZ的魔改MOG_BattleHud
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |