Project1

标题: 审时度势,于战斗中更换武器! [打印本页]

作者: K’    时间: 2007-8-22 06:39
标题: 审时度势,于战斗中更换武器!
一个朋友说让人帮忙写脚本会有负罪感,于是捏,某K就发出来赚VV好了{/hx}

不算复杂的功能,实现起来挺麻烦,把SCENE_EQUIP的几个窗口搬进来了。。
时间匆忙,不知道有没有BUG ,有的话请尽快告诉我,感谢。

由于是战斗中调用,就把默认装备中显示能力变化的部分拿掉了,一切为了FPS嘛{/hx}(其实是偷懒)
武器带的属性最好不要超过3个,要是名字超长的1,2个就撑满窗口了。。。

冲突性未知,要整合请回复或者PM。

附:截图2张,范例1个,脚本N行





http://rpg.blue/upload_program/files/kk_changewp.rar



  1. class Scene_Battle
  2.   
  3.   def main
  4.     # 初始化战斗用的各种暂时数据
  5.     $game_temp.in_battle = true
  6.     $game_temp.battle_turn = 0
  7.     $game_temp.battle_event_flags.clear
  8.     $game_temp.battle_abort = false
  9.     $game_temp.battle_main_phase = false
  10.     $game_temp.battleback_name = $game_map.battleback_name
  11.     $game_temp.forcing_battler = nil
  12.     # 初始化战斗用事件解释器
  13.     $game_system.battle_interpreter.setup(nil, 0)
  14.     # 准备队伍
  15.     @troop_id = $game_temp.battle_troop_id
  16.     $game_troop.setup(@troop_id)
  17.     # 生成角色命令窗口
  18.     s1 = $data_system.words.attack
  19.     s2 = $data_system.words.skill
  20.     s3 = $data_system.words.guard
  21.     s4 = $data_system.words.item
  22.     #kk开始
  23.     s5 = "变更武器"
  24.     @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4 , s5])
  25.     @actor_command_window.y = 128
  26.     #kk结束
  27.     @actor_command_window.back_opacity = 160
  28.     @actor_command_window.active = false
  29.     @actor_command_window.visible = false
  30.     # 生成其它窗口
  31.     @party_command_window = Window_PartyCommand.new
  32.     @help_window = Window_Help.new
  33.     @help_window.back_opacity = 160
  34.     @help_window.visible = false
  35.     @status_window = Window_BattleStatus.new
  36.     @message_window = Window_Message.new
  37.     # 生成活动块
  38.     @spriteset = Spriteset_Battle.new
  39.     # 初始化等待计数
  40.     @wait_count = 0
  41.     # 执行过渡
  42.     if $data_system.battle_transition == ""
  43.       Graphics.transition(20)
  44.     else
  45.       Graphics.transition(40, "Graphics/Transitions/" +
  46.         $data_system.battle_transition)
  47.     end
  48.     # 开始自由战斗回合
  49.     start_phase1
  50.     # 主循环
  51.     loop do
  52.       # 刷新游戏画面
  53.       Graphics.update
  54.       # 刷新输入信息
  55.       Input.update
  56.       # 刷新画面
  57.       update
  58.       # 如果画面切换的话就中断循环
  59.       if $scene != self
  60.         break
  61.       end
  62.     end
  63.     # 刷新地图
  64.     $game_map.refresh
  65.     # 准备过渡
  66.     Graphics.freeze
  67.     # 释放窗口
  68.     @actor_command_window.dispose
  69.     @party_command_window.dispose
  70.     @help_window.dispose
  71.     @status_window.dispose
  72.     @message_window.dispose
  73.     if @skill_window != nil
  74.       @skill_window.dispose
  75.     end
  76.     if @item_window != nil
  77.       @item_window.dispose
  78.     end
  79.     if @result_window != nil
  80.       @result_window.dispose
  81.     end
  82.     # 释放活动块
  83.     @spriteset.dispose
  84.     # 标题画面切换中的情况
  85.     if $scene.is_a?(Scene_Title)
  86.       # 淡入淡出画面
  87.       Graphics.transition
  88.       Graphics.freeze
  89.     end
  90.     # 战斗测试或者游戏结束以外的画面切换中的情况
  91.     if $BTEST and not $scene.is_a?(Scene_Gameover)
  92.       $scene = nil
  93.     end
  94.   end
  95.   
  96.   
  97.    def update_phase3_basic_command
  98.     # 按下 B 键的情况下
  99.     if Input.trigger?(Input::B)
  100.       # 演奏取消 SE
  101.       $game_system.se_play($data_system.cancel_se)
  102.       # 转向前一个角色的指令输入
  103.       phase3_prior_actor
  104.       return
  105.     end
  106.     # 按下 C 键的情况下
  107.     if Input.trigger?(Input::C)
  108.       # 角色指令窗口光标位置分之
  109.       case @actor_command_window.index
  110.       when 0  # 攻击
  111.         # 演奏确定 SE
  112.         $game_system.se_play($data_system.decision_se)
  113.         # 设置行动
  114.         @active_battler.current_action.kind = 0
  115.         @active_battler.current_action.basic = 0
  116.         # 开始选择敌人
  117.         start_enemy_select
  118.       when 1  # 特技
  119.         # 演奏确定 SE
  120.         $game_system.se_play($data_system.decision_se)
  121.         # 设置行动
  122.         @active_battler.current_action.kind = 1
  123.         # 开始选择特技
  124.         start_skill_select
  125.       when 2  # 防御
  126.         # 演奏确定 SE
  127.         $game_system.se_play($data_system.decision_se)
  128.         # 设置行动
  129.         @active_battler.current_action.kind = 0
  130.         @active_battler.current_action.basic = 1
  131.         # 转向下一位角色的指令输入
  132.         phase3_next_actor
  133.       when 3  # 物品
  134.         # 演奏确定 SE
  135.         $game_system.se_play($data_system.decision_se)
  136.         # 设置行动
  137.         @active_battler.current_action.kind = 2
  138.         # 开始选择物品
  139.         start_item_select
  140.       #kk_开始  
  141.       when 4  # 变更武器
  142.         # 演奏确定 SE
  143.         $game_system.se_play($data_system.decision_se)
  144.         # 设置行动
  145.         @active_battler.current_action.kind = 3
  146.         # 开始选择武器
  147.         start_weapon_select
  148.       #kk_结束
  149.       end
  150.       return
  151.     end
  152.   end
  153.   
  154.   #--------------------------------------------------------------------------
  155.   # ● 刷新画面 (角色命令回合)
  156.   #--------------------------------------------------------------------------
  157.   def update_phase3
  158.     # 敌人光标有效的情况下
  159.     if @enemy_arrow != nil
  160.       update_phase3_enemy_select
  161.     # 角色光标有效的情况下
  162.     elsif @actor_arrow != nil
  163.       update_phase3_actor_select
  164.     # 特技窗口有效的情况下
  165.     elsif @skill_window != nil
  166.       update_phase3_skill_select
  167.     # 物品窗口有效的情况下
  168.     elsif @item_window != nil
  169.       update_phase3_item_select
  170.     #kk开始
  171.     elsif @weapon_window != nil
  172.       update_phase3_weapon_select  
  173.     #kk结束
  174.     # 角色指令窗口有效的情况下
  175.     elsif @actor_command_window.active
  176.       update_phase3_basic_command
  177.     end
  178.   end
  179.   
  180.   #--------------------------------------------------------------------------
  181.   # ● 刷新画面 (角色命令回合 : 选择武器)
  182.   #--------------------------------------------------------------------------
  183.   def update_phase3_weapon_select
  184.     # 设置物品窗口为可视状态
  185.    # @weapon_window.visible = true
  186.       
  187.    
  188.     # 刷新物品窗口
  189.     @weapon_window.update
  190.         
  191.    
  192.     # 按下 B 键的情况下
  193.     if Input.trigger?(Input::B)
  194.       # 演奏取消 SE
  195.       $game_system.se_play($data_system.cancel_se)
  196.       # 选择物品结束
  197.       end_weapon_select
  198.       return
  199.     end
  200.     # 按下 C 键的情况下
  201.     if Input.trigger?(Input::C)
  202.       # 获取物品窗口现在选择的物品资料
  203.       @weapon = @weapon_window.item
  204.       # 演奏确定 SE
  205.       $game_system.se_play($data_system.decision_se)
  206.       item = @weapon_window.item
  207.       @active_battler.equip(0, item == nil ? 0 : item.id)
  208.       @weapon_window.refresh
  209.       @actor_window.refresh
  210.       
  211.       end
  212.       return
  213.     end

  214.   
  215.   #--------------------------------------------------------------------------
  216.   # ● 开始选择武器
  217.   #--------------------------------------------------------------------------
  218.   def start_weapon_select
  219.     # 生成特技窗口
  220.     @weapon_window = Window_EquipItemk.new(@active_battler,0)
  221.     @actor_window =  Window_EquipLeftk.new(@active_battler)
  222.     # 关联帮助窗口
  223.     @weapon_window.help_window = @help_window
  224.     # 无效化角色指令窗口
  225.     @actor_command_window.active = false
  226.     @actor_command_window.visible = false
  227.   end   
  228.   
  229.    def end_weapon_select
  230.     # 释放物品窗口
  231.     @weapon_window.dispose
  232.     @weapon_window = nil
  233.     @actor_window.dispose
  234.     @actor_window = nil
  235.     # 隐藏帮助窗口
  236.     @help_window.visible = false
  237.     # 有效化角色指令窗口
  238.     @actor_command_window.active = true
  239.     @actor_command_window.visible = true
  240.   end
  241.   
  242.   
  243.   
  244.   
  245. end




  246. class Window_EquipItemk < Window_Selectable
  247.   #--------------------------------------------------------------------------
  248.   # ● 初始化对像
  249.   #     actor      : 角色
  250.   #     equip_type : 装备部位 (0~3)
  251.   #--------------------------------------------------------------------------
  252.   def initialize(actor, equip_type)
  253.     super(320, 64, 320, 256)
  254.     @actor = actor
  255.     @equip_type = equip_type
  256.     @column_max = 1
  257.     self.opacity = 160
  258.     self.index = 0
  259.     refresh
  260.   end
  261.   #--------------------------------------------------------------------------
  262.   # ● 获取物品
  263.   #--------------------------------------------------------------------------
  264.   def item
  265.     return @data[self.index]
  266.   end
  267.   #--------------------------------------------------------------------------
  268.   # ● 刷新
  269.   #--------------------------------------------------------------------------
  270.   def refresh
  271.     if self.contents != nil
  272.       self.contents.dispose
  273.       self.contents = nil
  274.     end
  275.     @data = []
  276.     # 添加可以装备的武器
  277.     if @equip_type == 0
  278.       weapon_set = $data_classes[@actor.class_id].weapon_set
  279.       for i in 1...$data_weapons.size
  280.         if $game_party.weapon_number(i) > 0 and weapon_set.include?(i)
  281.           @data.push($data_weapons[i])
  282.         end
  283.       end
  284.     end
  285.     # 添加可以装备的防具
  286.     if @equip_type != 0
  287.       armor_set = $data_classes[@actor.class_id].armor_set
  288.       for i in 1...$data_armors.size
  289.         if $game_party.armor_number(i) > 0 and armor_set.include?(i)
  290.           if $data_armors[i].kind == @equip_type-1
  291.             @data.push($data_armors[i])
  292.           end
  293.         end
  294.       end
  295.     end
  296.    
  297.     # 添加空白
  298.     @data.push(nil)
  299.     # 生成位图、描绘全部项目
  300.     @item_max = @data.size
  301.     self.contents = Bitmap.new(width - 32, row_max * 32)
  302.     for i in 0...@item_max-1
  303.       draw_item(i)
  304.     end
  305.   end
  306.   #--------------------------------------------------------------------------
  307.   # ● 项目的描绘
  308.   #     index : 项目符号
  309.   #--------------------------------------------------------------------------
  310.   def draw_item(index)
  311.     item = @data[index]
  312.     x = 4
  313.     y = index * 32
  314.     case item
  315.     when RPG::Weapon
  316.       number = $game_party.weapon_number(item.id)
  317.     when RPG::Armor
  318.       number = $game_party.armor_number(item.id)
  319.     end
  320.     bitmap = RPG::Cache.icon(item.icon_name)
  321.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
  322.     self.contents.font.color = normal_color
  323.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  324.     self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
  325.     self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  326.   end
  327.   #--------------------------------------------------------------------------
  328.   # ● 刷新帮助文本
  329.   #--------------------------------------------------------------------------
  330.   def update_help
  331.     @help_window.set_text(self.item == nil ? "" : self.item.description)
  332.   end
  333. end



  334. class Window_EquipLeftk < Window_Base
  335.   #--------------------------------------------------------------------------
  336.   # ● 初始化对像
  337.   #     actor : 角色
  338.   #--------------------------------------------------------------------------
  339.   def initialize(actor)
  340.     super(0, 64, 320, 256)
  341.     self.contents = Bitmap.new(width - 32, height - 32)
  342.     @actor = actor
  343.     self.opacity = 160
  344.     refresh
  345.   end
  346.   #--------------------------------------------------------------------------
  347.   # ● 刷新
  348.   #--------------------------------------------------------------------------
  349.   def refresh
  350.     self.contents.clear
  351.     draw_actor_name(@actor, 4, 0)
  352.     draw_actor_level(@actor, 4, 32)
  353.     draw_actor_parameter(@actor, 4, 64, 0)
  354.     draw_actor_parameter(@actor, 4, 96, 1)
  355.     draw_actor_parameter(@actor, 4, 128, 2)
  356.    
  357.    
  358.     draw_item_name($data_weapons[@actor.weapon_id], 132, 160)
  359.     self.contents.font.color = system_color
  360.     self.contents.draw_text(4, 160, 128, 32, "目前武器")
  361.     self.contents.draw_text(4, 192, 128, 32, "武器属性")
  362.     self.contents.font.color = Color.new(0,255,0)
  363.     element = ""
  364.     if @actor.weapon_id == 0
  365.       element = "无"
  366.     else
  367.     if $data_weapons[@actor.weapon_id].element_set[1] == nil
  368.       element = "无"
  369.     else
  370.     for i in 1...$data_weapons[@actor.weapon_id].element_set.size
  371.       element += $data_system.elements[$data_weapons[@actor.weapon_id].element_set[i]] + " "
  372.     end  
  373.     end
  374.     end  
  375.     self.contents.draw_text(132, 192, 128, 32, element)
  376.    
  377.     if @new_atk != nil
  378.       self.contents.font.color = system_color
  379.       self.contents.draw_text(160, 64, 40, 32, "→", 1)
  380.       self.contents.font.color = normal_color
  381.       self.contents.draw_text(200, 64, 36, 32, @new_atk.to_s, 2)
  382.     end
  383.     if @new_pdef != nil
  384.       self.contents.font.color = system_color
  385.       self.contents.draw_text(160, 96, 40, 32, "→", 1)
  386.       self.contents.font.color = normal_color
  387.       self.contents.draw_text(200, 96, 36, 32, @new_pdef.to_s, 2)
  388.     end
  389.     if @new_mdef != nil
  390.       self.contents.font.color = system_color
  391.       self.contents.draw_text(160, 128, 40, 32, "→", 1)
  392.       self.contents.font.color = normal_color
  393.       self.contents.draw_text(200, 128, 36, 32, @new_mdef.to_s, 2)
  394.     end
  395.   end
  396.   #--------------------------------------------------------------------------
  397.   # ● 变更装备后的能力值设置
  398.   #     new_atk  : 变更装备后的攻击力
  399.   #     new_pdef : 变更装备后的物理防御
  400.   #     new_mdef : 变更装备后的魔法防御
  401.   #--------------------------------------------------------------------------
  402.   def set_new_parameters(new_atk, new_pdef, new_mdef)
  403.     if @new_atk != new_atk or @new_pdef != new_pdef or @new_mdef != new_mdef
  404.       @new_atk = new_atk
  405.       @new_pdef = new_pdef
  406.       @new_mdef = new_mdef
  407.       refresh
  408.     end
  409.   end
  410. end
