Project1

标题: VX 分类物品的默认商店 [打印本页]

作者: 八云紫    时间: 2009-9-4 22:08
标题: VX 分类物品的默认商店
本帖最后由 八云紫 于 2009-9-4 22:28 编辑

结合 小幽酱 的分类脚本一起使用, 让商店也有分类效果.  仅仅用在默认的商店里.

核心使用的是 小幽酱 的 分类脚本, 该脚本没有任何技术含量, 有 BUG 请联系咱.
  1. class Harts_Window_ItemCommand < Window_Selectable

  2.   def initialize(x = 0, y = 64, w = 160, h = 296)
  3.     super(x, y, w, h)
  4.     @type = true
  5.     self.index = 0
  6.     refresh
  7.   end
  8.   
  9.   alias old_byz_addcommand addcommand
  10.   def addcommand()
  11.     if @type
  12.       old_byz_addcommand
  13.     else
  14.       @commands = []
  15.       for i in $game_temp.shop_goods
  16.         case i[0]
  17.         when 0
  18.           item = $data_items[i[1]]
  19.         when 1
  20.           item = $data_weapons[i[1]]
  21.         when 2
  22.           item = $data_armors[i[1]]
  23.         end
  24.         if [email protected]?(item.desc)
  25.           @commands << item.desc
  26.         end
  27.       end      
  28.       @item_max = @commands.size
  29.     end
  30.   end
  31.   
  32.   def setType(bool)
  33.     @type = bool
  34.     refresh()
  35.   end
  36.   
  37.   def getCommand()
  38.     return @commands[self.index]
  39.   end
  40.   
  41. end
  42. #==============================================================================
  43. # ■ Window_ShopBuy
  44. #------------------------------------------------------------------------------
  45. #  商店画面、浏览显示可以购买的商品的窗口。
  46. #==============================================================================

  47. class Window_ShopBuy < Window_Selectable
  48.   #--------------------------------------------------------------------------
  49.   # ● 初始化对象
  50.   #     x : 窗口的 X 坐标
  51.   #     y : 窗口的 Y 坐标
  52.   #--------------------------------------------------------------------------
  53.   alias old_byz_initialize initialize
  54.   def initialize(x, y, command = nil)
  55.     @command = command
  56.     old_byz_initialize(x, y)
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ● 刷新
  60.   #--------------------------------------------------------------------------
  61.   def refresh
  62.     @data = []
  63.     for goods_item in @shop_goods
  64.       case goods_item[0]
  65.       when 0
  66.         item = $data_items[goods_item[1]]
  67.       when 1
  68.         item = $data_weapons[goods_item[1]]
  69.       when 2
  70.         item = $data_armors[goods_item[1]]
  71.       end
  72.       if item != nil and item.desc == @command
  73.         @data.push(item)
  74.       end
  75.     end
  76.     @item_max = @data.size
  77.     create_contents
  78.     for i in 0...@item_max
  79.       draw_item(i)
  80.     end
  81.   end
  82.   
  83.   def setCommand(command)
  84.     @command = command
  85.     refresh()
  86.   end
  87.   
  88. end

  89. #==============================================================================
  90. # ■ Window_ShopSell
  91. #------------------------------------------------------------------------------
  92. #  商店画面、浏览显示可以卖掉的商品的窗口。
  93. #==============================================================================

  94. class Window_ShopSell < Window_Item
  95.   #--------------------------------------------------------------------------
  96.   # ● 初始化对象
  97.   #     x : 窗口的 X 坐标
  98.   #     y : 窗口的 Y 坐标
  99.   #--------------------------------------------------------------------------
  100.   alias old_byz_initialize initialize
  101.   def initialize(x, y, w, h)
  102.     @command = nil
  103.     old_byz_initialize(x, y, w, h)
  104.   end
  105.   #--------------------------------------------------------------------------
  106.   # ● 刷新
  107.   #--------------------------------------------------------------------------
  108.   def refresh
  109.     return if @command == nil
  110.     @data = []
  111.     for item in $game_party.items
  112.       next if @command != item.desc
  113.       @data.push(item)
  114.       if item.is_a?(RPG::Item) and item.id == $game_party.last_item_id
  115.         self.index = @data.size - 1
  116.       end
  117.     end
  118.     @data.push(nil) if include?(nil)
  119.     @item_max = @data.size
  120.     create_contents
  121.     for i in 0...@item_max
  122.       draw_item(i)
  123.     end
  124.   end
  125.   
  126.   def setCommand(command)
  127.     @command = command
  128.     refresh()
  129.   end
  130. end


  131. #==============================================================================
  132. # ■ Scene_Shop
  133. #------------------------------------------------------------------------------
  134. #  处理商店画面的类。
  135. #==============================================================================

  136. class Scene_Shop < Scene_Base
  137.   #--------------------------------------------------------------------------
  138.   # ● 开始处理
  139.   #--------------------------------------------------------------------------
  140.   #--------------------------------------------------------------------------
  141.   # ● 开始处理
  142.   #--------------------------------------------------------------------------
  143.   def start
  144.     super
  145.     @type = 0
  146.     create_menu_background
  147.     create_command_window
  148.     @item_type_window = Harts_Window_ItemCommand.new(0, 112, 304, 304)
  149.     @item_type_window.active = false
  150.     @item_type_window.visible = false
  151.     @help_window = Window_Help.new
  152.     @gold_window = Window_Gold.new(384, 56)
  153.     @dummy_window = Window_Base.new(0, 112, 544, 304)
  154.     @buy_window = Window_ShopBuy.new(0, 112)
  155.     @buy_window.active = false
  156.     @buy_window.visible = false
  157.     @buy_window.help_window = @help_window
  158.     @sell_window = Window_ShopSell.new(0, 112, 544, 304)
  159.     @sell_window.active = false
  160.     @sell_window.visible = false
  161.     @sell_window.help_window = @help_window
  162.     @number_window = Window_ShopNumber.new(0, 112)
  163.     @number_window.active = false
  164.     @number_window.visible = false
  165.     @status_window = Window_ShopStatus.new(304, 112)
  166.     @status_window.visible = false
  167.   end
  168.   #--------------------------------------------------------------------------
  169.   # ● 结束处理
  170.   #--------------------------------------------------------------------------
  171.   alias old_byz_terminate terminate
  172.   def terminate
  173.     old_byz_terminate
  174.     @item_type_window.dispose
  175.   end
  176.   #--------------------------------------------------------------------------
  177.   # ● 更新画面
  178.   #--------------------------------------------------------------------------
  179.   def update
  180.     super
  181.     update_menu_background
  182.     @help_window.update
  183.     @item_type_window.update
  184.     @command_window.update
  185.     @gold_window.update
  186.     @dummy_window.update
  187.     @buy_window.update
  188.     @sell_window.update
  189.     @number_window.update
  190.     @status_window.update
  191.     if @command_window.active
  192.       update_command_selection
  193.     elsif @buy_window.active
  194.       update_buy_selection
  195.     elsif @sell_window.active
  196.       update_sell_selection
  197.     elsif @number_window.active
  198.       update_number_input
  199.     elsif @item_type_window.active
  200.       update_type_window()
  201.     end
  202.   end
  203.   #--------------------------------------------------------------------------
  204.   # ● 更新指令窗口
  205.   #--------------------------------------------------------------------------
  206.   def update_command_selection
  207.     if Input.trigger?(Input::B)
  208.       Sound.play_cancel
  209.       $scene = Scene_Map.new
  210.     elsif Input.trigger?(Input::C)
  211.       case @command_window.index
  212.       when 0  # 购买
  213.         Sound.play_decision
  214.         @command_window.active = false
  215.         @dummy_window.visible = false
  216.         @item_type_window.visible = true
  217.         @item_type_window.active = true
  218.         @item_type_window.setType(false)
  219.         @status_window.visible = true
  220.         @type = 1
  221.       when 1  # 卖出
  222.         if $game_temp.shop_purchase_only
  223.           Sound.play_buzzer
  224.         else
  225.           Sound.play_decision
  226.           @item_type_window.visible = true
  227.           @item_type_window.refresh
  228.           @command_window.active = false
  229.           @dummy_window.visible = false
  230.           @item_type_window.active = true
  231.           @item_type_window.setType(true)
  232.           @type = 2
  233.         end
  234.       when 2  # 取消
  235.         Sound.play_decision
  236.         $scene = Scene_Map.new
  237.       end
  238.     end
  239.   end

  240.   def update_type_window()
  241.     if Input.trigger?(Input::B)
  242.       Sound.play_cancel
  243.       @dummy_window.visible = true
  244.       @item_type_window.active = false
  245.       @command_window.active = true
  246.       @item_type_window.visible = false
  247.       @status_window.visible = false
  248.       if @type == 1
  249.         @buy_window.active = false
  250.         @buy_window.visible = false
  251.       else
  252.         @sell_window.active = false
  253.         @sell_window.visible = false
  254.       end
  255.       @type = 0
  256.     elsif Input.trigger?(Input::C)
  257.       command = @item_type_window.getCommand()
  258.       if @type == 1
  259.         @buy_window.setCommand(command)
  260.         @buy_window.active = true
  261.         @buy_window.visible = true
  262.       else
  263.         @sell_window.setCommand(command)
  264.         @sell_window.active = true
  265.         @sell_window.visible = true
  266.       end
  267.       @item_type_window.active = false
  268.       @item_type_window.visible = false
  269.     end
  270.   end
  271.   
  272.   #--------------------------------------------------------------------------
  273.   # ● 更新选择购买物品
  274.   #--------------------------------------------------------------------------
  275.   def update_buy_selection
  276.     @status_window.item = @buy_window.item
  277.     if Input.trigger?(Input::B)
  278.       Sound.play_cancel
  279.       @item_type_window.active = true
  280.       @item_type_window.visible = true
  281.       @item_type_window.setType(false)
  282.       @buy_window.active = false
  283.       @buy_window.visible = false
  284.       @status_window.item = nil
  285.       @help_window.set_text("")
  286.       return
  287.     end
  288.     if Input.trigger?(Input::C)
  289.       @item = @buy_window.item
  290.       number = $game_party.item_number(@item)
  291.       if @item == nil or @item.price > $game_party.gold or number == 99
  292.         Sound.play_buzzer
  293.       else
  294.         Sound.play_decision
  295.         max = @item.price == 0 ? 99 : $game_party.gold / @item.price
  296.         max = [max, 99 - number].min
  297.         @buy_window.active = false
  298.         @buy_window.visible = false
  299.         @number_window.set(@item, max, @item.price)
  300.         @number_window.active = true
  301.         @number_window.visible = true
  302.       end
  303.     end
  304.   end
  305.   #--------------------------------------------------------------------------
  306.   # ● 更新选择卖出物品
  307.   #--------------------------------------------------------------------------
  308.   def update_sell_selection
  309.     if Input.trigger?(Input::B)
  310.       Sound.play_cancel
  311.       @item_type_window.active = true
  312.       @item_type_window.visible = true
  313.       @item_type_window.setType(true)
  314.       @sell_window.active = false
  315.       @sell_window.visible = false
  316.       @status_window.item = nil
  317.       @help_window.set_text("")
  318.     elsif Input.trigger?(Input::C)
  319.       @item = @sell_window.item
  320.       @status_window.item = @item
  321.       if @item == nil or @item.price == 0
  322.         Sound.play_buzzer
  323.       else
  324.         Sound.play_decision
  325.         max = $game_party.item_number(@item)
  326.         @sell_window.active = false
  327.         @sell_window.visible = false
  328.         @number_window.set(@item, max, @item.price / 2)
  329.         @number_window.active = true
  330.         @number_window.visible = true
  331.         @status_window.visible = true
  332.       end
  333.     end
  334.   end
  335.   #--------------------------------------------------------------------------
  336.   # ● 更新输入个数
  337.   #--------------------------------------------------------------------------
  338.   def update_number_input
  339.     if Input.trigger?(Input::B)
  340.       cancel_number_input
  341.       if @type == 1
  342.         @item_type_window.setType(true)
  343.       else
  344.         @item_type_window.setType(false)
  345.       end
  346.     elsif Input.trigger?(Input::C)
  347.       decide_number_input
  348.       if @type == 1
  349.         @item_type_window.setType(true)
  350.       else
  351.         @item_type_window.setType(false)
  352.       end
  353.     end
  354.   end
  355. end
