设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
Project1 查看内容

特技图鉴

2005-10-19 00:00| 发布者: 柳柳| 查看: 6462| 评论: 0|原作者: 66RPG

摘要:    作者 和希,桜雅来源日本翻译:柳柳  版本与更新  2005年7月更新  相关网址    范例工程 不提供 脚本功能 可以把见到的特技收集到鉴定中去。 有关版权
 

 作者

和希,桜雅
来源日本
翻译:柳柳

 版本与更新

 2005年7月更新

 相关网址

 

 范例工程

不提供



脚本功能

可以把见到的特技收集到鉴定中去。

有关版权的一点说明:脚本是通过某前辈在MSN上向作者直接申请得来,请误随便转载。如有置疑,请联系本站客服。

 

使用方法

复制全部脚本内容,在Main脚本之前按insert,插入此脚本全部内容。设置方法和武器图鉴脚本相同。

脚本冲突可能:战斗类的一些脚本和菜单类的,比较多。

 

相关截图


 

 脚本内容

#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#============================================================================== 

#————————————————————————————————————————
# 特技图鉴:$scene = Scene_SkillBook.new
#
# 设置方法和武器图鉴很相似,效果却不如那个绚丽。我想使用了这个脚本的人一定会使用
# 武器图鉴,就不多说了。
#————————————————————————————————————————

module Skill_Book_Config
  SHOW_COMPLETE_TYPE = 1        
  DRAW_POW_ZERO = false          #是否显示0威力的特技
  ZERO_POW_TEXT = "-"           #威力为0时显示的内容
end

class Window_SkillBook_Info < Window_Selectable
  include Skill_Book_Config
end

class Data_SkillBook
  attr_reader :skill_kind_name
  attr_reader :kind_row
  attr_reader :skill_id_data
  attr_reader :skill_kind_element_name
  def initialize
    @skill_kind_name = ["物理特技", "魔法特技", "其他技能"]  #——显示名设定
    @kind_row = ["物理特技",
                 "魔法特技",
                 "其他技能"]
    @skill_kind_element_name = ["物理", "魔法", "其他"]   #——属性名设定
    @skill_id_data = skill_book_id_set
  end
  def kind_search(name)
    if @skill_kind_name.include?(name)
      return [0, @skill_kind_name.index(name)]
    end
  end
  def no_add_element
    no_add = 0
    for i in 1...$data_system.elements.size
      if $data_system.elements[i] =~ /不加入图鉴/
        no_add = i
        break
      end
    end
    return no_add
  end
  def element_search(element_name)
    return nil if element_name == nil
    for i in 1...$data_system.elements.size
      if $data_system.elements[i] =~ /^#{element_name}/
        return i
      end
    end
  end
  def skill_book_id_set
    data = []
    no_add = no_add_element
    if @skill_kind_element_name.size == 0
      data[0] = [0]
      for i in 1...$data_skills.size
        skill = $data_skills[i]
        next if skill.name == ""
        next if skill.element_set.include?(no_add)
        data[0].push(skill.id)
      end
    else
      for i in 0...@skill_kind_element_name.size
        data[i] = [0]
        element_id = element_search(@skill_kind_element_name[i])
        for j in 1...$data_skills.size
          skill = $data_skills[j]
          next if skill.name == ""
          next if skill.element_set.include?(no_add)
          if skill.element_set.include?(element_id)
            data[i].push(skill.id)
          end
        end
      end
    end
    return data
  end
end
class Game_Actor < Game_Battler
  alias game_actor_skill_book_learn_skill learn_skill
  def learn_skill(skill_id)
    game_actor_skill_book_learn_skill(skill_id)
    $game_system.add_skill_count(skill_id)
  end
end

