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

Project1

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

[已经解决] 请问有没有一次性商店的脚本

[复制链接]

Lv2.观梦者

梦石
0
星屑
837
在线时间
61 小时
注册时间
2017-10-24
帖子
31
跳转到指定楼层
1
发表于 2017-12-19 18:59:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
具体是这样的,我希望能够在游戏里做一个成就,那就是把某一个商人的所有商品都买过一个遍。为了达到这样的效果,我希望有一个商店(应该在有些游戏里也能够见到,比如说《茶杯头大冒险》),就是一个商人会出售很多商品,但是每出售完一个,这个商品就会显示“卖完(Sold Out)”,这样的话等到所有的物品都显示“已售罄”以后,就可以获得这个成就。
当然,我知道这个效果可以通过纯事件来制作,只要用开关和条件分支就可以做这种类型的商店事件,不过我还是想通过商店界面来实现这种功能,而不是游戏体验比较差的纯事件方式。
所以,请问一下有没有这种一次性商店的脚本,最好是能够设置成二周目有办法重置商品的。
P.S.之前看过一个真实商店脚本,好像可以实现我所说的功能,但是那个脚本是RMXP的,并不是RMVA的。

Lv4.逐梦者

梦石
0
星屑
6260
在线时间
1481 小时
注册时间
2015-7-25
帖子
652

开拓者

2
发表于 2017-12-19 22:04:54 | 只看该作者
打开SHOP作为ID的开关,进入一次性商店,商品设置事件照常不变,当全部卖完后10号开关会自动打开(这个时候就是你设置获得成就的时候了)
.....(什么二周目重置之类的懒得写了....)

RUBY 代码复制
  1. SHOP = 1
  2. class Scene_Shop
  3.   alias obo on_buy_ok
  4.   def on_buy_ok
  5.     if $game_switches[SHOP]
  6.       @item = @buy_window.item
  7.       do_buy(1) if !$game_switches[@item.id+1000]
  8.       $game_variables[9999] += 1 if !$game_switches[@item.id+1000]
  9.       $game_switches[@item.id+1000] = true
  10.       @gold_window.refresh
  11.       @status_window.refresh
  12.       activate_buy_window
  13.     else
  14.       obo
  15.     end
  16.   end
  17. end
  18. class Window_ShopBuy
  19.   alias di draw_item
  20.   def draw_item(index)
  21.     if $game_switches[SHOP]
  22.       item = @data[index]
  23.       if $game_switches[item.id+1000]
  24.         rect = item_rect(index)
  25.         draw_text(rect, "-------已售完-------", 1)
  26.         if $game_variables[9999] == item_max
  27.           $game_switches[10] = true
  28.         end
  29.       else
  30.         di(index)
  31.       end
  32.     else
  33.       di(index)
  34.     end
  35.   end
  36. end
