Project1
标题:
商店物品只得购买一次(2010-11-10更新,求纠错)
[打印本页]
作者:
discain
时间:
2010-11-10 15:29
标题:
商店物品只得购买一次(2010-11-10更新,求纠错)
本帖最后由 discain 于 2010-11-10 22:40 编辑
某些特殊物品,只能在商店购买获得,且只能买到一次,不采用事件,能不能用脚本解决。
感谢大家灵感找到了,最后还是用了备注,现在与大家分享一下
首先是在物品的备注里写上“唯一”两个字,然后插入以下脚本。
另外,此贴原本是求助贴,现在改成分享,不知道是不是要移版???
$Nor = []
#==============================================================================
# ■ Scene_Shop
#------------------------------------------------------------------------------
# 处理商店画面的类。
#==============================================================================
class Scene_Shop < Scene_Base
#--------------------------------------------------------------------------
# ● 更新买入选择
#--------------------------------------------------------------------------
def update_buy_selection
@status_window.item = @buy_window.item
if Input.trigger?(Input::B)
Sound.play_cancel
@command_window.active = true
@dummy_window.visible = true
@buy_window.active = false
@buy_window.visible = false
@status_window.visible = false
@status_window.item = nil
@help_window.set_text("")
return
end
if Input.trigger?(Input::C)
@item = @buy_window.item
number = $game_party.item_number(@item)
if @item.note.include?("唯一")
if @item == nil or @item.price > $game_party.gold or number == 1
Sound.play_buzzer
else
if $Nor[@item.id] == true
Sound.play_buzzer
else
Sound.play_decision
max = @item.price == 0 ? 1 : $game_party.gold / @item.price
max = [max, 1 - number].min
@buy_window.active = false
@buy_window.visible = false
@number_window.set(@item, max, @item.price)
@number_window.active = true
@number_window.visible = true
$Nor[@item.id] = true
end
end
else
if @item == nil or @item.price > $game_party.gold or number == 99
Sound.play_buzzer
else
Sound.play_decision
max = @item.price == 0 ? 99 : $game_party.gold / @item.price
max = [max, 99 - number].min
@buy_window.active = false
@buy_window.visible = false
@number_window.set(@item, max, @item.price)
@number_window.active = true
@number_window.visible = true
end
end
end
end
end
#==============================================================================
# ■ Window_ShopBuy
#------------------------------------------------------------------------------
# 商店画面、浏览显示可以购买的商品的窗口。
#==============================================================================
class Window_ShopBuy < Window_Selectable
#--------------------------------------------------------------------------
# ● 绘制商品
# index : 商品索引
#--------------------------------------------------------------------------
def draw_item(index)
item = @data[index]
number = $game_party.item_number(item)
if item.note.include?("唯一")
if $Nor[item.id] == true
enabled = false
else
enabled = (item.price <= $game_party.gold and number < 1)
end
else
enabled = (item.price <= $game_party.gold and number < 99)
end
rect = item_rect(index)
self.contents.clear_rect(rect)
draw_item_name(item, rect.x, rect.y, enabled)
rect.width -= 4
self.contents.draw_text(rect, item.price, 2)
end
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