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

Project1

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

關於角色普通攻擊時消費SP的問題~!

 关闭 [复制链接]
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-9-5
帖子
265
跳转到指定楼层
1
发表于 2009-5-18 21:36:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
2
发表于 2009-5-19 14:06:03 | 只看该作者
這個問題帶大概可分為三個部分:
1、在 sp 不足夠且裝備了 1 號武器時,讓選項窗口的第一個選項刷灰,否則顯示白色~這個直接調用 Window_Command 的現成方法 disable_item 和 draw_item 就行了(窗口部分)
2、在刷新選項窗口判斷玩家選擇了攻擊時,追加 sp 和武器編號的判斷,如果不滿足條件就播放一個無效的音效(禁用攻擊部分)
3、在應用攻擊效果時追加扣 sp 的效果,從當前 sp 中減去 maxhp 的 0.05(算法部分)

下面就是按照這個順序來修改的:
class Scene_Battle
  WEAPON_DRAIN_SP = 0.2
  #--------------------------------------------------------------------------
  # ● 设置角色指令窗口
  #--------------------------------------------------------------------------
  def phase3_setup_command_window
    if @active_battler.weapon_id == 1 &&
      @active_battler.sp < (@active_battler.maxsp * WEAPON_DRAIN_SP).round
      @actor_command_window.disable_item(0)
    else
      @actor_command_window.draw_item(0, @actor_command_window.normal_color)
    end

    # 同伴指令窗口无效化
    @party_command_window.active = false
    @party_command_window.visible = false
    # 角色指令窗口无效化
    @actor_command_window.active = true
    @actor_command_window.visible = true
    # 设置角色指令窗口的位置
    @actor_command_window.x = @actor_index * 160
    # 设置索引为 0
    @actor_command_window.index = 0
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (角色命令回合 : 基本命令)
  #--------------------------------------------------------------------------
  def update_phase3_basic_command
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 转向前一个角色的指令输入
      phase3_prior_actor
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 角色指令窗口光标位置分之
      case @actor_command_window.index
      when 0  # 攻击
        if @active_battler.weapon_id != 1 ||
          @active_battler.sp >= (@active_battler.maxsp * WEAPON_DRAIN_SP).round

          # 演奏确定 SE
          $game_system.se_play($data_system.decision_se)
          # 设置行动
          @active_battler.current_action.kind = 0
          @active_battler.current_action.basic = 0
          # 开始选择敌人
          start_enemy_select
        else
          # 演奏无效 SE
          $game_system.se_play($data_system.buzzer_se)         
        end

      when 1  # 特技
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 设置行动
        @active_battler.current_action.kind = 1
        # 开始选择特技
        start_skill_select
      when 2  # 防御
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 设置行动
        @active_battler.current_action.kind = 0
        @active_battler.current_action.basic = 1
        # 转向下一位角色的指令输入
        phase3_next_actor
      when 3  # 物品
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 设置行动
        @active_battler.current_action.kind = 2
        # 开始选择物品
        start_item_select
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 生成基本行动结果
  #--------------------------------------------------------------------------
  def make_basic_action_result
    # 攻击的情况下
    if @active_battler.current_action.basic == 0
      # 设置攻击 ID
      @animation1_id = @active_battler.animation1_id
      @animation2_id = @active_battler.animation2_id
      # 行动方的战斗者是敌人的情况下
      if @active_battler.is_a?(Game_Enemy)
        if @active_battler.restriction == 3
          target = $game_troop.random_target_enemy
        elsif @active_battler.restriction == 2
          target = $game_party.random_target_actor
        else
          index = @active_battler.current_action.target_index
          target = $game_party.smooth_target_actor(index)
        end
      end
      # 行动方的战斗者是角色的情况下
      if @active_battler.is_a?(Game_Actor)
        if @active_battler.restriction == 3
          target = $game_party.random_target_actor
        elsif @active_battler.restriction == 2
          target = $game_troop.random_target_enemy
        else
          index = @active_battler.current_action.target_index
          target = $game_troop.smooth_target_enemy(index)
        end
        if @active_battler.weapon_id == 1
          @active_battler.sp -= (@active_battler.maxsp * WEAPON_DRAIN_SP).round
        end

      end
      # 设置对像方的战斗者序列
      @target_battlers = [target]
      # 应用通常攻击效果
      for target in @target_battlers
        target.attack_effect(@active_battler)
      end
      return
    end
    # 防御的情况下
    if @active_battler.current_action.basic == 1
      # 帮助窗口显示"防御"
      @help_window.set_text($data_system.words.guard, 1)
      return
    end
    # 逃跑的情况下
    if @active_battler.is_a?(Game_Enemy) and
       @active_battler.current_action.basic == 2
      #  帮助窗口显示"逃跑"
      @help_window.set_text("逃跑", 1)
      # 逃跑
      @active_battler.escape
      return
    end
    # 什么也不做的情况下
    if @active_battler.current_action.basic == 3
      # 清除强制行动对像的战斗者
      $game_temp.forcing_battler = nil
      # 移至步骤 1
      @phase4_step = 1
      return
    end
  end
end

系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
129 小时
注册时间
2009-3-29
帖子
432
3
发表于 2009-5-19 15:46:16 | 只看该作者
LS的 按照你这样改的话! 敌人攻击可能会出错。。{/fd}{/fd}
因为敌人没有武器。。。。 而@active_battler是敌人和角色通用的!{/gg}{/gg}
P:新手间接,错了不要骂我哦{/pz}{/pz}
做一个游戏也用这么长时间........
PS:说我自己呢
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-9-5
帖子
265
4
 楼主| 发表于 2009-5-19 18:47:27 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-9-5
帖子
265
5
 楼主| 发表于 2009-5-19 18:58:43 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
6
发表于 2009-5-19 19:46:14 | 只看该作者
以下引用失去的记忆于2009-5-19 7:46:16的发言:

LS的 按照你这样改的话! 敌人攻击可能会出错。。
因为敌人没有武器。。。。 而@active_battler是敌人和角色通用的!
P:新手间接,错了不要骂我哦

前两段直接引用 @active_battler 是因为那两个方法都是玩家在移动选项的时候才会刷新的,所以 @active_battler 不可能是敌人;而最后那段是在 if @active_battler.is_a?(Game_Actor) 这个分歧下执行的~

以下引用鲔鱼吐司于2009-5-19 10:58:43的发言:

唯一美中不足的地方就是

如果1號角色裝備該武器且沒有SP了(攻擊指令刷灰) 我的2號角色攻擊指令也會刷灰 但是2號角色還是可以攻擊 ^ ^||

我這里測試沒有這個現象誒,因為在 @actor_command_window 每次位置改變的時候都會判斷當前 active_battler 的武器及 sp,如果不需要刷灰就會刷白……你用了什么腳本改變了角色指令窗口的行為嗎?
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-9-5
帖子
265
7
 楼主| 发表于 2009-5-19 20:02:59 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
8
发表于 2009-5-19 20:28:18 | 只看该作者
那先在這個腳本開頭插入一句:
class Window_Command < Window_Selectable
   attr_accessor :item
   # 剩下的內容.....
end
然后把我那段腳本的第一段紅色的改為:
    if @active_battler.weapon_id == 1 &&
      @active_battler.sp < (@active_battler.maxsp * WEAPON_DRAIN_SP).round
      @actor_command_window.disable_item(0)
      @actor_command_window.refresh
    else
      @actor_command_window.item[0] = nil
    end
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-9-5
帖子
265
9
 楼主| 发表于 2009-5-19 20:49:10 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-15 06:42

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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