Project1

标题: 〖RTAB〗二刀流 [打印本页]

作者: yzlsym    时间: 2008-4-24 21:44
标题: 〖RTAB〗二刀流
记得站上有人问过如何设置二刀流的二次攻击
于是去找了日站的脚本
原址http://members.jcom.home.ne.jp/cogwheel/
发现二刀流竟然更新到1.03了```
我们落后了```
现在我把它全部翻译出来了``
很强大`
比原来的设置方便多了``
只要设置职业就可以
不过只有RTAB的。。。
想要在普通应用``自己改吧``
范例省略```
  1. #Ver 1.04二刀流
  2. #技术支持 URL
  3. #Http://members.jcom.home.ne.jp/cogwheel/

  4. #==============================================================================
  5. # ■ Game_Actor
  6. #------------------------------------------------------------------------------
  7. #  处理角色的类。本类在 Game_Actors 类 ($game_actors)
  8. # 的内部使用、Game_Party 类请参考 ($game_party) 。
  9. #==============================================================================

  10. class Game_Actor <Game_Battler
  11.   #--------------------------------------------------------------------------
  12.   # ● 常数
  13.   #--------------------------------------------------------------------------
  14.   EDGE = 75 #二刀流发挥的能力[%]
  15.   #--------------------------------------------------------------------------
  16.   # ● 定义实例变量
  17.   #--------------------------------------------------------------------------
  18.   attr_accessor :first_weapon  # 二刀流变量
  19.   attr_accessor :second_weapon # 二刀流变量
  20.   attr_reader :weapon2_id      # 第二把武器
  21.   #--------------------------------------------------------------------------
  22.   # ●二刀流的职业
  23.   #--------------------------------------------------------------------------
  24.   def double_edge
  25.     case class_name
  26.     when "盗贼"
  27.       return true
  28.     else
  29.       return false
  30.     end
  31.   end
  32.   #--------------------------------------------------------------------------
  33.   # ● 二刀流装备确定
  34.   #--------------------------------------------------------------------------
  35.   def double_edge?
  36.     return (@weapon_id > 0 and @weapon2_id > 0)
  37.   end
  38.   #--------------------------------------------------------------------------
  39.   # ● 设置
  40.   #     actor_id : 角色 ID
  41.   #--------------------------------------------------------------------------
  42.   alias :setup_double :setup
  43.   def setup(actor_id)
  44.     setup_double(actor_id)
  45.     @weapon2_id = 0
  46.     if double_edge
  47.       if equippable?($data_weapons[@armor1_id])
  48.         @weapon2_id = @armor1_id
  49.       end
  50.       @armor1_id = 0
  51.     end
  52.   end
  53.   #--------------------------------------------------------------------------
  54.   # ● 获取普通攻击属性
  55.   #--------------------------------------------------------------------------
  56.   def element_set
  57.     if double_edge and second_weapon
  58.       weapon = $data_weapons[@weapon2_id]
  59.     else
  60.       weapon = $data_weapons[@weapon_id]
  61.     end
  62.     return weapon != nil ? weapon.element_set : []
  63.   end
  64.   #--------------------------------------------------------------------------
  65.   # ● 获取普通攻击状态变化 (+)
  66.   #--------------------------------------------------------------------------
  67.   def plus_state_set
  68.     if double_edge and second_weapon
  69.       weapon = $data_weapons[@weapon2_id]
  70.     else
  71.       weapon = $data_weapons[@weapon_id]
  72.     end
  73.     return weapon != nil ? weapon.plus_state_set : []
  74.   end
  75.   #--------------------------------------------------------------------------
  76.   # ● 获取普通攻击状态变化 (-)
  77.   #--------------------------------------------------------------------------
  78.   def minus_state_set
  79.     if double_edge and second_weapon
  80.       weapon = $data_weapons[@weapon2_id]
  81.     else
  82.       weapon = $data_weapons[@weapon_id]
  83.     end
  84.     return weapon != nil ? weapon.minus_state_set : []
  85.   end
  86.   #--------------------------------------------------------------------------
  87.   # ● 获取基本力量
  88.   #--------------------------------------------------------------------------
  89.   def base_str
  90.     n = $data_actors[@actor_id].parameters[2, @level]
  91.     weapon = $data_weapons[@weapon_id]
  92.     weapon2 = $data_weapons[@weapon2_id]
  93.     armor1 = $data_armors[@armor1_id]
  94.     armor2 = $data_armors[@armor2_id]
  95.     armor3 = $data_armors[@armor3_id]
  96.     armor4 = $data_armors[@armor4_id]
  97.     n += weapon != nil ? weapon.str_plus : 0
  98.     n += weapon2 != nil ? weapon2.str_plus : 0
  99.     n += armor1 != nil ? armor1.str_plus : 0
  100.     n += armor2 != nil ? armor2.str_plus : 0
  101.     n += armor3 != nil ? armor3.str_plus : 0
  102.     n += armor4 != nil ? armor4.str_plus : 0
  103.     return [[n, 1].max, 999].min
  104.   end
  105.   #--------------------------------------------------------------------------
  106.   # ● 获取基本灵巧
  107.   #--------------------------------------------------------------------------
  108.   def base_dex
  109.     n = $data_actors[@actor_id].parameters[3, @level]
  110.     weapon = $data_weapons[@weapon_id]
  111.     weapon2 = $data_weapons[@weapon2_id]
  112.     armor1 = $data_armors[@armor1_id]
  113.     armor2 = $data_armors[@armor2_id]
  114.     armor3 = $data_armors[@armor3_id]
  115.     armor4 = $data_armors[@armor4_id]
  116.     n += weapon != nil ? weapon.dex_plus : 0
  117.     n += weapon2 != nil ? weapon2.dex_plus : 0
  118.     n += armor1 != nil ? armor1.dex_plus : 0
  119.     n += armor2 != nil ? armor2.dex_plus : 0
  120.     n += armor3 != nil ? armor3.dex_plus : 0
  121.     n += armor4 != nil ? armor4.dex_plus : 0
  122.     return [[n, 1].max, 999].min
  123.   end
  124.   #--------------------------------------------------------------------------
  125.   # ● 获取基本速度
  126.   #--------------------------------------------------------------------------
  127.   def base_agi
  128.     n = $data_actors[@actor_id].parameters[4, @level]
  129.     weapon = $data_weapons[@weapon_id]
  130.     weapon2 = $data_weapons[@weapon2_id]
  131.     armor1 = $data_armors[@armor1_id]
  132.     armor2 = $data_armors[@armor2_id]
  133.     armor3 = $data_armors[@armor3_id]
  134.     armor4 = $data_armors[@armor4_id]
  135.     n += weapon != nil ? weapon.agi_plus : 0
  136.     n += weapon2 != nil ? weapon2.agi_plus : 0
  137.     n += armor1 != nil ? armor1.agi_plus : 0
  138.     n += armor2 != nil ? armor2.agi_plus : 0
  139.     n += armor3 != nil ? armor3.agi_plus : 0
  140.     n += armor4 != nil ? armor4.agi_plus : 0
  141.     return [[n, 1].max, 999].min
  142.   end
  143.   #--------------------------------------------------------------------------
  144.   # ● 获取基本魔力
  145.   #--------------------------------------------------------------------------
  146.   def base_int
  147.     n = $data_actors[@actor_id].parameters[5, @level]
  148.     weapon = $data_weapons[@weapon_id]
  149.     weapon2 = $data_weapons[@weapon2_id]
  150.     armor1 = $data_armors[@armor1_id]
  151.     armor2 = $data_armors[@armor2_id]
  152.     armor3 = $data_armors[@armor3_id]
  153.     armor4 = $data_armors[@armor4_id]
  154.     n += weapon != nil ? weapon.int_plus : 0
  155.     n += weapon2 != nil ? weapon2.int_plus : 0
  156.     n += armor1 != nil ? armor1.int_plus : 0
  157.     n += armor2 != nil ? armor2.int_plus : 0
  158.     n += armor3 != nil ? armor3.int_plus : 0
  159.     n += armor4 != nil ? armor4.int_plus : 0
  160.     return [[n, 1].max, 999].min
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # ● 获取基本攻击力
  164.   #--------------------------------------------------------------------------
  165.   alias :base_atk_double :base_atk
  166.   def base_atk
  167.     if double_edge and
  168.       atk1 = $data_weapons[@weapon_id] != nil ?
  169.               $data_weapons[@weapon_id].atk : 0
  170.       atk2 = $data_weapons[@weapon2_id] != nil ?
  171.               $data_weapons[@weapon2_id].atk : 0
  172.       if first_weapon
  173.         return atk1
  174.       elsif second_weapon
  175.         return atk2
  176.       else
  177.         return (atk1 + atk2) * EDGE / 100
  178.       end
  179.     else
  180.       return base_atk_double
  181.     end
  182.   end
  183.   #--------------------------------------------------------------------------
  184.   # ● 获取基本物理防御
  185.   #--------------------------------------------------------------------------
  186.   def base_pdef
  187.     weapon = $data_weapons[@weapon_id]
  188.     weapon2 = $data_weapons[@weapon2_id]
  189.     armor1 = $data_armors[@armor1_id]
  190.     armor2 = $data_armors[@armor2_id]
  191.     armor3 = $data_armors[@armor3_id]
  192.     armor4 = $data_armors[@armor4_id]
  193.     pdef1 = weapon != nil ? weapon.pdef : 0
  194.     pdef2 = armor1 != nil ? armor1.pdef : 0
  195.     pdef3 = armor2 != nil ? armor2.pdef : 0
  196.     pdef4 = armor3 != nil ? armor3.pdef : 0
  197.     pdef5 = armor4 != nil ? armor4.pdef : 0
  198.     pdef6 = weapon2 != nil ? weapon2.pdef : 0
  199.     return pdef1 + pdef2 + pdef3 + pdef4 + pdef5 + pdef6
  200.   end
  201.   #--------------------------------------------------------------------------
  202.   # ● 获取基本魔法防御
  203.   #--------------------------------------------------------------------------
  204.   def base_mdef
  205.     weapon = $data_weapons[@weapon_id]
  206.     weapon2 = $data_weapons[@weapon2_id]
  207.     armor1 = $data_armors[@armor1_id]
  208.     armor2 = $data_armors[@armor2_id]
  209.     armor3 = $data_armors[@armor3_id]
  210.     armor4 = $data_armors[@armor4_id]
  211.     mdef1 = weapon != nil ? weapon.mdef : 0
  212.     mdef2 = armor1 != nil ? armor1.mdef : 0
  213.     mdef3 = armor2 != nil ? armor2.mdef : 0
  214.     mdef4 = armor3 != nil ? armor3.mdef : 0
  215.     mdef5 = armor4 != nil ? armor4.mdef : 0
  216.     mdef6 = weapon2 != nil ? weapon2.mdef : 0
  217.     return mdef1 + mdef2 + mdef3 + mdef4 + mdef5 + mdef6
  218.   end
  219.   #--------------------------------------------------------------------------
  220.   # ● 普通攻击 获取攻击方动画 ID
  221.   #--------------------------------------------------------------------------
  222.   def animation1_id
  223.     if double_edge and second_weapon
  224.       weapon = $data_weapons[@weapon2_id]
  225.     else
  226.       weapon = $data_weapons[@weapon_id]
  227.     end
  228.     return weapon != nil ? weapon.animation1_id : 0
  229.   end
  230.   #--------------------------------------------------------------------------
  231.   # ● 普通攻击 获取对象方动画 ID
  232.   #--------------------------------------------------------------------------
  233.   def animation2_id
  234.     if double_edge and second_weapon
  235.       weapon = $data_weapons[@weapon2_id]
  236.     else
  237.       weapon = $data_weapons[@weapon_id]
  238.     end
  239.     return weapon != nil ? weapon.animation2_id : 0
  240.   end
  241.   #--------------------------------------------------------------------------
  242.   # ● 获取类名
  243.   #--------------------------------------------------------------------------
  244.   def class_name
  245.     return $data_classes[@class_id].name
  246.   end
  247.   #--------------------------------------------------------------------------
  248.   # ● 变更装备
  249.   #     equip_type : 装备类型
  250.   #     id    : 武器 or 防具 ID  (0 为解除装备)
  251.   #--------------------------------------------------------------------------
  252.   def equip(equip_type, id)
  253.     case equip_type
  254.       when 0 # 武器
  255.       if id == 0 or $game_party.weapon_number(id) > 0
  256.         if double_edge and id > 0 and
  257.             $scene.is_a?(Scene_Map) and @weapon_id > 0
  258.           $game_party.gain_weapon(@weapon2_id, 1)
  259.           @weapon2_id = id
  260.           $game_party.lose_weapon(id, 1)
  261.         else
  262.           $game_party.gain_weapon(@weapon_id, 1)
  263.           @weapon_id = id
  264.           $game_party.lose_weapon(id, 1)
  265.         end
  266.       end
  267.      when 1 # 盾
  268.       if double_edge
  269.         if id == 0 or $game_party.weapon_number(id) > 0
  270.           $game_party.gain_weapon(@weapon2_id, 1)
  271.           @weapon2_id = id
  272.           $game_party.lose_weapon(id, 1)
  273.         else
  274.           update_auto_state($data_armors[@armor1_id], $data_armors[id])
  275.           $game_party.gain_armor(@armor1_id, 1)
  276.           @armor1_id = id
  277.           $game_party.lose_armor(id, 1)
  278.         end
  279.       else
  280.         if id == 0 or $game_party.armor_number(id) > 0
  281.           update_auto_state($data_armors[@armor1_id], $data_armors[id])
  282.           $game_party.gain_armor(@armor1_id, 1)
  283.           @armor1_id = id
  284.           $game_party.lose_armor(id, 1)
  285.         end
  286.       end
  287.      when 2 # 头
  288.       if id == 0 or $game_party.armor_number(id) > 0
  289.         update_auto_state($data_armors[@armor2_id], $data_armors[id])
  290.         $game_party.gain_armor(@armor2_id, 1)
  291.         @armor2_id = id
  292.         $game_party.lose_armor(id, 1)
  293.       end
  294.      when 3 # 身体
  295.       if id == 0 or $game_party.armor_number(id) > 0
  296.         update_auto_state($data_armors[@armor3_id], $data_armors[id])
  297.         $game_party.gain_armor(@armor3_id, 1)
  298.         @armor3_id = id
  299.         $game_party.lose_armor(id, 1)
  300.       end
  301.     when 4 # 装饰品
  302.       if id == 0 or $game_party.armor_number(id) > 0
  303.         update_auto_state($data_armors[@armor4_id], $data_armors[id])
  304.         $game_party.gain_armor(@armor4_id, 1)
  305.         @armor4_id = id
  306.         $game_party.lose_armor(id, 1)
  307.       end
  308.      when 5 #二刀流
  309.       $game_party.gain_weapon(@weapon2_id, 1)
  310.       @weapon2_id = 0
  311.       update_auto_state($data_armors[@armor1_id], $data_armors[0])
  312.       $game_party.gain_armor(@armor1_id, 1)
  313.       @armor1_id = 0
  314.     end
  315.   end
  316.   #--------------------------------------------------------------------------
  317.   # ● 更改职业 ID
  318.   #     class_id : 新的职业 ID
  319.   #--------------------------------------------------------------------------
  320.   def class_id=(class_id)
  321.     if $data_classes[class_id] != nil
  322.       edge = double_edge
  323.       @class_id = class_id
  324.       # 避开无法装备的物品
  325.       unless equippable?($data_weapons[@weapon_id])
  326.         equip(0, 0)
  327.       end
  328.       unless equippable?($data_armors[@armor1_id])
  329.         equip(1, 0)
  330.       end
  331.       unless equippable?($data_armors[@armor2_id])
  332.         equip(2, 0)
  333.       end
  334.       unless equippable?($data_armors[@armor3_id])
  335.         equip(3, 0)
  336.       end
  337.       unless equippable?($data_armors[@armor4_id])
  338.         equip(4, 0)
  339.       end
  340.       if edge != double_edge
  341.         equip(5, 0)
  342.       end
  343.     end
  344.   end
  345. end
