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

Project1

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

[已经解决] 如何使物品价格突破999999?(在真实商店中)

 关闭 [复制链接]

Lv3.寻梦者 (版主)

  /) /)<

梦石
0
星屑
4212
在线时间
4890 小时
注册时间
2009-2-16
帖子
8434

开拓者短篇七成年组季军

跳转到指定楼层
1
发表于 2009-12-10 22:09:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
RT,想在真实商店中出售超过该价格的商品,如何实现?
真实商店脚本:
  1. #==============================================================================
  2. # 本脚本来自www.66rpg.com,转载和使用请保留此信息
  3. # 脚本名:真实商店,脚本作者:柳柳
  4. #==============================================================================
  5. #
  6. # 功能:
  7. #
  8. # 买进卖出的物品在商店有所体现,卖出后会在商店可买物品中出现,物品有数量限制
  9. # 商店可进货出货————总之就是模拟真实商店。
  10. #  
  11. # 这个脚本和原装商店并不冲突,两个商店可以并存。
  12. #
  13. # 使用方法:
  14. #
  15. # 1、在下面被井号框起来的中间部分,设置初期物品。格式如下:
  16. #    @goods[商店编号] = [ [种类,ID,可卖数量] ,  [种类,ID,可卖数量]......]
  17. #    其中种类,0为道具,1为武器,2为防具;ID是数据库编号
  18. #
  19. # 2、调用:$scene = Scene_Shop_Va.new(商店编号)  
  20. #    比如你可以直接测试$scene = Scene_Shop_Va.new(1),已经设置好了。
  21. #
  22. # 3、商店出货:$game_system.shop_change(商店编号,种类,ID,数量)
  23. #    如果是进货,把数量设置为负数即可
  24. #
  25. #==============================================================================
  26. # ■ Scene_Shop
  27. #------------------------------------------------------------------------------
  28. #  处理商店画面的类。
  29. #==============================================================================
  30. class Game_System
  31. attr_accessor :goods   
  32. alias vaule_shop_66RPG_initialize initialize
  33. def initialize
  34.    vaule_shop_66RPG_initialize
  35.    @goods = []
  36. ###########################################################################
  37.    # 初期的时候的商店物品,编号顺序:种类,ID,可卖数量
  38.    @goods[1] = [[0,1,15],[0,2,10],[1,2,3]]  
  39.    @goods[2] = [[0,3,8],[1,4,1],[1,2,1],[1,3,1],[1,4,1]]  
  40.    @goods[3] = [[0,5,2],[1,3,1],[1,2,3]]  
  41. ###########################################################################
  42. end
  43. def shop_change(shop,kind,id,delnumber)
  44.    dl = delnumber
  45.    for dt in $game_system.goods[shop]
  46.      if (dt[0]==kind) and (dt[1]==id)
  47.        dt[2] -= dl
  48.        dt[2] = [dt[2],99].min
  49.        if dt[2] == 0
  50.          $game_system.goods[shop].delete(dt)
  51.        end
  52.        return
  53.      end
  54.    end
  55.    $game_system.goods[shop].push([kind,id,-delnumber])
  56. end
  57. end

  58. class Scene_Shop_Va
  59. def initialize(shop_number)
  60.    # 当前商店编号
  61.    @shop_now = shop_number     
  62. end   
  63. #--------------------------------------------------------------------------
  64. # ● 主处理
  65. #--------------------------------------------------------------------------
  66. def main
  67.    # 生成帮助窗口
  68.    @help_window = Window_Help.new
  69.    # 生成指令窗口
  70.    @command_window = Window_ShopCommand.new
  71.    # 生成金钱窗口
  72.    @gold_window = Window_Gold.new
  73.    @gold_window.x = 480
  74.    @gold_window.y = 64
  75.    # 生成时间窗口
  76.    @dummy_window = Window_Base.new(0, 128, 640, 352)
  77.    # 生成购买窗口
  78.    @buy_window = Window_ShopBuy_Va.new($game_system.goods[@shop_now])
  79.    @buy_window.active = false
  80.    @buy_window.visible = false
  81.    @buy_window.help_window = @help_window
  82.    # 生成卖出窗口
  83.    @sell_window = Window_ShopSell.new
  84.    @sell_window.active = false
  85.    @sell_window.visible = false
  86.    @sell_window.help_window = @help_window
  87.    # 生成数量输入窗口
  88.    @number_window = Window_ShopNumber.new
  89.    @number_window.active = false
  90.    @number_window.visible = false
  91.    # 生成状态窗口
  92.    @status_window = Window_ShopStatus.new
  93.    @status_window.visible = false
  94.    # 执行过渡
  95.    Graphics.transition
  96.    # 主循环
  97.    loop do
  98.      # 刷新游戏画面
  99.      Graphics.update
  100.      # 刷新输入信息
  101.      Input.update
  102.      # 刷新画面
  103.      update
  104.      # 如果画面切换的话就中断循环
  105.      if $scene != self
  106.        break
  107.      end
  108.    end
  109.    # 准备过渡
  110.    Graphics.freeze
  111.    # 释放窗口
  112.    @help_window.dispose
  113.    @command_window.dispose
  114.    @gold_window.dispose
  115.    @dummy_window.dispose
  116.    @buy_window.dispose
  117.    @sell_window.dispose
  118.    @number_window.dispose
  119.    @status_window.dispose
  120. end
  121. #--------------------------------------------------------------------------
  122. # ● 刷新画面
  123. #--------------------------------------------------------------------------
  124. def update
  125.    # 刷新窗口
  126.    @help_window.update
  127.    @command_window.update
  128.    @gold_window.update
  129.    @dummy_window.update
  130.    @buy_window.update
  131.    @sell_window.update
  132.    @number_window.update
  133.    @status_window.update
  134.    # 指令窗口激活的情况下: 调用 update_command
  135.    if @command_window.active
  136.      update_command
  137.      return
  138.    end
  139.    # 购买窗口激活的情况下: 调用 update_buy
  140.    if @buy_window.active
  141.      update_buy
  142.      return
  143.    end
  144.    # 卖出窗口激活的情况下: 调用 update_sell
  145.    if @sell_window.active
  146.      update_sell
  147.      return
  148.    end
  149.    # 个数输入窗口激活的情况下: 调用 update_number
  150.    if @number_window.active
  151.      update_number
  152.      return
  153.    end
  154. end
  155. #--------------------------------------------------------------------------
  156. # ● 刷新画面 (指令窗口激活的情况下)
  157. #--------------------------------------------------------------------------
  158. def update_command
  159.    # 按下 B 键的情况下
  160.    if Input.trigger?(Input::B)
  161.      # 演奏取消 SE
  162.      $game_system.se_play($data_system.cancel_se)
  163.      # 切换到地图画面
  164.      $scene = Scene_Map.new
  165.      return
  166.    end
  167.    # 按下 C 键的情况下
  168.    if Input.trigger?(Input::C)
  169.      # 命令窗口光标位置分支
  170.      case @command_window.index
  171.      when 0  # 购买
  172.        # 演奏确定 SE
  173.        $game_system.se_play($data_system.decision_se)
  174.        # 窗口状态转向购买模式
  175.        @command_window.active = false
  176.        @dummy_window.visible = false
  177.        @buy_window.active = true
  178.        @buy_window.visible = true
  179.        @buy_window.refresh
  180.        @status_window.visible = true
  181.      when 1  # 卖出
  182.        # 演奏确定 SE
  183.        $game_system.se_play($data_system.decision_se)
  184.        # 窗口状态转向卖出模式
  185.        @command_window.active = false
  186.        @dummy_window.visible = false
  187.        @sell_window.active = true
  188.        @sell_window.visible = true
  189.        @sell_window.refresh
  190.      when 2  # 取消
  191.        # 演奏确定 SE
  192.        $game_system.se_play($data_system.decision_se)
  193.        # 切换到地图画面
  194.        $scene = Scene_Map.new
  195.      end
  196.      return
  197.    end
  198. end
  199. #--------------------------------------------------------------------------
  200. # ● 刷新画面 (购买窗口激活的情况下)
  201. #--------------------------------------------------------------------------
  202. def update_buy
  203.    # 设置状态窗口的物品
  204.    @status_window.item = @buy_window.item
  205.    # 按下 B 键的情况下
  206.    if Input.trigger?(Input::B)
  207.      # 演奏取消 SE
  208.      $game_system.se_play($data_system.cancel_se)
  209.      # 窗口状态转向初期模式
  210.      @command_window.active = true
  211.      @dummy_window.visible = true
  212.      @buy_window.active = false
  213.      @buy_window.visible = false
  214.      @status_window.visible = false
  215.      @status_window.item = nil
  216.      # 删除帮助文本
  217.      @help_window.set_text("")
  218.      return
  219.    end
  220.    # 按下 C 键的情况下
  221.    if Input.trigger?(Input::C)
  222.      # 获取物品
  223.      @item = @buy_window.item
  224.      # 物品无效的情况下、或者价格在所持金以上的情况下
  225.      if @item == nil or @item.price > $game_party.gold
  226.        # 演奏冻结 SE
  227.        $game_system.se_play($data_system.buzzer_se)
  228.        return
  229.      end
  230.      # 获取物品所持数
  231.      case @item
  232.      when RPG::Item
  233.        number = $game_party.item_number(@item.id)
  234.      when RPG::Weapon
  235.        number = $game_party.weapon_number(@item.id)
  236.      when RPG::Armor
  237.        number = $game_party.armor_number(@item.id)
  238.      end
  239.      # 如果已经拥有了 99 个情况下
  240.      if number == 99
  241.        # 演奏冻结 SE
  242.        $game_system.se_play($data_system.buzzer_se)
  243.        return
  244.      end
  245.      # 演奏确定 SE
  246.      $game_system.se_play($data_system.decision_se)
  247.      # 计算可以最多购买的数量
  248.      max = @item.price == 0 ? 99 : $game_party.gold / @item.price
  249.      max = [[max, 99 - number].min,@buy_window.item_number].min
  250.      # 窗口状态转向数值输入模式
  251.      @buy_window.active = false
  252.      @buy_window.visible = false
  253.      @number_window.set(@item, max, @item.price)
  254.      @number_window.active = true
  255.      @number_window.visible = true
  256.    end
  257. end
  258. #--------------------------------------------------------------------------
  259. # ● 画面更新 (卖出窗口激活的情况下)
  260. #--------------------------------------------------------------------------
  261. def update_sell
  262.    # 按下 B 键的情况下
  263.    if Input.trigger?(Input::B)
  264.      # 演奏取消 SE
  265.      $game_system.se_play($data_system.cancel_se)
  266.      # 窗口状态转向初期模式
  267.      @command_window.active = true
  268.      @dummy_window.visible = true
  269.      @sell_window.active = false
  270.      @sell_window.visible = false
  271.      @status_window.item = nil
  272.      # 删除帮助文本
  273.      @help_window.set_text("")
  274.      return
  275.    end
  276.    # 按下 C 键的情况下
  277.    if Input.trigger?(Input::C)
  278.      # 获取物品
  279.      @item = @sell_window.item
  280.      # 设置状态窗口的物品
  281.      @status_window.item = @item
  282.      # 物品无效的情况下、或者价格为 0 (不能卖出) 的情况下
  283.      if @item == nil or @item.price == 0
  284.        # 演奏冻结 SE
  285.        $game_system.se_play($data_system.buzzer_se)
  286.        return
  287.      end
  288.      # 演奏确定 SE
  289.      $game_system.se_play($data_system.decision_se)
  290.      # 获取物品的所持数
  291.      case @item
  292.      when RPG::Item
  293.        number = $game_party.item_number(@item.id)
  294.      when RPG::Weapon
  295.        number = $game_party.weapon_number(@item.id)
  296.      when RPG::Armor
  297.        number = $game_party.armor_number(@item.id)
  298.      end
  299.      # 最大卖出个数 = 物品的所持数
  300.      max = number
  301.      # 窗口状态转向个数输入模式
  302.      @sell_window.active = false
  303.      @sell_window.visible = false
  304.      @number_window.set(@item, max, @item.price / 2)
  305.      @number_window.active = true
  306.      @number_window.visible = true
  307.      @status_window.visible = true
  308.    end
  309. end
  310. #--------------------------------------------------------------------------
  311. # ● 刷新画面 (个数输入窗口激活的情况下)
  312. #--------------------------------------------------------------------------
  313. def update_number
  314.    # 按下 B 键的情况下
  315.    if Input.trigger?(Input::B)
  316.      # 演奏取消 SE
  317.      $game_system.se_play($data_system.cancel_se)
  318.      # 设置个数输入窗口为不活动·非可视状态
  319.      @number_window.active = false
  320.      @number_window.visible = false
  321.      # 命令窗口光标位置分支
  322.      case @command_window.index
  323.      when 0  # 购买
  324.        # 窗口状态转向购买模式
  325.        @buy_window.active = true
  326.        @buy_window.visible = true
  327.      when 1  # 卖出
  328.        # 窗口状态转向卖出模式
  329.        @sell_window.active = true
  330.        @sell_window.visible = true
  331.        @status_window.visible = false
  332.      end
  333.      return
  334.    end
  335.    # 按下 C 键的情况下
  336.    if Input.trigger?(Input::C)
  337.      # 演奏商店 SE
  338.      $game_system.se_play($data_system.shop_se)
  339.      # 设置个数输入窗口为不活动·非可视状态
  340.      @number_window.active = false
  341.      @number_window.visible = false
  342.      # 命令窗口光标位置分支
  343.      case @command_window.index
  344.      when 0  # 购买
  345.        # 购买处理
  346.        temp = 0
  347.        $game_party.lose_gold(@number_window.number * @item.price)
  348.        case @item
  349.        when RPG::Item
  350.          $game_party.gain_item(@item.id, @number_window.number)
  351.        when RPG::Weapon
  352.          $game_party.gain_weapon(@item.id, @number_window.number)
  353.          temp = 1
  354.        when RPG::Armor
  355.          $game_party.gain_armor(@item.id, @number_window.number)
  356.          temp = 2
  357.        end
  358.        goods_del(temp,@item.id,@number_window.number)
  359.        # 刷新各窗口
  360.        @buy_window = Window_ShopBuy_Va.new($game_system.goods[@shop_now])
  361.        @buy_window.help_window = @help_window
  362.        @gold_window.refresh
  363.        @buy_window.refresh
  364.        @status_window.refresh
  365.        # 窗口状态转向购买模式
  366.        @buy_window.active = true
  367.        @buy_window.visible = true
  368.      when 1  # 卖出
  369.        # 卖出处理
  370.        $game_party.gain_gold(@number_window.number * (@item.price / 2))
  371.        temp = 0
  372.        case @item
  373.        when RPG::Item
  374.          $game_party.lose_item(@item.id, @number_window.number)
  375.        when RPG::Weapon
  376.          $game_party.lose_weapon(@item.id, @number_window.number)
  377.          temp = 1
  378.        when RPG::Armor
  379.          $game_party.lose_armor(@item.id, @number_window.number)
  380.          temp = 2
  381.        end
  382.        # 刷新各窗口
  383.        goods_del(temp,@item.id,-@number_window.number)
  384.        @buy_window = Window_ShopBuy_Va.new($game_system.goods[@shop_now])
  385.        @buy_window.active = false
  386.        @buy_window.visible = false
  387.        @buy_window.help_window = @help_window
  388.        @gold_window.refresh
  389.        @sell_window.refresh
  390.        @status_window.refresh
  391.        # 窗口状态转向卖出模式
  392.        @sell_window.active = true
  393.        @sell_window.visible = true
  394.        @status_window.visible = false
  395.      end
  396.      return
  397.    end
  398. end
  399. # 删除可出售商品内容
  400. def goods_del(kind,id,delnumber)
  401.    dl = delnumber
  402.    for dt in $game_system.goods[@shop_now]
  403.      if (dt[0]==kind) and (dt[1]==id)
  404.        dt[2] -= dl
  405.        dt[2] = [dt[2],99].min
  406.        if dt[2] == 0
  407.          $game_system.goods[@shop_now].delete(dt)
  408.        end
  409.        return
  410.      end
  411.    end
  412.    $game_system.goods[@shop_now].push([kind,id,-delnumber])
  413. end
  414. end

  415. #==============================================================================
  416. # ■ Window_ShopBuy_Va
  417. #------------------------------------------------------------------------------
  418. #  商店画面、浏览显示可以购买的商品的窗口。
  419. #==============================================================================

  420. class Window_ShopBuy_Va < Window_Selectable
  421. attr_accessor :shop_goods
  422. #--------------------------------------------------------------------------
  423. # ● 初始化对像
  424. #     shop_goods : 商品
  425. #--------------------------------------------------------------------------
  426. def initialize(shop_goods)
  427.    super(0, 128, 368, 352)
  428.    @shop_goods = shop_goods
  429.    refresh
  430.    self.index = 0
  431. end
  432. #--------------------------------------------------------------------------
  433. # ● 获取物品
  434. #--------------------------------------------------------------------------
  435. def item
  436.    return @data[self.index]
  437. end
  438. #--------------------------------------------------------------------------
  439. # ● 获取物品
  440. #--------------------------------------------------------------------------
  441. def item_number
  442.    return @data_number[self.index]
  443. end
  444. #--------------------------------------------------------------------------
  445. # ● 刷新
  446. #--------------------------------------------------------------------------
  447. def refresh
  448.    if self.contents != nil
  449.      self.contents.dispose
  450.      self.contents = nil
  451.    end
  452.    @data = []
  453.    @data_number = []
  454.    for goods_item in @shop_goods
  455.      case goods_item[0]
  456.      when 0
  457.        item = $data_items[goods_item[1]]
  458.      when 1
  459.        item = $data_weapons[goods_item[1]]
  460.      when 2
  461.        item = $data_armors[goods_item[1]]
  462.      end
  463.      if (item != nil) and (goods_item[2] != 0)
  464.        @data.push(item)
  465.        @data_number.push(goods_item[2])
  466.      else
  467.        @data.delete(item)
  468.      end
  469.    end
  470.    # 如果项目数不是 0 就生成位图、描绘全部项目
  471.    @item_max = @data.size
  472.    if @item_max > 0
  473.      self.contents = Bitmap.new(width - 32, row_max * 32)
  474.      for i in 0...@item_max
  475.        draw_item(i)
  476.      end
  477.    end
  478. end
  479. #--------------------------------------------------------------------------
  480. # ● 描绘羡慕
  481. #     index : 项目编号
  482. #--------------------------------------------------------------------------
  483. def draw_item(index)
  484.    item = @data[index]
  485.    # 获取物品所持数
  486.    case item
  487.    when RPG::Item
  488.      number = $game_party.item_number(item.id)
  489.    when RPG::Weapon
  490.      number = $game_party.weapon_number(item.id)
  491.    when RPG::Armor
  492.      number = $game_party.armor_number(item.id)
  493.    end
  494.    # 价格在所持金以下、并且所持数不是 99 的情况下为普通文字颜色
  495.    # 除此之外的情况设置为无效文字色
  496.    if item.price <= $game_party.gold and number < 99
  497.      self.contents.font.color = normal_color
  498.    else
  499.      self.contents.font.color = disabled_color
  500.    end
  501.    x = 4
  502.    y = index * 32
  503.    rect = Rect.new(x, y, self.width - 32, 32)
  504.    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  505.    bitmap = RPG::Cache.icon(item.icon_name)
  506.    opacity = self.contents.font.color == normal_color ? 255 : 128
  507.    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  508.    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  509.    self.contents.draw_text(x + 240, y, 88, 32, "剩  ", 2)
  510.    self.contents.draw_text(x + 240, y, 88, 32, @data_number[index].to_s, 2)
  511.    self.contents.draw_text(x + 180, y, 88, 32, item.price.to_s, 2)
  512. end
  513. #--------------------------------------------------------------------------
  514. # ● 刷新帮助文本
  515. #--------------------------------------------------------------------------
  516. def update_help
  517.    @help_window.set_text(self.item == nil ? "" : self.item.description)
  518. end
  519. end




  520. #==============================================================================
  521. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  522. #==============================================================================
