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

Project1

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

[已经解决] 在物品窗口里可以卖东西

[复制链接]

Lv3.寻梦者

灌水局大小姐

梦石
0
星屑
4020
在线时间
1690 小时
注册时间
2012-3-10
帖子
2469
跳转到指定楼层
1
发表于 2012-8-10 17:39:09 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 YeYe. 于 2012-8-11 15:31 编辑

进入物品画面,比如有个【HP药水】,点击它会出现 【使用】【卖掉】2个选择,
如果物品画面里有装备的话,那么就只有【卖掉】的选择。
这样就不需要每次都得跑去商店里卖东西了,很方便。

希望能有好心的高手帮帮我~

Lv1.梦旅人

梦石
0
星屑
50
在线时间
977 小时
注册时间
2011-5-13
帖子
292
2
发表于 2012-8-11 11:59:53 | 只看该作者
本帖最后由 纳尔德 于 2012-8-12 15:47 编辑

RUBY 代码复制
  1. #==============================================================================
  2. # ■ Scene_Item
  3. #------------------------------------------------------------------------------
  4. #  处理物品画面的类。
  5. #==============================================================================
  6.  
  7. class Scene_Item
  8.   #--------------------------------------------------------------------------
  9.   # ● 主处理
  10.   #--------------------------------------------------------------------------
  11.   def main
  12.     # 生成帮助窗口、物品窗口
  13.     @help_window = Window_Help.new
  14.     @item_window = Window_Item.new
  15.     # 关联帮助窗口
  16.     @item_window.help_window = @help_window
  17.     # 生成目标窗口 (设置为不可见・不活动)
  18.     @target_window = Window_Target.new
  19.     @target_window.visible = false
  20.     @target_window.active = false
  21.     @command_window = Window_Command.new(120,["使用","卖掉"])
  22.     @command_window.z += 10
  23.     @command_window.x = 240
  24.     @command_window.y = 200
  25.     @command_window.visible = false
  26.     @command_window.active = false
  27.     @number_window = Window_ItemShop.new
  28.     @number_window.z += 10
  29.     @number_window.active = false
  30.     @number_window.visible = false
  31.     # 执行过度
  32.     Graphics.transition
  33.     # 主循环
  34.     loop do
  35.       # 刷新游戏画面
  36.       Graphics.update
  37.       # 刷新输入信息
  38.       Input.update
  39.       # 刷新画面
  40.       update
  41.       # 如果画面切换就中断循环
  42.       if $scene != self
  43.         break
  44.       end
  45.     end
  46.     # 装备过渡
  47.     Graphics.freeze
  48.     # 释放窗口
  49.     @help_window.dispose
  50.     @item_window.dispose
  51.     @target_window.dispose
  52.     @command_window.dispose
  53.     @number_window.dispose
  54.   end
  55.   #--------------------------------------------------------------------------
  56.   # ● 刷新画面
  57.   #--------------------------------------------------------------------------
  58.   def update
  59.     # 刷新窗口
  60.     @help_window.update
  61.     @item_window.update
  62.     @target_window.update
  63.     @command_window.update
  64.     @number_window.update
  65.     # 物品窗口被激活的情况下: 调用 update_item
  66.     if @item_window.active
  67.       update_item
  68.       return
  69.     end
  70.     # 目标窗口被激活的情况下: 调用 update_target
  71.     if @target_window.active
  72.       update_target
  73.       return
  74.     end
  75.     if @command_window.active
  76.       update_itemcommand
  77.       return
  78.     end
  79.     if @number_window.active
  80.       update_number
  81.       return
  82.     end
  83.   end
  84.   #--------------------------------------------------------------------------
  85.   # ● 刷新画面 (物品窗口被激活的情况下)
  86.   #--------------------------------------------------------------------------
  87.   def update_item
  88.     # 按下 B 键的情况下
  89.     if Input.trigger?(Input::B)
  90.       # 演奏取消 SE
  91.       $game_system.se_play($data_system.cancel_se)
  92.       # 切换到菜单画面
  93.       $scene = Scene_Menu.new(0)
  94.       return
  95.     end
  96.     # 按下 C 键的情况下
  97.     if Input.trigger?(Input::C)
  98.       @command_window.index = 0
  99.       @item = @item_window.item
  100.       if @item.is_a?(RPG::Item) and $game_party.item_can_use?(@item.id)  or @item.is_a?(RPG::Weapon) or @item.is_a?(RPG::Armor)  
  101.      $game_system.se_play($data_system.decision_se)
  102.      @item_window.active = false
  103.      @command_window.visible = true
  104.      @command_window.active = true
  105.    return
  106.      else
  107.       $game_system.se_play($data_system.buzzer_se)
  108.     return
  109.    end
  110.   end
  111. end
  112.   #--------------------------------------------------------------------------
  113.   # ● 刷新画面 (目标窗口被激活的情况下)
  114.   #--------------------------------------------------------------------------
  115.   def update_target
  116.     # 按下 B 键的情况下
  117.     if Input.trigger?(Input::B)
  118.       # 演奏取消 SE
  119.       $game_system.se_play($data_system.cancel_se)
  120.       # 由于物品用完而不能使用的场合
  121.       unless $game_party.item_can_use?(@item.id)
  122.         # 再次生成物品窗口的内容
  123.         @item_window.refresh
  124.       end
  125.      @item_window.refresh
  126.      @item_window.index = 0
  127.      @target_window.visible = false
  128.      @target_window.active = false
  129.      @item_window.active = true
  130.      @item_window.visible = true
  131.      @command_window.visible = false
  132.      @command_window.active = false
  133.       return
  134.     end
  135.     # 按下 C 键的情况下
  136.     if Input.trigger?(Input::C)
  137.       # 演奏确定 SE
  138.         $game_system.se_play($data_system.decision_se)
  139.       # 如果物品用完的情况下
  140.       if $game_party.item_number(@item.id) == 0
  141.         # 演奏冻结 SE
  142.         $game_system.se_play($data_system.buzzer_se)
  143.         return
  144.       end
  145.       # 目标是全体的情况下
  146.       if @target_window.index == -1
  147.         # 对同伴全体应用物品使用效果
  148.         used = false
  149.         for i in $game_party.actors
  150.           used |= i.item_effect(@item)
  151.         end
  152.       end
  153.       # 目标是单体的情况下
  154.       if @target_window.index >= 0
  155.         # 对目标角色应用物品的使用效果
  156.         target = $game_party.actors[@target_window.index]
  157.         used = target.item_effect(@item)
  158.       end
  159.       # 使用物品的情况下
  160.       if used
  161.         # 演奏物品使用时的 SE
  162.         $game_system.se_play(@item.menu_se)
  163.         # 消耗品的情况下
  164.         if @item.consumable
  165.           # 使用的物品数减 1
  166.           $game_party.lose_item(@item.id, 1)
  167.           # 再描绘物品窗口的项目
  168.           @item_window.draw_item(@item_window.index)
  169.         end
  170.         # 再生成目标窗口的内容
  171.         @target_window.refresh
  172.         # 全灭的情况下
  173.         if $game_party.all_dead?
  174.           # 切换到游戏结束画面
  175.           $scene = Scene_Gameover.new
  176.           return
  177.         end
  178.         # 公共事件 ID 有效的情况下
  179.         if @item.common_event_id > 0
  180.           # 预约调用公共事件
  181.           $game_temp.common_event_id = @item.common_event_id
  182.           # 切换到地图画面
  183.           $scene = Scene_Map.new
  184.           return
  185.         end
  186.       end
  187.       # 无法使用物品的情况下
  188.       unless used
  189.         # 演奏冻结 SE
  190.         $game_system.se_play($data_system.buzzer_se)
  191.       end
  192.       return
  193.     end
  194.   end
  195.   #--------------------------------------------------------------------------
  196.   # ● 刷新画面 (选项窗口被激活的情况下)
  197.   #--------------------------------------------------------------------------
  198.   def update_itemcommand
  199.     if Input.trigger?(Input::B)
  200.     # 演奏取消 SE
  201.       $game_system.se_play($data_system.cancel_se)
  202.       @item_window.active = true
  203.     @command_window.visible = false
  204.     @command_window.active = false
  205.       return
  206.     end
  207.     # 按下 C 键的情况下
  208.     if Input.trigger?(Input::C)
  209.       # 选择功能
  210.      case @command_window.index
  211.       when 0  # 使用
  212.       # 演奏确定 SE
  213.         $game_system.se_play($data_system.decision_se)
  214.       # 获取物品窗口当前选中的物品数据
  215.       @item = @item_window.item
  216.       # 不使用物品的情况下
  217.       unless @item.is_a?(RPG::Item)
  218.         # 演奏冻结 SE
  219.         $game_system.se_play($data_system.buzzer_se)
  220.         return
  221.       end
  222.       # 不能使用的情况下
  223.       unless $game_party.item_can_use?(@item.id)
  224.         # 演奏冻结 SE
  225.         $game_system.se_play($data_system.buzzer_se)
  226.         return
  227.       end
  228.       # 演奏确定 SE
  229.       $game_system.se_play($data_system.decision_se)
  230.       # 效果范围是我方的情况下
  231.       if @item.scope >= 3
  232.      @command_window.visible = false
  233.      @command_window.active = false
  234.       #激活目标窗口
  235.         @item_window.active = false
  236.         @target_window.x = (@item_window.index + 1) % 2 * 304
  237.         @target_window.visible = true
  238.        @target_window.active = true
  239.        #  设置效果范围 (单体/全体) 的对应光标位置
  240.         if @item.scope == 4 || @item.scope == 6
  241.           @target_window.index = -1
  242.         else
  243.           @target_window.index = 0
  244.        end
  245.        #效果在我方以外的情况下
  246.       else
  247.         # 公共事件 ID 有效的情况下
  248.         if @item.common_event_id > 0
  249.           # 预约调用公共事件
  250.           $game_temp.common_event_id = @item.common_event_id
  251.           # 演奏物品使用时的 SE
  252.           $game_system.se_play(@item.menu_se)
  253.           # 消耗品的情况下
  254.           if @item.consumable
  255.             # 使用的物品数减 1
  256.             $game_party.lose_item(@item.id, 1)
  257.             # 再描绘物品窗口的项目
  258.             @item_window.draw_item(@item_window.index)
  259.           end
  260.           # 切换到地图画面
  261.           $scene = Scene_Map.new
  262.           return
  263.         end
  264.       end
  265.       when 1  # 卖出
  266.       # 获取物品
  267.       @item = @item_window.item
  268.       # 物品无效的情况下、或者价格为 0 (不能卖出) 的情况下
  269.       if @item == nil or @item.price == 0
  270.         # 演奏冻结 SE
  271.         $game_system.se_play($data_system.buzzer_se)
  272.         return
  273.       end
  274.       # 演奏确定 SE
  275.       $game_system.se_play($data_system.decision_se)
  276.       # 获取物品的所持数
  277.       case @item
  278.       when RPG::Item
  279.         number = $game_party.item_number(@item.id)
  280.       when RPG::Weapon
  281.         number = $game_party.weapon_number(@item.id)
  282.       when RPG::Armor
  283.         number = $game_party.armor_number(@item.id)
  284.       end
  285.       # 最大卖出个数 = 物品的所持数
  286.       max = number
  287.       # 窗口状态转向个数输入模式
  288.       @command_window.visible = false
  289.       @command_window.active = false
  290.       @item_window.active = false
  291.       @number_window.set(@item, max, @item.price / 2)
  292.       @number_window.active = true
  293.       @number_window.visible = true
  294.     end
  295.     return
  296.     end
  297.   end
  298.   #--------------------------------------------------------------------------
  299.   # ● 刷新画面 (个数输入窗口激活的情况下)
  300.   #--------------------------------------------------------------------------
  301.   def update_number
  302.     if Input.trigger?(Input::B)
  303.       # 演奏取消 SE
  304.       $game_system.se_play($data_system.cancel_se)
  305.       # 设置个数输入窗口为不活动·非可视状态
  306.       @number_window.active = false
  307.       @number_window.visible = false
  308.       @command_window.visible = true
  309.       @command_window.active = true
  310.       return
  311.     end
  312.     # 按下 C 键的情况下
  313.     if Input.trigger?(Input::C)
  314.       # 演奏商店 SE
  315.       $game_system.se_play($data_system.shop_se)
  316.       # 设置个数输入窗口为不活动·非可视状态
  317.       @number_window.active = false
  318.       @number_window.visible = false
  319.         # 卖出处理
  320.         $game_party.gain_gold(@number_window.number * (@item.price / 2))
  321.         case @item
  322.         when RPG::Item
  323.           $game_party.lose_item(@item.id, @number_window.number)
  324.         when RPG::Weapon
  325.           $game_party.lose_weapon(@item.id, @number_window.number)
  326.         when RPG::Armor
  327.           $game_party.lose_armor(@item.id, @number_window.number)
  328.         end
  329.         # 刷新各窗口
  330.         @item_window.refresh
  331.         @item_window.index = 0
  332.         # 窗口状态转向卖出模式
  333.         @item_window.active = true
  334.         @item_window.visible = true
  335.       end
  336.       return
  337.     end
  338.   end
  339.  
  340. class Window_ItemShop < Window_Base
  341.   def initialize
  342.     super(0, 416, 368, 64)
  343.     self.contents = Bitmap.new(width - 32, height - 32)
  344.     @item = nil
  345.     @max = 1
  346.     @price = 0
  347.     @number = 1
  348.   end
  349.   def set(item, max, price)
  350.     @item = item
  351.     @max = max
  352.     @price = price
  353.     @number = 1
  354.     refresh
  355.   end
  356.   def number
  357.     return @number
  358.   end
  359. def refresh
  360.     self.contents.clear
  361.     draw_item_name(@item, 4, 0)
  362.     self.contents.font.color = normal_color
  363.     self.contents.draw_text(180, 0, 32, 32, "×")
  364.     self.contents.draw_text(220, 0, 24, 32, @number.to_s, 2)
  365.     self.cursor_rect.set(220, 0, 32, 32)
  366.     domination = $data_system.words.gold
  367.     cx = contents.text_size(domination).width
  368.     total_price = @price * @number
  369.     self.contents.font.color = normal_color
  370.     self.contents.draw_text(4, 0, 328-cx-2, 32, total_price.to_s, 2)
  371.     self.contents.font.color = system_color
  372.     self.contents.draw_text(332-cx, 0, cx, 32, domination, 2)
  373.   end
  374.   def update
  375.     super
  376.     if self.active
  377.       if Input.repeat?(Input::RIGHT) and @number < @max
  378.         $game_system.se_play($data_system.cursor_se)
  379.         @number += 1
  380.         refresh
  381.       end
  382.       if Input.repeat?(Input::LEFT) and @number > 1
  383.         $game_system.se_play($data_system.cursor_se)
  384.         @number -= 1
  385.         refresh
  386.       end
  387.       if Input.repeat?(Input::UP) and @number < @max
  388.         $game_system.se_play($data_system.cursor_se)
  389.         @number = [@number + 10, @max].min
  390.         refresh
  391.       end
  392.       if Input.repeat?(Input::DOWN) and @number > 1
  393.         $game_system.se_play($data_system.cursor_se)
  394.         @number = [@number - 10, 1].max
  395.         refresh
  396.       end
  397.     end
  398.   end
  399. end






应该行了,测试下吧。直接替换Scene_Item脚本,物品中如果为不能使用的都不能卖,能使用的物品和武器都能卖掉。

点评

纳君脚本强 和你合作爽←突然就打油了  发表于 2012-8-11 12:26

评分

参与人数 1星屑 +100 收起 理由
明特·布兰马修 + 100 不错

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-3 02:25

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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