【解決済み】仲間(アクター)の図鑑のプラグイン

アバター
アコルト
記事: 10
登録日時: 2017年2月04日(土) 02:56

【解決済み】仲間(アクター)の図鑑のプラグイン

投稿記事by アコルト » 2017年2月04日(土) 03:38

こんばんは、アコルトと申します
現在VXで最近のソーシャルゲームにあるような、ガチャガチャで仲間を増やすタイプのRPGの制作を考えています
そこで、モンスター図鑑ならぬガチャで出てきた『仲間たちの図鑑』を求めています

・ウィンドウはキャラクター情報、キャラクター一覧、図鑑完成度を表す%の三つ
・情報の枠内、名前の前に『No.001、No.002』とナンバーが表示される
・キャラクターのグラフィックが出来るだけ大きく表示される
・HPなどのステータス情報は省いている

上記に酷似するプラグインなどありましたら紹介して頂ければ幸いです
よろしくお願いします
最後に編集したユーザー アコルト on 2019年9月26日(木) 17:30 [ 編集 1 回目 ]

ツクールVXでADVやRPGを制作中
faida
記事: 236
登録日時: 2015年12月17日(木) 16:44

Re: 【VX】仲間(アクター)の図鑑のプラグイン

投稿記事by faida » 2017年2月14日(火) 21:20

こんばんは。
手元にVXがないので想像で作りました。
ちょっと情報が足りないところがあったので、報告していただけると対応できるかもしれません。

コード: 全て選択

=begin
◆概要
キャラ図鑑っぽい何かを作ります。

◆機能
・$scene = Scene_CharacterDictionary.newでキャラ図鑑っぽい何かを呼び出せます。
・情報は名前とグラフィックのみ。

◆仕様
・VXBeteranで作成したのでVXで動くかが分からない。

◆使用上の注意
・再定義なし。エイリアスあり。

=end

module FAI_CharaDicthionary
  # 設定項目:アクターのデータを流用する
  # trueにするとID、名前、グラフィックが自動で「データベースの」アクターデータから
  # 流用できます。
  # グラフィックですが、Graphics/Pictureに「(顔グラの画像名)-(インデックス)」って
  # 画像を用意してください。
  # 例:ラルフの顔グラ(Actor1の最初のヤツ)→Actor1-1
  # また、下の設定項目で流用データに沿わないものも設定できます。
  # falseにすると全部手動で設定するハメになります。
  USE_ACTOR_DATA = true

  CHARA_NAME = {}
  # 設定項目:アクターの名前
  # 無いと自動で欠番になります。
  CHARA_NAME[1] = "ラルフ"
  CHARA_NAME[2] = "ウルリカ"

  CHARA_GRAPHICS = {}
  # 設定項目:アクターの画像名
  # アクターの名前がないと意味がありません。無いと何も表示しません。
  CHARA_GRAPHICS[1] = "Actor1-1"
  CHARA_GRAPHICS[2] = "Actor1-4"
 
  # 設定項目:仲間にしたアクターのIDの図鑑フラグを自動でONにする
  CHARA_FLAG_ADD_PARTY = true
 
  # 設定項目:フラグが立っていないアクターをリストに表示する
  CHARA_NO_FLAG_SHOW = true
 
  # 設定項目:フラグがたっていないアクターの名前
  # 1文字にすると名前分繰り返し、2文字以上は繰り返しなし
  CHARA_NO_FLAG_NAME = "?"
 
  # 設定項目:達成率のテキスト
  CHARA_CR_TXT = "達成率 %s%"
 
end

