RPGツクールVX 属性有効度で命中率を変動させる

ひろし
記事: 7
登録日時: 2016年6月21日(火) 23:52

RPGツクールVX 属性有効度で命中率を変動させる

投稿記事by ひろし » 2016年6月22日(水) 00:04

こんばんは、
初めて利用させていただきます。
よろしくお願いします。

RPGツクールVXで使用できる、
スキルの属性有効度で命中率を変動できるスクリプトが欲しく、
リクエストさせて頂きました。

例えば、火属性のスキルがあって、
そのスキルを受ける側の、火属性に対する属性有効度が
Aなら命中率100%、
Bなら命中率95%、
Cなら命中率70%、
Dなら命中率50%、
Eなら命中率30%、
Fなら命中率5%・・・
と、問答無用で変化するようにしたいのです。

作成して頂ける方がおりましたら、よろしくお願いいたします。

faida
記事: 272
登録日時: 2015年12月17日(木) 16:44

Re: RPGツクールVX 属性有効度で命中率を変動させる

投稿記事by faida » 2016年6月25日(土) 20:11

VXを持っていないのでどうなるかわかりませんが、とりあえずできたので。

コード: 全て選択

=begin
◆概要
スキルの命中率が属性有効度に依存するようになります。

◆機能
・スキルのメモ欄に <命中率属性有効度依存> と記入するとアレになります。

◆仕様
・データベース上のスキルの命中率も反映されてます。

◆使用上の注意
・エイリアスあり。

=end

# 設定項目:属性有効度が半減する場合、命中率をどうするか
# 0 : 何もしない
# 1 : ランクが1下がる扱いになる
# 2 : 命中率も半減する
# 3 : 命中率は20下がる
SHER_AES = 1

# 設定項目:属性有効度ごとの命中率 「[0, 」はダミーなので100の項から設定するように
SHER_ARR = [0, 100, 95, 70, 50, 30, 5]

#==============================================================================
# ■ RPG::Skill
#==============================================================================

class RPG::Skill
  #--------------------------------------------------------------------------
  # ○ 命中率属性有効度依存判定
  #--------------------------------------------------------------------------
  def skill_hit_depend_on_element_rate
    @sher.nil? ? @sher = (note =~ /<命中率属性有効度依存>/ ? 0 : false) : @sher
  end
end

#==============================================================================
# ■ Game_Battler
#==============================================================================

class Game_Battler
  #--------------------------------------------------------------------------
  # ● 最終命中率の計算
  #--------------------------------------------------------------------------
  alias fai_sher_calc_hit calc_hit
  def calc_hit(user, obj = nil)
    if obj.is_a?(RPG::Skill) && obj.skill_hit_depend_on_element_rate
      obj.element_set.inject(obj.hit){|r, id|r * element_hit(id) / 100}
    else
      fai_sher_calc_hit(user, obj)
    end
  end
end

class Game_Actor
  def element_hit(element_id)
    rank = self.class.element_ranks[element_id]
    if SHER_AES == 1
      for armor in armors.compact
        rank -= 1 if armor.element_set.include?(element_id)
      end
      for state in states
        rank -= 1 if state.element_set.include?(element_id)
      end
    end
    hit = SHER_ARR[rank]
    if SHER_AES == 2
      for armor in armors.compact
        hit /= 2 if armor.element_set.include?(element_id)
      end
      for state in states
        hit /= 2 if state.element_set.include?(element_id)
      end
    elsif SHER_AES == 3
      for armor in armors.compact
        hit -= 20 if armor.element_set.include?(element_id)
      end
      for state in states
        hit -= 20 if state.element_set.include?(element_id)
      end
    end
    return hit
  end
end

class Game_Enemy
  def element_hit(element_id)
    rank = self.enemy.element_ranks[element_id]
    if SHER_AES == 1
      for state in states
        rank -= 1 if state.element_set.include?(element_id)
      end
    end
    hit = SHER_ARR[rank]
    if SHER_AES == 2
      for state in states
        hit /= 2 if state.element_set.include?(element_id)
      end
    elsif SHER_AES == 3
      for state in states
        hit -= 20 if state.element_set.include?(element_id)
      end
    end
    return hit
  end
end



※2016/6/27 コピペミス修正
※2016/6/29 不具合修正
最後に編集したユーザー faida on 2016年6月29日(水) 23:58 [ 編集 3 回目 ]
------------------------------------------------------------------
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
ひろし
記事: 7
登録日時: 2016年6月21日(火) 23:52

Re: RPGツクールVX 属性有効度で命中率を変動させる

投稿記事by ひろし » 2016年6月26日(日) 17:19

faidaさん、ありがとうございます!

実際にスクリプト素材を使ってテストプレーしてみたのですが、
スキルのメモ欄に <命中率属性有効度依存> と記入したスキルで攻撃したところ
以下のようなエラーが現れ、テストプレーが強制終了してしまいました。

==============================

スクリプトの 50 行目で NameError が発生しました。

undefined local variable or method 'element_id' for #<Game_Enemy:0x3c0fb38>

==============================

これは一体、どういうことなのでしょうか・・・。
既にお手数をおかけしている身ではありますが、
今一度ご回答頂けると幸甚です。
faida
記事: 272
登録日時: 2015年12月17日(木) 16:44

Re: RPGツクールVX 属性有効度で命中率を変動させる

投稿記事by faida » 2016年6月27日(月) 07:56

テストしていなかったのでコードのミスに気づけなかったみたいですね。こちらの落ち度です、すみません。
上記事を修正しましたので、お手数ですが再度導入してください。
------------------------------------------------------------------
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
ひろし
記事: 7
登録日時: 2016年6月21日(火) 23:52

Re: RPGツクールVX 属性有効度で命中率を変動させる

投稿記事by ひろし » 2016年6月29日(水) 19:40

faidaさん、修正ありがとうございます!

もう一度テストプレーしてみましたが、
またよく似たエラーが発生してしまいました・・・。

敵から該当スキルによる攻撃を受けたときのエラー:
==============================

スクリプトの 50 行目で NameError が発生しました。

undefined local variable or method 'element_id' for #<Game_Actor:0x3702798>

==============================

こちらから該当スキルによる攻撃をしたときのエラー:
==============================

スクリプトの 50 行目で NameError が発生しました。

undefined local variable or method 'element_id' for #<Game_Enemy:0x3c44bf0>

==============================


せっかく修正して頂いた所、申し訳ないのですが、
原因などについてご解答頂けると幸甚です。
faida
記事: 272
登録日時: 2015年12月17日(木) 16:44

Re: RPGツクールVX 属性有効度で命中率を変動させる

投稿記事by faida » 2016年6月29日(水) 23:57

VXとAceで属性の仕様が異なるのをすっかり忘れていました。申し訳ありません。
何度もお手数をかけて申し訳ありませんが、おそらくこれで動くかと思います。
上記事を修正しましたので、そちらからどうぞ。
------------------------------------------------------------------
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
ひろし
記事: 7
登録日時: 2016年6月21日(火) 23:52

Re: RPGツクールVX 属性有効度で命中率を変動させる

投稿記事by ひろし » 2016年7月01日(金) 15:23

faidaさん、ありがとうございます!

おかげさまでエラーも出なくなり、
命中率に関してもイメージ通りの仕様になりました!
ゲーム製作も捗りそうです。本当にありがとうございました!

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