Project1

标题: 物品分类脚本的修改 [打印本页]

作者: summer依恋    时间: 2011-10-6 10:51
标题: 物品分类脚本的修改
本帖最后由 Kimu 于 2011-10-6 11:30 编辑

如下,是我使用的脚本,想扩展2个分类,自己知道要改的有
@item_max =
@commands =
还有底下的分类要求什么的
第一第二我会修改,出了点问题,就是在测试时分类的名字显示不完全,如下图,只能在右边看得见名字

是按什么要求分的我就搞不懂了,求各位帮帮忙
我是加入了装备扩展脚本的,因此新加的2个分类为“项链”和“鞋子”
话说,代码框怎么用不起了,还是偶电脑出问题了。。。。
  1. #==============================================================================
  2. # 分类物品的命令窗口
  3. #==============================================================================
  4. class Window_ItemCommand < Window_Selectable
  5. #———— 初始化 ————
  6.   def initialize     #前两个坐标是位置,后两个是大小下
  7.     super(555, 240, 142, 300)  #扩大了
  8.     self.contents = Bitmap.new(width - 32, height - 32 )
  9.     @item_max = 8  #加道具类,防具3类分开(已经修改)
  10.     @commands = ["药物类", "武器类", "盾牌类", "护身类", "头盔类","装饰类", "道具类", "特殊类"]
  11.     refresh
  12.     self.index = 0
  13.   end   
  14. #———— 刷新 ————
  15.   def refresh  
  16.     self.contents.clear
  17.     for i in 0...@item_max
  18.     draw_item(i, normal_color)
  19.     end
  20.   end
  21. #—— 描绘项目 ——| index:编号,color:颜色——————
  22.   def draw_item(index, color)
  23.     self.contents.font.color = color
  24.     y = index * 32
  25.     self.contents.draw_text(4, y, 128, 32, @commands[index])
  26.   end
  27. #—— 帮助部分更新 ————
  28.   def update_help
  29.     @help_window.set_text(@commands[self.index])
  30.   end   
  31. end
  32. #==============================================================================
  33. # 物品清单窗口
  34. #==============================================================================
  35. class Window_ItemList < Window_Selectable
  36. #———— 初始化 ————
  37.   def initialize
  38.     super(30, 20, 500, 450)
  39. #   @column_max = 2
  40.     refresh
  41.     self.index = 0
  42.   end
  43. #—— 取得现在选择的物品 ——
  44.   def item
  45.     return @data[self.index]
  46.   end
  47. #—— 刷新 ———
  48.   def refresh
  49.     if self.contents != nil
  50.       self.contents.dispose
  51.       self.contents = nil
  52.     end
  53.     @data = []
  54.   end
  55. #—— 设置不同类别的物品 ———
  56.   def set_item(command)
  57.     refresh
  58.     #—— 根据现在的选项决定物品 ——
  59.     case command  
  60.     when 0            #药品类
  61.       for i in 1...$data_items.size
  62.         if ($data_items[i].type == "药物" and $game_party.item_number(i) > 0)
  63.           @data.push($data_items[i])
  64.         end
  65.       end
  66.     when 1            #武器类
  67.       for i in 1...$data_weapons.size
  68.         if $game_party.weapon_number(i) > 0
  69.           @data.push($data_weapons[i])
  70.         end
  71.       end
  72.     when 2            #盾牌类
  73.       for i in 1...$data_armors.size
  74.         if $data_armors[i].kind == 0 and $game_party.armor_number(i) > 0
  75.           @data.push($data_armors[i])
  76.         end
  77.       end
  78.     when 3            #护身类+++++
  79.       for i in 1...$data_armors.size
  80.         if $data_armors[i].kind == 1 and $game_party.armor_number(i) > 0
  81.           @data.push($data_armors[i])
  82.         end
  83.       end
  84.     when 4            #头盔类++++++
  85.        for i in 1...$data_armors.size
  86.         if $data_armors[i].kind == 2 and $game_party.armor_number(i) > 0
  87.           @data.push($data_armors[i])
  88.         end
  89.       end
  90.     when 5            #装饰类
  91.       for i in 1...$data_armors.size
  92.         if $data_armors[i].kind == 3 and $game_party.armor_number(i) > 0
  93.           @data.push($data_armors[i])
  94.         end
  95.       end
  96.     when 6            #道具类(已经修改)
  97.       for i in 1...$data_items.size
  98.         if ($data_items[i].type == "道具" and $game_party.item_number(i) > 0)
  99.           @data.push($data_items[i])
  100.         end
  101.       end   
  102.     when 7            #特殊类(已经修改)
  103.       for i in 1...$data_items.size
  104.         if ($data_items[i].type == "特殊" and $game_party.item_number(i) > 0)
  105.           @data.push($data_items[i])
  106.         end
  107.       end
  108.     end
  109.     @item_max = @data.size  
  110.     if @item_max > 0
  111.       self.contents = Bitmap.new(width - 32, row_max * 32)
  112.       self.contents.clear
  113.       for i in 0...@item_max
  114.         draw_item(i)
  115.       end
  116.     end
  117.   end
  118. #——— 单类物品的个数 ————
  119.   def item_number
  120.     return @item_max
  121.   end
  122. #——— 项目内容的描画 ————
  123.   def draw_item(index)
  124.     item = @data[index]  
  125.     #—— 取得具体物品数量 ——
  126.     case item   
  127.     when RPG::Item
  128.       number = $game_party.item_number(item.id)
  129.     when RPG::Weapon
  130.       number = $game_party.weapon_number(item.id)
  131.     when RPG::Armor
  132.       number = $game_party.armor_number(item.id)
  133.     end
  134.     #—— 给出物品的颜色 ——
  135.     if item.is_a?(RPG::Item)
  136.       if $game_party.item_can_use?(item.id)
  137.         self.contents.font.color = normal_color
  138.       else
  139.         self.contents.font.color = disabled_color
  140.       end
  141.     else
  142.       self.contents.font.color = normal_color
  143.     end
  144.    
  145.     #—— 描绘物体图标、物体名、数量 ——
  146. #   x = 4 + index % 2 * 173
  147. #   y = index / 2 * 32
  148.     x = 4
  149.     y = index*32
  150.     bitmap = RPG::Cache.icon(item.icon_name)
  151.     opacity = self.contents.font.color == normal_color ? 255 : 128
  152.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  153.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  154.     self.contents.draw_text(x + 300, y, 16, 32, "×", 1)
  155.     self.contents.draw_text(x + 314, y, 24, 32, number.to_s, 2)
  156.   end
  157. #——— 更新帮助窗口 ————
  158.   def update_help
  159.     @help_window.set_text(make_description(self.item))
  160.   end
  161. end
  162. #############################################################################
  163. #############################################################################
  164. #==============================================================================
  165. # ■ Scene_Item
  166. #------------------------------------------------------------------------------
  167. #  处理物品画面的类。
  168. #==============================================================================
  169. #############################################################################
  170. #############################################################################
  171. class Scene_Item
  172. #——— 主处理 ————
  173.   def main
  174.     cmd = Window_Command_New.new($game_party.actors.size)
  175.     cmd.index = 1
  176.     cmd.active = false
  177.     # 右边命令窗口
  178.     @itemcommand_window = Window_ItemCommand.new
  179.     @itemcommand_window.opacity = HS::OPACITY
  180.     @itemcommand_window.y = 672

  181.     @item_command_index = @itemcommand_window.index
  182.     # 物品窗口
  183.     @itemlist_window = Window_ItemList.new
  184.     @itemlist_window.opacity = HS::OPACITY
  185.     @itemlist_window.active = false
  186.     @itemlist_window.set_item(@item_command_index)
  187.     @itemlist_window.x = -378
  188.     # 帮助窗口
  189.     @item_help_window = Window_Help_New.new
  190.     @item_help_window.x = -580
  191.     @item_help_window.y = 516 #原先是396
  192.     @item_help_window.opacity = HS::OPACITY

  193.     # 关联帮助窗口
  194.     @itemcommand_window.help_window = @item_help_window
  195.     @itemlist_window.help_window = @item_help_window
  196.     # 目标窗口
  197.     @item_target_window = Window_Target.new
  198.     @item_target_window.y = 480
  199.     @item_target_window.opacity = HS::OPACITY
  200.     @item_target_window.visible = false
  201.     @item_target_window.active = false
  202.     # 目标装备窗口
  203.     @item_target_window_equip = Window_Target_Equip.new
  204.     @item_target_window_equip.y = 480
  205.     @item_target_window_equip.opacity = HS::OPACITY
  206.     @item_target_window_equip.visible = false
  207.     @item_target_window_equip.active = false
  208.     #—— 主循环 ——
  209.     Graphics.transition
  210.     # 窗口的滑动
  211.     for i in 1..8
  212.       @item_help_window.x += 76
  213.       @itemcommand_window.y -= 60
  214.       @itemlist_window.x += 51
  215.       if i == 8
  216.         @item_help_window.x = 30
  217.         @itemcommand_window.y = 190
  218.         @itemlist_window.x = 30
  219.       end
  220.       Graphics.update
  221.     end
  222.    
  223.     loop do
  224.       Graphics.update
  225.       Input.update

  226.       # 更新item
  227.       update_item_scene
  228.       if $scene != self
  229.         break
  230.       end
  231.     end
  232.     #—— 释放窗口 ——
  233.    
  234.     # 窗口的滑动
  235.     for i in 1..9
  236.       @item_help_window.x -= 76
  237.       @itemcommand_window.y += 60
  238.       @itemlist_window.x -= 51
  239.       Graphics.update
  240.     end
  241.    
  242.     Graphics.freeze
  243.     cmd.dispose
  244.     @itemcommand_window.dispose
  245.     @itemlist_window.dispose
  246.     @item_help_window.dispose
  247.     @item_target_window.dispose
  248.     @item_target_window_equip.dispose
  249.   end

  250.   #—— update的定义 ——
  251.   def update_item_scene
  252.     @itemcommand_window.update
  253.     @itemlist_window.update
  254.     @item_help_window.update
  255.     @item_target_window.update
  256.     @item_target_window_equip.update
  257.    
  258.     if @item_command_index != @itemcommand_window.index
  259.       @item_command_index = @itemcommand_window.index
  260.       @itemlist_window.set_item(@item_command_index)
  261.     end
  262.    
  263.     #—— 当某窗体在active的时候,更新之 ——
  264.     if @itemcommand_window.active
  265.       item_update_itemcommand
  266.       return
  267.     end
  268.     if @itemlist_window.active
  269.       item_update_itemlist
  270.       return
  271.     end
  272.     if @item_target_window.active
  273.       item_update_target
  274.       return
  275.     end
  276.     if @item_target_window_equip.active
  277.       item_update_target_equip
  278.       return
  279.     end
  280.   end  # update的

  281. #————具体更新定义————
  282.   def item_update_itemcommand
  283.   
  284.     if Input.trigger?(Input::B)
  285.       # 演奏取消 SE
  286.       $game_system.se_play($data_system.cancel_se)
  287.       # 切换到菜单画面
  288.       $scene = Scene_Menu.new(1)
  289.       return
  290.     end
  291.    
  292.     if Input.trigger?(Input::C)
  293.       if @itemlist_window.item_number == 0
  294.         $game_system.se_play($data_system.buzzer_se)
  295.         return
  296.       end
  297.       $game_system.se_play($data_system.decision_se)
  298.       @itemcommand_window.active = false
  299.       @itemlist_window.active = true
  300.       @itemlist_window.index = 0
  301.       return
  302.     end
  303.   end

  304. #————具体更新定义————
  305.   def item_update_itemlist
  306.     if Input.trigger?(Input::B)
  307.       $game_system.se_play($data_system.cancel_se)
  308.       @itemcommand_window.active = true
  309.       @itemlist_window.active = false
  310.       @itemlist_window.index = 0
  311.       @itemcommand_window.index = @item_command_index
  312.       return
  313.     end
  314.    
  315.     if Input.trigger?(Input::C)
  316.       @item = @itemlist_window.item
  317.       if @item.is_a?(RPG::Item)
  318.         unless $game_party.item_can_use?(@item.id)
  319.           $game_system.se_play($data_system.buzzer_se)
  320.           return
  321.         end   
  322.         $game_system.se_play($data_system.decision_se)
  323.         if @item.scope >= 3
  324.           @itemlist_window.active = false
  325.           # 先打开目标窗口的显示,才开始滑动
  326.           @item_target_window.visible = true
  327.           @item_target_window.active = true
  328.           for i in 1..8
  329.             @item_target_window.y -= 39
  330.             if i==8
  331.               @item_target_window.y = 164
  332.             end
  333.             Graphics.update
  334.           end
  335.           if @item.scope == 4 || @item.scope == 6
  336.             @item_target_window.index = -1
  337.           else
  338.             @item_target_window.index = 0
  339.           end
  340.         else
  341.           if @item.common_event_id > 0
  342.             $game_temp.common_event_id = @item.common_event_id
  343.             $game_system.se_play(@item.menu_se)
  344.             if @item.consumable  
  345.               $game_party.lose_item(@item.id, 1)
  346.               @itemlist_window.draw_item(@itemlist_window.index)  
  347.             end
  348.             $scene = Scene_Map.new
  349.             return
  350.           end
  351.         end
  352.         return
  353.       else
  354.         $game_system.se_play($data_system.decision_se)
  355.         @itemlist_window.active = false
  356.         @item_target_window_equip.set_item(@item)
  357.         @item_target_window_equip.visible = true
  358.         @item_target_window_equip.active = true
  359.         for i in 1..8
  360.           @item_target_window_equip.y -= 39
  361.           if i==8
  362.             @item_target_window_equip.y = 164
  363.           end
  364.           Graphics.update
  365.         end
  366.         @item_target_window_equip.index = 0
  367.         return
  368.       end
  369.         
  370.         
  371.         
  372.         
  373.         
  374.     end
  375.   end

  376.   def item_update_target_equip
  377.     if Input.trigger?(Input::B)
  378.       $game_system.se_play($data_system.cancel_se)
  379.       @itemlist_window.active = true
  380.       # 目标窗口滑动,滑动结束后才关闭显示
  381.       for i in 1..9
  382.         @item_target_window_equip.y += 39
  383.         Graphics.update
  384.       end
  385.       @item_target_window_equip.visible = false
  386.       @item_target_window_equip.active = false
  387.       @itemlist_window.set_item(@item_command_index)
  388.       return
  389.     end
  390.     if Input.trigger?(Input::C)
  391.       target_actor = $game_party.actors[@item_target_window_equip.index]
  392.       if target_actor.equippable?(@item) and $game_party.item_can_equip?(target_actor,@item)
  393.         # 演奏装备 SE
  394.         $game_system.se_play($data_system.equip_se)
  395.         if @item.is_a?(RPG::Weapon)
  396.           equip_position = 0
  397.         elsif @item.kind == 0
  398.           equip_position = 1
  399.         elsif @item.kind == 1
  400.           equip_position = 2
  401.         elsif @item.kind == 2
  402.           equip_position = 3
  403.         elsif @item.kind == 3
  404.           equip_position = 4
  405.         end
  406.         
  407.         # 固定装备的情况下
  408.         if target_actor.equip_fix?(equip_position)
  409.           # 演奏冻结 SE
  410.           $game_system.se_play($data_system.buzzer_se)
  411.           return
  412.         end
  413.         
  414.         target_actor.equip(equip_position,@item.id)
  415.         
  416.         @itemlist_window.active = true
  417.         # 目标窗口滑动,滑动结束后才关闭显示
  418.         for i in 1..9
  419.           @item_target_window_equip.y += 39
  420.           Graphics.update
  421.         end
  422.         @item_target_window_equip.visible = false
  423.         @item_target_window_equip.active = false

  424.         @itemlist_window.draw_item(@itemlist_window.index)
  425.         @itemlist_window.set_item(@item_command_index)

  426.       else
  427.         # 演奏冻结 SE
  428.         $game_system.se_play($data_system.buzzer_se)  
  429.       end
  430.       

  431.       
  432.     end
  433.   
  434.   end
  435.   
  436. #———— 更新target窗口————
  437.   def item_update_target
  438.     if Input.trigger?(Input::B)
  439.       $game_system.se_play($data_system.cancel_se)
  440.       unless $game_party.item_can_use?(@item.id)
  441.         @itemlist_window.refresh
  442.       end
  443.       @itemlist_window.active = true
  444.       # 目标窗口滑动,滑动结束后才关闭显示
  445.       for i in 1..9
  446.         @item_target_window.y += 39
  447.         Graphics.update
  448.       end
  449.       @item_target_window.visible = false
  450.       @item_target_window.active = false
  451.       @itemlist_window.set_item(@item_command_index)
  452.       return
  453.     end
  454.     if Input.trigger?(Input::C)
  455.       if $game_party.item_number(@item.id) == 0
  456.         $game_system.se_play($data_system.buzzer_se)
  457.         return
  458.       end
  459.       if @item_target_window.index == -1
  460.         used = false
  461.         for i in $game_party.actors
  462.           used |= i.item_effect(@item)
  463.         end
  464.       end
  465.       if @item_target_window.index >= 0
  466.         target = $game_party.actors[@item_target_window.index]
  467.         used = target.item_effect(@item)
  468.       end
  469.       
  470.       if used
  471.         $game_system.se_play(@item.menu_se)
  472.         if @item.consumable
  473.           $game_party.lose_item(@item.id, 1)
  474.           @itemlist_window.draw_item(@itemlist_window.index)
  475.           @itemlist_window.set_item(@item_command_index)
  476.         end
  477.         @item_target_window.refresh
  478.         if $game_party.all_dead?
  479.           $scene = Scene_Gameover.new
  480.           return
  481.         end
  482.         
  483.         if @item.common_event_id > 0
  484.           $game_temp.common_event_id = @item.common_event_id
  485.           $scene = Scene_Map.new
  486.           return
  487.         end  
  488.       end
  489.    
  490.       unless used
  491.         $game_system.se_play($data_system.buzzer_se)
  492.       end
  493.     return
  494.     end
  495.   end   
  496. end
