Project1

标题: 来点脚本越多越好~~~~~~~~~!等你三毛 [打印本页]

作者: 馬路の最中陽    时间: 2008-3-23 18:51
标题: 来点脚本越多越好~~~~~~~~~!等你三毛
{/wx} [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: 火鸡三毛老大    时间: 2008-3-23 18:53
脚本一   物品分类
  1. module RPG
  2.   class Weapon
  3.     def description
  4.       description = @description.split(/@/)[0]
  5.       return description != nil ? description : ''
  6.     end
  7.     def desc
  8.       desc = @description.split(/@/)[1]
  9.       return desc != nil ? desc : "普通物品"
  10.     end
  11.   end
  12.   class Item
  13.     def description
  14.       description = @description.split(/@/)[0]
  15.       return description != nil ? description : ''
  16.     end
  17.     def desc
  18.       desc = @description.split(/@/)[1]
  19.       return desc != nil ? desc : "普通物品"
  20.     end
  21.   end
  22.   class Armor
  23.     def description
  24.       description = @description.split(/@/)[0]
  25.       return description != nil ? description : ''
  26.     end
  27.     def desc
  28.       desc = @description.split(/@/)[1]
  29.       return desc != nil ? desc : "普通物品"
  30.     end
  31.   end
  32. end

  33. class Harts_Window_ItemTitle < Window_Base
  34.   def initialize
  35.     super(0, 0, 160, 64)
  36.     self.contents = Bitmap.new(width - 32, height - 32)
  37.     self.contents.clear
  38.     self.contents.font.color = normal_color
  39.     self.contents.draw_text(4, 0, 120, 32, Vocab::item, 1)
  40.   end
  41. end

  42. class Harts_Window_ItemCommand < Window_Selectable
  43.   attr_accessor :commands
  44.   def initialize
  45.     super(0, 64, 160, 296)
  46.     self.index = 0
  47.     refresh
  48.   end
  49.   
  50. def addcommand
  51.    @commands = []
  52.    for i in 1...$data_items.size
  53.      if $game_party.item_number($data_items[i]) > 0
  54.        push = true
  55.        for com in @commands
  56.          if com == $data_items[i].desc
  57.            push = false
  58.          end
  59.        end
  60.        if push == true
  61.          @commands.push($data_items[i].desc)
  62.        end
  63.      end
  64.    end
  65.    for i in 1...$data_weapons.size
  66.      if $game_party.item_number($data_weapons[i]) > 0
  67.        push = true
  68.        for com in @commands
  69.          if com == $data_weapons[i].desc
  70.            push = false
  71.            end
  72.          end
  73.          if push == true
  74.            @commands.push($data_weapons[i].desc)
  75.          end
  76.        end
  77.      end
  78.      for i in 1...$data_armors.size
  79.        if $game_party.item_number($data_armors[i]) > 0
  80.          push = true
  81.          for com in @commands
  82.            if com == $data_armors[i].desc
  83.              push = false
  84.            end
  85.          end
  86.          if push == true
  87.            @commands.push($data_armors[i].desc)
  88.          end
  89.        end
  90.      end
  91.      if @commands == []
  92.        @commands.push("普通物品")
  93.      end      
  94.      @item_max = @commands.size
  95.   end
  96.   
  97. def refresh
  98.     addcommand
  99.     create_contents
  100.     for i in 0...@item_max
  101.       draw_item(i, normal_color)
  102.     end
  103.   end
  104.   
  105.   def draw_item(index, color)
  106.     y = index * WLH
  107.     self.contents.font.color = color
  108.     if @commands[index] != nil
  109.       self.contents.draw_text(4,y, 172, WLH, @commands[index])
  110.     end
  111.   end

  112.   def update_help
  113.     @help_window.set_text(@commands[self.index])
  114.   end
  115. end

  116. class Harts_Window_ItemList < Window_Selectable
  117.   
  118.   def initialize
  119.     super(160, 0, 384, 360)
  120.     self.index = 0
  121.     refresh
  122.   end
  123.   
  124.   def item
  125.     return @data[self.index]
  126.   end
  127.   
  128.   def refresh
  129.     @data = []
  130.   end
  131.   
  132.   def set_item(command)
  133.     refresh
  134.     for i in 1...$data_items.size
  135.       if $game_party.item_number($data_items[i]) > 0  and $data_items[i].desc == command
  136.         @data.push($data_items[i])
  137.       end
  138.     end
  139.     for i in 1...$data_weapons.size
  140.       if $game_party.item_number($data_weapons[i]) > 0  and $data_weapons[i].desc == command
  141.         @data.push($data_weapons[i])
  142.       end
  143.     end
  144.     for i in 1...$data_armors.size
  145.       if $game_party.item_number($data_armors[i]) > 0  and $data_armors[i].desc == command
  146.         @data.push($data_armors[i])
  147.       end
  148.     end
  149.     @item_max = @data.size
  150.     if @item_max > 0
  151.       self.contents = Bitmap.new(width - 32, row_max * 32)
  152.       self.contents.clear
  153.       for i in 0...@item_max
  154.         draw_item(i)
  155.       end
  156.     end
  157.   end
  158.   
  159.   def item_number
  160.     return @item_max
  161.   end
  162.   
  163.   def draw_item(index)
  164.     rect = item_rect(index)
  165.     self.contents.clear_rect(rect)
  166.     item = @data[index]
  167.     if item != nil
  168.       number = $game_party.item_number(item)
  169.       enabled = $game_party.item_can_use?(item)
  170.       rect.width -= 4
  171.       draw_item_name(item, rect.x, rect.y, enabled)
  172.       self.contents.draw_text(rect, sprintf(":%2d", number), 2)
  173.     end
  174.   end
  175.   
  176.   def update_help
  177.     @help_window.set_text(self.item == nil ? "" : self.item.description)
  178.   end
  179. end
  180. class Harts_Window_Help < Window_Base
  181.   
  182.   def initialize
  183.     super(0, 360, 544, WLH + 32)
  184.   end

  185.   def set_text(text, align = 0)
  186.     if text != @text or align != @align
  187.       self.contents.clear
  188.       self.contents.font.color = normal_color
  189.       self.contents.draw_text(4, 0, self.width - 40, WLH , text, align)
  190.       @text = text
  191.       @align = align
  192.     end
  193.   end
  194. end

  195. class Harts_Window_MenuStatus < Window_Selectable

  196.   def initialize(x, y)
  197.     super(x, y, 288, 416)
  198.     refresh
  199.     self.active = false
  200.     self.index = -1
  201.   end

  202.   def refresh
  203.     self.contents.clear
  204.     @item_max = $game_party.members.size
  205.     for actor in $game_party.members
  206.       x = 8
  207.       y = actor.index * 96 + WLH / 2
  208.       draw_actor_name(actor, x, y)
  209.       draw_actor_class(actor, x + 120, y)
  210.       draw_actor_level(actor, x, y + WLH * 1)
  211.       draw_actor_state(actor, x, y + WLH * 2)
  212.       draw_actor_hp(actor, x + 120, y + WLH * 1)
  213.       draw_actor_mp(actor, x + 120, y + WLH * 2)
  214.     end
  215.   end

  216.   def update_cursor
  217.     if @index < 0               
  218.       self.cursor_rect.empty
  219.     elsif @index < @item_max  
  220.       self.cursor_rect.set(0, @index * 96, contents.width, 96)
  221.     elsif @index >= 100        
  222.       self.cursor_rect.set(0, (@index - 100) * 96, contents.width, 96)
  223.     else                       
  224.       self.cursor_rect.set(0, 0, contents.width, @item_max * 96)
  225.     end
  226.   end
  227. end

  228. class Scene_Item < Scene_Base
  229.   def start
  230.     super
  231.     create_menu_background
  232.     @viewport = Viewport.new(0, 0, 544, 416)
  233.     @itemtitle_window = Harts_Window_ItemTitle.new
  234.     @itemcommand_window = Harts_Window_ItemCommand.new
  235.     @command_index = @itemcommand_window.index
  236.     @itemcommand_window.refresh
  237.     @itemlist_window = Harts_Window_ItemList.new
  238.     @itemlist_window.active = false
  239.     @help_window = Harts_Window_Help.new
  240.     @help_window.viewport = @viewport
  241.     @target_window = Harts_Window_MenuStatus.new(96, 0)
  242.     @itemcommand_window.help_window = @help_window
  243.     @itemlist_window.help_window = @help_window
  244.     @itemlist_window.set_item(@itemcommand_window.commands[@command_index])
  245.     hide_target_window
  246.   end

  247.   def terminate
  248.     super
  249.     dispose_menu_background
  250.     @viewport.dispose
  251.     @itemtitle_window.dispose
  252.     @itemcommand_window.dispose
  253.     @itemlist_window.dispose
  254.     @help_window.dispose
  255.     @target_window.dispose
  256.   end

  257.   def return_scene
  258.     $scene = Scene_Menu.new(0)
  259.   end

  260.   def update
  261.     super
  262.     update_menu_background
  263.     @help_window.update
  264.     @itemlist_window.update
  265.     @itemcommand_window.update
  266.     @target_window.update
  267.     @itemcommand_window.refresh
  268.     if @command_index != @itemcommand_window.index
  269.       @itemlist_window.index = 0
  270.       @command_index = @itemcommand_window.index
  271.       @itemcommand_window.update_help
  272.       @itemlist_window.set_item(@itemcommand_window.commands[@command_index])
  273.     end
  274.     if @itemcommand_window.active
  275.       @itemcommand_window.update_help
  276.       update_itemcommand
  277.     elsif @itemlist_window.active
  278.       update_itemlist
  279.     elsif @target_window.active
  280.       update_target_selection
  281.     end
  282.   end

  283.   def update_itemcommand
  284.     if Input.trigger?(Input::B)
  285.       Sound.play_cancel
  286.       return_scene
  287.       return
  288.     end
  289.     if Input.trigger?(Input::C)
  290.       if @itemlist_window.item_number == 0
  291.         Sound.play_buzzer
  292.         return
  293.       end
  294.       Sound.play_decision
  295.       @itemcommand_window.active = false
  296.       @itemlist_window.index = 0
  297.       @itemlist_window.active = true
  298.       return
  299.     end
  300.   end

  301.   def update_itemlist
  302.     if Input.trigger?(Input::B)
  303.       Sound.play_cancel
  304.       @itemcommand_window.active = true
  305.       @itemlist_window.active = false
  306.       @itemcommand_window.index = @command_index
  307.     elsif Input.trigger?(Input::C)
  308.       @item = @itemlist_window.item
  309.       if @item != nil
  310.         $game_party.last_item_id = @item.id
  311.       end
  312.       if $game_party.item_can_use?(@item)
  313.         Sound.play_decision
  314.         determine_item
  315.       else
  316.         Sound.play_buzzer
  317.       end
  318.     end
  319.   end

  320.   def determine_item
  321.     if @item.for_friend?
  322.       show_target_window(@itemlist_window.index % 2 == 0)
  323.       if @item.for_all?
  324.         @target_window.index = 99
  325.       else
  326.         if $game_party.last_target_index < @target_window.item_max
  327.           @target_window.index = $game_party.last_target_index
  328.         else
  329.           @target_window.index = 0
  330.         end
  331.       end
  332.     else
  333.       use_item_nontarget
  334.     end
  335.   end

  336.   def update_target_selection
  337.     if Input.trigger?(Input::B)
  338.       Sound.play_cancel
  339.       if $game_party.item_number(@item) == 0
  340.         @itemlist_window.refresh                 
  341.       end
  342.       @itemlist_window.active = true
  343.       @itemlist_window.set_item(@itemcommand_window.commands[@command_index])
  344.       hide_target_window
  345.       @itemlist_window.active = true
  346.     elsif Input.trigger?(Input::C)
  347.       if not $game_party.item_can_use?(@item)
  348.         Sound.play_buzzer
  349.       else
  350.         determine_target
  351.       end
  352.     end
  353.   end

  354.   def determine_target
  355.     used = false
  356.     if @item.for_all?
  357.       for target in $game_party.members
  358.         target.item_effect(target, @item)
  359.         used = true unless target.skipped
  360.       end
  361.     else
  362.       $game_party.last_target_index = @target_window.index
  363.       target = $game_party.members[@target_window.index]
  364.       target.item_effect(target, @item)
  365.       used = true unless target.skipped
  366.     end
  367.     if used
  368.       use_item_nontarget
  369.     else
  370.       Sound.play_buzzer
  371.     end
  372.   end

  373.   def show_target_window(right)
  374.     @itemlist_window.active = false
  375.     width_remain = 544 - @target_window.width
  376.     @target_window.x = right ? width_remain : 0
  377.     @target_window.visible = true
  378.     @target_window.active = true
  379.     if right
  380.       @viewport.rect.set(0, 0, width_remain, 416)
  381.       @viewport.ox = 0
  382.     else
  383.       @viewport.rect.set(@target_window.width, 0, width_remain, 416)
  384.       @viewport.ox = @target_window.width
  385.     end
  386.   end

  387.   def hide_target_window
  388.     @target_window.visible = false
  389.     @target_window.active = false
  390.     @itemlist_window.set_item(@itemcommand_window.commands[@command_index])
  391.     @viewport.rect.set(0, 0, 544, 416)
  392.     @viewport.ox = 0
  393.   end

  394.   def use_item_nontarget
  395.     Sound.play_use_item
  396.     $game_party.consume_item(@item)
  397.     @itemlist_window.draw_item(@itemlist_window.index)
  398.     @itemlist_window.set_item(@itemcommand_window.commands[@command_index])
  399.     @target_window.refresh
  400.     if $game_party.all_dead?
  401.       $scene = Scene_Gameover.new
  402.     elsif @item.common_event_id > 0
  403.       $game_temp.common_event_id = @item.common_event_id
  404.       $scene = Scene_Map.new
  405.     end
  406.   end
  407. end
复制代码
[LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: 火鸡三毛老大    时间: 2008-3-23 18:53
脚本2   技能分类
  1. module RPG
  2. class Skill
  3.    def description
  4.      description = @description.split(/@/)[0]
  5.      return description != nil ? description : ''
  6.    end
  7.    def desc
  8.      desc = @description.split(/@/)[1]
  9.      return desc != nil ? desc : "普通技能"
  10.    end
  11. end
  12. end

  13. class Liuliu_Window_SkillCommand < Window_Selectable
  14. attr_accessor :commands
  15.   def initialize(actor)
  16.     super(0, 0, 160, 216)
  17.     if $game_temp.in_battle
  18.       @actor = actor
  19.     else
  20.       @actor = $game_party.members[actor]
  21.     end
  22.     refresh
  23.     self.index = 0
  24.   end
  25. def addcommand
  26.   @commands = []
  27.   for skill in @actor.skills
  28.     push = true
  29.     for com in @commands
  30.       if com == skill.desc
  31.         push = false
  32.       end
  33.     end
  34.     if push == true
  35.       @commands.push(skill.desc)
  36.     end
  37.   end
  38.   if @commands == []
  39.     @commands.push("普通技能")
  40.   end      
  41.   @item_max = @commands.size
  42. end

  43.   
  44. def refresh
  45.    addcommand
  46.    create_contents
  47.    for i in 0...@item_max
  48.      draw_item(i, normal_color)
  49.    end
  50. end

  51. def draw_item(index, color)
  52.    self.contents.font.color = color
  53.    y = index * WLH
  54.    self.contents.draw_text(4, y, 128, WLH, @commands[index])
  55. end

  56. def update_help
  57.    @help_window.set_text(@commands[self.index])
  58. end
  59. end


  60. class Liuliu_Window_SkillList < Window_Selectable

  61.   def initialize(actor)
  62.    super(160, 0, 384, 360)
  63.    @actor = actor
  64.    refresh
  65.    self.index = 0
  66.    if $game_temp.in_battle
  67.      self.y = 56
  68.      self.height = 232
  69.      self.back_opacity = 200
  70.    end
  71. end

  72. def skill
  73.    return @data[self.index]
  74. end

  75. def refresh
  76.    @data = []
  77. end

  78. def set_item(command)
  79.    refresh
  80.    for skill in @actor.skills
  81.      if skill != nil and skill.desc == command
  82.        @data.push(skill)
  83.      end
  84.    end
  85.    @item_max = @data.size
  86.    if @item_max > 0
  87.      self.contents = Bitmap.new(width - 32, row_max * 32)
  88.      self.contents.clear
  89.      for i in 0...@item_max
  90.        draw_item(i)
  91.      end
  92.    end
  93. end

  94.   def draw_item(index)
  95.     rect = item_rect(index)
  96.     self.contents.clear_rect(rect)
  97.     skill = @data[index]
  98.     if skill != nil
  99.       rect.width -= 4
  100.       enabled = @actor.skill_can_use?(skill)
  101.       draw_item_name(skill, rect.x, rect.y, enabled)
  102.       self.contents.draw_text(rect, @actor.calc_mp_cost(skill), 2)
  103.     end
  104.   end
  105.   
  106. def update_help
  107.    @help_window.set_text(self.skill == nil ? "" : self.skill.description)
  108. end
  109. end
  110. class Temp_Window_SkillStatus < Window_Base

  111. def initialize(actor)
  112.    super(0, 216, 160, 144)
  113.    self.contents = Bitmap.new(width - 32, height - 32)
  114.    @actor = actor
  115.    refresh
  116. end

  117. def refresh
  118.    self.contents.clear
  119.    draw_actor_name(@actor, 4, 0)
  120.    draw_actor_hp(@actor, 4, 32, 120)
  121.    draw_actor_mp(@actor, 4, 64, 120)
  122. end
  123. end

  124. class Temp_Window_Help < Window_Base
  125.   
  126.   def initialize
  127.     super(0, 360, 544, WLH + 32)
  128.   end

  129.   def set_text(text, align = 0)
  130.     if text != @text or align != @align
  131.       self.contents.clear
  132.       self.contents.font.color = normal_color
  133.       self.contents.draw_text(4, 0, self.width - 40, WLH , text, align)
  134.       @text = text
  135.       @align = align
  136.     end
  137.   end
  138. end

  139. class Temp_Window_MenuStatus < Window_Selectable

  140.   def initialize(x, y)
  141.     super(x, y, 288, 416)
  142.     refresh
  143.     self.active = false
  144.     self.index = -1
  145.   end

  146.   def refresh
  147.     self.contents.clear
  148.     @item_max = $game_party.members.size
  149.     for actor in $game_party.members
  150.       x = 8
  151.       y = actor.index * 96 + WLH / 2
  152.       draw_actor_name(actor, x, y)
  153.       draw_actor_class(actor, x + 120, y)
  154.       draw_actor_level(actor, x, y + WLH * 1)
  155.       draw_actor_state(actor, x, y + WLH * 2)
  156.       draw_actor_hp(actor, x + 120, y + WLH * 1)
  157.       draw_actor_mp(actor, x + 120, y + WLH * 2)
  158.     end
  159.   end

  160.   def update_cursor
  161.     if @index < 0               
  162.       self.cursor_rect.empty
  163.     elsif @index < @item_max  
  164.       self.cursor_rect.set(0, @index * 96, contents.width, 96)
  165.     elsif @index >= 100        
  166.       self.cursor_rect.set(0, (@index - 100) * 96, contents.width, 96)
  167.     else                       
  168.       self.cursor_rect.set(0, 0, contents.width, @item_max * 96)
  169.     end
  170.   end
  171. end

  172. class Scene_Skill < Scene_Base

  173.   def initialize(actor_index = 0, equip_index = 0)
  174.     @actor_index = actor_index
  175.   end

  176.   def start
  177.     super
  178.     create_menu_background
  179.     @actor = $game_party.members[@actor_index]
  180.     @viewport = Viewport.new(0, 0, 544, 416)
  181.     @help_window = Temp_Window_Help.new
  182.     @status_window = Temp_Window_SkillStatus.new(@actor)
  183.     @itemcommand_window = Liuliu_Window_SkillCommand.new(@actor_index)
  184.     @command_index = @itemcommand_window.index
  185.     @skill_window = Liuliu_Window_SkillList.new($game_party.members[@actor_index])
  186.     @skill_window.help_window = @help_window
  187.     @skill_window.set_item(@itemcommand_window.commands[@command_index])
  188.     @target_window = Temp_Window_MenuStatus.new(96, 0)
  189.     @skill_window.active = false
  190.     hide_target_window
  191.   end

  192.   def terminate
  193.     super
  194.     dispose_menu_background
  195.     @help_window.dispose
  196.     @itemcommand_window.dispose
  197.     @status_window.dispose
  198.     @skill_window.dispose
  199.     @target_window.dispose
  200.   end

  201.   def return_scene
  202.     $scene = Scene_Menu.new(1)
  203.   end

  204.   def next_actor
  205.     @actor_index += 1
  206.     @actor_index %= $game_party.members.size
  207.     $scene = Scene_Skill.new(@actor_index)
  208.     @skill_window.active = false
  209.   end

  210.   def prev_actor
  211.     @actor_index += $game_party.members.size - 1
  212.     @actor_index %= $game_party.members.size
  213.     $scene = Scene_Skill.new(@actor_index)
  214.     @skill_window.active = false
  215.   end

  216.   def update
  217.     super
  218.     update_menu_background
  219.     @itemcommand_window.update
  220.     @help_window.update
  221.     @status_window.update
  222.     @skill_window.update
  223.     @target_window.update
  224.    if @command_index != @itemcommand_window.index
  225.      @command_index = @itemcommand_window.index
  226.      @skill_window.index = 0
  227.      @skill_window.set_item(@itemcommand_window.commands[@command_index])
  228.    end
  229.    if @itemcommand_window.active
  230.      update_itemcommand
  231.    elsif @skill_window.active
  232.      update_itemlist
  233.    elsif @target_window.active
  234.      update_target
  235.    end
  236.   end

  237. def update_itemcommand
  238.    if Input.trigger?(Input::B)
  239.      Sound.play_cancel
  240.      return_scene
  241.    elsif Input.trigger?(Input::C)
  242.      Sound.play_decision
  243.      @itemcommand_window.active = false
  244.      @skill_window.active = true
  245.      @skill_window.index = 0
  246.    elsif Input.trigger?(Input::R)
  247.       Sound.play_cursor
  248.       next_actor
  249.    elsif Input.trigger?(Input::L)
  250.       Sound.play_cursor
  251.       prev_actor
  252.    end
  253. end

  254.   def update_itemlist
  255.     if Input.trigger?(Input::B)
  256.       Sound.play_cancel
  257.       @itemcommand_window.active = true
  258.       @skill_window.active = false
  259.       @skill_window.index = 0
  260.     elsif Input.trigger?(Input::C)
  261.       @skill = @skill_window.skill
  262.       if @skill != nil
  263.         @actor.last_skill_id = @skill.id
  264.       end
  265.       if @actor.skill_can_use?(@skill)
  266.         Sound.play_decision
  267.         determine_skill
  268.       else
  269.         Sound.play_buzzer
  270.       end
  271.     end
  272.   end

  273.   def determine_skill
  274.     if @skill.for_friend?
  275.       show_target_window(@skill_window.index % 2 == 0)
  276.       if @skill.for_all?
  277.         @target_window.index = 99
  278.       elsif @skill.for_user?
  279.         @target_window.index = @actor_index + 100
  280.       else
  281.         if $game_party.last_target_index < @target_window.item_max
  282.           @target_window.index = $game_party.last_target_index
  283.         else
  284.           @target_window.index = 0
  285.         end
  286.       end
  287.     else
  288.       use_skill_nontarget
  289.     end
  290.   end

  291.   def update_target
  292.     if Input.trigger?(Input::B)
  293.       Sound.play_cancel
  294.       hide_target_window
  295.       @skill_window.active = true
  296.     elsif Input.trigger?(Input::C)
  297.       if not @actor.skill_can_use?(@skill)
  298.         Sound.play_buzzer
  299.       else
  300.         determine_target
  301.       end
  302.     end
  303.   end

  304.   def determine_target
  305.     used = false
  306.     if @skill.for_all?
  307.       for target in $game_party.members
  308.         target.skill_effect(@actor, @skill)
  309.         used = true unless target.skipped
  310.       end
  311.     elsif @skill.for_user?
  312.       target = $game_party.members[@target_window.index - 100]
  313.       target.skill_effect(@actor, @skill)
  314.       used = true unless target.skipped
  315.     else
  316.       $game_party.last_target_index = @target_window.index
  317.       target = $game_party.members[@target_window.index]
  318.       target.skill_effect(@actor, @skill)
  319.       used = true unless target.skipped
  320.     end
  321.     if used
  322.       use_skill_nontarget
  323.     else
  324.       Sound.play_buzzer
  325.     end
  326.   end

  327.   def show_target_window(right)
  328.     @skill_window.active = false
  329.     width_remain = 544 - @target_window.width
  330.     @target_window.x = right ? width_remain : 0
  331.     @target_window.visible = true
  332.     @target_window.active = true
  333.     if right
  334.       @viewport.rect.set(0, 0, width_remain, 416)
  335.       @viewport.ox = 0
  336.     else
  337.       @viewport.rect.set(@target_window.width, 0, width_remain, 416)
  338.       @viewport.ox = @target_window.width
  339.     end
  340.   end

  341.   def hide_target_window
  342.     @skill_window.refresh
  343.     @target_window.visible = false
  344.     @target_window.active = false
  345.     @skill_window.set_item(@itemcommand_window.commands[@command_index])
  346.     @viewport.rect.set(0, 0, 544, 416)
  347.     @viewport.ox = 0
  348.   end

  349.   def use_skill_nontarget
  350.     Sound.play_use_skill
  351.     @actor.mp -= @actor.calc_mp_cost(@skill)
  352.     @status_window.refresh
  353.     @skill_window.refresh
  354.     @target_window.refresh
  355.     if $game_party.all_dead?
  356.       $scene = Scene_Gameover.new
  357.     elsif @skill.common_event_id > 0
  358.       $game_temp.common_event_id = @skill.common_event_id
  359.       $scene = Scene_Map.new
  360.     end
  361.   end
  362. end
  363. class Scene_Battle < Scene_Base
  364.   def start_skill_selection
  365.     @help_window = Window_Help.new
  366.     @skill_window = Liuliu_Window_SkillList.new(@active_battler)
  367.     @skill_window.help_window = @help_window
  368.     @itemcommand_window = Liuliu_Window_SkillCommand.new(@active_battler)
  369.     @itemcommand_window.y = 56
  370.     @itemcommand_window.height = 232
  371.     @itemcommand_window.active = true
  372.     @itemcommand_window.back_opacity = 200
  373.     @itemcommand_window.help_window = @help_window
  374.     @command_index = @itemcommand_window.index
  375.     @skill_window.set_item(@itemcommand_window.commands[@command_index])
  376.     @actor_command_window.active = false
  377.     @skill_window.active = false
  378.   end

  379.   def end_skill_selection
  380.     if @skill_window != nil
  381.       @skill_window.dispose
  382.       @skill_window = nil
  383.       @help_window.dispose
  384.       @help_window = nil
  385.       @itemcommand_window.dispose
  386.       @itemcommand_window = nil
  387.     end
  388.     @actor_command_window.active = true
  389.   end

  390.   def update_skill_selection
  391.     @skill_window.visible = true
  392.     @itemcommand_window.visible = true
  393.     @itemcommand_window.update
  394.     if @command_index != @itemcommand_window.index
  395.       @command_index = @itemcommand_window.index
  396.       @skill_window.set_item(@itemcommand_window.commands[@command_index])
  397.       @skill_window.index = 0
  398.     end
  399.     @skill_window.update
  400.     @help_window.update
  401.     if Input.trigger?(Input::B)
  402.       Sound.play_cancel
  403.       if @skill_window.active == true then
  404.         @itemcommand_window.active = true
  405.         @skill_window.active = false
  406.       else
  407.         end_skill_selection
  408.       end
  409.     elsif Input.trigger?(Input::C)
  410.       if @skill_window.active == false
  411.         @skill_window.active = true
  412.         @itemcommand_window.active = false
  413.         Sound.play_decision
  414.         return
  415.       end
  416.       @skill = @skill_window.skill
  417.       if @skill != nil
  418.         @active_battler.last_skill_id = @skill.id
  419.       end
  420.       if @active_battler.skill_can_use?(@skill)
  421.         Sound.play_decision
  422.         determine_skill
  423.       else
  424.         Sound.play_buzzer
  425.       end
  426.     end
  427.   end

  428.   def determine_skill
  429.     @active_battler.action.set_skill(@skill.id)
  430.     @skill_window.active = false
  431.     if @skill.need_selection?
  432.       if @skill.for_opponent?
  433.         start_target_enemy_selection
  434.       else
  435.         start_target_actor_selection
  436.       end
  437.     else
  438.       end_skill_selection
  439.       next_actor
  440.     end
  441.   end
  442. end
复制代码

作者: 火鸡三毛老大    时间: 2008-3-23 18:53
脚本3   加强对话框
  1. #==============================================================================
  2. #superufo版加强对话框
  3. #新增功能:
  4. #1.\h[X]:更改字号为X(X〈32)
  5. #2.\o[X]:更改透明度为X(模拟悄悄话?)
  6. #3.\u[XXXXXX]:直接以十六进制指定颜色
  7. #4.\i[X]:显示X号物品名
  8. #5.\s[X]:显示X号技能名
  9. #6.\w[X]:显示X号武器名
  10. #7.\a[X]:显示X号防具名
  11. #原有功能:
  12. #8.\c[X]:将颜色调整为X(0〈=X〈=15)
  13. #9.\n[X]:显示X号同伴名
  14. #10.\v[X]:显示X号变量
  15. #11.\g:显示金钱窗口
  16. #12.\.:停滞1/4秒
  17. #13.\|:停滞1秒
  18. #14.\!:等待输入???
  19. #15.\>:开启瞬间输入
  20. #16.\<:关闭瞬间输入
  21. #17.\^:等待输入的无???
  22. #18.\\:显示“\”这个符号
  23. #==============================================================================
  24. class Window_Message < Window_Selectable

  25.   MAX_LINE = 4                           

  26.   def initialize
  27.     super(0, 288, 544, 128)
  28.     self.z = 200
  29.     self.active = false
  30.     self.index = -1
  31.     self.openness = 0
  32.     @opening = false           
  33.     @closing = false           
  34.     @text = nil                 
  35.     @contents_x = 0           
  36.     @contents_y = 0         
  37.     @line_count = 0           
  38.     @wait_count = 0            
  39.     @background = 0            
  40.     @position = 2            
  41.     @show_fast = false        
  42.     @line_show_fast = false     
  43.     @pause_skip = false      
  44.     create_gold_window
  45.     create_number_input_window
  46.     create_back_sprite
  47.   end

  48.   def dispose
  49.     super
  50.     dispose_gold_window
  51.     dispose_number_input_window
  52.     dispose_back_sprite
  53.   end

  54.   def update
  55.     super
  56.     update_gold_window
  57.     update_number_input_window
  58.     update_back_sprite
  59.     update_show_fast
  60.     unless @opening or @closing        
  61.       if @wait_count > 0                  
  62.         @wait_count -= 1
  63.       elsif self.pause                     
  64.         input_pause
  65.       elsif self.active                    
  66.         input_choice
  67.       elsif @number_input_window.visible   
  68.         input_number
  69.       elsif @text != nil                  
  70.         update_message                     
  71.       elsif continue?                     
  72.         start_message                        
  73.         open                                
  74.         $game_message.visible = true
  75.       else                              
  76.         close                              
  77.         $game_message.visible = @closing
  78.       end
  79.     end
  80.   end

  81.   def create_gold_window
  82.     @gold_window = Window_Gold.new(384, 0)
  83.     @gold_window.openness = 0
  84.   end

  85.   def create_number_input_window
  86.     @number_input_window = Window_NumberInput.new
  87.     @number_input_window.visible = false
  88.   end

  89.   def create_back_sprite
  90.     @back_sprite = Sprite.new
  91.     @back_sprite.bitmap = Cache.system("MessageBack")
  92.     @back_sprite.visible = (@background == 1)
  93.     @back_sprite.z = 190
  94.   end

  95.   def dispose_gold_window
  96.     @gold_window.dispose
  97.   end

  98.   def dispose_number_input_window
  99.     @number_input_window.dispose
  100.   end

  101.   def dispose_back_sprite
  102.     @back_sprite.dispose
  103.   end

  104.   def update_gold_window
  105.     @gold_window.update
  106.   end

  107.   def update_number_input_window
  108.     @number_input_window.update
  109.   end

  110.   def update_back_sprite
  111.     @back_sprite.visible = (@background == 1)
  112.     @back_sprite.y = y - 16
  113.     @back_sprite.opacity = openness
  114.     @back_sprite.update
  115.   end

  116.   def update_show_fast
  117.     if self.pause or self.openness < 255
  118.       @show_fast = false
  119.     elsif Input.trigger?(Input::C) and @wait_count < 2
  120.       @show_fast = true
  121.     elsif not Input.press?(Input::C)
  122.       @show_fast = false
  123.     end
  124.     if @show_fast and @wait_count > 0
  125.       @wait_count -= 1
  126.     end
  127.   end

  128.   def continue?
  129.     return true if $game_message.num_input_variable_id > 0
  130.     return false if $game_message.texts.empty?
  131.     if self.openness > 0 and not $game_temp.in_battle
  132.       return false if @background != $game_message.background
  133.       return false if @position != $game_message.position
  134.     end
  135.     return true
  136.   end

  137.   def start_message
  138.     @text = ""
  139.     for i in 0...$game_message.texts.size
  140.       @text += "  " if i >= $game_message.choice_start
  141.       @text += $game_message.texts[i].clone + "\x00"
  142.     end
  143.     @item_max = $game_message.choice_max
  144.     convert_special_characters
  145.     reset_window
  146.     new_page
  147.   end

  148.   def new_page
  149.     contents.clear
  150.     if $game_message.face_name.empty?
  151.       @contents_x = 0
  152.     else
  153.       name = $game_message.face_name
  154.       index = $game_message.face_index
  155.       draw_face(name, index, 0, 0)
  156.       @contents_x = 112
  157.     end
  158.     @contents_y = 0
  159.     @line_count = 0
  160.     @show_fast = false
  161.     @line_show_fast = false
  162.     @pause_skip = false
  163.     contents.font.color = text_color(0)
  164.   end

  165.   def new_line
  166.     if $game_message.face_name.empty?
  167.       @contents_x = 0
  168.     else
  169.       @contents_x = 112
  170.     end
  171.     @contents_y += WLH
  172.     @line_count += 1
  173.     @line_show_fast = false
  174.   end

  175.   def convert_special_characters
  176.     @text.gsub!(/\\V\[([0-9]+)\]/i) { $game_variables[$1.to_i] }
  177.     @text.gsub!(/\\V\[([0-9]+)\]/i) { $game_variables[$1.to_i] }
  178.     @text.gsub!(/\\N\[([0-9]+)\]/i) { $game_actors[$1.to_i].name }
  179.     @text.gsub!(/\\I\[([0-9]+)\]/i) { $data_items[$1.to_i].name }
  180.     @text.gsub!(/\\S\[([0-9]+)\]/i) { $data_skills[$1.to_i].name }
  181.     @text.gsub!(/\\W\[([0-9]+)\]/i) { $data_weapons[$1.to_i].name }
  182.     @text.gsub!(/\\A\[([0-9]+)\]/i) { $data_armors[$1.to_i].name }
  183.     @text.gsub!(/\\C\[([0-9]+)\]/i) { "\x01[#{$1}]" }
  184.     @text.gsub!(/\\G/)              { "\x02" }
  185.     @text.gsub!(/\\\./)             { "\x03" }
  186.     @text.gsub!(/\\\|/)             { "\x04" }
  187.     @text.gsub!(/\\!/)              { "\x05" }
  188.     @text.gsub!(/\\>/)              { "\x06" }
  189.     @text.gsub!(/\\</)              { "\x07" }
  190.     @text.gsub!(/\\\^/)             { "\x08" }
  191.     @text.gsub!(/\\O\[([0-9]+)\]/i) { "\x09[#{$1}]" }
  192.     @text.gsub!(/\\H\[([0-9]+)\]/i) { "\x10[#{$1}]" }
  193.     @text.gsub!(/\\U\[([0-9A-Fa-f]{6})\]/) { "\x11[#{$1}]" }
  194.     @text.gsub!(/\\\\/)             { "\\" }
  195.   end

  196.   def reset_window
  197.     @background = $game_message.background
  198.     @position = $game_message.position
  199.     if @background == 0   
  200.       self.opacity = 255
  201.     else                 
  202.       self.opacity = 0
  203.     end
  204.     case @position
  205.     when 0
  206.       self.y = 0
  207.       @gold_window.y = 360
  208.     when 1  
  209.       self.y = 144
  210.       @gold_window.y = 0
  211.     when 2  
  212.       self.y = 288
  213.       @gold_window.y = 0
  214.     end
  215.   end

  216.   def terminate_message
  217.     self.active = false
  218.     self.pause = false
  219.     self.index = -1
  220.     @gold_window.close
  221.     @number_input_window.active = false
  222.     @number_input_window.visible = false
  223.     $game_message.main_proc.call if $game_message.main_proc != nil
  224.     $game_message.clear
  225.   end

  226.   def update_message
  227.     loop do
  228.       c = @text.slice!(/./m)         
  229.       case c
  230.       when nil                        
  231.         finish_message                  
  232.         break
  233.       when "\x00"                       
  234.         new_line
  235.         if @line_count >= MAX_LINE     
  236.           unless @text.empty?         
  237.             self.pause = true           
  238.             break
  239.           end
  240.         end
  241.       when "\x01"                     
  242.         @text.sub!(/\[([0-9]+)\]/, "")
  243.         contents.font.color = text_color($1.to_i)
  244.         next
  245.       when "\x02"                     
  246.         @gold_window.refresh
  247.         @gold_window.open
  248.       when "\x03"                       
  249.         @wait_count = 15
  250.         break
  251.       when "\x04"                    
  252.         @wait_count = 60
  253.         break
  254.       when "\x05"                     
  255.         self.pause = true
  256.         break
  257.       when "\x06"                     
  258.         @line_show_fast = true
  259.       when "\x07"                     
  260.         @line_show_fast = false
  261.       when "\x08"                     
  262.         @pause_skip = true
  263.       when "\x09"
  264.         @text.sub!(/\[([0-9]+)\]/, "")
  265.         self.contents.font.color.alpha = [[0, $1.to_i].max, 255].min
  266.         next
  267.       when "\x10"
  268.         @text.sub!(/\[([0-9]+)\]/, "")
  269.         self.contents.font.size = [[$1.to_i, 6].max, 32].min
  270.         next
  271.       when "\x11"
  272.         @text.sub!(/\[([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})\]/, "")
  273.         self.contents.font.color = Color.new($1.to_i(16), $2.to_i(16), $3.to_i(16), 255)
  274.         next
  275.       else                             
  276.         contents.draw_text(@contents_x, @contents_y, 40, 32, c)
  277.         c_width = contents.text_size(c).width
  278.         @contents_x += c_width
  279.       end
  280.       break unless @show_fast or @line_show_fast
  281.     end
  282.   end

  283.   def finish_message
  284.     if $game_message.choice_max > 0
  285.       start_choice
  286.     elsif $game_message.num_input_variable_id > 0
  287.       start_number_input
  288.     elsif @pause_skip
  289.       terminate_message
  290.     else
  291.       self.pause = true
  292.     end
  293.     @wait_count = 10
  294.     @text = nil
  295.   end

  296.   def start_choice
  297.     self.active = true
  298.     self.index = 0
  299.   end

  300.   def start_number_input
  301.     digits_max = $game_message.num_input_digits_max
  302.     number = $game_variables[$game_message.num_input_variable_id]
  303.     @number_input_window.digits_max = digits_max
  304.     @number_input_window.number = number
  305.     if $game_message.face_name.empty?
  306.       @number_input_window.x = x
  307.     else
  308.       @number_input_window.x = x + 112
  309.     end
  310.     @number_input_window.y = y + @contents_y
  311.     @number_input_window.active = true
  312.     @number_input_window.visible = true
  313.     @number_input_window.update
  314.   end

  315.   def update_cursor
  316.     if @index >= 0
  317.       x = $game_message.face_name.empty? ? 0 : 112
  318.       y = ($game_message.choice_start + @index) * WLH
  319.       self.cursor_rect.set(x, y, contents.width - x, WLH)
  320.     else
  321.       self.cursor_rect.empty
  322.     end
  323.   end

  324.   def input_pause
  325.     if Input.trigger?(Input::B) or Input.trigger?(Input::C)
  326.       self.pause = false
  327.       if @text != nil and not @text.empty?
  328.         new_page if @line_count >= MAX_LINE
  329.       else
  330.         terminate_message
  331.       end
  332.     end
  333.   end

  334.   def input_choice
  335.     if Input.trigger?(Input::B)
  336.       if $game_message.choice_cancel_type > 0
  337.         Sound.play_cancel
  338.         $game_message.choice_proc.call($game_message.choice_cancel_type - 1)
  339.         terminate_message
  340.       end
  341.     elsif Input.trigger?(Input::C)
  342.       Sound.play_decision
  343.       $game_message.choice_proc.call(self.index)
  344.       terminate_message
  345.     end
  346.   end

  347.   def input_number
  348.     if Input.trigger?(Input::C)
  349.       Sound.play_decision
  350.       $game_variables[$game_message.num_input_variable_id] =
  351.         @number_input_window.number
  352.       $game_map.need_refresh = true
  353.       terminate_message
  354.     end
  355.   end
  356. end
复制代码

作者: 火鸡三毛老大    时间: 2008-3-23 18:54
脚本4    美化战斗选项
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================
  4. # ■ Window_ActorCommand
  5. #------------------------------------------------------------------------------
  6. #  战斗画面显示角色指令的窗口。
  7. #==============================================================================

  8. class Window_ActorCommand < Window_Selectable
  9.   #--------------------------------------------------------------------------
  10.   # ● 定义实例变量
  11.   #--------------------------------------------------------------------------  
  12.   attr_reader   :commands                 # 命令  
  13.   #--------------------------------------------------------------------------
  14.   # ● 初始化对象
  15.   #     width      : 窗口的宽
  16.   #     commands   : 命令字符串序列
  17.   #     column_max : 行数 (2 行以上时选择)
  18.   #     row_max    : 列数 (0:列数加起来)
  19.   #     spacing : 选项横向排列时间隔空白宽度
  20.   #--------------------------------------------------------------------------
  21.   def initialize(width = 128, commands = [], column_max = 1, row_max = 4, spacing = 32)
  22.     if row_max == 0
  23.       row_max = (commands.size + column_max - 1) / column_max
  24.     end
  25.     super(0, 0, width, row_max * WLH + 32, spacing)
  26.     self.active = false
  27.     @commands = []
  28.     @icon_list = [1, 52, 128, 144]
  29.     @item_max = commands.size
  30.     @column_max = column_max
  31.     @remember_index = -1
  32.     self.index = 0
  33.     # refresh
  34.     update
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   # ● 刷新
  38.   #--------------------------------------------------------------------------
  39.   def refresh
  40.     self.contents.clear
  41.     for i in 0...@item_max
  42.       draw_item(i)
  43.     end
  44.   end
  45.   #--------------------------------------------------------------------------
  46.   # ● 设置自定义特技指令名称
  47.   #     actor :角色
  48.   #--------------------------------------------------------------------------
  49.   def setup(actor)
  50.     s1 = Vocab::attack
  51.     s2 = Vocab::skill
  52.     s3 = Vocab::guard
  53.     s4 = Vocab::item
  54.     if actor.class.skill_name_valid     # 特技指令名称有效?
  55.       s2 = actor.class.skill_name       # 替换指令名
  56.     end
  57.     @commands = [s1, s2, s3, s4]
  58.     @item_max = 4
  59.     refresh
  60.     self.index = 0
  61.   end  
  62.   
  63.   #--------------------------------------------------------------------------
  64.   # ● 描绘项目
  65.   #     index : 项目编号
  66.   #     enabled : 有效标记录。是false 的时候半透明绘画
  67.   #--------------------------------------------------------------------------
  68.   def draw_item(index, enabled = true)
  69.     rect = item_rect(index)
  70.     rect.x += 4
  71.     rect.width -= 8
  72.     self.contents.clear_rect(rect)
  73.     draw_icon(@icon_list[index], rect.x, rect.y, true) if index == self.index
  74.     self.contents.font.color = normal_color
  75.     self.contents.font.color.alpha = enabled ? 255 : 128
  76.     rect.x += 26
  77.     self.contents.draw_text(rect, @commands[index])
  78.   end
  79.   
  80.   #--------------------------------------------------------------------------
  81.   # ● 刷新类型
  82.   #--------------------------------------------------------------------------
  83.   def update
  84.     super
  85.     @remember_index = self.index if self.index == -1
  86.     if @remember_index != self.index
  87.       @remember_index = self.index
  88.       refresh
  89.     end
  90.   end
  91.   
  92. end
复制代码

作者: 火鸡三毛老大    时间: 2008-3-23 18:54
脚本6      华丽镜头移动脚本
  1. #==============================================================================
  2. # ■ 华丽镜头移动脚本  by ChenWei
  3. #------------------------------------------------------------------------------
  4. #  1-插入此段脚本到Main前面
  5. #   2-功能
  6. #     a-[镜头平滑移动到事件/角色]
  7. #       在事件里的[设置移动路线]里选择需要镜头转向的角色输入脚本kds即可
  8. #     b-[镜头跟随事件]
  9. #       在事件里的[设置移动路线]选择好需要跟随的事件后输入脚本kds_move_start开
  10. #       始跟随,当不想跟随时再输入kds_move_over
  11. #==============================================================================
  12. class Game_Map
  13.   attr_accessor   :display_x                # 显示 X 坐标 * 256
  14.   attr_accessor   :display_y                # 显示 Y 坐标 * 256
  15. end
  16. $平滑移动 = nil
  17. class Scene_Map
  18.   alias kds_update update
  19.   def update
  20.     kds_update
  21.     if $平滑移动 != nil
  22.       cen_x = Game_Character::CENTER_X
  23.       cen_y = Game_Character::CENTER_Y
  24.       max_x = ($game_map.width - 17) * 256
  25.       max_y = ($game_map.height - 13) * 256
  26.       display_x = [0, [$平滑移动.x * 256 - cen_x, max_x].min].max
  27.       display_y = [0, [$平滑移动.y * 256 - cen_y, max_y].min].max
  28.       if $game_map.display_x != display_x
  29.          if ($game_map.display_x - display_x).abs < 22
  30.            $game_map.display_x = display_x
  31.          else
  32.            $game_map.display_x += (display_x - $平滑移动.old_display_x)/32
  33.          end
  34.       end
  35.       if $game_map.display_y != display_y
  36.          if ($game_map.display_y - display_y).abs <= 22
  37.             $game_map.display_y = display_y
  38.          else
  39.             $game_map.display_y += (display_y - $平滑移动.old_display_y)/32
  40.          end
  41.       end
  42.       if $game_map.display_x == display_x  and $game_map.display_y == display_y
  43.          $平滑移动.center($平滑移动.x, $平滑移动.y)
  44.          $平滑移动 = nil
  45.       end
  46.       return
  47.     end
  48.   end  
  49. end
  50. class Game_Character
  51.   CENTER_X = (544 / 2 - 16) * 8     # 画面中央的 X 坐标 * 8
  52.   CENTER_Y = (416 / 2 - 16) * 8     # 画面中央的 Y 坐标 * 8
  53.   attr_accessor :old_display_x
  54.   attr_accessor :old_display_y
  55.   attr_accessor :kds_move
  56.   def center(x, y)
  57.     max_x = ($game_map.width - 17) * 256
  58.     max_y = ($game_map.height - 13) * 256
  59.     $game_map.display_x = [0, [x * 256 - CENTER_X, max_x].min].max
  60.     $game_map.display_y = [0, [y * 256 - CENTER_Y, max_y].min].max
  61.   end
  62.   def kds
  63.     @old_display_x = $game_map.display_x
  64.     @old_display_y = $game_map.display_y
  65.     case @id
  66.     when 0
  67.       $平滑移动 = $game_player
  68.     else
  69.       $平滑移动 = $game_map.events[@id]
  70.     end
  71.   end
  72.   def kds_move_start
  73.       @kds_move = ""
  74.   end
  75.   def kds_move_over
  76.       @kds_move = nil
  77.   end
  78.   alias kds_update update
  79.   def update
  80.     last_real_x = @real_x
  81.     last_real_y = @real_y
  82.     kds_update
  83.     if @kds_move != nil
  84.      if @real_y > last_real_y and @real_y - $game_map.display_y > CENTER_Y
  85.        $game_map.scroll_down(@real_y - last_real_y)
  86.      end
  87.      if @real_x < last_real_x and @real_x - $game_map.display_x < CENTER_X
  88.        $game_map.scroll_left(last_real_x - @real_x)
  89.      end
  90.      if @real_x > last_real_x and @real_x - $game_map.display_x > CENTER_X
  91.       $game_map.scroll_right(@real_x - last_real_x)
  92.      end
  93.      if @real_y < last_real_y and @real_y - $game_map.display_y < CENTER_Y
  94.        $game_map.scroll_up(last_real_y - @real_y)
  95.      end
  96.     end
  97.   end  
  98. end
  99. #==============================================================================
复制代码

作者: 火鸡三毛老大    时间: 2008-3-23 18:55
脚本7      多体攻击
  1. #==============================================================================
  2. #VX里自带脚本为多体连击哦!
  3. #在技能名称后面加入",X连击次数"即可
  4. #X一定要大写
  5. #否则系统当成普通攻击
  6. #注意!有连击效果的千万别点效果范围里的敌多体
  7. #==============================================================================
  8. class Scene_Battle < Scene_Base
  9.   def execute_action_skill
  10.     skill = @active_battler.action.skill   
  11.     name = skill.name
  12.     if name.split(/,/)[0]
  13.       if name != nil
  14.          kill = name.split(/X/)[1]
  15.          if kill == nil or kill == ""
  16.            kill = 1
  17.          end
  18.          #p kill
  19.          #p name
  20.        end
  21.     end
  22.     for ii in 1..kill.to_i
  23.     skill = @active_battler.action.skill
  24.     text = @active_battler.name + skill.message1
  25.     @message_window.add_instant_text(text)
  26.     unless skill.message2.empty?
  27.       wait(10)
  28.       @message_window.add_instant_text(skill.message2)
  29.     end
  30.     targets = @active_battler.action.make_targets
  31.     display_animation(targets, skill.animation_id)
  32.     @active_battler.mp -= @active_battler.calc_mp_cost(skill)
  33.     $game_temp.common_event_id = skill.common_event_id
  34.     for target in targets
  35.       target.skill_effect(@active_battler, skill)
  36.       display_action_effects(target, skill)
  37.     end
  38.     end
  39.   end
  40. end
复制代码

作者: 火鸡三毛老大    时间: 2008-3-23 18:56
脚本8      光标选择敌人   放在System的图
  1. #==============================================================================
  2. #本脚本来自66RPG,如需转载请保留本信息。
  3. #==============================================================================
  4. # ■ Arrow_Base
  5. #------------------------------------------------------------------------------
  6. #  在战斗画面使用的箭头光标的活动块。本类作为
  7. # Arrow_Enemy 类与 Arrow_Actor 类的超级类使用。
  8. #==============================================================================

  9. class Arrow_Base < Sprite
  10.   #--------------------------------------------------------------------------
  11.   # ● 定义实例变量
  12.   #--------------------------------------------------------------------------
  13.   attr_reader   :index                    # 光标位置
  14.   attr_reader   :help_window              # 帮助窗口
  15.   #--------------------------------------------------------------------------
  16.   # ● 初始化对像
  17.   #     viewport : 显示端口
  18.   #--------------------------------------------------------------------------
  19.   def initialize(viewport)
  20.     super(viewport)
  21.     self.bitmap = Cache.system("Arrow")
  22.     self.ox = 16
  23.     self.oy = 64
  24.     self.z = 2500
  25.     @blink_count = 0
  26.     @index = 0
  27.     @help_window = nil
  28.     update
  29.   end
  30.   #--------------------------------------------------------------------------
  31.   # ● 设置光标位置
  32.   #     index : 新的光标位置
  33.   #--------------------------------------------------------------------------
  34.   def index=(index)
  35.     @index = index
  36.     update
  37.   end
  38.   #--------------------------------------------------------------------------
  39.   # ● 设置帮助窗口
  40.   #     help_window : 新的帮助窗口
  41.   #--------------------------------------------------------------------------
  42.   def help_window=(help_window)
  43.     @help_window = help_window
  44.     # 刷新帮助文本 (update_help 定义了继承目标)
  45.     if @help_window != nil
  46.       update_help
  47.     end
  48.   end
  49.   #--------------------------------------------------------------------------
  50.   # ● 刷新画面
  51.   #--------------------------------------------------------------------------
  52.   def update
  53.     # 刷新点灭记数
  54.     @blink_count = (@blink_count + 1) % 12
  55.     # 设置传送源矩形
  56.     if @blink_count < 6
  57.       self.src_rect.set(0, 0, 32, 32)
  58.     else
  59.       self.src_rect.set(32, 0, 32, 32)
  60.     end
  61.     # 刷新帮助文本 (update_help 定义了继承目标)
  62.     if @help_window != nil
  63.       update_help
  64.     end
  65.   end
  66. end
  67. #==============================================================================
  68. # ■ Arrow_Enemy
  69. #------------------------------------------------------------------------------
  70. #  选择敌人的箭头光标。本类继承 Arrow_Base
  71. # 类。
  72. #==============================================================================

  73. class Arrow_Enemy < Arrow_Base
  74.   #--------------------------------------------------------------------------
  75.   # ● 获取光标指向的敌人
  76.   #--------------------------------------------------------------------------
  77.   def enemy
  78.     return $game_troop.members[@index]
  79.   end
  80.   
  81.   def dispose
  82.     @enemy.loop_white_flash = false unless @enemy.nil?
  83.     super
  84.   end
  85.   #--------------------------------------------------------------------------
  86.   # ● 刷新画面
  87.   #--------------------------------------------------------------------------
  88.   def update
  89.     super
  90.      if @enemy != enemy and enemy.exist?
  91.         @enemy.loop_white_flash = false unless @enemy.nil?
  92.         enemy.loop_white_flash = true
  93.         @enemy = enemy
  94.       end  
  95.    
  96.     # 如果指向不存在的敌人就离开
  97.     $game_troop.members.size.times do
  98.       break if self.enemy.exist?
  99.       @index += 1
  100.       @index %= $game_troop.members.size
  101.     end
  102.     # 光标右
  103.     if Input.repeat?(Input::RIGHT) or Input.repeat?(Input::DOWN)
  104.       Sound.play_cursor
  105.       $game_troop.members.size.times do
  106.         @index += 1
  107.         @index %= $game_troop.members.size
  108.         break if self.enemy.exist?
  109.       end
  110.     end
  111.     # 光标左
  112.     if Input.repeat?(Input::LEFT) or Input.repeat?(Input::UP)
  113.      Sound.play_cursor
  114.       $game_troop.members.size.times do
  115.         @index += $game_troop.members.size - 1
  116.         @index %= $game_troop.members.size
  117.         break if self.enemy.exist?
  118.       end
  119.     end
  120.     # 设置活动块坐标
  121.     if self.enemy != nil
  122.       self.x = self.enemy.screen_x
  123.       self.y = self.enemy.screen_y
  124.     end
  125.   end
  126.   #--------------------------------------------------------------------------
  127.   # ● 刷新帮助文本
  128.   #--------------------------------------------------------------------------
  129.   def update_help
  130.     # 帮助窗口显示敌人的名字与状态
  131.     @help_window.set_enemy(self.enemy)
  132.   end
  133. end





  134. class Scene_Battle ##
  135.   
  136.   
  137.   #--------------------------------------------------------------------------
  138.   # ● 更新画面
  139.   #--------------------------------------------------------------------------
  140.   def update
  141.     super
  142.     update_basic(true)
  143.     update_info_viewport                  # 更新显示信息的视区
  144.     if $game_message.visible
  145.       @info_viewport.visible = false
  146.       @message_window.visible = true
  147.     end
  148.     unless $game_message.visible          # 在显示消息以外的情况
  149.       return if judge_win_loss            # 判断胜败
  150.       update_scene_change
  151.       if @enemy_arrow != nil
  152.         update_target_enemy_selection     # 选择敌方对象
  153.       elsif @target_actor_window != nil
  154.         update_target_actor_selection     # 选择对象角色
  155.       elsif @skill_window != nil
  156.         update_skill_selection            # 选择特技
  157.       elsif @item_window != nil
  158.         update_item_selection             # 选择物品
  159.       elsif @party_command_window.active
  160.         update_party_command_selection    # 选择同伴指令
  161.       elsif @actor_command_window.active
  162.         update_actor_command_selection    # 选择角色指令
  163.       else
  164.         process_battle_event              # 战斗处理
  165.         process_action                    # 战斗行动
  166.         process_battle_event              # 处理战斗事件
  167.       end
  168.     end
  169.   end
  170.   

  171.   
  172.   def set_window(visible)
  173.     if !@skill_window.nil?
  174.       @skill_window.visible = visible
  175.     elsif !@item_window.nil?
  176.       @item_window.visible = visible
  177.     end
  178.   end

  179.   #--------------------------------------------------------------------------
  180.   # ● 开始选择对象的敌方角色
  181.   #--------------------------------------------------------------------------
  182.   def start_target_enemy_selection
  183.     set_window(false)
  184.     @enemy_arrow = Arrow_Enemy.new(@spriteset.viewport3)
  185.     @enemy_window = Window_Enemy.new(176,0)
  186.     @enemy_arrow.help_window = @enemy_window
  187.     @actor_command_window.active = false
  188.   end
  189.   #--------------------------------------------------------------------------
  190.   # ● 选择对象敌方角色结束
  191.   #--------------------------------------------------------------------------
  192.   def end_target_enemy_selection
  193.     @enemy_arrow.dispose
  194.     @enemy_arrow = nil
  195.     @enemy_window.dispose
  196.     set_window(true)
  197.     if @actor_command_window.index == 0
  198.       @actor_command_window.active = true
  199.     end
  200.   end
  201.   #--------------------------------------------------------------------------
  202.   # ● 更新选择对象敌方角色
  203.   #--------------------------------------------------------------------------
  204.   def update_target_enemy_selection
  205.      @enemy_arrow.update
  206.     if Input.trigger?(Input::B)
  207.       Sound.play_cancel
  208.       end_target_enemy_selection
  209.     elsif Input.trigger?(Input::C)
  210.       Sound.play_decision
  211.       @active_battler.action.target_index = @enemy_arrow.enemy.index
  212.       end_target_enemy_selection
  213.       end_skill_selection
  214.       end_item_selection
  215.       next_actor
  216.     end
  217.   end


  218. end


  219. class Spriteset_Battle ##
  220.   def viewport3
  221.     return @viewport3
  222.   end  
  223. end

  224. class Game_Battler
  225.   attr_accessor :loop_white_flash              # 循环白色闪烁标记
  226. end

  227. class Sprite_Battler ##
  228.   alias old_setup_new_effect setup_new_effect
  229.   def setup_new_effect
  230.     if @battler.loop_white_flash and @effect_duration == 0
  231.       @battler.white_flash = true
  232.     end
  233.     old_setup_new_effect
  234.   end
  235. end


  236. #==============================================================================
  237. # ■ Window_Enemy
  238. #------------------------------------------------------------------------------
  239. #  显示敌人信息的窗口,光标Arrow用。
  240. #==============================================================================

  241. class Window_Enemy < Window_Base
  242.   #--------------------------------------------------------------------------
  243.   # ● 初始化窗口
  244.   #     x : 窗口的X坐标
  245.   #     y : 窗口的Y坐标
  246.   #--------------------------------------------------------------------------
  247.   def initialize(x, y)
  248.     super(x, y, 288, WLH * 2 + 32)
  249. #~     self.opacity = 0
  250.   end

  251.   #--------------------------------------------------------------------------
  252.   # ● 设置文本
  253.   #     text  : 窗口显示的字符串
  254.   #     align : 对齐方式 (0..左对齐、1..中间对齐、2..右对齐)
  255.   #--------------------------------------------------------------------------
  256.   def set_text(text, align = 0)
  257.     # 如果文本和对齐方式的至少一方与上次的不同
  258.     if text != @text or align != @align
  259.       # 再描绘文本
  260.       self.contents.clear
  261.       self.contents.font.color = normal_color
  262.       self.contents.draw_text(4, 0, self.width - 40, 32, text, align)
  263.       @text = text
  264.       @align = align
  265.       @actor = nil
  266.     end
  267.     self.visible = true
  268.   end
  269.   
  270.   
  271.   #--------------------------------------------------------------------------
  272.   # ● 设置敌人
  273.   #     enemy : 要显示名字和状态的敌人
  274.   #--------------------------------------------------------------------------
  275.   def set_enemy(enemy)
  276.     if @enemy != enemy
  277.     text = enemy.name
  278.     set_text(text)
  279.     w = enemy.states.size * 24
  280.     draw_actor_state(enemy, contents.width - w , 0, w)
  281.     draw_actor_hp(enemy, 0 , WLH  )
  282.     draw_actor_mp(enemy, contents.width - 120 , WLH )
  283.     @enemy = enemy
  284.     end
  285.   end
  286. end
复制代码

作者: 火鸡三毛老大    时间: 2008-3-23 19:00
脚本9   行走图横版战斗
  1. #==============================================================================
  2. # ■ 行走图横版战斗[Ver.1.0.1]   
  3. #------------------------------------------------------------------------------
  4. # 脚本原出处 [http://www.rpgcrisis.net]
  5. #------------------------------------------------------------------------------
  6. #==============================================================================

  7. module Battle_Formation
  8. #------------------------------------------------------------------------------
  9.   FORM = {
  10. # 战斗位置 =>
  11.     #    [角色1x.y]  [角色2x.y]  [角色3x.y]  [角色4x.y]
  12.     0 => [[380,150], [400, 230], [460, 170], [480, 250]]
  13.   }
  14. #------------------------------------------------------------------------------
  15. end
  16. #==============================================================================
  17. # ■ Game_System
  18. #==============================================================================
  19. class Game_System
  20.   attr_accessor :battle_formation                # Formation ID
  21.   #--------------------------------------------------------------------------
  22.   # ● オブジェクト初期化
  23.   #--------------------------------------------------------------------------
  24.   alias init_game_system initialize
  25.   def initialize
  26.     init_game_system
  27.     @battle_formation = 0              # 初步形成
  28.   end
  29. end

  30. #==============================================================================
  31. # ■ Game_Actor
  32. #==============================================================================
  33. class Game_Actor < Game_Battler
  34.   #--------------------------------------------------------------------------
  35.   # ● 是Sprite的使用? [重新界定]
  36.   #--------------------------------------------------------------------------
  37.   def use_sprite?
  38.     return true
  39.   end
  40.   #--------------------------------------------------------------------------
  41.   # ● 战斗画面获取X坐标
  42.   #--------------------------------------------------------------------------
  43.   def screen_x
  44.     return Battle_Formation::FORM[$game_system.battle_formation][self.index][0]
  45.   end
  46.   #--------------------------------------------------------------------------
  47.   # ● 战斗画面获取Y坐标
  48.   #--------------------------------------------------------------------------
  49.   def screen_y
  50.     return Battle_Formation::FORM[$game_system.battle_formation][self.index][1]
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # ● 战斗画面获取z坐标
  54.   #--------------------------------------------------------------------------
  55.   def screen_z
  56.     bitmap = Cache.character(self.character_name)
  57.     # Height + Y Coordinates
  58.     return screen_y + bitmap.height / 4
  59.   end
  60. end



  61. #==============================================================================
  62. # ■ Game_Enemy
  63. #==============================================================================
  64. class Game_Enemy < Game_Battler
  65.   #--------------------------------------------------------------------------
  66.   # ● 战斗画面获取z坐标[重新界定]
  67.   #--------------------------------------------------------------------------
  68.   def screen_z
  69.     bitmap = Cache.battler(self.battler_name, self.battler_hue)
  70.     # Height + Y Coordinates
  71.     return screen_y + bitmap.height
  72.   end
  73. end
  74. #==============================================================================
  75. # ■ VX-RGSS2-6 サイドビュー战斗[Ver.1.0.1]
  76. #------------------------------------------------------------------------------
  77. # 战斗实况告知
  78. #==============================================================================

  79. #==============================================================================
  80. # ■ Scene_Battle
  81. #==============================================================================
  82. class Scene_Battle < Scene_Base
  83.   #--------------------------------------------------------------------------
  84.   # ●  战斗开始进程
  85.   #--------------------------------------------------------------------------
  86.   alias process_battle_start_sideview process_battle_start
  87.   def process_battle_start
  88.     for battler in $game_party.members + $game_troop.members
  89.       battler.move_mode = SideView::M_MODE_WAIT
  90.     end
  91.     process_battle_start_sideview
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   # ● 胜利进程
  95.   #--------------------------------------------------------------------------
  96.   alias process_victory_sideview process_victory
  97.   def process_victory
  98.     for actor in $game_party.members
  99.       actor.move_mode = SideView::M_MODE_WIN
  100.     end
  101.     process_victory_sideview
  102.   end
  103.   #--------------------------------------------------------------------------
  104.   # ● 等到活动控制完毕
  105.   #--------------------------------------------------------------------------
  106.   def wait_for_motion
  107.     while @active_battler.motion_stop
  108.       update_basic
  109.     end
  110.   end
  111.   #--------------------------------------------------------------------------
  112.   # ● 执行作战:攻击[重新界定]
  113.   #--------------------------------------------------------------------------
  114.   def execute_action_attack
  115.     text = sprintf(Vocab::DoAttack, @active_battler.name)
  116.     @message_window.add_instant_text(text)
  117.     targets = @active_battler.action.make_targets
  118.     #---Enemy attack sound reproduced.
  119.     if @active_battler.is_a?(Game_Enemy)
  120.       Sound.play_enemy_attack
  121.       wait(15, true)
  122.     end
  123.     #--- Proximity (Going)
  124.     SideView.set_target_point(@active_battler, targets[0])
  125.     @active_battler.move_mode = SideView::M_MODE_ATK1
  126.     @active_battler.motion_stop = true
  127.     wait_for_motion
  128.     #--- Attack
  129.     wait(5)
  130.     @active_battler.move_mode = SideView::M_MODE_ATK2
  131.     #---
  132.     display_attack_animation(targets)
  133.     wait(20)
  134.     for target in targets
  135.       target.attack_effect(@active_battler)
  136.       display_action_effects(target)
  137.     end
  138.     #--- Proximity (Return)
  139.     @active_battler.move_mode = SideView::M_MODE_ATK3
  140.     @active_battler.motion_stop = true
  141.     wait_for_motion
  142.     #---Wait
  143.     for target in targets
  144.       target.move_mode = SideView::M_MODE_WAIT
  145.     end
  146.     @active_battler.move_mode = SideView::M_MODE_WAIT
  147.     #---
  148.   end
  149.   #--------------------------------------------------------------------------
  150.   # ● 执行作战:技能[重新界定]
  151.   #--------------------------------------------------------------------------
  152.   def execute_action_skill
  153.     skill = @active_battler.action.skill
  154.     text = @active_battler.name + skill.message1
  155.     @message_window.add_instant_text(text)
  156.     unless skill.message2.empty?
  157.       wait(10)
  158.       @message_window.add_instant_text(skill.message2)
  159.     end
  160.     #--- Enemy attack sound reproduced.
  161.     if @active_battler.is_a?(Game_Enemy)
  162.       Sound.play_enemy_attack
  163.       wait(15, true)
  164.     end
  165.     #--- Long distance attack.
  166.     @active_battler.move_mode = SideView::M_MODE_MAGI
  167.     #---
  168.     targets = @active_battler.action.make_targets
  169.     display_animation(targets, skill.animation_id)
  170.     @active_battler.mp -= @active_battler.calc_mp_cost(skill)
  171.     $game_temp.common_event_id = skill.common_event_id
  172.     for target in targets
  173.       target.skill_effect(@active_battler, skill)
  174.       display_action_effects(target, skill)
  175.     end
  176.     #---Wait
  177.     for target in targets
  178.       target.move_mode = SideView::M_MODE_WAIT
  179.     end
  180.     @active_battler.move_mode = SideView::M_MODE_WAIT
  181.     #---
  182.   end
  183.   #--------------------------------------------------------------------------
  184.   # 执行作战:物品???[重新界定]
  185.   #--------------------------------------------------------------------------
  186.   def execute_action_item
  187.     item = @active_battler.action.item
  188.     text = sprintf(Vocab::UseItem, @active_battler.name, item.name)
  189.     @message_window.add_instant_text(text)
  190.     #--- Enemy attack sound reproduced.
  191.     if @active_battler.is_a?(Game_Enemy)
  192.       Sound.play_enemy_attack
  193.       wait(15, true)
  194.     end
  195.     #--- Long distance attack
  196.     @active_battler.move_mode = SideView::M_MODE_MAGI
  197.     #---
  198.     targets = @active_battler.action.make_targets
  199.     display_animation(targets, item.animation_id)
  200.     $game_party.consume_item(item)
  201.     $game_temp.common_event_id = item.common_event_id
  202.     for target in targets
  203.       target.item_effect(@active_battler, item)
  204.       display_action_effects(target, item)
  205.     end
  206.     #---Wait
  207.     for target in targets
  208.       target.move_mode = SideView::M_MODE_WAIT
  209.     end
  210.     @active_battler.move_mode = SideView::M_MODE_WAIT
  211.     #---
  212.   end
  213.   #--------------------------------------------------------------------------
  214.   # ● 攻击动画展示[重新界定]
  215.   #     对象:对象的安排
  216.   #--------------------------------------------------------------------------
  217.   # 【改变一部分】
  218.   #  敌人的声音效果是改变了,所以可以用在每一个阶段的运作情况。
  219.   #  它改变了,所以这起攻击动画的一个敌人可以被显示出来。
  220.   #--------------------------------------------------------------------------
  221.   def display_attack_animation(targets)
  222.     display_normal_animation(targets, @active_battler.atk_animation_id, false)
  223.     display_normal_animation(targets, @active_battler.atk_animation_id2, true)
  224.     wait_for_animation
  225.   end
  226.   #--------------------------------------------------------------------------
  227.   # ● HP损害显示[重新界定]
  228.   #    对象:候选人
  229.   #    对象:技能,还是物品?
  230.   #--------------------------------------------------------------------------
  231.   def display_hp_damage(target, obj = nil)
  232.     if target.hp_damage == 0                # 任何破坏
  233.       return if obj != nil and obj.damage_to_mp
  234.       return if obj != nil and obj.base_damage == 0
  235.       fmt = target.actor? ? Vocab::ActorNoDamage : Vocab::EnemyNoDamage
  236.       text = sprintf(fmt, target.name)
  237.     elsif target.absorbed                   # 吸收
  238.       fmt = target.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain
  239.       text = sprintf(fmt, target.name, Vocab::hp, target.hp_damage)
  240.     elsif target.hp_damage > 0              # 损坏
  241.       if target.actor?
  242.         text = sprintf(Vocab::ActorDamage, target.name, target.hp_damage)
  243.         Sound.play_actor_damage
  244.         $game_troop.screen.start_shake(5, 5, 10)
  245.         target.blink = true # Only adds here
  246.       else
  247.         text = sprintf(Vocab::EnemyDamage, target.name, target.hp_damage)
  248.         Sound.play_enemy_damage
  249.         target.blink = true
  250.       end
  251.     else                                    # 回收
  252.       fmt = target.actor? ? Vocab::ActorRecovery : Vocab::EnemyRecovery
  253.       text = sprintf(fmt, target.name, Vocab::hp, -target.hp_damage)
  254.       Sound.play_recovery
  255.     end
  256.     @message_window.add_instant_text(text)
  257.     wait(30)
  258.   end
  259. end
  260. #==============================================================================
  261. # ■ VX-RGSS2-6 サイドビュー战斗[Ver.1.0.1]
  262. #------------------------------------------------------------------------------

  263. module SideView
  264. #----------------------------------------------------------------------------
  265. #-----[运行格局]-----
  266.    #运行速度
  267.   MOTION_SPEED = 20

  268.   #-----[アニメーション設定]-----
  269.   # 通常敌人攻击动画设置
  270.   E_ANIME = {
  271.    # EnemyID => [Usually atttack and additional attack animations.]
  272.     1 => [1, 0]
  273.   }

  274. #----------------------------------------------------------------------------
  275. #----------------------------------------------------------------------------
  276.   # Motion Control Mode
  277.   M_MODE_WAIT = 0     # Standby
  278.   M_MODE_MAGI = 1     # Attack
  279.   M_MODE_DAMG = 2     # Non-Damage Attack
  280.   M_MODE_WIN  = 3     # Victory
  281.   M_MODE_ATK1 = 4     # Direct Attack (Approaching)
  282.   M_MODE_ATK2 = 5     # Direct Attack (Attacking)
  283.   M_MODE_ATK3 = 6     # Direct Attack (Returning)

  284.   module_function
  285.   #--------------------------------------------------------------------------
  286.   # ● 活动区域计算
  287.   #--------------------------------------------------------------------------
  288.   def set_target_point(attacker, target)
  289.     case target
  290.     when Game_Actor
  291.       bits = Cache.character(target.character_name)
  292.       attacker.target_x = target.screen_x + (bits.width / 8)
  293.       attacker.target_y = target.screen_y
  294.     when Game_Enemy
  295.       bits = Cache.battler(target.battler_name, target.battler_hue)
  296.       attacker.target_x = target.screen_x + (bits.width / 2)
  297.       attacker.target_y = target.screen_y
  298.     end
  299.   end
  300. end

  301. class Game_Battler
  302.   attr_accessor   :move_mode       # Operation Mode
  303.   # 0:Standby   1:Attack   2: Un-useless   3:Victory
  304.   attr_accessor   :motion_stop     # Operation Stop Flag (Under Movement Flag)
  305.   attr_accessor   :target_x        # Move Position(x)
  306.   attr_accessor   :target_y        # Move Position(y)
  307.   #--------------------------------------------------------------------------
  308.   # ● 对象初始化
  309.   #--------------------------------------------------------------------------
  310.   alias initialize_sdva_corpse initialize
  311.   def initialize
  312.     initialize_sdva_corpse
  313.     @move_mode = 0
  314.     @motion_stop = false
  315.     @target_x = 0
  316.     @target_y = 0
  317.   end
  318. end

  319. #==============================================================================
  320. # ■ Game_Enemy
  321. #==============================================================================
  322. class Game_Enemy < Game_Battler
  323.   #--------------------------------------------------------------------------
  324.   # ● 攻击动画ID采集
  325.   #--------------------------------------------------------------------------
  326.   def atk_animation_id
  327.     return 0 if SideView::E_ANIME[@enemy_id].nil?
  328.     return SideView::E_ANIME[@enemy_id][0]
  329.   end
  330.   #--------------------------------------------------------------------------
  331.   # ● 攻击动画ID采集( 2剑式: 2武器)
  332.   #--------------------------------------------------------------------------
  333.   def atk_animation_id2
  334.     return 0 if SideView::E_ANIME[@enemy_id].nil?
  335.     return SideView::E_ANIME[@enemy_id][1]
  336.   end
  337. end



  338. #==============================================================================
  339. # ■ Sprite_Battler
  340. #==============================================================================
  341. class Sprite_Battler < Sprite_Base
  342.   #--------------------------------------------------------------------------
  343. # ● Object Initialization
  344. #     Viewport : View Port
  345. #     Battler  : Battler (Game_Battler)
  346.   #--------------------------------------------------------------------------
  347.   alias initialize_sideview initialize
  348.   def initialize(viewport, battler = nil)
  349.     initialize_sideview(viewport, battler)
  350.     init_direct_attack
  351.   end
  352.   #--------------------------------------------------------------------------
  353.   # ● 一套价值接近攻击
  354.   #--------------------------------------------------------------------------
  355.   def init_direct_attack
  356.     @direct_attack_cnt = 0
  357.     @direct_attack_phase = 0
  358.     @direct_move_cnt = 0
  359.     @battler_x_plus = 0
  360.     @battler_y_plus = 0
  361.     @moving_mode = 0
  362.     @pattern = 0
  363.     @direction = 0
  364.   end
  365.   #--------------------------------------------------------------------------
  366.   # ● 帧重建[重新界定]
  367.   #--------------------------------------------------------------------------
  368.   def update
  369.     super
  370.     if @battler == nil
  371.       self.bitmap = nil
  372.     else
  373.       @use_sprite = @battler.use_sprite?
  374.       if @use_sprite
  375.         self.x = @battler.screen_x + @battler_x_plus
  376.         self.y = @battler.screen_y + @battler_y_plus
  377.         self.z = @battler.screen_z
  378.         update_battler_bitmap
  379.       end
  380.       setup_new_effect
  381.       update_effect
  382.     end
  383.   end
  384.   #--------------------------------------------------------------------------
  385.   # ● 点阵图转让源重建
  386.   #--------------------------------------------------------------------------
  387.   alias update_battler_bitmap_sideview update_battler_bitmap
  388.   def update_battler_bitmap
  389.     case @battler
  390.     when Game_Actor
  391.       if @battler.character_name != @battler_name or
  392.          @battler.character_index != @battler_hue
  393.         @battler_name = @battler.character_name
  394.         @battler_hue = @battler.character_index
  395.         draw_pre_character
  396.         draw_character
  397.         if (@battler.dead? or @battler.hidden)
  398.           self.opacity = 0
  399.         end
  400.       end
  401.     when Game_Enemy
  402.       if @battler.battler_name != @battler_name or
  403.          @battler.battler_hue != @battler_hue
  404.         @battler_name = @battler.battler_name
  405.         @battler_hue = @battler.battler_hue
  406.         draw_battler
  407.         if (@battler.dead? or @battler.hidden)
  408.           self.opacity = 0
  409.         end
  410.       end
  411.     end
  412.     motion_control
  413.   end
  414.   #--------------------------------------------------------------------------
  415.   # ● battler制图
  416.   #--------------------------------------------------------------------------
  417.   def draw_battler
  418.     self.bitmap = Cache.battler(@battler_name, @battler_hue)
  419.     @width = bitmap.width
  420.     @height = bitmap.height
  421.     self.ox = @width / 2
  422.     self.oy = @height
  423.   end
  424.   #--------------------------------------------------------------------------
  425.   # ● 预字制图[普通]
  426.   #--------------------------------------------------------------------------
  427.   def draw_pre_character
  428.     self.bitmap = Cache.character(@battler_name)
  429.     sign = @battler_name[/^[\!\$]./]
  430.     if sign != nil and sign.include?('$')
  431.       @width = bitmap.width / 3
  432.       @height = bitmap.height / 4
  433.     else
  434.       @width = bitmap.width / 12
  435.       @height = bitmap.height / 8
  436.     end
  437.     self.ox = @width / 2
  438.     self.oy = @height
  439.   end
  440.   #--------------------------------------------------------------------------
  441.   # ● 性格绘画[普通]
  442.   #--------------------------------------------------------------------------
  443.   def draw_character
  444.     index = @battler_hue
  445.     pattern = @pattern < 3 ? @pattern : 1
  446.     sx = (index % 4 * 3 + pattern) * @width
  447.     sy = (index / 4 * 4 + (@direction - 2) / 2) * @height
  448.     self.src_rect.set(sx, sy, @width, @height)
  449.   end
  450.   #--------------------------------------------------------------------------
  451.   # ● 活动控制
  452.   #--------------------------------------------------------------------------
  453.   def motion_control
  454.     # Memory Operation Mode
  455.     @moving_mode = @battler.move_mode
  456.     # Battler Drawing
  457.     case @battler
  458.     when Game_Actor # Actor
  459.       actor_motion_control
  460.     when Game_Enemy # Enemy
  461.       enemy_motion_control
  462.     end
  463.   end
  464.   #--------------------------------------------------------------------------
  465.   # ● 运动控制(角色)
  466.   #--------------------------------------------------------------------------
  467.   def actor_motion_control
  468.     # Operation Change
  469.     case @moving_mode
  470.     when SideView::M_MODE_WAIT  # Standby
  471.       init_direct_attack
  472.       @battler_x_plus = 0
  473.       @direction = 4
  474.       @pattern = 1
  475.     when SideView::M_MODE_MAGI  # Attack
  476.       @battler_x_plus = -10
  477.       @direction = 4
  478.       @pattern = 3
  479.     when SideView::M_MODE_DAMG  # Non-Damage Attack
  480.       @battler_x_plus = 10
  481.       @direction = 4
  482.       @pattern = 3
  483.     when SideView::M_MODE_WIN  # Victory
  484.       @direction = 2
  485.       @pattern = 1
  486.     when SideView::M_MODE_ATK1  # Direct Attack (Approaching)
  487.       exe_moving_attack_start
  488.       @end_pos_x = @battler_x_plus
  489.     when SideView::M_MODE_ATK2  # Direct Attack (Attacking)
  490.       @battler_x_plus = @end_pos_x - 10
  491.     when SideView::M_MODE_ATK3  # Direct Attack (Returning)
  492.       exe_moving_attack_end
  493.     else
  494.       p "error:Sprite_Battler>> @moving_mode"
  495.     end
  496.     draw_character
  497.   end
  498.   #--------------------------------------------------------------------------
  499.   # ● 运动控制(敌人)
  500.   #--------------------------------------------------------------------------
  501.   def enemy_motion_control
  502.     # Operation Change
  503.     case @moving_mode
  504.     when SideView::M_MODE_WAIT  # Standby
  505.       init_direct_attack
  506.     when SideView::M_MODE_MAGI  # Attack
  507.       @battler_x_plus = 10
  508.     when SideView::M_MODE_DAMG  # Non-Damage Attack
  509.       @battler_x_plus = -10
  510.       @shake_flg = true
  511.     when SideView::M_MODE_ATK1  # Direct Attack (Approaching)
  512.       exe_moving_attack_start
  513.       @end_pos_x = @battler_x_plus
  514.     when SideView::M_MODE_ATK2  # Direct Attack (Attacking)
  515.       @battler_x_plus = @end_pos_x + 10
  516.     when SideView::M_MODE_ATK3  # Direct Attack (Returning)
  517.       exe_moving_attack_end
  518.     else
  519.       p "error:Sprite_Battler>> @moving_mode", @moving_mode
  520.     end
  521.   end
  522.   #--------------------------------------------------------------------------
  523.   # ● 接近攻击执行方法
  524.   #--------------------------------------------------------------------------
  525.   def exe_moving_attack_start
  526.     return unless @battler.motion_stop
  527.     case @direct_attack_phase
  528.     when 0  # Start Operation Preparation
  529.       diratk_start
  530.     when 1  # Move Operation (Going)
  531.       diratk_move
  532.     when 2  # After-Movement Wait
  533.       diratk_wait
  534.     end
  535.   end
  536.   def exe_moving_attack_end
  537.     case @direct_attack_phase
  538.     when 0  # Attack Operation
  539.       diratk_attack
  540.     when 1  # Move Operation (Return)
  541.       diratk_back
  542.     when 2  # Operation End
  543.       diratk_end
  544.     end
  545.   end
  546.   #--------------------------------------------------------------------------
  547.   # ● 接近攻击执行[开始运作准备]
  548.   #--------------------------------------------------------------------------
  549.   def diratk_start
  550.     # Pose Change
  551.     @pattern = 1
  552.     # The number of frames needed is the distance between current position and
  553.     # target position.
  554.     pos_x = @battler.target_x - self.x
  555.     pos_y = @battler.target_y - self.y
  556.     # Caculation for ammount of frames needed.
  557.     @direct_move_cnt = @direct_attack_cnt = (pos_x.abs / SideView::MOTION_SPEED).round
  558.     # NEXT Phase
  559.     @direct_attack_phase += 1
  560.   end
  561.   #--------------------------------------------------------------------------
  562.   # ● 接近攻击执行[移到对象(去) ]
  563.   #--------------------------------------------------------------------------
  564.   def diratk_move
  565.     case @battler
  566.     when Game_Actor
  567.       x_plus = @width
  568.       y_plus = -@height / 4
  569.     when Game_Enemy
  570.       x_plus = -@width - 10
  571.       y_plus = @height / 4
  572.     end
  573.     # The next movement location is figured out by the distance between
  574.     # current position and target position.
  575.     pos_x = @battler.target_x - self.x + x_plus
  576.     pos_y = @battler.target_y - self.y + y_plus
  577.     @battler_x_plus += pos_x / @direct_attack_cnt if @direct_attack_cnt != 0
  578.     @battler_y_plus += pos_y / @direct_attack_cnt if @direct_attack_cnt != 0
  579.     # End count
  580.     @direct_attack_cnt -= 1
  581.     # Last movement (Insurance: Last correction)
  582.     if @direct_attack_cnt <= 0
  583.       @battler_x_plus = @battler.target_x - @battler.screen_x + x_plus
  584.       @battler_y_plus = @battler.target_y - @battler.screen_y + y_plus
  585.       # NEXTフェーズ
  586.       @direct_attack_cnt = 5
  587.       @direct_attack_phase += 1
  588.     end
  589.   end
  590.   #--------------------------------------------------------------------------
  591.   # ● 接近攻击执行[攻击行动回报]
  592.   #--------------------------------------------------------------------------
  593.   def diratk_wait
  594.     # End Count
  595.     @direct_attack_cnt -= 1
  596.     # Last Movement
  597.     if @direct_attack_cnt <= 0
  598.       # Pose Change
  599.       @pattern = 3
  600.       # END Phase
  601.       @direct_attack_phase = 0
  602.       @battler.motion_stop = false
  603.     end
  604.   end
  605.   #--------------------------------------------------------------------------
  606.   # ● 接近攻击执行[攻击行动回报]
  607.   #--------------------------------------------------------------------------
  608.   def diratk_attack
  609.     # Pose Change
  610.     @pattern = 1
  611.     # End Wait Count
  612.     @direct_attack_cnt = @direct_move_cnt
  613.     # NEXT Phase
  614.     @direct_attack_phase += 1
  615.   end
  616.   #--------------------------------------------------------------------------
  617.   # ● 接近攻击执行[移到运行(往返) ]
  618.   #--------------------------------------------------------------------------
  619.   def diratk_back
  620.     # The next movement location is figured out by the distance between
  621.     # current position and target position.
  622.     pos_x = @battler.screen_x - self.x
  623.     pos_y = @battler.screen_y - self.y
  624.     @battler_x_plus += pos_x / @direct_attack_cnt if @direct_attack_cnt != 0
  625.     @battler_y_plus += pos_y / @direct_attack_cnt if @direct_attack_cnt != 0
  626.     # End Count
  627.     @direct_attack_cnt -= 1
  628.     # Last Movement
  629.     if @direct_attack_cnt == 0
  630.       @battler_x_plus = 0
  631.       @battler_y_plus = 0
  632.       # NEXT Phase
  633.       @direct_attack_phase += 1
  634.     end
  635.   end
  636.   #--------------------------------------------------------------------------
  637.   # ● 接近攻击执行[运行完]
  638.   #--------------------------------------------------------------------------
  639.   def diratk_end
  640.     init_direct_attack
  641.     @battler.motion_stop = false
  642.     # END Phase
  643.     @direct_attack_phase = 0
  644.   end
  645. end
复制代码

作者: 火鸡三毛老大    时间: 2008-3-23 19:00
脚本10    高级传送脚本
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================
  4. # 自定义内容解释:
  5. # TOWNS[编号]=["地名,可以随便写",开关编号,[传送去的地图id,传送去的地图x,
  6. #              传送去的地图y],角色朝向]
  7. #
  8. # 编号请按照0、1、2、3……顺序往下排布
  9. # 当编号的开关打开的时候,才可以选择这个传送地点
  10. # 角色朝向,2为下,4为左,6为右,8为上,具体可以参考自己数字小键盘的方向和数字关系
  11. # 如果是其他方向请自己改。
  12. #
  13. # 使用方法:在需要传送的传送门、传送石、传送羽毛、传送旅店一类的地方使用公共事件:
  14. #           呼叫脚本:$scene = Scene_Teleport.new
  15. #==============================================================================
  16. TOWNS=[]
  17. TOWNS[0]=["123",1,[1,0,5],2]
  18. #==============================================================================
  19. # ■ Window_Teleport
  20. #------------------------------------------------------------------------------
  21. #  处理传送的窗口
  22. #==============================================================================
  23. class Window_Teleport < Window_Selectable
  24.   #--------------------------------------------------------------------------
  25.   # ● 初始化对像
  26.   #--------------------------------------------------------------------------
  27.   def initialize
  28.     super(640,640,64,64)
  29.     self.contents = Bitmap.new(width, height)
  30.     self.opacity = 180
  31.     get_towns
  32.     draw_towns
  33.     @column_max = 1
  34.   end
  35.   #--------------------------------------------------------------------------
  36.   # ● 获取可到达的城镇和窗口大小
  37.   #--------------------------------------------------------------------------
  38.   def get_towns
  39.     @carol3_towns = []
  40.     @width_temp = 0
  41.     @cont_use = false
  42.     for town in TOWNS
  43.       if $game_switches[town[1]]==true
  44.         @carol3_towns.push(town)
  45.         if contents.text_size(town[0]).width >= @width_temp
  46.           @width_temp = contents.text_size(town[0]).width
  47.         end
  48.       end
  49.     end
  50.     @item_max = @carol3_towns.size
  51.     if @item_max == 0
  52.       @carol3_towns[0] = ["现在没有已知的地区可探索!",1,[1,1,1]]
  53.       $game_player.move_up
  54.       @width_temp = contents.text_size(@carol3_towns[0][0]).width
  55.       @item_max = 1
  56.       @cont_use = true
  57.     end
  58.     self.width = [@width_temp+32,416].min
  59.     self.height = [(@item_max+1)*32,360].min
  60.     self.x = (544-self.width)/2
  61.     self.y = (416-self.height)/2
  62.     self.contents = Bitmap.new(width-32,row_max*WLH)
  63.   end
  64.   #--------------------------------------------------------------------------
  65.   # ● 描绘城镇名称
  66.   #--------------------------------------------------------------------------
  67.   def draw_towns
  68.     for i in 0...@carol3_towns.size
  69.       self.contents.draw_text(0,i*WLH,@width_temp,WLH,@carol3_towns[i][0],1)
  70.     end
  71.   end
  72.   #--------------------------------------------------------------------------
  73.   # ● 返回的内容
  74.   #========================================================================
  75.   # ● 地图编号
  76.   #--------------------------------------------------------------------------
  77.   def map_id
  78.     return @carol3_towns[self.index][2][0]
  79.   end
  80.   #--------------------------------------------------------------------------
  81.   # ● 地图x坐标
  82.   #--------------------------------------------------------------------------
  83.   def map_x
  84.     return @carol3_towns[self.index][2][1]
  85.   end      
  86.   #--------------------------------------------------------------------------
  87.   # ● 地图y坐标
  88.   #--------------------------------------------------------------------------
  89.   def map_y
  90.     return @carol3_towns[self.index][2][2]
  91.   end
  92.   #--------------------------------------------------------------------------
  93.   # ● 角色朝向
  94.   #--------------------------------------------------------------------------
  95.   def map_direction
  96.     return @carol3_towns[self.index][3]
  97.   end
  98.   #--------------------------------------------------------------------------
  99.   # ● 判断是否一个城市都没有
  100.   #--------------------------------------------------------------------------
  101.   def cant_use?
  102.     return @cont_use
  103.   end
  104. end
  105. #==============================================================================
  106. # ■ Scene_Teleport
  107. #------------------------------------------------------------------------------
  108. #  处理传送执行的类
  109. #==============================================================================
  110. class Scene_Teleport < Scene_Base
  111.   #--------------------------------------------------------------------------
  112.   # ● 主处理
  113.   #--------------------------------------------------------------------------
  114.   def start
  115.     Sound.play_decision
  116.     @carol3_trans_white = false
  117.     @carol3_map_sprite = Spriteset_Map.new
  118.     @carol3_teleport_window = Window_Teleport.new
  119.     if @carol3_teleport_window.cant_use?
  120.       @carol3_teleport_window.index = -1
  121.     else
  122.       @carol3_teleport_window.index = 0
  123.     end
  124.   end
  125.   
  126.   def terminate
  127.     super
  128.     @carol3_teleport_window.dispose
  129.   end
  130.   
  131.   def update
  132.     super
  133.     @carol3_teleport_window.update
  134.     carol3_update
  135.   end
  136.   
  137.   def update_scene
  138.     @carol3_teleport_window.active = true
  139.     $game_player.reserve_transfer(@carol3_teleport_window.map_id, @carol3_teleport_window.map_x, @carol3_teleport_window.map_y, @carol3_teleport_window.map_direction)
  140.     $game_map.autoplay      
  141.     $scene = Scene_Map.new
  142.   end
  143.   #--------------------------------------------------------------------------
  144.   # ● 刷新画面
  145.   #--------------------------------------------------------------------------
  146.   def carol3_update
  147.     @carol3_teleport_window.update
  148.     if Input.trigger?(Input::B)
  149.       Sound.play_cancel
  150.       $scene = Scene_Map.new
  151.       $game_player.move_up
  152.       return
  153.     end
  154.     if Input.trigger?(Input::C)
  155.       if @carol3_teleport_window.index == -1
  156.         Sound.play_cancel
  157.         $scene = Scene_Map.new
  158.         return
  159.       else        
  160.         Audio.se_play("Audio/SE/" + "Teleport",100,100)
  161.         update_scene        
  162.         return
  163.       end
  164.     end   
  165.   end
  166. end

  167. #==============================================================================
  168. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  169. #==============================================================================
复制代码

作者: 火鸡三毛老大    时间: 2008-3-23 19:01
脚本11    详尽任务显示界面 v2.1
  1. =begin
  2. --------------------------------------------------------------------------
  3. 详尽任务显示界面 v2.1
  4. --------------------------------------------------------------------------
  5. By 叶子

  6. 日期与更新
  7. 3-29-2006 -v1.0
  8. 4-3-2006  -v2.0
  9. -可以改变文字颜色,显示变量,显示图标,显示图片
  10. -大幅简化了编写任务内容的过程,加入自动换行功能
  11. -精简了窗口,使其还可以用作图鉴系统、日记系统等等
  12. 4-6-2006  -v2.1
  13. -增加了获得全部任务与删除全部任务命令
  14. -改正通假字,修改了示例任务3
  15. --------------------------------------------------------------------------
  16. 改版 by ChenWei

  17. 修改部分:
  18. - 将XP的一些脚本改成VX版的
  19. - 将窗口大小缩放成VX的大小(依照比例)
  20. - 将一些会变成很长的脚本精简
  21.    (如:用$game_pary.item_no(物品编号)
  22.         代替原来的$game_party.item_number($data_items[物品编号]) = ="好长)
  23. - 精简一些代码,将 Window_Task_Name 和Window_Task 重合部分用继承方式精简
  24. - 依照VX的 RGSS2 规范编写 Scene_Task
  25. - 增加使用16进位颜色代码变换字体颜色功能
  26. - 修改Scene_Menu的召唤方式,使脚本新手使用起来更容易

  27. --------------------------------------------------------------------------
  28. 顾名思义,就是显示任务数据的界面
  29. 任务数据要预先在这里设定好
  30. 下载范例工程,能帮助你更快更好地掌握使用方法
  31. --------------------------------------------------------------------------
  32. 使用方法:

  33. 1、召唤任务显示界面:$scene = Scene_Task.new

  34. 可以在事件中的「脚本」指令加入这段东西,
  35. 又或者修改 Scene_Menu 来增加一个显示任务的选项。
  36. 如果是修改 Scene_Menu 增加選項的話,请使用

  37.     $scene = Scene_Task.new(任务在菜单的index)

  38. 例如:$scene = Scene_Task.new(7)

  39. 2、设置任务数据

  40.   2.1、相关内容解析
  41.   
  42.   所有内容文字必须用双引号括住
  43.   
  44.   名称:任务的名字(显示在左边窗口中),大小为172×32,如果全部为文字的话,
  45.         够放九个全角字符
  46.         
  47.   简介:任务的介绍(显示在右边窗口中),宽308,高不限
  48.   
  49.         文字可以自动换行
  50.   
  51.    2.1.1、控制码解析
  52.    
  53.    名称和内容均可用控制码,注意两条反斜杠都要打!
  54.    
  55.    \\v[n] 显示n号变量
  56.    \\c[n] 改变字体颜色。n 为窗口外观图片中所设定的颜色,可为0-31

  57.    \\c[HRRGGBB]设定字体颜色为RRGGBB色, RRGGBB 为16进位颜色代码
  58.    \\n[i] 显示i号角色名字
  59.    \\i[图标编号] 显示图标    # 图标编号为图标在IconSet里的顺序
  60.    \\p[文件名] 显示图片
  61.    
  62.    2.1.2、高级:内嵌表达式
  63.         
  64.    请参考帮助-脚本入门-字符串-内嵌表达式相关内容。
  65.    它可以用来在任务的名称和简介那里显示变量。
  66.    常用的表达式(注意不要漏了井号和大括号):
  67.    #{$game_variables[n]}       ——插入n号变量的值
  68.    #{$game_party.item_no(n)}  —— 插入持有n号物品数量
  69.                                   同理还有 weapon_no,armor_no

  70.    还可以预先定义一个变量,再插入(例子见示例任务3-灵魂线)
  71.    
  72.   2.2、注意事项
  73.   
  74.    2.2.1、括号、逗号和双引号 [ ] , " 必须使用半角符号(英文输入),
  75.           引号内的内容则没有关系
  76.          
  77.    2.2.2、单引号 ' 和双引号 " 的区别:
  78.           为了不出错误,全部用双引号吧!当然如果你对Ruby很熟悉,那就没所谓了
  79.   
  80.   2.3、开始设置吧!
  81.   从107行开始设置任务数据,可以参考示例任务来设置,请仔细阅读附加讲解
  82.   
  83. 3、接受任务

  84. 事件里的「脚本」指令输入:get_task(任务ID)
  85. 例如 get_task(1) 就是接受1号任务

  86.   3.1、获得全部任务
  87.   
  88.   事件里的「脚本」指令输入:get_all_task
  89.   这个功能基本上是用来在编写好所有任务数据后测试排版的
  90.   

  91. 4、完成/删除任务

  92. 事件里的「脚本」指令输入:finish_task(任务ID)
  93. 例如 finish_task(1) 就是完成1号任务

  94. 注意:本脚本不负责完成任务后的奖励之类的东西,请自行在事件中判断,
  95.        这里的完成任务指的是从任务列表中删去此任务

  96.   4.1、删除全部任务
  97.   
  98.   事件里的「脚本」指令输入:finish_all_task
  99.   作为获得全部任务的对应功能存在,似乎不会怎么用到
  100. =end
  101. class Game_Party
  102.   #--------------------------------------------------------------------------
  103.   # ● 设置任务资料
  104.   #--------------------------------------------------------------------------
  105.   def get_tasks_info
  106.     @tasks_info = []
  107.    
  108.     #-讲解-
  109.     # 三个示例任务由浅入深,其实只要看懂第一个就可以使用了。
  110.     # 任务的写法多种多样,不限于这三个任务的方法
  111.     #----
  112.     #-----------------------------
  113.     # 示例任务1:沙漠中的五叶花
  114.     #-----------------------------
  115.     名称 = "\\c[6]沙漠中的五叶花"
  116.     #-讲解-
  117.     # 注意!脚本编辑器的变色功能并不是非常完善,所以换行后字变黑了,但仍然是字符
  118.     # 串的一部分,所以不要忘记在内容最后打一个双引号
  119.     # 按回车是强制换行
  120.     #----
  121.     简介 = "\\c[6]沙漠中的五叶花

  122. \\c[9]任务目标:
  123. 获得5朵五叶花,交给西露达

  124. \\c[0]五叶花数目:\\v[1]/5

  125. 西露达:
  126. \\c[Hff0000]人家等着你的花哦~"
  127.     #-讲解-
  128.     # 每个任务最后一定要加上:
  129.     # @tasks_info[任务ID] = Game_Task.new(名称, 简介)
  130.     # 接受任务和完成任务都是用这个任务ID来索引
  131.     #----
  132.     @tasks_info[1] = Game_Task.new(名称, 简介)
  133.    
  134.     #-----------------------------
  135.     # 示例任务2:克萝莉亚的药瓶
  136.     #-----------------------------
  137.     名称 = "\\c[6]克萝莉亚的药瓶"
  138.     #-讲解-
  139.     # 这里使用了字符串相加,例如 s = "a" + "b" ,s 就是 "ab"
  140.     # 还用了内嵌表达式,$game_party.item_number(38) 就是38号物品的数量
  141.     #----
  142.     简介 = 名称 + "
  143.    
  144. \\c[9]任务目标:
  145. 问克萝莉亚要一个药瓶,交给西露达

  146. \\c[0]药瓶:#{$game_party.item_no(1)}/1

  147. 西露达:
  148. 克萝莉亚就在西边的屋子里"
  149.     @tasks_info[2] = Game_Task.new(名称, 简介)
  150.    
  151.     #-----------------------------
  152.     # 示例任务3:灵魂线
  153.     #-----------------------------
  154.     #-讲解-
  155.     # 这里用了条件判断,当3号变量大于等于1时,加上“完成”字样,同时变色
  156.     #----
  157.     if $game_variables[3] >= 1
  158.       名称 = "\\c[8]灵魂线(完成)"
  159.       item = "\\c[8]灵魂线:#{$game_variables[3]}/1 (完成)"
  160.     else
  161.       名称 = "\\c[2]灵魂线"
  162.       item = "\\c[0]灵魂线:#{$game_variables[3]}/1"
  163.     end
  164.     #-讲解-
  165.     # 预先定义变量,用内嵌表达式插入
  166.     # 最后用了显示图标
  167.     #----
  168.     简介 = "#{名称}
  169.    
  170. \\c[9]任务目标:
  171. 找到埋起来的灵魂线,交给克萝莉亚

  172. #{item}

  173. \\c[0]克萝莉亚:
  174. 灵魂线就埋在其中一棵树下,给我好好找\\i[157]"
  175.     @tasks_info[3] = Game_Task.new(名称, 简介)
  176.    
  177.   end
  178. end
  179. #==============================================================================
  180. # ■ Interpreter
  181. #------------------------------------------------------------------------------
  182. #  执行事件命令的解释器。本类在 Game_System 类
  183. # 与 Game_Event 类的内部使用。
  184. #==============================================================================

  185. class Game_Interpreter
  186.   #--------------------------------------------------------------------------
  187.   # ● 接受任务
  188.   #--------------------------------------------------------------------------
  189.   def get_task(id)
  190.     task = $game_party.tasks_info[id]
  191.     return true if (task.nil? or $game_party.current_tasks.include?(task.id))
  192.     $game_party.current_tasks.unshift(task.id)
  193.     return true
  194.   end
  195.   #--------------------------------------------------------------------------
  196.   # ● 获得全部任务
  197.   #--------------------------------------------------------------------------
  198.   def get_all_task
  199.     # 清空当前任务
  200.     $game_party.current_tasks.clear
  201.     for task in $game_party.tasks_info
  202.       next if task.nil?
  203.       $game_party.current_tasks.unshift(task.id)
  204.     end
  205.     return true
  206.   end
  207.   #--------------------------------------------------------------------------
  208.   # ● 完成/放弃任务
  209.   #--------------------------------------------------------------------------
  210.   def finish_task(id)
  211.     task = $game_party.tasks_info[id]
  212.     return true if task.nil?
  213.     $game_party.current_tasks.delete(task.id)
  214.     return true
  215.   end
  216.   #--------------------------------------------------------------------------
  217.   # ● 删除全部任务
  218.   #--------------------------------------------------------------------------
  219.   def finish_all_task
  220.     $game_party.current_tasks.clear
  221.     return true
  222.   end
  223. end

  224. #==============================================================================
  225. # ■ Game_Party
  226. #------------------------------------------------------------------------------
  227. #  处理同伴的类。包含金钱以及物品的信息。本类的实例
  228. # 请参考 $game_party。
  229. #==============================================================================

  230. class Game_Party
  231.   #--------------------------------------------------------------------------
  232.   # ● 定义实例变量
  233.   #--------------------------------------------------------------------------
  234.   attr_writer     :latest_task                  # 上次查看的任务
  235.   #--------------------------------------------------------------------------
  236.   # ● 取得任务资料
  237.   #--------------------------------------------------------------------------
  238.   def tasks_info
  239.     if @tasks_info.nil?
  240.       get_tasks_info
  241.     end
  242.     return @tasks_info
  243.   end
  244.   #--------------------------------------------------------------------------
  245.   # ● 取得当前任务
  246.   #--------------------------------------------------------------------------
  247.   def current_tasks
  248.     if @current_tasks.nil?
  249.       @current_tasks = []
  250.     end
  251.     return @current_tasks
  252.   end
  253.   #--------------------------------------------------------------------------
  254.   # ● 上次查看的任务
  255.   #--------------------------------------------------------------------------
  256.   def latest_task
  257.     if !current_tasks.include?(@latest_task)
  258.       @latest_task = current_tasks[0]
  259.     end
  260.     return @latest_task
  261.   end
  262. end

  263. #==============================================================================
  264. # ■ Game_Task
  265. #------------------------------------------------------------------------------
  266. #  处理任务的类。包含任务的信息。
  267. #==============================================================================

  268. class Game_Task
  269.   attr_accessor   :name                   # 名称
  270.   attr_accessor   :briefing               # 简介
  271.   def initialize(name, briefing)
  272.     @name = name
  273.     @briefing = briefing
  274.   end
  275.   def height
  276.     text = @briefing.clone
  277.     x = 0
  278.     y = 64
  279.     min_y = 0
  280.     # 限制文字处理
  281.     begin
  282.       last_text = text.clone
  283.       text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  284.     end until text == last_text
  285.     text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  286.       $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  287.     end
  288.     # 为了方便、将 "\\\\" 变换为 "\000"
  289.     text.gsub!(/\\\\/) { "\000" }
  290.     # "\C" 变为 "\001"
  291.     text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  292.     # "\I" 变为 "\002"
  293.     text.gsub!(/\\[Ii]/) { "\002" }
  294.     # "\P" 变为 "\003"
  295.     text.gsub!(/\\[Pp]/) { "\003" }
  296.     # c 获取 1 个字 (如果不能取得文字就循环)
  297.     while ((c = text.slice!(/./m)) != nil)
  298.       # \\ 的情况下
  299.       if c == "\000"
  300.         # 还原为本来的文字
  301.         c = "\\"
  302.       end
  303.       # \C[n] 的情况下
  304.       if c == "\001"
  305.         # 更改文字色
  306.         text.sub!(/\[([0-9a-zA-Z]+)\]/, "")
  307.         # 下面的文字
  308.         next
  309.       end
  310.       # 图标的情况下
  311.       if c == "\002"
  312.         icon_name = ''
  313.         while ((cha = text.slice!(/./m)) != ']')
  314.           next if cha == '['
  315.           icon_name += cha
  316.         end
  317.         if x + 24 > 368
  318.           x = 0
  319.           y += [24, min_y].max
  320.           min_y = 0
  321.         end
  322.         x += 28
  323.         next
  324.       end
  325.       # 图片的情况下
  326.       if c == "\003"
  327.         pic_name = ''
  328.         while ((cha = text.slice!(/./m)) != ']')
  329.           next if cha == '['
  330.           pic_name += cha
  331.         end
  332.         pic = Cache.picture(pic_name)
  333.         if x + pic.width > 368
  334.           x = 0
  335.           y += [24, min_y].max
  336.           min_y = 0
  337.         end
  338.         x += pic.width
  339.         min_y = [pic.height, 24].max
  340.         next
  341.       end
  342.       # 另起一行文字的情况下
  343.       if c == "\n"
  344.         y += [24, min_y].max
  345.         min_y = 0
  346.         x = 0
  347.         # 下面的文字
  348.         next
  349.       end
  350.       # 自动换行处理
  351.       if x + 22 > 368
  352.         y += [24, min_y].max
  353.         min_y = 0
  354.         x = 0
  355.       end
  356.       # x 为要描绘文字的加法运算
  357.       x += 22
  358.     end
  359.     return (y + [24, min_y].max)
  360.   end
  361.   def id
  362.     return $game_party.tasks_info.index(self)
  363.   end
  364. end

  365. #==============================================================================
  366. # ■ Window_Task_Name
  367. #------------------------------------------------------------------------------
  368. #  任务名称显示窗口。
  369. #==============================================================================

  370. class Window_Task_Name < Window_Selectable
  371.   #--------------------------------------------------------------------------
  372.   # ● 初始化对像
  373.   #--------------------------------------------------------------------------
  374.   def initialize(tasks)
  375.     super(0, 0, 204, 416)
  376.     @tasks = []
  377.     for id in tasks
  378.       @tasks.push($game_party.tasks_info[id])
  379.     end
  380.     @item_max = tasks.size
  381.     self.contents = Bitmap.new(
  382.     self.width - 32, @item_max == 0 ? 32 : @item_max * 32)
  383.     refresh
  384.     self.index = 0
  385.   end
  386.   #--------------------------------------------------------------------------
  387.   # ● 刷新
  388.   #--------------------------------------------------------------------------
  389.   def refresh
  390.     self.contents.clear
  391.     if @tasks != []
  392.       for task in @tasks
  393.         draw_item(task)
  394.       end
  395.     else
  396.       draw_blank
  397.     end
  398.   end
  399.   #--------------------------------------------------------------------------
  400.   # ● 描绘项目
  401.   #--------------------------------------------------------------------------
  402.   def draw_item(task)
  403.     text = task.name.clone
  404.     y = @tasks.index(task) * WLH
  405.     chenge_special_character(text, 0, y)
  406.   end
  407.   #--------------------------------------------------------------------------
  408.   # ● 描绘空行
  409.   #--------------------------------------------------------------------------
  410.   def draw_blank
  411.     self.contents.font.color = Color.new(255, 255, 255, 128)
  412.     rect = Rect.new(4, 0, self.contents.width - 8, 32)
  413.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  414.     self.contents.draw_text(rect, '当前没有任何任务')
  415.   end
  416.   #--------------------------------------------------------------------------
  417.   # ● 获取任务
  418.   #--------------------------------------------------------------------------
  419.   def task
  420.     return @tasks[self.index]
  421.   end
  422. end
  423.   
  424. #==============================================================================
  425. # ■ Window_Task
  426. #------------------------------------------------------------------------------
  427. #  任务内容显示窗口。
  428. #==============================================================================

  429. class Window_Task < Window_Base
  430.   #--------------------------------------------------------------------------
  431.   # ● 初始化对像
  432.   #--------------------------------------------------------------------------
  433.   def initialize(task_id)
  434.     super(204, 0, 340, 416)
  435.     refresh(task_id)
  436.   end
  437.   #--------------------------------------------------------------------------
  438.   # ● 刷新内容
  439.   #--------------------------------------------------------------------------
  440.   def refresh(task_id)
  441.     self.oy = 0
  442.     self.visible = true
  443.     return if task_id.nil?
  444.     task = $game_party.tasks_info[task_id]
  445.     if !task.nil?
  446.       self.contents = Bitmap.new(self.width - 32, task.height)
  447.     else
  448.       self.contents = Bitmap.new(self.width - 32, self.height - 32)
  449.       return
  450.     end
  451.     self.contents.font.color = normal_color
  452.     # 描绘任务内容
  453.     draw_task_info(task)
  454.   end
  455.   #--------------------------------------------------------------------------
  456.   # ● 描绘任务内容
  457.   #--------------------------------------------------------------------------
  458.   def draw_task_info(task)
  459.     self.contents.font.color = normal_color
  460.     # 描绘任务简介
  461.     chenge_special_character(task.briefing.clone)
  462.   end
  463. end

  464. class Window_Base < Window
  465.   def chenge_special_character(text, x=0, y=0)
  466.     # 记录换行时y坐标最小加值
  467.     min_y = 0
  468.     # 限制文字处理
  469.     begin
  470.       last_text = text.clone
  471.       text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  472.     end until text == last_text
  473.     text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  474.       $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  475.     end
  476.     # 为了方便、将 "\\\\" 变换为 "\000"
  477.     text.gsub!(/\\\\/) { "\000" }
  478.     # "\C" 变为 "\001"
  479.     text.gsub!(/\\[Cc]\[([0-9a-zA-Z]+)\]/)  { "\001[#{$1}]" }
  480.     # "\I" 变为 "\002"
  481.     text.gsub!(/\\[Ii]/) { "\002" }
  482.     # "\P" 变为 "\003"
  483.     text.gsub!(/\\[Pp]/) { "\003" }
  484.     # c 获取 1 个字 (如果不能取得文字就循环)
  485.     while ((c = text.slice!(/./m)) != nil)
  486.       # \\ 的情况下
  487.       if c == "\000"
  488.         # 还原为本来的文字
  489.         c = "\\"
  490.       end
  491.       # \C[n] 的情況下
  492.       if c == "\001"
  493.         # 更改文字色
  494.         text.sub!(/\[([0-9a-zA-Z]+)\]/, "")
  495.         # 如果是设定RGB颜色
  496.         if $1[0,1]=="H"
  497.           # 先拷贝一下文字
  498.           c=$1.dup
  499.           # 分3段分别取出R,G,B颜色
  500.           c.sub!(/H([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})/, "")
  501.           # 设定文字颜色
  502.           self.contents.font.color = Color.new($1.to_i(16), $2.to_i(16), $3.to_i(16))
  503.         else
  504.           color = $1.to_i
  505.           if color >= 0 and color <= 31
  506.             self.contents.font.color = text_color(color)
  507.           elsif color == 32
  508.             self.contents.font.color = disabled_color
  509.           elsif color == 33
  510.             self.contents.font.color = system_color
  511.           end
  512.         end
  513.         # 下面的文字
  514.         next
  515.       end
  516.       # 图标的情况下
  517.       if c == "\002"
  518.         icon_name = ''
  519.         while ((cha = text.slice!(/./m)) != ']')
  520.           next if cha == '['
  521.           icon_name += cha
  522.         end
  523.         if x + 24 > self.contents.width
  524.           x = 0
  525.           y += [WLH, min_y].max
  526.           min_y = 0
  527.         end
  528.         draw_icon(icon_name.to_i, x+4, y+4, true)
  529.         x += 28
  530.         next
  531.       end
  532.       # 图片的情况下
  533.       if c == "\003"
  534.         pic_name = ''
  535.         while ((cha = text.slice!(/./m)) != ']')
  536.           next if cha == '['
  537.           pic_name += cha
  538.         end
  539.         pic = Cache.picture(pic_name)
  540.         if x + pic.width > self.contents.width
  541.           x = 0
  542.           y += [WLH, min_y].max
  543.           min_y = 0
  544.         end
  545.         self.contents.blt(x + 4, y, pic, Rect.new(0, 0, pic.width, pic.height))
  546.         x += pic.width
  547.         min_y = [pic.height, WLH].max
  548.         next
  549.       end
  550.       # 另起一行文字的情况下
  551.       if c == "\n"
  552.         y += [WLH, min_y].max
  553.         min_y = 0
  554.         x = 0
  555.         # 下面的文字
  556.         next
  557.       end
  558.       # 自动换行处理
  559.       if x + self.contents.text_size(c).width > self.contents.width
  560.         y += [WLH, min_y].max
  561.         min_y = 0
  562.         x = 0
  563.       end
  564.       # 描绘文字
  565.       self.contents.draw_text(4 + x, y, 40, WLH, c)
  566.       # x 为要描绘文字的加法运算
  567.       x += self.contents.text_size(c).width
  568.     end
  569.   end
  570. end

  571. class Game_Party < Game_Unit
  572.   def item_no(n)
  573.     return item_number($data_items[n])
  574.   end
  575.   def weapon_no(n)
  576.     return item_number($data_weapons[n])
  577.   end
  578.   def armor_no(n)
  579.     return item_number($data_armors[n])
  580.   end
  581. end

  582. #==============================================================================
  583. # ■ Scene_Task
  584. #------------------------------------------------------------------------------
  585. #  处理任务画面的类。
  586. #==============================================================================

  587. class Scene_Task < Scene_Base
  588.   def initialize(index=nil)
  589.     @menu_index = index
  590.   end
  591.   #--------------------------------------------------------------------------
  592.   # ● 主处理
  593.   #--------------------------------------------------------------------------
  594.   def start
  595.     # 刷新任务资料
  596.     $game_party.get_tasks_info
  597.     # 生成任务名称窗口
  598.     @task_names_window = Window_Task_Name.new($game_party.current_tasks)
  599.     @task_names_window.active = true
  600.     if $game_party.current_tasks != []
  601.       @task_names_window.index = $game_party.current_tasks.index($game_party.latest_task)
  602.     end
  603.     # 生成任务内容窗口
  604.     @task_info_window = Window_Task.new($game_party.latest_task)
  605.     @task_info_window.active = true
  606.   end

  607.   def terminate
  608.     # 释放窗口
  609.     @task_names_window.dispose
  610.     @task_info_window.dispose
  611.   end
  612.   #--------------------------------------------------------------------------
  613.   # ● 刷新画面
  614.   #--------------------------------------------------------------------------
  615.   def update
  616.     # 刷新窗口
  617.     @task_names_window.update
  618.     @task_info_window.update
  619.     update_task_names_window
  620.   end
  621.   #--------------------------------------------------------------------------
  622.   # ● 刷新任务名称窗口
  623.   #--------------------------------------------------------------------------
  624.   def update_task_names_window
  625.     # 按下 B 键的情况下
  626.     if Input.trigger?(Input::B)
  627.       # 演奏取消 SE
  628.       Sound.play_cancel
  629.       # 这里设置返回的场景,返回地图是Scene_Map.new,菜单是Scene_Menu.new(任务界面index)
  630.       if @menu_index == nil
  631.         $scene = Scene_Map.new
  632.       else
  633.         $scene = Scene_Menu.new(@menu_index)
  634.       end
  635.       return
  636.     end
  637.     # 按下 C 键的情况下
  638.     if Input.trigger?(Input::C)
  639.       # 无任务可显示的话
  640.       if @task_names_window.task == nil
  641.         # 演奏冻结 SE
  642.         Sound.play_buzzer
  643.         return
  644.       end
  645.       # 如果光标没有移动的话,翻页
  646.       if $game_party.latest_task == @task_names_window.task.id
  647.         if @task_info_window.oy + @task_info_window.height - 32 > @task_info_window.contents.height
  648.           @task_info_window.oy = 0
  649.         else
  650.           @task_info_window.oy += 480-32
  651.         end
  652.         if @task_info_window.contents.height > @task_info_window.height - 32
  653.           # 演奏翻页 SE
  654.           Sound.se_play(CHANGE_PAGE_SE)
  655.         end
  656.       else
  657.         @task_info_window.refresh(@task_names_window.task.id)
  658.         $game_party.latest_task = @task_names_window.task.id
  659.         # 演奏确定 SE
  660.         Sound.play_decision
  661.       end
  662.     end
  663.   end
  664. end
复制代码

作者: 火鸡三毛老大    时间: 2008-3-23 19:02
脚本12   地图名显示 修改过
  1. #==============================================================================
  2. # ■ Window_MapName
  3. #==============================================================================

  4. class Window_MapName < Window_Base
  5. #--------------------------------------------------------------------------
  6. # ● 初始化
  7. #--------------------------------------------------------------------------
  8. def initialize
  9.    @map_id = $game_map.map_id
  10.    super(0, 0, 182, 52)
  11.    self.contents.font.size = 20
  12.    self.z = 151
  13.    refresh
  14. end
  15. #--------------------------------------------------------------------------
  16. # ● 刷新
  17. #--------------------------------------------------------------------------
  18. def refresh
  19.    self.opacity = 255
  20.    self.contents_opacity = 255
  21.    name = $data_mapinfos[@map_id].name
  22.    width = self.contents.text_size(name).width
  23.    height = self.contents.text_size(name).height
  24.    self.width = width + 32
  25.    self.height = height + 32
  26.    self.contents = Bitmap.new(width, height)
  27.    self.contents.font.size = 20
  28.    self.x = (Graphics.width - self.width) / 2
  29.    self.y = (Graphics.height - self.height) / 2
  30.    self.contents.font.color = system_color
  31.    self.contents.draw_text(0, 0, width, 20, name, 1)
  32. end
  33. #--------------------------------------------------------------------------
  34. # ● 更新
  35. #--------------------------------------------------------------------------
  36. def update
  37.    if $game_map.map_id != @map_id
  38.      @map_id = $game_map.map_id
  39.      refresh
  40.      self.opacity = 255
  41.      self.contents_opacity = 255
  42.    end
  43.    return if self.opacity == 0
  44.    self.opacity -= 5
  45.    self.contents_opacity -= 5
  46. end

  47. end

  48. class Scene_Title < Scene_Base
  49. #--------------------------------------------------------------------------
  50. # ● 数据库载入
  51. #--------------------------------------------------------------------------
  52. alias old_ld load_database
  53. def load_database
  54.    old_ld
  55.    $data_mapinfos       = load_data("Data/MapInfos.rvdata")
  56. end
  57. end

  58. class Scene_Map < Scene_Base
  59. #--------------------------------------------------------------------------
  60. # ● 开始
  61. #--------------------------------------------------------------------------
  62. alias old_start start
  63. def start
  64.    old_start
  65.    @mapname_window = Window_MapName.new
  66. end
  67. #--------------------------------------------------------------------------
  68. # ● 结束
  69. #--------------------------------------------------------------------------
  70. alias old_ter terminate
  71. def terminate
  72.    old_ter
  73.    @mapname_window.dispose
  74. end
  75. #--------------------------------------------------------------------------
  76. # ● 更新
  77. #--------------------------------------------------------------------------
  78. alias old_update update
  79. def update
  80.    old_update
  81.    @mapname_window.update
  82. end
  83. end
复制代码

作者: 火鸡三毛老大    时间: 2008-3-23 19:04
脚本 13     升级手动加点
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================

  4. # 脚本使用设定:

  5. LEVEL_UP_POINT = 5  # 每升一级所增加的点数
  6. LEVEL_UP_VARIABLE = 100  # 储存角色点数的变量编号与角色id编号的差值
  7.                          # 默认情况 = 100,
  8.                          # 则是数据库里1号角色的加点数存于101号变量
  9.                          # 3号角色的加点数存于103号变量。
  10.                          # 你可以直接操作变量赠与角色可分配点数

  11. # 每增加一次点数,各项能力值的变化:357-410行
  12.                         
  13. # 使用方法介绍:

  14. # 本脚本不会取代原来的升级自动加点 也就是说,默认的升级还在,但可以用这个功能手动追加点数。
  15. # 如果你想纯粹使用手动加点(而升级不提升能力),只要把数据库中角色升级能力,
  16. # 1-99级全部等于一个相同数值就行了。

  17. # 呼唤加点场景的方法:$scene = Scene_Lvup.new(角色编号,返回菜单编号)。
  18. # 默认都是0号

  19. # 加点场景中,page up,page down换人,如果想加点完毕后返回地图,
  20. # 464行$scene = Scene_Menu.new(0)改为$scene = Scene_Map.new

  21. #==============================================================================
  22. # ■ Window_Command
  23. #------------------------------------------------------------------------------
  24. #  一般的命令选择行窗口。(追加定义)
  25. #==============================================================================
  26. class Window_Command < Window_Selectable
  27.   #--------------------------------------------------------------------------
  28.   # ● 项目有效化
  29.   #     index : 项目编号
  30.   #--------------------------------------------------------------------------
  31.   def able_item(index)
  32.     draw_item(index, normal_color)
  33.   end
  34. end
  35. #==============================================================================
  36. # ■ Game_Actor
  37. #------------------------------------------------------------------------------
  38. #  处理角色的类。(再定义)
  39. #==============================================================================

  40. class Game_Actor < Game_Battler
  41.   def level_up
  42.     @level += 1
  43.     $game_variables[self.id + LEVEL_UP_VARIABLE] += LEVEL_UP_POINT
  44.     for learning in self.class.learnings
  45.       learn_skill(learning.skill_id) if learning.level == @level
  46.     end
  47.   end
  48. end
  49. #==============================================================================
  50. # ■ Window_Base
  51. #------------------------------------------------------------------------------
  52. #  游戏中全部窗口的超级类(追加定义)
  53. #==============================================================================
  54. class Window_Base < Window
  55.   #--------------------------------------------------------------------------
  56.   # ● 描绘 HP
  57.   #     actor : 角色
  58.   #     x     : 描画目标 X 坐标
  59.   #     y     : 描画目标 Y 坐标
  60.   #     width : 描画目标的宽
  61.   #--------------------------------------------------------------------------
  62.   def draw_actor_hp_lvup(actor, x, y)
  63.     self.contents.font.color = system_color
  64.     self.contents.draw_text(x , y, 96, 32, "最大" + Vocab::hp)
  65.     if $temp_hp == 0
  66.       self.contents.font.color = normal_color
  67.       self.contents.draw_text(x + 120 , y, 48, 32, actor.maxhp.to_s, 2)
  68.     else
  69.       maxhp = actor.maxhp + $temp_hp
  70.       self.contents.font.color = Color.new(255, 128, 128, 255)
  71.       self.contents.draw_text(x + 120 , y, 48, 32, maxhp.to_s ,2)
  72.       self.contents.font.color = normal_color      
  73.       self.contents.draw_text(x + 155, y, 36, 32, "( ", 2)
  74.       if $temp_hp >=0
  75.         self.contents.font.color = Color.new(255, 128, 128, 255)
  76.         self.contents.draw_text(x + 155, y, 36, 32, " +",2)
  77.       else
  78.         self.contents.font.color = Color.new(255,255,0,255)
  79.         self.contents.draw_text(x + 155, y, 36, 32, " -",2)
  80.       end
  81.       self.contents.draw_text(x + 200, y, 36, 32, $temp_hp.to_s, 2)
  82.       self.contents.font.color = normal_color
  83.       self.contents.draw_text(x + 215, y, 36, 32, ")", 2)
  84.     end
  85.   end
  86.   #--------------------------------------------------------------------------
  87.   # ● 描绘 MP
  88.   #     actor : 角色
  89.   #     x     : 描画目标 X 坐标
  90.   #     y     : 描画目标 Y 坐标
  91.   #     width : 描画目标的宽
  92.   #--------------------------------------------------------------------------
  93.   def draw_actor_mp_lvup(actor, x, y)
  94.     self.contents.font.color = system_color
  95.     self.contents.draw_text(x , y, 96, 32, "最大" + Vocab::mp)
  96.     if $temp_mp == 0
  97.       self.contents.font.color = normal_color
  98.       self.contents.draw_text(x + 120 , y, 48, 32, actor.maxmp.to_s, 2)
  99.     else
  100.       maxmp = actor.maxmp + $temp_mp
  101.       self.contents.font.color = Color.new(255, 128, 128, 255)
  102.       self.contents.draw_text(x + 120 , y, 48, 32, maxmp.to_s ,2)
  103.       self.contents.font.color = normal_color      
  104.       self.contents.draw_text(x + 155, y, 36, 32, "( ", 2)
  105.       if $temp_mp >=0
  106.         self.contents.font.color = Color.new(255, 128, 128, 255)
  107.         self.contents.draw_text(x + 155, y, 36, 32, " +",2)
  108.       else
  109.         self.contents.font.color = Color.new(255,255,0,255)
  110.         self.contents.draw_text(x + 155, y, 36, 32, " -",2)
  111.       end
  112.       self.contents.draw_text(x + 200, y, 36, 32, $temp_mp.to_s, 2)
  113.       self.contents.font.color = normal_color
  114.       self.contents.draw_text(x + 215, y, 36, 32, ")", 2)
  115.     end
  116.   end
  117.   #--------------------------------------------------------------------------
  118.   # ● 描绘能力值
  119.   #     actor : 角色
  120.   #     x     : 描画目标 X 坐标
  121.   #     y     : 描画目标 Y 坐标
  122.   #     type  : 能力值种类 (0~4)
  123.   #--------------------------------------------------------------------------
  124.   def draw_actor_lvup(actor, x, y, type)   
  125.     # 定义数字颜色
  126.     lvup = normal_color
  127.     upcolor = Color.new(255, 128, 128, 255)
  128.     self.contents.font.color = normal_color   
  129.     case type
  130.     when 0
  131.       parameter_name = Vocab::atk
  132.       parameter_value = actor.atk
  133.       parameter_value_temp = parameter_value + $temp_atk
  134.       if $temp_atk != 0
  135.         lvup = upcolor
  136.         self.contents.draw_text(x + 256, y, 16, 32, "(")
  137.         if $temp_atk >= 0
  138.           self.contents.font.color = lvup
  139.           self.contents.draw_text(x + 272, y, 80, 32, "+",0)
  140.         else
  141.           self.contents.font.color = Color.new(255,255,0,255)
  142.           self.contents.draw_text(x + 272, y, 80, 32, "-",0)
  143.         end        
  144.         self.contents.draw_text(x + 272, y, 80, 32, $temp_atk.abs.to_s,1)
  145.         self.contents.font.color = normal_color
  146.         self.contents.draw_text(x + 272, y, 80, 32, ")", 2)
  147.       end
  148.     when 1
  149.       parameter_name = Vocab::def
  150.       parameter_value = actor.def
  151.       parameter_value_temp = parameter_value + $temp_def
  152.       if $temp_def != 0
  153.         lvup = upcolor
  154.         self.contents.draw_text(x + 256, y, 16, 32, "(")
  155.         if $temp_def >= 0
  156.           self.contents.font.color = lvup
  157.           self.contents.draw_text(x + 272, y, 80, 32, "+",0)
  158.         else
  159.           self.contents.font.color = Color.new(255,255,0,255)
  160.           self.contents.draw_text(x + 272, y, 80, 32, "-",0)
  161.         end        
  162.         self.contents.draw_text(x + 272, y, 80, 32, $temp_def.abs.to_s,1)
  163.         self.contents.font.color = normal_color
  164.         self.contents.draw_text(x + 272, y, 80, 32, ")", 2)
  165.       end
  166.     when 2
  167.       parameter_name = Vocab::agi
  168.       parameter_value = actor.agi
  169.       parameter_value_temp = parameter_value + $temp_agi
  170.       if $temp_agi != 0
  171.         lvup = upcolor
  172.         self.contents.draw_text(x + 256, y, 16, 32, "(")
  173.         if $temp_agi >= 0
  174.           self.contents.font.color = lvup
  175.           self.contents.draw_text(x + 272, y, 80, 32, "+",0)
  176.         else
  177.           self.contents.font.color = Color.new(255,255,0,255)
  178.           self.contents.draw_text(x + 272, y, 80, 32, "-",0)
  179.         end        
  180.         self.contents.draw_text(x + 272, y, 80, 32, $temp_agi.abs.to_s,1)
  181.         self.contents.font.color = normal_color
  182.         self.contents.draw_text(x + 272, y, 80, 32, ")", 2)
  183.       end
  184.     when 3
  185.       parameter_name = Vocab::spi
  186.       parameter_value = actor.spi
  187.       parameter_value_temp = parameter_value + $temp_spi
  188.       if $temp_spi != 0
  189.         lvup = upcolor
  190.         self.contents.draw_text(x + 256, y, 16, 32, "(")
  191.         if $temp_spi >= 0
  192.           self.contents.font.color = lvup
  193.           self.contents.draw_text(x + 272, y, 80, 32, "+",0)
  194.         else
  195.           self.contents.font.color = Color.new(255,255,0,255)
  196.           self.contents.draw_text(x + 272, y, 80, 32, "-",0)
  197.         end        
  198.         self.contents.draw_text(x + 272, y, 80, 32, $temp_spi.abs.to_s,1)
  199.         self.contents.font.color = normal_color
  200.         self.contents.draw_text(x + 272, y, 80, 32, ")", 2)
  201.       end
  202.     when 4
  203.       parameter_name = "剩余点数"
  204.       parameter_value = $point
  205.       if $point != 0
  206.         lvup = upcolor
  207.       end
  208.     end   
  209.     self.contents.font.size = 16 if type == 4
  210.     self.contents.font.color = system_color
  211.     if type != 4 then
  212.       self.contents.draw_text(x, y, 120, 32, parameter_name)
  213.     else
  214.       self.contents.draw_text(x, y, 120, 24, parameter_name)
  215.     end
  216.     self.contents.font.color = normal_color
  217.     if type != 4
  218.       self.contents.draw_text(x + 120, y, 36, 32, parameter_value.to_s)   
  219.     else
  220.       self.contents.draw_text(x + 68, y, 36, 24, parameter_value.to_s)   
  221.     end
  222.     if type != 4
  223.       self.contents.draw_text(x + 150, y, 36, 32, "→")
  224.     end  
  225.     self.contents.font.color = lvup
  226.     self.contents.draw_text(x + 180, y, 60, 32, parameter_value_temp.to_s)
  227.     self.contents.font.color = normal_color        
  228.   end
  229. end

  230. class Window_Lvpoint < Window_Base
  231.   def initialize
  232.     super(0,198,128,58)
  233.     refresh
  234.   end
  235.   def refresh
  236.     self.contents.clear
  237.     draw_actor_lvup(@actor, 0, 0, 4)
  238.   end
  239. end
  240. #==============================================================================
  241. # ■ Window_lvup
  242. #------------------------------------------------------------------------------
  243. #  显示升级状态窗口。
  244. #==============================================================================
  245. class Window_Lvup < Window_Base
  246.   #--------------------------------------------------------------------------
  247.   # ● 初始化对像
  248.   #     actor : 角色
  249.   #--------------------------------------------------------------------------
  250.   def initialize(actor)
  251.     super(0, 0, 416, 256)
  252.     self.contents = Bitmap.new(width - 32, height - 32)
  253.     @actor = actor
  254.     refresh
  255.   end  
  256.   #--------------------------------------------------------------------------
  257.   # ● 刷新
  258.   #--------------------------------------------------------------------------
  259.   def refresh
  260.     self.contents.clear
  261.     draw_actor_graphic(@actor, 30, 80)
  262.     draw_actor_name(@actor, 4, 0)
  263.     draw_actor_class(@actor, 96, 0)
  264.     draw_actor_level(@actor, 224, 0)
  265.     draw_actor_state(@actor, 96, 32)   
  266.     draw_actor_hp_lvup(@actor, 96, 32)
  267.     draw_actor_mp_lvup(@actor, 96, 64)
  268.     draw_actor_lvup(@actor, 4, 96, 0)
  269.     draw_actor_lvup(@actor, 4, 128, 1)
  270.     draw_actor_lvup(@actor, 4, 160, 2)
  271.     draw_actor_lvup(@actor, 4, 192, 3)
  272.   end
  273. end
  274. #==============================================================================
  275. # ■ Window_Help
  276. #------------------------------------------------------------------------------
  277. #  特技及物品的说明、角色的状态显示的窗口。
  278. #==============================================================================
  279. class Window_Lvup_Help < Window_Base
  280.   #--------------------------------------------------------------------------
  281.   # ● 初始化对像
  282.   #--------------------------------------------------------------------------
  283.   def initialize
  284.     super(0, 256, 544, 160)
  285.     self.contents = Bitmap.new(width - 32, height - 32)
  286.     @test = "" #——这个东西用来检测,节约内存专用
  287.   end  
  288.   #--------------------------------------------------------------------------
  289.   # ● 设置文本
  290.   #--------------------------------------------------------------------------
  291.   def lvup_text(text1, text2 = nil, text3 = nil, text4 = nil)
  292.     if @test != text1
  293.       @test = text1
  294.     else
  295.       return
  296.     end   
  297.     self.contents.clear
  298.     self.contents.font.color = normal_color
  299.     self.contents.draw_text(4, 0, self.width - 40, 32, text1)
  300.     if text2 != nil
  301.       self.contents.draw_text(4 , 32, self.width - 40, 32, text2)
  302.     end
  303.     self.contents.font.size -= 4
  304.     if text3 != nil
  305.       self.contents.draw_text(4 , 64, self.width - 40, 32, text3)
  306.     end
  307.     if text4 != nil
  308.       self.contents.draw_text(4 , 96, self.width - 40, 32, text4)
  309.     end
  310.     self.contents.font.size += 4
  311.   end
  312. end
  313. #==============================================================================
  314. # ■ Scene_lvup
  315. #------------------------------------------------------------------------------
  316. #  处理升级画面的类。
  317. #==============================================================================
  318. class Scene_Lvup
  319.   #--------------------------------------------------------------------------
  320.   # ● 初始化对像
  321.   #     actor_index : 角色索引
  322.   #     menu_index : 选项起始位置
  323.   #--------------------------------------------------------------------------
  324.   def initialize(actor_index = 0 , menu_index = 0)
  325.     @actor_index = actor_index
  326.     @menu_index = menu_index
  327.   end
  328.   #--------------------------------------------------------------------------
  329.   # ● 主处理
  330.   #--------------------------------------------------------------------------
  331.   def main
  332.     s1 = "增加体力"
  333.     s2 = "增加"+Vocab::atk
  334.     s3 = "增加"+Vocab::def
  335.     s4 = "增加"+Vocab::agi
  336.     s5 = "增加"+Vocab::spi
  337.     s6 = "确认加点"
  338.     s7 = "点数重置"
  339.     @command_window = Window_Command.new(128, [s1, s2, s3, s4, s5, s6, s7])
  340.     @command_window.index = @menu_index
  341.     # 获取角色
  342.     @actor = $game_party.members[@actor_index]
  343.     # 将角色的剩余点数带入
  344.     $point = $game_variables[@actor.id + LEVEL_UP_VARIABLE]   
  345.     # 初始化临时量
  346.     $temp_atk = 0
  347.     $temp_def = 0
  348.     $temp_agi = 0
  349.     $temp_spi = 0
  350.     $temp_hp = 0
  351.     $temp_mp = 0
  352.     #=========================================================================
  353.     # 特别提示:这些设置也可以使用小数,但是可能出现0值意外错误
  354.     #  (各种编程语言都有这种意外),建议还是使用整数,正负不限
  355.     #=========================================================================
  356.     # 每提升一次力量,提升多少附加能力
  357.     #=========================================================================
  358.     @atk_hp = 5     # 每提升一次力量附加提升多少HP
  359.     @atk_mp = 0     # 每提升一次力量附加提升多少MP
  360.     @atk_def = 0    # 每提升一次力量附加提升多少灵巧
  361.     @atk_agi = 0    # 每提升一次力量附加提升多少速度
  362.     @atk_spi = 0    # 每提升一次力量附加提升多少魔力
  363.     @atk_atk = 1    # 每提升一次力量附加提升多少力量
  364.     #=========================================================================
  365.     # 每提升一次灵巧,提升多少附加能力
  366.     #=========================================================================
  367.     @def_hp = 0     # 每提升一次灵巧附加提升多少HP
  368.     @def_mp = 0     # 每提升一次灵巧附加提升多少MP
  369.     @def_atk = 0    # 每提升一次灵巧附加提升多少力量
  370.     @def_agi = 1    # 每提升一次灵巧附加提升多少速度
  371.     @def_spi = 0    # 每提升一次灵巧附加提升多少魔力
  372.     @def_def = 1    # 每提升一次灵巧附加提升多少灵巧
  373.     #=========================================================================
  374.     # 每提升一次速度,提升多少附加能力
  375.     #=========================================================================
  376.     @agi_hp = 0     # 每提升一次速度附加提升多少HP
  377.     @agi_mp = 0     # 每提升一次速度附加提升多少MP
  378.     @agi_atk = 0    # 每提升一次速度附加提升多少力量
  379.     @agi_def = 1    # 每提升一次速度附加提升多少灵巧
  380.     @agi_spi = 0    # 每提升一次速度附加提升多少魔力
  381.     @agi_agi = 1    # 每提升一次速度附加提升多少速度
  382.     #=========================================================================
  383.     # 每提升一次魔力,提升多少附加能力
  384.     #=========================================================================
  385.     @spi_hp = 0     # 每提升一次魔力附加提升多少HP
  386.     @spi_mp = 10    # 每提升一次魔力附加提升多少MP
  387.     @spi_atk = 0   # 每提升一次魔力附加提升多少力量
  388.     @spi_def = 0   # 每提升一次魔力附加提升多少灵巧
  389.     @spi_agi = 0   # 每提升一次魔力附加提升多少速度
  390.     @spi_spi = 1   # 每提升一次魔力附加提升多少魔力
  391.     #=========================================================================
  392.     # 每提升一次体力,提升多少附加能力
  393.     #=========================================================================
  394.     @hp = 15       # 每提升一次体力提升多少HP
  395.     @mp = 0       # 每提升一次体力提升多少MP
  396.     @hp_atk = 0   # 每提升一次体力提升多少力量
  397.     @hp_def = 0   # 每提升一次体力提升多少速度
  398.     @hp_agi = 0   # 每提升一次体力提升多少灵巧
  399.     @hp_spi = 0   # 每提升一次体力提升多少魔力   
  400.     # 定义说明文字
  401.     @text_hp_sc = "体力可以增加生存的能力,可以延长生存的时间!"
  402.     @text_atk_sc = Vocab::atk + "可以增加物理攻击和物理技能的威力!"
  403.     @text_def_sc = Vocab::def + "可以提高攻击的命中率和必杀!"
  404.     @text_agi_sc = Vocab::agi + "可以提高回避、命中、逃跑成功率!"
  405.     @text_spi_sc = Vocab::spi + "可以提高魔法的效果,可以增加1点魔法!"
  406.     @text_save = "保存分配情况并返回游戏"
  407.     @text_reset= "重新分配能力点数"
  408.     @text_2 = "每增加一次此项能力值,可以提升能力值"
  409.     @text_hp = "最大" + Vocab::hp + "值"
  410.     @text_mp = "最大" + Vocab::mp + "值"
  411.     @text_atk = "最大" + Vocab::atk + "值"
  412.     @text_def = "最大" + Vocab::def + "值"
  413.     @text_agi = "最大" + Vocab::agi + "值"
  414.     @text_spi = "最大" + Vocab::spi + "值"
  415.     s_disable
  416.     # 生成状态窗口
  417.     @lvup_window = Window_Lvup.new(@actor)
  418.     @lvup_window.x = 128
  419.     @lvup_window.y = 0   
  420.     @lvpoint_window = Window_Lvpoint.new
  421.     # 生成帮助窗口并初始化帮助文本
  422.     @help_window = Window_Lvup_Help.new   
  423.     # 执行过渡
  424.     Graphics.transition
  425.     # 主循环
  426.     loop do
  427.       # 刷新游戏画面
  428.       Graphics.update
  429.       # 刷新输入信息
  430.       Input.update
  431.       # 刷新画面
  432.       update
  433.       # 如果切换画面就中断循环
  434.       if $scene != self
  435.         break
  436.       end
  437.     end
  438.     # 准备过渡
  439.     Graphics.freeze
  440.     # 释放窗口
  441.     @lvpoint_window.dispose
  442.     @command_window.dispose
  443.     @lvup_window.dispose
  444.     @help_window.dispose
  445.   end
  446.   #--------------------------------------------------------------------------
  447.   # ● 刷新画面
  448.   #--------------------------------------------------------------------------
  449.   def update
  450.     # 刷新窗口
  451.     @command_window.update
  452.     # 选项明暗判断(因为太消耗资源,所以屏蔽掉了)
  453.     s_disable
  454.     @lvup_window.update
  455.     #=============================================================
  456.     # 按下 B 键的情况下
  457.     #=============================================================
  458.     if Input.trigger?(Input::B)
  459.       # 演奏取消 SE
  460.       Sound.play_cancel
  461.       # 切换到地图画面
  462.       $scene = Scene_Map.new
  463.       return
  464.     end
  465.     #=============================================================
  466.     # 按下 C 键的情况下
  467.     #=============================================================
  468.     if Input.trigger?(Input::C)      
  469.       if @command_window.index == 5
  470.           # 演奏确定 SE
  471.         Sound.play_decision
  472.         # 将角色的剩余点数带回
  473.         $game_variables[@actor.id + LEVEL_UP_VARIABLE] = $point
  474.         # 将角色点数实际加上
  475.         @actor.atk += $temp_atk
  476.         @actor.def += $temp_def
  477.         @actor.agi += $temp_agi
  478.         @actor.spi += $temp_spi
  479.         @actor.maxhp += $temp_hp
  480.         @actor.maxmp += $temp_mp
  481.         # 切换到地图画面
  482.         $scene = Scene_Map.new
  483.         return
  484.       end
  485.       if @command_window.index == 6
  486.           # 演奏确定 SE
  487.         Sound.play_decision
  488.           # 将角色的剩余点数带入
  489.         $point = $game_variables[@actor.id + LEVEL_UP_VARIABLE]   
  490.           # 初始化临时量
  491.         $temp_atk = 0
  492.         $temp_def = 0
  493.         $temp_agi = 0
  494.         $temp_spi = 0
  495.         $temp_hp = 0
  496.         $temp_mp = 0
  497.         @lvup_window.refresh
  498.         @lvpoint_window.refresh
  499.         return
  500.       end
  501.       if $point == 0
  502.         # 演奏冻结 SE
  503.         Sound.play_buzzer
  504.         return
  505.       end
  506.       case @command_window.index
  507.       when 0
  508.         # 演奏确定 SE
  509.         Sound.play_decision
  510.         $temp_hp += @hp
  511.         $temp_mp += @mp
  512.         $temp_atk += @hp_atk
  513.         $temp_def += @hp_def
  514.         $temp_agi += @hp_agi
  515.         $temp_spi += @hp_spi
  516.         $point -= 1
  517.         @lvup_window.refresh
  518.         @lvpoint_window.refresh
  519.         s_disable
  520.         return
  521.       when 1
  522.         # 演奏确定 SE
  523.         Sound.play_decision
  524.         $temp_atk += @atk_atk
  525.         $temp_hp += @atk_hp
  526.         $temp_mp += @atk_mp
  527.         $temp_def += @atk_def
  528.         $temp_agi += @atk_agi
  529.         $temp_spi += @atk_spi
  530.         $point -= 1
  531.         @lvup_window.refresh
  532.         @lvpoint_window.refresh
  533.         s_disable
  534.         return
  535.       when 2
  536.         # 演奏确定 SE
  537.         Sound.play_decision
  538.         $temp_def += @def_def
  539.         $temp_hp += @def_hp
  540.         $temp_mp += @def_mp
  541.         $temp_atk += @def_atk
  542.         $temp_agi += @def_agi
  543.         $temp_spi += @def_spi
  544.         $point -= 1
  545.         @lvup_window.refresh
  546.         @lvpoint_window.refresh
  547.         s_disable
  548.         return
  549.       when 3
  550.         # 演奏确定 SE
  551.         Sound.play_decision
  552.         $temp_agi += @agi_agi
  553.         $temp_hp += @agi_hp
  554.         $temp_mp += @agi_mp
  555.         $temp_atk += @agi_atk
  556.         $temp_def += @agi_def
  557.         $temp_spi += @agi_spi
  558.         $point -= 1
  559.         @lvup_window.refresh
  560.         @lvpoint_window.refresh
  561.         s_disable
  562.         return
  563.       when 4
  564.         # 演奏确定 SE
  565.         Sound.play_decision
  566.         $temp_spi += @spi_spi
  567.         $temp_hp += @spi_hp
  568.         $temp_mp += @spi_mp
  569.         $temp_atk += @spi_atk
  570.         $temp_def += @spi_def
  571.         $temp_agi += @spi_agi
  572.         $point -= 1
  573.         @lvup_window.refresh
  574.         @lvpoint_window.refresh
  575.         s_disable
  576.         return
  577.       end
  578.     end
  579.     #=============================================================
  580.     # 什么都没有按下的情况
  581.     #=============================================================
  582.     case @command_window.index   
  583.     when 0  # 增加体力
  584.       temptext1 = @text_hp + @hp.to_s + "点   " + @text_atk + @hp_atk.to_s + "点   " + @text_def + @hp_def.to_s + "点"
  585.       temptext2 = @text_mp + @mp.to_s + "点   " + @text_agi + @hp_agi.to_s + "点   " + @text_spi + @hp_spi.to_s + "点"
  586.       @help_window.lvup_text(@text_hp_sc , @text_2 , temptext1 , temptext2)
  587.     when 1  # 增加力量
  588.       temptext1 = @text_hp + @atk_hp.to_s + "点   " + @text_atk + @atk_atk.to_s + "点   " + @text_def + @atk_def.to_s + "点"
  589.       temptext2 = @text_mp + @atk_mp.to_s + "点   " + @text_agi + @atk_agi.to_s + "点   " + @text_spi + @atk_spi.to_s + "点"
  590.       @help_window.lvup_text(@text_atk_sc , @text_2 , temptext1 , temptext2)
  591.     when 2  # 增加灵巧
  592.       temptext1 = @text_hp + @def_hp.to_s + "点   " + @text_atk + @def_agi.to_s + "点   " + @text_def + @def_def.to_s + "点"
  593.       temptext2 = @text_mp + @def_mp.to_s + "点   " + @text_agi + @def_agi.to_s + "点   " + @text_spi + @def_spi.to_s + "点"
  594.       @help_window.lvup_text(@text_def_sc , @text_2 , temptext1 , temptext2)
  595.     when 3  # 增加速度
  596.       temptext1 = @text_hp + @agi_hp.to_s + "点   " + @text_atk + @agi_atk.to_s + "点   " + @text_def + @agi_def.to_s + "点"
  597.       temptext2 = @text_mp + @agi_mp.to_s + "点   " + @text_agi + @agi_agi.to_s + "点   " + @text_spi + @agi_spi.to_s + "点"
  598.       @help_window.lvup_text(@text_agi_sc , @text_2 , temptext1 , temptext2)
  599.     when 4  # 增加魔力
  600.       temptext1 = @text_hp + @spi_hp.to_s + "点   " + @text_atk + @spi_atk.to_s + "点   " + @text_def + @spi_def.to_s + "点"
  601.       temptext2 = @text_mp + @spi_mp.to_s + "点   " + @text_agi + @spi_agi.to_s + "点   " + @text_spi + @spi_spi.to_s + "点"
  602.       @help_window.lvup_text(@text_spi_sc , @text_2 , temptext1 , temptext2)
  603.     when 5 # 保存设定
  604.       @help_window.lvup_text(@text_save)
  605.     when 6 # 点数重置
  606.       @help_window.lvup_text(@text_reset)     
  607.     end
  608.     #=============================================================
  609.     # 按下R与L换人的情况
  610.     #=============================================================      
  611.     if Input.trigger?(Input::R)
  612.       # 演奏光标 SE
  613.       Sound.play_cursor
  614.       # 移至下一位角色
  615.       @actor_index += 1
  616.       @actor_index %= $game_party.members.size
  617.       # 切换到别的状态画面
  618.       $scene = Scene_Lvup.new(@actor_index , @command_window.index)
  619.       return
  620.     end
  621.     # 按下 L 键的情况下
  622.     if Input.trigger?(Input::L)
  623.       # 演奏光标 SE
  624.       Sound.play_cursor
  625.       # 移至上一位角色
  626.       @actor_index += $game_party.members.size - 1
  627.       @actor_index %= $game_party.members.size
  628.       # 切换到别的状态画面
  629.       $scene = Scene_Lvup.new(@actor_index , @command_window.index)
  630.       return
  631.     end
  632.   end  
  633.   #--------------------------------------------------------------------------
  634.   # ● 选项明暗判断
  635.   #--------------------------------------------------------------------------
  636.   def s_disable
  637.     # 判断剩余点数是否为0,如果为0,那么增加选项表示为暗色
  638.     if $point == 0
  639.       enabled = false
  640.     else
  641.       enabled = true
  642.     end
  643.       @command_window.draw_item(0,enabled)
  644.       @command_window.draw_item(1,enabled)
  645.       @command_window.draw_item(2,enabled)
  646.       @command_window.draw_item(3,enabled)
  647.       @command_window.draw_item(4,enabled)
  648.   end
  649. end
复制代码

作者: 火鸡三毛老大    时间: 2008-3-23 19:05
脚本14   事件存度进度
  1. class Scene_File
  2.   #--------------------------------------------------------------------------
  3.   # ● 执行保存
  4.   #--------------------------------------------------------------------------
  5.   def do_save(id = @index, from_interpreter = false)
  6.     if from_interpreter
  7.       file = File.open(make_filename(id), "wb")
  8.     else
  9.       file = File.open(@savefile_windows[id].filename, "wb")
  10.     end
  11.     write_save_data(file)
  12.     file.close
  13.     return_scene
  14.   end
  15.   #--------------------------------------------------------------------------
  16.   # ● 执行读取
  17.   #--------------------------------------------------------------------------
  18.   def do_load(id = @index, from_interpreter = false)
  19.     if from_interpreter
  20.       file = File.open(make_filename(id), "rb")
  21.     else
  22.       file = File.open(@savefile_windows[id].filename, "rb")
  23.     end
  24.     read_save_data(file)
  25.     file.close
  26.     $scene = Scene_Map.new
  27.     RPG::BGM.fade(1500)
  28.     Graphics.fadeout(60)
  29.     Graphics.wait(40)
  30.     @last_bgm.play
  31.     @last_bgs.play
  32.   end
  33. end


  34. class Game_Interpreter
  35.   #------------------------------------------------------------------
  36.   # ● 用事件脚本储存进度。方法:save(编号)
  37.   #------------------------------------------------------------------
  38.   def save(index = 0)
  39.     ts = Scene_File.new(true,false,true).do_save(index, true)
  40.   end
  41.   
  42.   #------------------------------------------------------------------
  43.   # ● 用事件脚本读取进度。方法:load(编号)
  44.   #------------------------------------------------------------------
  45.   def load(index = 0)
  46.     ts = Scene_File.new(false,false,true).do_load(index, true)
  47.   end  
  48. end

复制代码

作者: 火鸡三毛老大    时间: 2008-3-23 19:06
脚本15  生成错误日志
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================
  4. module ERRSettings
  5. #▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
  6. #请设置以下东东
  7. # 游戏测试的时候,是否保存错误信息?(true是false不是)
  8. SaveErrorData = true

  9. # 回溯跟踪错误的文件名
  10. BackTraceFileName = "Backtrace.txt"
  11. #▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
  12. end

  13. module RPG
  14. module_function
  15. def version
  16.    case
  17.      when defined? Hangup then 1.0
  18.      else 2.0
  19.    end
  20. end
  21. def debug?
  22.    $TEST or $DEBUG
  23. end
  24. end
  25. class Reset < Exception
  26. end
  27. class ScriptInterpreter

  28. include ERRSettings
  29. CallSystemError = true
  30. def run
  31.    Graphics.freeze
  32.    $scene = Scene_Title.new
  33.    $scene.main until $scene.nil?
  34.    Graphics.transition(RPG.version == 1 ? 20 : 30)
  35.    exit
  36. rescue Reset => exp
  37.    raise
  38. rescue SystemExit => exp
  39.    raise
  40. rescue Exception => exp
  41.    exception(exp)
  42.    exit
  43. end

  44. private

  45. def exception(exp)
  46.    save_backtrace(exp) if SaveErrorData or RPG.debug?
  47.    print(get_error_message(exp))
  48.    raise if CallSystemError and RPG.debug?
  49. end

  50. def get_error_message(exp)
  51.    if RPG.debug?
  52.      bt = BackTrace.get_backtraces(exp.backtrace)
  53.      
  54.      if exp.class.to_s=="SyntaxError"
  55.        $outexp="语法错误"
  56.      elsif exp.class.to_s=="NameError"
  57.        $outexp="变量未定义"
  58.      elsif exp.class.to_s=="NoMethodError"
  59.        $outexp="方法未定义"
  60.      elsif exp.class.to_s=="NoMemoryError"
  61.        $outexp="内存占有过大"
  62.      elsif exp.class.to_s=="ArgumentError"
  63.        $outexp="参数错误"   #如果愿意此处可以自定义添加
  64.      else
  65.        $outexp=exp.class.to_s
  66.      end

  67.      msg  = "◆ 发生错误\n"
  68.      msg += "\提醒您:请养成备份游戏文件的习惯。\n \n"
  69.      msg += "错误类型 :\n\t#{$outexp}\n"
  70.      msg += "错误信息 :\n\t#{exp.message}\n" if exp.message
  71.      msg += "错误可能发生的相关位置 :"
  72.      bt.each do |i|
  73.        msg += " \n\t#{i.name} : 第 #{i.line_no} 行"
  74.        msg += " : #{i.method_name}" if i.method_name
  75.      end
  76.      msg += "  \n非常荣幸能为您发送错误报告\n"
  77.    else
  78.      msg  = "内部发生错误强制结束。\n"
  79.      msg += "提醒您:请养成备份游戏文件的习惯。\n"
  80.      msg += "▲错误报告文件「#{BackTraceFileName}」已经保存。\n\n"
  81.      msg += "  非常荣幸能为您发送错误报告\n"
  82.    end
  83.    msg
  84. end

  85. def save_backtrace(exp)
  86.    bt = BackTrace.get_backtraces(exp.backtrace)
  87.    
  88.      if exp.class.to_s=="SyntaxError"
  89.        $outexp="语法错误"
  90.      elsif exp.class.to_s=="NameError"
  91.        $outexp="变量未定义"
  92.      elsif exp.class.to_s=="NoMethodError"
  93.        $outexp="方法未定义"
  94.      elsif exp.class.to_s=="NoMemoryError"
  95.        $outexp="内存占有过大"
  96.      elsif exp.class.to_s=="ArgumentError"
  97.        $outexp="参数错误"   #如果愿意此处可以自定义添加
  98.      else
  99.        $outexp=exp.class.to_s
  100.      end
  101.    
  102.    msg  = "◆ #{Time.now.strftime('%Y-%m-%d %H:%M:%S')}\n"
  103.    msg += "错误类型 :\n\t#{$outexp}\n"
  104.    msg += "错误信息 :\n\t#{exp.message}\n" if exp.message
  105.    msg += "错误可能发生的相关位置 :"
  106.    bt.each do |i|
  107.      msg += " \n\t#{i.name} : 第 #{i.line_no} 行"
  108.      msg += " : #{i.method_name}" if i.method_name
  109.    end
  110.    msg += "\n-----------------------------------\n"
  111.    File.open(BackTraceFileName, "a") do |file|
  112.      file.write(msg)
  113.    end
  114. end
  115. end

  116. # 回溯跟踪错误的类
  117. class BackTrace  
  118. BacktraceRegexp = /^Section([0-9]+):([0-9]+)(:in `(.+)')?$/
  119. def self.get_backtraces(bt)
  120.    r = []
  121.    bt.each do |i|
  122.      r << self.new(i)
  123.    end
  124.    r
  125. end  
  126. def initialize(line)
  127.    name, @line_no, @method_name =
  128.                                    BacktraceRegexp.match(line).to_a.values_at(1,2,4)
  129.    @name = get_section_name(name)
  130. end  
  131. attr_accessor :name
  132. attr_accessor :line_no
  133. attr_accessor :method_name  
  134. private
  135. def get_section_name(index)
  136.    $RGSS_SCRIPTS[index.to_i][1]
  137. end
  138. end
  139. begin
  140. si = ScriptInterpreter.new
  141. si.run
  142. end
复制代码



脚本16  战斗会回复一定%的HP
  1. #===============================================================================
  2. #战斗后回复HP
  3. #===============================================================================
  4. class Game_Battler
  5.   def remove_states_battle
  6.     for state in states
  7.       remove_state(state.id) if state.battle_only
  8.     end
  9.     n = maxhp * 50         #战斗后回复的HP百分比
  10.     n /= 100
  11.     self.hp += n
  12.   end
  13. end
复制代码

作者: 火鸡三毛老大    时间: 2008-3-23 19:09
脚本17  滚动字幕  
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================

  4. #——使用注意:默认会返回地图,如果需要返回开头,请将本脚本中的
  5. #return_scene = Scene_Map.new改为return_scene = Scene_Title.new

  6. class Scene_Credit
  7.   CREDIT=<<_END_
  8. #这里输入字幕内容

  9. _END_
  10. end

  11. class Scene_Credit

  12.   def initialize(return_scene = nil)
  13.     @sprite = Sprite.new
  14.     @sprite.bitmap = Bitmap.new("Graphics/Pictures/tit")
  15.     @sprite.x = 0
  16.     @sprite.y = 0
  17.     if return_scene.nil?
  18.       return_scene = Scene_Title.new
  19.     end
  20.     @return_scene = return_scene
  21.   end
  22.   
  23.   def scene_start
  24.     credit_lines = CREDIT.split(/\n/)
  25.     credit_bitmap = Bitmap.new(576,32 * credit_lines.size)
  26.     credit_lines.each_index do |i|
  27.       line = credit_lines[i]
  28.       credit_bitmap.draw_text(0,i * 32,576,32,line,1)
  29.     end
  30.     @credit_sprite = Sprite.new(Viewport.new(0,50,576,432))
  31.     @credit_sprite.bitmap = credit_bitmap
  32.     @credit_sprite.oy = -430
  33.     @frame_index = 0
  34.     @last_flag = false
  35.   end

  36.   def scene_end
  37.     @credit_sprite.dispose
  38.     @sprite.dispose
  39.   end
  40.   
  41.   def last?
  42.     return (@frame_index >= @credit_sprite.bitmap.height + 320)
  43.   end
  44.   
  45.   def last
  46.     if not @last_flag
  47.       Audio.bgm_fade(10000)
  48.       @last_flag = true
  49.       @last_count = 0
  50.     else
  51.       @last_count += 1
  52.     end
  53.     if @last_count >= 300
  54.       $scene = @return_scene
  55.     end
  56.   end
  57.   
  58.   def update
  59.     @frame_index += 1
  60.     return if cancel?
  61.     last if last?
  62.     @credit_sprite.oy += 1
  63.   end

  64.   def cancel?
  65.     if Input.trigger?(Input::B)
  66.       $scene = @return_scene
  67.       return true
  68.     end
  69.     return false
  70.   end

  71.   def main
  72.     scene_start
  73.     # 过渡
  74.     Graphics.transition
  75.     # 主循环
  76.     loop do
  77.       Graphics.update
  78.       Input.update
  79.       update
  80.       if $scene != self
  81.         break
  82.       end
  83.     end
  84.     # 准备过渡
  85.     Graphics.freeze
  86.     scene_end
  87.   end
  88. end
  89. #==============================================================================



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

复制代码


脚本18 物品颜色描绘
作者的话:
此脚本会和其他需要设定注释的脚本冲突。解决方法么,还在研究...
如果对16进制颜色没需求的话(个人感觉系统自己设定好的颜色足够了),请使用下面这个脚本
使用方法同上 不过不用打[] 另外没有16进制功能
如果有其他脚本的设定用#分隔开就ok 可以一起用。
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================

  4. module RPG
  5.   class BaseItem
  6.     def name_color_66RPG
  7.       name_color = @note.split(/#/)[0]
  8.       return name_color != nil ? name_color.to_i: 0
  9.     end
  10.   end
  11. end


  12. class Window_Base < Window
  13.   #定义透明色
  14.   def disabled_color
  15.     return Color.new(255, 255, 255, 128)
  16.   end
  17.   def draw_item_name(item, x, y, enabled = true)
  18.     if item != nil
  19.       draw_icon(item.icon_index, x, y, enabled)
  20.       self.contents.font.color = text_color(item.name_color_66RPG)
  21.       opacity = self.contents.font.color == disabled_color ? 128 : 255
  22.       self.contents.draw_text(x + 24, y, 172, WLH, item.name.to_s)
  23.     end
  24.   end
  25. end
  26. #==============================================================================



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

复制代码

作者: 火鸡三毛老大    时间: 2008-3-23 19:10
脚本19  VX开头画面特效
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================

  4. #==============================================================================
  5. # ■ Scene_Title
  6. #------------------------------------------------------------------------------
  7. #  タイトル画面の処理を行うクラスです。
  8. #==============================================================================

  9. class Scene_Title < Scene_Base
  10.   WEATHER = 4     # 使用自定义效果(0:无,1:雨,2:暴风雨,3:雪,4:自定义)
  11.   MAXNUMBER = 18  # 天气图片数量
  12.   
  13.   WEATHER_FILE = "Graphics/Pictures/Title_starlong.png"
  14.   # 自定义图片路径,这个文件是流星雨
  15.   
  16.   BLEND_TYPE = 1 # 合成方式(0:普通,1:加法,2:减法)
  17.   WEATHER_X = 5 # X方向每回合减少象素
  18.   WEATHER_Y = 5 # Y方向每回合减少象素
  19.   WEATHER_OPACITY = 2 #每回合减低透明度
  20.   START_OPACITY = 200 #出现时的透明度
  21.   RAND_X = 1200 # 随机X范围
  22.   RAND_Y = 600 # 随机Y范围
  23.   HEIGHT = -600 # 出现时候的屏幕Y
  24.   WIDTH = 100 # 出现时候的屏幕X
  25.   #--------------------------------------------------------------------------
  26.   # ● メイン処理
  27.   #--------------------------------------------------------------------------
  28.   def main
  29.     if $BTEST                         # 戦闘テストの場合
  30.       battle_test                     # 戦闘テストの開始処理
  31.     else                              # 通常のプレイの場合
  32.       super                           # 本来のメイン処理
  33.     end
  34.   end
  35.   #--------------------------------------------------------------------------
  36.   # ● 開始処理
  37.   #--------------------------------------------------------------------------
  38.   def start
  39.     super
  40.     load_database                     # データベースをロード
  41.     create_game_objects               # ゲームオブジェクトを作成
  42.     check_continue                    # コンティニュー有効判定
  43.     create_title_graphic   # タイトルグラフィックを作成
  44.     @ox = 0
  45.     @oy = 0
  46.     color1 = Color.new(255, 255, 255, 255)
  47.     color2 = Color.new(255, 255, 255, 128)
  48.     @rain_bitmap = Bitmap.new(7, 56)
  49.     for i in 0..6
  50.       @rain_bitmap.fill_rect(6-i, i*8, 1, 8, color1)
  51.     end
  52.     @storm_bitmap = Bitmap.new(34, 64)
  53.     for i in 0..31
  54.       @storm_bitmap.fill_rect(33-i, i*2, 1, 2, color2)
  55.       @storm_bitmap.fill_rect(32-i, i*2, 1, 2, color1)
  56.       @storm_bitmap.fill_rect(31-i, i*2, 1, 2, color2)
  57.     end
  58.     @snow_bitmap = Bitmap.new(6, 6)
  59.     @snow_bitmap.fill_rect(0, 1, 6, 4, color2)
  60.     @snow_bitmap.fill_rect(1, 0, 4, 6, color2)
  61.     @snow_bitmap.fill_rect(1, 2, 4, 2, color1)
  62.     @snow_bitmap.fill_rect(2, 1, 2, 4, color1)
  63.     @sprites = []
  64.     for i in 1..40
  65.       sprite = Sprite.new
  66.       case WEATHER
  67.       when 1
  68.         sprite.bitmap = @rain_bitmap
  69.       when 2
  70.         sprite.bitmap = @storm_bitmap
  71.       when 3
  72.         sprite.bitmap = @snow_bitmap
  73.       when 4
  74.         sprite.bitmap = Bitmap.new(WEATHER_FILE)
  75.       end
  76.       sprite.z = 1000
  77.       sprite.x = -1000
  78.       sprite.y = -1000
  79.       sprite.visible = (i <= MAXNUMBER)
  80.       sprite.blend_type = BLEND_TYPE
  81.       sprite.opacity = START_OPACITY
  82.       @sprites.push(sprite)
  83.     end
  84.     weather_update
  85.     create_command_window             # コマンドウィンドウを作成
  86.     play_title_music                  # タイトル画面の音楽を演奏
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # ● トランジション実行
  90.   #--------------------------------------------------------------------------
  91.   def perform_transition
  92.     Graphics.transition(20)
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # ● 開始後処理
  96.   #--------------------------------------------------------------------------
  97.   def post_start
  98.     super
  99.     open_command_window
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ● 終了前処理
  103.   #--------------------------------------------------------------------------
  104.   def pre_terminate
  105.     super
  106.     close_command_window
  107.   end
  108.   #--------------------------------------------------------------------------
  109.   # ● 終了処理
  110.   #--------------------------------------------------------------------------
  111.   def terminate
  112.     super
  113.     dispose_command_window
  114.     snapshot_for_background
  115.     @sprite.bitmap.dispose
  116.     @sprite.dispose
  117.     for sprite in @sprites
  118.       sprite.dispose
  119.     end
  120.     @rain_bitmap.dispose
  121.     @storm_bitmap.dispose
  122.     @snow_bitmap.dispose
  123.     dispose_title_graphic
  124.   end
  125.   
  126.   def weather_update
  127.     return if WEATHER == 0
  128.     for i in 1..MAXNUMBER
  129.       sprite = @sprites[i]
  130.       if sprite == nil
  131.         break
  132.       end
  133.       if WEATHER == 1
  134.         sprite.x -= 2
  135.         sprite.y += 16
  136.         sprite.opacity -= 8
  137.       end
  138.       if WEATHER == 2
  139.         sprite.x -= 8
  140.         sprite.y += 16
  141.         sprite.opacity -= 12
  142.       end
  143.       if WEATHER == 3
  144.         sprite.x -= 2
  145.         sprite.y += 8
  146.         sprite.opacity -= 8
  147.       end
  148.       if WEATHER == 4
  149.         sprite.x -= WEATHER_X
  150.         sprite.y += WEATHER_Y
  151.         sprite.opacity -= WEATHER_OPACITY
  152.       end
  153.       x = sprite.x - @ox
  154.       y = sprite.y - @oy
  155.       if sprite.opacity < 32 or x < -100 or x > 750 or y < -1000 or y > 500
  156.         sprite.x = rand(RAND_X) + WIDTH + @ox
  157.         sprite.y = rand(RAND_Y) + HEIGHT + @oy
  158.         sprite.opacity = START_OPACITY
  159.       end
  160.     end
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # ● フレーム更新
  164.   #--------------------------------------------------------------------------
  165.   def update
  166.     super
  167.     @command_window.update
  168.     if Input.trigger?(Input::C)
  169.       case @command_window.index
  170.       when 0    # ニューゲーム
  171.         command_new_game
  172.       when 1    # コンティニュー
  173.         command_continue
  174.       when 2    # シャットダウン
  175.         command_shutdown
  176.       end
  177.     end
  178.     weather_update
  179.   end
  180.   #--------------------------------------------------------------------------
  181.   # ● データベースのロード
  182.   #--------------------------------------------------------------------------
  183.   def load_database
  184.     $data_actors        = load_data("Data/Actors.rvdata")
  185.     $data_classes       = load_data("Data/Classes.rvdata")
  186.     $data_skills        = load_data("Data/Skills.rvdata")
  187.     $data_items         = load_data("Data/Items.rvdata")
  188.     $data_weapons       = load_data("Data/Weapons.rvdata")
  189.     $data_armors        = load_data("Data/Armors.rvdata")
  190.     $data_enemies       = load_data("Data/Enemies.rvdata")
  191.     $data_troops        = load_data("Data/Troops.rvdata")
  192.     $data_states        = load_data("Data/States.rvdata")
  193.     $data_animations    = load_data("Data/Animations.rvdata")
  194.     $data_common_events = load_data("Data/CommonEvents.rvdata")
  195.     $data_system        = load_data("Data/System.rvdata")
  196.     $data_areas         = load_data("Data/Areas.rvdata")
  197.   end
  198.   #--------------------------------------------------------------------------
  199.   # ● 戦闘テスト用データベースのロード
  200.   #--------------------------------------------------------------------------
  201.   def load_bt_database
  202.     $data_actors        = load_data("Data/BT_Actors.rvdata")
  203.     $data_classes       = load_data("Data/BT_Classes.rvdata")
  204.     $data_skills        = load_data("Data/BT_Skills.rvdata")
  205.     $data_items         = load_data("Data/BT_Items.rvdata")
  206.     $data_weapons       = load_data("Data/BT_Weapons.rvdata")
  207.     $data_armors        = load_data("Data/BT_Armors.rvdata")
  208.     $data_enemies       = load_data("Data/BT_Enemies.rvdata")
  209.     $data_troops        = load_data("Data/BT_Troops.rvdata")
  210.     $data_states        = load_data("Data/BT_States.rvdata")
  211.     $data_animations    = load_data("Data/BT_Animations.rvdata")
  212.     $data_common_events = load_data("Data/BT_CommonEvents.rvdata")
  213.     $data_system        = load_data("Data/BT_System.rvdata")
  214.   end
  215.   #--------------------------------------------------------------------------
  216.   # ● 各種ゲームオブジェクトの作成
  217.   #--------------------------------------------------------------------------
  218.   def create_game_objects
  219.     $game_temp          = Game_Temp.new
  220.     $game_message       = Game_Message.new
  221.     $game_system        = Game_System.new
  222.     $game_switches      = Game_Switches.new
  223.     $game_variables     = Game_Variables.new
  224.     $game_self_switches = Game_SelfSwitches.new
  225.     $game_actors        = Game_Actors.new
  226.     $game_party         = Game_Party.new
  227.     $game_troop         = Game_Troop.new
  228.     $game_map           = Game_Map.new
  229.     $game_player        = Game_Player.new
  230.   end
  231.   #--------------------------------------------------------------------------
  232.   # ● コンティニュー有効判定
  233.   #--------------------------------------------------------------------------
  234.   def check_continue
  235.     @continue_enabled = (Dir.glob('Save*.rvdata').size > 0)
  236.   end
  237.   #--------------------------------------------------------------------------
  238.   # ● タイトルグラフィックの作成
  239.   #--------------------------------------------------------------------------
  240.   def create_title_graphic
  241.     @sprite = Sprite.new
  242.     @sprite.bitmap = Cache.system("Title")
  243.   end
  244.   #--------------------------------------------------------------------------
  245.   # ● タイトルグラフィックの解放
  246.   #--------------------------------------------------------------------------
  247.   def dispose_title_graphic
  248.     @sprite.bitmap.dispose
  249.     @sprite.dispose
  250.   end
  251.   #--------------------------------------------------------------------------
  252.   # ● コマンドウィンドウの作成
  253.   #--------------------------------------------------------------------------
  254.   def create_command_window
  255.     s1 = Vocab::new_game
  256.     s2 = Vocab::continue
  257.     s3 = Vocab::shutdown
  258.     @command_window = Window_Command.new(172, [s1, s2, s3])
  259.     @command_window.x = (544 - @command_window.width) / 2
  260.     @command_window.y = 288
  261.     if @continue_enabled                    # コンティニューが有効な場合
  262.       @command_window.index = 1             # カーソルを合わせる
  263.     else                                    # 無効な場合
  264.       @command_window.draw_item(1, false)   # コマンドを半透明表示にする
  265.     end
  266.     @command_window.openness = 0
  267.     @command_window.open
  268.   end
  269.   #--------------------------------------------------------------------------
  270.   # ● コマンドウィンドウの解放
  271.   #--------------------------------------------------------------------------
  272.   def dispose_command_window
  273.     @command_window.dispose
  274.   end
  275.   #--------------------------------------------------------------------------
  276.   # ● コマンドウィンドウを開く
  277.   #--------------------------------------------------------------------------
  278.   def open_command_window
  279.     @command_window.open
  280.     begin
  281.       @command_window.update
  282.       Graphics.update
  283.     end until @command_window.openness == 255
  284.   end
  285.   #--------------------------------------------------------------------------
  286.   # ● コマンドウィンドウを閉じる
  287.   #--------------------------------------------------------------------------
  288.   def close_command_window
  289.     @command_window.close
  290.     begin
  291.       @command_window.update
  292.       Graphics.update
  293.     end until @command_window.openness == 0
  294.   end
  295.   #--------------------------------------------------------------------------
  296.   # ● タイトル画面の音楽演奏
  297.   #--------------------------------------------------------------------------
  298.   def play_title_music
  299.     $data_system.title_bgm.play
  300.     RPG::BGS.stop
  301.     RPG::ME.stop
  302.   end
  303.   #--------------------------------------------------------------------------
  304.   # ● プレイヤーの初期位置存在チェック
  305.   #--------------------------------------------------------------------------
  306.   def confirm_player_location
  307.     if $data_system.start_map_id == 0
  308.       print "プレイヤーの初期位置が設定されていません。"
  309.       exit
  310.     end
  311.   end
  312.   #--------------------------------------------------------------------------
  313.   # ● コマンド : ニューゲーム
  314.   #--------------------------------------------------------------------------
  315.   def command_new_game
  316.     confirm_player_location
  317.     Sound.play_decision
  318.     $game_party.setup_starting_members            # 初期パーティ
  319.     $game_map.setup($data_system.start_map_id)    # 初期位置のマップ
  320.     $game_player.moveto($data_system.start_x, $data_system.start_y)
  321.     $game_player.refresh
  322.     $scene = Scene_Map.new
  323.     RPG::BGM.fade(1500)
  324.     close_command_window
  325.     Graphics.fadeout(60)
  326.     Graphics.wait(40)
  327.     Graphics.frame_count = 0
  328.     RPG::BGM.stop
  329.     $game_map.autoplay
  330.   end
  331.   #--------------------------------------------------------------------------
  332.   # ● コマンド : コンティニュー
  333.   #--------------------------------------------------------------------------
  334.   def command_continue
  335.     if @continue_enabled
  336.       Sound.play_decision
  337.       $scene = Scene_File.new(false, true, false)
  338.     else
  339.       Sound.play_buzzer
  340.     end
  341.   end
  342.   #--------------------------------------------------------------------------
  343.   # ● コマンド : シャットダウン
  344.   #--------------------------------------------------------------------------
  345.   def command_shutdown
  346.     Sound.play_decision
  347.     RPG::BGM.fade(800)
  348.     RPG::BGS.fade(800)
  349.     RPG::ME.fade(800)
  350.     $scene = nil
  351.   end
  352.   #--------------------------------------------------------------------------
  353.   # ● 戦闘テスト
  354.   #--------------------------------------------------------------------------
  355.   def battle_test
  356.     load_bt_database                  # 戦闘テスト用データベースをロード
  357.     create_game_objects               # ゲームオブジェクトを作成
  358.     Graphics.frame_count = 0          # プレイ時間を初期化
  359.     $game_party.setup_battle_test_members
  360.     $game_troop.setup($data_system.test_troop_id)
  361.     $game_troop.can_escape = true
  362.     $game_system.battle_bgm.play
  363.     snapshot_for_background
  364.     $scene = Scene_Battle.new
  365.   end
  366. end


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


复制代码



脚本20  调节当前音乐的响度和节奏
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================

  4. #调节当前音乐的响度和节奏  作者:superufo
  5. #使用方法:
  6. #调节响度:bgm/bgs_volume(响度) 其中响度为1-100间的整数
  7. #调节节奏:bgm/bgs_pitch(节奏) 其中节奏为1-100间的整数
  8. #调节只会作用于当前音乐
  9. #如有问题请通过胃转告我
  10. class Game_Interpreter
  11.   def bgm_volume(volume)
  12.     bgm = RPG::BGM.last
  13.     Audio.bgm_play("Audio/BGM/" + bgm.name,volume ,bgm.pitch) unless bgm.name.empty?
  14.   end
  15.   def bgs_volume(volume)
  16.     bgs = RPG::BGS.last
  17.     Audio.bgs_play("Audio/BGS/" + bgs.name,volume ,bgs.pitch) unless bgs.name.empty?
  18.   end
  19.   def bgm_pitch(pitch)
  20.     bgm = RPG::BGM.last
  21.     Audio.bgm_play("Audio/BGM/" + bgm.name,bgm.volume ,pitch) unless bgm.name.empty?
  22.   end
  23.   def bgs_pitch(pitch)
  24.     bgs = RPG::BGS.last
  25.     Audio.bgs_play("Audio/BGS/" + bgs.name,bgs.volume ,pitch) unless bgs.name.empty?
  26.   end
  27. end

  28. #==============================================================================
  29. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  30. #==============================================================================
复制代码

作者: 火鸡三毛老大    时间: 2008-3-23 19:12
脚本20 游戏窗口中显示金钱
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================
  4. #显示金钱 by 小夏
  5. #经superufo的帮助一个脚本菜鸟做的不太完美将就着用吧
  6. class Window_goldWindow < Window_Base
  7. def initialize
  8. super(0,0,200,60)
  9. self.opacity = 150
  10. self.visible = false
  11. refresh
  12. end
  13. def refresh
  14. self.contents.clear
  15. self.contents.draw_text(0, 0, 80, WLH, "金钱:")
  16. self.contents.draw_text(80, 0, 40, WLH, $game_party.gold)
  17. self.contents.draw_text(100,0, 40, WLH, Vocab::gold, 2)
  18. end
  19. end
  20. class Scene_Map < Scene_Base
  21. alias goldWindow_start start
  22. alias goldWindow_update
  23. update
  24. alias goldWindow_terminate terminate
  25. def start
  26. goldWindow_start
  27. @goldWindow = Window_goldWindow.new
  28. end
  29. def update
  30. @goldWindow.update
  31. @goldWindow.refresh
  32. @goldWindow.visible = true
  33. goldWindow_update
  34. end
  35. def terminate
  36. goldWindow_terminate
  37. @goldWindow.dispose
  38. end
  39. end
  40. #小夏作品
  41. #转载者注明这个是superufo和小夏的作品谢谢合作

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

复制代码


脚本21  用中文顯示數值
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================

  4. class Window_Base < Window
  5.   #===========================================================
  6.   # 获取中文数字
  7.   # 除了10、100、1000、10000会返回其中文之外
  8.   # 只会取其参数的個位數
  9.   #===========================================================
  10.   def number(num)
  11.     ch_number = ["零", "一", "二", "三", "四",
  12.                  "五", "六", "七", "八", "九",
  13.                  "十", "百", "千", "万"]
  14.     if num == 100
  15.       return ch_number[11]
  16.     elsif num == 1000
  17.       return ch_number[12]
  18.     elsif num == 10000
  19.       return ch_number[13]
  20.     elsif num == 10
  21.       return ch_number[10]
  22.     else
  23.       return ch_number[num%10]
  24.     end
  25.   end
  26.   
  27.   # 显示中文数字
  28.   def change_to_ch(num)
  29.     if num < 0
  30.       rnum = "负 "
  31.     else
  32.       rnum = ""
  33.     end
  34.     num = num.abs

  35.     if num <= 10
  36.       return rnum+number(num)
  37.     else
  38.       # 个
  39.       ones = number(num%10)
  40.       # 十
  41.       tens = number(num/10%10)# if num%100!=0
  42.       # 百
  43.       huns = number(num/100%10)# if num%1000!=0
  44.       # 千
  45.       thos = number(num/1000%10)
  46.       # 万
  47.       tths = number(num/10000%10)
  48.       # 十万
  49.       hths = number(num/100000%10)
  50.       # 百万
  51.       mils = number(num/1000000%10)
  52.       # 千万
  53.       tmis = number(num/10000000%10)
  54.       
  55.       # 数字小於100
  56.       if num < 100
  57.         if num%10==0
  58.           rnum += tens+number(10)
  59.         else
  60.           if num<20
  61.             rnum += number(10)+ones
  62.           else
  63.             rnum += tens+number(10)+ones
  64.           end
  65.         end
  66.       end
  67.       
  68.       # 数字100~999
  69.       if num<1000 and num>=100
  70.         if num%100==0
  71.           rnum += huns+number(100)
  72.         else
  73.           if tens != number(0)
  74.             rnum += huns+number(100)+tens+number(10)+ones
  75.           else
  76.             rnum += huns+number(100)+number(0)+ones
  77.           end
  78.         end
  79.       end
  80.       
  81.       # 数字1000~9999
  82.       if num<10000 and num>=1000
  83.         if num%1000==0
  84.           rnum += thos+number(1000)
  85.         else
  86.           if huns != number(0)
  87.             if tens != number(0)
  88.               rnum += thos+number(1000)+huns+number(100)+tens+number(10)+ones
  89.             else
  90.               rnum += thos+number(1000)+huns+number(100)+tens+ones
  91.             end
  92.           else
  93.             rnum += thos+number(1000)+tens+ones
  94.           end
  95.         end
  96.       end
  97.       
  98.       # 数字10000~99999
  99.       if num>=10000
  100.         if num%10000==0
  101.           rnum += tths+number(10000)
  102.         else
  103.           if tths != number(0)
  104.             if thos != number(0)
  105.               if huns != number(0)
  106.                 if tens != number(0)
  107.                   rnum += tths+number(10000)+thos+number(1000)+
  108.                           huns+number(100)+tens+number(10)+ones
  109.                 else
  110.                   rnum += tths+number(10000)+thos+number(1000)+
  111.                           huns+number(100)+tens+ones
  112.                 end
  113.               else
  114.                 rnum += tths+number(10000)+thos+number(1000)+huns+ones
  115.               end
  116.             else
  117.               rnum += tths+number(10000)+thos+ones
  118.             end
  119.           else
  120.             rnum += number(10000)+number(0)+ones
  121.           end
  122.         end
  123.       
  124.         # 数字100000~999999
  125.         if num>=100000 and num<1000000
  126.           rnum = hths+number(10)+rnum
  127.         end
  128.       
  129.         # 数字1000000~9999999
  130.         if num>=1000000 and num<10000000
  131.           if hths != number(0)
  132.             rnum = mils + number(100) + hths+number(10)+rnum
  133.           else
  134.             rnum = mils + number(100) + number(0)+rnum
  135.           end
  136.         end
  137.         
  138.         # 数字10000000~99999999
  139.         if num>=10000000 and num<100000000
  140.           if mils != number(0)
  141.             if hths != number(0)
  142.               rnum = tmis + number(1000) + mils + number(100) +
  143.                      hths+number(10)+rnum
  144.             else
  145.               rnum = tmis + number(1000) + mils + number(100) +
  146.                      number(0)+rnum
  147.             end
  148.           else
  149.             rnum = tmis + number(1000) + number(0)+rnum
  150.           end
  151.         end
  152.       end
  153.       return rnum
  154.     end
  155.   end
  156.   
  157.   # 显示纯数字
  158.   def change_to_ch_pn(num)
  159.     if num < 0
  160.       rnum = "负 "
  161.     else
  162.       rnum = ""
  163.     end
  164.     num = num.abs

  165.     if num <= 10
  166.       return rnum+number(num)
  167.     else
  168.       # 个
  169.       ones = number(num%10)
  170.       # 十
  171.       tens = number(num/10%10)# if num%100!=0
  172.       # 百
  173.       huns = number(num/100%10)# if num%1000!=0
  174.       # 千
  175.       thos = number(num/1000%10)
  176.       # 万
  177.       tths = number(num/10000%10)
  178.       # 十万
  179.       hths = number(num/100000%10)
  180.       # 百万
  181.       mils = number(num/1000000%10)
  182.       # 千万
  183.       tmis = number(num/10000000%10)
  184.       
  185.       if num < 100
  186.         if num%10==0
  187.           rnum += tens+number(10)
  188.         else
  189.           if num<20
  190.             rnum += number(10)+ones
  191.           else
  192.             rnum += tens+ones
  193.           end
  194.         end
  195.       end
  196.       
  197.       if num<1000 and num>=100
  198.         if num%100==0
  199.           rnum += huns+number(100)
  200.         else
  201.           rnum += huns+tens+ones
  202.         end
  203.       end
  204.       
  205.       if num<10000 and num>=1000
  206.         if num%1000==0
  207.           rnum += thos+number(1000)
  208.         else
  209.           rnum += thos+huns+tens+ones
  210.         end
  211.       end
  212.       
  213.       if num<100000 and num>=10000
  214.         if num%10000==0
  215.           rnum += tths+number(10000)
  216.         else
  217.           rnum += tths+thos+huns+ones
  218.         end
  219.       end
  220.       
  221.       if num<1000000 and num>=100000
  222.         if num%100000==0
  223.           rnum += hths+number(10)+number(10000)
  224.         else
  225.           rnum += hths+tths+thos+huns+tens+ones
  226.         end
  227.       end
  228.       
  229.       if num<10000000 and num>=1000000
  230.         if num%1000000==0
  231.           rnum += mils+number(100)+number(10000)
  232.         else
  233.           rnum += mils+hths+tths+thos+huns+tens+ones
  234.         end
  235.       end

  236.       if num<100000000 and num>=10000000
  237.         if num%10000000==0
  238.           rnum += tmis+number(1000)+number(10000)
  239.         else
  240.           rnum += tmis+mils+hths+tths+thos+huns+tens+ones
  241.         end
  242.       end
  243.       return rnum
  244.     end
  245.   end
  246. end  
  247. #============================================================================
  248. #  函数重新定义
  249. #  显示微中文数字
  250. #============================================================================
  251. class Window_Base < Window
  252.   #--------------------------------------------------------------------------
  253.   # ● レベルの描画
  254.   #     actor : アクター
  255.   #     x     : 描画先 X 座標
  256.   #     y     : 描画先 Y 座標
  257.   #--------------------------------------------------------------------------
  258.   def draw_actor_level(actor, x, y)
  259.     self.contents.font.color = system_color
  260.     self.contents.draw_text(x, y, 32, WLH, Vocab::level_a)
  261.     self.contents.font.color = normal_color
  262.     clevel = change_to_ch(actor.level)
  263.     self.contents.draw_text(x + 32, y, 24, WLH, clevel, 2)
  264.   end
  265.   #--------------------------------------------------------------------------
  266.   # ● HP の描画
  267.   #     actor : アクター
  268.   #     x     : 描画先 X 座標
  269.   #     y     : 描画先 Y 座標
  270.   #     width : 幅
  271.   #--------------------------------------------------------------------------
  272.   def draw_actor_hp(actor, x, y, width = 120)
  273.     draw_actor_hp_gauge(actor, x, y, width)
  274.     self.contents.font.color = system_color
  275.     self.contents.draw_text(x, y, 30, WLH, Vocab::hp_a)
  276.     self.contents.font.color = hp_color(actor)
  277.     xr = x + width
  278.     chp = change_to_ch_pn(actor.hp)
  279.     chpm= change_to_ch_pn(actor.maxhp)
  280.     if width < 120
  281.       self.contents.draw_text(xr - 40, y, 40, WLH, chp, 2)
  282.     else
  283.       self.contents.draw_text(xr - 90, y, 40, WLH, chp, 2)
  284.       self.contents.font.color = normal_color
  285.       self.contents.draw_text(xr - 50, y, 10, WLH, "/", 2)
  286.       self.contents.draw_text(xr - 40, y, 40, WLH, chpm, 2)
  287.     end
  288.   end
  289.   #--------------------------------------------------------------------------
  290.   # ● MP の描画
  291.   #     actor : アクター
  292.   #     x     : 描画先 X 座標
  293.   #     y     : 描画先 Y 座標
  294.   #     width : 幅
  295.   #--------------------------------------------------------------------------
  296.   def draw_actor_mp(actor, x, y, width = 120)
  297.     draw_actor_mp_gauge(actor, x, y, width)
  298.     self.contents.font.color = system_color
  299.     self.contents.draw_text(x, y, 30, WLH, Vocab::mp_a)
  300.     self.contents.font.color = mp_color(actor)
  301.     xr = x + width
  302.     cmp = change_to_ch_pn(actor.mp)
  303.     cmpm= change_to_ch_pn(actor.maxmp)
  304.     if width < 120
  305.       self.contents.draw_text(xr - 40, y, 40, WLH, cmp, 2)
  306.     else
  307.       self.contents.draw_text(xr - 90, y, 40, WLH, cmp, 2)
  308.       self.contents.font.color = normal_color
  309.       self.contents.draw_text(xr - 50, y, 10, WLH, "/", 2)
  310.       self.contents.draw_text(xr - 40, y, 40, WLH, cmpm, 2)
  311.     end
  312.   end
  313.   #--------------------------------------------------------------------------
  314.   # ● 能力値の描画
  315.   #     actor : アクター
  316.   #     x     : 描画先 X 座標
  317.   #     y     : 描画先 Y 座標
  318.   #     type  : 能力値の種類 (0~3)
  319.   #--------------------------------------------------------------------------
  320.   def draw_actor_parameter(actor, x, y, type)
  321.     case type
  322.     when 0
  323.       parameter_name = Vocab::atk
  324.       parameter_value = actor.atk
  325.     when 1
  326.       parameter_name = Vocab::def
  327.       parameter_value = actor.def
  328.     when 2
  329.       parameter_name = Vocab::spi
  330.       parameter_value = actor.spi
  331.     when 3
  332.       parameter_name = Vocab::agi
  333.       parameter_value = actor.agi
  334.     end
  335.     self.contents.font.color = system_color
  336.    
  337.     cparam = change_to_ch_pn(parameter_value)
  338.     width = self.contents.text_size(cparam).width
  339.    
  340.     self.contents.draw_text(x, y, 120, WLH, parameter_name)
  341.     self.contents.font.color = normal_color
  342.     self.contents.draw_text(x+120, y, width, WLH, cparam, 0)
  343.   end
  344.   #--------------------------------------------------------------------------
  345.   # ● 通貨単位つきの数値描画
  346.   #     value : 数値 (所持金など)
  347.   #     x     : 描画先 X 座標
  348.   #     y     : 描画先 Y 座標
  349.   #     width : 幅
  350.   #--------------------------------------------------------------------------
  351.   def draw_currency_value(value, x, y, width)
  352.     cx = contents.text_size(Vocab::gold).width
  353.     self.contents.font.color = normal_color
  354.     vgold = change_to_ch(value)
  355.     self.contents.draw_text(x, y, width-cx-2, WLH, vgold, 2)
  356.     self.contents.font.color = system_color
  357.     self.contents.draw_text(x, y, width, WLH, Vocab::gold, 2)
  358.   end
  359.    
  360. end  
  361. class Window_Status < Window_Base
  362.   #--------------------------------------------------------------------------
  363.   # ● 経験値情報の描画
  364.   #     x : 描画先 X 座標
  365.   #     y : 描画先 Y 座標
  366.   #--------------------------------------------------------------------------
  367.   def draw_exp_info(x, y)
  368.     s1 = change_to_ch_pn(@actor.exp_s)
  369.     s2 = change_to_ch_pn(@actor.next_rest_exp_s)
  370.     s_next = sprintf(Vocab::ExpNext, Vocab::level)
  371.     self.contents.font.color = system_color
  372.     self.contents.draw_text(x, y + WLH * 0, 180, WLH, Vocab::ExpTotal)
  373.     self.contents.draw_text(x, y + WLH * 2, 180, WLH, s_next)
  374.     self.contents.font.color = normal_color
  375.     self.contents.draw_text(x, y + WLH * 1, 180, WLH, s1, 2)
  376.     self.contents.draw_text(x, y + WLH * 3, 180, WLH, s2, 2)
  377.   end
  378. end  
  379. class Window_EquipStatus < Window_Base  
  380.   #--------------------------------------------------------------------------
  381.   # ● 能力値の描画
  382.   #     x    : 描画先 X 座標
  383.   #     y    : 描画先 Y 座標
  384.   #     type : 能力値の種類 (0~3)
  385.   #--------------------------------------------------------------------------
  386.   def draw_parameter(x, y, type)
  387.     case type
  388.     when 0
  389.       name = Vocab::atk
  390.       value = @actor.atk
  391.       new_value = @new_atk
  392.     when 1
  393.       name = Vocab::def
  394.       value = @actor.def
  395.       new_value = @new_def
  396.     when 2
  397.       name = Vocab::spi
  398.       value = @actor.spi
  399.       new_value = @new_spi
  400.     when 3
  401.       name = Vocab::agi
  402.       value = @actor.agi
  403.       new_value = @new_agi
  404.     end
  405.     cv = change_to_ch_pn(value)
  406.     self.contents.font.color = system_color
  407.     self.contents.draw_text(x + 4, y, 80, WLH, name)
  408.     self.contents.font.color = normal_color
  409.     self.contents.draw_text(x + 90, y, 30, WLH, cv, 2)
  410.     self.contents.font.color = system_color
  411.     self.contents.draw_text(x + 122, y, 20, WLH, "→", 1)
  412.     if new_value != nil
  413.       ncv = change_to_ch_pn(new_value)
  414.       self.contents.font.color = new_parameter_color(cv, ncv)
  415.       self.contents.draw_text(x + 142, y, 30, WLH, ncv, 2)
  416.     end
  417.   end
  418. end

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

复制代码

作者: 殤。    时间: 2008-3-23 19:14
提示: 作者被禁止或删除 内容自动屏蔽
作者: 火鸡三毛老大    时间: 2008-3-23 19:14
脚本22  地图名显示脚本
  1. ————————————————————————————————————
  2. # 本脚本来自www.66rpg.com,转载和使用请保留此信息
  3. # ————————————————————————————————————

  4. #==============================================================================
  5. # ■ 地图名显示脚本
  6. #     by Yuee
  7. #------------------------------------------------------------------------------
  8. # 在Main的上方插入一个页,将本脚本复制到那页中即可
  9. #==============================================================================

  10. #==============================================================================
  11. # ■ Window_MapName
  12. #------------------------------------------------------------------------------
  13. #  显示地图名字的窗口。
  14. #==============================================================================

  15. class Window_MapName < Window_Base
  16.   #--------------------------------------------------------------------------
  17.   # ● 类常量定义
  18.   #--------------------------------------------------------------------------

  19.   # 暂时屏蔽用的开关
  20.   SWITCH = 6
  21.   
  22.   # 窗口位置设定
  23.   NAME_X = 544-220      # 矩形左上顶点X坐标
  24.   NAME_Y = 0       # 矩形左上顶点Y坐标
  25.   NAME_W = 220      # 矩形宽
  26.   NAME_H = 60       # 矩形高
  27.    
  28.   # 显示时间设置
  29.   SHOW_TIME_0 = 10  # 地图名出现前等待的帧数
  30.   SHOW_TIME_1 = 10  # 地图名从不可见变成可见的帧数
  31.   SHOW_TIME_2 = 34  # 地图名完全可见的帧数
  32.   SHOW_TIME_3 = 16  # 地图名从可见变成不可见的帧数
  33.   
  34.   # 完全可见时的透明度设置
  35.   OPACITY_1 = 244   # 边框
  36.   OPACITY_2 = 100   # 背景
  37.   OPACITY_3 = 255   # 文字
  38.   
  39.   # 地图名字的颜色
  40.   TEXT_COLOR = Color.new(255, 255, 255, 255)
  41.    
  42.   #--------------------------------------------------------------------------
  43.   # ● 初始化状态
  44.   #--------------------------------------------------------------------------
  45.   def initialize
  46.     super(NAME_X , NAME_Y, NAME_W, NAME_H)
  47.     # 初始化窗口透明度
  48.     self.opacity = 0
  49.     self.back_opacity = 0
  50.     self.z = 9999
  51.     self.contents_opacity = 0
  52.     self.contents = Bitmap.new(width - 32, height - 32)
  53.     # 剩余帧数初始化
  54.     @show_time = 0
  55.   end
  56.   #--------------------------------------------------------------------------
  57.   # ● 输出文字
  58.   #--------------------------------------------------------------------------
  59.   def setname
  60.     if $game_switches[SWITCH]
  61.       # 获取地图ID
  62.       newid = $game_map.map_id
  63.       time = SHOW_TIME_1 + SHOW_TIME_2 + SHOW_TIME_3  
  64.       # 如果现在的地图的ID不是刚才显示的地图ID则开始显示
  65.       if newid != @id
  66.         @id = newid
  67.         @show_time = SHOW_TIME_0 + SHOW_TIME_1 + SHOW_TIME_2 + SHOW_TIME_3
  68.       # 剩余帧数为0是时,全部窗口透明
  69.       elsif @show_time < 1
  70.         self.opacity = 0
  71.         self.back_opacity = 0
  72.         self.contents_opacity = 0
  73.         return
  74.       end      
  75.       self.contents.clear
  76.       self.contents.font.color = TEXT_COLOR
  77.       # 描绘地图名
  78.       self.contents.draw_text(4, 0 , width - 40, 32, $data_mapinfos[@id].name, 1)
  79.       # 根本帧数设定窗口透明度
  80.       if @show_time > (SHOW_TIME_2 + SHOW_TIME_3)
  81.         self.opacity = @show_time < time ? (((OPACITY_1 / SHOW_TIME_1) * (time - @show_time)).to_i) : 0
  82.         self.back_opacity = @show_time < time ? (((OPACITY_2 / SHOW_TIME_1 )* (time - @show_time)).to_i) : 0
  83.         self.contents_opacity = @show_time < time ? (((OPACITY_3 / SHOW_TIME_1) * (time - @show_time)).to_i) : 0
  84.       else
  85.         self.opacity = @show_time < (SHOW_TIME_3 / 16 * 14) ? ((OPACITY_1 / SHOW_TIME_3) * @show_time).to_i : OPACITY_1
  86.         self.back_opacity = @show_time < (SHOW_TIME_3 / 16 * 9) ? ((OPACITY_2 / SHOW_TIME_3) * @show_time).to_i : OPACITY_2
  87.         self.contents_opacity = @show_time < SHOW_TIME_3 ? ((OPACITY_3 / SHOW_TIME_3)* @show_time).to_i : OPACITY_3
  88.       end
  89.       @show_time -= 1
  90.       $game_switches[SWITCH] = false if @show_time < 0
  91.     end
  92.   end
  93. end

  94. #==============================================================================
  95. # ■ Scene_Map
  96. #------------------------------------------------------------------------------
  97. #  处理地图画面的类。(追加定义)
  98. #==============================================================================

  99. class Scene_Map
  100.   alias smn_start start
  101.   def start
  102.     @mapname = Window_MapName.new
  103.     smn_start
  104.   end
  105.   
  106.   alias smn_dispose terminate
  107.   def terminate
  108.     smn_dispose
  109.     @mapname.dispose
  110.   end
  111.   
  112.   alias smn_update update
  113.   def update
  114.     smn_update
  115.     @mapname.setname
  116.   end
  117. end

  118. #==============================================================================
  119. # ■ Scene_Title
  120. #------------------------------------------------------------------------------
  121. #  处理标题画面的类。(追加定义)
  122. #==============================================================================

  123. class Scene_Title
  124.   alias smn_load load_database
  125.   def load_database
  126.     # 读取地图信息文件
  127.     $data_mapinfos = load_data("Data/MapInfos.rvdata")
  128.     smn_load
  129.   end
  130. end

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

复制代码


脚本23 RMVX版图片标题菜单
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================

  4. #==============================================================================
  5. # ■ Scene_Title
  6. #------------------------------------------------------------------------------
  7. #  タイトル画面の処理を行うクラスです。
  8. #==============================================================================

  9. class Scene_Title < Scene_Base
  10.   #--------------------------------------------------------------------------
  11.   # ● メイン処理
  12.   #--------------------------------------------------------------------------
  13.   def main
  14.     if $BTEST                         # 戦闘テストの場合
  15.       battle_test                     # 戦闘テストの開始処理
  16.     else                              # 通常のプレイの場合
  17.       super                           # 本来のメイン処理
  18.     end
  19.   end
  20.   #--------------------------------------------------------------------------
  21.   # ● 開始処理
  22.   #--------------------------------------------------------------------------
  23.   def start
  24.     super
  25.     load_database                     # データベースをロード
  26.     create_game_objects               # ゲームオブジェクトを作成
  27.     check_continue                    # コンティニュー有効判定
  28.     create_title_graphic              # タイトルグラフィックを作成
  29.     #create_command_window             # コマンドウィンドウを作成
  30.     new_command
  31.     play_title_music                  # タイトル画面の音楽を演奏
  32.   end
  33.   #--------------------------------------------------------------------------
  34.   # ● トランジション実行
  35.   #--------------------------------------------------------------------------
  36.   def perform_transition
  37.     Graphics.transition(20)
  38.   end
  39.   #--------------------------------------------------------------------------
  40.   # ● 開始後処理
  41.   #--------------------------------------------------------------------------
  42.   def post_start
  43.     super
  44.     #open_command_window
  45.   end
  46.   #--------------------------------------------------------------------------
  47.   # ● 終了前処理
  48.   #--------------------------------------------------------------------------
  49.   def pre_terminate
  50.     super
  51.    
  52.     #close_command_window
  53.   end
  54.   #--------------------------------------------------------------------------
  55.   # ● 終了処理
  56.   #--------------------------------------------------------------------------
  57.   def terminate
  58.     super
  59.     #dispose_command_window
  60.     snapshot_for_background
  61.     dispose_title_graphic
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # ● フレーム更新
  65.   #--------------------------------------------------------------------------
  66.   def update
  67.     super
  68.     #@command_window.update
  69.     new_inputupdate
  70.     if Input.trigger?(Input::C)
  71.       case @command_index
  72.       when 0    # ニューゲーム
  73.         command_new_game
  74.       when 1    # コンティニュー
  75.         command_continue
  76.       when 2    # シャットダウン
  77.         command_shutdown
  78.       end
  79.     end
  80.   end
  81.   #--------------------------------------------------------------------------
  82.   # ● データベースのロード
  83.   #--------------------------------------------------------------------------
  84.   def load_database
  85.     $data_actors        = load_data("Data/Actors.rvdata")
  86.     $data_classes       = load_data("Data/Classes.rvdata")
  87.     $data_skills        = load_data("Data/Skills.rvdata")
  88.     $data_items         = load_data("Data/Items.rvdata")
  89.     $data_weapons       = load_data("Data/Weapons.rvdata")
  90.     $data_armors        = load_data("Data/Armors.rvdata")
  91.     $data_enemies       = load_data("Data/Enemies.rvdata")
  92.     $data_troops        = load_data("Data/Troops.rvdata")
  93.     $data_states        = load_data("Data/States.rvdata")
  94.     $data_animations    = load_data("Data/Animations.rvdata")
  95.     $data_common_events = load_data("Data/CommonEvents.rvdata")
  96.     $data_system        = load_data("Data/System.rvdata")
  97.     $data_areas         = load_data("Data/Areas.rvdata")
  98.   end
  99.   #--------------------------------------------------------------------------
  100.   # ● 戦闘テスト用データベースのロード
  101.   #--------------------------------------------------------------------------
  102.   def load_bt_database
  103.     $data_actors        = load_data("Data/BT_Actors.rvdata")
  104.     $data_classes       = load_data("Data/BT_Classes.rvdata")
  105.     $data_skills        = load_data("Data/BT_Skills.rvdata")
  106.     $data_items         = load_data("Data/BT_Items.rvdata")
  107.     $data_weapons       = load_data("Data/BT_Weapons.rvdata")
  108.     $data_armors        = load_data("Data/BT_Armors.rvdata")
  109.     $data_enemies       = load_data("Data/BT_Enemies.rvdata")
  110.     $data_troops        = load_data("Data/BT_Troops.rvdata")
  111.     $data_states        = load_data("Data/BT_States.rvdata")
  112.     $data_animations    = load_data("Data/BT_Animations.rvdata")
  113.     $data_common_events = load_data("Data/BT_CommonEvents.rvdata")
  114.     $data_system        = load_data("Data/BT_System.rvdata")
  115.   end
  116.   #--------------------------------------------------------------------------
  117.   # ● 各種ゲームオブジェクトの作成
  118.   #--------------------------------------------------------------------------
  119.   def create_game_objects
  120.     $game_temp          = Game_Temp.new
  121.     $game_message       = Game_Message.new
  122.     $game_system        = Game_System.new
  123.     $game_switches      = Game_Switches.new
  124.     $game_variables     = Game_Variables.new
  125.     $game_self_switches = Game_SelfSwitches.new
  126.     $game_actors        = Game_Actors.new
  127.     $game_party         = Game_Party.new
  128.     $game_troop         = Game_Troop.new
  129.     $game_map           = Game_Map.new
  130.     $game_player        = Game_Player.new
  131.   end
  132.   #--------------------------------------------------------------------------
  133.   # ● コンティニュー有効判定
  134.   #--------------------------------------------------------------------------
  135.   def check_continue
  136.     @continue_enabled = (Dir.glob('Save*.rvdata').size > 0)
  137.   end
  138.   #--------------------------------------------------------------------------
  139.   # ● タイトルグラフィックの作成
  140.   #--------------------------------------------------------------------------
  141.   def create_title_graphic
  142.     @sprite_1 = Sprite.new
  143.     @sprite_1.bitmap = Cache.system("Title")
  144.   end
  145.   #--------------------------------------------------------------------------
  146.   # ● タイトルグラフィックの解放
  147.   #--------------------------------------------------------------------------
  148.   def dispose_title_graphic
  149.     @sprite_1.bitmap.dispose
  150.     @sprite_1.dispose
  151.     for i in 0..5
  152.       @sprite[i].bitmap.dispose
  153.       @sprite[i].dispose
  154.     end  
  155.   end
  156.      #--------------------------------------------------------------------------
  157.   # ● タイトル画面の音楽演奏
  158.   #--------------------------------------------------------------------------
  159.   def play_title_music
  160.     $data_system.title_bgm.play
  161.     RPG::BGS.stop
  162.     RPG::ME.stop
  163.   end
  164.   #--------------------------------------------------------------------------
  165.   # ● プレイヤーの初期位置存在チェック
  166.   #--------------------------------------------------------------------------
  167.   def confirm_player_location
  168.     if $data_system.start_map_id == 0
  169.       print "プレイヤーの初期位置が設定されていません。"
  170.       exit
  171.     end
  172.   end
  173.   #--------------------------------------------------------------------------
  174.   # ● コマンド : ニューゲーム
  175.   #--------------------------------------------------------------------------
  176.   def command_new_game
  177.     confirm_player_location
  178.     Sound.play_decision
  179.     $game_party.setup_starting_members            # 初期パーティ
  180.     $game_map.setup($data_system.start_map_id)    # 初期位置のマップ
  181.     $game_player.moveto($data_system.start_x, $data_system.start_y)
  182.     $game_player.refresh
  183.     $scene = Scene_Map.new
  184.     RPG::BGM.fade(1500)
  185.     #close_command_window
  186.     Graphics.fadeout(60)
  187.     Graphics.wait(40)
  188.     Graphics.frame_count = 0
  189.     RPG::BGM.stop
  190.     $game_map.autoplay
  191.   end
  192.   #--------------------------------------------------------------------------
  193.   # ● コマンド : コンティニュー
  194.   #--------------------------------------------------------------------------
  195.   def command_continue
  196.     if @continue_enabled
  197.       Sound.play_decision
  198.       $scene = Scene_File.new(false, true, false)
  199.     else
  200.       Sound.play_buzzer
  201.     end
  202.   end
  203.   #--------------------------------------------------------------------------
  204.   # ● コマンド : シャットダウン
  205.   #--------------------------------------------------------------------------
  206.   def command_shutdown
  207.     Sound.play_decision
  208.     RPG::BGM.fade(800)
  209.     RPG::BGS.fade(800)
  210.     RPG::ME.fade(800)
  211.     $scene = nil
  212.   end
  213.   #--------------------------------------------------------------------------
  214.   # ● 戦闘テスト
  215.   #--------------------------------------------------------------------------
  216.   def battle_test
  217.     load_bt_database                  # 戦闘テスト用データベースをロード
  218.     create_game_objects               # ゲームオブジェクトを作成
  219.     Graphics.frame_count = 0          # プレイ時間を初期化
  220.     $game_party.setup_battle_test_members
  221.     $game_troop.setup($data_system.test_troop_id)
  222.     $game_troop.can_escape = true
  223.     $game_system.battle_bgm.play
  224.     snapshot_for_background
  225.     $scene = Scene_Battle.new
  226.   end
  227.   #=========================================================================
  228.   #★定义新的标题选择菜单
  229.   #=========================================================================
  230.   
  231.   def new_command
  232.   @sprite = [Sprite.new]
  233.   for i in 0..5
  234.     @sprite[i]= Sprite.new
  235.     @sprite[i].opacity = 0
  236.     @sprite[i].x = 225
  237.     @sprite[i].y = 280+i/2*45-(i)%2*10
  238.     end
  239.     @sprite[0].bitmap = Bitmap.new("Graphics/Pictures/start_1")
  240.     @sprite[1].bitmap = Bitmap.new("Graphics/Pictures/start_2")
  241.     @sprite[2].bitmap = Bitmap.new("Graphics/Pictures/continue_1")
  242.     @sprite[3].bitmap = Bitmap.new("Graphics/Pictures/continue_2")
  243.     @sprite[4].bitmap = Bitmap.new("Graphics/Pictures/exit_1")
  244.     @sprite[5].bitmap = Bitmap.new("Graphics/Pictures/exit_2")
  245.     @command_index = 0
  246.      if @continue_enabled
  247.        @command_index=1
  248.      else
  249.        @sprite[2].tone = Tone.new(0,0,0,255)
  250.        @sprite[3].tone = Tone.new(0,0,0,255)
  251.      end  
  252.   
  253.   end
  254. #==========================================================================
  255. #★new_iputupdate
  256. #==========================================================================
  257.   def new_inputupdate
  258.     if Input.trigger?(Input::UP)
  259.       
  260.       @command_index -= 1
  261.       if @command_index < 0
  262.         @command_index = 2
  263.       end
  264.       $data_system.sounds[0].play
  265.     end
  266.     if Input.trigger?(Input::DOWN)
  267.       @command_index += 1
  268.       if @command_index > 2
  269.         @command_index = 0
  270.       end
  271.        $data_system.sounds[0].play
  272.     end
  273.     case @command_index
  274.     when 0
  275.       if @sprite[0].opacity >= 0
  276.         @sprite[0].opacity -= 30
  277.       end
  278.       if @sprite[1].opacity <= 240
  279.         @sprite[1].opacity += 30
  280.       end
  281.       if @sprite[2].opacity <= 210
  282.         @sprite[2].opacity += 30
  283.       end
  284.       if @sprite[3].opacity >= 0
  285.         @sprite[3].opacity -= 30
  286.       end
  287.       if @sprite[4].opacity <= 210
  288.         @sprite[4].opacity += 30
  289.       end
  290.       if @sprite[5].opacity >= 0
  291.         @sprite[5].opacity -= 30
  292.       end
  293.     when 1
  294.       if @sprite[0].opacity <= 210
  295.         @sprite[0].opacity += 30
  296.       end
  297.       if @sprite[1].opacity >= 0
  298.         @sprite[1].opacity -= 30
  299.       end
  300.       if @sprite[2].opacity >= 0
  301.         @sprite[2].opacity -= 30
  302.       end
  303.       if @sprite[3].opacity <= 240
  304.         @sprite[3].opacity += 30
  305.       end
  306.       if @sprite[4].opacity <= 210
  307.         @sprite[4].opacity += 30
  308.       end
  309.       if @sprite[5].opacity >= 0
  310.         @sprite[5].opacity -= 30
  311.       end
  312.     when 2
  313.       if @sprite[0].opacity <= 210
  314.         @sprite[0].opacity += 30
  315.       end
  316.       if @sprite[1].opacity >= 0
  317.         @sprite[1].opacity -= 30
  318.       end
  319.       if @sprite[2].opacity <= 210
  320.         @sprite[2].opacity += 30
  321.       end
  322.       if @sprite[3].opacity >= 0
  323.         @sprite[3].opacity -= 30
  324.       end
  325.       if @sprite[4].opacity >= 0
  326.         @sprite[4].opacity -= 30
  327.       end
  328.       if @sprite[5].opacity <= 240
  329.         @sprite[5].opacity += 30
  330.       end
  331.     end
  332.   end

  333. end

  334. #==============================================================================
  335. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  336. #==============================================================================
复制代码

作者: 火鸡三毛老大    时间: 2008-3-23 19:18
还有很多脚本请到http://rpg.blue/web/news.asp?class=31

请注明脚本出处 66RPG.
脚本会有一定冲突..请适当使用 [LINE]1,#dddddd[/LINE]版主对此帖的评论:『拿脚本灌水!23个脚本(还漏掉5)照以23处分,1帖5分 扣23*5分』,积分『-115』。这些被扣积分的一半会用于对本帖正确答案的悬赏。
作者: 雪流星    时间: 2008-3-23 21:26
你用脚本灌水阿~~

还有那个叶子的任务脚本是那个无耻的家伙直接改掉我的名字?

我可是有叶子的准许贴出来的

我记得之前好像也是你大量转载灌水国外脚本
作者: 越前リョーマ    时间: 2008-3-23 21:48
以下引用snstar2006于2008-3-23 13:26:35的发言:

你用脚本灌水阿~~

还有那个叶子的任务脚本是那个无耻的家伙直接改掉我的名字?

我可是有叶子的准许贴出来的

我记得之前好像也是你大量转载灌水国外脚本

感觉像是MJ一样……
但IP又不一样……

作者: 雪流星    时间: 2008-3-23 21:58
IP是可以骗人的

我就认识一个人,他的MJ和本尊IP不同

去网吧上网再回家答就好了
作者: 越前リョーマ    时间: 2008-3-23 22:26
以下引用snstar2006于2008-3-23 13:58:07的发言:

IP是可以骗人的

我就认识一个人,他的MJ和本尊IP不同

去网吧上网再回家答就好了

我也觉得有可能……
而且标题还是“等你三毛”
作者: 火鸡三毛老大    时间: 2008-3-24 00:11
这个是6R·VX技术联盟的人向我要脚本.....果然当灌水扣分了.....

不信自己查
VX技术联盟  QQ群:38697527
详情请看我签名.....
  扣分当作掩口废...
还有那个任务脚本我直接从别人范例拿的

而且我只有一个马甲   就是火鸡的马甲鸡

以下引用snstar2006于2008-3-23 13:58:07的发言:
IP是可以骗人的
我就认识一个人,他的MJ和本尊IP不同
去网吧上网再回家答就好了


看看发帖会我回帖的时间差
作者: 精灵使者    时间: 2008-3-24 02:47
你如果细心的看的话。我的ip每天都在更新的。
像这些事情请到开水区。
作者: 預感の邪惡    时间: 2008-3-24 03:23
提示: 作者被禁止或删除 内容自动屏蔽
作者: 精灵使者    时间: 2008-3-24 03:29
不是,是adsl的DHCP,每天给我分配一个IP地址。
另外我使用的有双线互联,目前的IP地址又一次被代理。




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