解決済み(割合吸収武器)

なたね
記事: 30
登録日時: 2017年1月11日(水) 00:34

解決済み(割合吸収武器)

投稿記事by なたね » 2017年8月29日(火) 12:39

RGSS3のHPやMPを割合で吸収出来るようなスクリプトを探したのですが、MVのしか見つからなかった為、リクエストさせて頂きます。
もし、お時間があって作成できる方いましたら、お願い致します。
最後に編集したユーザー なたね on 2017年9月05日(火) 22:59 [ 編集 1 回目 ]

アバター
オシブ
記事: 20
登録日時: 2015年11月10日(火) 15:25
連絡を取る:

Re: 割合吸収武器

投稿記事by オシブ » 2017年8月29日(火) 13:58

こんにちは。
Artificial Providenceという素材屋さんに「HP/MP/TP変換攻撃特徴・アイテム・スキル」という素材があります。
たくさんの機能を持っていて、それで恐らく希望していることは可能だと思います。

たまたま自分も自作のものを持っているので、もし競合などがあればこちらもよかったらどうぞ。
Artificial Providenceさんのものとは違って、本当にシンプルなものです。

コード: 全て選択

#==============================================================================
# ■ RGSS3 ダメージからの吸収の割合を変更 by オシブ
#==============================================================================
#==============================================================================
# ■ RPG::UsableItem
#==============================================================================
class RPG::UsableItem
  #--------------------------------------------------------------------------
  # ● 吸収の割合を読み込み  スキル、アイテムのメモ欄に<DRAIN_30%>などと書く
  #-------------------------------------------------------------------------- 
  def drain_ratio
    @note.scan(/<DRAIN_(\d+)%>/)   
    return $1.to_i.quo(100).to_f if $1
    return 1
  end
end
#==============================================================================
# ■ Vocab
#------------------------------------------------------------------------------
#  用語とメッセージを定義するモジュールです。定数でメッセージなどを直接定義す
# るほか、グローバル変数 $data_system から用語データを取得します。
#==============================================================================
module Vocab
  ActorDrain      = "%sは %s のダメージを受け %s 吸収された!"
  EnemyDrain      = "%sに %s のダメージを与え %s 回復した!"
end
#==============================================================================
# ■ Game_ActionResult
#------------------------------------------------------------------------------
#  戦闘行動の結果を扱うクラスです。このクラスは Game_Battler クラスの内部で
# 使用されます。
#==============================================================================
class Game_ActionResult
  #--------------------------------------------------------------------------
  # ● ダメージの作成
  #--------------------------------------------------------------------------
  alias oxib_drain_make_damage make_damage
  def make_damage(value, item)
    oxib_drain_make_damage(value, item)
    @hp_drain = (@hp_damage * item.drain_ratio).round if item.damage.drain?
    @mp_drain = (@mp_damage * item.drain_ratio).round if item.damage.drain?
  end
  #--------------------------------------------------------------------------
  # ● HPの回復効果率の反映
  #--------------------------------------------------------------------------
  def drain_hp_rec(user)
    if @hp_drain > 0
      @hp_drain = @hp_drain * user.rec
      @hp_drain = @hp_drain.round
    end   
  end
  #--------------------------------------------------------------------------
  # ● MPの回復効果率の反映
  #--------------------------------------------------------------------------
  def drain_mp_rec(user)
    if @mp_drain > 0
      @mp_drain = @mp_drain * user.rec
      @mp_drain = @mp_drain.round
    end
  end
  #--------------------------------------------------------------------------
  # ● HP ダメージの文章を取得 ※再定義
  #--------------------------------------------------------------------------
  def hp_damage_text
    if @hp_drain > 0
      fmt = @battler.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain
      #sprintf(fmt, @battler.name, Vocab::hp, @hp_drain)
      sprintf(fmt, @battler.name, @hp_damage, @hp_drain) #変更
    elsif @hp_damage > 0
      fmt = @battler.actor? ? Vocab::ActorDamage : Vocab::EnemyDamage
      sprintf(fmt, @battler.name, @hp_damage)
    elsif @hp_damage < 0
      fmt = @battler.actor? ? Vocab::ActorRecovery : Vocab::EnemyRecovery
      sprintf(fmt, @battler.name, Vocab::hp, -hp_damage)
    else
      fmt = @battler.actor? ? Vocab::ActorNoDamage : Vocab::EnemyNoDamage
      sprintf(fmt, @battler.name)
    end
  end
  #--------------------------------------------------------------------------
  # ● MP ダメージの文章を取得 ※再定義
  #--------------------------------------------------------------------------
  def mp_damage_text
    if @mp_drain > 0
      fmt = @battler.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain
      #sprintf(fmt, @battler.name, Vocab::mp, @mp_drain)
      sprintf(fmt, @battler.name, @mp_damage, @mp_drain) #変更
    elsif @mp_damage > 0
      fmt = @battler.actor? ? Vocab::ActorLoss : Vocab::EnemyLoss
      sprintf(fmt, @battler.name, Vocab::mp, @mp_damage)
    elsif @mp_damage < 0
      fmt = @battler.actor? ? Vocab::ActorRecovery : Vocab::EnemyRecovery
      sprintf(fmt, @battler.name, Vocab::mp, -@mp_damage)
    else
      ""
    end
  end
end
#==============================================================================
# ■ Game_Battler
#------------------------------------------------------------------------------
#  スプライトや行動に関するメソッドを追加したバトラーのクラスです。このクラス
# は Game_Actor クラスと Game_Enemy クラスのスーパークラスとして使用されます。
#==============================================================================
class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● ダメージの処理
  #--------------------------------------------------------------------------
  alias oxib_drain_execute_damage execute_damage
  def execute_damage(user)
    @result.drain_hp_rec(user) if @result.hp_drain > 0
    @result.drain_mp_rec(user) if @result.mp_drain > 0
    oxib_drain_execute_damage(user)
  end
end


――――――――――――――――――――――――――――――――――――――――――――――
RPGツクールVXでシナリオ重視ゲーム作ってます。

画像
サイト:Mix Idea
アドレス:http://oxibgame.jugem.jp/
―――――――――――――――――――――――――――――――――――――――――――――――
TOMO
記事: 343
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

Re: 割合吸収武器

投稿記事by TOMO » 2017年8月31日(木) 02:00

簡単な吸収武器の作り方を載せます

コード: 全て選択

class Game_Actor
  alias weapon_attack_skill_id attack_skill_id
  def attack_skill_id
    if dual_wield? && (weapons[0].id == 1 || weapons[1].id == 1) # 二刀流の時
      return 51
    elsif !dual_wield? && weapons[0].id == 1 # 二刀流でない時
      return 51
    else
      weapon_attack_skill_id
    end
  end
end

これで装備してる武器がID:1の武器の時、通常攻撃がスキルID:51となります
(ハンドアクスで通常攻撃をすると、ファイアが発動するようになります)

なので、対応するスキルの設定を弄れば吸収するようになるはずです
なたね
記事: 30
登録日時: 2017年1月11日(水) 00:34

Re: 割合吸収武器

投稿記事by なたね » 2017年9月05日(火) 22:58

返信遅れてしまい申し訳ありません!


オシブ様、ありがとうございます。
でも、欲しかったのは武器でしたがこちらも使わせていただきます。
ありがとうございました。

TOMO様、ありがとうございます。
自分の理想通りのものができました。

お二方この度は本当にありがとうございました。

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