查看: 2327|回复: 2

[已经过期] 關於 冒険メモ 這個腳本

[复制链接]
梦石
0
星屑
317
在线时间
67 小时
注册时间
2014-4-17
回帖
10
发表于 2017-11-5 15:29:56 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 william6k 于 2017-11-5 17:04 编辑

想請問各位,關於再使用這個腳本的時候,

點入所選的項目,進入詳細介紹畫面時,能否讓其畫面能下拉呢?(如圖片所示)

因為字數過長,會導致下面的字看不到。

原腳本網址:點我

附帶一個測試用的專案在附件裏頭。

謝謝各位觀看

[pre lang="ruby"]=begin
      RGSS3
      
      ★ 冒険メモ ★
      
      現在のあらすじなど、任意の文章を表示する項目をメニューに追加します。
      サブイベントの管理もできます。
      
      ● 仕様 ●==========================================================
      イベントでのメッセージ表示と同様の制御文字が使用可能です。
      使用する場合は\マークを2つ続けて入力するようにしてください。
      【例】
      \N[2] => \\N[2]
      \C[1] => \\C[1]
      ====================================================================
      
      ※ RPGツクールVX サンプルゲーム「レクトールと黒獅子の紋章」にて
         使用されているスクリプトを参考にしています。
      
      ver1.00
      
      Last Update : 2012/03/18
      03/18 : 新規
      
      ろかん   http://kaisou-ryouiki.sakura.ne.jp/
=end

#===========================================
#   設定箇所
#===========================================
module STORYEVENT
# メニューに表示される項目名
STORYEVENT_MENU_TEXT = "冒険メモ"

# 項目が表示されるメニューインデックス(一番上が0)
STORYEVENT_MENU_INDEX = 5

# 項目が有効になるスイッチ番号
STORYEVENT_ENABLE_SID = 1

#------------------------------------------------------------------------------
# あらすじに表示する見出し
STORYEVENT_CAPTION = "ストーリー"

# あらすじを管理する変数番号
STORYEVENT_VID = 1

