Project1

标题: 如何通过变量,改变商品的价格? [打印本页]

作者: 美丽晨露    时间: 2013-3-18 20:07
标题: 如何通过变量,改变商品的价格?
本帖最后由 美丽晨露 于 2013-3-20 15:39 编辑

比如说:变量1=10+时,所有商品下降1%的价格
变量1=100+时,所有商品下降10%的价格

这样怎么做?

作者: 弗雷德    时间: 2013-3-18 20:46
Scene_Shop类
update_number
300行左右:
  1. # 购买处理
  2.         $game_party.lose_gold(@number_window.number * @item.price)
复制代码
改成
  1. # 购买处理
  2. $game_party.lose_gold(@number_window.number * @item.price*$game_variables[XX]/100)
复制代码
如果变量XX是110,那么价格就是1.1倍,如果是90就是0.9倍,另外
Window_ShopBuy
Window_ShopSell
之类的显示窗口也要把描绘价格的语句改一下。

作者: 美丽晨露    时间: 2013-3-18 20:58
弗雷德 发表于 2013-3-18 20:46
Scene_Shop类
update_number
300行左右:改成如果变量XX是110,那么价格就是1.1倍,如果是90就是0.9倍,另 ...

熊叔叔好像理解错了
变量1=10+时,所有商品下降1%的价格,就是原价格*99%
变量1=100+时,所有商品下降10%的价格。就是原价格*90%



作者: hys111111    时间: 2013-3-18 21:15
美丽晨露 发表于 2013-3-18 20:58
熊叔叔好像理解错了
变量1=10+时,所有商品下降1%的价格,就是原价格*99%
变量1=100+时,所有商品下降10% ...
  1. # 购买处理
  2. $game_party.lose_gold(@number_window.number * @item.price*(1-$game_variables[XX]/100).to_i)
复制代码
这样子才行,类似于一个“增长率问题”。
作者: 小和尚    时间: 2013-3-18 21:20
可以用事件= = 但是看了楼上的脚本大神... 感觉我好像很逊色的样子..
作者: 芯☆淡茹水    时间: 2013-3-19 00:34
    要么就改成这样:
  1. if $game_variables[1] > 10 and $game_variables[1] <= 100
  2.           a = 99 / 100
  3.         elsif $game_variables[1] > 100
  4.           a = 90 / 100
  5.         else
  6.           a = 1
  7.         end
  8.         $game_party.lose_gold(@number_window.number * @item.price * a)
复制代码

作者: 紫英晓狼1130    时间: 2013-3-19 06:12
是呀,脚本在上,事件退后…
作者: Zhangjiaxing1    时间: 2013-3-19 09:00
本帖最后由 hcm 于 2013-4-3 19:02 编辑

