| 
 
| 赞 | 0 |  
| VIP | 24 |  
| 好人卡 | 8 |  
| 积分 | 1 |  
| 经验 | 11412 |  
| 最后登录 | 2017-8-21 |  
| 在线时间 | 416 小时 |  
 Lv1.梦旅人 
	梦石0 星屑50 在线时间416 小时注册时间2006-10-21帖子1245 | 
| 
本帖最后由 wangswz 于 2010-9-15 20:05 编辑
x
加入我们,或者,欢迎回来。您需要 登录 才可以下载或查看,没有帐号?注册会员  
 第一个脚本
 酝酿半年研究多日
 求教大神们之后的产物
 有很多不全之处
 发现BUG请短消息告知..
 
   在菜单项自动增加选项按钮 可由开关控制是否开启
 
   描绘角色的基本信息 当前职业的成长系数
 自由选择单独设置职业转换限制
 可选择性描绘职业图标
 设置升级设置为角色属性+职业属性成长
 
 2010/8/26 更新 增加职业图标描绘修正了一个函数缺少BUG
复制代码#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/    ◆ 简易职业转职脚本 - FSL_JOB ◆ VX ◆
#_/
#_/    ◇ 项目分类 : 角色辅助
#_/    ◇ 项目版本 : 1.6.826
#_/    ◇ 建立日期 : 2010/8/23
#_/    ◇ 最后更新 : 2010/8/26 ◇
#_/----------------------------------------------------------------------------
#_/  脚本作者:wangswz
#_/============================================================================
#_/ 【基本机能】方便职业转换和职业成长设置
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#$scene = Scene_Job.new(0,false)于事件中调用
module FSL
  module JOB
    # ◆ 职业成长系数 初始化
    JOB_MAX = []
    # ◆ 设置      hp,mp,atk,def,spi,agi,职业图标号
    JOB_MAX[1] =  [13, 3,  5,  7,  9,  4,       32]
    JOB_MAX[2] =  [ 2, 2,  2,  2,  2,  2,        3]
    JOB_MAX[3] =  [ 3, 3,  3,  3,  3,  4,       33]
    JOB_MAX[4] =  [ 4, 4,  4,  4,  4,  4,       34]
    JOB_MAX[5] =  [ 4, 4,  4,  4,  4,  4,       35]
    JOB_MAX[6] =  [ 4, 4,  4,  4,  4,  4,       36]
    JOB_MAX[7] =  [ 4, 4,  4,  4,  4,  4,       37]
    
    # ◆ 设置缺省职业成长系数
    #当职业成长系数中未给出指定值时使用
    JOB_Default = [15,15,  2,  2,  2,  2,        0]
    
    # ◆ 属性用语 初始化
    JOB_text = []
    # ◆ 设置
    JOB_text[1] = ["体力增长"]
    JOB_text[2] = ["魔力增长"]
    JOB_text[3] = ["力量增长"]
    JOB_text[4] = ["耐力增长"]
    JOB_text[5] = ["精神增长"]
    JOB_text[6] = ["敏捷增长"]
    
    # ◆ 职业窗口每行显示数
    JOB_W = 3
    
    # ◆ 职业转职限制开关
    #true  设置限制转职列表
    #false 全职业可用
    Advanced = true
    
    # ◆ 职业不可转职列表 Advanced = true时有效
    JOB_Advanced = []
    #设置
    # <例> JOB_Advanced[1] = [4,5]
    #      数据库1号职业 不可转职为4,5号职业
    JOB_Advanced[1] = [4,5]
    JOB_Advanced[2] = [2,4,7]
    JOB_Advanced[3] = [1]
    
    # ◆ 职业转职列表显示开关
    #true 灰色显示不可转职职业
    #false不显示不可转职职业
    Advanced2 = false
    
    # ◆ 追加菜单
    #在菜单窗口最下方增加转职窗口按钮
    JOB_COMMAND = true
    
    # ◆ 追加菜单文字信息
    JOB_MENU_VOCAB = "-转职列表-"
    
    # ◆ 转职命令文字信息
    JOB_COMMAND_s1 = "-转职-"
    JOB_COMMAND_s2 = "-取消-"
  end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
$fscript = {} if $fscript == nil
                $fscript["FSL_JOB"] = [ 1, 6, 826]
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Scene_Base
#------------------------------------------------------------------------------
#  处理转职画面的类
#==============================================================================
class Scene_Job < Scene_Base
  #--------------------------------------------------------------------------
  # * 初始化对象
  #     actor_index : 角色位置
  #--------------------------------------------------------------------------
  def initialize(actor_index = 0, from_menu = true, job_index = 0)
    @actor_index = actor_index
    @from_menu = from_menu
    @Job_menu_index = job_index
  end
  #--------------------------------------------------------------------------
  # * 开始处理
  #--------------------------------------------------------------------------
  def start
    super
