Project1

标题: 請問這個腳本要怎麼改才能從VX轉到VA使用? [打印本页]

作者: a000b1745    时间: 2012-2-14 08:14
标题: 請問這個腳本要怎麼改才能從VX轉到VA使用?
我想把RPGVX的一個腳本拿來使用,
可是似乎沒辦法直接使用在RPGVA上面...
請問應該改哪裡才可以應用在VA上呢??

module Sword
#=======================================
#★ 魔劍工舖 - 書籍閱讀 1.04
# http://blog.yam.com/a870053jjkj/
#=======================================
  ON, OFF, Sword16_Library = true, false, []
=begin
========================================
● 所需腳本
控制碼轉換:http://blog.yam.com/a870053jjkj/article/28082241(非必要)
========================================
● 控制碼(支援「控制碼轉換」中的控制碼)
\C[顏色代碼] : 同事件 [顯示文章] 的「\C」控制碼相同,變更設定好的顏色
\C[紅,綠,藍] : 自訂3原色,依照3原色來設置選項內容
\IC[圖片檔案名稱] : 顯示Icons資料夾中指定的圖片,VX為System資料夾
\V[變數編號] : 顯示指定編號的編號
\N[角色編號] : 顯示指定編號的角色名稱
\B : 文字加粗,在使用一次會恢復原狀
========================================
● 設置方法
呼叫書庫畫面:$scene = Sword_Library.new
開通書本全頁:$game_party.librarys(書本編號, true)
開通書本單頁:$game_party.librarys(書本編號, 頁數)
關閉書本全頁:$game_party.librarys(書本編號, false)
關閉書本單頁:$game_party.librarys(書本編號, -頁數)
開通關閉互換:$game_party.librarys(書本編號, nil)
========================================
=end
#=======================================
#● 使用者自定設置
Sword16_Width = 120 # 設定左邊選項窗口的寬度,相對的右邊內容窗口也會受影響
Sword16_Help = ['書庫', 1] # 上方幫助窗口的 ['內容', 位置],位置:0左;1中;2右
Sword16_Order = OFF # 書本的排列是否要照著自定設置的順序排列
Sword16_SE = ['Book', 50, 60] # 設定翻頁時的 ['SE檔案名稱', 音量, 節拍]
Sword16_Arrowhead = ['←', '→'] # 設定箭頭圖片檔案名稱,如沒該檔案就顯示該內容
Sword16_Pagination = 2 # 顯示目前頁數,0為不顯示;1為顯示;2為顯示(含一頁)
Sword16_SignX = 5 # 設定換頁符號的X座標離距離窗口邊緣多遠
Sword16_SignY = 318 # 設定換頁符號的出現的Y座標位置(以書本內容窗口為原點)
#--------------------------------------------------------------
Sword16_Library[1] = ['換頁範例']
Sword16_Library[1][1] = '★設置開始★
目前你正在觀看第一頁的內容
\c[6]按鍵盤方向鍵→可以切換到下一頁
' # ☆設置結束☆
  
Sword16_Library[1][2] = '★設置開始★
目前你正在觀看第二頁的內容
\c[4]按鍵盤方向鍵←可以切換到上一頁
\c[6]按鍵盤方向鍵→可以切換到下一頁
' # ☆設置結束☆

Sword16_Library[1][3] = '★設置開始★
目前你正在觀看第三頁的內容
\c[4]按鍵盤方向鍵←可以切換到上一頁
\c[6]按鍵盤方向鍵→可以切換到下一頁
' # ☆設置結束☆