复制代码

作者: yy461530593    时间: 2009-9-4 22:12
这个必须顶,我用XP。。嘿嘿
作者: killkill2298    时间: 2009-9-6 07:33
谢谢云紫~~~~

不客气的收下了
作者: 八云紫    时间: 2009-9-6 11:49
谢谢云紫~~~~

不客气的收下了
killkill2298 发表于 2009-9-6 07:33


八云 紫, 不是 八 云紫
作者: 小幽的马甲    时间: 2009-9-6 12:22
啊呜啊呜,核心用的是那个物品分类脚本么……
那个似乎是我在换号前复刻的,好怀念的感觉呢。
作者: 八云紫    时间: 2009-9-6 12:25
呵呵, 发现 小幽酱 了~~
作者: 小幽的马甲    时间: 2009-9-6 12:39
嗯。紫sama也是、好久不见了呢。啊呜♪
作者: 银元    时间: 2009-10-4 12:52
我才找到55555555555
作者: 精灵使者    时间: 2009-10-4 13:09
XP版的古树曾经做出来过……但没有独立
啥时候帮我做个XP的独立版本吧,恩。
作者: s554187203    时间: 2010-8-10 14:51
我没有物品分类~(飘过~)
作者: 流星落    时间: 2010-8-12 15:49
这个要顶,玩vx游戏逛商店很痛苦。
作者: a598829998    时间: 2010-8-19 03:27
提示: 作者被禁止或删除 内容自动屏蔽




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