#~     @actor = $game_party.members[@actor_index]
    create_menu_background
    @actor = $game_party.members[@actor_index]
    @class_status_window = Window_ClassStatus.new(@actor)
    create_class_list
    create_option_list
    @command_window.active = false
    @command_window2.active = true
  end
  #--------------------------------------------------------------------------
  # * 创建选项列表
  #--------------------------------------------------------------------------
  def create_option_list
    s1 = FSL::JOB::JOB_COMMAND_s1
    s2 = FSL::JOB::JOB_COMMAND_s2
    @command_window2 = Window_Command.new(544, [s1, s2], 2)
    @command_window2.x = 0
    @command_window2.y = 0
    @command_window2.height = 56
  end
  #--------------------------------------------------------------------------
  # * 创建职业列表
  #--------------------------------------------------------------------------
  def create_class_list
    #生成职业列表
    com = []
     @com2 = []
 
      for i in 1...$data_classes.size
        
        if FSL::JOB::Advanced == true && FSL::JOB::Advanced2 == false
          if FSL::JOB::JOB_Advanced[@actor.class_id] != nil &&
              FSL::JOB::JOB_Advanced[@actor.class_id].include?(i)
            next
          else
            com << "  "+$data_classes[i].name if $data_classes[i].name != ""
            @com2 << i
          end
        else
          com << "  "+$data_classes[i].name if $data_classes[i].name != ""
          @com2 << i
        end
      
      end
#~       for i in 1...$data_classes.size
#~         com << "  "+$data_classes[i].name if $data_classes[i].name != ""
#~       end
    
    @command_window = Window_Command.new(544, com, FSL::JOB::JOB_W)
    #生成不可转职视觉效果
    for i in 1..com.size
      if FSL::JOB::Advanced == true && FSL::JOB::Advanced2 == true
        if FSL::JOB::JOB_Advanced[@actor.class_id] != nil && 
            FSL::JOB::JOB_Advanced[@actor.class_id].include?(i)
          @command_window.draw_item(i-1, false)
        end
      end
    end
    #设置窗口数值
    @command_window.x = 0
    @command_window.y = 256
    @command_window.height = 160
    
    x = 0
    y = 0
    i = 0
    p = 0
    if FSL::JOB::Advanced2 == false
      for m in 1..(Integer($data_classes.size / FSL::JOB::JOB_W)+1)
        for n in 1..FSL::JOB::JOB_W
          i += 1
          if FSL::JOB::JOB_MAX[i] != nil && FSL::JOB::JOB_MAX[i][6] != nil
            if @com2.include?(i)
              @command_window.draw_icon(FSL::JOB::JOB_MAX[i][6], x, y)
              x += (544 / FSL::JOB::JOB_W)
              p += 1
              if p % FSL::JOB::JOB_W == 0
                x = 0
                y += 24
              end
            end
          else
            if FSL::JOB::Advanced2
              @command_window.draw_icon(FSL::JOB::JOB_Default[6], x, y)
              x += (544 / FSL::JOB::JOB_W)
            end
          end
          break if i == ($data_classes.size - 1)
        end
      end
    else
      for m in 1..(Integer($data_classes.size / FSL::JOB::JOB_W)+1)
        for n in 1..FSL::JOB::JOB_W
          i += 1
          if FSL::JOB::JOB_MAX[i] != nil && FSL::JOB::JOB_MAX[i][6] != nil
            @command_window.draw_icon(FSL::JOB::JOB_MAX[i][6], x, y)
          else
            @command_window.draw_icon(FSL::JOB::JOB_Default[6], x, y)
          end
          x += (544 / FSL::JOB::JOB_W)
          break if i == ($data_classes.size - 1)
        end
        x = 0
        y += 24
      end
    end
    
  end  
  #--------------------------------------------------------------------------
  # * 终止处理
  #--------------------------------------------------------------------------
  def terminate
    super
    dispose_menu_background
    @class_status_window.dispose
    @command_window.dispose
    @command_window2.dispose
  end
  #--------------------------------------------------------------------------
  # * 切换到下一个角色
  #--------------------------------------------------------------------------
  def next_actor
    @actor_index += 1
    @actor_index %= $game_party.members.size
    $scene = Scene_Job.new(@actor_index, @from_menu)
  end
  #--------------------------------------------------------------------------
  # * 切换到上一个角色
  #--------------------------------------------------------------------------
  def prev_actor
    @actor_index += $game_party.members.size - 1
    @actor_index %= $game_party.members.size
    $scene = Scene_Job.new(@actor_index, @from_menu)
  end
  #--------------------------------------------------------------------------
  # * 更新选择窗口 >> 允许检查输入
  #--------------------------------------------------------------------------
  def update_class_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      @command_window2.active = true
      @command_window.active = false
    elsif Input.trigger?(Input::C)
      Sound.play_decision
        if FSL::JOB::Advanced == true
          if FSL::JOB::Advanced2 == true
            if FSL::JOB::JOB_Advanced[@actor.class_id] != nil && 
                FSL::JOB::JOB_Advanced[@actor.class_id].include?(@command_window.index + 1)
              Sound.play_buzzer
            else
              @actor.class_id = @command_window.index + 1
              $scene = Scene_Job.new(@actor_index, @from_menu)
            end
          else
              @actor.class_id = @com2[@command_window.index]
              $scene = Scene_Job.new(@actor_index, @from_menu)
          end
        else
          @actor.class_id = @command_window.index + 1
          $scene = Scene_Job.new(@actor_index, @from_menu)
        end
    end
  end
  #--------------------------------------------------------------------------
  # * 更新选择窗口 >> 允许检查输出
  #--------------------------------------------------------------------------
  def update_option_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
        if @from_menu == false
          $scene = Scene_Map.new
        else
          $scene = Scene_Menu.new(@Job_menu_index)
        end  
    elsif Input.trigger?(Input::C)
      Sound.play_decision
      case @command_window2.index
      when 0
        Sound.play_decision
        @command_window.active = true
        @command_window2.active = false
      when 1
        Sound.play_decision
        if @from_menu == false
          $scene = Scene_Map.new
        else
          $scene = Scene_Menu.new(@Job_menu_index)
        end        
      end
    end
  end  
  #--------------------------------------------------------------------------
  # * 更新框架
  #--------------------------------------------------------------------------
  def update
    update_menu_background
    if @command_window2.active
      update_option_selection
    else
      update_class_selection
    end
    @command_window.update
    @command_window2.update
    @class_status_window.update
    if Input.trigger?(Input::R)
      Sound.play_cursor
      next_actor
    elsif Input.trigger?(Input::L)
      Sound.play_cursor
      prev_actor
    end
    super
  end
