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

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: 美丽晨露
打印 上一主题 下一主题

[已经解决] 如何通过变量,改变商品的价格?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
865 小时
注册时间
2010-6-27
帖子
131
11
发表于 2013-3-19 14:17:56 | 只看该作者
美丽晨露 发表于 2013-3-19 14:08
这个我试过了
可是我是想用变量实现的

也一样的,那个百分比用变量代替就行了。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
253
在线时间
574 小时
注册时间
2006-8-25
帖子
969
12
发表于 2013-3-19 16:19:46 | 只看该作者
本帖最后由 jhhuang 于 2013-3-19 16:39 编辑
  1. $game_party.lose_gold(@number_window.number * (@item.price*(1-$game_variables[XX]/1000.0)).to_i)
复制代码
难道没人知道在编程里整数除整数是除不出小数的吗....

另外,还是熊叔那句
Window_ShopBuy
Window_ShopSell
之类的显示窗口也要把描绘价格的语句改一下。

另外...再另外:
当变量大于1000时,由于价格0折以下,会变成负的...建议变量大于1000的话,价格固定为0

  1. v = $game_variables[XX]
  2. i_price = v > 1000 ? 0 : (@item.price*(1-v/1000.0)).truncate
  3. $game_party.lose_gold(@number_window.number * i_price)
复制代码
PS:第二行自己选择
round
返回最接近 self 的整数。
truncate
舍弃小数点后面的部分。

评分

参与人数 2星屑 +10 梦石 +1 收起 理由
hcm + 1 认可答案
美丽晨露 + 10 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
20
星屑
1840
在线时间
6925 小时
注册时间
2012-12-14
帖子
11485

短篇十战斗者组别冠军开拓者贵宾短篇九勇士组亚军

13
 楼主| 发表于 2013-3-19 16:42:08 | 只看该作者
jhhuang 发表于 2013-3-19 16:19
难道没人知道在编程里整数除整数是除不出小数的吗....

另外,还是熊叔那句

十分感谢啊
效果可以了呀
再问一下,要怎么改Window_ShopBuy、Window_ShopSell的内容
我的脚本不在行
大家好,这里是晨露的说。请多多指教。
刚入门RM软件制作,请大家多多帮助我哦。
落雪君的欢乐像素教程,欢迎查阅。

回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
253
在线时间
574 小时
注册时间
2006-8-25
帖子
969
14
发表于 2013-3-19 16:46:54 | 只看该作者
本帖最后由 jhhuang 于 2013-3-19 16:55 编辑

Window_ShopBuy是购买窗口
  1.     self.contents.draw_text(x + 240, y, 88, 32, item.price.to_s, 2)
  2. 改成:
  3.     v = $game_variables[XX]
  4.     i_price = v > 1000 ? 0 : (item.price*(1-v/1000.0)).truncate
  5.     self.contents.draw_text(x + 240, y, 88, 32, i_price.to_s, 2)
复制代码
Window_ShopSell是卖出窗口,如果你只修改购买价格,卖出价格没有改变就不用改了.其实卖出价格不是在Window_ShopSell显示而是在数量窗口显示的....

购买物品时也会在数量窗口根据数量显示购买价格,所以数量窗口也需要修改显示问题.
Scene_Shop
  #--------------------------------------------------------------------------
  # ● 刷新画面 (购买窗口激活的情况下)
  #--------------------------------------------------------------------------
大概198行

  1.       # 窗口状态转向数值输入模式
  2.       @buy_window.active = false
  3.       @buy_window.visible = false
  4.       @number_window.set(@item, max, @item.price)
  5.       @number_window.active = true
  6.       @number_window.visible = true
  7. 改成:
  8.       # 窗口状态转向数值输入模式
  9.       @buy_window.active = false
  10.       @buy_window.visible = false
  11.       v = $game_variables[XX]
  12.       i_price = v > 1000 ? 0 : (item.price*(1-v/1000.0)).truncate
  13.       @number_window.set(@item, max, i_price)
  14.       @number_window.active = true
  15.       @number_window.visible = true
复制代码
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
253
在线时间
574 小时
注册时间
2006-8-25
帖子
969
15
发表于 2013-3-19 17:01:46 | 只看该作者
本帖最后由 jhhuang 于 2013-3-20 14:38 编辑

