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

Project1

 找回密码
 注册会员
搜索
查看: 1491|回复: 3
打印 上一主题 下一主题

[已经解决] 请问如何做出像世界树迷宫那样的商店系统?

[复制链接]

Lv2.观梦者

梦石
0
星屑
4294
在线时间
32 小时
注册时间
2013-11-16
帖子
2
跳转到指定楼层
1
发表于 2014-5-3 22:08:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 森林里的人 于 2014-5-4 22:19 编辑

如题,我想做一个像世界树迷宫(我只玩过3代)那样的商店系统(类似于加工厂)。
从怪物那获得素材之后,卖给商店,然后商店出现新的装备。有些装备是要多个相同的素材售卖了之后才会出现,有些是要多个不同的素材售卖之后出现。
并且买卖时可以购买的商品的个数是根据你提供的素材个数决定的(如A商品需要3个素材a,我卖给商店7个素材a,那么我只能买到2个商品A,在卖给商店2个素材a后,集齐9个,那么我就能买3个A)。
是要设置公共事件吗?怎么设置呢?还是有什么其他方法?
求教。


青春恋爱,冒险闯关,黑暗致郁都来一份~

Lv1.梦旅人

梦石
0
星屑
50
在线时间
92 小时
注册时间
2013-2-23
帖子
130
2
发表于 2014-5-4 07:09:18 | 只看该作者
原址:http://izumiwhite.web.fc2.com/rgss3/rgss3_005.html

这个脚本能实现以出售一定数量的素材会出现新的商品,但没办法改变上限。
需要用SceneManager.call(Scene_AddShop)呼出。

30行左右是编辑区用这些代码,例子:
  1. I_mat[2]  = [["I",1,2]]
  2. I_mat[3]  = [["I",1,1], ["I",2,1]]
复制代码
等号前面代表追加商品,等号后面为素材,参考第2个例子可以指定多个素材。
  1. I_mat[ID]  = [["I",ID,N]]
复制代码
最前面的"I"跟双引号中的"I"代表ITEM,可以换成W(weapon)或A(armor),分别对应新商品跟素材。
ID是道具ID,后面的N代表售出数量。