Sword16_Library[1][4] = '★設置開始★
目前你正在觀看第四頁的內容(\c[255,0,0]這是最終頁\c[0])
\c[4]按鍵盤方向鍵←可以切換到上一頁
' # ☆設置結束☆
#--------------------------------------------------------------
Sword16_Library[2] = ['設定這裡']
Sword16_Library[2][1] = '★設置開始★
聽說Sword16_Help設成[\'\', 0]
則最上面的那條窗口就會不見!!
' # ☆設置結束☆

Sword16_Library[2][2] = '★設置開始★
\B\c[6]裝備名稱

\c[4](簡介)\B\c[0]

防禦 +9 迴避 +9 攻擊 +9 
爆擊 +9 敏捷 +9 爆擊 +9
精神 +9 器魂  2 
\c[0]白0\c[4]藍4\c[6]黃6\c[18]紅18\c[24]綠24\c[0]
屬性:無
效果:吸血1%

' # ☆設置結束☆
#--------------------------------------------------------------
Sword16_Library[3] = ['書本3']
Sword16_Library[3][1] = '★設置開始★
\c[99,00,99]\B只有一頁...\B\c[0]
因為沒有必要換頁...
所以沒有將\c[6]換頁箭頭\c[0]顯示出來
' # ☆設置結束☆
#=======================================
  $Sword ? $Sword[16] = true : $Sword = {16=>true} # 腳本使用標誌
  ($Sword_VX = false ; RPG::Weather rescue $Sword_VX = true) if $Sword_VX == nil
  Sword16_SE[0] = 'Audio/SE/' + Sword16_SE[0]
end
#=======================================
#■ 處理同伴的類別
class Game_Party
  include Sword # 連接自定設置
  attr_reader    :library_order # 書本排列順序
  attr_reader    :pages # 書本頁數收錄列表
  attr_accessor :library # 書本收錄標誌數組
  #-------------------------------------------------------------
  #● 初始化物件
  alias sword16_initialize initialize
  def initialize
    sword16_initialize
    @library_order, @pages = [], {}
    @library = Array.new(Sword16_Library.size - 1){|i| @pages = [] ; false}
  end
  #-------------------------------------------------------------
  #● 添加與移除書本的(書本編號, 標誌或書籍編號)
  def librarys(id, add)
    (pag = add ; add = true) if add.is_a?(Integer) # 如果指定數值就變換變量
    @library[id] = add == nil ? (not @library[id]) : add # 變更書本獲得狀態
    if @library[id] ; @library_order += [id] unless @library_order.include?(id) # 加入順序
      unless pag ; @pages[id] = Array.new(Sword16_Library[id].size - 1){|i| i + 1} # 全頁
      else ; @pages[id] += [pag] unless @pages[id].include?(pag) if pag > 0 # 添加頁數
        @pages[id] -= [pag.abs] if pag < 0 # 移除頁數
      end
    else ; @library_order -= [id] ; @pages[id] = [] # 移除順序並清除書本的頁數
    end
    @pages[id] = @pages[id].sort # 頁數順序修正
    @library[id] = false if @pages[id].empty? # 書本無任何一頁就移除書本
  end
end
#=======================================
#■ 書庫窗口
class WSword_Library < Window_Base
  include Sword # 連接自定設置
  #-------------------------------------------------------------
  #● 初始化物件(書本編號)
  def initialize(library_id)
    @xpvx = $Sword_VX ? [Graphics.width, Graphics.height, 54] : [640, 480, 64]
    @xpvx[2] = 0 if Sword16_Help[0].empty? # 如果沒幫助窗口就不依照幫助窗口高度
    super(Sword16_Width, @xpvx[2], @xpvx[0] - Sword16_Width, @xpvx[1] - @xpvx[2])
    self.contents = Bitmap.new(width - 32, height - 32)
    (1..$game_party.library.size).each do |i| # 顯示第1個要顯示的內容
      (refresh(library_id, $game_party.pages[library_id][0]) ; return) if $game_party.library
    end
  end
  #-------------------------------------------------------------
  #● 更新內容(書本編號, 頁數)
  def refresh(library_id, pagination)
    self.contents.clear ; return if pagination == 0 # 清除,如果無頁數就中斷
    self.contents.font.color = normal_color ; self.contents.font.bold = false
    ignore_row = true # 忽略第一行的標誌(清除「★設置開始★」)
    text = Sword16_Library[library_id][pagination] ; x = 4 ; y = 0
    text = text.gsub(/\\[Ii][Cc]\[([\w_\-]+)\]/){"\001[#{$1}]"}
    text = text.gsub(/\\[Cc]\[(\d+)[ \,]+(\d+)[ \,]+(\d+)\]/){"\002[#{$1},#{$2},#{$3}]"}
    text = text.gsub(/\\[Cc]\[(\d+)\]/){"\003[#{$1}]"}
    text = text.gsub(/\\[Bb]/){"\004"}
    text = text.gsub(/\\[Vv]\[(\d+)\]/){$game_variables[$1.to_i]}
    text = text.gsub(/\\[Nn]\[(\d+)\]/){$game_actors[$1.to_i].name}
    text = text.code_explain if $Sword[46] # 控制碼轉換
    while ((c = text.slice!(/./m)) != nil)
      case c
      when "\n" ; if ignore_row ; ignore_row = false ; else ; x = 4 ; y += 32 ; next ; end # 換行
      when "\001"
        text.sub!(/\[([\w_\-]+)\]/, '')
        icon = $Sword_VX ? Cache.system($1) : RPG::Cache.icon($1)
        self.contents.blt(x, y, icon, Rect.new(0, 0, 640, 480))
        x += icon.width # 代入圖片寬度
        next
      when "\002" ; text.sub!(/\[(\d+)\,(\d+)\,(\d+)\]/, '')
        self.contents.font.color = Color.new($1.to_i, $2.to_i, $3.to_i) ; next
      when "\003" ; text.sub!(/\[(\d+)\]/, '') ; self.contents.font.color = text_color($1.to_i) ; next
      when "\004" ; self.contents.font.bold = (not self.contents.font.bold) ; next
      end
      next if (ignore_row or c == "\n")
      self.contents.draw_text(x, y, 640 - 36 - Sword16_Width, 32, c)
      x += contents.text_size(c).width # 代入內容寬度
    end
  end
end
#=======================================
#■ 書庫頁數窗口
class WSword_LibraryPagination < Window_Base
  include Sword # 連接自定設置
  #-------------------------------------------------------------
  #● 初始化物件
  def initialize(library)
    @xpvx = $Sword_VX ? [Graphics.width, Graphics.height, 54] : [640, 480, 64]
    @xpvx[2] = 0 if Sword16_Help[0].empty? # 如果沒幫助窗口就不依照幫助窗口高度
    super(Sword16_Width - 16, @xpvx[2] + Sword16_SignY,
    @xpvx[0] - Sword16_Width + 32, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.opacity = 0 ; self.z = 5100
    $game_party.pages[library].size == 1 ? refresh(0) : refresh(2) if library
  end
  #-------------------------------------------------------------
  #● 更新內容
  def refresh(dir)
    self.contents.clear
    self.contents.font.color = normal_color ; self.contents.font.bold = true
    a = Sword16_Arrowhead
    cache = [RPG::Cache.icon(a[0])] rescue cache = [] # 偵測左鍵頭圖片
    cache += [RPG::Cache.icon(a[1])] rescue 0 # 偵測右鍵頭圖片
    if dir == 1 or dir == 3 ; if cache[0] # 上一頁符號的處理
      self.contents.blt(0 + Sword16_SignX, 0, cache[0], Rect.new(0, 0, 100, 100))
    else ; self.contents.draw_text(0 + Sword16_SignX, 0, 32, 32, a[0])
    end ; end
    if dir == 2 or dir == 3 ; if cache[1] # 下一頁符號的處理
      self.contents.blt(self.width - cache[1].width -
      Sword16_SignX - 32, 0, cache[1], Rect.new(0, 0, 100, 100))
    else ; self.contents.draw_text(0, 0, self.width - 32 - Sword16_SignX, 32, a[1], 2)
    end ; end
    self.contents.draw_text(0, 0, self.width - 32, 32, $scene.pagination.to_s, 1) if (
    Sword16_Pagination == 2 or (Sword16_Pagination == 1 and dir > 0)) # 目前頁數
  end
end
#=======================================
#■ 書庫畫面
class Sword_Library
  include Sword # 連接自定設置
  attr_reader    :pagination # 觀看的頁數
  #-------------------------------------------------------------
  #● 主處理
  def main
    # 產生窗口
    @library = [[], []] # 定義選項
    (Sword16_Order ? 1..$game_party.library.size : $game_party.library_order).each do |i|
      (@library[0].push(Sword16_Library[0]); @library[1].push(i)) if
      $game_party.library rescue next
    end
    @library[0] = [''] if @library[0].empty? # 如果沒符合的選項時,就空白
    @command_window = Window_Command.new(Sword16_Width, @library[0])#選項窗口
    @command_window.y = $Sword_VX ? 54 : 64 unless Sword16_Help[0].empty?
    @command_window.height = ($Sword_VX ? 416 : 480) - @command_window.y
    @library_wsword = WSword_Library.new(@library[1][0]) # 產生書庫窗口
    @pagination = $game_party.pages[library_id][0] if $game_party.pages[library_id] # 起始
    @librarypagi_wsword = WSword_LibraryPagination.new(@library[1][0]) # 頁數窗口
    unless Sword16_Help[0].empty? # 有設置窗口內容時
      @help_window = Window_Help.new  # 產生幫助窗口
      @help_window.set_text(Sword16_Help[0], Sword16_Help[1]) # 設置窗口內容
    end
    #○ 主循環
    Graphics.transition
    loop {Graphics.update ; Input.update ; update ; break if $scene != self} # 更新
    Graphics.freeze
    #○ 釋放窗口
    @command_window.dispose
    @library_wsword.dispose
    @librarypagi_wsword.dispose
    @help_window.dispose unless Sword16_Help[0].empty?
  end
  #-------------------------------------------------------------
  #● 更新畫面
  def update
    @command_window.update
    #○ 按鍵判斷
    p $game_party.pages[library_id] if Input.trigger?(Input::A)
    if Input.trigger?(Input::B)
      $Sword_VX ? Sound.play_cancel : $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new # 返回地圖
    elsif Input.repeat?(Input::UP) or Input.trigger?(Input::DOWN)
      return if (not library_id) or @library[0].size <= 1 # 非指定編號或只有一頁就中斷
      @pagination = $game_party.pages[library_id][0] # 變更為一開始的一頁
      @library_wsword.refresh(library_id, @pagination)
      $game_party.pages[library_id].size == 1 ?
      @librarypagi_wsword.refresh(0) : @librarypagi_wsword.refresh(2)
    elsif Input.repeat?(Input::LEFT) # 上一頁
      return unless library_id # 如果非指定編號就中斷
      if $game_party.pages[library_id].index(@pagination) != 0
        @pagination = $game_party.pages[library_id][
        $game_party.pages[library_id].index(@pagination) - 1]
        Audio.se_play(Sword16_SE[0], Sword16_SE[1], Sword16_SE[2]) rescue 0
        @library_wsword.refresh(library_id, @pagination)
        @pagination == $game_party.pages[library_id][0] ?
        @librarypagi_wsword.refresh(2) : @librarypagi_wsword.refresh(3)
      end
    elsif Input.trigger?(Input::RIGHT) # 下一頁
      return unless library_id # 如果非指定編號就中斷
      if $game_party.pages[library_id].index(@pagination) !=
      $game_party.pages[library_id].size - 1
        @pagination = $game_party.pages[library_id][
        $game_party.pages[library_id].index(@pagination) + 1]
        Audio.se_play(Sword16_SE[0], Sword16_SE[1], Sword16_SE[2]) rescue 0
        @library_wsword.refresh(library_id, @pagination)
        @pagination == $game_party.pages[library_id][-1] ?
        @librarypagi_wsword.refresh(1) : @librarypagi_wsword.refresh(3)
      end
    end
  end
  #-------------------------------------------------------------
  #● 獲取選項目前指著的書籍編號
  def library_id ; @library[1][@command_window.index] ; end
enddsu_plus_rewardpost_czw




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1