end
#==============================================================================
# ■ Window_ClassStatus
#------------------------------------------------------------------------------
#  角色和职业状态信息的窗口
#==============================================================================
class Window_ClassStatus < Window_Base
  #--------------------------------------------------------------------------
  # * 初始化对象
  #     actor : actor
  #--------------------------------------------------------------------------
  def initialize(actor)
    super(0, 56, 544, 200)
    @actor = actor
    refresh
  end
  #--------------------------------------------------------------------------
  # * 刷新
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    draw_actor_name(@actor, 10, 100)
    draw_actor_class(@actor, 10, 124)
    draw_actor_face(@actor, 0, 0)
    draw_actor_graphic(@actor, 96, 96)
    draw_basic_info(110, 0)
  end
  #--------------------------------------------------------------------------
  # * 制定基本参数
  #     x : 绘出X轴坐标
  #     y : 绘出Y轴坐标
  #--------------------------------------------------------------------------
  def draw_basic_info(x, y)
    draw_actor_level(@actor, x, y + WLH * 0)
    draw_actor_hp(@actor, x, y + WLH * 1)
    draw_actor_mp(@actor, x, y + WLH * 2)
    draw_actor_parameter(@actor, x, y + WLH * 3,0)
    draw_actor_parameter(@actor, x, y + WLH * 4,1)
    draw_actor_parameter(@actor, x, y + WLH * 5,2)
    draw_actor_parameter(@actor, x, y + WLH * 6,3)
    self.contents.font.color = text_color(12)
    for i in 1..6
      self.contents.draw_text(x+200, y, 100, WLH * i*2-1,FSL::JOB::JOB_text[i])
      if FSL::JOB::JOB_MAX[@actor.class_id] != nil
        self.contents.draw_text(x+300, y, 100, WLH * i*2, FSL::JOB::JOB_MAX[@actor.class_id][i-1])
      else
        self.contents.draw_text(x+300, y, 100, WLH * i*2, FSL::JOB::JOB_Default[i-1])
      end
    end
    self.contents.font.color = normal_color
  end
  #--------------------------------------------------------------------------
  # * 经验信息
  #     x : 绘出X轴坐标
  #     y : 绘出Y轴坐标
  #--------------------------------------------------------------------------
  def draw_exp_info(x, y)
    s1 = @actor.exp_s
    s2 = @actor.next_rest_exp_s
    s_next = sprintf(Vocab::ExpNext, Vocab::level)
    self.contents.font.color = system_color
    self.contents.draw_text(x, y + WLH * 0, 180, WLH, Vocab::ExpTotal)
    self.contents.draw_text(x, y + WLH * 2, 180, WLH, s_next)
    self.contents.font.color = normal_color
    self.contents.draw_text(x, y + WLH * 1, 180, WLH, s1, 0)
    self.contents.draw_text(x, y + WLH * 3, 180, WLH, s2, 0)
  end