笨肉包的首款像素OC游戏《花城梦之心》尝试制作中~
目前的坑 【不可思议的迷宫】幽灵契约外传:歌莉娅
持续更新中~ 当前进度 v0.28
大版本更新时才会更新网盘文件,预计下次大版本更新:v0.30
完成度:
主线 15% 支线 0% 数据库 6% 系统 86% 美术 6%
两边同时填坑~
( 这里是笨肉包~专修魔法!目标是大魔法师!
( 坑太大啦,一个人填不完啦hhh 一定会填完的嗯...
( 每天都和bug们比试魔力~吾之魔法将扫平一切!
( 弱点是美术,魔法修行之余再补补课吧~
( 哼哼哼~这便是魔法的力量!
大家都离开啦,笨肉包也不知道还能坚持多久呀...
这是属于笨肉包一个人的旅行(再见了...蚊子湯,七重酱,笨肉包永远想你们!TwT
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
837
在线时间
61 小时
注册时间
2017-10-24
帖子
31
3
 楼主| 发表于 2017-12-20 09:44:03 | 只看该作者
魔法丶小肉包 发表于 2017-12-19 22:04
打开SHOP作为ID的开关,进入一次性商店,商品设置事件照常不变,当全部卖完后10号开关会自动打开(这个时候 ...

非常感谢,可以达到我想要的效果!
不过,的确是没有办法重置商店……如果能把这个解决就更完美了。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6260
在线时间
1481 小时
注册时间
2015-7-25
帖子
652

开拓者

4
发表于 2017-12-20 11:23:41 | 只看该作者
雨落忧伤 发表于 2017-12-20 09:44
非常感谢,可以达到我想要的效果!
不过,的确是没有办法重置商店……如果能把这个解决就更完美 ...

帮你把重置功能加上了,打开RE作为ID的开关,然后马上关掉这个开关(关闭之前不要让玩家有机会进入一次性商店买东西),重置完毕

RUBY 代码复制
  1. SHOP = 1
  2. RE = 2
  3. class Scene_Map
  4.   alias up update
  5.   def update
  6.     up
  7.     $game_switches[10] = false if $game_switches[RE]
  8.     if $game_switches[RE]
  9.         i = 0
  10.          loop do
  11.            $game_switches[i+1000] = false
  12.            i += 1
  13.            break if i == 1000
  14.          end
  15.          $game_variables[9999] = 0
  16.     end
  17.   end
  18. end
  19. class Scene_Shop
  20.   alias obo on_buy_ok
  21.   def on_buy_ok
  22.     if $game_switches[SHOP]
  23.       @item = @buy_window.item
  24.       do_buy(1) if !$game_switches[@item.id+1000]
  25.       $game_variables[9999] += 1 if !$game_switches[@item.id+1000]
  26.       $game_switches[@item.id+1000] = true
  27.       @gold_window.refresh
  28.       @status_window.refresh
  29.       activate_buy_window
  30.     else
  31.       obo
  32.     end
  33.   end
  34. end
  35. class Window_ShopBuy
  36.   alias di draw_item
  37.   def draw_item(index)
  38.     if $game_switches[SHOP]
  39.       item = @data[index]
  40.       if $game_switches[item.id+1000]
  41.         rect = item_rect(index)
  42.         draw_text(rect, "-------已售完-------", 1)
  43.         if $game_variables[9999] == item_max
  44.           $game_switches[10] = true
  45.         end
  46.       else
  47.         di(index)
  48.       end
  49.     else
  50.       di(index)
  51.     end
  52.   end
  53. end

点评

非常满意!非常感谢!  发表于 2017-12-20 13:56
笨肉包的首款像素OC游戏《花城梦之心》尝试制作中~
目前的坑 【不可思议的迷宫】幽灵契约外传:歌莉娅
持续更新中~ 当前进度 v0.28
大版本更新时才会更新网盘文件,预计下次大版本更新:v0.30
完成度:
主线 15% 支线 0% 数据库 6% 系统 86% 美术 6%
两边同时填坑~
( 这里是笨肉包~专修魔法!目标是大魔法师!
( 坑太大啦,一个人填不完啦hhh 一定会填完的嗯...
( 每天都和bug们比试魔力~吾之魔法将扫平一切!
( 弱点是美术,魔法修行之余再补补课吧~
( 哼哼哼~这便是魔法的力量!
大家都离开啦,笨肉包也不知道还能坚持多久呀...
这是属于笨肉包一个人的旅行(再见了...蚊子湯,七重酱,笨肉包永远想你们!TwT
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
837
在线时间
61 小时
注册时间
2017-10-24
帖子
31
5
 楼主| 发表于 2017-12-23 20:16:58 | 只看该作者
魔法丶小肉包 发表于 2017-12-20 11:23
帮你把重置功能加上了,打开RE作为ID的开关,然后马上关掉这个开关(关闭之前不要让玩家有机会进入一次性 ...

对了,今天重新测试的时候发现了一个问题。
因为考虑在游戏里加入商店进阶(也就是游戏流程越往后商品越多),然后如果是我先开了一个商店,然后再开一个商店,新开的商店增加新的商品的话,新的商品是“已售完”的状态……
不知道可不可以解决一下。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6260
在线时间
1481 小时
注册时间
2015-7-25
帖子
652

开拓者

6
发表于 2017-12-24 00:55:19 | 只看该作者
雨落忧伤 发表于 2017-12-23 20:16
对了,今天重新测试的时候发现了一个问题。
因为考虑在游戏里加入商店进阶(也就是游戏流程越往后商品越 ...

需要设置的地方
1.准备设多少一次性商店就在MAXSHOP写多少
2.$mshop这里需要设置,格式 [商店所在的地图ID,商店的事件ID] => 商店编号,
看例子
$mshop = {
[1,5] => 1,
[1,2] => 2

}
[1,5] => 1 #1号地图ID为5的事件是1号商店
[1,2] => 2 #1号地图ID为2的事件是2号商店
3.商店事件前请加上事件脚本$eid = get_character(0).id
4.打开名为SHOP的开关
5.其他照常
这个版本开始,每个一次性商店商品都是独立的,当然一个商店同一个物品还是只能买一次,买完了可以换商店再买
6.好困,我去睡觉了...

RUBY 代码复制
  1. SHOP = 1
  2. RE = 2
  3. MAXSHOP = 2
  4. $mshop = {}
  5. $mshop = {
  6. [1,5] => 1,
  7. [1,2] => 2
  8.  
  9. }
  10. class Scene_Map
  11.   alias up update
  12.   def update
  13.     up
  14.     $game_switches[10] = false if $game_switches[RE]
  15.     if $game_switches[RE]
  16.         i = 0
  17.          loop do
  18.            $game_switches[i+1000] = false
  19.            i += 1
  20.            break if i == 1000
  21.          end
  22.          $game_variables[9999] = 0
  23.     end
  24.   end
  25. end
  26. class Scene_Shop
  27.   alias mst start
  28.   def start
  29.     mst
  30.     if $game_switches[SHOP]
  31.       $msaveshop ||= Array.new(MAXSHOP)
  32.       p $msaveshop
  33.       if $msaveshop.include?(nil)
  34.       a ||= 0
  35.       loop do
  36.         $msaveshop[a] = []
  37.         a += 1
  38.         break if a == MAXSHOP
  39.       end
  40.       end
  41.       re_shop
  42.       load_shop
  43.     end
  44.   end
  45.   def terminate
  46.     super
  47.     save_shop
  48.   end
  49.   def save_shop
  50.     i = 0
  51.     loop do
  52.     $msaveshop[$mshop[[$game_map.map_id,$eid]]-1][i] = $game_switches[i+1000]
  53.     i += 1
  54.     break if i == 1000
  55.     end
  56.   end
  57.   def re_shop
  58.     i = 0
  59.     loop do
  60.       $game_switches[i+1000] = false
  61.       i += 1
  62.       break if i == 1000
  63.     end
  64.     $game_variables[9999] = 0
  65.   end
  66.   def load_shop
  67.     i = 0
  68.     loop do
  69.       $game_switches[i+1000] = $msaveshop[$mshop[[$game_map.map_id,$eid]]-1][i] if $msaveshop[$mshop[[$game_map.map_id,$eid]]-1]
  70.       i += 1
  71.       break if i == 1000
  72.     end
  73.   end
  74.   alias obo on_buy_ok
  75.   def on_buy_ok
  76.     if $game_switches[SHOP]
  77.       @item = @buy_window.item
  78.       do_buy(1) if !$game_switches[@item.id+1000]
  79.       $game_variables[9999] += 1 if !$game_switches[@item.id+1000]
  80.       $game_switches[@item.id+1000] = true
  81.       @gold_window.refresh
  82.       @status_window.refresh
  83.       activate_buy_window
  84.     else
  85.       obo
  86.     end
  87.   end
  88. end
  89. class Window_ShopBuy
  90.   alias di draw_item
  91.   def draw_item(index)
  92.     if $game_switches[SHOP]
  93.       item = @data[index]
  94.       if $game_switches[item.id+1000]
  95.         rect = item_rect(index)
  96.         draw_text(rect, "-------已售完-------", 1)
  97.         if $game_variables[9999] == item_max
  98.           $game_switches[10] = true
  99.         end
  100.       else
  101.         di(index)
  102.       end
  103.     else
  104.       di(index)
  105.     end
  106.   end
  107. end
笨肉包的首款像素OC游戏《花城梦之心》尝试制作中~
目前的坑 【不可思议的迷宫】幽灵契约外传:歌莉娅
持续更新中~ 当前进度 v0.28
大版本更新时才会更新网盘文件,预计下次大版本更新:v0.30
完成度:
主线 15% 支线 0% 数据库 6% 系统 86% 美术 6%
两边同时填坑~
( 这里是笨肉包~专修魔法!目标是大魔法师!
( 坑太大啦,一个人填不完啦hhh 一定会填完的嗯...
( 每天都和bug们比试魔力~吾之魔法将扫平一切!
( 弱点是美术,魔法修行之余再补补课吧~
( 哼哼哼~这便是魔法的力量!
大家都离开啦,笨肉包也不知道还能坚持多久呀...
这是属于笨肉包一个人的旅行(再见了...蚊子湯,七重酱,笨肉包永远想你们!TwT
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 18:33

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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