【解決済】アビリティという名のパッシブスキル

月下美人
記事: 31
登録日時: 2018年1月18日(木) 21:52

【解決済】アビリティという名のパッシブスキル

投稿記事by 月下美人 » 2018年1月19日(金) 22:16

 いつもお世話になっております。今回はパッシブスキルです。
 パッシブスキルそのもののスクリプトはよく見かけるのですが、私が希望するのは無かったのでリクエストさせていただきます。

・アビリティという項目がメニューに追加される。実質パッシブスキル。
・スキルは付けたり外したりと着脱?が可能。
・5つまでのスキルをセットすることができる。
・同じスキルをセットすることが出来る。その場合効果は重複する。

 以上のような内容のスクリプトをお願いできませんでしょうか。
最後に編集したユーザー 月下美人 on 2018年1月20日(土) 19:26 [ 編集 1 回目 ]

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

Re: アビリティという名のパッシブスキル

投稿記事by TOMO » 2018年1月19日(金) 23:48

とりあえず誰のパッシブスキルのスクリプトを使ってるか書きましょう

一番下の『同じスキルをセットすることが出来る』で、
パッシブスキルの方の改変が必要な場合があります
月下美人
記事: 31
登録日時: 2018年1月18日(木) 21:52

Re: アビリティという名のパッシブスキル

投稿記事by 月下美人 » 2018年1月20日(土) 07:22

 暫定的にではありますけど、こちらを使わせて頂いています。
添付ファイル
パッシブスキルver1.10 by塵風.txt
(8.09 KiB) ダウンロード数: 122 回
TOMO
記事: 343
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

Re: アビリティという名のパッシブスキル

投稿記事by TOMO » 2018年1月20日(土) 18:01

とりあえず作ってみました

コード: 全て選択

class Game_Actor
  attr_accessor   :set_skills
  #--------------------------------------------------------------------------
  # ● スキルの初期化
  #--------------------------------------------------------------------------
  alias tomo_set_skill_init_skills init_skills
  def init_skills
    @set_skills = []
    tomo_set_skill_init_skills
  end
  #--------------------------------------------------------------------------
  # ● セットスキルの最大値の取得
  #--------------------------------------------------------------------------
  def set_skills_max
    return 5
  end
  #--------------------------------------------------------------------------
  # ● パッシブスキルの配列取得
  #--------------------------------------------------------------------------
  def passive_skills
    skills.select {|skill|
      $WM_PASSIVE_REGEXP.match(skill.note) && passive_skill_usable?(skill)
    }
  end
  #--------------------------------------------------------------------------
  # ● 特徴を保持する全オブジェクトの配列取得
  #--------------------------------------------------------------------------
  def feature_objects
    # パッシブスキルを追加
    feature_objects_psvskill + @set_skills.compact
  end
end

class Window_SkillSetList1 < Window_Selectable
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(x, y)
    super(x, y, window_width, Graphics.height - y)
    @actor = nil
    refresh
    activate.select(0)
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウ幅の取得
  #--------------------------------------------------------------------------
  def window_width
    Graphics.width / 2
  end
  #--------------------------------------------------------------------------
  # ● 項目数の取得
  #--------------------------------------------------------------------------
  def item_max
    @actor ? @actor.set_skills_max : 0
  end
  #--------------------------------------------------------------------------
  # ● アクターの設定
  #--------------------------------------------------------------------------
  def actor=(actor)
    return if @actor == actor
    @actor = actor
    refresh
  end
  #--------------------------------------------------------------------------
  # ● スキルの取得
  #--------------------------------------------------------------------------
  def skill
    @data[index]
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    make_skill_list
    create_contents
    draw_all_items
  end
  #--------------------------------------------------------------------------
  # ● スキルリストの作成
  #--------------------------------------------------------------------------
  def make_skill_list
    @data = []
    @actor.set_skills.each {|skill| @data.push(skill) } if @actor
  end
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #--------------------------------------------------------------------------
  def draw_item(index)
    skill = @data[index]
    if skill
      rect = item_rect(index)
      draw_item_name(skill, rect.x, rect.y)
    end
  end
  #--------------------------------------------------------------------------
  # ● ヘルプテキスト更新
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_item(skill)
  end
end

class Window_SkillSetList2 < Window_Selectable
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(x, y)
    super(x, y, window_width, Graphics.height - y)
    @actor = nil
    refresh
    deactivate
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウ幅の取得
  #--------------------------------------------------------------------------
  def window_width
    Graphics.width / 2
  end
  #--------------------------------------------------------------------------
  # ● 項目数の取得
  #--------------------------------------------------------------------------
  def item_max
    @data ? @data.size : 1
  end
  #--------------------------------------------------------------------------
  # ● アクターの設定
  #--------------------------------------------------------------------------
  def actor=(actor)
    return if @actor == actor
    @actor = actor
    refresh
  end
  #--------------------------------------------------------------------------
  # ● スキルの取得
  #--------------------------------------------------------------------------
  def skill
    @data[index]
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    make_skill_list
    create_contents
    draw_all_items
  end
  #--------------------------------------------------------------------------
  # ● スキルリストの作成
  #--------------------------------------------------------------------------
  def make_skill_list
    @data = []
    @data.push(nil)
    @actor.passive_skills.each {|skill| @data.push(skill) } if @actor
  end
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #--------------------------------------------------------------------------
  def draw_item(index)
    skill = @data[index]
    rect = item_rect(index)
    if skill
      draw_item_name(skill, rect.x, rect.y)
    else
      change_color(system_color)
      draw_text(rect, "設定なし")
    end
  end
  #--------------------------------------------------------------------------
  # ● ヘルプテキスト更新
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_item(skill)
  end
