Project1

标题: 仓库怎么弄的 另外怎么把论坛自己发的问题弄成已解决的 [打印本页]

作者: 杺谇    时间: 2011-2-16 22:17
标题: 仓库怎么弄的 另外怎么把论坛自己发的问题弄成已解决的
就这个仓库怎么弄可以放东西进去 和取出来   另外就去 怎么把自己发的帖子弄成已解决的 就这
作者: 沙之爱罗    时间: 2011-2-17 07:35
本帖最后由 沙之爱罗 于 2011-2-17 11:58 编辑

仓库用仓库脚本。。。
  1. #==============================================================================
  2. # 本脚本来自www.66rpg.com,转载和使用请保留此信息
  3. # 脚本名:真实商店,脚本作者:柳柳
  4. #==============================================================================
  5. #
  6. # 功能:
  7. #
  8. # 买进卖出的物品在商店有所体现,卖出后会在商店可买物品中出现,物品有数量限制
  9. # 商店可进货出货————总之就是模拟真实商店。
  10. #  
  11. # 这个脚本和原装商店并不冲突,两个商店可以并存。
  12. #
  13. # 使用方法:
  14. #
  15. # 1、在下面被井号框起来的中间部分,设置初期物品。格式如下:
  16. #    @goods[商店编号] = [ [种类,ID,可卖数量] ,  [种类,ID,可卖数量]......]
  17. #    其中种类,0为道具,1为武器,2为防具;ID是数据库编号
  18. #
  19. # 2、调用:$scene = Scene_Shop_Va.new(商店编号)  
  20. #    比如你可以直接测试$scene = Scene_Shop_Va.new(1),已经设置好了。
  21. #
  22. # 3、商店出货:$game_system.shop_change(商店编号,种类,ID,数量)
  23. #    如果是进货,把数量设置为负数即可
  24. #
  25. class WWWindow_ShopCommand < Window_Selectable
  26.   #--------------------------------------------------------------------------
  27.   # ● 初始化对像
  28.   #--------------------------------------------------------------------------
  29.   def initialize
  30.     super(0, 64, 480, 64)
  31.     self.contents = Bitmap.new(width - 32, height - 32)
  32.     @item_max = 3
  33.     @column_max = 3
  34.     @commands = ["买进", "卖出", "算了"]
  35.     refresh
  36.     self.index = 0
  37.   end
  38.   #--------------------------------------------------------------------------
  39.   # ● 刷新
  40.   #--------------------------------------------------------------------------
  41.   def refresh
  42.     self.contents.clear
  43.     for i in 0...@item_max
  44.       draw_item(i)
  45.     end
  46.   end
  47.   #--------------------------------------------------------------------------
  48.   # ● 描绘项目
  49.   #     index : 项目编号
  50.   #--------------------------------------------------------------------------
  51.   def draw_item(index)
  52.     x = 4 + index * 160
  53.     self.contents.draw_text(x, 0, 128, 32, @commands[index])
  54.   end
  55. end
  56. class W2Window_ShopCommand < Window_Selectable
  57.   #--------------------------------------------------------------------------
  58.   # ● 初始化对像
  59.   #--------------------------------------------------------------------------
  60.   def initialize
  61.     super(0, 64, 480, 64)
  62.     self.contents = Bitmap.new(width - 32, height - 32)
  63.     @item_max = 3
  64.     @column_max = 3
  65.     @commands = ["取出物品", "存入物品", "算了"]
  66.     refresh
  67.     self.index = 0
  68.   end
  69.   #--------------------------------------------------------------------------
  70.   # ● 刷新
  71.   #--------------------------------------------------------------------------
  72.   def refresh
  73.     self.contents.clear
  74.     for i in 0...@item_max
  75.       draw_item(i)
  76.     end
  77.   end
  78.   #--------------------------------------------------------------------------
  79.   # ● 描绘项目
  80.   #     index : 项目编号
  81.   #--------------------------------------------------------------------------
  82.   def draw_item(index)
  83.     x = 4 + index * 160
  84.     self.contents.draw_text(x, 0, 128, 32, @commands[index])
  85.   end
  86. end

  87. class Game_System
  88.   attr_accessor :goods   
  89.   alias vaule_shop_66RPG_initialize initialize
  90.   def initialize
  91.     vaule_shop_66RPG_initialize
  92.     @goods = []
  93.   ###########################################################################
  94.     # 初期的时候的商店物品,编号顺序:种类,ID,可卖数量
  95.     @goods[0] = [[-1,-1,-1]]
  96.     @goods[1] = [[0,1,30],[0,2,30],[1,1,10],[1,2,10],[1,3,10]]
  97.   ###########################################################################
  98.   end
  99.   def shop_change(shop,kind,id,delnumber)
  100.     dl = delnumber
  101.     for dt in $game_system.goods[shop]
  102.       if (dt[0]==kind) and (dt[1]==id)
  103.         dt[2] -= dl
  104.         dt[2] = [dt[2],99].min
  105.         if dt[2] == 0
  106.           $game_system.goods[shop].delete(dt)
  107.         end
  108.         return
  109.       end
  110.     end
  111.     $game_system.goods[shop].push([kind,id,-delnumber])
  112.   end
  113. end

  114. class Scene_Shop_Va
  115.   def initialize(shop_number)
  116.     # 当前商店编号
  117.     @shop_now = shop_number
  118.     # 0号商店为物品仓库
  119.     $itembankflag = @shop_now > 0 ? 0 : 1
  120.   end   
  121.   #--------------------------------------------------------------------------
  122.   # ● 主处理
  123.   #--------------------------------------------------------------------------
  124.   def main
  125.     # 生成帮助窗口
  126.     @help_window = Window_Help.new
  127.     # 生成指令窗口
  128.     if $itembankflag == 0 #是不是物品仓库?
  129.       @command_window = WWWindow_ShopCommand.new
  130.     else
  131.       @command_window = W2Window_ShopCommand.new
  132.     end  
  133.     # 生成金钱窗口
  134.     @gold_window = Window_Gold.new
  135.     @gold_window.x = 480
  136.     @gold_window.y = 64
  137.     # 生成时间窗口
  138.     @dummy_window = Window_Base.new(0, 128, 640, 352)
  139.     # 生成购买窗口
  140.     @buy_window = Window_ShopBuy_Va.new($game_system.goods[@shop_now])
  141.     @buy_window.active = false
  142.     @buy_window.visible = false
  143.     @buy_window.help_window = @help_window
  144.     # 生成卖出窗口
  145.     @sell_window = Window_ShopSell.new
  146.     @sell_window.active = false
  147.     @sell_window.visible = false
  148.     @sell_window.help_window = @help_window
  149.     # 生成数量输入窗口
  150.     @number_window = Window_ShopNumber.new
  151.     @number_window.active = false
  152.     @number_window.visible = false
  153.     # 生成状态窗口
  154.     @status_window = Window_ShopStatus.new
  155.     @status_window.visible = false
  156.     # 执行过渡
  157.     Graphics.transition
  158.     # 主循环
  159.     loop do
  160.       # 刷新游戏画面
  161.       Graphics.update
  162.       # 刷新输入信息
  163.       Input.update
  164.       # 刷新画面
  165.       update
  166.       # 如果画面切换的话就中断循环
  167.       if $scene != self
  168.         break
  169.       end
  170.     end
  171.     # 准备过渡
  172.     Graphics.freeze
  173.     # 释放窗口
  174.     @help_window.dispose
  175.     @command_window.dispose
  176.     @gold_window.dispose
  177.     @dummy_window.dispose
  178.     @buy_window.dispose
  179.     @sell_window.dispose
  180.     @number_window.dispose
  181.     @status_window.dispose
  182.   end
  183.   #--------------------------------------------------------------------------
  184.   # ● 刷新画面
  185.   #--------------------------------------------------------------------------
  186.   def update
  187.     # 刷新窗口
  188.     @help_window.update
  189.     @command_window.update
  190.     @gold_window.update
  191.     @dummy_window.update
  192.     @buy_window.update
  193.     @sell_window.update
  194.     @number_window.update
  195.     @status_window.update
  196.     # 指令窗口激活的情况下: 调用 update_command
  197.     if @command_window.active
  198.       update_command
  199.       return
  200.     end
  201.     # 购买窗口激活的情况下: 调用 update_buy
  202.     if @buy_window.active
  203.       update_buy
  204.       return
  205.     end
  206.     # 卖出窗口激活的情况下: 调用 update_sell
  207.     if @sell_window.active
  208.       update_sell
  209.       return
  210.     end
  211.     # 个数输入窗口激活的情况下: 调用 update_number
  212.     if @number_window.active
  213.       update_number
  214.       return
  215.     end
  216.   end
  217.   #--------------------------------------------------------------------------
  218.   # ● 刷新画面 (指令窗口激活的情况下)
  219.   #--------------------------------------------------------------------------
  220.   def update_command
  221.     # 按下 B 键的情况下
  222.     if Input.trigger?(Input::B)
  223.       # 演奏取消 SE
  224.       $game_system.se_play($data_system.cancel_se)
  225.       # 切换到地图画面
  226.       $scene = Scene_Map.new
  227.       return
  228.     end
  229.     # 按下 C 键的情况下
  230.     if Input.trigger?(Input::C)
  231.       # 命令窗口光标位置分支
  232.       case @command_window.index
  233.       when 0  # 购买
  234.         # 演奏确定 SE
  235.         $game_system.se_play($data_system.decision_se)
  236.         # 窗口状态转向购买模式
  237.         @command_window.active = false
  238.         @dummy_window.visible = false
  239.         @buy_window.active = true
  240.         @buy_window.visible = true
  241.         @buy_window.refresh
  242.         @status_window.visible = true
  243.       when 1  # 卖出
  244.         # 演奏确定 SE
  245.         $game_system.se_play($data_system.decision_se)
  246.         # 窗口状态转向卖出模式
  247.         @command_window.active = false
  248.         @dummy_window.visible = false
  249.         @sell_window.active = true
  250.         @sell_window.visible = true
  251.         @sell_window.refresh
  252.       when 2  # 取消
  253.         # 演奏确定 SE
  254.         $game_system.se_play($data_system.decision_se)
  255.         # 切换到地图画面
  256.         $scene = Scene_Map.new
  257.       end
  258.       return
  259.     end
  260.   end
  261.   #--------------------------------------------------------------------------
  262.   # ● 刷新画面 (购买窗口激活的情况下)
  263.   #--------------------------------------------------------------------------
  264.   def update_buy
  265.     # 设置状态窗口的物品
  266.     @status_window.item = @buy_window.item
  267.     # 按下 B 键的情况下
  268.     if Input.trigger?(Input::B)
  269.       # 演奏取消 SE
  270.       $game_system.se_play($data_system.cancel_se)
  271.       # 窗口状态转向初期模式
  272.       @command_window.active = true
  273.       @dummy_window.visible = true
  274.       @buy_window.active = false
  275.       @buy_window.visible = false
  276.       @status_window.visible = false
  277.       @status_window.item = nil
  278.       # 删除帮助文本
  279.       @help_window.set_text("")
  280.       return
  281.     end
  282.     # 按下 C 键的情况下
  283.     if Input.trigger?(Input::C)
  284.       # 获取物品
  285.       @item = @buy_window.item
  286.       
  287. # 如果是物品仓库就不对金钱做出处理=============================================      
  288.       ppprice = $itembankflag == 0 ? @item.price : 0
  289.       # 物品无效的情况下、或者价格在所持金以上的情况下
  290.       if @item == nil or ppprice > $game_party.gold
  291.         # 演奏冻结 SE
  292.         $game_system.se_play($data_system.buzzer_se)
  293.         return
  294.       end
  295.       # 获取物品所持数
  296.       case @item
  297.       when RPG::Item
  298.         number = $game_party.item_number(@item.id)
  299.       when RPG::Weapon
  300.         number = $game_party.weapon_number(@item.id)
  301.       when RPG::Armor
  302.         number = $game_party.armor_number(@item.id)
  303.       end
  304.       # 如果已经拥有了 99 个情况下
  305.       if number == 99
  306.         # 演奏冻结 SE
  307.         $game_system.se_play($data_system.buzzer_se)
  308.         return
  309.       end
  310.       # 演奏确定 SE
  311.       $game_system.se_play($data_system.decision_se)
  312.       # 计算可以最多购买的数量
  313.       max = ppprice == 0 ? 99 : $game_party.gold / @item.price
  314. # =============================================================================      
  315.       
  316.       max = [[max, 99 - number].min,@buy_window.item_number].min
  317.       # 窗口状态转向数值输入模式
  318.       @buy_window.active = false
  319.       @buy_window.visible = false
  320.       @number_window.set(@item, max, ppprice)
  321.       @number_window.active = true
  322.       @number_window.visible = true
  323.     end
  324.   end
  325.   #--------------------------------------------------------------------------
  326.   # ● 画面更新 (卖出窗口激活的情况下)
  327.   #--------------------------------------------------------------------------
  328.   def update_sell
  329.     # 按下 B 键的情况下
  330.     if Input.trigger?(Input::B)
  331.       # 演奏取消 SE
  332.       $game_system.se_play($data_system.cancel_se)
  333.       # 窗口状态转向初期模式
  334.       @command_window.active = true
  335.       @dummy_window.visible = true
  336.       @sell_window.active = false
  337.       @sell_window.visible = false
  338.       @status_window.item = nil
  339.       # 删除帮助文本
  340.       @help_window.set_text("")
  341.       return
  342.     end
  343.     # 按下 C 键的情况下
  344.     if Input.trigger?(Input::C)
  345.       # 获取物品
  346.       @item = @sell_window.item
  347.       # 设置状态窗口的物品
  348.       @status_window.item = @item
  349.       # 物品无效的情况下、或者价格为 0 (不能卖出) 的情况下
  350.       if @item == nil or @item.price == 0
  351.         # 演奏冻结 SE
  352.         $game_system.se_play($data_system.buzzer_se)
  353.         return
  354.       end
  355.       # 演奏确定 SE
  356.       $game_system.se_play($data_system.decision_se)
  357.       # 获取物品的所持数
  358.       case @item
  359.       when RPG::Item
  360.         number = $game_party.item_number(@item.id)
  361.       when RPG::Weapon
  362.         number = $game_party.weapon_number(@item.id)
  363.       when RPG::Armor
  364.         number = $game_party.armor_number(@item.id)
  365.       end
  366.       # 最大卖出个数 = 物品的所持数
  367.       max = number
  368.       # 窗口状态转向个数输入模式
  369.       @sell_window.active = false
  370.       @sell_window.visible = false
  371.       @number_window.set(@item, max, @item.price)
  372.       @number_window.active = true
  373.       @number_window.visible = true
  374.       @status_window.visible = true
  375.     end
  376.   end
  377.   #--------------------------------------------------------------------------
  378.   # ● 刷新画面 (个数输入窗口激活的情况下)
  379.   #--------------------------------------------------------------------------
  380.   def update_number
  381.     # 按下 B 键的情况下
  382.     if Input.trigger?(Input::B)
  383.       # 演奏取消 SE
  384.       $game_system.se_play($data_system.cancel_se)
  385.       # 设置个数输入窗口为不活动·非可视状态
  386.       @number_window.active = false
  387.       @number_window.visible = false
  388.       # 命令窗口光标位置分支
  389.       case @command_window.index
  390.       when 0  # 购买
  391.         # 窗口状态转向购买模式
  392.         @buy_window.active = true
  393.         @buy_window.visible = true
  394.       when 1  # 卖出
  395.         # 窗口状态转向卖出模式
  396.         @sell_window.active = true
  397.         @sell_window.visible = true
  398.         @status_window.visible = false
  399.       end
  400.       return
  401.     end
  402.     # 按下 C 键的情况下
  403.     if Input.trigger?(Input::C)
  404.       # 演奏商店 SE
  405.       $game_system.se_play($data_system.shop_se)
  406.       # 设置个数输入窗口为不活动·非可视状态
  407.       @number_window.active = false
  408.       @number_window.visible = false
  409.       # 命令窗口光标位置分支
  410.       case @command_window.index
  411.       when 0  # 购买
  412.         # 购买处理
  413.         temp = 0
  414.         if $超重不能买 > 0
  415.           @number_window.active = true
  416.           @number_window.visible = true
  417.           return
  418.         end  
  419. # 如果是物品仓库就不对金钱做出处理=============================================        
  420.         if $itembankflag == 0
  421.           $game_party.lose_gold(@number_window.number * @item.price)
  422.         end  
  423. # =============================================================================        
  424.         
  425.         case @item
  426.         when RPG::Item
  427.           $game_party.gain_item(@item.id, @number_window.number)
  428.         when RPG::Weapon
  429.           $game_party.gain_weapon(@item.id, @number_window.number)
  430.           temp = 1
  431.         when RPG::Armor
  432.           $game_party.gain_armor(@item.id, @number_window.number)
  433.           temp = 2
  434.         end
  435.         goods_del(temp,@item.id,@number_window.number)
  436.         # 刷新各窗口
  437.         @buy_window = Window_ShopBuy_Va.new($game_system.goods[@shop_now])
  438.         @gold_window.refresh
  439.         @buy_window.refresh
  440.         @status_window.refresh
  441.         # 窗口状态转向购买模式
  442.         @buy_window.active = true
  443.         @buy_window.visible = true
  444.       when 1  # 卖出
  445.         # 卖出处理
  446.         
  447. # 如果是物品仓库就不对金钱做出处理=============================================        
  448.         if $itembankflag == 0
  449.           $game_party.gain_gold(@number_window.number * @item.price)
  450.         end  
  451. # =============================================================================        
  452.         
  453.         temp = 0
  454.         case @item
  455.         when RPG::Item
  456.           $game_party.lose_item(@item.id, @number_window.number)
  457.         when RPG::Weapon
  458.           $game_party.lose_weapon(@item.id, @number_window.number)
  459.           temp = 1
  460.         when RPG::Armor
  461.           $game_party.lose_armor(@item.id, @number_window.number)
  462.           temp = 2
  463.         end
  464.         # 刷新各窗口
  465.         goods_del(temp,@item.id,-@number_window.number)
  466.         @buy_window = Window_ShopBuy_Va.new($game_system.goods[@shop_now])
  467.         @buy_window.active = false
  468.         @buy_window.visible = false
  469.         @buy_window.help_window = @help_window
  470.         @gold_window.refresh
  471.         @sell_window.refresh
  472.         @status_window.refresh
  473.         # 窗口状态转向卖出模式
  474.         @sell_window.active = true
  475.         @sell_window.visible = true
  476.         @status_window.visible = false
  477.       end
  478.       return
  479.     end
  480.   end
  481.   # 删除可出售商品内容
  482.   def goods_del(kind,id,delnumber)
  483.     dl = delnumber
  484.     for dt in $game_system.goods[@shop_now]
  485.       if (dt[0]==kind) and (dt[1]==id)
  486.         dt[2] -= dl
  487.         dt[2] = [dt[2],99].min
  488.         if dt[2] == 0
  489.           $game_system.goods[@shop_now].delete(dt)
  490.         end
  491.         return
  492.       end
  493.     end
  494.     $game_system.goods[@shop_now].push([kind,id,-delnumber])
  495.   end
  496. end

  497. #==============================================================================
  498. # ■ Window_ShopBuy_Va
  499. #------------------------------------------------------------------------------
  500. #  商店画面、浏览显示可以购买的商品的窗口。
  501. #==============================================================================

  502. class Window_ShopBuy_Va < Window_Selectable
  503.   attr_accessor :shop_goods
  504.   #--------------------------------------------------------------------------
  505.   # ● 初始化对像
  506.   #     shop_goods : 商品
  507.   #--------------------------------------------------------------------------
  508.   def initialize(shop_goods)
  509.     super(0, 128, 368, 352)
  510.     @shop_goods = shop_goods
  511.     refresh
  512.     self.index = 0
  513.   end
  514.   #--------------------------------------------------------------------------
  515.   # ● 获取物品
  516.   #--------------------------------------------------------------------------
  517.   def item
  518.     return @data[self.index]
  519.   end
  520.   #--------------------------------------------------------------------------
  521.   # ● 获取物品
  522.   #--------------------------------------------------------------------------
  523.   def item_number
  524.     return @data_number[self.index]
  525.   end
  526.   #--------------------------------------------------------------------------
  527.   # ● 刷新
  528.   #--------------------------------------------------------------------------
  529.   def refresh
  530.     if self.contents != nil
  531.       self.contents.dispose
  532.       self.contents = nil
  533.     end
  534.     @data = []
  535.     @data_number = []
  536.     for goods_item in @shop_goods
  537.       case goods_item[0]
  538.       when 0
  539.         item = $data_items[goods_item[1]]
  540.       when 1
  541.         item = $data_weapons[goods_item[1]]
  542.       when 2
  543.         item = $data_armors[goods_item[1]]
  544.       end
  545.       if (item != nil) and (goods_item[2] != 0)
  546.         @data.push(item)
  547.         @data_number.push(goods_item[2])
  548.       else
  549.         @data.delete(item)
  550.       end
  551.     end
  552.     # 如果项目数不是 0 就生成位图、描绘全部项目
  553.     @item_max = @data.size
  554.     if @item_max > 0
  555.       self.contents = Bitmap.new(width - 32, row_max * 32)
  556.       for i in 0...@item_max
  557.         draw_item(i)
  558.       end
  559.     end
  560.   end
  561.   #--------------------------------------------------------------------------
  562.   # ● 描绘羡慕
  563.   #     index : 项目编号
  564.   #--------------------------------------------------------------------------
  565.   def draw_item(index)
  566.     item = @data[index]
  567.     # 获取物品所持数
  568.     case item
  569.     when RPG::Item
  570.       number = $game_party.item_number(item.id)
  571.     when RPG::Weapon
  572.       number = $game_party.weapon_number(item.id)
  573.     when RPG::Armor
  574.       number = $game_party.armor_number(item.id)
  575.     end
  576.     # 价格在所持金以下、并且所持数不是 99 的情况下为普通文字颜色
  577.     # 除此之外的情况设置为无效文字色
  578.     if item.price <= $game_party.gold and number < 99
  579.       self.contents.font.color = normal_color
  580.     else
  581.       self.contents.font.color = disabled_color
  582.     end
  583.     x = 4
  584.     y = index * 32
  585.     rect = Rect.new(x, y, self.width - 32, 32)
  586.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  587.     bitmap = RPG::Cache.icon(item.icon_name)
  588.     opacity = self.contents.font.color == normal_color ? 255 : 128
  589.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  590.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  591.     self.contents.draw_text(x + 240, y, 88, 32, "剩  ", 2)
  592.     self.contents.draw_text(x + 240, y, 88, 32, @data_number[index].to_s, 2)
  593.     if $itembankflag == 0  
  594.       self.contents.draw_text(x + 180, y, 88, 32, item.price.to_s, 2)
  595.     end  
  596.   end
  597.   #--------------------------------------------------------------------------
  598.   # ● 刷新帮助文本
  599.   #--------------------------------------------------------------------------
  600.   def update_help
  601.     @help_window.set_text(self.item == nil ? "" : self.item.description)
  602.   end
  603. end

  604. #==============================================================================
  605. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  606. #==============================================================================
复制代码
认可在认可帖认可
http://rpg.blue/thread-155199-1-1.html
作者: xia0082    时间: 2011-2-17 09:00
问下LS的脚本要如何调用?
作者: 杺谇    时间: 2011-2-17 15:14
回复 沙之爱罗 的帖子


这个脚本怎么出错了




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