class Game_DictionaryData
  include FAI_CharaDicthionary
  attr_accessor :data
  def initialize
    reset_data
  end
  def reset_data
    @data = {}
    if USE_ACTOR_DATA
      $data_actors.each_with_index{|actor, i|
        next if !actor || actor.name.empty?
        @data[i] = [actor.name, "#{actor.face_name}-#{actor.face_index}"]
      }
    end
    CHARA_NAME.each{|i, name|
      @data[i] = [] if !@data[i]; @data[i][0] = (name.empty? ? nil : name)
    }
    CHARA_GRAPHICS.each{|i, name|
      next if !@data[i]; @data[i][1]=name if @data[i][0] && !@data[i][0].empty?
    }
  end
  def check_actor_data
    return if !USE_ACTOR_DATA
    reset_data if @data.keys.max != $data_actors.compact.size
  end
  def [](id)
    @data[id]
  end
  def size
    @data.keys.size
  end
  def keys
    @data.keys
  end
end

class Game_System
  include FAI_CharaDicthionary
  attr_reader :charadic_flag
  attr_reader :charadic_data
  alias fai_cd_initialize initialize
  def initialize
    fai_cd_initialize
    clear_charadic_flag
  end
  def clear_charadic_flag
    @charadic_flag = []
    @charadic_data = Game_DictionaryData.new
  end
  def add_charadic(id)
    clear_charadic_flag if !@charadic_flag
    @charadic_flag |= [id]
    @charadic_flag.sort
  end
  def delete_charadic(id)
    @charadic_flag.delete(id)
  end
  def check_cd_actor_data
    @charadic_data.check_actor_data
  end
  def cd_complete_rate
    @charadic_flag.size * 100 / @charadic_data.size
  end
  def cd_name(id)
    name = @charadic_data[id][0]
    return name if @charadic_flag.include?(id)
    CHARA_NO_FLAG_NAME * (CHARA_NO_FLAG_NAME.size == 1 ? name.size : 1)
  end
  def cd_gra(id)
    @charadic_flag.include?(id) ? @charadic_data[id][1] : ""
  end
end

class Game_Party < Game_Unit
  #--------------------------------------------------------------------------
  # ● 初期パーティのセットアップ
  #--------------------------------------------------------------------------
  alias fai_cd_setup_starting_members setup_starting_members
  def setup_starting_members
    fai_cd_setup_starting_members
    @actors.each{|actor_id|$game_system.add_charadic(actor_id)}
  end
  #--------------------------------------------------------------------------
  # ● アクターを加える
  #--------------------------------------------------------------------------
  alias fai_cd_add_actor add_actor
  def add_actor(actor_id)
    fai_cd_add_actor(actor_id)
    if FAI_CharaDicthionary::CHARA_FLAG_ADD_PARTY && @actors.include?(actor_id)
      $game_system.add_charadic(actor_id)
    end
  end
end

#==============================================================================
# ■ Scene_File
#==============================================================================

class Scene_File < Scene_Base
  #--------------------------------------------------------------------------
  # ● ロードの実行
  #--------------------------------------------------------------------------
  alias fai_cd_do_load do_load
  def do_load
    fai_cd_do_load
    $game_system.check_cd_actor_data
  end
end

class Window_CD_NameList < Window_Selectable
  include FAI_CharaDicthionary
  def initialize
    super(0, 0, Graphics.width - 320, Graphics.height)
    make_data
    refresh
    self.active = true
    self.index = 0
  end
  def make_data
    @data = []
    if CHARA_NO_FLAG_SHOW
      $game_system.charadic_data.keys.each{|id|@data << id}
    else
      $game_system.charadic_flag.each{|id|@data << id}
    end
    @item_max = @data.size
  end
  def draw_item(index)
    id = @data[index]
    contents.draw_text(0, WLH * index, contents.width, WLH, $game_system.cd_name(id))
  end
  def refresh
    create_contents
    (0...@data.size).each{|i|draw_item(i)}
  end
  def actor
    @data[index]
  end
end

class Window_CD_Graphics < Window_Base
  def initialize
    super(Graphics.width - 320, 0, 320, Graphics.height - (WLH + 32))
    @actor = nil
  end
  def actor=(id)
    return if @actor == id
    @actor = id
    refresh
  end
  def refresh
    return if !@actor
    contents.clear
    name = sprintf("No.%03d ", @actor) + $game_system.cd_name(@actor)
    contents.draw_text(0, 0, self.width, WLH, name)
    bitmap = Cache.picture($game_system.cd_gra(@actor)) rescue return
    x = (contents.width - bitmap.width) / 2
    y = [contents.height - bitmap.height, WLH].max
    contents.blt(x, y, bitmap, bitmap.rect)
  end