复制代码
dsu_plus_rewardpost_czw
作者: qq520qq0905    时间: 2011-10-6 11:55
怎么看的?


qq520qq0905于2011-10-6 20:37补充以下内容:
唉~是呀
作者: eve592370698    时间: 2011-10-13 18:09
标题: 看看我的两个大脚本,
本帖最后由 eve592370698 于 2011-10-13 18:35 编辑

楼主大姐啊!您使用的是挚星霁月送给我的那个DQ菜单脚本,那个脚本系统中,武器不能分类,防具,我已经把身体各个部位的分开了,(如果想把武器和防具等进一步分类,那就复杂了)如果再加分类,在您的上面第九行 @item_max = 数字改改
第10行  
@commands = ["药物类", "武器类", "盾牌类", "护身类", "头盔类","装饰类", "道具类", "特殊类"]
括号后面加上半角的逗号和双引号,里面的类别数量和上面的数字要一致,然后呢,108行后面添加
when 8等等,例如我加个炸弹类,那么
  1. @item_max = 9
  2. @commands = ["药物类", "武器类", "盾牌类", "护身类", "头盔类","装饰类", "道具类", "特殊类"   ,  "炸弹类"]
复制代码
后面加一个
  1. when 8            #炸弹类(已经修改)

  2.       for i in 1...$data_items.size

  3.         if ($data_items[i].type == "炸弹" and $game_party.item_number(i) > 0)

  4.           @data.push($data_items[i])

  5.         end

  6.      end
