Project1

标题: 脚本中如何判断物品的效果? [打印本页]

作者: 美丽晨露    时间: 2013-6-24 15:33
标题: 脚本中如何判断物品的效果?
RUBY 代码复制
  1. #==============================================================================
  2. # ■ Scene_Item
  3. #------------------------------------------------------------------------------
  4. #  处理物品画面的类。
  5. #==============================================================================
  6. #--------------------------------------------------------------------------
  7.   # ● 初始化对像
  8.   #--------------------------------------------------------------------------
  9.   def initialize
  10.     @hp_window = Window_Base.new(120, 188, 400, 64)
  11.     @hp_window.contents = Bitmap.new(368, 32)
  12.     string = "该角色的体力值已满。"
  13.     @hp_window.contents.draw_text(4, 0, 368, 32, string,1)
  14.     @hp_window.visible = false
  15.     @hp_window.z = 1500
  16.     @hp_window.opacity = 128
  17.     @sp_window = Window_Base.new(120, 188, 400, 64)
  18.     @sp_window.contents = Bitmap.new(368, 32)
  19.     string = "该角色的魔法值已满。"
  20.     @sp_window.contents.draw_text(4, 0, 368, 32, string,1)
  21.     @sp_window.visible = false
  22.     @sp_window.z = 1500
  23.     @sp_window.opacity = 128
  24.     @hp2_window = Window_Base.new(120, 188, 400, 64)
  25.     @hp2_window.contents = Bitmap.new(368, 32)
  26.     string = "该角色无法战斗,不能回复体力。"
  27.     @hp2_window.contents.draw_text(4, 0, 368, 32, string,1)
  28.     @hp2_window.visible = false
  29.     @hp2_window.z = 1500
  30.     @hp2_window.opacity = 128
  31.     @sp2_window = Window_Base.new(120, 188, 400, 64)
  32.     @sp2_window.contents = Bitmap.new(368, 32)
  33.     string = "该角色无法战斗,不能回复魔法。"
  34.     @sp2_window.contents.draw_text(4, 0, 368, 32, string,1)
  35.     @sp2_window.visible = false
  36.     @sp2_window.z = 1500
  37.     @sp2_window.opacity = 128
  38.     @die_window = Window_Base.new(120, 188, 400, 64)
  39.     @die_window.contents = Bitmap.new(368, 32)
  40.     string = "该角色状态正常,不能使用该道具。"
  41.     @die_window.contents.draw_text(4, 0, 368, 32, string,1)
  42.     @die_window.visible = false
  43.     @die_window.z = 1500
  44.     @die_window.opacity = 128
  45.   end
  46. class Scene_Item
  47.   #--------------------------------------------------------------------------
  48.   # ● 主处理
  49.   #--------------------------------------------------------------------------
  50.   def main
  51.     # 生成帮助窗口、物品窗口
  52.     @help_window = Window_Help.new
  53.     @item_window = Window_Item.new
  54.     #生成物品图片
  55.     @menu_com = Sprite.new
  56.     @menu_com.bitmap = RPG::Cache.picture("物品.png")
  57.     # 关联帮助窗口
  58.     @item_window.help_window = @help_window
  59.     # 生成目标窗口 (设置为不可见 不活动)
  60.     @target_window = Window_Target.new
  61.     @target_window.visible = false
  62.     @target_window.active = false
  63.     # 执行过度
  64.     Graphics.transition
  65.     # 主循环
  66.     loop do
  67.       # 刷新游戏画面
  68.       Graphics.update
  69.       # 刷新输入信息
  70.       Input.update
  71.       # 刷新画面
  72.       update
  73.       # 如果画面切换就中断循环
  74.       if $scene != self
  75.         break
  76.       end
  77.     end
  78.     # 装备过渡
  79.     Graphics.freeze
  80.     # 释放窗口
  81.     @menu_com.bitmap.dispose if @menu_com.bitmap
  82.     @menu_com.dispose
  83.     @help_window.dispose
  84.     @item_window.dispose
  85.     @target_window.dispose
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # ● 刷新画面
  89.   #--------------------------------------------------------------------------
  90.   def update
  91.     # 刷新窗口
  92.     @help_window.update
  93.     @item_window.update
  94.     @target_window.update
  95.     # 物品窗口被激活的情况下: 调用 update_item
  96.     if @item_window.active
  97.       update_item
  98.       return
  99.     end
  100.     # 目标窗口被激活的情况下: 调用 update_target
  101.     if @target_window.active
  102.       update_target
  103.       return
  104.     end
  105.   end
  106.   #--------------------------------------------------------------------------
  107.   # ● 刷新画面 (物品窗口被激活的情况下)
  108.   #--------------------------------------------------------------------------
  109.   def update_item
  110.     # 按下 B 键的情况下
  111.     if Input.trigger?(Input::B)
  112.       # 演奏取消 SE
  113.       $game_system.se_play($data_system.cancel_se)
  114.       # 切换到菜单画面
  115.       $scene = Scene_Map.new
  116.       return
  117.     end
  118.     # 按下 C 键的情况下
  119.     if Input.trigger?(Input::C)
  120.       # 获取物品窗口当前选中的物品数据
  121.       @item = @item_window.item
  122.       # 不使用物品的情况下
  123.       unless @item.is_a?(RPG::Item)
  124.         # 演奏冻结 SE
  125.         $game_system.se_play($data_system.buzzer_se)
  126.         return
  127.       end
  128.       # 不能使用的情况下
  129.       unless $game_party.item_can_use?(@item.id)
  130.         # 演奏冻结 SE
  131.         $game_system.se_play($data_system.buzzer_se)
  132.         return
  133.       end
  134.       # 演奏确定 SE
  135.       $game_system.se_play($data_system.decision_se)
  136.       # 效果范围是我方的情况下
  137.       if @item.scope >= 3
  138.         # 激活目标窗口
  139.         @menu_com = Sprite.new
  140.         @menu_com.bitmap = RPG::Cache.picture("使用物品.png")
  141.         @menu_com.z = @help_window.z + 50
  142.         @target_window.z = @help_window.z + 100
  143.         @item_window.active = false
  144.         @target_window.x = (@item_window.index + 1) % 2 * 304
  145.         @menu_com.x = -304 if @target_window.x == 0
  146.         @target_window.visible = true
  147.         @target_window.active = true
  148.         # 设置效果范围 (单体/全体) 的对应光标位置
  149.         if @item.scope == 4 || @item.scope == 6
  150.           @target_window.index = -1
  151.         else
  152.           @target_window.index = 0
  153.         end
  154.       # 效果在我方以外的情况下
  155.       else
  156.         # 公共事件 ID 有效的情况下
  157.         if @item.common_event_id > 0
  158.           # 预约调用公共事件
  159.           $game_temp.common_event_id = @item.common_event_id
  160.           # 演奏物品使用时的 SE
  161.           $game_system.se_play(@item.menu_se)
  162.           # 消耗品的情况下
  163.           if @item.consumable
  164.             # 使用的物品数减 1
  165.             $game_party.lose_item(@item.id, 1)
  166.             # 再描绘物品窗口的项目
  167.             @item_window.draw_item(@item_window.index)
  168.           end
  169.           # 切换到地图画面
  170.           $scene = Scene_Map.new
  171.           return
  172.         end
  173.       end
  174.       return
  175.     end
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # ● 刷新画面 (目标窗口被激活的情况下)
  179.   #--------------------------------------------------------------------------
  180.   def update_target
  181.     # 按下 B 键的情况下
  182.     if Input.trigger?(Input::B)
  183.       # 演奏取消 SE
  184.       $game_system.se_play($data_system.cancel_se)
  185.       # 由于物品用完而不能使用的场合
  186.       unless $game_party.item_can_use?(@item.id)
  187.         # 再次生成物品窗口的内容
  188.         @item_window.refresh
  189.       end
  190.       # 删除目标窗口
  191.       @item_window.active = true
  192.       @target_window.visible = false
  193.       @target_window.active = false
  194.       @menu_com.dispose
  195.       return
  196.     end
  197.     # 按下 C 键的情况下
  198.     if Input.trigger?(Input::C)
  199.       # 如果物品用完的情况下
  200.       if $game_party.item_number(@item.id) == 0
  201.         # 演奏冻结 SE
  202.         $game_system.se_play($data_system.buzzer_se)
  203.         return
  204.       end
  205.       # 目标是全体的情况下
  206.       if @target_window.index == -1
  207.         # 对同伴全体应用物品使用效果
  208.         used = false
  209.         for i in $game_party.actors
  210.           used |= i.item_effect(@item)
  211.         end
  212.       end
  213.       # 目标是单体的情况下
  214.       if @target_window.index >= 0
  215.         # 对目标角色应用物品的使用效果
  216.         target = $game_party.actors[@target_window.index]
  217.         used = target.item_effect(@item)
  218.       end
  219.       # 使用物品的情况下
  220.       if used
  221.         # 演奏物品使用时的 SE
  222.         $game_system.se_play(@item.menu_se)
  223.         # 消耗品的情况下
  224.         if @item.consumable
  225.           # 使用的物品数减 1
  226.           $game_party.lose_item(@item.id, 1)
  227.           # 再描绘物品窗口的项目
  228.           @item_window.draw_item(@item_window.index)
  229.         end
  230.         # 再生成目标窗口的内容
  231.         @target_window.refresh
  232.         # 全灭的情况下
  233.         if $game_party.all_dead?
  234.           # 切换到游戏结束画面
  235.           $scene = Scene_Gameover.new
  236.           return
  237.         end
  238.         # 公共事件 ID 有效的情况下
  239.         if @item.common_event_id > 0
  240.           # 预约调用公共事件
  241.           $game_temp.common_event_id = @item.common_event_id
  242.           # 切换到地图画面
  243.           $scene = Scene_Map.new
  244.           return
  245.         end
  246.       end
  247.       # 无法使用物品的情况下
  248.       unless used
  249.         # 演奏冻结 SE
  250.         $game_system.se_play($data_system.buzzer_se)
  251.       end
  252.       return
  253.     end
  254.   end
  255. end


