查看: 1927|回复: 5

[已经过期] 脚本中如何判断物品的效果?

[复制链接]
梦石
20
星屑
1840
在线时间
6925 小时
注册时间
2012-12-14
回帖
10960

短篇十战斗者组别冠军开拓者贵宾短篇九勇士组亚军

发表于 2013-6-24 15:33:42 | 显示全部楼层 |阅读模式

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

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

×
[pre lang="ruby" line="1"]#==============================================================================
# ■ Scene_Item
#------------------------------------------------------------------------------
#  处理物品画面的类。
#==============================================================================
#--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    @hp_window = Window_Base.new(120, 188, 400, 64)
    @hp_window.contents = Bitmap.new(368, 32)
    string = "该角色的体力值已满。"
    @hp_window.contents.draw_text(4, 0, 368, 32, string,1)
    @hp_window.visible = false
    @hp_window.z = 1500
    @hp_window.opacity = 128
    @sp_window = Window_Base.new(120, 188, 400, 64)
    @sp_window.contents = Bitmap.new(368, 32)
    string = "该角色的魔法值已满。"
    @sp_window.contents.draw_text(4, 0, 368, 32, string,1)
    @sp_window.visible = false
    @sp_window.z = 1500
    @sp_window.opacity = 128
    @hp2_window = Window_Base.new(120, 188, 400, 64)
    @hp2_window.contents = Bitmap.new(368, 32)
    string = "该角色无法战斗,不能回复体力。"
    @hp2_window.contents.draw_text(4, 0, 368, 32, string,1)
    @hp2_window.visible = false
    @hp2_window.z = 1500
    @hp2_window.opacity = 128
    @sp2_window = Window_Base.new(120, 188, 400, 64)
    @sp2_window.contents = Bitmap.new(368, 32)
    string = "该角色无法战斗,不能回复魔法。"
    @sp2_window.contents.draw_text(4, 0, 368, 32, string,1)
    @sp2_window.visible = false
    @sp2_window.z = 1500
    @sp2_window.opacity = 128
    @die_window = Window_Base.new(120, 188, 400, 64)
    @die_window.contents = Bitmap.new(368, 32)
    string = "该角色状态正常,不能使用该道具。"
    @die_window.contents.draw_text(4, 0, 368, 32, string,1)
    @die_window.visible = false
    @die_window.z = 1500
    @die_window.opacity = 128
  end
class Scene_Item
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
    # 生成帮助窗口、物品窗口
    @help_window = Window_Help.new
    @item_window = Window_Item.new
    #生成物品图片
    @menu_com = Sprite.new
    @menu_com.bitmap = RPG::Cache.picture("物品.png")
    # 关联帮助窗口
    @item_window.help_window = @help_window
    # 生成目标窗口 (设置为不可见 不活动)
    @target_window = Window_Target.new
    @target_window.visible = false
    @target_window.active = false
    # 执行过度
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update
      # 如果画面切换就中断循环
      if $scene != self
        break
      end
    end
    # 装备过渡
    Graphics.freeze
    # 释放窗口
    @menu_com.bitmap.dispose if @menu_com.bitmap
    @menu_com.dispose
    @help_window.dispose
    @item_window.dispose
    @target_window.dispose
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    # 刷新窗口
    @help_window.update
    @item_window.update
    @target_window.update
    # 物品窗口被激活的情况下: 调用 update_item
    if @item_window.active
      update_item
      return
    end
    # 目标窗口被激活的情况下: 调用 update_target
    if @target_window.active
      update_target
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (物品窗口被激活的情况下)
  #--------------------------------------------------------------------------
  def update_item
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 切换到菜单画面
      $scene = Scene_Map.new
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 获取物品窗口当前选中的物品数据
      @item = @item_window.item
      # 不使用物品的情况下
      unless @item.is_a?(RPG::Item)
        # 演奏冻结 SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 不能使用的情况下
      unless $game_party.item_can_use?(@item.id)
        # 演奏冻结 SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 演奏确定 SE
      $game_system.se_play($data_system.decision_se)
      # 效果范围是我方的情况下
      if @item.scope >= 3
        # 激活目标窗口
        @menu_com = Sprite.new
        @menu_com.bitmap = RPG::Cache.picture("使用物品.png")
        @menu_com.z = @help_window.z + 50
        @target_window.z = @help_window.z + 100
        @item_window.active = false
        @target_window.x = (@item_window.index + 1) % 2 * 304
        @menu_com.x = -304 if @target_window.x == 0
        @target_window.visible = true
        @target_window.active = true
        # 设置效果范围 (单体/全体) 的对应光标位置
        if @item.scope == 4 || @item.scope == 6
          @target_window.index = -1
        else
          @target_window.index = 0
        end
      # 效果在我方以外的情况下
      else
        # 公共事件 ID 有效的情况下
        if @item.common_event_id > 0
          # 预约调用公共事件
          $game_temp.common_event_id = @item.common_event_id
          # 演奏物品使用时的 SE
          $game_system.se_play(@item.menu_se)
          # 消耗品的情况下
          if @item.consumable
            # 使用的物品数减 1
            $game_party.lose_item(@item.id, 1)
            # 再描绘物品窗口的项目
            @item_window.draw_item(@item_window.index)
          end
          # 切换到地图画面
          $scene = Scene_Map.new
          return
        end
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (目标窗口被激活的情况下)
  #--------------------------------------------------------------------------
  def update_target
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 由于物品用完而不能使用的场合
      unless $game_party.item_can_use?(@item.id)
        # 再次生成物品窗口的内容
        @item_window.refresh
      end
      # 删除目标窗口
      @item_window.active = true
      @target_window.visible = false
      @target_window.active = false
      @menu_com.dispose
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 如果物品用完的情况下
      if $game_party.item_number(@item.id) == 0
        # 演奏冻结 SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 目标是全体的情况下
      if @target_window.index == -1
        # 对同伴全体应用物品使用效果
        used = false
        for i in $game_party.actors
          used |= i.item_effect(@item)
        end
      end
      # 目标是单体的情况下
      if @target_window.index >= 0
        # 对目标角色应用物品的使用效果
        target = $game_party.actors[@target_window.index]
        used = target.item_effect(@item)
      end
      # 使用物品的情况下
      if used
        # 演奏物品使用时的 SE
        $game_system.se_play(@item.menu_se)
        # 消耗品的情况下
        if @item.consumable
          # 使用的物品数减 1
          $game_party.lose_item(@item.id, 1)
          # 再描绘物品窗口的项目
          @item_window.draw_item(@item_window.index)
        end
        # 再生成目标窗口的内容
        @target_window.refresh
        # 全灭的情况下
        if $game_party.all_dead?
          # 切换到游戏结束画面
          $scene = Scene_Gameover.new
          return
        end
        # 公共事件 ID 有效的情况下
        if @item.common_event_id > 0
          # 预约调用公共事件
          $game_temp.common_event_id = @item.common_event_id
          # 切换到地图画面
          $scene = Scene_Map.new
          return
        end
      end
      # 无法使用物品的情况下
      unless used
        # 演奏冻结 SE
        $game_system.se_play($data_system.buzzer_se)
      end
      return
    end
  end