复制代码
我试了试,给武器做了分类(窗口大小我懒得改了)
代码1,替换那个物品分类
  1. #==============================================================================
  2. # 分类物品的命令窗口
  3. #==============================================================================
  4. class Window_ItemCommand < Window_Selectable
  5. #———— 初始化 ————
  6.   def initialize     
  7.     #↓前两个坐标是位置,后两个是大小下
  8.     super(555, 240, 142, 300)  #扩大了
  9.     self.contents = Bitmap.new(width - 32, height - 32 )
  10.     @item_max = 9  #加道具类,防具3类分开(已经修改)
  11.     @commands = ["药物类", "武器类", "盾牌类", "护身类", "头盔类","装饰类", "道具类", "特殊类" , "弹药类"]
  12.     refresh
  13.     self.index = 0
  14.   end   
  15. #———— 刷新 ————
  16.   def refresh  
  17.     self.contents.clear
  18.     for i in 0...@item_max
  19.     draw_item(i, normal_color)
  20.     end
  21.   end
  22. #—— 描绘项目 ——| index:编号,color:颜色——————
  23.   def draw_item(index, color)
  24.     self.contents.font.color = color
  25.     y = index * 32
  26.     self.contents.draw_text(4, y, 128, 32, @commands[index])
  27.   end
  28. #—— 帮助部分更新 ————
  29.   def update_help
  30.     @help_window.set_text(@commands[self.index])
  31.   end   
  32. end
  33. #==============================================================================
  34. # 物品清单窗口
  35. #==============================================================================
  36. class Window_ItemList < Window_Selectable
  37. #———— 初始化 ————
  38.   def initialize
  39.     super(30, 20, 500, 450)
  40. #   @column_max = 2
  41.     refresh
  42.     self.index = 0
  43.   end
  44. #—— 取得现在选择的物品 ——
  45.   def item
  46.     return @data[self.index]
  47.   end
  48. #—— 刷新 ———
  49.   def refresh
  50.     if self.contents != nil
  51.       self.contents.dispose
  52.       self.contents = nil
  53.     end
  54.     @data = []
  55.   end
  56. #—— 设置不同类别的物品 ———
  57.   def set_item(command)
  58.     refresh
  59.     #—— 根据现在的选项决定物品 ——
  60.     case command  
  61.     when 0            #药品类
  62.       for i in 1...$data_items.size
  63.         if ($data_items[i].type == "药物" and $game_party.item_number(i) > 0)
  64.           @data.push($data_items[i])
  65.         end
  66.       end
  67.     when 1            #武器类
  68.       for i in 1...$data_weapons.size
  69.         if $data_weapons[i].type == "装备" and $game_party.weapon_number(i) > 0
  70.           @data.push($data_weapons[i])
  71.         end
  72.       end
  73.     when 2            #盾牌类
  74.       for i in 1...$data_armors.size
  75.         if $data_armors[i].kind == 0 and $game_party.armor_number(i) > 0
  76.           @data.push($data_armors[i])
  77.         end
  78.       end
  79.     when 3            #护身类+++++
  80.       for i in 1...$data_armors.size
  81.         if $data_armors[i].kind == 1 and $game_party.armor_number(i) > 0
  82.           @data.push($data_armors[i])
  83.         end
  84.       end
  85.     when 4            #头盔类++++++
  86.        for i in 1...$data_armors.size
  87.         if $data_armors[i].kind == 2 and $game_party.armor_number(i) > 0
  88.           @data.push($data_armors[i])
  89.         end
  90.       end
  91.     when 5            #装饰类
  92.       for i in 1...$data_armors.size
  93.         if $data_armors[i].kind == 3 and $game_party.armor_number(i) > 0
  94.           @data.push($data_armors[i])
  95.         end
  96.       end
  97.     when 6            #道具类(已经修改)
  98.       for i in 1...$data_items.size
  99.         if ($data_items[i].type == "道具" and $game_party.item_number(i) > 0)
  100.           @data.push($data_items[i])
  101.         end
  102.       end   
  103.     when 7            #特殊类(已经修改)
  104.       for i in 1...$data_items.size
  105.         if ($data_items[i].type == "特殊" and $game_party.item_number(i) > 0)
  106.           @data.push($data_items[i])
  107.         end
  108.       end
  109.    
  110.     when 8            #弹药类(已经修改)
  111.       for i in 1...$data_weapons.size
  112.         if ($data_weapons[i].type == "弹药" and $game_party.item_number(i) > 0)
  113.           @data.push($data_weapons[i])
  114.         end
  115.       end
  116.     end
  117.     @item_max = @data.size  
  118.     if @item_max > 0
  119.       self.contents = Bitmap.new(width - 32, row_max * 32)
  120.       self.contents.clear
  121.       for i in 0...@item_max
  122.         draw_item(i)
  123.       end
  124.     end
  125.   end
  126. #——— 单类物品的个数 ————
  127.   def item_number
  128.     return @item_max
  129.   end
  130. #——— 项目内容的描画 ————
  131.   def draw_item(index)
  132.     item = @data[index]  
  133.     #—— 取得具体物品数量 ——
  134.     case item   
  135.     when RPG::Item
  136.       number = $game_party.item_number(item.id)
  137.     when RPG::Weapon
  138.       number = $game_party.weapon_number(item.id)
  139.     when RPG::Armor
  140.       number = $game_party.armor_number(item.id)
  141.     end
  142.     #—— 给出物品的颜色 ——
  143.     if item.is_a?(RPG::Item)
  144.       if $game_party.item_can_use?(item.id)
  145.         self.contents.font.color = normal_color
  146.       else
  147.         self.contents.font.color = disabled_color
  148.       end
  149.     else
  150.       self.contents.font.color = normal_color
  151.     end
  152.    
  153.     #—— 描绘物体图标、物体名、数量 ——
  154. #   x = 4 + index % 2 * 173
  155. #   y = index / 2 * 32
  156.     x = 4
  157.     y = index*32
  158.     bitmap = RPG::Cache.icon(item.icon_name)
  159.     opacity = self.contents.font.color == normal_color ? 255 : 128
  160.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  161.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  162.     self.contents.draw_text(x + 300, y, 16, 32, "×", 1)
  163.     self.contents.draw_text(x + 314, y, 24, 32, number.to_s, 2)
  164.   end
  165. #——— 更新帮助窗口 ————
  166.   def update_help
  167.     @help_window.set_text(make_description(self.item))
  168.   end
  169. end
  170. #############################################################################
  171. #############################################################################
  172. #==============================================================================
  173. # ■ Scene_Item
  174. #------------------------------------------------------------------------------
  175. #  处理物品画面的类。
  176. #==============================================================================
  177. #############################################################################
  178. #############################################################################
  179. class Scene_Item
  180. #——— 主处理 ————
  181.   def main
  182.     cmd = Window_模仿DQ菜单.new($game_party.actors.size)
  183.     cmd.index = 1
  184.     cmd.active = false
  185.     # 右边命令窗口
  186.     @itemcommand_window = Window_ItemCommand.new
  187.     @itemcommand_window.opacity = HS::OPACITY
  188.     @itemcommand_window.y = 672

  189.     @item_command_index = @itemcommand_window.index
  190.     # 物品窗口
  191.     @itemlist_window = Window_ItemList.new
  192.     @itemlist_window.opacity = HS::OPACITY
  193.     @itemlist_window.active = false
  194.     @itemlist_window.set_item(@item_command_index)
  195.     @itemlist_window.x = -378
  196.     # 帮助窗口
  197.     @item_help_window = Window_Help_New.new
  198.     @item_help_window.x = -580
  199.     @item_help_window.y = 516 #原先是396
  200.     @item_help_window.opacity = HS::OPACITY

  201.     # 关联帮助窗口
  202.     @itemcommand_window.help_window = @item_help_window
  203.     @itemlist_window.help_window = @item_help_window
  204.     # 目标窗口
  205.     @item_target_window = Window_Target.new
  206.     @item_target_window.y = 480
  207.     @item_target_window.opacity = HS::OPACITY
  208.     @item_target_window.visible = false
  209.     @item_target_window.active = false
  210.     # 目标装备窗口
  211.     @item_target_window_equip = Window_Target_Equip.new
  212.     @item_target_window_equip.y = 480
  213.     @item_target_window_equip.opacity = HS::OPACITY
  214.     @item_target_window_equip.visible = false
  215.     @item_target_window_equip.active = false
  216.     #—— 主循环 ——
  217.     Graphics.transition
  218.     # 窗口的滑动
  219.     for i in 1..8
  220.       @item_help_window.x += 76
  221.       @itemcommand_window.y -= 60
  222.       @itemlist_window.x += 51
  223.       if i == 8
  224.         @item_help_window.x = 30
  225.         @itemcommand_window.y = 190
  226.         @itemlist_window.x = 30
  227.       end
  228.       Graphics.update
  229.     end
  230.    
  231.     loop do
  232.       Graphics.update
  233.       Input.update

  234.       # 更新item
  235.       update_item_scene
  236.       if $scene != self
  237.         break
  238.       end
  239.     end
  240.     #—— 释放窗口 ——
  241.    
  242.     # 窗口的滑动
  243.     for i in 1..9
  244.       @item_help_window.x -= 76
  245.       @itemcommand_window.y += 60
  246.       @itemlist_window.x -= 51
  247.       Graphics.update
  248.     end
  249.    
  250.     Graphics.freeze
  251.     cmd.dispose
  252.     @itemcommand_window.dispose
  253.     @itemlist_window.dispose
  254.     @item_help_window.dispose
  255.     @item_target_window.dispose
  256.     @item_target_window_equip.dispose
  257.   end

  258.   #—— update的定义 ——
  259.   def update_item_scene
  260.     @itemcommand_window.update
  261.     @itemlist_window.update
  262.     @item_help_window.update
  263.     @item_target_window.update
  264.     @item_target_window_equip.update
  265.    
  266.     if @item_command_index != @itemcommand_window.index
  267.       @item_command_index = @itemcommand_window.index
  268.       @itemlist_window.set_item(@item_command_index)
  269.     end
  270.    
  271.     #—— 当某窗体在active的时候,更新之 ——
  272.     if @itemcommand_window.active
  273.       item_update_itemcommand
  274.       return
  275.     end
  276.     if @itemlist_window.active
  277.       item_update_itemlist
  278.       return
  279.     end
  280.     if @item_target_window.active
  281.       item_update_target
  282.       return
  283.     end
  284.     if @item_target_window_equip.active
  285.       item_update_target_equip
  286.       return
  287.     end
  288.   end  # update的

  289. #————具体更新定义————
  290.   def item_update_itemcommand
  291.   
  292.     if Input.trigger?(Input::B)
  293.       # 演奏取消 SE
  294.       $game_system.se_play($data_system.cancel_se)
  295.       # 切换到菜单画面
  296.       $scene = Scene_Menu.new(1)
  297.       return
  298.     end
  299.    
  300.     if Input.trigger?(Input::C)
  301.       if @itemlist_window.item_number == 0
  302.         $game_system.se_play($data_system.buzzer_se)
  303.         return
  304.       end
  305.       $game_system.se_play($data_system.decision_se)
  306.       @itemcommand_window.active = false
  307.       @itemlist_window.active = true
  308.       @itemlist_window.index = 0
  309.       return
  310.     end
  311.   end

  312. #————具体更新定义————
  313.   def item_update_itemlist
  314.     if Input.trigger?(Input::B)
  315.       $game_system.se_play($data_system.cancel_se)
  316.       @itemcommand_window.active = true
  317.       @itemlist_window.active = false
  318.       @itemlist_window.index = 0
  319.       @itemcommand_window.index = @item_command_index
  320.       return
  321.     end
  322.    
  323.     if Input.trigger?(Input::C)
  324.       @item = @itemlist_window.item
  325.       if @item.is_a?(RPG::Item)
  326.         unless $game_party.item_can_use?(@item.id)
  327.           $game_system.se_play($data_system.buzzer_se)
  328.           return
  329.         end   
  330.         $game_system.se_play($data_system.decision_se)
  331.         if @item.scope >= 3
  332.           @itemlist_window.active = false
  333.           # 先打开目标窗口的显示,才开始滑动
  334.           @item_target_window.visible = true
  335.           @item_target_window.active = true
  336.           for i in 1..8
  337.             @item_target_window.y -= 39
  338.             if i==8
  339.               @item_target_window.y = 164
  340.             end
  341.             Graphics.update
  342.           end
  343.           if @item.scope == 4 || @item.scope == 6
  344.             @item_target_window.index = -1
  345.           else
  346.             @item_target_window.index = 0
  347.           end
  348.         else
  349.           if @item.common_event_id > 0
  350.             $game_temp.common_event_id = @item.common_event_id
  351.             $game_system.se_play(@item.menu_se)
  352.             if @item.consumable  
  353.               $game_party.lose_item(@item.id, 1)
  354.               @itemlist_window.draw_item(@itemlist_window.index)  
  355.             end
  356.             $scene = Scene_Map.new
  357.             return
  358.           end
  359.         end
  360.         return
  361.       else
  362.         $game_system.se_play($data_system.decision_se)
  363.         @itemlist_window.active = false
  364.         @item_target_window_equip.set_item(@item)
  365.         @item_target_window_equip.visible = true
  366.         @item_target_window_equip.active = true
  367.         for i in 1..8
  368.           @item_target_window_equip.y -= 39
  369.           if i==8
  370.             @item_target_window_equip.y = 164
  371.           end
  372.           Graphics.update
  373.         end
  374.         @item_target_window_equip.index = 0
  375.         return
  376.       end                                       
  377.     end
  378.   end

  379.   def item_update_target_equip
  380.     if Input.trigger?(Input::B)
  381.       $game_system.se_play($data_system.cancel_se)
  382.       @itemlist_window.active = true
  383.       # 目标窗口滑动,滑动结束后才关闭显示
  384.       for i in 1..9
  385.         @item_target_window_equip.y += 39
  386.         Graphics.update
  387.       end
  388.       @item_target_window_equip.visible = false
  389.       @item_target_window_equip.active = false
  390.       @itemlist_window.set_item(@item_command_index)
  391.       return
  392.     end
  393.     if Input.trigger?(Input::C)
  394.       target_actor = $game_party.actors[@item_target_window_equip.index]
  395.       if target_actor.equippable?(@item) and $game_party.item_can_equip?(target_actor,@item)
  396.         # 演奏装备 SE
  397.         $game_system.se_play($data_system.equip_se)
  398.         if @item.is_a?(RPG::Weapon)
  399.           equip_position = 0
  400.         elsif @item.kind == 0
  401.           equip_position = 1
  402.         elsif @item.kind == 1
  403.           equip_position = 2
  404.         elsif @item.kind == 2
  405.           equip_position = 3
  406.         elsif @item.kind == 3
  407.           equip_position = 4
  408.         end
  409.         
  410.         # 固定装备的情况下
  411.         if target_actor.equip_fix?(equip_position)
  412.           # 演奏冻结 SE
  413.           $game_system.se_play($data_system.buzzer_se)
  414.           return
  415.         end
  416.         
  417.         target_actor.equip(equip_position,@item.id)
  418.         
  419.         @itemlist_window.active = true
  420.         # 目标窗口滑动,滑动结束后才关闭显示
  421.         for i in 1..9
  422.           @item_target_window_equip.y += 39
  423.           Graphics.update
  424.         end
  425.         @item_target_window_equip.visible = false
  426.         @item_target_window_equip.active = false

  427.         @itemlist_window.draw_item(@itemlist_window.index)
  428.         @itemlist_window.set_item(@item_command_index)

  429.       else
  430.         # 演奏冻结 SE
  431.         $game_system.se_play($data_system.buzzer_se)  
  432.       end            
  433.     end  
  434.   end  
  435. #———— 更新target窗口————
  436.   def item_update_target
  437.     if Input.trigger?(Input::B)
  438.       $game_system.se_play($data_system.cancel_se)
  439.       unless $game_party.item_can_use?(@item.id)
  440.         @itemlist_window.refresh
  441.       end
  442.       @itemlist_window.active = true
  443.       # 目标窗口滑动,滑动结束后才关闭显示
  444.       for i in 1..9
  445.         @item_target_window.y += 39
  446.         Graphics.update
  447.       end
  448.       @item_target_window.visible = false
  449.       @item_target_window.active = false
  450.       @itemlist_window.set_item(@item_command_index)
  451.       return
  452.     end
  453.     if Input.trigger?(Input::C)
  454.       if $game_party.item_number(@item.id) == 0
  455.         $game_system.se_play($data_system.buzzer_se)
  456.         return
  457.       end
  458.       if @item_target_window.index == -1
  459.         used = false
  460.         for i in $game_party.actors
  461.           used |= i.item_effect(@item)
  462.         end
  463.       end
  464.       if @item_target_window.index >= 0
  465.         target = $game_party.actors[@item_target_window.index]
  466.         used = target.item_effect(@item)
  467.       end
  468.       
  469.       if used
  470.         $game_system.se_play(@item.menu_se)
  471.         if @item.consumable
  472.           $game_party.lose_item(@item.id, 1)
  473.           @itemlist_window.draw_item(@itemlist_window.index)
  474.           @itemlist_window.set_item(@item_command_index)
  475.         end
  476.         @item_target_window.refresh
  477.         if $game_party.all_dead?
  478.           $scene = Scene_Gameover.new
  479.           return
  480.         end
  481.         
  482.         if @item.common_event_id > 0
  483.           $game_temp.common_event_id = @item.common_event_id
  484.           $scene = Scene_Map.new
  485.           return
  486.         end  
  487.       end
  488.    
  489.       unless used
  490.         $game_system.se_play($data_system.buzzer_se)
  491.       end
  492.     return
  493.     end
  494.   end   
  495. end
