いつもお世話になっております。今回はパッシブスキルです。
パッシブスキルそのもののスクリプトはよく見かけるのですが、私が希望するのは無かったのでリクエストさせていただきます。
・アビリティという項目がメニューに追加される。実質パッシブスキル。
・スキルは付けたり外したりと着脱?が可能。
・5つまでのスキルをセットすることができる。
・同じスキルをセットすることが出来る。その場合効果は重複する。
以上のような内容のスクリプトをお願いできませんでしょうか。
【解決済】アビリティという名のパッシブスキル
Re: アビリティという名のパッシブスキル
とりあえず誰のパッシブスキルのスクリプトを使ってるか書きましょう
一番下の『同じスキルをセットすることが出来る』で、
パッシブスキルの方の改変が必要な場合があります
一番下の『同じスキルをセットすることが出来る』で、
パッシブスキルの方の改変が必要な場合があります
Re: アビリティという名のパッシブスキル
暫定的にではありますけど、こちらを使わせて頂いています。
- 添付ファイル
-
- パッシブスキルver1.10 by塵風.txt
- (8.09 KiB) ダウンロード数: 123 回
Re: アビリティという名のパッシブスキル
とりあえず作ってみました
バグ等があったら報告して下さい
メニューコマンドに追加するスクリプトを既に導入している場合は、
以下のスクリプトを参考に処理を追加して下さい
導入していない場合は、以下のスクリプトを入れれば出来ます
コード: 全て選択
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
Re: アビリティという名のパッシブスキル
>TOMOさん
ありがとうございます!
早速使わせてもらいましたところ、このようなエラーが発生しました。
どうすれば良いのでしょうか?
ありがとうございます!
早速使わせてもらいましたところ、このようなエラーが発生しました。
どうすれば良いのでしょうか?
- 添付ファイル
-
- 0.jpg (30.38 KiB) 閲覧数: 4694 回
Re: アビリティという名のパッシブスキル
当たり前ですが、私のスクリプト単体では動きません
(スキル設定機能を追加するだけのスクリプトなので)
「パッシブスキル」の下に私のスクリプトを入れて下さい
(スキル設定機能を追加するだけのスクリプトなので)
「パッシブスキル」の下に私のスクリプトを入れて下さい
Re: アビリティという名のパッシブスキル
>TOMOさん
失礼しました。確認しましたところ、正常に作動しました。
ありがとうございます!
失礼しました。確認しましたところ、正常に作動しました。
ありがとうございます!