スキルツリーシステム(新)

フォーラムルール
素材の利用規約を決めたいけど、どんなことを書けばいいのか分からない場合は、
素材のテンプレートをご利用下さい。
TOMO
記事: 348
登録日時: 2015年11月16日(月) 20:12
連絡する:

スキルツリーシステム(新)

投稿記事 by TOMO »

旧版より使いやすくしました
skill_tree.jpg
skill_tree.jpg (69.99 KiB) 閲覧された回数 19231 回
旧版と違い、スクリプトの知識がなくても使えます

画像
画像
画像
画像
画像
画像

【追記】メニューコマンドに追加したい人はこちらもどうぞ

コード: 全て選択

class Window_MenuCommand
  #--------------------------------------------------------------------------
  # ● 独自コマンドの追加用
  #--------------------------------------------------------------------------
  alias tomo_skill_tree_add_original_commands add_original_commands
  def add_original_commands
    tomo_skill_tree_add_original_commands
    add_command("スキル習得", :skill_tree, main_commands_enabled)
  end
end

class Scene_Menu
  #--------------------------------------------------------------------------
  # ● コマンドウィンドウの作成
  #--------------------------------------------------------------------------
  alias tomo_skill_tree_create_command_window create_command_window
  def create_command_window
    tomo_skill_tree_create_command_window
    @command_window.set_handler(:skill_tree, method(:command_personal))
  end
  #--------------------------------------------------------------------------
  # ● 個人コマンド[決定]
  #--------------------------------------------------------------------------
  alias tomo_skill_tree_on_personal_ok on_personal_ok
  def on_personal_ok
    case @command_window.current_symbol
    when :skill_tree
      SceneManager.call(Scene_SkillTree)
    else
      tomo_skill_tree_on_personal_ok
    end
  end
end
添付ファイル
skill_tree_102.txt
(27.94 KiB) ダウンロード数: 598 回
最後に編集したユーザー TOMO [ 2021年7月09日(金) 16:08 ], 累計 2 回
現在サポート終了中
TOMO
記事: 348
登録日時: 2015年11月16日(月) 20:12
連絡する:

Re: スキルツリーシステム(新)

投稿記事 by TOMO »

ver1.01修正内容
スキルポイントが正常加算されないバグ修正
習得確認ウィンドウの追加
コストウィンドウの表記変更
現在サポート終了中
TOMO
記事: 348
登録日時: 2015年11月16日(月) 20:12
連絡する:

Re: スキルツリーシステム(新)

投稿記事 by TOMO »

ver1.02修正内容
習得済みスキルの強調表示
線の自動生成で合流時のミスを修正
現在サポート終了中
7011@K
記事: 14
登録日時: 2025年2月07日(金) 00:32

Re: スキルツリーシステム(新)

投稿記事 by 7011@K »

すみません

本スクリプトを使わさせて頂きたいのですが

習得条件に職業とレベルを足したいです
(習得レベル記載なしなら1から習得可能)
(習得職業記載なしならどの職業でも習得可能)

イメージ
採取というスキルは 職業調合士のレベル10になったらSPで習得可能



理由としまして
魔法の習得としてレベル制限を設けていないと強い魔法を先に覚えてしまいバランスが崩れてしまうためです

どの部分を直せばよいかご教授して頂けるとありがたいです
よろしくお願いします。
TOMO
記事: 348
登録日時: 2015年11月16日(月) 20:12
連絡する:

Re: スキルツリーシステム(新)

投稿記事 by TOMO »

> 7011@K さん
テストしていませんが、多分これで行けるはずです

※スクリプトの知識がある人向け

まず、設定項目の「習得前提スキルID」の括弧内に、文字列で条件文を追加してください
例:アクターの職業が調合士かつレベル10以上
「"@actor.class_id == ○ && @actor.level >= 10"」
(○には調合士の職業IDを入れてください)

次にスクリプト内の「def learn_ok?(skill)」内の

コード: 全て選択

tree[skill.id]["前提"].all?{|id|learned?($data_skills[id])} : true)

コード: 全て選択

tree[skill.id]["前提"].all?{|value|(value.is_a?(String) ? eval(value) : learned?($data_skills[value]))} : true)
とすればいけるはずです


※注意
スクリプトの知識がない人用のは作りません

というのも、今回は職業とレベルだけでしたが、
今後「他の条件も追加してほしい」というリクエストがありそうだからです

それに対応していると設定項目が複雑化しすぎて、
今度は「どう設定すればいいんだ」という質問が来そうで…

なので頑張って覚えてください
現在サポート終了中
7011@K
記事: 14
登録日時: 2025年2月07日(金) 00:32

Re: スキルツリーシステム(新)

投稿記事 by 7011@K »

誠にありがとうございます
これで変なダミースキル作らずに済みます
助かりました
7011@K
記事: 14
登録日時: 2025年2月07日(金) 00:32

Re: スキルツリーシステム(新)

投稿記事 by 7011@K »

TOMO様すみません

Skill[13] = {
# ツリー
:tree => [[0,8,0],
[10,11,12],
[0,0],
[0,0]],
8 => {"派生" => [10, 11, 12]},
10 => {"前提" => [8]},
12 => {"前提" => [8]},
11 => {"前提" => ["@actor.class_id ==1 && @actor.level >= 10"]},
}

