Project1

标题: 商店物品只得购买一次(2010-11-10更新,求纠错) [打印本页]

作者: discain    时间: 2010-11-10 15:29
标题: 商店物品只得购买一次(2010-11-10更新,求纠错)
本帖最后由 discain 于 2010-11-10 22:40 编辑

某些特殊物品,只能在商店购买获得,且只能买到一次,不采用事件,能不能用脚本解决。
感谢大家灵感找到了,最后还是用了备注,现在与大家分享一下
首先是在物品的备注里写上“唯一”两个字,然后插入以下脚本。
另外,此贴原本是求助贴,现在改成分享,不知道是不是要移版???

  1. $Nor = []
  2. #==============================================================================
  3. # ■ Scene_Shop
  4. #------------------------------------------------------------------------------
  5. #  处理商店画面的类。
  6. #==============================================================================
  7. class Scene_Shop < Scene_Base
  8.   #--------------------------------------------------------------------------
  9.   # ● 更新买入选择
  10.   #--------------------------------------------------------------------------
  11.   def update_buy_selection
  12.     @status_window.item = @buy_window.item
  13.     if Input.trigger?(Input::B)
  14.       Sound.play_cancel
  15.       @command_window.active = true
  16.       @dummy_window.visible = true
  17.       @buy_window.active = false
  18.       @buy_window.visible = false
  19.       @status_window.visible = false
  20.       @status_window.item = nil
  21.       @help_window.set_text("")
  22.       return
  23.     end
  24.     if Input.trigger?(Input::C)
  25.       @item = @buy_window.item
  26.       number = $game_party.item_number(@item)
  27.       if @item.note.include?("唯一")
  28.         if @item == nil or @item.price > $game_party.gold or number == 1
  29.           Sound.play_buzzer
  30.         else
  31.           if $Nor[@item.id] == true
  32.             Sound.play_buzzer
  33.           else
  34.             Sound.play_decision
  35.             max = @item.price == 0 ? 1 : $game_party.gold / @item.price
  36.             max = [max, 1 - number].min
  37.             @buy_window.active = false
  38.             @buy_window.visible = false
  39.             @number_window.set(@item, max, @item.price)
  40.             @number_window.active = true
  41.             @number_window.visible = true
  42.             $Nor[@item.id] = true
  43.           end
  44.         end
  45.       else
  46.         if @item == nil or @item.price > $game_party.gold or number == 99
  47.           Sound.play_buzzer
  48.         else
  49.           Sound.play_decision
  50.           max = @item.price == 0 ? 99 : $game_party.gold / @item.price
  51.           max = [max, 99 - number].min
  52.           @buy_window.active = false
  53.           @buy_window.visible = false
  54.           @number_window.set(@item, max, @item.price)
  55.           @number_window.active = true
  56.           @number_window.visible = true
  57.         end
  58.       end
  59.     end
  60.   end
  61. end

  62. #==============================================================================
  63. # ■ Window_ShopBuy
  64. #------------------------------------------------------------------------------
  65. #  商店画面、浏览显示可以购买的商品的窗口。
  66. #==============================================================================
  67. class Window_ShopBuy < Window_Selectable
  68.   #--------------------------------------------------------------------------
  69.   # ● 绘制商品
  70.   #     index : 商品索引
  71.   #--------------------------------------------------------------------------
  72.   def draw_item(index)
  73.     item = @data[index]
  74.     number = $game_party.item_number(item)
  75.     if item.note.include?("唯一")
  76.       if $Nor[item.id] == true
  77.         enabled = false
  78.       else
  79.         enabled = (item.price <= $game_party.gold and number < 1)
  80.       end
  81.     else
  82.       enabled = (item.price <= $game_party.gold and number < 99)
  83.     end
  84.     rect = item_rect(index)
  85.     self.contents.clear_rect(rect)
  86.     draw_item_name(item, rect.x, rect.y, enabled)
  87.     rect.width -= 4
  88.     self.contents.draw_text(rect, item.price, 2)
  89.   end
  90. end
复制代码

作者: 柳之一    时间: 2010-11-10 16:06
使用开关或者直接建立一个配列
假设100到120是特殊物品段,购买后在配列记录id。
如果买的时候有此id,则拒绝购买,没有id买后push id到配列

作者: 巧克力猫咪    时间: 2010-11-10 18:07
像这样的小问题还是事件方便,因为脚本越多就表示会出现BUG的几率越大
作者: 捣蛋    时间: 2010-11-10 18:19
用事件的话怎么做呢?
比如说商店的A商品只能买1个.
作者: discain    时间: 2010-11-10 20:11
本帖最后由 discain 于 2010-11-10 20:28 编辑

谢谢大家,开关很麻烦,除非特殊物品不多,想想要是给每个物品设个独立开关会怎么样?其实用事件的方法也没想出来,不过只要控制拥有的数量就可以,比如如果已拥有一个该物品且该物品曾拥有过,则该物品不出现在商店里。
作者: Enfa    时间: 2010-11-10 20:21
提示: 作者被禁止或删除 内容自动屏蔽
作者: discain    时间: 2010-11-10 20:34
如果在物品的备注里标注,然后读取备注修改Scene_Shop等脚本,做一个条件分支是不是可以?
作者: discain    时间: 2010-11-10 20:47
本帖最后由 discain 于 2010-11-11 06:18 编辑

已经试验成功,谢谢大家。
呃一高兴连贴了,那啥,请大家无视一下。




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