复制代码


              [本贴由 叶舞枫 于 2008-1-24 21:53:29 进行了编辑]
作者: K’    时间: 2007-8-22 06:39
标题: 审时度势,于战斗中更换武器!
一个朋友说让人帮忙写脚本会有负罪感,于是捏,某K就发出来赚VV好了{/hx}

不算复杂的功能,实现起来挺麻烦,把SCENE_EQUIP的几个窗口搬进来了。。
时间匆忙,不知道有没有BUG ,有的话请尽快告诉我,感谢。

由于是战斗中调用,就把默认装备中显示能力变化的部分拿掉了,一切为了FPS嘛{/hx}(其实是偷懒)
武器带的属性最好不要超过3个,要是名字超长的1,2个就撑满窗口了。。。

冲突性未知,要整合请回复或者PM。

附:截图2张,范例1个,脚本N行





http://rpg.blue/upload_program/files/kk_changewp.rar



  1. class Scene_Battle
  2.   
  3.   def main
  4.     # 初始化战斗用的各种暂时数据
  5.     $game_temp.in_battle = true
  6.     $game_temp.battle_turn = 0
  7.     $game_temp.battle_event_flags.clear
  8.     $game_temp.battle_abort = false
  9.     $game_temp.battle_main_phase = false
  10.     $game_temp.battleback_name = $game_map.battleback_name
  11.     $game_temp.forcing_battler = nil
  12.     # 初始化战斗用事件解释器
  13.     $game_system.battle_interpreter.setup(nil, 0)
  14.     # 准备队伍
  15.     @troop_id = $game_temp.battle_troop_id
  16.     $game_troop.setup(@troop_id)
  17.     # 生成角色命令窗口
  18.     s1 = $data_system.words.attack
  19.     s2 = $data_system.words.skill
  20.     s3 = $data_system.words.guard
  21.     s4 = $data_system.words.item
  22.     #kk开始
  23.     s5 = "变更武器"
  24.     @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4 , s5])
  25.     @actor_command_window.y = 128
  26.     #kk结束
  27.     @actor_command_window.back_opacity = 160
  28.     @actor_command_window.active = false
  29.     @actor_command_window.visible = false
  30.     # 生成其它窗口
  31.     @party_command_window = Window_PartyCommand.new
  32.     @help_window = Window_Help.new
  33.     @help_window.back_opacity = 160
  34.     @help_window.visible = false
  35.     @status_window = Window_BattleStatus.new
  36.     @message_window = Window_Message.new
  37.     # 生成活动块
  38.     @spriteset = Spriteset_Battle.new
  39.     # 初始化等待计数
  40.     @wait_count = 0
  41.     # 执行过渡
  42.     if $data_system.battle_transition == ""
  43.       Graphics.transition(20)
  44.     else
  45.       Graphics.transition(40, "Graphics/Transitions/" +
  46.         $data_system.battle_transition)
  47.     end
  48.     # 开始自由战斗回合
  49.     start_phase1
  50.     # 主循环
  51.     loop do
  52.       # 刷新游戏画面
  53.       Graphics.update
  54.       # 刷新输入信息
  55.       Input.update
  56.       # 刷新画面
  57.       update
  58.       # 如果画面切换的话就中断循环
  59.       if $scene != self
  60.         break
  61.       end
  62.     end
  63.     # 刷新地图
  64.     $game_map.refresh
  65.     # 准备过渡
  66.     Graphics.freeze
  67.     # 释放窗口
  68.     @actor_command_window.dispose
  69.     @party_command_window.dispose
  70.     @help_window.dispose
  71.     @status_window.dispose
  72.     @message_window.dispose
  73.     if @skill_window != nil
  74.       @skill_window.dispose
  75.     end
  76.     if @item_window != nil
  77.       @item_window.dispose
  78.     end
  79.     if @result_window != nil
  80.       @result_window.dispose
  81.     end
  82.     # 释放活动块
  83.     @spriteset.dispose
  84.     # 标题画面切换中的情况
  85.     if $scene.is_a?(Scene_Title)
  86.       # 淡入淡出画面
  87.       Graphics.transition
  88.       Graphics.freeze
  89.     end
  90.     # 战斗测试或者游戏结束以外的画面切换中的情况
  91.     if $BTEST and not $scene.is_a?(Scene_Gameover)
  92.       $scene = nil
  93.     end
  94.   end
  95.   
  96.   
  97.    def update_phase3_basic_command
  98.     # 按下 B 键的情况下
  99.     if Input.trigger?(Input::B)
  100.       # 演奏取消 SE
  101.       $game_system.se_play($data_system.cancel_se)
  102.       # 转向前一个角色的指令输入
  103.       phase3_prior_actor
  104.       return
  105.     end
  106.     # 按下 C 键的情况下
  107.     if Input.trigger?(Input::C)
  108.       # 角色指令窗口光标位置分之
  109.       case @actor_command_window.index
  110.       when 0  # 攻击
  111.         # 演奏确定 SE
  112.         $game_system.se_play($data_system.decision_se)
  113.         # 设置行动
  114.         @active_battler.current_action.kind = 0
  115.         @active_battler.current_action.basic = 0
  116.         # 开始选择敌人
  117.         start_enemy_select
  118.       when 1  # 特技
  119.         # 演奏确定 SE
  120.         $game_system.se_play($data_system.decision_se)
  121.         # 设置行动
  122.         @active_battler.current_action.kind = 1
  123.         # 开始选择特技
  124.         start_skill_select
  125.       when 2  # 防御
  126.         # 演奏确定 SE
  127.         $game_system.se_play($data_system.decision_se)
  128.         # 设置行动
  129.         @active_battler.current_action.kind = 0
  130.         @active_battler.current_action.basic = 1
  131.         # 转向下一位角色的指令输入
  132.         phase3_next_actor
  133.       when 3  # 物品
  134.         # 演奏确定 SE
  135.         $game_system.se_play($data_system.decision_se)
  136.         # 设置行动
  137.         @active_battler.current_action.kind = 2
  138.         # 开始选择物品
  139.         start_item_select
  140.       #kk_开始  
  141.       when 4  # 变更武器
  142.         # 演奏确定 SE
  143.         $game_system.se_play($data_system.decision_se)
  144.         # 设置行动
  145.         @active_battler.current_action.kind = 3
  146.         # 开始选择武器
  147.         start_weapon_select
  148.       #kk_结束
  149.       end
  150.       return
  151.     end
  152.   end
  153.   
  154.   #--------------------------------------------------------------------------
  155.   # ● 刷新画面 (角色命令回合)
  156.   #--------------------------------------------------------------------------
  157.   def update_phase3
  158.     # 敌人光标有效的情况下
  159.     if @enemy_arrow != nil
  160.       update_phase3_enemy_select
  161.     # 角色光标有效的情况下
  162.     elsif @actor_arrow != nil
  163.       update_phase3_actor_select
  164.     # 特技窗口有效的情况下
  165.     elsif @skill_window != nil
  166.       update_phase3_skill_select
  167.     # 物品窗口有效的情况下
  168.     elsif @item_window != nil
  169.       update_phase3_item_select
  170.     #kk开始
  171.     elsif @weapon_window != nil
  172.       update_phase3_weapon_select  
  173.     #kk结束
  174.     # 角色指令窗口有效的情况下
  175.     elsif @actor_command_window.active
  176.       update_phase3_basic_command
  177.     end
  178.   end
  179.   
  180.   #--------------------------------------------------------------------------
  181.   # ● 刷新画面 (角色命令回合 : 选择武器)
  182.   #--------------------------------------------------------------------------
  183.   def update_phase3_weapon_select
  184.     # 设置物品窗口为可视状态
  185.    # @weapon_window.visible = true
  186.       
  187.    
  188.     # 刷新物品窗口
  189.     @weapon_window.update
  190.         
  191.    
  192.     # 按下 B 键的情况下
  193.     if Input.trigger?(Input::B)
  194.       # 演奏取消 SE
  195.       $game_system.se_play($data_system.cancel_se)
  196.       # 选择物品结束
  197.       end_weapon_select
  198.       return
  199.     end
  200.     # 按下 C 键的情况下
  201.     if Input.trigger?(Input::C)
  202.       # 获取物品窗口现在选择的物品资料
  203.       @weapon = @weapon_window.item
  204.       # 演奏确定 SE
  205.       $game_system.se_play($data_system.decision_se)
  206.       item = @weapon_window.item
  207.       @active_battler.equip(0, item == nil ? 0 : item.id)
  208.       @weapon_window.refresh
  209.       @actor_window.refresh
  210.       
  211.       end
  212.       return
  213.     end

  214.   
  215.   #--------------------------------------------------------------------------
  216.   # ● 开始选择武器
  217.   #--------------------------------------------------------------------------
  218.   def start_weapon_select
  219.     # 生成特技窗口
  220.     @weapon_window = Window_EquipItemk.new(@active_battler,0)
  221.     @actor_window =  Window_EquipLeftk.new(@active_battler)
  222.     # 关联帮助窗口
  223.     @weapon_window.help_window = @help_window
  224.     # 无效化角色指令窗口
  225.     @actor_command_window.active = false
  226.     @actor_command_window.visible = false
  227.   end   
  228.   
  229.    def end_weapon_select
  230.     # 释放物品窗口
  231.     @weapon_window.dispose
  232.     @weapon_window = nil
  233.     @actor_window.dispose
  234.     @actor_window = nil
  235.     # 隐藏帮助窗口
  236.     @help_window.visible = false
  237.     # 有效化角色指令窗口
  238.     @actor_command_window.active = true
  239.     @actor_command_window.visible = true
  240.   end
  241.   
  242.   
  243.   
  244.   
  245. end




  246. class Window_EquipItemk < Window_Selectable
  247.   #--------------------------------------------------------------------------
  248.   # ● 初始化对像
  249.   #     actor      : 角色
  250.   #     equip_type : 装备部位 (0~3)
  251.   #--------------------------------------------------------------------------
  252.   def initialize(actor, equip_type)
  253.     super(320, 64, 320, 256)
  254.     @actor = actor
  255.     @equip_type = equip_type
  256.     @column_max = 1
  257.     self.opacity = 160
  258.     self.index = 0
  259.     refresh
  260.   end
  261.   #--------------------------------------------------------------------------
  262.   # ● 获取物品
  263.   #--------------------------------------------------------------------------
  264.   def item
  265.     return @data[self.index]
  266.   end
  267.   #--------------------------------------------------------------------------
  268.   # ● 刷新
  269.   #--------------------------------------------------------------------------
  270.   def refresh
  271.     if self.contents != nil
  272.       self.contents.dispose
  273.       self.contents = nil
  274.     end
  275.     @data = []
  276.     # 添加可以装备的武器
  277.     if @equip_type == 0
  278.       weapon_set = $data_classes[@actor.class_id].weapon_set
  279.       for i in 1...$data_weapons.size
  280.         if $game_party.weapon_number(i) > 0 and weapon_set.include?(i)
  281.           @data.push($data_weapons[i])
  282.         end
  283.       end
  284.     end
  285.     # 添加可以装备的防具
  286.     if @equip_type != 0
  287.       armor_set = $data_classes[@actor.class_id].armor_set
  288.       for i in 1...$data_armors.size
  289.         if $game_party.armor_number(i) > 0 and armor_set.include?(i)
  290.           if $data_armors[i].kind == @equip_type-1
  291.             @data.push($data_armors[i])
  292.           end
  293.         end
  294.       end
  295.     end
  296.    
  297.     # 添加空白
  298.     @data.push(nil)
  299.     # 生成位图、描绘全部项目
  300.     @item_max = @data.size
  301.     self.contents = Bitmap.new(width - 32, row_max * 32)
  302.     for i in 0...@item_max-1
  303.       draw_item(i)
  304.     end
  305.   end
  306.   #--------------------------------------------------------------------------
  307.   # ● 项目的描绘
  308.   #     index : 项目符号
  309.   #--------------------------------------------------------------------------
  310.   def draw_item(index)
  311.     item = @data[index]
  312.     x = 4
  313.     y = index * 32
  314.     case item
  315.     when RPG::Weapon
  316.       number = $game_party.weapon_number(item.id)
  317.     when RPG::Armor
  318.       number = $game_party.armor_number(item.id)
  319.     end
  320.     bitmap = RPG::Cache.icon(item.icon_name)
  321.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
  322.     self.contents.font.color = normal_color
  323.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  324.     self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
  325.     self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  326.   end
  327.   #--------------------------------------------------------------------------
  328.   # ● 刷新帮助文本
  329.   #--------------------------------------------------------------------------
  330.   def update_help
  331.     @help_window.set_text(self.item == nil ? "" : self.item.description)
  332.   end
  333. end



  334. class Window_EquipLeftk < Window_Base
  335.   #--------------------------------------------------------------------------
  336.   # ● 初始化对像
  337.   #     actor : 角色
  338.   #--------------------------------------------------------------------------
  339.   def initialize(actor)
  340.     super(0, 64, 320, 256)
  341.     self.contents = Bitmap.new(width - 32, height - 32)
  342.     @actor = actor
  343.     self.opacity = 160
  344.     refresh
  345.   end
  346.   #--------------------------------------------------------------------------
  347.   # ● 刷新
  348.   #--------------------------------------------------------------------------
  349.   def refresh
  350.     self.contents.clear
  351.     draw_actor_name(@actor, 4, 0)
  352.     draw_actor_level(@actor, 4, 32)
  353.     draw_actor_parameter(@actor, 4, 64, 0)
  354.     draw_actor_parameter(@actor, 4, 96, 1)
  355.     draw_actor_parameter(@actor, 4, 128, 2)
  356.    
  357.    
  358.     draw_item_name($data_weapons[@actor.weapon_id], 132, 160)
  359.     self.contents.font.color = system_color
  360.     self.contents.draw_text(4, 160, 128, 32, "目前武器")
  361.     self.contents.draw_text(4, 192, 128, 32, "武器属性")
  362.     self.contents.font.color = Color.new(0,255,0)
  363.     element = ""
  364.     if @actor.weapon_id == 0
  365.       element = "无"
  366.     else
  367.     if $data_weapons[@actor.weapon_id].element_set[1] == nil
  368.       element = "无"
  369.     else
  370.     for i in 1...$data_weapons[@actor.weapon_id].element_set.size
  371.       element += $data_system.elements[$data_weapons[@actor.weapon_id].element_set[i]] + " "
  372.     end  
  373.     end
  374.     end  
  375.     self.contents.draw_text(132, 192, 128, 32, element)
  376.    
  377.     if @new_atk != nil
  378.       self.contents.font.color = system_color
  379.       self.contents.draw_text(160, 64, 40, 32, "→", 1)
  380.       self.contents.font.color = normal_color
  381.       self.contents.draw_text(200, 64, 36, 32, @new_atk.to_s, 2)
  382.     end
  383.     if @new_pdef != nil
  384.       self.contents.font.color = system_color
  385.       self.contents.draw_text(160, 96, 40, 32, "→", 1)
  386.       self.contents.font.color = normal_color
  387.       self.contents.draw_text(200, 96, 36, 32, @new_pdef.to_s, 2)
  388.     end
  389.     if @new_mdef != nil
  390.       self.contents.font.color = system_color
  391.       self.contents.draw_text(160, 128, 40, 32, "→", 1)
  392.       self.contents.font.color = normal_color
  393.       self.contents.draw_text(200, 128, 36, 32, @new_mdef.to_s, 2)
  394.     end
  395.   end
  396.   #--------------------------------------------------------------------------
  397.   # ● 变更装备后的能力值设置
  398.   #     new_atk  : 变更装备后的攻击力
  399.   #     new_pdef : 变更装备后的物理防御
  400.   #     new_mdef : 变更装备后的魔法防御
  401.   #--------------------------------------------------------------------------
  402.   def set_new_parameters(new_atk, new_pdef, new_mdef)
  403.     if @new_atk != new_atk or @new_pdef != new_pdef or @new_mdef != new_mdef
  404.       @new_atk = new_atk
  405.       @new_pdef = new_pdef
  406.       @new_mdef = new_mdef
  407.       refresh
  408.     end
  409.   end
  410. end