用商品价格变动就行了,main之前插入这段脚本。
  1. #==============================================================================
  2. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  3. #==============================================================================

  4. # ▼▲▼ XRXS36. ショップ・変動相場 ▼▲▼
  5. # by 和希成纳 、桜雅在土

  6. # 翻译:柳柳

  7. #command_物品定价(物品编号, 百分比)
  8. #command_防具定价(防具编号, 百分比)
  9. #command_武器定价(武器编号, 百分比)

  10. # ——————————————————————————————————————
  11. # 本脚本来自[url]www.66rpg.com[/url],如果你没有单独得到和希或桜雅的允许,最好不要转载。
  12. # 如需转载,也请保留此信息。
  13. # ——————————————————————————————————————

  14. #==============================================================================
  15. # ■ Interpreter
  16. #==============================================================================
  17. class Interpreter
  18.   #--------------------------------------------------------------------------
  19.   # ◇ 更改物品价格百分比
  20.   #--------------------------------------------------------------------------
  21.   def command_物品定价(id, percent)
  22.     $data_items[id].quotation_percent = percent
  23.   end
  24.   #--------------------------------------------------------------------------
  25.   # ◇ 更改武器价格百分比
  26.   #--------------------------------------------------------------------------
  27.   def command_武器定价(id, percent)
  28.     $data_weapons[id].quotation_percent = percent
  29.   end
  30.   #--------------------------------------------------------------------------
  31.   # ◇ 更改防具价格百分比
  32.   #--------------------------------------------------------------------------
  33.   def command_防具定价(id, percent)
  34.     $data_armors[id].quotation_percent = percent
  35.   end
  36. end

  37. # ——————————————————————————————————————
  38. # 本脚本来自[url]www.66rpg.com[/url],如果你没有单独得到和希或桜雅的允许,最好不要转载。
  39. # 如需转载,也请保留此信息。
  40. # ——————————————————————————————————————

  41. module RPG
  42.   #============================================================================
  43.   # ■ RPG::Item
  44.   #============================================================================
  45.   class Item
  46.     attr_accessor :quotation_percent
  47.     #--------------------------------------------------------------------------
  48.     # ● 数值更改
  49.     #--------------------------------------------------------------------------
  50.     def price
  51.       # 如果百分比未定义,则返回原价格
  52.       @quotation_percent = 100 if @quotation_percent.nil?
  53.       # 返回价格
  54.       return @price * @quotation_percent / 100
  55.     end
  56.   end
  57.   #============================================================================
  58.   # ■ RPG::Weapon
  59.   #============================================================================
  60.   class Weapon
  61.     attr_accessor :quotation_percent
  62.     #--------------------------------------------------------------------------
  63.     # ● 数值更改
  64.     #--------------------------------------------------------------------------
  65.     def price
  66.       # 如果百分比未定义,则返回原价格
  67.       @quotation_percent = 100 if @quotation_percent.nil?
  68.       # 返回价格
  69.       return @price * @quotation_percent / 100
  70.     end
  71.   end
  72.   #============================================================================
  73.   # ■ RPG::Armor
  74.   #============================================================================
  75.   class Armor
  76.     attr_accessor :quotation_percent
  77.     #--------------------------------------------------------------------------
  78.     # ● 値段
  79.     #--------------------------------------------------------------------------
  80.     def price
  81.       # 如果百分比未定义,则返回原价格
  82.       @quotation_percent = 100 if @quotation_percent.nil?
  83.       # 返回价格
  84.       return @price * @quotation_percent / 100
  85.     end
  86.   end
  87. end
  88. #==============================================================================
  89. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  90. #==============================================================================
复制代码

作者: Angeliclovewind    时间: 2013-3-19 09:21
丽璐你该不会是想做《莉娜的工作室:修特拉尔的炼金术士》那类的游戏吧?商品价格随季节或特殊事件变化的那种……
作者: 美丽晨露    时间: 2013-3-19 14:08
Zhangjiaxing1 发表于 2013-3-19 09:00
用商品价格变动就行了,main之前插入这段脚本。
#====================================================== ...

这个我试过了
可是我是想用变量实现的
作者: Zhangjiaxing1    时间: 2013-3-19 14:17
美丽晨露 发表于 2013-3-19 14:08
这个我试过了
可是我是想用变量实现的

也一样的,那个百分比用变量代替就行了。
作者: jhhuang    时间: 2013-3-19 16:19
本帖最后由 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
舍弃小数点后面的部分。


作者: 美丽晨露    时间: 2013-3-19 16:42
jhhuang 发表于 2013-3-19 16:19
难道没人知道在编程里整数除整数是除不出小数的吗....

另外,还是熊叔那句

十分感谢啊
效果可以了呀
再问一下,要怎么改Window_ShopBuy、Window_ShopSell的内容
我的脚本不在行
作者: jhhuang    时间: 2013-3-19 16:46
本帖最后由 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
复制代码

作者: jhhuang    时间: 2013-3-19 17:01
本帖最后由 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 13:30
jhhuang 发表于 2013-3-19 17:01
整合,直接插入main前解决所有问题

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

这个能解决吗?




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