# あらすじの設定
#【形式】
#   ① => [②, ③],
#     ① STORYEVENT_VIDに格納されている値(数値)
#     ② 進行中ストーリーの名前(文字列)
#     ③ 進行中ストーリーの詳細(文字列)
STORYEVENT_CONTENTS = {

0 => ["メインストーリー1", "てすと
2行目~~\\N[1]~~~
3行目~~~~~~~~\\C[6]~~~~~~"],
1 => ["", ""],
2 => ["", ""],

}
#------------------------------------------------------------------------------
# サブイベントリストに表示する見出し
SUBEVENT_CAPTION = "サブイベント"

# サブイベント達成率部分に表示する項目名
SUBEVENT_CLEARTEXT = "達成率"

# サブイベント詳細画面で使用されるウィンドウスキン名
SUBEVENT_SKIN = "Window"

# クリアしたサブイベントに表示する文字列
#    サブイベント詳細画面に表示されます
SUBEVENT_CLEARED_TEXT = "- CLEARE -"

# クリアしたサブイベントに表示するアイコンID
#    サブイベントリストに表示されます
SUBEVENT_CLEARED_ICON = 125

# サブイベントスタートと見做す変数値
#    サブイベントに対応する変数に、ここでの設定値以上の値が格納されている場合、
#    イベント実行中と判断され、サブイベントリストに表示されるようになります
SUBEVENT_STARTED = 1

# サブイベントクリアと見做す変数値
#    サブイベントに対応する変数に、ここでの設定値以上の値が格納されている場合、
#    イベントクリアと判断され、サブイベントリストの表記がクリア時のものになります
SUBEVENT_CLEARED = 2000

# サブイベントの概要設定
#【形式】
#   ① => [②, ③, ④],
#     ① サブイベントに対応する変数番号(数値)
#     ② 進行中サブイベントの名前。サブイベントリストに表示(文字列)
#     ③ サブイベント発生中の文章。サブイベント詳細画面に表示(文字列) ※
#     ④ サブイベントクリア後の文章。サブイベント詳細画面に表示(文字列)
#
#   ※ SUBEVENT_CONTENTSに有効な設定がある場合はそちらが優先されます。
SUBEVENT_TITLES = {

10 => ["サブイベント1",
"イベント実行中メッセージ",
"イベントクリア後メッセージ"],
11 => ["", "", ""],
12 => ["", "", ""],

}
# サブイベントの詳細設定
#【形式】
#   ① => [[②, ③], [②, ③], [②, ③],......],
#     ① サブイベントに対応する変数番号(数値)
#     ② ①に格納されている値(数値)
#     ③ ②の条件を満たす際のサブイベント発生中の文章。サブイベント詳細画面に表示(文字列)
SUBEVENT_CONTENTS = {

10 => [
[1, "サブイベント1の進行中メッセージ1"],
[2, "サブイベント1の進行中メッセージ2"],
],
11 => [
[1, ""],
],
12 => [
[1, ""],
],

}end
#===========================================
#   ここまで
#===========================================

$rsi ||= {}
$rsi["冒険メモ"] = true

module STORYEVENT
  #--------------------------------------------------------------------------
  # ● 色々キャッシュ
  #--------------------------------------------------------------------------
  def self.cache
    self.cache_story_data
    self.cache_event_list
  end
  #--------------------------------------------------------------------------
  # ● あらすじ 見出しの取得
  #--------------------------------------------------------------------------
  def self.story_caption
    STORYEVENT_CAPTION
  end
  #--------------------------------------------------------------------------
  # ● メインストーリー情報の取得
  #--------------------------------------------------------------------------
  def self.cache_story_data
    @story_data = STORYEVENT_CONTENTS[$game_variables[STORYEVENT_VID]]
    unless @story_data
      $game_variables[STORYEVENT_VID].downto(0){|n|
        if STORYEVENT_CONTENTS.has_key?(n)
          @story_data = STORYEVENT_CONTENTS[n]
          break
        end
      }
    end
  end
  #--------------------------------------------------------------------------
  # ● あらすじ タイトルの取得
  #--------------------------------------------------------------------------
  def self.story_title
    @story_data[0]
  end
  #--------------------------------------------------------------------------
  # ● あらすじ テキストの取得
  #--------------------------------------------------------------------------
  def self.story_text
    @story_data[1]
  end
  #--------------------------------------------------------------------------
  # ● サブイベント 見出しの取得
  #--------------------------------------------------------------------------
  def self.event_caption
    SUBEVENT_CAPTION
  end
  #--------------------------------------------------------------------------
  # ● サブイベント リスト数の取得
  #--------------------------------------------------------------------------
  def self.event_number
    SUBEVENT_TITLES.size
  end
  #--------------------------------------------------------------------------
  # ● サブイベントが発生しているかどうかの判定
  #--------------------------------------------------------------------------
  def self.event_start?(id)
    $game_variables[id] >= SUBEVENT_STARTED
  end
  #--------------------------------------------------------------------------
  # ● サブイベントをクリアしたかどうかの判定
  #--------------------------------------------------------------------------
  def self.event_clear?(id)
    $game_variables[id] >= SUBEVENT_CLEARED
  end
  #--------------------------------------------------------------------------
  # ● サブイベント フラグ変数リストの取得
  #--------------------------------------------------------------------------
  def self.cache_event_list
    @event_list = SUBEVENT_TITLES.keys.sort
    @event_list.sort!{|a, b|
      title_a = self.event_start?(a) ? 0 : 1
      title_b = self.event_start?(b) ? 0 : 1
      if title_a != title_b
        title_a <=> title_b
      else
        a <=> b
      end
    }
  end
  #--------------------------------------------------------------------------
  # ● サブイベントリストのゲッター
  #--------------------------------------------------------------------------
  def self.event_list
    @event_list
  end
  #--------------------------------------------------------------------------
  # ● サブイベント タイトルの取得
  #--------------------------------------------------------------------------
  def self.event_title(id)
    if event_start?(id)
      SUBEVENT_TITLES[id][0]
    else
      "--------------------"
    end
  end
  #--------------------------------------------------------------------------
  # ● サブイベント テキストの取得
  #--------------------------------------------------------------------------
  def self.event_text(id)
    if event_clear?(id)
      SUBEVENT_TITLES[id][2]
    elsif event_start?(id)
      text = nil
      if SUBEVENT_CONTENTS[id]
        SUBEVENT_CONTENTS[id].each{|data|
          text = data[1] if data[0] <= $game_variables[id]
        }
      end
      text ? text : SUBEVENT_TITLES[id][1]
    else
      ""
    end
  end
  #--------------------------------------------------------------------------
  # ● シナリオ達成率の取得
  #--------------------------------------------------------------------------
  def self.completed
    n = 0
    for i in @event_list
      if event_clear?(i)
        n += 2
      elsif event_start?(i)
        n += 1
      end
    end
    n * 100 / (event_number * 2)
  end
end

class WindowInfo < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(368, 152, window_width, window_height)
    self.opacity = 0
    refresh
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウ幅の取得
  #--------------------------------------------------------------------------
  def window_width
    160
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウ高さの取得
  #--------------------------------------------------------------------------
  def window_height
    line_height + 32
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    draw_text(0, 0, 124, line_height, STORYEVENT::SUBEVENT_CLEARTEXT)
    text = "%"
    contents.font.size = 16
    cx = text_size(text).width
    change_color(system_color)
    draw_text(0, 0, 124, line_height, text, 2)
    contents.font.size = 20
    change_color(normal_color)
    draw_text(0, 0, 124-cx-4, line_height, STORYEVENT.completed, 2)
  end
end

class WindowOutlineSub < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 152, window_width, window_height)
    refresh
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウ幅の取得
  #--------------------------------------------------------------------------
  def window_width
    Graphics.width
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウ高さの取得
  #--------------------------------------------------------------------------
  def window_height
    Graphics.height - 152
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    change_color(system_color)
    draw_text(0, 0, 352, line_height, STORYEVENT.event_caption)
  end
