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

Project1

 找回密码
 注册会员
搜索

物品分类脚本的修改

查看数: 1789 | 评论数: 2 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2011-10-6 10:51

正文摘要:

本帖最后由 Kimu 于 2011-10-6 11:30 编辑 如下,是我使用的脚本,想扩展2个分类,自己知道要改的有 @item_max = @commands = 还有底下的分类要求什么的 第一第二我会修改,出了点问题,就是在测试时分类的名字 ...

回复

eve592370698 发表于 2011-10-13 18:09:32

看看我的两个大脚本,

本帖最后由 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.   
复制代码

点评

额,差点忘了。这个帖子 eve大大,关于这个分类脚本我已经删除了,增加装备脚本也删除了,主要是冲突问题。最后决定放弃这个 麻烦大大修改了  发表于 2011-10-13 19:45
qq520qq0905 发表于 2011-10-6 11:55:01
怎么看的?


qq520qq0905于2011-10-6 20:37补充以下内容:
唉~是呀

点评

新手要注意查看版规。要不然扣分扣的多怨啊~~  发表于 2011-10-6 12:03

评分

参与人数 3星屑 -40 收起 理由
各种压力的猫君 -24 XP区酱油20元一瓶 谢谢惠顾
77777741 + 4 安慰新手~~
亿万星辰 -20 灌水伤身哦~

查看全部评分

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

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

GMT+8, 2025-9-15 06:19

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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