class Window_Base < Window
  def draw_attack_element(x, y, element_set)
    elem_temp = []
    for i in element_set
      elem = $data_system.elements[i]
      elem_temp.push("炎") if elem == "炎"
      elem_temp.push("冰") if elem == "冰"
      elem_temp.push("雷") if elem == "雷"
      elem_temp.push("水") if elem == "水"
      elem_temp.push("土") if elem == "土"
      elem_temp.push("风") if elem == "风"
      elem_temp.push("光") if elem == "光"
      elem_temp.push("暗") if elem == "暗"
    end
    if elem_temp.size == 0
      self.contents.draw_text(x, y, 64, 32, "无")
      return
    end
    ox = 0
    for name in elem_temp
      cx = self.contents.text_size(name).width
      self.contents.draw_text(x+ox, y, cx, 32, name)
      ox += cx+8
    end
  end
  def draw_attack_wp_element(x, y, element_set)
    elem_temp = []
    for i in element_set
      elem = $data_system.elements[i]
      elem_temp.push("斬") if elem == "斬"
      elem_temp.push("打") if elem == "打"
      elem_temp.push("突") if elem == "突"
      elem_temp.push("射") if elem == "射"
      elem_temp.push("魔") if elem == "魔"
    end
    if elem_temp.size == 0
      self.contents.draw_text(x, y, 64, 32, "无")
      return
    end
    ox = 0
    for name in elem_temp
      cx = self.contents.text_size(name).width
      self.contents.draw_text(x+ox, y, cx, 32, name)
      ox += cx+8
    end
  end
  def draw_attack_weak_element(x, y, element_set)
    elem_temp = []
    for i in element_set
      elem = $data_system.elements[i]
      elem_temp.push("不死") if elem == "対 不死"
      elem_temp.push("蛇")   if elem == "対 蛇"
      elem_temp.push("水棲") if elem == "対 水棲"
      elem_temp.push("獣")   if elem == "対 獣"
      elem_temp.push("鬼")   if elem == "対 鬼"
      elem_temp.push("鳥")   if elem == "対 鳥"
      elem_temp.push("悪魔") if elem == "対 悪魔"
      elem_temp.push("天使") if elem == "対 天使"
    end
    if elem_temp.size == 0
      self.contents.draw_text(x, y, 64, 32, "无")
      return
    end
    ox = 0
    for name in elem_temp
      cx = self.contents.text_size(name).width
      self.contents.draw_text(x+ox, y, cx, 32, name)
      ox += cx+8
    end
  end
  def draw_attack_add_state(x, y, plus_state_set)
    state_temp = []
    for i in plus_state_set
      state = $data_states[i]
      state_temp.push(state.name) if state.name != ""
    end
    if state_temp.size == 0
      self.contents.draw_text(x, y, 64, 32, "无")
      return
    end
    ox = 0
    oy = 0
    for name in state_temp
      cx = self.contents.text_size(name).width
      if ox + cx + 4 >= self.contents.width - 128
        ox = 0
        oy += 1
      end
      self.contents.draw_text(x+ox, y+oy*32, cx, 32, name)
      ox += cx+8
    end
  end
  def draw_scope(scope)
    case scope
    when 0
      return "无"
    when 1
      return "敌方单体"
    when 2
      return "敌方全体"
    when 3
      return "我方单体"
    when 4
      return "我方全体"
    when 5
      return "我方单体(HP 0)"
    when 6
      return "我方全体(HP 0)"
    when 7
      return "使用者"
    end
  end
end
class Game_Temp
  attr_accessor :skill_book_data
  alias temp_skill_book_data_initialize initialize
  def initialize
    temp_skill_book_data_initialize
    @skill_book_data = Data_SkillBook.new
  end
end
class Game_System
  attr_accessor :skill_count            
  alias game_system_skill_book_initialize initialize
  def initialize
    game_system_skill_book_initialize
    @skill_count = {}
  end
  def add_skill_count(skill_id, type=0)
    if type == -1
      @skill_count[skill_id] = 0
    else
      @skill_count[skill_id] = 1
    end
  end
  def skill_book_max
    kind_data = $game_temp.skill_book_data.skill_kind_name
    size = 0
    for kind in kind_data
      size += skill_book_category_max(kind)
    end
    return size
  end
  def skill_book_now
    kind_data = $game_temp.skill_book_data.skill_kind_name
    size = 0
    for kind in kind_data
      size += skill_book_category_now(kind)
    end
    return size
  end
  def skill_book_complete_percentage
    s_max = skill_book_max.to_f
    s_now = skill_book_now.to_f
    comp = s_now / s_max * 100
    return comp.truncate
  end
  def skill_book_category_max(category)
    id_data = $game_temp.skill_book_data.skill_id_data.dup
    index = $game_temp.skill_book_data.kind_search(category)[1]
    size = id_data[index].size - 1
    return size
  end
  def skill_book_category_now(category)
    now_skill_info = @skill_count.keys
    index = $game_temp.skill_book_data.kind_search(category)[1]
    no_add = $game_temp.skill_book_data.no_add_element
    elename = $game_temp.skill_book_data.skill_kind_element_name[index]
    element_id = $game_temp.skill_book_data.element_search(elename)
    new_skill_info = []
    for i in now_skill_info
      skill = $data_skills[i]
      next if skill == nil
      next if skill.name == ""
      next if skill.element_set.include?(no_add)
      if element_id == nil or skill.element_set.include?(element_id)
        new_skill_info.push(skill.id)
      end
    end
    return new_skill_info.size
  end
  def skill_book_category_complete_percentage(category)
    s_max = skill_book_category_max(category).to_f
    s_now = skill_book_category_now(category).to_f
    comp = s_now / s_max * 100
    return comp.truncate
  end