整合,直接插入main前解决所有问题
  1. module RPG
  2.   class Item
  3.     # 取得物品购买价格
  4.     def buy_price
  5.       # 若不想物品价格根据变量改变,请把下面一条语句前的#删掉
  6.       #return @price
  7.       # 根据此变量改变价格
  8.       v = $game_variables[1]
  9.       i_price = v > 1000 ? 0 : (@price*(1-v/1000.0)).truncate
  10.       return i_price
  11.     end
  12.   end
  13. end
  14. module RPG
  15.   class Weapon
  16.     # 取得武器购买价格
  17.     def buy_price
  18.       # 若不想武器价格根据变量改变,请把下面一条语句前的#删掉
  19.       #return @price
  20.       # 根据此变量改变价格
  21.       v = $game_variables[1]
  22.       i_price = v > 1000 ? 0 : (@price*(1-v/1000.0)).truncate
  23.       return i_price
  24.     end
  25.   end
  26. end
  27. module RPG
  28.   class Armor
  29.     # 取得防具购买价格
  30.     def buy_price
  31.       # 若不想防具价格根据变量改变,请把下面一条语句前的#删掉
  32.       #return @price
  33.       # 根据此变量改变价格
  34.       v = $game_variables[1]
  35.       i_price = v > 1000 ? 0 : (@price*(1-v/1000.0)).truncate
  36.       return i_price
  37.     end
  38.   end
  39. end


  40. #==============================================================================
  41. # ■ Window_ShopBuy
  42. #------------------------------------------------------------------------------
  43. #  商店画面、浏览显示可以购买的商品的窗口。
  44. #==============================================================================

  45. class Window_ShopBuy < Window_Selectable
  46.   #--------------------------------------------------------------------------
  47.   # ● 描绘项目
  48.   #     index : 项目编号
  49.   #--------------------------------------------------------------------------
  50.   def draw_item(index)
  51.     item = @data[index]
  52.     # 获取物品所持数
  53.     case item
  54.     when RPG::Item
  55.       number = $game_party.item_number(item.id)
  56.     when RPG::Weapon
  57.       number = $game_party.weapon_number(item.id)
  58.     when RPG::Armor
  59.       number = $game_party.armor_number(item.id)
  60.     end
  61.     # 价格在所持金以下、并且所持数不是 99 的情况下为普通文字颜色
  62.     # 除此之外的情况设置为无效文字色
  63.     if item.buy_price <= $game_party.gold and number < 99
  64.       self.contents.font.color = normal_color
  65.     else
  66.       self.contents.font.color = disabled_color
  67.     end
  68.     x = 4
  69.     y = index * 32
  70.     rect = Rect.new(x, y, self.width - 32, 32)
  71.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  72.     bitmap = RPG::Cache.icon(item.icon_name)
  73.     opacity = self.contents.font.color == normal_color ? 255 : 128
  74.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  75.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  76.     self.contents.draw_text(x + 240, y, 88, 32, item.buy_price.to_s, 2)
  77.   end
  78. end


  79. #==============================================================================
  80. # ■ Scene_Shop
  81. #------------------------------------------------------------------------------
  82. #  处理商店画面的类。
  83. #==============================================================================

  84. class Scene_Shop
  85.   #--------------------------------------------------------------------------
  86.   # ● 刷新画面 (购买窗口激活的情况下)
  87.   #--------------------------------------------------------------------------
  88.   def update_buy
  89.     # 设置状态窗口的物品
  90.     @status_window.item = @buy_window.item
  91.     # 按下 B 键的情况下
  92.     if Input.trigger?(Input::B)
  93.       # 演奏取消 SE
  94.       $game_system.se_play($data_system.cancel_se)
  95.       # 窗口状态转向初期模式
  96.       @command_window.active = true
  97.       @dummy_window.visible = true
  98.       @buy_window.active = false
  99.       @buy_window.visible = false
  100.       @status_window.visible = false
  101.       @status_window.item = nil
  102.       # 删除帮助文本
  103.       @help_window.set_text("")
  104.       return
  105.     end
  106.     # 按下 C 键的情况下
  107.     if Input.trigger?(Input::C)
  108.       # 获取物品
  109.       @item = @buy_window.item
  110.       # 物品无效的情况下、或者价格在所持金以上的情况下
  111.       if @item == nil or @item.buy_price > $game_party.gold
  112.         # 演奏冻结 SE
  113.         $game_system.se_play($data_system.buzzer_se)
  114.         return
  115.       end
  116.       # 获取物品所持数
  117.       case @item
  118.       when RPG::Item
  119.         number = $game_party.item_number(@item.id)
  120.       when RPG::Weapon
  121.         number = $game_party.weapon_number(@item.id)
  122.       when RPG::Armor
  123.         number = $game_party.armor_number(@item.id)
  124.       end
  125.       # 如果已经拥有了 99 个情况下
  126.       if number == 99
  127.         # 演奏冻结 SE
  128.         $game_system.se_play($data_system.buzzer_se)
  129.         return
  130.       end
  131.       # 演奏确定 SE
  132.       $game_system.se_play($data_system.decision_se)
  133.       # 计算可以最多购买的数量
  134.       max = @item.buy_price == 0 ? 99 : $game_party.gold / @item.buy_price
  135.       max = [max, 99 - number].min
  136.       # 窗口状态转向数值输入模式
  137.       @buy_window.active = false
  138.       @buy_window.visible = false
  139.       @number_window.set(@item, max, @item.buy_price)
  140.       @number_window.active = true
  141.       @number_window.visible = true
  142.     end
  143.   end
  144.   #--------------------------------------------------------------------------
  145.   # ● 刷新画面 (个数输入窗口激活的情况下)
  146.   #--------------------------------------------------------------------------
  147.   def update_number
  148.     # 按下 B 键的情况下
  149.     if Input.trigger?(Input::B)
  150.       # 演奏取消 SE
  151.       $game_system.se_play($data_system.cancel_se)
  152.       # 设置个数输入窗口为不活动·非可视状态
  153.       @number_window.active = false
  154.       @number_window.visible = false
  155.       # 命令窗口光标位置分支
  156.       case @command_window.index
  157.       when 0  # 购买
  158.         # 窗口状态转向购买模式
  159.         @buy_window.active = true
  160.         @buy_window.visible = true
  161.       when 1  # 卖出
  162.         # 窗口状态转向卖出模式
  163.         @sell_window.active = true
  164.         @sell_window.visible = true
  165.         @status_window.visible = false
  166.       end
  167.       return
  168.     end
  169.     # 按下 C 键的情况下
  170.     if Input.trigger?(Input::C)
  171.       # 演奏商店 SE
  172.       $game_system.se_play($data_system.shop_se)
  173.       # 设置个数输入窗口为不活动·非可视状态
  174.       @number_window.active = false
  175.       @number_window.visible = false
  176.       # 命令窗口光标位置分支
  177.       case @command_window.index
  178.       when 0  # 购买
  179.         # 购买处理
  180.         $game_party.lose_gold(@number_window.number * @item.buy_price)
  181.         case @item
  182.         when RPG::Item
  183.           $game_party.gain_item(@item.id, @number_window.number)
  184.         when RPG::Weapon
  185.           $game_party.gain_weapon(@item.id, @number_window.number)
  186.         when RPG::Armor
  187.           $game_party.gain_armor(@item.id, @number_window.number)
  188.         end
  189.         # 刷新各窗口
  190.         @gold_window.refresh
  191.         @buy_window.refresh
  192.         @status_window.refresh
  193.         # 窗口状态转向购买模式
  194.         @buy_window.active = true
  195.         @buy_window.visible = true
  196.       when 1  # 卖出
  197.         # 卖出处理
  198.         $game_party.gain_gold(@number_window.number * (@item.price / 2))
  199.         case @item
  200.         when RPG::Item
  201.           $game_party.lose_item(@item.id, @number_window.number)
  202.         when RPG::Weapon
  203.           $game_party.lose_weapon(@item.id, @number_window.number)
  204.         when RPG::Armor
  205.           $game_party.lose_armor(@item.id, @number_window.number)
  206.         end
  207.         # 刷新各窗口
  208.         @gold_window.refresh
  209.         @sell_window.refresh
  210.         @status_window.refresh
  211.         # 窗口状态转向卖出模式
  212.         @sell_window.active = true
  213.         @sell_window.visible = true
  214.         @status_window.visible = false
  215.       end
  216.       return
  217.     end
  218.   end
  219. end
复制代码

点评

可以了,十分感谢您  发表于 2013-3-20 14:55

评分

参与人数 1星屑 +10 收起 理由
美丽晨露 + 10 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
20
星屑
1840
在线时间
6925 小时
注册时间
2012-12-14
帖子
11485

短篇十战斗者组别冠军开拓者贵宾短篇九勇士组亚军

16
 楼主| 发表于 2013-3-20 13:30:14 | 只看该作者
jhhuang 发表于 2013-3-19 17:01
整合,直接插入main前解决所有问题

谢谢你啊
可是这个脚本填上之后就无法买卖武器防具了
会显示这行出错
if item.buy_price <= $game_party.gold and number < 99

这个能解决吗?

点评

重新复制试试,在LS的帖子修复了  发表于 2013-3-20 14:35
大家好,这里是晨露的说。请多多指教。
刚入门RM软件制作,请大家多多帮助我哦。
落雪君的欢乐像素教程,欢迎查阅。

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-4 06:18

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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