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

Project1

 找回密码
 注册会员
搜索
查看: 5084|回复: 8

[推荐问答] 如何让商店判断是否购买了商品?

[复制链接]

Lv4.逐梦者

素材区好人

梦石
3
星屑
6762
在线时间
3460 小时
注册时间
2011-7-21
帖子
2254

极短24参与极短23参与极短22参与极短21参与

发表于 2015-7-1 12:34:00 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 无忧谷主幻 于 2015-7-1 18:43 编辑

类似囧魂那样的功能,根据是否买东西说出不同的话
1.jpg

点评

谷主看5楼脚本来了!  发表于 2015-7-1 13:35
突然想到了一个脚本的实现方法,谷主等下(不知道能不能做出来=-=)  发表于 2015-7-1 12:55

评分

参与人数 1星屑 +135 收起 理由
RyanBern + 135 设置为推荐问答+手动认可奖励

查看全部评分

Lv5.捕梦者

梦石
0
星屑
31842
在线时间
5079 小时
注册时间
2012-11-19
帖子
4877

开拓者

发表于 2015-7-1 20:11:38 | 显示全部楼层
本帖最后由 芯☆淡茹水 于 2015-7-1 21:05 编辑

所以,综合上面的建议和脚本,就形成了下面这个
  1. class Game_Temp
  2.   attr_accessor :bought
  3.   def bought_data
  4.     @data_items = $game_party.items.clone
  5.     @data_weapons = $game_party.weapons.clone
  6.     @data_armors = $game_party.armors.clone
  7.     @data_gold = $game_party.gold
  8.   end
  9.   def bought_judeg
  10.     @bought = (@data_items != $game_party.items or
  11.     @data_weapons != $game_party.weapons or
  12.     @data_armors != $game_party.armors or
  13.     @data_gold != $game_party.gold)
  14.   end
  15. end
  16. class Game_Party
  17.   attr_reader   :items, :weapons, :armors
  18. end
  19. class Scene_Shop
  20.   alias rb_main main
  21.   def main
  22.     $game_temp.bought_data
  23.     rb_main
  24.     $game_temp.bought_judeg
  25.   end
  26. end
复制代码
这样做只有在同一件物品的买入和卖出价设置成相同时,才有机会失效。

@RyanBern    @欧买歌  

点评

我这个兼容性难道不强吗=-=  发表于 2015-7-1 22:21
↓欧买歌,归根到底其实思路都差不多。只是这个的兼容性要强一点。  发表于 2015-7-1 21:12
e,我还在写作业=-=最近作业多不写到凌晨绝对写不完  发表于 2015-7-1 21:07
晕~,怎么老范低级错误,队伍类原本没有读取函数,已修改。用的RB脚本,用法和其一样。  发表于 2015-7-1 21:07
嗯,那么求用法  发表于 2015-7-1 21:04

评分

参与人数 2星屑 +240 收起 理由
无忧谷主幻 + 90 认可答案(补上)
RyanBern + 150 认可答案

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv4.逐梦者

【欧皇】

梦石
3
星屑
2031
在线时间
1004 小时
注册时间
2013-8-19
帖子
3486

开拓者

发表于 2015-7-1 12:50:41 | 显示全部楼层
商店购买前变量一个一个记录之前的物品数量(建议公共事件)
打开商店界面
判断现在的物品变量是否和以前一样
笨方法=-=很麻烦
要脚本等楼下大触
QQ:2223942063
Q群:365819625
贪吃方1.4
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1095
在线时间
381 小时
注册时间
2010-10-9
帖子
386

开拓者

发表于 2015-7-1 12:50:59 | 显示全部楼层
店里有没有白送的好事?
如果没有的话,打开店之前记下金钱,关掉后再比比钱少没少?
不能排除买完又卖的情况。。。

点评

卖了2个石头,然后又买了一个石头,然后店主说不买别乱看。。。。  发表于 2015-7-1 13:36
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
431
在线时间
403 小时
注册时间
2014-9-6
帖子
1231
发表于 2015-7-1 13:18:05 | 显示全部楼层
如此这般这般如此
QQ截图20150701131509.png
主要来源于VIPArcherd的方法,加以改进。