我想设定为使用物品时,当前人物体力魔力已满时,使用恢复体力魔法的物品后,显示以上文字;
当前人物状态为战斗不能时,使用恢复体力魔法的物品后,显示以上文字;
当前人物状态为正常时,使用解除战斗不能的物品后,显示以上文字。
向大家求助了,我是脚本盲

作者: 亿万星辰    时间: 2013-6-24 17:16
你大可不必做这么多种类的窗口,做一个窗口,留好接口可以自由的更换里面的文字就好了。
作者: 美丽晨露    时间: 2013-6-24 17:20
亿万星辰 发表于 2013-6-24 17:16
你大可不必做这么多种类的窗口,做一个窗口,留好接口可以自由的更换里面的文字就好了。 ...

脚本盲不知道啊
只能用粗略的方式表达效果吧
作者: joe5491    时间: 2013-6-25 03:46
快學學腳本吧~很有用的XD
不要所有問題全不都丟上6R來阿...要試著自己去解決XDDDD
作者: 天地有正气    时间: 2013-6-25 08:46
公共事件的条件分歧,比较麻烦但是可行:
附加状态N号,定量为0。公共事件判定当xx角色中了物品后如果hp = maxhp(这些用变量带入)时,显示某某某,然后让这个角色随机打一个敌人或是什么也不动
作者: 你最珍贵    时间: 2013-6-26 13:42
珍贵最近也在努力学脚本的说




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