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

Project1

 找回密码
 注册会员
搜索
查看: 4069|回复: 28
打印 上一主题 下一主题

来点脚本越多越好~~~~~~~~~!等你三毛

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
20
在线时间
0 小时
注册时间
2008-3-23
帖子
1
跳转到指定楼层
1
发表于 2008-3-23 18:51:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
{/wx}
版务信息:本贴由楼主自主结贴~
‘-(<˙ㄧūê.症 .晩萁●,>” ⒎.。拉㈧岀屎能怪地球米有粌力﹖

Lv1.梦旅人

很傻很天真

梦石
0
星屑
55
在线时间
3 小时
注册时间
2007-3-13
帖子
3667
2
发表于 2008-3-23 18:53:04 | 只看该作者
脚本一   物品分类
  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
复制代码

系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

很傻很天真

梦石
0
星屑
55
在线时间
3 小时
注册时间
2007-3-13
帖子
3667
3
发表于 2008-3-23 18:53:30 | 只看该作者
脚本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
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

很傻很天真

梦石
0
星屑
55
在线时间
3 小时
注册时间
2007-3-13
帖子
3667
4
发表于 2008-3-23 18:53:55 | 只看该作者
脚本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
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

很傻很天真

梦石
0
星屑
55
在线时间
3 小时
注册时间
2007-3-13
帖子
3667
5
发表于 2008-3-23 18:54:20 | 只看该作者
脚本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
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

很傻很天真

梦石
0
星屑
55
在线时间
3 小时
注册时间
2007-3-13
帖子
3667
6
发表于 2008-3-23 18:54:41 | 只看该作者
脚本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. #==============================================================================
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

很傻很天真

梦石
0
星屑
55
在线时间
3 小时
注册时间
2007-3-13
帖子
3667
7
发表于 2008-3-23 18:55:45 | 只看该作者
脚本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
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

很傻很天真

梦石
0
星屑
55
在线时间
3 小时
注册时间
2007-3-13
帖子
3667
8
发表于 2008-3-23 18:56:19 | 只看该作者
脚本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
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

很傻很天真

梦石
0
星屑
55
在线时间
3 小时
注册时间
2007-3-13
帖子
3667
9
发表于 2008-3-23 19:00:02 | 只看该作者
脚本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
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

很傻很天真

梦石
0
星屑
55
在线时间
3 小时
注册时间
2007-3-13
帖子
3667
10
发表于 2008-3-23 19:00:39 | 只看该作者
脚本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. #==============================================================================
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

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

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-9 21:51

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表