Project1

标题: 求一个物品分类的脚本 [打印本页]

作者: aaalbx    时间: 2011-10-15 08:16
标题: 求一个物品分类的脚本
求个物品分类的脚本啊!站内的显示“找不到到页面”。没辙了,哪位大大给个分类脚本吧dsu_plus_rewardpost_czw
作者: 羁绊の终    时间: 2011-10-15 08:26
  1. #==============================================================================
  2. # ■ Harts_Window_ItemTitle
  3. #==============================================================================

  4. class Harts_Window_ItemTitle < Window_Base
  5.   def initialize
  6.     super(0, 0, 160, 64)
  7.     self.contents = Bitmap.new(width - 32, height - 32)
  8.     self.contents.clear
  9.     self.contents.font.color = normal_color
  10.     self.contents.draw_text(4, 0, 120, 32, $data_system.words.item, 1)
  11.   end
  12. end

  13. #==============================================================================
  14. # ■ Harts_Window_ItemCommand
  15. #==============================================================================

  16. class Harts_Window_ItemCommand < Window_Selectable
  17.   attr_accessor :commands
  18.   #--------------------------------------------------------------------------
  19.   # ● 初始化,生成commands窗口
  20.   #--------------------------------------------------------------------------
  21.   def initialize
  22.     super(0, 64, 160, 352)
  23.     self.contents = Bitmap.new(width - 32, height - 32)
  24.     @commands = []
  25.     #————————生成commands窗口
  26.     for i in 1...$data_items.size
  27.       if $game_party.item_number(i) > 0  
  28.         push = true
  29.         for com in @commands
  30.           if com == $data_items[i].desc
  31.             push = false
  32.           end
  33.         end
  34.         if push == true
  35.           @commands.push($data_items[i].desc)
  36.         end
  37.       end
  38.     end
  39.     for i in 1...$data_weapons.size
  40.       if $game_party.weapon_number(i) > 0  
  41.         push = true
  42.         for com in @commands
  43.           if com == $data_weapons[i].desc
  44.             push = false
  45.           end
  46.         end
  47.         if push == true
  48.           @commands.push($data_weapons[i].desc)
  49.         end
  50.       end
  51.     end
  52.     for i in 1...$data_armors.size
  53.       if $game_party.armor_number(i) > 0  
  54.         push = true
  55.         for com in @commands
  56.           if com == $data_armors[i].desc
  57.             push = false
  58.           end
  59.         end
  60.         if push == true
  61.           @commands.push($data_armors[i].desc)
  62.         end
  63.       end
  64.     end
  65.     if @commands == []
  66.       @commands.push("普通物品")
  67.     end      
  68.     @item_max = @commands.size
  69.     refresh
  70.     self.index = 0
  71.   end
  72.   #--------------------------------------------------------------------------
  73.   #--------------------------------------------------------------------------
  74.   def refresh
  75.     self.contents.clear
  76.     for i in 0...@item_max
  77.       draw_item(i, normal_color)
  78.     end
  79.   end
  80.   #--------------------------------------------------------------------------
  81.   #--------------------------------------------------------------------------
  82.   def draw_item(index, color)
  83.     self.contents.font.color = color
  84.     y = index * 32
  85.     self.contents.draw_text(4, y, 128, 32, @commands[index])
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # 只描绘原文字
  89.   #--------------------------------------------------------------------------
  90.   def update_help
  91.     @help_window.set_text(@commands[self.index])

  92.   end
  93. end

  94. #==============================================================================
  95. # ■ Window_Item
  96. #==============================================================================

  97. class Harts_Window_ItemList < Window_Selectable
  98.   #--------------------------------------------------------------------------
  99.   #--------------------------------------------------------------------------
  100.   def initialize
  101.     super(160, 0, 480, 416)
  102.     refresh
  103.     self.index = 0
  104.   end
  105.   #--------------------------------------------------------------------------
  106.   #--------------------------------------------------------------------------
  107.   def item
  108.     return @data[self.index]
  109.   end
  110.   #--------------------------------------------------------------------------
  111.   #--------------------------------------------------------------------------
  112.   def refresh
  113.     if self.contents != nil
  114.       self.contents.dispose
  115.       self.contents = nil
  116.     end
  117.     @data = []
  118.   end
  119.   #--------------------------------------------------------------------------
  120.   #--------------------------------------------------------------------------
  121.   def set_item(command)
  122.     refresh
  123.     for i in 1...$data_items.size
  124.       if $game_party.item_number(i) > 0 and $data_items[i].desc == command
  125.         @data.push($data_items[i])
  126.       end
  127.     end
  128.     for i in 1...$data_weapons.size
  129.       if $game_party.weapon_number(i) > 0 and $data_weapons[i].desc == command
  130.         @data.push($data_weapons[i])
  131.       end
  132.     end
  133.     for i in 1...$data_armors.size
  134.       if $game_party.armor_number(i) > 0 and $data_armors[i].desc == command
  135.         @data.push($data_armors[i])
  136.       end
  137.     end
  138.     @item_max = @data.size
  139.     if @item_max > 0
  140.       self.contents = Bitmap.new(width - 32, row_max * 32)
  141.       self.contents.clear
  142.       for i in 0...@item_max
  143.         draw_item(i)
  144.       end
  145.     end
  146.   end
  147.   #--------------------------------------------------------------------------
  148.   #--------------------------------------------------------------------------
  149.   def item_number
  150.     return @item_max
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   #--------------------------------------------------------------------------
  154.   def draw_item(index)
  155.     item = @data[index]
  156.     case item
  157.     when RPG::Item
  158.       number = $game_party.item_number(item.id)
  159.     when RPG::Weapon
  160.       number = $game_party.weapon_number(item.id)
  161.     when RPG::Armor
  162.       number = $game_party.armor_number(item.id)
  163.     end
  164.     if item.is_a?(RPG::Item) and
  165.       $game_party.item_can_use?(item.id)
  166.       self.contents.font.color = normal_color
  167.     else
  168.       self.contents.font.color = disabled_color
  169.     end
  170.     x = 4
  171.     y = index * 32
  172.     bitmap = RPG::Cache.icon(item.icon_name)
  173.     opacity = self.contents.font.color == normal_color ? 255 : 128
  174.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  175.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  176.     self.contents.draw_text(x + 400, y, 16, 32, ":", 1)

  177. self.contents.draw_text(x + 416, y, 24, 32, number.to_s, 2)
  178.   end
  179.   #--------------------------------------------------------------------------
  180.   #--------------------------------------------------------------------------
  181.   def update_help
  182.     @help_window.set_text(self.item == nil ? "" : self.item.description)
  183.   end
  184. end

  185. #==============================================================================
  186. # ■ Harts_Scene_Item
  187. #==============================================================================

  188. class Scene_Item
  189.   #--------------------------------------------------------------------------
  190.   #--------------------------------------------------------------------------
  191.   def main
  192.     @itemtitle_window = Harts_Window_ItemTitle.new
  193.     @itemcommand_window = Harts_Window_ItemCommand.new
  194.     @command_index = @itemcommand_window.index
  195.     @itemlist_window = Harts_Window_ItemList.new
  196.     @itemlist_window.active = false
  197.     @help_window = Window_Help.new
  198.     @help_window.x = 0
  199.     @help_window.y = 416
  200.     @itemcommand_window.help_window = @help_window
  201.     @itemlist_window.help_window = @help_window
  202.     @target_window = Window_Target.new
  203.     @target_window.visible = false
  204.     @target_window.active = false
  205.     @itemlist_window.set_item(@itemcommand_window.commands[@command_index])
  206.     Graphics.transition
  207.     loop do
  208.       Graphics.update
  209.       Input.update
  210.       update
  211.       if $scene != self
  212.         break
  213.       end
  214.     end
  215.     Graphics.freeze
  216.     @itemtitle_window.dispose
  217.     @itemcommand_window.dispose
  218.     @itemlist_window.dispose
  219.     @help_window.dispose
  220.     @target_window.dispose
  221.   end
  222.   #--------------------------------------------------------------------------
  223.   #--------------------------------------------------------------------------
  224.   def update
  225.     @itemtitle_window.update
  226.     @itemcommand_window.update
  227.     @itemlist_window.update
  228.     @help_window.update
  229.     @target_window.update
  230.     if @command_index != @itemcommand_window.index
  231.       @command_index = @itemcommand_window.index
  232.       @itemlist_window.set_item(@itemcommand_window.commands[@command_index])
  233.     end
  234.     if @itemcommand_window.active
  235.       update_itemcommand
  236.       return
  237.     end
  238.     if @itemlist_window.active
  239.       update_itemlist
  240.       return
  241.     end
  242.     if @target_window.active
  243.       update_target
  244.       return
  245.     end
  246.   end
  247.   #--------------------------------------------------------------------------
  248.   #--------------------------------------------------------------------------
  249.   def update_itemcommand
  250.     if Input.trigger?(Input::B)
  251.       $game_system.se_play($data_system.cancel_se)
  252.       $scene = Scene_Menu.new(0)
  253.       return
  254.     end
  255.     if Input.trigger?(Input::C)
  256.       if @itemlist_window.item_number == 0
  257.         $game_system.se_play($data_system.buzzer_se)
  258.         return
  259.       end
  260.       $game_system.se_play($data_system.decision_se)
  261.       @itemcommand_window.active = false
  262.       @itemlist_window.active = true
  263.       @itemlist_window.index = 0
  264.       return
  265.   end
  266.   end
  267.   #--------------------------------------------------------------------------
  268.   #--------------------------------------------------------------------------
  269.   def update_itemlist
  270.     if Input.trigger?(Input::B)
  271.       $game_system.se_play($data_system.cancel_se)
  272.       @itemcommand_window.active = true
  273.       @itemlist_window.active = false
  274.       @itemlist_window.index = 0
  275.       @itemcommand_window.index = @command_index
  276.       return
  277.     end
  278.     if Input.trigger?(Input::C)
  279.       @item = @itemlist_window.item
  280.       unless @item.is_a?(RPG::Item)
  281.         $game_system.se_play($data_system.buzzer_se)
  282.         return
  283.       end
  284.       unless $game_party.item_can_use?(@item.id)
  285.         $game_system.se_play($data_system.buzzer_se)
  286.         return
  287.       end
  288.       $game_system.se_play($data_system.decision_se)
  289.       if @item.scope >= 3
  290.         @itemlist_window.active = false
  291.         @target_window.x = 304
  292.         @target_window.visible = true
  293.         @target_window.active = true
  294.         if @item.scope == 4 || @item.scope == 6
  295.           @target_window.index = -1
  296.         else
  297.           @target_window.index = 0
  298.         end
  299.       else
  300.         if @item.common_event_id > 0
  301.           $game_temp.common_event_id = @item.common_event_id
  302.           $game_system.se_play(@item.menu_se)
  303.             if @item.consumable
  304.               $game_party.lose_item(@item.id, 1)
  305.               @itemlist_window.draw_item(@itemlist_window.index)
  306.             end
  307.           $scene = Scene_Map.new
  308.           return
  309.         end
  310.       end
  311.       return
  312.     end
  313.   end
  314.   #--------------------------------------------------------------------------
  315.   #--------------------------------------------------------------------------
  316.   def update_target
  317.     if Input.trigger?(Input::B)
  318.       $game_system.se_play($data_system.cancel_se)
  319.       unless $game_party.item_can_use?(@item.id)
  320.         @itemlist_window.refresh
  321.       end
  322.       @itemlist_window.active = true
  323.       @target_window.visible = false
  324.       @target_window.active = false
  325.       @itemlist_window.set_item(@itemcommand_window.commands[@command_index])
  326.       return
  327.     end
  328.     if Input.trigger?(Input::C)
  329.       if $game_party.item_number(@item.id) == 0
  330.         $game_system.se_play($data_system.buzzer_se)
  331.         return
  332.       end
  333.       if @target_window.index == -1
  334.         used = false
  335.         for i in $game_party.actors
  336.           used |= i.item_effect(@item)
  337.         end
  338.       end
  339.       if @target_window.index >= 0
  340.         target = $game_party.actors[@target_window.index]
  341.         used = target.item_effect(@item)
  342.       end
  343.       if used
  344.         $game_system.se_play(@item.menu_se)
  345.         if @item.consumable
  346.           $game_party.lose_item(@item.id, 1)
  347.           @itemlist_window.draw_item(@itemlist_window.index)
  348.           @itemlist_window.set_item(@itemcommand_window.commands[@command_index])
  349.         end
  350.         @target_window.refresh
  351.         if $game_party.all_dead?
  352.           $scene = Scene_Gameover.new
  353.           return
  354.         end
  355.         if @item.common_event_id > 0
  356.           $game_temp.common_event_id = @item.common_event_id
  357.           $scene = Scene_Map.new
  358.           return
  359.         end
  360.       end
  361.       unless used
  362.         $game_system.se_play($data_system.buzzer_se)
  363.       end
  364.     return
  365.     end
  366.   end
  367. end

  368. #==============================================================================
  369. # ■ RPG追加定义,使用@符号分类
  370. #==============================================================================

  371. module RPG
  372.   class Weapon
  373.     def description
  374.       description = @description.split(/@/)[0]
  375.       return description != nil ? description : ''
  376.     end
  377.     def desc
  378.       desc = @description.split(/@/)[1]
  379.       return desc != nil ? desc : "普通物品"
  380.     end
  381.   end
  382.   class Item
  383.     def description
  384.       description = @description.split(/@/)[0]
  385.       return description != nil ? description : ''
  386.     end
  387.     def desc
  388.       desc = @description.split(/@/)[1]
  389.       return desc != nil ? desc : "普通物品"
  390.     end
  391.   end
  392.   class Armor
  393.     def description
  394.       description = @description.split(/@/)[0]
  395.       return description != nil ? description : ''
  396.     end
  397.     def desc
  398.       desc = @description.split(/@/)[1]
  399.       return desc != nil ? desc : "普通物品"
  400.     end
  401.   end
  402. end
复制代码
你应该...会用吧?
作者: aaalbx    时间: 2011-10-15 08:46
很好!3Q了





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