Project1

标题: 为什么我的商店是一次性的? [打印本页]

作者: 876加几    时间: 2014-2-5 21:59
标题: 为什么我的商店是一次性的?
本帖最后由 876加几 于 2014-2-5 22:02 编辑

我美化了下默认商店,可是商店只能使用1次了,第二次使用就会发生RGSS停用。
商店脚本:
  1. #==============================================================================
  2. # ■ Scene_Shop
  3. #------------------------------------------------------------------------------
  4. #  处理商店画面的类。
  5. #==============================================================================

  6. class Scene_Shop
  7.   #--------------------------------------------------------------------------
  8.   # ● 主处理
  9.   #--------------------------------------------------------------------------
  10.   def main
  11.     # 生成背景
  12.     @spriteset = Spriteset_Map.new
  13.     [url=home.php?mod=space&uid=8407]@black[/url] = Sprite.new
  14.     @black.bitmap = Bitmap.new(640, 480)
  15.     @black.bitmap.fill_rect(0, 0, 640, 480, Color.new(0, 0, 0, 192))
  16.     @black.z = 6000
  17.     # 生成帮助窗口
  18.     @help_window = Window_Help.new(640 - 160)
  19.     @help_window.y = 32
  20.     @help_window.x = 640
  21.     @help_window.z = 6100
  22.     # 生成指令窗口
  23.     @command_window = Window_Command.new(160, ["购买", "卖出", "取消"])
  24.     @command_window.x = 32
  25.     @command_window.y = 224
  26.     @command_window.active = false
  27.     @command_window.z = 6100
  28.     @command_window.index = -1
  29.     # 生成选择角色窗口
  30.     @select_window = Window_ShopActor.new
  31.     @select_window.active = true
  32.     @select_window.z = 6100
  33.     # 生成金钱窗口
  34.     @gold_window = Window_Gold.new
  35.     @gold_window.x = 32
  36.     @gold_window.y = 160
  37.     @gold_window.z = 6100
  38.     @select_window.help_window = @gold_window
  39.     # 生成金钱窗口
  40.     @gold_window2 = Window_ShopGold.new
  41.     @gold_window2.x = 640
  42.     @gold_window2.y = 480 - 96
  43.     @gold_window2.z = 6100
  44.     # 生成时间窗口
  45.     #@dummy_window = Window_Base.new(640, 64, 480, 352)
  46.     # 生成购买窗口
  47.     @buy_window = Window_ShopBuy.new($game_temp.shop_goods)
  48.     @buy_window.y = 96
  49.     @buy_window.active = false
  50.     @buy_window.visible = false
  51.     @buy_window.x = 640
  52.     @buy_window.z = 6100
  53.     @buy_window.help_window = @help_window
  54.     # 生成卖出窗口
  55.     @sell_window = Window_ShopSell.new
  56.     @sell_window.y = 96
  57.     @sell_window.active = false
  58.     @sell_window.visible = false
  59.     @sell_window.x = 640
  60.     @sell_window.z = 6100
  61.     @sell_window.help_window = @help_window
  62.     # 生成数量输入窗口
  63.     @number_window = Window_ShopNumber.new
  64.     @number_window.y = 96
  65.     @number_window.active = false
  66.     @number_window.visible = false
  67.     @number_window.x = 640
  68.     @number_window.z = 6100
  69.     # 生成状态窗口
  70.     @status_window = Window_ShopStatus.new
  71.     @status_window.y = 96
  72.     @status_window.visible = false
  73.     @status_window.x = 640 + 208
  74.     @status_window.z = 6100
  75.     # 执行过渡
  76.     Graphics.transition
  77.     # 主循环
  78.     loop do
  79.       # 刷新游戏画面
  80.       Graphics.update
  81.       # 刷新输入信息
  82.       Input.update
  83.       # 刷新画面
  84.       update
  85.       # 如果画面切换的话就中断循环
  86.       if $scene != self
  87.         break
  88.       end
  89.     end
  90.     # 准备过渡
  91.     Graphics.freeze
  92.     # 释放窗口
  93.     @help_window.dispose
  94.     @command_window.dispose
  95.     @gold_window.dispose
  96.     @gold_window2.dispose
  97.     #@dummy_window.dispose
  98.     @buy_window.dispose
  99.     @sell_window.dispose
  100.     @number_window.dispose
  101.     @status_window.dispose
  102.     @select_window.dispose
  103.     @black.bitmap.dispose
  104.     @black.dispose
  105.     $actor = nil
  106.     $select_actor = nil
  107.   end
  108.   #--------------------------------------------------------------------------
  109.   # ● 刷新画面
  110.   #--------------------------------------------------------------------------
  111.   def update
  112.     # 刷新窗口
  113.     @help_window.update
  114.     @command_window.update
  115.     @gold_window.update
  116.     @gold_window2.update
  117.     #@dummy_window.update
  118.     @buy_window.update
  119.     @sell_window.update
  120.     @number_window.update
  121.     @status_window.update
  122.     @select_window.update
  123.     # 角色选择窗口激活的情况下: 调用 update_command
  124.     if @select_window.active
  125.       update_select
  126.       return
  127.     end
  128.     # 指令窗口激活的情况下: 调用 update_command
  129.     if @command_window.active
  130.       update_command
  131.       return
  132.     end
  133.     # 购买窗口激活的情况下: 调用 update_buy
  134.     if @buy_window.active
  135.       update_buy
  136.       return
  137.     end
  138.     # 卖出窗口激活的情况下: 调用 update_sell
  139.     if @sell_window.active
  140.       update_sell
  141.       return
  142.     end
  143.     # 个数输入窗口激活的情况下: 调用 update_number
  144.     if @number_window.active
  145.       update_number
  146.       return
  147.     end
  148.   end
  149.   #--------------------------------------------------------------------------
  150.   # ● 刷新画面 (选择窗口激活的情况下)
  151.   #--------------------------------------------------------------------------
  152.   def update_select
  153.     if Input.trigger?(Input::B)
  154.       # 演奏取消 SE
  155.       $game_system.se_play($data_system.cancel_se)
  156.       # 切换到地图画面
  157.       $scene = Scene_Map.new
  158.       # 复原几率
  159.       for i in 1..4
  160.         actor = $game_actors[i]
  161.         actor.shop_buy_value = 100
  162.       end
  163.       return
  164.     end
  165.     if Input.trigger?(Input::C)
  166.       unless @select_window.disable_items.include?(@select_window.index)
  167.         # 演奏确定 SE
  168.         $game_system.se_play($data_system.decision_se)
  169.         # 设定值
  170.         $select_actor = @select_window.index
  171.         $actor = @select_window.index
  172.         # 设置窗口状态
  173.         @command_window.active = true
  174.         @command_window.index = 0
  175.         @command_window.refresh
  176.         @select_window.active = false
  177.         #@dummy_window.visible = true
  178.         return
  179.       end
  180.       # 演奏冻结 SE
  181.       $game_system.se_play($data_system.buzzer_se)
  182.       return
  183.     end
  184.   end
  185.   #--------------------------------------------------------------------------
  186.   # ● 刷新画面 (指令窗口激活的情况下)
  187.   #--------------------------------------------------------------------------
  188.   def update_command
  189.     # 按下 B 键的情况下
  190.     if Input.trigger?(Input::B)
  191.       # 演奏取消 SE
  192.       $game_system.se_play($data_system.cancel_se)
  193.       # 设置窗口状态
  194.       @command_window.active = false
  195.       @command_window.index = -1
  196.       #@dummy_window.visible = true
  197.       @select_window.active = true
  198.       @select_window.refresh
  199.       return
  200.     end
  201.     # 按下 C 键的情况下
  202.     if Input.trigger?(Input::C)
  203.       # 命令窗口光标位置分支
  204.       case @command_window.index
  205.       when 0  # 购买
  206.         # 演奏确定 SE
  207.         $game_system.se_play($data_system.decision_se)
  208.         # 窗口状态转向购买模式
  209.         app_buy_window
  210.       when 1  # 卖出
  211.         # 演奏确定 SE
  212.         $game_system.se_play($data_system.decision_se)
  213.         # 窗口状态转向卖出模式
  214.         app_sell_window
  215.       when 2  # 取消
  216.         # 演奏确定 SE
  217.         $game_system.se_play($data_system.decision_se)
  218.         # 设置窗口状态
  219.         @command_window.active = false
  220.         @command_window.index = -1
  221.         #@dummy_window.visible = true
  222.         @select_window.active = true
  223.         @select_window.visible = true
  224.         @select_window.refresh
  225.         @gold_window.empty
  226.       end
  227.       return
  228.     end
  229.   end
  230.   #--------------------------------------------------------------------------
  231.   # ● 刷新画面 (购买窗口激活的情况下)
  232.   #--------------------------------------------------------------------------
  233.   def update_buy
  234.     # 设置状态窗口的物品
  235.     @status_window.item = @buy_window.item
  236.     # 按下 B 键的情况下
  237.     if Input.trigger?(Input::B)
  238.       # 演奏取消 SE
  239.       $game_system.se_play($data_system.cancel_se)
  240.       # 窗口状态转向初期模式
  241.       del_buy_window
  242.       return
  243.     end
  244.     # 按下 C 键的情况下
  245.     if Input.trigger?(Input::C)
  246.       # 获取物品
  247.       @item = @buy_window.item
  248.       @item_price = @item.price * ($game_party.actors[$select_actor].buy_gold_value / 100.0).round
  249.       # 物品无效的情况下、或者价格在所持金以上的情况下
  250.       if @item == nil or @item_price > $game_party.actors[$select_actor].gold or @item.level_limit > $game_party.actors[$select_actor].level
  251.         # 演奏冻结 SE
  252.         $game_system.se_play($data_system.buzzer_se)
  253.         return
  254.       end
  255.       # 获取物品所持数
  256.       case @item
  257.       when RPG::Item
  258.         number = $game_party.item_number(@item.id)
  259.       when RPG::Weapon
  260.         number = $game_party.weapon_number(@item.id)
  261.       when RPG::Armor
  262.         number = $game_party.armor_number(@item.id)
  263.       end
  264.       # 如果已经拥有了 99 个情况下
  265.       if number == 99
  266.         # 演奏冻结 SE
  267.         $game_system.se_play($data_system.buzzer_se)
  268.         return
  269.       end
  270.       # 演奏确定 SE
  271.       $game_system.se_play($data_system.decision_se)
  272.       # 计算可以最多购买的数量
  273.       max = @item.price == 0 ? 99 : $game_party.actors[$select_actor].buy_gold_value == 0 ? 99 : $game_party.actors[$select_actor].gold / (@item.price * ($game_party.actors[$select_actor].buy_gold_value / 100.0).round)
  274.       max = [max, 99 - number].min
  275.       # 窗口状态转向数值输入模式
  276.       @buy_window.active = false
  277.       @buy_window.visible = false
  278.       @number_window.set(@item, max, @item_price, $game_party.actors[$select_actor])
  279.       @number_window.active = true
  280.       @number_window.visible = true
  281.       @status_window.visible = false
  282.     end
  283.   end
  284.   #--------------------------------------------------------------------------
  285.   # ● 画面更新 (卖出窗口激活的情况下)
  286.   #--------------------------------------------------------------------------
  287.   def update_sell
  288.     # 按下 B 键的情况下
  289.     if Input.trigger?(Input::B)
  290.       # 演奏取消 SE
  291.       $game_system.se_play($data_system.cancel_se)
  292.       # 窗口状态转向初期模式
  293.       del_sell_window
  294.       return
  295.     end
  296.     # 按下 C 键的情况下
  297.     if Input.trigger?(Input::C)
  298.       # 获取物品
  299.       @item = @sell_window.item
  300.       if @item != nil
  301.         @item_price = @item.price * ($game_party.actors[$select_actor].buy_gold_value / 100.0).round
  302.       end
  303.       # 设置状态窗口的物品
  304.       @status_window.item = @item
  305.       # 物品无效的情况下、或者价格为 0 (不能卖出) 的情况下
  306.       if @item == nil or @item.price == 0
  307.         # 演奏冻结 SE
  308.         $game_system.se_play($data_system.buzzer_se)
  309.         return
  310.       end
  311.       # 演奏确定 SE
  312.       $game_system.se_play($data_system.decision_se)
  313.       # 获取物品的所持数
  314.       case @item
  315.       when RPG::Item
  316.         number = $game_party.item_number(@item.id)
  317.       when RPG::Weapon
  318.         number = $game_party.weapon_number(@item.id)
  319.       when RPG::Armor
  320.         number = $game_party.armor_number(@item.id)
  321.       end
  322.       # 最大卖出个数 = 物品的所持数
  323.       max = number
  324.       # 窗口状态转向个数输入模式
  325.       @sell_window.active = false
  326.       @sell_window.visible = false
  327.       @number_window.set(@item, max, @item_price / 4 * 3, $game_party.actors[$select_actor])
  328.       @number_window.active = true
  329.       @number_window.visible = true
  330.     end
  331.   end
  332.   #--------------------------------------------------------------------------
  333.   # ● 刷新画面 (个数输入窗口激活的情况下)
  334.   #--------------------------------------------------------------------------
  335.   def update_number
  336.     # 按下 B 键的情况下
  337.     if Input.trigger?(Input::B)
  338.       # 演奏取消 SE
  339.       $game_system.se_play($data_system.cancel_se)
  340.       # 设置个数输入窗口为不活动·非可视状态
  341.       @number_window.active = false
  342.       @number_window.visible = false
  343.       # 命令窗口光标位置分支
  344.       case @command_window.index
  345.       when 0  # 购买
  346.         # 窗口状态转向购买模式
  347.         @buy_window.active = true
  348.         @buy_window.visible = true
  349.         @status_window.visible = true
  350.       when 1  # 卖出
  351.         # 窗口状态转向卖出模式
  352.         @sell_window.active = true
  353.         @sell_window.visible = true
  354.       end
  355.       return
  356.     end
  357.     # 按下 C 键的情况下
  358.     if Input.trigger?(Input::C)
  359.       # 演奏商店 SE
  360.       $game_system.se_play($data_system.shop_se)
  361.       # 设置个数输入窗口为不活动·非可视状态
  362.       @number_window.active = false
  363.       @number_window.visible = false
  364.       # 命令窗口光标位置分支
  365.       case @command_window.index
  366.       when 0  # 购买
  367.         # 购买处理
  368.         $game_party.actors[@select_window.index].lose_gold((@number_window.number * (@item.price * ($game_party.actors[@select_window.index].buy_gold_value / 100.0))).round)
  369.         case @item
  370.         when RPG::Item
  371.           $game_party.gain_item(@item.id, @number_window.number)
  372.         when RPG::Weapon
  373.           $game_party.gain_weapon(@item.id, @number_window.number)
  374.         when RPG::Armor
  375.           $game_party.gain_armor(@item.id, @number_window.number)
  376.         end
  377.         # 刷新各窗口
  378.         @gold_window.refresh($game_party.actors[@select_window.index].id)
  379.         @gold_window2.refresh($game_party.actors[@select_window.index].id)
  380.         @buy_window.refresh
  381.         @status_window.refresh
  382.         # 窗口状态转向购买模式
  383.         @buy_window.active = true
  384.         @buy_window.visible = true
  385.         @status_window.visible = true
  386.       when 1  # 卖出
  387.         # 卖出处理
  388.         $game_party.actors[@select_window.index].gain_gold(@number_window.number * (@item_price/4*3))
  389.         case @item
  390.         when RPG::Item
  391.           $game_party.lose_item(@item.id, @number_window.number)
  392.         when RPG::Weapon
  393.           $game_party.lose_weapon(@item.id, @number_window.number)
  394.         when RPG::Armor
  395.           $game_party.lose_armor(@item.id, @number_window.number)
  396.         end
  397.         # 刷新各窗口
  398.         @gold_window.refresh($game_party.actors[@select_window.index].id)
  399.         @gold_window2.refresh($game_party.actors[@select_window.index].id)
  400.         @sell_window.refresh
  401.         @status_window.refresh
  402.         # 窗口状态转向卖出模式
  403.         @sell_window.active = true
  404.         @sell_window.visible = true
  405.       end
  406.       return
  407.     end
  408.   end
  409.   def app_buy_window
  410.     @command_window.active = false
  411.     #@dummy_window.visible = false
  412.     @buy_window.visible = true
  413.     @status_window.visible = true
  414.     @buy_window.refresh
  415.     @gold_window2.refresh($game_party.actors[@select_window.index].id)
  416.     loop do
  417.       @buy_window.x -= 10
  418.       @select_window.x -= 10
  419.       @command_window.x -= 10
  420.       @status_window.x -= 10
  421.       @help_window.x -= 10
  422.       @number_window.x -= 10
  423.       @gold_window.x -= 10
  424.       @gold_window2.x -= 10
  425.       if @buy_window.x == 160
  426.         break
  427.       end
  428.       Graphics.update
  429.     end
  430.     @buy_window.active = true
  431.   end
  432.   def del_buy_window
  433.     @buy_window.active = false
  434.     loop do
  435.       @buy_window.x += 10
  436.       @select_window.x += 10
  437.       @command_window.x += 10
  438.       @status_window.x += 10
  439.       @help_window.x += 10
  440.       @number_window.x += 10
  441.       @gold_window.x += 10
  442.       @gold_window2.x += 10
  443.       if @command_window.x == 32
  444.         break
  445.       end
  446.       Graphics.update
  447.     end
  448.     @command_window.active = true
  449.     #@dummy_window.visible = true
  450.     @buy_window.visible = false
  451.     @buy_window.refresh
  452.     @status_window.visible = false
  453.     @status_window.item = nil
  454.     @help_window.set_text("")
  455.   end
  456.   def app_sell_window
  457.     @command_window.active = false
  458.     #@dummy_window.visible = false
  459.     @sell_window.visible = true
  460.     @sell_window.refresh
  461.     @gold_window2.refresh($game_party.actors[@select_window.index].id)
  462.     loop do
  463.       @sell_window.x -= 10
  464.       @select_window.x -= 10
  465.       @command_window.x -= 10
  466.       @help_window.x -= 10
  467.       @number_window.x -= 10
  468.       @gold_window.x -= 10
  469.       @gold_window2.x -= 10
  470.       if @sell_window.x == 160
  471.         break
  472.       end
  473.       Graphics.update
  474.     end
  475.     @sell_window.active = true
  476.   end
  477.   def del_sell_window
  478.     @sell_window.active = false
  479.     loop do
  480.       @sell_window.x += 10
  481.       @select_window.x += 10
  482.       @command_window.x += 10
  483.       @help_window.x += 10
  484.       @number_window.x += 10
  485.       @gold_window.x += 10
  486.       @gold_window2.x += 10
  487.       if @command_window.x == 32
  488.         break
  489.       end
  490.       Graphics.update
  491.     end
  492.     @command_window.active = true
  493.     #@dummy_window.visible = true
  494.     @sell_window.visible = false
  495.     @sell_window.refresh
  496.     @status_window.visible = false
  497.     @status_window.item = nil
  498.     @help_window.set_text("")
  499.   end
  500. end
复制代码
还有一些窗口脚本。(但不关于标题)
千万别拿脚本来测试!!!
这是怎么回事?
作者: 天地有正气    时间: 2014-2-8 07:56
尝试复制到新工程或者重写?
我上次就莫名其妙出错,重写后好了。。




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