点评

会说“谢谢惠顾”因为你付的钱比你卖出的钱要多嘛~  发表于 2015-7-1 13:39
那么卖了3个石头后买1个石头,店主会说什么?  发表于 2015-7-1 13:37
顺带一提变量比较可以调成以上然后对话对调~  发表于 2015-7-1 13:28
大家好,我今年24岁,是学生
回复 支持 反对

使用道具 举报

Lv4.逐梦者

【欧皇】

梦石
3
星屑
2031
在线时间
1004 小时
注册时间
2013-8-19
帖子
3486

开拓者

发表于 2015-7-1 13:31:57 | 显示全部楼层
本帖最后由 欧买歌 于 2015-7-1 20:12 编辑
1491968808 发表于 2015-7-1 13:18
如此这般这般如此

主要来源于VIPArcherd的方法,加以改进。
  1. class Scene_Shop
  2.   def update_number
  3.     # 按下 B 键的情况下
  4.     if Input.trigger?(Input::B)
  5.       # 演奏取消 SE
  6.       $game_system.se_play($data_system.cancel_se)
  7.       # 设置个数输入窗口为不活动·非可视状态
  8.       @number_window.active = false
  9.       @number_window.visible = false
  10.       # 命令窗口光标位置分支
  11.       case @command_window.index
  12.       when 0  # 购买
  13.         # 窗口状态转向购买模式
  14.         @buy_window.active = true
  15.         @buy_window.visible = true
  16.       when 1  # 卖出
  17.         # 窗口状态转向卖出模式
  18.         @sell_window.active = true
  19.         @sell_window.visible = true
  20.         @status_window.visible = false
  21.       end
  22.       return
  23.     end
  24.     # 按下 C 键的情况下
  25.     if Input.trigger?(Input::C)
  26.       $game_variables[444] = 1
  27.       # 演奏商店 SE
  28.       $game_system.se_play($data_system.shop_se)
  29.       # 设置个数输入窗口为不活动·非可视状态
  30.       @number_window.active = false
  31.       @number_window.visible = false
  32.       # 命令窗口光标位置分支
  33.       case @command_window.index
  34.       when 0  # 购买
  35.         # 购买处理
  36.         $game_party.lose_gold(@number_window.number * @item.price)
  37.         case @item
  38.         when RPG::Item
  39.           $game_party.gain_item(@item.id, @number_window.number)
  40.         when RPG::Weapon
  41.           $game_party.gain_weapon(@item.id, @number_window.number)
  42.         when RPG::Armor
  43.           $game_party.gain_armor(@item.id, @number_window.number)
  44.         end
  45.         # 刷新各窗口
  46.         @gold_window.refresh
  47.         @buy_window.refresh
  48.         @status_window.refresh
  49.         # 窗口状态转向购买模式
  50.         @buy_window.active = true
  51.         @buy_window.visible = true
  52.       when 1  # 卖出
  53.         # 卖出处理
  54.         $game_party.gain_gold(@number_window.number * (@item.price / 2))
  55.         case @item
  56.         when RPG::Item
  57.           $game_party.lose_item(@item.id, @number_window.number)
  58.         when RPG::Weapon
  59.           $game_party.lose_weapon(@item.id, @number_window.number)
  60.         when RPG::Armor
  61.           $game_party.lose_armor(@item.id, @number_window.number)
  62.         end
  63.         # 刷新各窗口
  64.         @gold_window.refresh
  65.         @sell_window.refresh
  66.         @status_window.refresh
  67.         # 窗口状态转向卖出模式
  68.         @sell_window.active = true
  69.         @sell_window.visible = true
  70.         @status_window.visible = false
  71.       end
  72.       return
  73.     end
  74.   end
  75. end
复制代码
然后
商店处理
条件分支:444变量是否等于1
呵呵
否则
额呵呵
分支结束
变量444=0
----------------------------------------
我这个更准确,你那个玩家要是买一个东西然后再卖两个同样的东西就BUG(26行的变量自行更改)
原理:
首先我们开启商店
在成功购买的脚本最后加上一个变量=1
然后关掉商店窗口
进行条件分支
分支结束后又要让变量再次归零以便下次再用
@︶ㄣ牛排ぶ 结帖,我要好人卡,