end

class Window_SkillSetStatus < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(x, y)
    super(x, y, window_width, fitting_height(1))
    @actor = nil
    refresh
    deactivate
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウ幅の取得
  #--------------------------------------------------------------------------
  def window_width
    Graphics.width / 2
  end
  #--------------------------------------------------------------------------
  # ● アクターの設定
  #--------------------------------------------------------------------------
  def actor=(actor)
    return if @actor == actor
    @actor = actor
    refresh
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    draw_actor_name(@actor, 0, 0) if @actor
  end
end

class Scene_SkillSet < Scene_MenuBase
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  def start
    super
    create_help_window
    wx, wy = 0, @help_window.height
    @status_window = Window_SkillSetStatus.new(wx, wy)
    @status_window.actor = @actor
   
    wx, wy = 0, @status_window.y + @status_window.height
    @set_skill_window = Window_SkillSetList1.new(wx, wy)
    @set_skill_window.actor = @actor
    @set_skill_window.help_window = @help_window
    @set_skill_window.set_handler(:ok,       method(:on_set_ok))
    @set_skill_window.set_handler(:cancel,   method(:return_scene))
    @set_skill_window.set_handler(:pagedown, method(:next_actor))
    @set_skill_window.set_handler(:pageup,   method(:prev_actor))
   
    wx, wy = @set_skill_window.width, @help_window.height
    @skill_window = Window_SkillSetList2.new(wx, wy)
    @skill_window.actor = @actor
    @skill_window.help_window = @help_window
    @skill_window.set_handler(:ok,       method(:on_skill_ok))
    @skill_window.set_handler(:cancel,   method(:on_skill_cancel))
  end
  #--------------------------------------------------------------------------
  # ● スキル設定[決定]
  #--------------------------------------------------------------------------
  def on_set_ok
    @skill_window.activate.select(0)
  end
  #--------------------------------------------------------------------------
  # ● スキル[決定]
  #--------------------------------------------------------------------------
  def on_skill_ok
    if @skill_window.skill
      @actor.set_skills[@set_skill_window.index] = @skill_window.skill.clone
    else
      @actor.set_skills[@set_skill_window.index] = nil
    end
    @skill_window.unselect
    @set_skill_window.activate.refresh
  end
  #--------------------------------------------------------------------------
  # ● スキル[キャンセル]
  #--------------------------------------------------------------------------
  def on_skill_cancel
    @skill_window.unselect
    @set_skill_window.activate
  end
  #--------------------------------------------------------------------------
  # ● アクターの切り替え
  #--------------------------------------------------------------------------
  def on_actor_change
    @status_window.actor = @actor
    @set_skill_window.actor = @actor
    @skill_window.actor = @actor
    @set_skill_window.activate
  end
end
バグ等があったら報告して下さい



メニューコマンドに追加するスクリプトを既に導入している場合は、
以下のスクリプトを参考に処理を追加して下さい

導入していない場合は、以下のスクリプトを入れれば出来ます

コード: 全て選択

class Window_MenuCommand
  #--------------------------------------------------------------------------
  # ● 主要コマンドをリストに追加
  #--------------------------------------------------------------------------
  alias tomo_add_menu_add_main_commands add_main_commands
  def add_main_commands
    tomo_add_menu_add_main_commands
    add_command("スキル設定", :set_skill, main_commands_enabled)
  end
end

class Scene_Menu
  #--------------------------------------------------------------------------
  # ● コマンドウィンドウの作成
  #--------------------------------------------------------------------------
  alias tomo_add_menu_create_command_window create_command_window
  def create_command_window
    tomo_add_menu_create_command_window
    @command_window.set_handler(:set_skill, method(:command_personal))
  end
  #--------------------------------------------------------------------------
  # ● 個人コマンド[決定]
  #--------------------------------------------------------------------------
  alias tomo_add_menu_on_personal_ok on_personal_ok
  def on_personal_ok
    case @command_window.current_symbol
    when :set_skill
      SceneManager.call(Scene_SkillSet)
    else
      tomo_add_menu_on_personal_ok
    end
  end
end
月下美人
記事: 31
登録日時: 2018年1月18日(木) 21:52

Re: アビリティという名のパッシブスキル

投稿記事by 月下美人 » 2018年1月20日(土) 18:32

 >TOMOさん
 ありがとうございます!
 早速使わせてもらいましたところ、このようなエラーが発生しました。
 どうすれば良いのでしょうか?
添付ファイル
0.jpg
0.jpg (30.38 KiB) 閲覧数: 4578 回
TOMO
記事: 343
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

Re: アビリティという名のパッシブスキル

投稿記事by TOMO » 2018年1月20日(土) 19:14

当たり前ですが、私のスクリプト単体では動きません
(スキル設定機能を追加するだけのスクリプトなので)

「パッシブスキル」の下に私のスクリプトを入れて下さい
月下美人
記事: 31
登録日時: 2018年1月18日(木) 21:52

Re: アビリティという名のパッシブスキル

投稿記事by 月下美人 » 2018年1月20日(土) 19:26

 >TOMOさん
 失礼しました。確認しましたところ、正常に作動しました。
 ありがとうございます!

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