完整脚本
  1. #==============================================================================
  2. # ■ RGSS3 アイテム売却による商品追加ショップ ver 1.00
  3. #------------------------------------------------------------------------------
  4. #  配布元:
  5. #     白の魔 http://izumiwhite.web.fc2.com/
  6. #
  7. #  利用規約:
  8. #     RPGツクールVX Aceの正規の登録者のみご利用になれます。
  9. #     利用報告・著作権表示とかは必要ありません。
  10. #     改造もご自由にどうぞ。
  11. #     何か問題が発生しても責任は持ちません。
  12. #==============================================================================

  13. #--------------------------------------------------------------------------
  14. # ★ 初期設定。
  15. #    販売条件の設定
  16. #--------------------------------------------------------------------------
  17. module WD_addshop_ini

  18.   I_mat = [] #この行は削除しないこと
  19.   W_mat = [] #この行は削除しないこと
  20.   A_mat = [] #この行は削除しないこと
  21.   
  22.   #以下、販売条件リスト。
  23.   #例: I_mat[3]  = [ ["I",1,1], ["W",2,1], ["A",2,2], ["A",3,1]]
  24.   #と記載した場合、ID3のアイテムの販売条件は、
  25.   #ID1のアイテム1個、ID2の武器1個、ID2の防具2個、ID3の防具1個
  26.   #の売却となる。
  27.   
  28.   #アイテムの販売条件
  29.   I_mat[2]  = [["I",1,2]]
  30.   I_mat[3]  = [["I",1,1], ["I",2,1]]
  31.   I_mat[4]  = [["I",1,3]]

  32.   #武器の販売条件
  33.   W_mat[3]  = [["W",1,1], ["W",2,1]]
  34.   W_mat[6]  = [["W",3,1], ["I",16,1]]
  35.   
  36.   #防具の販売条件  
  37.   A_mat[2]  = [["A",1,2]]
  38.   A_mat[5]  = [["A",2,1], ["W",2,2], ["I",16,1]]
  39.   
  40. end

  41. #==============================================================================
  42. # ■ WD_addshop
  43. #------------------------------------------------------------------------------
  44. #  アイテム売却による商品追加ショップの共通メソッドです。
  45. #==============================================================================

  46. module WD_addshop
  47.   def i_add_switch_on(id)
  48.     $game_system.i_add_sw = [] if $game_system.i_add_sw == nil
  49.     $game_system.i_add_sw[id] = false if $game_system.i_add_sw[id] == nil
  50.     $game_system.i_add_sw[id] = true
  51.   end
  52.   def i_add_switch_off(id)
  53.     $game_system.i_add_sw = [] if $game_system.i_add_sw == nil
  54.     $game_system.i_add_sw[id] = false if $game_system.i_add_sw[id] == nil
  55.     $game_system.i_add_sw[id] = false
  56.   end
  57.   def i_add_switch_on?(id)
  58.     $game_system.i_add_sw = [] if $game_system.i_add_sw == nil
  59.     $game_system.i_add_sw[id] = false if $game_system.i_add_sw[id] == nil
  60.     return $game_system.i_add_sw[id]
  61.   end
  62.   def w_add_switch_on(id)
  63.     $game_system.w_add_sw = [] if $game_system.w_add_sw == nil
  64.     $game_system.w_add_sw[id] = false if $game_system.w_add_sw[id] == nil
  65.     $game_system.w_add_sw[id] = true
  66.   end
  67.   def w_add_switch_off(id)
  68.     $game_system.w_add_sw = [] if $game_system.w_add_sw == nil
  69.     $game_system.w_add_sw[id] = false if $game_system.w_add_sw[id] == nil
  70.     $game_system.w_add_sw[id] = false
  71.   end
  72.   def w_add_switch_on?(id)
  73.     $game_system.w_add_sw = [] if $game_system.w_add_sw == nil
  74.     $game_system.w_add_sw[id] = false if $game_system.w_add_sw[id] == nil
  75.     return $game_system.w_add_sw[id]
  76.   end
  77.   def a_add_switch_on(id)
  78.     $game_system.a_add_sw = [] if $game_system.a_add_sw == nil
  79.     $game_system.a_add_sw[id] = false if $game_system.a_add_sw[id] == nil
  80.     $game_system.a_add_sw[id] = true
  81.   end
  82.   def a_add_switch_off(id)
  83.     $game_system.a_add_sw = [] if $game_system.a_add_sw == nil
  84.     $game_system.a_add_sw[id] = false if $game_system.a_add_sw[id] == nil
  85.     $game_system.a_add_sw[id] = false
  86.   end
  87.   def a_add_switch_on?(id)
  88.     $game_system.a_add_sw = [] if $game_system.a_add_sw == nil
  89.     $game_system.a_add_sw[id] = false if $game_system.a_add_sw[id] == nil
  90.     return $game_system.a_add_sw[id]
  91.   end
  92.   def item_add_switch_on(item)
  93.     if item.is_a?(RPG::Item)
  94.       i_add_switch_on(item.id)
  95.     end
  96.     if item.is_a?(RPG::Weapon)
  97.       w_add_switch_on(item.id)
  98.     end
  99.     if item.is_a?(RPG::Armor)
  100.       a_add_switch_on(item.id)
  101.     end
  102.   end
  103.   def item_add_switch_on?(item)
  104.     if item.is_a?(RPG::Item)
  105.       return i_add_switch_on?(item.id)
  106.     end
  107.     if item.is_a?(RPG::Weapon)
  108.       return w_add_switch_on?(item.id)
  109.     end
  110.     if item.is_a?(RPG::Armor)
  111.       return a_add_switch_on?(item.id)
  112.     end
  113.   end
  114.   def i_sell_num(id)
  115.     $game_system.i_sell_num = [] if $game_system.i_sell_num == nil
  116.     $game_system.i_sell_num[id] = 0 if $game_system.i_sell_num[id] == nil
  117.     return $game_system.i_sell_num[id]
  118.   end
  119.   def i_sell_num_puls(id, n)
  120.     $game_system.i_sell_num = [] if $game_system.i_sell_num == nil
  121.     $game_system.i_sell_num[id] = 0 if $game_system.i_sell_num[id] == nil
  122.     $game_system.i_sell_num[id] += n
  123.   end  
  124.   def w_sell_num(id)
  125.     $game_system.w_sell_num = [] if $game_system.w_sell_num == nil
  126.     $game_system.w_sell_num[id] = 0 if $game_system.w_sell_num[id] == nil
  127.     return $game_system.w_sell_num[id]
  128.   end
  129.   def w_sell_num_puls(id, n)
  130.     $game_system.w_sell_num = [] if $game_system.w_sell_num == nil
  131.     $game_system.w_sell_num[id] = 0 if $game_system.w_sell_num[id] == nil
  132.     $game_system.w_sell_num[id] += n
  133.   end
  134.   def a_sell_num(id)
  135.     $game_system.a_sell_num = [] if $game_system.a_sell_num == nil
  136.     $game_system.a_sell_num[id] = 0 if $game_system.a_sell_num[id] == nil
  137.     return $game_system.a_sell_num[id]
  138.   end
  139.   def a_sell_num_puls(id, n)
  140.     $game_system.a_sell_num = [] if $game_system.a_sell_num == nil
  141.     $game_system.a_sell_num[id] = 0 if $game_system.a_sell_num[id] == nil
  142.     $game_system.a_sell_num[id] += n
  143.   end
  144.   def item_sell_num(item)
  145.     if item.is_a?(RPG::Item)
  146.       return i_sell_num(item.id)
  147.     end
  148.     if item.is_a?(RPG::Weapon)
  149.       return w_sell_num(item.id)
  150.     end
  151.     if item.is_a?(RPG::Armor)
  152.       return a_sell_num(item.id)
  153.     end
  154.   end
  155.   def item_sell_num_puls(item, n)
  156.     if item.is_a?(RPG::Item)
  157.       i_sell_num_puls(item.id, n)
  158.     end
  159.     if item.is_a?(RPG::Weapon)
  160.       w_sell_num_puls(item.id, n)
  161.     end
  162.     if item.is_a?(RPG::Armor)
  163.       a_sell_num_puls(item.id, n)
  164.     end
  165.   end

  166. end
  167.   
  168. class Game_Interpreter
  169.   include WD_addshop
  170. end

  171. class Game_System
  172.   #--------------------------------------------------------------------------
  173.   # ● 公開インスタンス変数
  174.   #--------------------------------------------------------------------------
  175.   attr_accessor :i_add_sw
  176.   attr_accessor :w_add_sw
  177.   attr_accessor :a_add_sw
  178.   attr_accessor :i_sell_num
  179.   attr_accessor :w_sell_num
  180.   attr_accessor :a_sell_num
  181.   #--------------------------------------------------------------------------
  182.   # ● オブジェクト初期化
  183.   #--------------------------------------------------------------------------
  184.   alias wd_orig_initialize005 initialize
  185.   def initialize
  186.     wd_orig_initialize005
  187.     @i_add_sw = []
  188.     @w_add_sw = []
  189.     @a_add_sw = []
  190.     @i_sell_num = []
  191.     @w_sell_num = []
  192.     @a_sell_num = []
  193.   end
  194. end


  195. #==============================================================================
  196. # ■ Scene_AddShop
  197. #------------------------------------------------------------------------------
  198. #  アイテム売却による商品追加ショップの画面の処理を行うクラスです。
  199. #==============================================================================

  200. class Scene_AddShop < Scene_Shop
  201.   include WD_addshop
  202.   #--------------------------------------------------------------------------
  203.   # ● 準備
  204.   #--------------------------------------------------------------------------
  205.   def initialize
  206.     get_goods
  207.     @purchase_only = false
  208.     @add_list = []
  209.   end
  210.   #--------------------------------------------------------------------------
  211.   # ● 商品の取得
  212.   #--------------------------------------------------------------------------
  213.   def get_goods
  214.     @goods = []
  215.    
  216.     for i in 1...$data_items.size
  217.       if i_add_switch_on?(i)
  218.         @goods.push([0,i,0,0])
  219.       end
  220.     end
  221.     for i in 1...$data_weapons.size
  222.       if w_add_switch_on?(i)
  223.         @goods.push([1,i,0,0])
  224.       end
  225.     end
  226.     for i in 1...$data_armors.size
  227.       if a_add_switch_on?(i)
  228.         @goods.push([2,i,0,0])
  229.       end
  230.     end
  231.   end  
  232.   #--------------------------------------------------------------------------
  233.   # ● 開始処理
  234.   #--------------------------------------------------------------------------
  235.   def start
  236.     super
  237.     create_add_window
  238.   end
  239.   #--------------------------------------------------------------------------
  240.   # ● 商品追加ウィンドウの作成
  241.   #--------------------------------------------------------------------------
  242.   def create_add_window
  243.     @add_window = Window_ShopAdd.new
  244.     @add_window.viewport = @viewport
  245.     @add_window.set_handler(:ok,     method(:on_add_ok))
  246.     @add_window.hide.deactivate
  247.   end
  248.   #--------------------------------------------------------------------------
  249.   # ● 売却ウィンドウのアクティブ化
  250.   #--------------------------------------------------------------------------
  251.   def activate_add_window
  252.     @add_window.item = @add_list.shift
  253.     @add_window.show.active
  254.   end
  255.   #--------------------------------------------------------------------------
  256.   # ● 個数入力の終了
  257.   #--------------------------------------------------------------------------
  258.   def end_number_input
  259.     case @command_window.current_symbol
  260.     when :buy
  261.       @number_window.hide
  262.       activate_buy_window
  263.     when :sell
  264.       if @add_list.size > 0
  265.         activate_add_window
  266.       else
  267.         @number_window.hide
  268.         activate_sell_window
  269.       end
  270.     end
  271.   end
  272.   #--------------------------------------------------------------------------
  273.   # ● 売却の実行
  274.   #--------------------------------------------------------------------------
  275.   def do_sell(number)
  276.     super(number)
  277.     item_sell_num_puls(@item, number)
  278.     get_add_item_list
  279.   end
  280.   #--------------------------------------------------------------------------
  281.   # ● 商品追加ウィンドウ入力時の処理
  282.   #--------------------------------------------------------------------------
  283.   def on_add_ok
  284.     @add_window.hide.deactivate
  285.     if @add_list.size > 0
  286.       activate_add_window
  287.     else
  288.       @number_window.hide
  289.       activate_sell_window
  290.     end   
  291.   end
  292.   #--------------------------------------------------------------------------
  293.   # ● 追加商品のリストの取得
  294.   #--------------------------------------------------------------------------
  295.   def get_add_item_list
  296.     @add_list = []
  297.     for i in 1..WD_addshop_ini::I_mat.size
  298.       mats = WD_addshop_ini::I_mat[i]
  299.       if mats
  300.         if i_add_switch_on?(i) == false
  301.           add_flag = get_add_flag(mats)
  302.           if add_flag
  303.             @add_list.push($data_items[i])
  304.             i_add_switch_on(i)
  305.           end
  306.         end
  307.       end
  308.     end
  309.     for i in 1..WD_addshop_ini::W_mat.size
  310.       mats = WD_addshop_ini::W_mat[i]
  311.       if mats
  312.         if w_add_switch_on?(i) == false
  313.           add_flag = get_add_flag(mats)
  314.           if add_flag
  315.             @add_list.push($data_weapons[i])
  316.             w_add_switch_on(i)
  317.           end
  318.         end
  319.       end
  320.     end
  321.     for i in 1..WD_addshop_ini::A_mat.size
  322.       mats = WD_addshop_ini::A_mat[i]
  323.       if mats
  324.         if a_add_switch_on?(i) == false
  325.           add_flag = get_add_flag(mats)
  326.           if add_flag
  327.             @add_list.push($data_armors[i])
  328.             a_add_switch_on(i)
  329.           end
  330.         end
  331.       end
  332.     end
  333.     get_goods
  334.     @buy_window.set_add_goods(@goods)
  335.     @buy_window.refresh
  336.   end
  337.   #--------------------------------------------------------------------------
  338.   # ● 商品追加フラグの取得
  339.   #--------------------------------------------------------------------------
  340.   def get_add_flag(mats)
  341.     add_flag = true
  342.     for j in 0...mats.size
  343.       kind = mats[j][0]
  344.       id   = mats[j][1]
  345.       num  = mats[j][2]
  346.       if kind == "I"
  347.         item = $data_items[id]
  348.       elsif kind == "W"
  349.         item = $data_weapons[id]
  350.       elsif kind == "A"
  351.         item = $data_armors[id]
  352.       end
  353.       if item_sell_num(item) < num
  354.         add_flag = false
  355.       end
  356.     end
  357.     return add_flag
  358.   end
  359. end


  360. class Window_ShopBuy < Window_Selectable
  361.   #--------------------------------------------------------------------------
  362.   # ● 商品の設定
  363.   #--------------------------------------------------------------------------
  364.   def set_add_goods(goods)
  365.     @shop_goods = goods
  366.   end
  367. end

  368. #==============================================================================
  369. # ■ Window_ShopAdd
  370. #------------------------------------------------------------------------------
  371. #  追加商品を表示するウィンドウです。
  372. #==============================================================================

  373. class Window_ShopAdd < Window_Selectable
  374.   #--------------------------------------------------------------------------
  375.   # ● オブジェクト初期化
  376.   #--------------------------------------------------------------------------
  377.   def initialize
  378.     super(170, 200, 204, 72)
  379.     @item = nil
  380.     refresh
  381.     activate
  382.   end
  383.   #--------------------------------------------------------------------------
  384.   # ● アイテムの設定
  385.   #--------------------------------------------------------------------------
  386.   def item=(item)
  387.     return if @item == item
  388.     @item = item
  389.     refresh
  390.   end
  391.   #--------------------------------------------------------------------------
  392.   # ● リフレッシュ
  393.   #--------------------------------------------------------------------------
  394.   def refresh
  395.     contents.clear
  396.     change_color(system_color)
  397.     draw_text(0, 0, 180, line_height, "商品の追加")
  398.     if @item
  399.       draw_item_name(@item, 0, line_height, true)
  400.     end
  401.   end
  402.   #--------------------------------------------------------------------------
  403.   # ● 決定やキャンセルなどのハンドリング処理
  404.   #--------------------------------------------------------------------------
  405.   def process_handling
  406.     return unless open? && visible
  407.     return process_ok       if ok_enabled?        && Input.trigger?(:C)
  408.   end
  409.   #--------------------------------------------------------------------------
  410.   # ● 決定ボタンが押されたときの処理
  411.   #--------------------------------------------------------------------------
  412.   def process_ok
  413.     Sound.play_cursor
  414.     Input.update
  415.     deactivate
  416.     call_ok_handler
  417.   end
  418. end
复制代码
其实这可以用合成系统代替吧?

评分

参与人数 1梦石 +1 收起 理由
Sion + 1 认可答案

查看全部评分

梦想是成为触手的新手DE☆SU(<ゝω·)绮罗星 ~☆
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
4294
在线时间
32 小时
注册时间
2013-11-16
帖子
2
3
 楼主| 发表于 2014-5-4 22:16:21 | 只看该作者
sh0016 发表于 2014-5-4 07:09
原址:http://izumiwhite.web.fc2.com/rgss3/rgss3_005.html

这个脚本能实现以出售一定数量的素材会出现新 ...

也对哦,商店用合成系统来代替。谢谢帮忙。
青春恋爱,冒险闯关,黑暗致郁都来一份~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2024-9-25 09:33

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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