end

class WindowOutlineList < Window_Selectable
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 192, window_width, window_height)
    self.index = 0
    self.opacity = 0
    refresh
    activate
  end
  #--------------------------------------------------------------------------
  # ● 選択項目の有効状態を取得
  #--------------------------------------------------------------------------
  def current_item_enabled?
    STORYEVENT.event_start?(STORYEVENT.event_list[index])
  end
  #--------------------------------------------------------------------------
  # ● 桁数の取得
  #--------------------------------------------------------------------------
  def col_max
    2
  end
  #--------------------------------------------------------------------------
  # ● 横に項目が並ぶときの空白の幅を取得
  #--------------------------------------------------------------------------
  def spacing
    16
  end
  #--------------------------------------------------------------------------
  # ● 項目数の取得
  #--------------------------------------------------------------------------
  def item_max
    STORYEVENT.event_number
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウ幅の取得
  #--------------------------------------------------------------------------
  def window_width
    Graphics.width
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウ高さの取得
  #--------------------------------------------------------------------------
  def window_height
    Graphics.height - 192
  end
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #--------------------------------------------------------------------------
  def draw_item(index)
    event_id = STORYEVENT.event_list[index]
    rect = item_rect(index)
    rect.x += 2
    color = normal_color
    enabled = STORYEVENT.event_start?(event_id)
    if enabled
      if STORYEVENT.event_clear?(event_id)
        color = text_color(1)
        draw_icon(STORYEVENT::SUBEVENT_CLEARED_ICON, rect.x, rect.y)
      end
    end
    rect.x += 24
    rect.width -= 28
    change_color(color, enabled)
    draw_text(rect, STORYEVENT.event_title(event_id))
  end
end