点评

已编辑,当时匆匆就发布了没看清楚  发表于 2015-7-1 20:12
谢谢提出,但貌似改个位置就可以了......  发表于 2015-7-1 19:34
另一个测试了一下,貌似这个BUG也解决了,已经更换  发表于 2015-7-1 18:42
好吧,这个没注意  发表于 2015-7-1 18:37
不可能不出BUG。你要先点击一个物品(钱够的情况下),然后商店会继续让你输入购买数量,这个时候按esc取消,就会出问题。  发表于 2015-7-1 16:05

评分

参与人数 2星屑 +195 收起 理由
RyanBern + 150 认可答案
无忧谷主幻 + 45 士别三日,当刮目相看

查看全部评分

QQ:2223942063
Q群:365819625
贪吃方1.4
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
431
在线时间
403 小时
注册时间
2014-9-6
帖子
1231
发表于 2015-7-1 13:40:50 | 显示全部楼层
欧买歌 发表于 2015-7-1 13:31
然后
商店处理
条件分支:444变量是否等于1

很好我这里还有一个方法,来自RB
  1. class Game_Temp
  2.   attr_accessor :bought
  3.   alias rb_initialize initialize
  4.   def initialize
  5.     @bought = false
  6.     rb_initialize
  7.   end
  8. end
  9. class Scene_Shop
  10.   alias rb_main main
  11.   def main
  12.     $game_temp.bought = false
  13.     rb_main
  14.   end
  15.   def update_sell
  16.     # 按下 B 键的情况下
  17.     if Input.trigger?(Input::B)
  18.       # 演奏取消 SE
  19.       $game_system.se_play($data_system.cancel_se)
  20.       # 窗口状态转向初期模式
  21.       @command_window.active = true
  22.       @dummy_window.visible = true
  23.       @sell_window.active = false
  24.       @sell_window.visible = false
  25.       @status_window.item = nil
  26.       # 删除帮助文本
  27.       @help_window.set_text("")
  28.       return
  29.     end
  30.     # 按下 C 键的情况下
  31.     if Input.trigger?(Input::C)
  32.       # 获取物品
  33.       @item = @sell_window.item
  34.       # 设置状态窗口的物品
  35.       @status_window.item = @item
  36.       # 物品无效的情况下、或者价格为 0 (不能卖出) 的情况下
  37.       if @item == nil or @item.price == 0
  38.         # 演奏冻结 SE
  39.         $game_system.se_play($data_system.buzzer_se)
  40.         return
  41.       end
  42.       # 演奏确定 SE
  43.       $game_system.se_play($data_system.decision_se)
  44.       # 获取物品的所持数
  45.       case @item
  46.       when RPG::Item
  47.         number = $game_party.item_number(@item.id)
  48.       when RPG::Weapon
  49.         number = $game_party.weapon_number(@item.id)
  50.       when RPG::Armor
  51.         number = $game_party.armor_number(@item.id)
  52.       end
  53.       # 最大卖出个数 = 物品的所持数
  54.       max = number
  55.       # 窗口状态转向个数输入模式
  56.       @sell_window.active = false
  57.       @sell_window.visible = false
  58.       @number_window.set(@item, max, @item.price / 2)
  59.       @number_window.active = true
  60.       @number_window.visible = true
  61.       @status_window.visible = true
  62.     end
  63.   end
  64.   #--------------------------------------------------------------------------
  65.   # ● 刷新画面 (个数输入窗口激活的情况下)
  66.   #--------------------------------------------------------------------------
  67.   def update_number
  68.     # 按下 B 键的情况下
  69.     if Input.trigger?(Input::B)
  70.       # 演奏取消 SE
  71.       $game_system.se_play($data_system.cancel_se)
  72.       # 设置个数输入窗口为不活动·非可视状态
  73.       @number_window.active = false
  74.       @number_window.visible = false
  75.       # 命令窗口光标位置分支
  76.       case @command_window.index
  77.       when 0  # 购买
  78.         # 窗口状态转向购买模式
  79.         @buy_window.active = true
  80.         @buy_window.visible = true
  81.       when 1  # 卖出
  82.         # 窗口状态转向卖出模式
  83.         @sell_window.active = true
  84.         @sell_window.visible = true
  85.         @status_window.visible = false
  86.       end
  87.       return
  88.     end
  89.     # 按下 C 键的情况下
  90.     if Input.trigger?(Input::C)
  91.       # 演奏商店 SE
  92.       $game_system.se_play($data_system.shop_se)
  93.       # 设置个数输入窗口为不活动·非可视状态
  94.       @number_window.active = false
  95.       @number_window.visible = false
  96.       # 命令窗口光标位置分支
  97.       case @command_window.index
  98.       when 0  # 购买
  99.         # 设置购买标志
  100.         $game_temp.bought = true
  101.         # 购买处理
  102.         $game_party.lose_gold(@number_window.number * @item.price)
  103.         case @item
  104.         when RPG::Item
  105.           $game_party.gain_item(@item.id, @number_window.number)
  106.         when RPG::Weapon
  107.           $game_party.gain_weapon(@item.id, @number_window.number)
  108.         when RPG::Armor
  109.           $game_party.gain_armor(@item.id, @number_window.number)
  110.         end
  111.         # 刷新各窗口
  112.         @gold_window.refresh
  113.         @buy_window.refresh
  114.         @status_window.refresh
  115.         # 窗口状态转向购买模式
  116.         @buy_window.active = true
  117.         @buy_window.visible = true
  118.       when 1  # 卖出
  119.         # 卖出处理
  120.         $game_party.gain_gold(@number_window.number * (@item.price / 2))
  121.         case @item
  122.         when RPG::Item
  123.           $game_party.lose_item(@item.id, @number_window.number)
  124.         when RPG::Weapon
  125.           $game_party.lose_weapon(@item.id, @number_window.number)
  126.         when RPG::Armor
  127.           $game_party.lose_armor(@item.id, @number_window.number)
  128.         end
  129.         # 刷新各窗口
  130.         @gold_window.refresh
  131.         @sell_window.refresh
  132.         @status_window.refresh
  133.         # 窗口状态转向卖出模式
  134.         @sell_window.active = true
  135.         @sell_window.visible = true
  136.         @status_window.visible = false
  137.       end
  138.       return
  139.     end
  140.   end
  141. end