end
[/pre]

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

点评

我来吐个槽,楼主你的ID换人了么?你之前不是写脚本的么?!!!  发表于 2013-6-24 17:15
大家好,这里是晨露的说。请多多指教。
刚入门RM软件制作,请大家多多帮助我哦。
落雪君的欢乐像素教程,欢迎查阅。

梦石
0
星屑
275
在线时间
1373 小时
注册时间
2005-10-16
回帖
5038

贵宾

发表于 2013-6-24 17:16:33 | 显示全部楼层
你大可不必做这么多种类的窗口,做一个窗口,留好接口可以自由的更换里面的文字就好了。

点评

那帖子的脚本根本就不是我写的,全动画战斗范例内不就有那个脚本吗?  发表于 2013-6-24 17:35
http://bbs.66rpg.com/forum.php?mod=viewthread&tid=316590&page=1#pid2208522  发表于 2013-6-24 17:24
认错人了,我根本就不会脚本的啊  发表于 2013-6-24 17:20
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复

使用道具 举报

梦石
20
星屑
1840
在线时间
6925 小时
注册时间
2012-12-14
回帖
10960

短篇十战斗者组别冠军开拓者贵宾短篇九勇士组亚军

 楼主| 发表于 2013-6-24 17:20:49 | 显示全部楼层
亿万星辰 发表于 2013-6-24 17:16
你大可不必做这么多种类的窗口,做一个窗口,留好接口可以自由的更换里面的文字就好了。 ...

脚本盲不知道啊
只能用粗略的方式表达效果吧
大家好,这里是晨露的说。请多多指教。
刚入门RM软件制作,请大家多多帮助我哦。
落雪君的欢乐像素教程,欢迎查阅。

回复

使用道具 举报

梦石
0
星屑
50
在线时间
193 小时
注册时间
2013-3-24
回帖
427
发表于 2013-6-25 03:46:05 | 显示全部楼层
快學學腳本吧~很有用的XD
不要所有問題全不都丟上6R來阿...要試著自己去解決XDDDD
回复

使用道具 举报

○赛

梦石
0
星屑
1254
在线时间
1276 小时
注册时间
2013-1-22
回帖
2078

贵宾

发表于 2013-6-25 08:46:59 | 显示全部楼层
公共事件的条件分歧,比较麻烦但是可行:
附加状态N号,定量为0。公共事件判定当xx角色中了物品后如果hp = maxhp(这些用变量带入)时,显示某某某,然后让这个角色随机打一个敌人或是什么也不动
回复

使用道具 举报

故九江太守

梦石
0
星屑
314
在线时间
2158 小时
注册时间
2012-12-5
回帖
4323
发表于 2013-6-26 13:42:18 | 显示全部楼层
珍贵最近也在努力学脚本的说
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部