class WindowOutlineMain < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, window_width, window_height)
    refresh
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウ幅の取得
  #--------------------------------------------------------------------------
  def window_width
    Graphics.width
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウ高さの取得
  #--------------------------------------------------------------------------
  def window_height
    152
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    cw = contents.width - 32
    change_color(system_color)
    draw_text(0, 0, contents.width - 32, line_height, STORYEVENT.story_caption)
    change_color(normal_color)
    cx = text_size(STORYEVENT.story_caption).width + 16
    draw_text(cx, 0, cw - cx, line_height, STORYEVENT.story_title)
    draw_text_ex(16, line_height + 16, STORYEVENT.story_text.dup)
  end
end

class WindoOutlineText < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader   :item_index               # 表示するインデックス
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(window_x, window_y, window_width, window_height)
    self.windowskin = Cache.system(STORYEVENT::SUBEVENT_SKIN)
    self.z = 200
    self.active = false
    self.openness = 0
    @item_index = 0
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウ X 座標の取得
  #--------------------------------------------------------------------------
  def window_x
    (Graphics.width - window_width) / 2
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウ Y 座標の取得
  #--------------------------------------------------------------------------
  def window_y
    (Graphics.height - window_height) / 2
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウ幅の取得
  #--------------------------------------------------------------------------
  def window_width
    432
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウ高さの取得
  #--------------------------------------------------------------------------
  def window_height
    368
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    id = STORYEVENT.event_list[@item_index]
    text = STORYEVENT.event_title(id)
    contents.font.shadow = false
    contents.font.bold = true
    contents.font.size = 24
    change_color(system_color)
    cx = contents.width - 96
    cw = text_size(text).width
    contents.fill_rect(Rect.new(4, 32, cw + 8, 2), system_color)
    contents.draw_text(8, 8, cx - 24, line_height, text)
    contents.font.bold = false
    contents.font.size = 20
    change_color(normal_color)
    contents.draw_text(0, 36, cx, line_height, STORYEVENT::SUBEVENT_CLEARED_TEXT) if STORYEVENT.event_clear?(id)
    draw_text_ex(0, line_height * 2+12, STORYEVENT.event_text(id).clone)
  end
  #--------------------------------------------------------------------------
  # ● 表示するインデックスの設定
  #--------------------------------------------------------------------------
  def item_index=(index)
    @item_index = index
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウのアクティブ化
  #--------------------------------------------------------------------------
  def activate
    refresh
    open
    super
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウの非アクティブ化
  #--------------------------------------------------------------------------
  def deactivate
    close
    super
  end
end

class Window_MenuCommand < Window_Command
  #--------------------------------------------------------------------------
  # ● コマンドリストの作成
  #--------------------------------------------------------------------------
  alias _make_command_list_with_story_command make_command_list
  def make_command_list
    _make_command_list_with_story_command
    add_story_command
  end
  #--------------------------------------------------------------------------
  # ● インデックスを指定したコマンドの追加
  #--------------------------------------------------------------------------
  def add_command_with_index(name, symbol, index, enabled = true, ext = nil)
    @list[index, 0] = {:name=>name, :symbol=>symbol, :enabled=>enabled, :ext=>ext}
  end
  #--------------------------------------------------------------------------
  # ● 冒険メモコマンドの有効判定
  #--------------------------------------------------------------------------
  def enable_story_command?
    $game_switches[STORYEVENT::STORYEVENT_ENABLE_SID]
  end
  #--------------------------------------------------------------------------
  # ● 冒険メモコマンドの追加
  #--------------------------------------------------------------------------
  def add_story_command
    add_command_with_index(STORYEVENT::STORYEVENT_MENU_TEXT, :story,
          STORYEVENT::STORYEVENT_MENU_INDEX, enable_story_command?)
  end
end

