【解決済み】エラー修正

nira
記事: 13
登録日時: 2016年8月23日(火) 22:07

【解決済み】エラー修正

投稿記事by nira » 2018年2月26日(月) 04:58

失礼致します。

以前、faida様にこちらのスクリプト(viewtopic.php?f=46&t=2666)を作って頂いたのですが、
戦闘途中で仲間を加入させ、その仲間が瀕死状態になると、each_with_indexのno methodエラーが生じます。

恐らく、戦闘開始処理でinit_crisis_effectsが実行されている為、途中で加入する仲間の処理が定義されてないと
思われます。恐縮ではありますが、このエラーを修正していただけないでしょうか?

又、こちらのスクリプト(viewtopic.php?f=46&t=1927)に関しても、スキルに設定されたMPが現在MPと同じである場合、エネミーがスキルを使用(その瞬間MPは0)してしまって、そのままエラーを吐いてしまいます。

よろしくお願いします。
最後に編集したユーザー nira on 2018年2月28日(水) 09:58 [ 編集 1 回目 ]

TOMO
記事: 252
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

Re: エラー修正

投稿記事by TOMO » 2018年2月28日(水) 07:01

前者の方は、問題の行の前に

コード: 全て選択

init_crisis_effects if @crisis_effects.nil?
を入れれば直ると思います



後者の方は、
とりあえず前者の方と同じようにエラー内容を書いて下さい
多分Scene_Battle584行目のNoMethodErrorだと思いますが

【追記】問題があった為、スクリプトを削除しました
本来の機能の事を忘れて作ってた…
最後に編集したユーザー TOMO on 2018年2月28日(水) 17:16 [ 編集 2 回目 ]
faida
記事: 256
登録日時: 2015年12月17日(木) 16:44

Re: エラー修正

投稿記事by faida » 2018年2月28日(水) 09:29

大変遅くなりました。
前者は加入処理時にも瀕死効果の初期化を行うようにしました。
あと、ステート付加時のアニメーションをステートごとに指定できるようにアップデートしています。

※2019/10/3 不具合が出たので、元のトピックに修正版を添付しています。

後者は「MPがちょうどなくなる時に使えるようにするのか使えないようにするのか」が判別できなかったので
とりあえずオプションで付けました。
あと、普通にHP0で倒してもMP0でない場合に復活する不具合を修正しました。

コード: 全て選択

# MP戦闘不能を持つキャラはMPがちょうど0になる場合スキルを使用できない
BATTLER_NOUSEMP_DEATH = true

class RPG::BaseItem
  def mp0_death
    return @mp0_death if !@mp0_death.nil?
    @mp0_death = (note =~ /<MP戦闘不能>/ ? true : false)
  end
end

class Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  alias mp0_death_refresh refresh
  def refresh
    mp0_death_refresh
    check_mp0_death
  end
  def check_mp0_death
    if mp0_death?
      (@hp == 0 || @mp == 0) ? add_state(death_state_id) :
                               remove_state(death_state_id)
    end
  end
  def mp0_death?
    feature_objects.any?{|a|a.mp0_death}
  end
end

if BATTLER_NOUSEMP_DEATH

class Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● スキル使用コストの支払い可能判定
  #--------------------------------------------------------------------------
  alias mp0_death_skill_cost_payable? skill_cost_payable?
  def skill_cost_payable?(skill)
    return false if !mp0_death_skill_cost_payable?(skill)
    !mp0_death? || mp > skill_mp_cost(skill)
  end
end

else

class Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    mp0_death_refresh
    return if SceneManager.scene.instance_variable_get(:@subject) == self
    check_mp0_death
  end
end

class Scene_Battle
  #--------------------------------------------------------------------------
  # ● 戦闘行動終了時の処理
  #--------------------------------------------------------------------------
  alias mp0_death_process_action_end process_action_end
  def process_action_end
    @subject.check_mp0_death
    @log_window.display_changed_states(@subject)
    mp0_death_process_action_end
  end
end

end
大変どうでもいいことなのですが、TOMO様の後半のスクリプトだとMPダメージでトドメがさせないんですよね……。だから拙作はこんな変な形になってるんですが
最後に編集したユーザー faida on 2019年10月03日(木) 22:06 [ 編集 1 回目 ]
---------------------------------------------
自作の(改造でない)スクリプト素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
nira
記事: 13
登録日時: 2016年8月23日(火) 22:07

Re: エラー修正

投稿記事by nira » 2018年2月28日(水) 09:58

TOMO様、faida様ありがとうございます。

TOMO様が書いていただいたスクリプトで前者も後者もエラーは表示されなくなりました。

また、faida様のアップデートのスクリプトでも、エラーが解消されました。

お二方のご厚意に対し、厚く御礼申し上げます。

“VX / Ace:スクリプト素材のリクエスト” へ戻る