复制代码

作者: yzlsym    时间: 2008-4-24 21:44
接上``非连帖``
  1. #==============================================================================
  2. # ■ Game_Party
  3. #------------------------------------------------------------------------------
  4. #  处理同伴的类。包含金钱以及物品的信息。本类的实例
  5. # 请参考 $game_party。
  6. #==============================================================================

  7. class Game_Party
  8.   #--------------------------------------------------------------------------
  9.   # ● 设置战斗测试用同伴
  10.   #--------------------------------------------------------------------------
  11.   def setup_battle_test_members
  12.     @actors = []
  13.     for battler in $data_system.test_battlers
  14.       actor = $game_actors[battler.actor_id]
  15.       actor.level = battler.level
  16.       gain_weapon(battler.weapon_id, 1)
  17.       if actor.double_edge
  18.         gain_weapon(battler.armor1_id, 1)
  19.       else
  20.         gain_armor(battler.armor1_id, 1)
  21.       end
  22.       gain_armor(battler.armor2_id, 1)
  23.       gain_armor(battler.armor3_id, 1)
  24.       gain_armor(battler.armor4_id, 1)
  25.       actor.equip(0, battler.weapon_id)
  26.       if actor.double_edge
  27.         if actor.equippable?($data_weapons[battler.armor1_id])
  28.           actor.equip(1, battler.armor1_id)
  29.         end
  30.       else
  31.         actor.equip(1, battler.armor1_id)
  32.       end
  33.       actor.equip(2, battler.armor2_id)
  34.       actor.equip(3, battler.armor3_id)
  35.       actor.equip(4, battler.armor4_id)
  36.       actor.recover_all
  37.       @actors.push(actor)
  38.     end
  39.     @items = {}
  40.     for i in 1...$data_items.size
  41.       if $data_items[i].name != ""
  42.         occasion = $data_items[i].occasion
  43.         if occasion == 0 or occasion == 1
  44.           @items[i] = 99
  45.         end
  46.       end
  47.     end
  48.   end
  49. end
  50. #==============================================================================
  51. # ■ Window_EquipRight
  52. #------------------------------------------------------------------------------
  53. #  装备画面、显示角色现在装备的物品的窗口。
  54. #==============================================================================

  55. class Window_EquipRight <Window_Selectable
  56.   #--------------------------------------------------------------------------
  57.   # ● 刷新
  58.   #--------------------------------------------------------------------------
  59.   def refresh
  60.     self.contents.clear
  61.     @data = []
  62.     @data.push($data_weapons[@actor.weapon_id])
  63.     if @actor.double_edge
  64.       @data.push($data_weapons[@actor.weapon2_id])
  65.     else
  66.       @data.push($data_armors[@actor.armor1_id])
  67.     end
  68.     @data.push($data_armors[@actor.armor2_id])
  69.     @data.push($data_armors[@actor.armor3_id])
  70.     @data.push($data_armors[@actor.armor4_id])
  71.     @item_max = @data.size
  72.     self.contents.font.color = system_color
  73.     self.contents.draw_text(4, 32 * 0, 92, 32, $data_system.words.weapon)
  74.     if @actor.double_edge
  75.       self.contents.draw_text(4, 32 * 1, 92, 32, $data_system.words.weapon)
  76.     else
  77.       self.contents.draw_text(4, 32 * 1, 92, 32, $data_system.words.armor1)
  78.     end
  79.     self.contents.draw_text(4, 32 * 2, 92, 32, $data_system.words.armor2)
  80.     self.contents.draw_text(4, 32 * 3, 92, 32, $data_system.words.armor3)
  81.     self.contents.draw_text(5, 32 * 4, 92, 32, $data_system.words.armor4)
  82.     draw_item_name(@data[0], 92, 32 * 0)
  83.     draw_item_name(@data[1], 92, 32 * 1)
  84.     draw_item_name(@data[2], 92, 32 * 2)
  85.     draw_item_name(@data[3], 92, 32 * 3)
  86.     draw_item_name(@data[4], 92, 32 * 4)
  87.   end
  88. end

  89. #==============================================================================
  90. # ■ Scene_Equip
  91. #------------------------------------------------------------------------------
  92. #  处理装备画面的类。
  93. #==============================================================================

  94. class Scene_Equip
  95.   #--------------------------------------------------------------------------
  96.   # ● 初始化对像
  97.   #     actor_index : 角色索引
  98.   #     equip_index : 装备索引
  99.   #--------------------------------------------------------------------------
  100.   def initialize(actor_index = 0, equip_index = 0)
  101.     @actor_index = actor_index
  102.     @equip_index = equip_index
  103.   end
  104.   #--------------------------------------------------------------------------
  105.   # ● 主处理
  106.   #--------------------------------------------------------------------------
  107.   def main
  108.     # 获取角色
  109.     @actor = $game_party.actors[@actor_index]
  110.     # 生成窗口
  111.     @help_window = Window_Help.new
  112.     @left_window = Window_EquipLeft.new(@actor)
  113.     @right_window = Window_EquipRight.new(@actor)
  114.     @item_window1 = Window_EquipItem.new(@actor, 0)
  115.     unless @actor.double_edge
  116.       @item_window2 = Window_EquipItem.new(@actor, 1)
  117.     end
  118.     @item_window3 = Window_EquipItem.new(@actor, 2)
  119.     @item_window4 = Window_EquipItem.new(@actor, 3)
  120.     @item_window5 = Window_EquipItem.new(@actor, 4)
  121.     # 关联帮助窗口
  122.     @right_window.help_window = @help_window
  123.     @item_window1.help_window = @help_window
  124.     unless @actor.double_edge
  125.       @item_window2.help_window = @help_window
  126.     end
  127.     @item_window3.help_window = @help_window
  128.     @item_window4.help_window = @help_window
  129.     @item_window5.help_window = @help_window
  130.     # 设置光标位置
  131.     @right_window.index = @equip_index
  132.     refresh
  133.     # 执行过渡
  134.     Graphics.transition
  135.     # 主循环
  136.     loop do
  137.       # 刷新游戏画面
  138.       Graphics.update
  139.       # 刷新输入信息
  140.       Input.update
  141.       # 刷新画面
  142.       update
  143.       # 如果画面切换的话的就中断循环
  144.       if $scene != self
  145.         break
  146.       end
  147.     end
  148.     # 准备过渡
  149.     Graphics.freeze
  150.     # 释放窗口
  151.     @help_window.dispose
  152.     @left_window.dispose
  153.     @right_window.dispose
  154.     @item_window1.dispose
  155. #    unless @actor.double_edge
  156. #      @item_window2.dispose
  157. #    end
  158.     @item_window3.dispose
  159.     @item_window4.dispose
  160.     @item_window5.dispose
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # ● 刷新
  164.   #--------------------------------------------------------------------------
  165.   def refresh
  166.     # 设置物品窗口的可视状态
  167.     if @actor.double_edge
  168.       @item_window1.visible = (@right_window.index == 0 or @right_window.index == 1)
  169.     else
  170.       @item_window1.visible = (@right_window.index == 0)
  171.       @item_window2.visible = (@right_window.index == 1)
  172.     end
  173.     @item_window3.visible = (@right_window.index == 2)
  174.     @item_window4.visible = (@right_window.index == 3)
  175.     @item_window5.visible = (@right_window.index == 4)
  176.     # 获取当前装备中的物品
  177.     item1 = @right_window.item
  178.     # 设置当前的物品窗口到 @item_window
  179.     case @right_window.index
  180.     when 0
  181.       @item_window = @item_window1
  182.     when 1
  183.       if @actor.double_edge
  184.         @item_window = @item_window1
  185.       else
  186.         @item_window = @item_window2
  187.       end
  188.     when 2
  189.       @item_window = @item_window3
  190.     when 3
  191.       @item_window = @item_window4
  192.     when 4
  193.       @item_window = @item_window5
  194.     end
  195.     # 右窗口被激活的情况下
  196.     if @right_window.active
  197.       # 删除变更装备后的能力
  198.       @left_window.set_new_parameters(nil, nil, nil)
  199.     end
  200.     # 物品窗口被激活的情况下
  201.     if @item_window.active
  202.       # 获取现在选中的物品
  203.       item2 = @item_window.item
  204.       # 变更装备
  205.       last_hp = @actor.hp
  206.       last_sp = @actor.sp
  207.       @actor.equip(@right_window.index, item2 == nil ? 0 : item2.id)
  208.       # 获取变更装备后的能力值
  209.       new_atk = @actor.atk
  210.       new_pdef = @actor.pdef
  211.       new_mdef = @actor.mdef
  212.       # 返回到装备
  213.       @actor.equip(@right_window.index, item1 == nil ? 0 : item1.id)
  214.       @actor.hp = last_hp
  215.       @actor.sp = last_sp
  216.       # 描画左窗口
  217.       @left_window.set_new_parameters(new_atk, new_pdef, new_mdef)
  218.     end
  219.   end
  220.   #--------------------------------------------------------------------------
  221.   # ● 刷新画面
  222.   #--------------------------------------------------------------------------
  223.   def update
  224.     # 刷新窗口
  225.     @left_window.update
  226.     @right_window.update
  227.     @item_window.update
  228.     refresh
  229.     # 右侧窗口被激活的情况下: 调用 update_right
  230.     if @right_window.active
  231.       update_right
  232.       return
  233.     end
  234.     # 物品窗口被激活的情况下: 调用 update_item
  235.     if @item_window.active
  236.       update_item
  237.       return
  238.     end
  239.   end
  240.   #--------------------------------------------------------------------------
  241.   # ● 刷新画面 (右侧窗口被激活的情况下)
  242.   #--------------------------------------------------------------------------
  243.   def update_right
  244.     # 按下 B 键的情况下
  245.     if Input.trigger?(Input::B)
  246.       # 演奏取消 SE
  247.       $game_system.se_play($data_system.cancel_se)
  248.       # 切换到菜单画面
  249.       $scene = Scene_Menu.new(2)
  250.       return
  251.     #二刀流者唯一的武器如果左右手交换
  252.       if @actor.double_edge and @actor.weapon_id == 0 and @actor.weapon2_id > 0
  253.         weapon = @actor.weapon2_id
  254.         @actor.equip(1, 0)
  255.         @actor.equip(0, weapon)
  256.       end
  257.       return
  258.     end
  259.     # 按下 C 键的情况下
  260.     if Input.trigger?(Input::C)
  261.       # 固定装备的情况下
  262.       if @actor.equip_fix?(@right_window.index)
  263.         # 演奏冻结 SE
  264.         $game_system.se_play($data_system.buzzer_se)
  265.         return
  266.       end
  267.       # 演奏确定 SE
  268.       $game_system.se_play($data_system.decision_se)
  269.       # 激活物品窗口
  270.       @right_window.active = false
  271.       @item_window.active = true
  272.       @item_window.index = 0
  273.       return
  274.     end
  275.     # 按下 R 键的情况下
  276.     if Input.trigger?(Input::RIGHT) or Input.trigger?(Input::R)
  277.       # 演奏光标 SE
  278.       $game_system.se_play($data_system.cursor_se)
  279.       # 移至下一位角色
  280.       @actor_index += 1
  281.       @actor_index %= $game_party.actors.size
  282.       @actor = $game_party.actors[@actor_index]
  283.       # 切换到别的装备画面
  284.       $scene = Scene_Equip.new(@actor_index, @right_window.index)
  285.       return
  286.     end
  287.     # 按下 L 键的情况下
  288.     if Input.trigger?(Input::LEFT) or Input.trigger?(Input::L)
  289.       # 演奏光标 SE
  290.       $game_system.se_play($data_system.cursor_se)
  291.       # 移至上一位角色
  292.       @actor_index += $game_party.actors.size - 1
  293.       @actor_index %= $game_party.actors.size
  294.       @actor = $game_party.actors[@actor_index]
  295.       # 切换到别的装备画面
  296.       $scene = Scene_Equip.new(@actor_index, @right_window.index)
  297.       return
  298.     end
  299.   end
  300. end

  301. #==============================================================================
  302. # ■ Scene_Battle (分割定义 4)
  303. #------------------------------------------------------------------------------
  304. #  处理战斗画面的类。
  305. #==============================================================================
  306. class Scene_Battle
  307. #--------------------------------------------------------------------------
  308. # ● 刷新画面 (主阶段步骤 3 : 行动方动画)
  309. #--------------------------------------------------------------------------
  310.   alias :update_phase4_step3_double :update_phase4_step3
  311.   def update_phase4_step3(battler)
  312.     update_phase4_step3_double(battler)
  313.     if battler.is_a?(Game_Actor) and battler.anime1 == 0 and
  314.         battler.second_weapon
  315.       battler.white_flash = false
  316.       battler.wait = 0
  317.     end
  318.   end
  319. #--------------------------------------------------------------------------
  320. # ● 刷新画面 (主阶段步骤 4 : 对像方动画)
  321. #--------------------------------------------------------------------------
  322.   def update_phase4_step4(battler)
  323.     # 对像方动画
  324.     if battler.target[0].is_a?(Game_Enemy) and battler.anime1 != 0
  325.        camera_set(battler)
  326.     end
  327.     # Miss的情况下
  328.     for target in battler.target
  329.       if battler.is_a?(Game_Actor) and battler.second_weapon
  330.         target.animation.push([battler.anime2,
  331.                                     (target.damage[battler] != "Miss"), true])
  332.       else
  333.         target.animation.push([battler.anime2,
  334.                                           (target.damage[battler] != "Miss")])
  335.       end
  336.       unless battler.anime2 == 0
  337.         battler.wait = 2 * $data_animations[battler.anime2].frame_max - 10
  338.       end
  339.     end
  340.     # 移至步骤 5
  341.     battler.phase = 5
  342.   end
  343. #--------------------------------------------------------------------------
  344. # ● 刷新画面 (主阶段步骤 5 : 显示伤害)
  345. #--------------------------------------------------------------------------
  346.   alias :update_phase4_step5_double :update_phase4_step5
  347.   def update_phase4_step5(battler)
  348.     update_phase4_step5_double (battler)
  349.     if battler.is_a?(Game_Actor) and battler.target.size > 0 and
  350.         (not battler.target[0].hidden and
  351.         (battler.target[0].hp > 0 or battler.target[0].immortal)) and
  352.         battler.current_action.kind == 0 and battler.double_edge?
  353.       if battler.first_weapon
  354.         battler.first_weapon = false
  355.         battler.second_weapon = true
  356.         battler.wait = 0
  357.         battler.phase = 2
  358.       else battler.second_weapon
  359.         battler.second_weapon = false
  360.       end
  361.     elsif battler.is_a?(Game_Actor)
  362.       battler.first_weapon = false
  363.       battler.second_weapon = false
  364.     end
  365.   end
  366. #--------------------------------------------------------------------------
  367. # ● 开始行动
  368. #--------------------------------------------------------------------------
  369.   def action_start(battler)
  370.     battler.phase = 1
  371.     battler.anime1 = 0
  372.     battler.anime2 = 0
  373.     battler.target = []
  374.     battler.event = 0
  375.     if battler.is_a?(Game_Actor) and battler.current_action.kind == 0
  376.       battler.first_weapon = true
  377.       battler.second_weapon = false
  378.     end
  379.     @action_battlers.unshift(battler)
  380.   end
  381. end

  382. #==============================================================================
  383. # ■ Window_Status
  384. #------------------------------------------------------------------------------
  385. #  显示状态画面、完全规格的状态窗口。
  386. #==============================================================================

  387. class Window_Status <Window_Base
  388.   #--------------------------------------------------------------------------
  389.   # ● 刷新
  390.   #--------------------------------------------------------------------------
  391.   def refresh
  392.     self.contents.clear
  393.     draw_actor_graphic(@actor, 44, 96)
  394.     draw_actor_battler(@actor, 426, 368)
  395.     draw_actor_name(@actor, 24, 0)
  396.     draw_actor_class(@actor, 24 + 144, 0)
  397.     draw_actor_level(@actor, 320, 16)
  398.     draw_actor_state(@actor, 320, 48)
  399.     draw_actor_hp(@actor, 68, 32, 172)
  400.     draw_actor_sp(@actor, 68, 64, 172)
  401.     draw_actor_parameter(@actor, 68, 112, 0)
  402.     draw_actor_parameter(@actor, 68, 144, 1)
  403.     draw_actor_parameter(@actor, 68, 176, 2)
  404.     draw_actor_parameter(@actor, 68, 224, 3)
  405.     draw_actor_parameter(@actor, 68, 256, 4)
  406.     draw_actor_parameter(@actor, 68, 288, 5)
  407.     draw_actor_parameter(@actor, 68, 320, 6)
  408.     self.contents.font.color = system_color
  409.     self.contents.draw_text(304, 96, 80, 32, "EXP")
  410.     self.contents.draw_text(304, 128, 80, 32, "NEXT")
  411.     self.contents.font.color = normal_color
  412.     self.contents.draw_text(304 + 80, 96, 84, 32, @actor.exp_s, 2)
  413.     self.contents.draw_text(304 + 80, 128, 84, 32, @actor.next_rest_exp_s, 2)
  414.     self.contents.font.color = system_color
  415.     self.contents.draw_text(304, 176, 96, 32, "装备")
  416.     draw_item_name($data_weapons[@actor.weapon_id], 304 + 16, 208)
  417.     if @actor.double_edge
  418.       draw_item_name($data_weapons[@actor.weapon2_id], 304 + 16, 240)
  419.     else
  420.       draw_item_name($data_armors[@actor.armor1_id], 304 + 16, 240)
  421.     end
  422.     draw_item_name($data_armors[@actor.armor2_id], 304 + 16, 272)
  423.     draw_item_name($data_armors[@actor.armor3_id], 304 + 16, 304)
  424.     draw_item_name($data_armors[@actor.armor4_id], 304 + 16, 336)
  425.   end
  426. end

  427. #==============================================================================
  428. # ■ Sprite_Battler
  429. #------------------------------------------------------------------------------
  430. #  战斗显示用活动块。Game_Battler 类的实例监视、
  431. # 活动块的状态的监视。
  432. #==============================================================================

  433. class Sprite_Battler <RPG:: Sprite
  434.   #--------------------------------------------------------------------------
  435.   # ● 刷新画面
  436.   #--------------------------------------------------------------------------
  437.   def update
  438.     super
  439.     # 战斗者为 nil 的情况下
  440.     if @battler == nil
  441.       self.bitmap = nil
  442.       loop_animation(nil)
  443.       return
  444.     end
  445.     # 文件名和色相与当前情况有差异的情况下
  446.     if @battler.battler_name != @battler_name or
  447.        @battler.battler_hue != @battler_hue
  448.       # 获取、设置位图
  449.       @battler_name = @battler.battler_name
  450.       @battler_hue = @battler.battler_hue
  451.       self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
  452.       @width = bitmap.width
  453.       @height = bitmap.height
  454.       self.ox = @width / 2
  455.       self.oy = @height
  456.       if @battler.is_a?(Game_Enemy)
  457.         @battler.height = @height
  458.       end
  459.       # 如果是战斗不能或者是隐藏状态就把透明度设置成 0
  460.       if @battler.dead? or @battler.hidden
  461.         self.opacity = 0
  462.       end
  463.     end
  464.     # 动画 ID 与当前的情况有差异的情况下
  465.     if @battler.state_animation_id != @state_animation_id
  466.       @state_animation_id = @battler.state_animation_id
  467.       loop_animation($data_animations[@state_animation_id])
  468.     end
  469.     # 应该被显示的角色的情况下
  470.     if @battler.is_a?(Game_Actor) and @battler_visible
  471.       # 不是主状态的时候稍稍降低点透明度
  472.       if $game_temp.battle_main_phase
  473.         self.opacity += 3 if self.opacity < 255
  474.       else
  475.         self.opacity -= 3 if self.opacity > 207
  476.       end
  477.     end
  478.     # 明灭
  479.     if @battler.blink
  480.       blink_on
  481.     else
  482.       blink_off
  483.     end
  484.     # 不可见的情况下
  485.     unless @battler_visible
  486.       # 出现
  487.       if not @battler.hidden and not @battler.dead? and
  488.          (@battler.damage.size < 2 or @battler.damage_pop.size < 2)
  489.         appear
  490.         @battler_visible = true
  491.       end
  492.     end
  493.     # 伤害
  494.     for battler in @battler.damage_pop
  495.       if battler[0].class == Array
  496.         if battler[0][1] >= 0
  497.           $scene.skill_se
  498.         else
  499.           $scene.levelup_se
  500.         end
  501.         damage(@battler.damage[battler[0]], false, 2)
  502.       else
  503.         damage(@battler.damage[battler[0]], @battler.critical[battler[0]])
  504.       end
  505.       if @battler.damage_sp.include?(battler[0])
  506.         damage(@battler.damage_sp[battler[0]],
  507.                 @battler.critical[battler[0]], 1)
  508.         @battler.damage_sp.delete(battler[0])
  509.       end
  510.       @battler.damage_pop.delete(battler[0])
  511.       @battler.damage.delete(battler[0])
  512.       @battler.critical.delete(battler[0])
  513.     end
  514.     # 可见的情况下
  515.     if @battler_visible
  516.       # 逃跑
  517.       if @battler.hidden
  518.         $game_system.se_play($data_system.escape_se)
  519.         escape
  520.         @battler_visible = false
  521.       end
  522.       # 白色闪烁
  523.       if @battler.white_flash
  524.         whiten
  525.         @battler.white_flash = false
  526.       end
  527.       # 动画
  528.       unless @battler.animation.empty?
  529.         for animation in @battler.animation.reverse
  530.           if animation[2]
  531.             animation($data_animations[animation[0]], animation[1], true)
  532.           else
  533.             animation($data_animations[animation[0]], animation[1])
  534.           end
  535.           @battler.animation.delete(animation)
  536.         end
  537.       end
  538.       # 死亡
  539.       if @battler.damage.empty? and @battler.dead?
  540.         if $scene.dead_ok?(@battler)
  541.           if @battler.is_a?(Game_Enemy)
  542.             $game_system.se_play($data_system.enemy_collapse_se)
  543.           else
  544.             $game_system.se_play($data_system.actor_collapse_se)
  545.           end
  546.           collapse
  547.           @battler_visible = false
  548.         end
  549.       end
  550.     end
  551.     # 设置活动块的坐标
  552.     self.x = @battler.screen_x
  553.     self.y = @battler.screen_y
  554.     self.z = @battler.screen_z
  555.     if @battler.is_a?(Game_Enemy)
  556.       self.zoom_x = @battler.real_zoom * @battler.zoom
  557.       self.zoom_y = @battler.real_zoom * @battler.zoom
  558.     end
  559.   end
  560. end

  561. #==============================================================================
  562. # ■ Sprite module
  563. #------------------------------------------------------------------------------
  564. # 管理动画的模块。
  565. #==============================================================================

  566. module RPG
  567.   class Sprite < ::Sprite
  568.     def animation(animation, hit, reverse = false)
  569.       return if animation == nil
  570.       num = @_animation.size
  571.       @_animation.push([animation, hit, animation.frame_max, [], reverse])
  572.       bitmap = RPG::Cache.animation(animation.animation_name,
  573.                                     animation.animation_hue)
  574.       if @@_reference_count.include?(bitmap)
  575.         @@_reference_count[bitmap] += 1
  576.       else
  577.         @@_reference_count[bitmap] = 1
  578.       end
  579.       if @_animation[num][0] != 3 or not @@_animations.include?(animation)
  580.         for i in 0..15
  581.           sprite = ::Sprite.new
  582.           sprite.bitmap = bitmap
  583.           sprite.visible = false
  584.           @_animation[num][3].push(sprite)
  585.         end
  586.         unless @@_animations.include?(animation)
  587.           @@_animations.push(animation)
  588.         end
  589.       end
  590.       update_animation(@_animation[num])
  591.     end
  592.     def update_animation(anime)
  593.       if anime[2] > 0
  594.         frame_index = anime[0].frame_max - anime[2]
  595.         cell_data = anime[0].frames[frame_index].cell_data
  596.         position = anime[0].position
  597.         animation_set_sprites(anime[3], cell_data, position, anime[4])
  598.         for timing in anime[0].timings
  599.           if timing.frame == frame_index
  600.             animation_process_timing(timing, anime[1])
  601.           end
  602.         end
  603.       else
  604.         @@_reference_count[anime[3][0].bitmap] -= 1
  605.         if @@_reference_count[anime[3][0].bitmap] == 0
  606.             anime[3][0].bitmap.dispose
  607.         end
  608.         for sprite in anime[3]
  609.           sprite.dispose
  610.         end
  611.         @_animation.delete(anime)
  612.       end
  613.     end
  614.     def animation_set_sprites(sprites, cell_data, position, reverse = false)
  615.       for i in 0..15
  616.         sprite = sprites[i]
  617.         pattern = cell_data[i, 0]
  618.         if sprite == nil or pattern == nil or pattern == -1
  619.           sprite.visible = false if sprite != nil
  620.           next
  621.         end
  622.         sprite.visible = true
  623.         sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
  624.         if position == 3
  625.           if self.viewport != nil
  626.             sprite.x = self.viewport.rect.width / 2
  627.             if $game_temp.in_battle and self.battler.is_a?(Game_Enemy)
  628.               sprite.y = self.viewport.rect.height - 320
  629.             else
  630.               sprite.y = self.viewport.rect.height - 160
  631.             end
  632.           else
  633.             sprite.x = 320
  634.             sprite.y = 240
  635.           end
  636.         else
  637.           sprite.x = self.x + self.viewport.rect.x -
  638.                       self.ox + self.src_rect.width / 2
  639.           if $game_temp.in_battle and self.battler.is_a?(Game_Enemy)
  640.             sprite.y = self.y - self.oy * self.zoom_y / 2 +
  641.                         self.viewport.rect.y
  642.             if position == 0
  643.               sprite.y -= self.src_rect.height * self.zoom_y / 4
  644.             elsif position == 2
  645.               sprite.y += self.src_rect.height * self.zoom_y / 4
  646.             end
  647.           else
  648.             sprite.y = self.y + self.viewport.rect.y -
  649.                         self.oy + self.src_rect.height / 2
  650.             sprite.y -= self.src_rect.height / 4 if position == 0
  651.             sprite.y += self.src_rect.height / 4 if position == 2
  652.           end
  653.         end
  654.         if reverse
  655.           sprite.x -= cell_data[i, 1]
  656.         else
  657.           sprite.x += cell_data[i, 1]
  658.         end
  659.         sprite.y += cell_data[i, 2]
  660.         sprite.z = 2000
  661.         sprite.ox = 96
  662.         sprite.oy = 96
  663.         sprite.zoom_x = cell_data[i, 3] / 100.0
  664.         sprite.zoom_y = cell_data[i, 3] / 100.0
  665.         if position != 3
  666.           sprite.zoom_x *= self.zoom_x
  667.           sprite.zoom_y *= self.zoom_y
  668.         end
  669.         sprite.angle = cell_data[i, 4]
  670.         if reverse
  671.           sprite.mirror = (cell_data[i, 5] == 0)
  672.         else
  673.           sprite.mirror = (cell_data[i, 5] == 1)
  674.         end
  675.         sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  676.         sprite.blend_type = cell_data[i, 7]
  677.       end
  678.     end
  679.   end
  680. end

  681. #==============================================================================
  682. # ■ Window_ShopStatus
  683. #------------------------------------------------------------------------------
  684. #  商店画面、显示物品所持数与角色装备的窗口。
  685. #==============================================================================

  686. class Window_ShopStatus < Window_Base
  687.   #--------------------------------------------------------------------------
  688.   # ● 刷新
  689.   #--------------------------------------------------------------------------
  690.   def refresh
  691.     self.contents.clear
  692.     if @item == nil
  693.       return
  694.     end
  695.     case @item
  696.     when RPG::Item
  697.       number = $game_party.item_number(@item.id)
  698.     when RPG::Weapon
  699.       number = $game_party.weapon_number(@item.id)
  700.     when RPG::Armor
  701.       number = $game_party.armor_number(@item.id)
  702.     end
  703.     self.contents.font.color = system_color
  704.     self.contents.draw_text(4, 0, 200, 32, "所持数")
  705.     self.contents.font.color = normal_color
  706.     self.contents.draw_text(204, 0, 32, 32, number.to_s, 2)
  707.     if @item.is_a?(RPG::Item)
  708.       return
  709.     end
  710.     # 添加装备品信息
  711.     for i in 0...$game_party.actors.size
  712.       # 获取角色
  713.       actor = $game_party.actors[i]
  714.       # 可以装备为普通文字颜色、不能装备设置为无效文字颜色
  715.       if actor.equippable?(@item)
  716.         self.contents.font.color = normal_color
  717.       else
  718.         self.contents.font.color = disabled_color
  719.       end
  720.       # 描绘角色名字
  721.       self.contents.draw_text(4, 64 + 64 * i, 120, 32, actor.name)
  722.       # 获取当前的装备品
  723.       if @item.is_a?(RPG::Weapon)
  724.         weapon1 = $data_weapons[actor.weapon_id]
  725.         weapon2 = $data_weapons[actor.weapon2_id]
  726.         if actor.double_edge and (weapon1 != nil ? weapon1.atk : 0) >
  727.             (weapon2 != nil ? weapon2.atk : 0)
  728.           item1 = $data_weapons[actor.weapon2_id]
  729.         else
  730.           item1 = $data_weapons[actor.weapon_id]
  731.         end
  732.       elsif @item.kind == 0
  733.         item1 = $data_armors[actor.armor1_id]
  734.       elsif @item.kind == 1
  735.         item1 = $data_armors[actor.armor2_id]
  736.       elsif @item.kind == 2
  737.         item1 = $data_armors[actor.armor3_id]
  738.       else
  739.         item1 = $data_armors[actor.armor4_id]
  740.       end
  741.       # 可以装备的情况
  742.       if actor.equippable?(@item)
  743.         # 武器的情况
  744.         if @item.is_a?(RPG::Weapon)
  745.           atk1 = item1 != nil ? item1.atk : 0
  746.           atk2 = @item != nil ? @item.atk : 0
  747.           change = atk2 - atk1
  748.         end
  749.         # 防具的情况
  750.         if @item.is_a?(RPG::Armor)
  751.           pdef1 = item1 != nil ? item1.pdef : 0
  752.           mdef1 = item1 != nil ? item1.mdef : 0
  753.           pdef2 = @item != nil ? @item.pdef : 0
  754.           mdef2 = @item != nil ? @item.mdef : 0
  755.           change = pdef2 - pdef1 + mdef2 - mdef1
  756.         end
  757.         # 描绘能力值变化
  758.         self.contents.draw_text(124, 64 + 64 * i, 112, 32,
  759.           sprintf("%+d", change), 2)
  760.       end
  761.       # 描绘物品
  762.       if item1 != nil
  763.         x = 4
  764.         y = 64 + 64 * i + 32
  765.         bitmap = RPG::Cache.icon(item1.icon_name)
  766.         opacity = self.contents.font.color == normal_color ? 255 : 128
  767.         self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  768.         self.contents.draw_text(x + 28, y, 212, 32, item1.name)
  769.       end
  770.     end
  771.   end
  772. end
复制代码

作者: 水迭澜    时间: 2008-4-25 11:52
能不能顺便给一下原连接……
另,这个二刀流跟站上的有啥区别咩?(好吧我是不会用的人。弱弱地举手……)
作者: yzlsym    时间: 2008-4-25 20:14
原来的只可以每把武器设置``而且不能双击
现在的只要职业设置好都可以装备了``RTAB的可以双击




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