ページ 11

【解決済み】四捨五入される前の攻撃力を計算式に使用したいです

Posted: 2018年2月17日(土) 12:22
by ぼた餅
こんにちは。
連続でのトピック立てご容赦ください。


装備の特徴等によって攻撃力が「10.5」などと小数になった場合、
四捨五入されて「11」となりますが、
スキルの計算式で「11」ではなく「10.5」の数値を使う方法はないでしょうか?

たとえば計算式が「a.atk * 10」だと、「110」と「105」ではダメージが大きく異なってしまいます。

Re: 四捨五入される前の攻撃力を計算式に使用したいです

Posted: 2018年2月17日(土) 12:58
by しぐれん
やや上級者向けですが、以下の部分を改造すれば四捨五入を無効化できます。

コード: 全て選択

Game_BattlerBase.prototype.param = function(paramId) {
    var value = this.paramBase(paramId) + this.paramPlus(paramId);
    value *= this.paramRate(paramId) * this.paramBuffRate(paramId);
    var maxValue = this.paramMax(paramId);
    var minValue = this.paramMin(paramId);
    return (value.clamp(minValue, maxValue));
//    return Math.round(value.clamp(minValue, maxValue));
};
表示に少数点が紛れ込んでくるのでそのあたりも要修正です。
(調整項目が多いので触れない)

Re: 四捨五入される前の攻撃力を計算式に使用したいです

Posted: 2018年2月17日(土) 14:04
by ぼた餅
しぐれんさん

ありがとうございます、四捨五入の無効化を確認いたしました!
ですが、おっしゃる通り表示される桁数がとんでもないことになりますね…


本トピックは募集を継続させていただきます。
理想は装備画面で小数が表示されないことですが、小数点第一位までなら見た目もおかしくなさそうなので、
小数点第二位以下を四捨五入(10.5666→10.6)するような方法でも問題ありません。

(リクエストのほうにトピックを立て直すべきかもですが…あまり乱立するのもどうかと思うのでこちらで続けさせていただきます)

Re: 四捨五入される前の攻撃力を計算式に使用したいです

Posted: 2018年2月18日(日) 00:21
by しぐれん
他の方法として、「 四捨五入される前の攻撃力を取得」などの関数を作り、ダメージ式では常にそれを使うという方法があります。
その場合ダメージ式は「a.atkXXX()」などとなるでしょう。
(XXXは名前が思い浮かばないので適当に付けたものであり、より適したものがあると思います)

コード: 全て選択

Game_BattlerBase.prototype.paramNotRound = function(paramId) {
    var value = this.paramBase(paramId) + this.paramPlus(paramId);
    value *= this.paramRate(paramId) * this.paramBuffRate(paramId);
    var maxValue = this.paramMax(paramId);
    var minValue = this.paramMin(paramId);
    return (value.clamp(minValue, maxValue));
//    return Math.round(value.clamp(minValue, maxValue));
Game_BattlerBase.prototype.atkXXX=function(){
     return this.paramNotRound(2); 
}

こんな感じですね。

Re: 四捨五入される前の攻撃力を計算式に使用したいです

Posted: 2018年2月18日(日) 00:48
by ぼた餅
しぐれんさん

一度目ではなく新たに提示していただいたコードをjsファイルにして入れるってことですよね?
ダメージ計算式にて「a.atkXXX() * 10」としてみたところ相手にダメージが与えられませんでした。
おそらく私の記述がおかしいのだと思いますが、いったいどのように書けばいいのか教えていただけないでしょうか?

Re: 四捨五入される前の攻撃力を計算式に使用したいです

Posted: 2018年2月18日(日) 01:52
by しぐれん
すみません、寝ぼけて書き間違えてました。
正しくはこうです。

コード: 全て選択

Game_BattlerBase.prototype.paramNotRound = function(paramId) {
    var value = this.paramBase(paramId) + this.paramPlus(paramId);
    value *= this.paramRate(paramId) * this.paramBuffRate(paramId);
    var maxValue = this.paramMax(paramId);
    var minValue = this.paramMin(paramId);
    return (value.clamp(minValue, maxValue));
//    return Math.round(value.clamp(minValue, maxValue));
};
Game_BattlerBase.prototype.atkXXX=function(){
     return this.paramNotRound(2); 
};
{}を正しい位置に入れるのを忘れてました。

Re: 四捨五入される前の攻撃力を計算式に使用したいです

Posted: 2018年2月18日(日) 11:02
by ぼた餅
しぐれんさん

ありがとうございます!
完璧に私の希望する挙動を取っています!
ずっと頭を抱えていたことなので、解決できてとてもうれしいです。
感謝申し上げます^^