复制代码


              [本贴由 叶舞枫 于 2008-1-24 21:53:29 进行了编辑]
作者: 蓝色蝴蝶    时间: 2007-8-22 06:52
提示: 作者被禁止或删除 内容自动屏蔽
作者: doranikofu    时间: 2007-8-22 07:29
话说某只策划中的游戏 只给主角准备了一件武器
纯支持一下{/hx}
作者: 黑暗之神    时间: 2007-8-22 09:49
以下引用蓝色蝴蝶于2007-8-21 22:52:09的发言:

K' sama好厉害...........

PS 如果更换武器能消耗掉一个回合就好了,至少我是这么认为的..........

恩,在更换完武器后加上一句
phase3_next_actor
便完成了…
作者: 北大路花火    时间: 2007-8-23 00:50
提示: 作者被禁止或删除 内容自动屏蔽
作者: 白云    时间: 2007-8-23 01:22
提示: 作者被禁止或删除 内容自动屏蔽
作者: 叶舞枫    时间: 2008-1-25 05:53
这帖子挂得比较厉害……
VIP 3
http://rpg.blue/web/htm/news902.htm
作者: Discry    时间: 2008-6-15 18:50
{/se}{/se}{/se}色魔
作者: Discry    时间: 2008-6-15 18:51
没bug 很好
作者: Discry    时间: 2008-12-1 02:22
k 最近过的怎么样啊
作者: hykwf233    时间: 2009-3-17 09:14
楼主,这跟RTAB1.16战斗系统冲突,能否帮忙整合一下?
RTAB1.16战斗系统太长了,贴不出来。。。




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