end
class Interpreter
  def skill_book_max(category=nil)
    if category == nil
      return $game_system.skill_book_max
    else
      return $game_system.skill_book_category_max(category)
    end
  end
  def skill_book_now(category=nil)
    if category == nil
      return $game_system.skill_book_now
    else
      return $game_system.skill_book_category_now(category)
    end
  end
  def skill_book_comp(category=nil)
    if category == nil
      return $game_system.skill_book_complete_percentage
    else
      return $game_system.skill_book_category_complete_percentage(category)
    end
  end
end
class Window_SkillBook < Window_Selectable
  attr_reader   :data
  attr_reader   :item_kind
  attr_reader   :item_index
  def initialize(index=0)
    super(0, 64, 640, 416)
    @column_max = 2
    @book_data = $game_temp.skill_book_data
    @data = data_set(index)
    @data.shift
    #@data.sort!
    @item_max = @data.size
    @item_kind = index
    self.index = 0
    #refresh
  end
  def new_data_set(index)
    @data = data_set(index)
    @data.shift
    #@data.sort!
    @item_max = @data.size
  end
  def data_set(index)
    kind_row_data = @book_data.kind_search(@book_data.kind_row[index])
    @item_kind = kind_row_data[0]
    @item_index = kind_row_data[1]
    data = []
    case @item_kind
    when 0
      data = @book_data.skill_id_data[@item_index].dup
    end
    return data
  end
  def show?(kind, id)
    case kind
    when 0
      if $game_system.skill_count[id] == 0 or $game_system.skill_count[id] == nil
        return false
      else
        return true
      end
    end
  end
  def item
    return @data[self.index]
  end
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    return if @item_max == 0
    self.contents = Bitmap.new(width - 32, row_max * 32)
    for i in 0...@item_max
      draw_item(i)
    end
  end
  def draw_item(index)
    case @item_kind
    when 0
      item = $data_skills[@data[index]]
      id = @book_data.skill_id_data[@item_index].index(item.id)
    end
    return if item == nil
    x = 4 + index % 2 * (288 + 32)
    y = index / 2 * 32
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.font.color = normal_color
    self.contents.draw_text(x, y, 32, 32, id.to_s)
    if show?(@item_kind, item.id)
      bitmap = RPG::Cache.icon(item.icon_name)
      opacity = 255
      self.contents.blt(x+48, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
      self.contents.draw_text(x+48 + 28, y, 212, 32, item.name, 0)
    else
      self.contents.draw_text(x+48 + 28, y, 212, 32, "-----", 0)
      return
    end
  end
end
class Window_SkillBook_Info < Window_Selectable
  def initialize
    super(0, 0+64+64, 640, 480-64-64)
    @book_data = $game_temp.skill_book_data
    self.contents = Bitmap.new(width - 32, height - 32)
    self.index = -1
  end
  def refresh(item_id, item_kind, item_index)
    self.contents.clear
    self.contents.font.size = 22
    case item_kind
    when 0
      draw_skill_info(item_id, item_index)
    end
  end
  def draw_skill_info(item_id, item_index)
    item = $data_skills[item_id]
    rect = Rect.new(4, 0, 160, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = 255
    self.contents.blt(4+48, 0 + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.font.color = normal_color
    id = @book_data.skill_id_data[item_index].index(item.id)
    self.contents.draw_text(4, 0, 32, 32, id.to_s)
    self.contents.draw_text(4+48 + 28, 0, 212, 32, item.name, 0)
   
    cost = item.sp_cost.to_s
    self.contents.draw_text(4+48 + 28 + 232, 0, 48, 32, cost.to_s, 2)
   
    #skill_kind = skill_kind_name(item.element_set)
    #self.contents.draw_text(320+96, 0, 160, 32, skill_kind, 0)
    self.contents.font.color = text_color(2)
    self.contents.draw_text(4, 32, 48, 32, "威力", 0)
    self.contents.font.color = normal_color
    if item.power == 0 and DRAW_POW_ZERO == false
      pow = ZERO_POW_TEXT
    else
      pow = item.power.to_s
    end
    self.contents.draw_text(4+48, 32, 48, 32, pow, 2)
    self.contents.font.color = system_color
    self.contents.draw_text(4, 64, 48, 32, "范围", 0)
    self.contents.font.color = normal_color
    self.contents.draw_text(4+96+16, 64, 128, 32, draw_scope(item.scope), 0)
   
    self.contents.font.color = system_color
    self.contents.draw_text(4, 96, 96, 32, "基本属性")
    self.contents.draw_text(4, 128, 96, 32, "特攻属性")
    self.contents.draw_text(4, 160, 96, 32, "付与状态")
    self.contents.font.color = normal_color
    draw_attack_element(4+96+16, 96, item.element_set)
    draw_attack_weak_element(4+96+16, 128, item.element_set)
    draw_attack_add_state(4+96+16, 160, item.plus_state_set)
    @help_window.set_text(item.description)
  end
  def update_help
  end
end
class Scene_SkillBook
  include Skill_Book_Config
  def main
    # ウィンドウを作成
    @title_window = Window_Base.new(0, 0, 640, 64)
    @title_window.contents = Bitmap.new(640 - 32, 64 - 32)
    @title_window.contents.draw_text(4, 0, 320, 32, "特技图鉴", 0)
    draw_comp
    @main_window = Window_SkillBook.new
    @main_window.active = false
    @main_window.index = -1
    @help_window = Window_Help.new
    @help_window.z = 110
    @help_window.y = 64
    @help_window.visible = false
    command = $game_temp.skill_book_data.kind_row
    @kind_window = Window_Command.new(160, command)
    @kind_window.z = 110
    @kind_window.x = 320 - @kind_window.width / 2
    @kind_window.y = 240 - @kind_window.height / 2
    @kind_window.active = true
    @info_window = Window_SkillBook_Info.new
    @info_window.z = 110
    @info_window.visible = false
    @info_window.active = false
    @info_window.help_window = @help_window
    @visible_index = 0
    @now_kind = nil
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @title_window.dispose
    @help_window.dispose
    @main_window.dispose
    @kind_window.dispose
    @info_window.dispose
  end
  def update
    #@help_window.update
    @main_window.update
    @kind_window.update
    @info_window.update
    if @info_window.active
      update_info
      return
    end
    if @main_window.active
      update_main
      return
    end
    if @kind_window.active
      update_kind
      return
    end
  end
  def update_kind
    if Input.trigger?(Input::C)
      $game_system.se_play($data_system.decision_se)
      if @now_kind != @kind_window.index
        @main_window.new_data_set(@kind_window.index)
        @main_window.refresh
        @now_kind = @kind_window.index
      end
      subtitle = $game_temp.skill_book_data.kind_row[@kind_window.index]
      title = "特技图鉴:"+subtitle
      @title_window.contents.clear
      @title_window.contents = Bitmap.new(640 - 32, 64 - 32)
      @title_window.contents.draw_text(4, 0, 320, 32, title, 0)
      draw_comp(subtitle)
      @kind_window.active = false
      @kind_window.visible = false
      @main_window.active = true
      @main_window.index = 0
      return
    end
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
      return
    end
  end
  def update_main
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @main_window.active = false
      @kind_window.active = true
      @kind_window.visible = true
      @main_window.index = -1
      @title_window.contents.clear
      @title_window.contents = Bitmap.new(640 - 32, 64 - 32)
      @title_window.contents.draw_text(4, 0, 320, 32, "特技图鉴", 0)
      draw_comp
      return
    end
    if Input.trigger?(Input::C)
      if @main_window.item == nil or
         @main_window.show?(@main_window.item_kind, @main_window.item) == false
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      $game_system.se_play($data_system.decision_se)
      @main_window.active = false
      @info_window.active = true
      @info_window.visible = true
      @visible_index = @main_window.index
      @info_window.refresh(@main_window.item, @main_window.item_kind, @main_window.item_index)
      return
    end
  end
  def update_info
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @main_window.active = true
      @info_window.active = false
      @info_window.visible = false
      @help_window.visible = false
      return
    end
    if Input.trigger?(Input::C)
      $game_system.se_play($data_system.decision_se)
      return
    end
    if Input.trigger?(Input::L)
      $game_system.se_play($data_system.decision_se)
      loop_end = false
      while loop_end == false
        if @visible_index != 0
          @visible_index -= 1
        else
          @visible_index = @main_window.data.size - 1
        end
        loop_end = true if @main_window.show?(@main_window.item_kind,@main_window.data[@visible_index])
      end
      id = @main_window.data[@visible_index]
      @info_window.refresh(id, @main_window.item_kind, @main_window.item_index)
      return
    end
    if Input.trigger?(Input::R)
      $game_system.se_play($data_system.decision_se)
      loop_end = false
      while loop_end == false
        if @visible_index != @main_window.data.size - 1
          @visible_index += 1
        else
         @visible_index = 0
        end
        loop_end = true if @main_window.show?(@main_window.item_kind,@main_window.data[@visible_index])
      end
      id = @main_window.data[@visible_index]
      @info_window.refresh(id, @main_window.item_kind, @main_window.item_index)
      return
    end
  end
  def draw_comp(category=nil)
    if SHOW_COMPLETE_TYPE != 0
      if category == nil
        case SHOW_COMPLETE_TYPE
        when 1
          s_now = $game_system.skill_book_now
          s_max = $game_system.skill_book_max
          text = s_now.to_s + "/" + s_max.to_s
        when 2
 &n


鲜花
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码