end

class Window_CD_CompleteRate < Window_Base
  def initialize
    super(Graphics.width - 160, Graphics.height - (WLH + 32), 160, WLH + 32)
    rate = $game_system.cd_complete_rate
    text = sprintf(FAI_CharaDicthionary::CHARA_CR_TXT, rate)
    contents.draw_text(0, 0, self.width, WLH, text)
  end
end

class Scene_CharacterDictionary < Scene_Base
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  def start
    super
    create_menu_background
    @list_window = Window_CD_NameList.new
    @gra_window = Window_CD_Graphics.new
    @cr_window = Window_CD_CompleteRate.new
  end
  #--------------------------------------------------------------------------
  # ● 終了処理
  #--------------------------------------------------------------------------
  def terminate
    super
    dispose_menu_background
    @list_window.dispose
    @gra_window.dispose
    @cr_window.dispose
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    super
    update_menu_background
    @list_window.update
    @gra_window.update
    @gra_window.actor = @list_window.actor
    @cr_window.update
    if Input.trigger?(Input::B)
      Sound.play_cancel
      return_scene
    end
  end
  #--------------------------------------------------------------------------
  # ● 元の画面へ戻る
  #--------------------------------------------------------------------------
  def return_scene
    $scene = Scene_Map.new
  end
end


CharaDictionary.png
CharaDictionary.png (202.42 KiB) 閲覧数: 1741 回


※このスクリプトは拙作「VXBeteran」を使用してVXAceで作成したものです。
VXBeteranのver1.0で動作を確認しているため、VXで正常に動作するかはわかりません。

※2019/9/2 不具合修正
最後に編集したユーザー faida on 2019年9月02日(月) 21:38 [ 編集 1 回目 ]
---------------------------------------------
自作の(改造でない)スクリプト素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
アバター
アコルト
記事: 10
登録日時: 2017年2月04日(土) 02:56

Re: 【VX】仲間(アクター)の図鑑のプラグイン

投稿記事by アコルト » 2019年9月01日(日) 03:13

faida さんが書きました:こんばんは。
手元にVXがないので想像で作りました。
ちょっと情報が足りないところがあったので、報告していただけると対応できるかもしれません。

わざわざプラグイン作成ありがとうございます!
私生活で忙しく、何年もイン出来ておらず反応が遅くなって大変申し訳ありませんでした
ゲーム作成自体は続けていこうと思っていますので、もしよろしければ引き続きよろしくお願い致します
試しにイベントでスクリプトを呼び出してみたところ、画像のようなエラーが出てしまいましたので報告致します

新規キャンバス2.png
新規キャンバス2.png (6.09 KiB) 閲覧数: 642 回
ツクールVXでADVやRPGを制作中
faida
記事: 236
登録日時: 2015年12月17日(木) 16:44

Re: 【VX】仲間(アクター)の図鑑のプラグイン

投稿記事by faida » 2019年9月02日(月) 21:44

アコルトさん
ご報告ありがとうございます。
修正いたしましたので、お手数ですが上の返信から元のスクリプトに
上書きいただければと思います。

※VXBeteran(VXAce)の機能で動いていた箇所を修正しました。
---------------------------------------------
自作の(改造でない)スクリプト素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
アバター
アコルト
記事: 10
登録日時: 2017年2月04日(土) 02:56

Re: 【解決済み】仲間(アクター)の図鑑のプラグイン

投稿記事by アコルト » 2019年9月26日(木) 17:30

今度はエラーが出ることなく表示出来ました!クレジットについても承知しました
faida様ありがとうございました、これにて解決済みとさせて頂きます
ツクールVXでADVやRPGを制作中

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