class SceneOutline < Scene_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    STORYEVENT.cache
    @index = 0
  end
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  def start
    super
    create_background
    create_backsprite
    create_windows
    set_handler
  end
  #--------------------------------------------------------------------------
  # ● 背景の作成
  #--------------------------------------------------------------------------
  def create_background
    @background_sprite = Sprite.new
    @background_sprite.bitmap = SceneManager.background_bitmap
    @background_sprite.color.set(16, 16, 16, 128)
  end
  #--------------------------------------------------------------------------
  # ● サブイベント閲覧時用の背景スプライトの作成
  #--------------------------------------------------------------------------
  def create_backsprite
    @back_sprite = Sprite.new
    @back_sprite.bitmap = Bitmap.new(Graphics.width, Graphics.height)
    @back_sprite.bitmap.fill_rect(@back_sprite.bitmap.rect, Color.new(0, 0, 0, 192))
    @back_sprite.visible = false
    @back_sprite.z = 190
  end
  #--------------------------------------------------------------------------
  # ● 各種ウィンドウの作成
  #--------------------------------------------------------------------------
  def create_windows
    @main_window = WindowOutlineMain.new
    @sub_window = WindowOutlineSub.new
    @list_window = WindowOutlineList.new
    @info_window = WindowInfo.new
    @text_window = WindoOutlineText.new
  end
  #--------------------------------------------------------------------------
  # ● ハンドラのセット
  #--------------------------------------------------------------------------
  def set_handler
    @list_window.set_handler(:ok, method(:open_text_window))
    @list_window.set_handler(:cancel, method(:return_scene))
    @text_window.set_handler(:cancel, method(:close_text_window))
  end
  #--------------------------------------------------------------------------
  # ● 終了処理
  #--------------------------------------------------------------------------
  def terminate
    super
    dispose_background
    dispose_backsprite
    dispose_windows
  end
  #--------------------------------------------------------------------------
  # ● 背景の解放
  #--------------------------------------------------------------------------
  def dispose_background
    @background_sprite.dispose
  end
  #--------------------------------------------------------------------------
  # ● サブイベント閲覧時用の背景スプライトの解放
  #--------------------------------------------------------------------------
  def dispose_backsprite
    @back_sprite.dispose
  end
  #--------------------------------------------------------------------------
  # ● 各種ウィンドウの解放
  #--------------------------------------------------------------------------
  def dispose_windows
    @main_window.dispose
    @sub_window.dispose
    @list_window.dispose
    @info_window.dispose
    @text_window.dispose
  end
  #--------------------------------------------------------------------------
  # ● サブイベントの詳細ウィンドウ表示
  #--------------------------------------------------------------------------
  def open_text_window
    @list_window.visible = false
    @main_window.visible = false
    @sub_window.visible = false
    @info_window.visible = false
    @back_sprite.visible = true
    @text_window.item_index = @list_window.index
    @text_window.activate
  end
  #--------------------------------------------------------------------------
  # ● サブイベントの詳細ウィンドウ非表示
  #--------------------------------------------------------------------------
  def close_text_window
    @list_window.visible = true
    @main_window.visible = true
    @sub_window.visible = true
    @info_window.visible = true
    @back_sprite.visible = false
    @list_window.activate
  end
end

class Scene_Menu < Scene_MenuBase
  #--------------------------------------------------------------------------
  # ● コマンドウィンドウの作成
  #--------------------------------------------------------------------------
  alias _create_story_command create_command_window
  def create_command_window
    _create_story_command
    @command_window.set_handler(:story, method(:command_story))
  end
  #--------------------------------------------------------------------------
  # ● コマンド[冒険メモ]
  #--------------------------------------------------------------------------
  def command_story
    SceneManager.call(SceneOutline)
  end
end[/pre]






23.jpg

測試.rar

1.43 MB, 下载次数: 66

漾夕☽星化残月☾

梦石
0
星屑
8611
在线时间
3858 小时
注册时间
2015-5-12
回帖
2022

剧作品鉴家

发表于 2017-11-5 16:42:25 | 显示全部楼层
本帖最后由 御曹司 于 2017-11-5 16:47 编辑

这边大部分人是大陆的打不开谷歌drive
………………不好意思不小心水回了……脑子抽以为是点评

点评

抱歉QQ,忘記有附件的功能能上傳了。  发表于 2017-11-5 17:05
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部