复制代码
代码2,模块添加一些定义:
  1. module RPG
  2.   # 物品分类
  3.   class Item
  4.     def name
  5.       name = @name.split(/,/)[0]
  6.       return name != nil ? name : ""
  7.     end
  8.     def type
  9.       type = @name.split(/,/)[1]
  10.       return type == nil ? "药物" : type
  11.     end
  12.   end
  13.   
  14.   class Weapon
  15.     def name
  16.       name = @name.split(/,/)[0]
  17.       return name != nil ? name : ""
  18.     end
  19.     def range
  20.       range = @name.split(/,/)[1]
  21.       return range != nil ? range.to_i : 1 # 不进行设置时,默认射程为 1
  22.     end
  23.     def type
  24.       type = @name.split(/,/)[1]
  25.       return type == nil ? "装备" : type
  26.     end
  27.     def description
  28.       des = @description.split(/@/)[0]
  29.       return des != nil ? des : ""
  30.     end
  31.     # 武器装备所需各种 能力值
  32.     def need_lv
  33.       need_lv  = @description.split(/@/)[1]
  34.       return need_lv != nil ? need_lv.to_i : 1
  35.     end
  36.    
  37.     def need_str
  38.       need_str  = @description.split(/@/)[2]
  39.       return need_str != nil ? need_str.to_i : 0
  40.     end
  41.    
  42.     def need_dex
  43.       need_dex  = @description.split(/@/)[3]
  44.       return need_dex != nil ? need_dex.to_i : 0
  45.     end
  46.    
  47.     def need_agi
  48.       need_agi  = @description.split(/@/)[4]
  49.       return need_agi != nil ? need_agi.to_i : 0
  50.     end
  51.    
  52.     def need_int
  53.       need_int  = @description.split(/@/)[5]
  54.       return need_int != nil ? need_int.to_i : 0
  55.     end
  56.    
  57.   end
  58.   
  59.   class Armor
  60.     def name
  61.       name = @name.split(/,/)[0]
  62.       return name != nil ? name : ""
  63.     end
  64.    
  65.     def add_mv
  66.       add_mv = @name.split(/,/)[1]
  67.       return add_mv != nil ? add_mv.to_i : 0
  68.     end
  69.    
  70.     def description
  71.       des = @description.split(/@/)[0]
  72.       return des != nil ? des : ""
  73.     end
  74.     # 防具装备所需各种 能力值
  75.     def need_lv
  76.       need_lv  = @description.split(/@/)[1]
  77.       return need_lv != nil ? need_lv.to_i : 1
  78.     end
  79.    
  80.     def need_str
  81.       need_str  = @description.split(/@/)[2]
  82.       return need_str != nil ? need_str.to_i : 0
  83.     end
  84.    
  85.     def need_dex
  86.       need_dex  = @description.split(/@/)[3]
  87.       return need_dex != nil ? need_dex.to_i : 0
  88.     end
  89.    
  90.     def need_agi
  91.       need_agi  = @description.split(/@/)[4]
  92.       return need_agi != nil ? need_agi.to_i : 0
  93.     end
  94.    
  95.     def need_int
  96.       need_int  = @description.split(/@/)[5]
  97.       return need_int != nil ? need_int.to_i : 0
  98.     end
  99.    
  100.   end

  101. end
  102.   
  103.   
  104.   
复制代码





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