复制代码
然后使用事件的时候,可以进行条件分歧。
条件分歧:脚本:$game_temp.bought
   "谢谢惠顾"
以外的情况
   "不买东西还来干啥"
分歧结束

点评

胡说我先发的第一个方法  发表于 2015-7-1 13:48
而且我那个脚本只有59行你的有142行  发表于 2015-7-1 13:48
额,还不是差不多.....但是我先的=-=  发表于 2015-7-1 13:47

评分

参与人数 2星屑 +195 收起 理由
RyanBern + 150 认可答案
无忧谷主幻 + 45 那么也辛苦了

查看全部评分

大家好,我今年24岁,是学生
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
76
在线时间
1379 小时
注册时间
2012-7-5
帖子
1698

开拓者

发表于 2015-7-1 17:53:50 | 显示全部楼层
2015-07-01_175244.png
所以我把囧魂里的设置姿势发上来, 寿司大大不要打我

点评

噢,谢谢!  发表于 2015-7-2 14:02
↓ 用FSCapture  发表于 2015-7-2 11:43
这么长的事件是怎么截图的呢?  发表于 2015-7-2 09:42

  -fk: -azogi:
回复 支持 1 反对 0

使用道具 举报

Lv4.逐梦者

素材区好人

梦石
3
星屑
6762
在线时间
3460 小时
注册时间
2011-7-21
帖子
2254

极短24参与极短23参与极短22参与极短21参与

 楼主| 发表于 2015-7-1 20:40:41 | 显示全部楼层
那么问题就来了,谁能告诉我用哪个好一些?

点评

LS刚刚手抖,少写了点东西,已改。  发表于 2015-7-1 20:49
所以大家都抢着回答  发表于 2015-7-1 20:48
XPVA提问区都是很火的,因为可以快速得经验  发表于 2015-7-1 20:43
=-=都可以用  发表于 2015-7-1 20:42
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-18 20:00

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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