end
#==============================================================================
# ■ Scene_Menu
#------------------------------------------------------------------------------
#  菜单改造窗口
#==============================================================================
class Scene_Menu < Scene_Base
  if FSL::JOB::JOB_COMMAND
  #--------------------------------------------------------------------------
  # ● 创建命令窗口
  #--------------------------------------------------------------------------
  alias create_command_window_FSL_JOB create_command_window
  def create_command_window
    create_command_window_FSL_JOB
    @command_FSL_JOB_index = @command_window.add_command(FSL::JOB::JOB_MENU_VOCAB)
    if @command_window.oy > 0
      @command_window.oy -= Window_Base::WLH
    end
    @command_window.index = @menu_index  
  end
  end
  #--------------------------------------------------------------------------
  # ● 更新命令选择
  #--------------------------------------------------------------------------
  alias update_command_selection_FSL_JOB update_command_selection
  def update_command_selection
#~     current_menu_index = @command_FSL_JOB_index
    call_FSL_JOB_flag = false
    if Input.trigger?(Input::C)
      case @command_window.index
      when @command_FSL_JOB_index
        call_FSL_JOB_flag = true
      end
    end
    
    if call_FSL_JOB_flag
      Sound.play_decision
      $scene = Scene_Job.new( 0, true, @command_window.index)
      return
    end
    update_command_selection_FSL_JOB
  end
end
#==============================================================================
# ■ Game_Actor
#------------------------------------------------------------------------------
#  处理角色的类。本类在 Game_Actors 类 ($game_actors) 的内部使用、
# Game_Party 类请参考 ($game_party) 。
#==============================================================================
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● 升级
  #--------------------------------------------------------------------------
#~   alias FSL_JOB_level_up level_up
  def level_up
    @level += 1
    if FSL::JOB::JOB_MAX[@class_id] != nil
      @maxhp_plus += FSL::JOB::JOB_MAX[@class_id][0]
      @maxmp_plus += FSL::JOB::JOB_MAX[@class_id][1]
      @atk_plus += FSL::JOB::JOB_MAX[@class_id][2]
      @def_plus += FSL::JOB::JOB_MAX[@class_id][3]
      @spi_plus += FSL::JOB::JOB_MAX[@class_id][4]
      @agi_plus += FSL::JOB::JOB_MAX[@class_id][5]
    else
      @maxhp_plus += FSL::JOB::JOB_Default[0]
      @maxmp_plus += FSL::JOB::JOB_Default[1]
      @atk_plus += FSL::JOB::JOB_Default[2]
      @def_plus += FSL::JOB::JOB_Default[3]
      @spi_plus += FSL::JOB::JOB_Default[4]
      @agi_plus += FSL::JOB::JOB_Default[5]
    end
    for learning in self.class.learnings
      learn_skill(learning.skill_id) if learning.level == @level
    end
  end
end
#==============================================================================
# ■ Window_Command
#------------------------------------------------------------------------------
#  一般的命令选择行窗口。
#==============================================================================
class Window_Command < Window_Selectable
  unless method_defined?(:add_command)
  #--------------------------------------------------------------------------
  # ○ 添加一个命令
  #    返回额外的位置
  #--------------------------------------------------------------------------
  def add_command(command)
    @commands << command
    @item_max = @commands.size
    item_index = @item_max - 1
    refresh_command
    draw_item(item_index)
    return item_index
  end
  #--------------------------------------------------------------------------
  # ○ 刷新命令
  #--------------------------------------------------------------------------
  def refresh_command
    buf = self.contents.clone
    self.height = [self.height, row_max * WLH + 32].max
    create_contents
    self.contents.blt(0, 0, buf, buf.rect)
    buf.dispose
  end
  #--------------------------------------------------------------------------
  # ○ 插入命令
  #--------------------------------------------------------------------------
  def insert_command(index, command)
    @commands.insert(index, command)
    @item_max = @commands.size
    refresh_command
    refresh
  end
  #--------------------------------------------------------------------------
  # ○ 删除命令
  #--------------------------------------------------------------------------
  def remove_command(command)
    @commands.delete(command)
    @item_max = @commands.size
    refresh
  end
  end
end
 | 
 评分
查看全部评分
 |