【解決済】奴隷購入システムのリクエスト

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

【解決済】奴隷購入システムのリクエスト

投稿記事by 月下美人 » 2018年1月18日(木) 21:58

 奴隷商人から奴隷を購入するイベントを作りたいです。
 選択肢などでアクターを選ぶことはできますが、転職システムで使われる転職画面のように、専用の画面が欲しいのです。
 スクリプトを作成できる方いらっしゃいませんか!?
最後に編集したユーザー 月下美人 on 2018年1月19日(金) 15:47 [ 編集 1 回目 ]

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

Re: 奴隷購入システムのリクエスト

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

こんな感じでいいですか?

コード: 全て選択

# アクター購入画面
# 制作者:TOMO
#
#
# ※使い方
# 1.イベントコマンド「スクリプト」等で
#
# SceneManager.call(Scene_ActorShop)
# SceneManager.scene.prepare([5,6,7,8,9,10])
#
# とする
# (各数値はアクターID)
#
# 2.データベースのアクターのメモ欄に
# <購入金額:n>
# と書く(nは金額)
#
#
# ※補足
# 購入画面のアクターのステータスは、デフォルトのステータスです
# レベルアップ等で変化したステータスではありません

class Window_ActorShopList < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader   :status_window            # ステータスウィンドウ
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(actors)
    super(0, 0, window_width, fitting_height(10))
    @actors = actors
    @money = 0
    refresh
    activate.select(0)
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウ幅の取得
  #--------------------------------------------------------------------------
  def window_width
    return 240
  end
  #--------------------------------------------------------------------------
  # ● 項目数の取得
  #--------------------------------------------------------------------------
  def item_max
    @data ? @data.size : 1
  end
  #--------------------------------------------------------------------------
  # ● アクターの取得
  #--------------------------------------------------------------------------
  def actor
    @data[index]
  end
  #--------------------------------------------------------------------------
  # ● 所持金の設定
  #--------------------------------------------------------------------------
  def money=(money)
    @money = money
    refresh
  end
  #--------------------------------------------------------------------------
  # ● 選択項目の有効状態を取得
  #--------------------------------------------------------------------------
  def current_item_enabled?
    enable?(@data[index])
  end
  #--------------------------------------------------------------------------
  # ● アクターの値段を取得
  #--------------------------------------------------------------------------
  def price(actor)
    @price[actor]
  end
  #--------------------------------------------------------------------------
  # ● アクターを許可状態で表示するかどうか
  #--------------------------------------------------------------------------
  def enable?(actor)
    actor && price(actor) <= @money &&
    !$game_party.members.include?($game_actors[actor.id])
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    make_shop_list
    create_contents
    draw_all_items
  end
  #--------------------------------------------------------------------------
  # ● ショップリストの作成
  #--------------------------------------------------------------------------
  def make_shop_list
    @data = []
    @price = {}
    @actors.each do |actor_id|
      actor = $data_actors[actor_id]
      @data.push(actor)
      @price[actor] = 0
      if actor.note.match(/<購入金額:(\d+)>/i) && $1.to_i > 0
        @price[actor] = $1.to_i
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #--------------------------------------------------------------------------
  def draw_item(index)
    actor = @data[index]
    rect = item_rect(index)
    change_color(normal_color, enable?(actor))
    draw_text(rect, actor.name)
    rect.width -= 4
    draw_text(rect, price(actor), 2)
  end
  #--------------------------------------------------------------------------
  # ● ステータスウィンドウの設定
  #--------------------------------------------------------------------------
  def status_window=(status_window)
    @status_window = status_window
  end
  #--------------------------------------------------------------------------
  # ● ヘルプテキスト更新
  #--------------------------------------------------------------------------
  def update
    super
    @status_window.actor = actor if @status_window
  end
end

class Window_ActorShopStatus < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(x)
    super(x, 0, Graphics.width - x, Graphics.height)
    @actor = nil
    deactivate
  end
  #--------------------------------------------------------------------------
  # ● アクターの設定
  #--------------------------------------------------------------------------
  def actor=(actor)
    return if @actor == actor
    @actor = actor
    refresh
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    return unless @actor
    rect = Rect.new(0, 0, contents_width, line_height)
    actor = Game_Actor.new(@actor.id)
    draw_actor_class(actor, rect.x, rect.y)
    rect.y += line_height
    draw_actor_face(actor, rect.x, rect.y)
    rect.y += 100
    8.times do |i|
      draw_actor_param(actor, rect.x, rect.y, i)
      rect.y += line_height
    end
    actor = nil
  end
end

class Scene_ActorShop < Scene_MenuBase
  #--------------------------------------------------------------------------
  # ● 準備
  #--------------------------------------------------------------------------
  def prepare(actors)
    @actors = actors
  end
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  def start
    super
    @list_window = Window_ActorShopList.new(@actors)
    @list_window.money = $game_party.gold
    @list_window.set_handler(:ok,     method(:on_buy_ok))
    @list_window.set_handler(:cancel, method(:return_scene))
    @status_window = Window_ActorShopStatus.new(@list_window.width)
    @list_window.status_window = @status_window
    @gold_window = Window_Gold.new
    @gold_window.y = Graphics.height - @gold_window.height
  end
  #--------------------------------------------------------------------------
  # ● 購入[決定]
  #--------------------------------------------------------------------------
  def on_buy_ok
    Sound.play_shop
    $game_party.lose_gold(@list_window.price(@list_window.actor))
    $game_party.add_actor(@list_window.actor.id)
    @list_window.money = $game_party.gold
    @list_window.activate
  end
end
月下美人
記事: 31
登録日時: 2018年1月18日(木) 21:52

Re: 奴隷購入システムのリクエスト

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

 >TOMOさん

 完璧です!ありがとうございます!

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