このように試しに変更してみましたが書き方はあっていますでしょうか

エラーが出てしまい前提の確認ができません
レベルの条件を与えた対象にカーソルを合わせたときにエラーが発生しています

エラーコードのスクショを添付します
添付ファイル
スクリーンショット 2025-02-16 234234.png
スクリーンショット 2025-02-16 234234.png (33.47 KiB) 閲覧された回数 5050 回
TOMO
記事: 348
登録日時: 2015年11月16日(月) 20:12
連絡する:

Re: スキルツリーシステム(新)

投稿記事 by TOMO »

すみません
他の所も調整する必要があるのを忘れてました

前提条件に使うテキストの設定も必要なので、こちらにしてください

まず前回の

コード: 全て選択

"@actor.class_id ==1 && @actor.level >= 10"

コード: 全て選択

["@actor.class_id ==1 && @actor.level >= 10", "職業:調合士Lv10以上"]
のようにしてください

次に

コード: 全て選択

tree[skill.id]["前提"].all?{|value|(value.is_a?(String) ? eval(value) : learned?($data_skills[value]))} : true)

コード: 全て選択

tree[skill.id]["前提"].all?{|value|(value.is_a?(Array) ? eval(value[0]) : learned?($data_skills[value]))} : true)
とします

最後に今回の521行目辺りの

コード: 全て選択

enabled = @actor.skill_learn?($data_skills[skill_id])
draw_item_name($data_skills[skill_id], x, y, enabled, width - 24)

コード: 全て選択

if skill_id.is_a?(Array)
enabled = eval(skill_id[0])
change_color(normal_color, enabled)
draw_text(x, y, width, line_height, skill_id[1])
change_color(normal_color)
else
enabled = @actor.skill_learn?($data_skills[skill_id])
draw_item_name($data_skills[skill_id], x, y, enabled, width - 24)
end
としてください

これで大丈夫なはずです
現在サポート終了中
7011@K
記事: 14
登録日時: 2025年2月07日(金) 00:32

Re: スキルツリーシステム(新)

投稿記事 by 7011@K »

すみません
次はこのようなエラーが出てしまいましたコードはあっていますでしょうか


Skill[13] = {
# ツリー
:tree => [[0,8,0],
[10,11,12],
[0,0],
[0,0]],
8 => {"派生" => [10, 11, 12]},
10 => {"前提" => [8]},
12 => {"前提" => [8]},
11 => {"前提" => [8,["@actor.class_id ==3 && @actor.level >= 10", "職業:調合士Lv10以上"]]}



def learn_ok?(skill)
point = TOMO::SkillTree::DefaultPoint
point = tree[skill.id]["SP"] if tree[skill.id]["SP"]
@actor && !@actor.skill!_learn?(skill) &&
@actor.skill_point >= point && (tree[skill.id]["前提"] ?
tree[skill.id]["前提"].all?{|value|(value.is_a?(Array) ?eval(value[0]) : learned?($data_skills[value]))} : true)
end



#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
contents.clear
if @skill_data && @skill_data[1]
change_color(system_color)
rect = Rect.new(0, 0, contents_width, line_height)
if @actor && @actor.skill_learn?($data_skills[@skill_data[0]])
draw_text(rect, "取得済み")
else
draw_text(rect, TOMO::SkillTree::CostText)
width = text_size(TOMO::SkillTree::CostText).width
cost = TOMO::SkillTree::DefaultPoint
cost = @skill_data[1]["SP"] if @skill_data[1]["SP"]
change_color(normal_color, @actor.skill_point >= cost)
draw_text(rect.x + width, rect.y, rect.width - width, rect.height, cost)
change_color(system_color)
rect.y += line_height
draw_text(rect, TOMO::SkillTree::PremiseText)
p_width = text_size(TOMO::SkillTree::PremiseText).width
width = TOMO::SkillTree::Width
count = (contents_width - p_width) / width
if @skill_data[1]["前提"]
@skill_data[1]["前提"].each_with_index do |skill_id, i|
x = rect.x + p_width + width * (i % count)
y = rect.y + line_height * (i / count)
if skill_id.is_a?(Array)
enabled = eval(skill_id[0])
      change_color(normal_color, enabled)
      draw_text(x, y, width, line_height, skill_id[1])
      change_color(normal_color)
    else
enabled = @actor.skill_learn?($data_skills[skill_id])
      draw_item_name($data_skills[skill_id], x, y, enabled, width - 24)
end
end
end
end
end
end
end
添付ファイル
スクリーンショット 2025-02-16 234234.png
スクリーンショット 2025-02-16 234234.png (41.67 KiB) 閲覧された回数 4705 回
TOMO
記事: 348
登録日時: 2015年11月16日(月) 20:12
連絡する:

Re: スキルツリーシステム(新)

投稿記事 by TOMO »

もしかしてdraw_item_nameの前とかを全角スペースにしてます?

でしたらそれが原因です
半角スペースにしてください
現在サポート終了中
返信する

“Ace:スクリプト素材(RGSS3)”に戻る