复制代码

Lv1.梦旅人

梦石
0
星屑
64
在线时间
4352 小时
注册时间
2007-8-31
帖子
1982
2
发表于 2009-12-10 22:25:12 | 只看该作者
  1. $data_items[1].price = 123456789
复制代码
表示1号物品价格为123456789
我真是王小二过年,一年不如一年。目前正在寻找状态中,努力找回当初的动力!
“底蕴制作者”—asperta最新博客开通!以后将在这里更新制作进度报告!
我的作品官网:http://www.asperta.org/
ASPERTA世界论坛:http://bbs.asperta.org/


回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

  /) /)<

梦石
0
星屑
4212
在线时间
4890 小时
注册时间
2009-2-16
帖子
8434

开拓者短篇七成年组季军

3
 楼主| 发表于 2009-12-10 22:42:13 | 只看该作者
$data_items[1].price = 123456789表示1号物品价格为123456789
asperta 发表于 2009-12-10 22:25

什么意思...
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
84
在线时间
156 小时
注册时间
2009-8-5
帖子
533
4
发表于 2009-12-11 00:01:11 | 只看该作者
$data_items[001].price = 11999999#items 是物品 001是1号物品ID price 物品的价格 11999999金
$data_armors[001].price =       #如上armors防具 001是1号防具ID
$data_weapons[ID].price =      #如上 weapons 武器
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
84
在线时间
156 小时
注册时间
2009-8-5
帖子
533
5
发表于 2009-12-12 00:34:14 | 只看该作者
放在事件脚本
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

  /) /)<

梦石
0
星屑
4212
在线时间
4890 小时
注册时间
2009-2-16
帖子
8434

开拓者短篇七成年组季军

6
 楼主| 发表于 2009-12-12 12:49:21 | 只看该作者
我试了 用在真实商店里不行..
(脚本:开商店
       $data_items[001].price = 11999999#items )
脚本错误
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6865
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

7
发表于 2009-12-12 12:58:06 | 只看该作者
$data_items[物品ID].price = 8888888888
$data_weapons[武器ID].price = 8888888888
$data_armors[防具ID].price = 8888888888

1就是1 不要写成001











你知道得太多了

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-26 22:44

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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