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

Project1

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

[已经解决] 如何制作一个技能,使自身死后马上复活?

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

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
136 小时
注册时间
2011-8-15
帖子
321
跳转到指定楼层
1
发表于 2011-8-16 18:29:10 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽

Lv1.梦旅人

梦石
0
星屑
50
在线时间
94 小时
注册时间
2011-7-2
帖子
79
2
发表于 2011-8-20 11:57:05 | 只看该作者
本帖最后由 凌空飘雪 于 2011-8-20 12:03 编辑

战斗中只能复活一次,你可以在 ■ Scene_Battle 1 中的开头 def main 中先设置一个变量如: @劫后余生 = false
# ■ Scene_Battle (分割定义 1)
class Scene_Battle
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
   def main #在主处理的地方设置,就仅仅只会在刚开局时执行一次
    @劫后余生 = false   #(如果劫后余生不止一个人会,就换成
# for actor in $game_party.actors
# actor.comeback =false
  #  end )
  #每局战斗中用过一次后就不会再发动了
  end
#之后在其下面的胜负判定 def judge 中设置复活技能
#可以根据几号状态【actor.state?(8)】或几号技能【 actor.skill_learn?(8)】等来判断
  #--------------------------------------------------------------------------
   # ● 胜负判定
  #--------------------------------------------------------------------------
  def judge
     for actor in $game_party.actors #角色在队伍中时循环
   #如果劫后余生不止一个人会,可以将下句中的 and @劫后余生 == false 该为 actor.comeback = false
       if actor.hp == 0 and actor.skill_learn?(8) and @劫后余生 == false  #角色HP为0且角色学会8号技能
        # 且@劫后余生开关未打开 #且  comeback复活标志未打开(使各角色技能不会串在一起)
       actor.remove_state(1)#移除死亡状态=复活
       actor.animation_id = 26#复活动画id = 26
       actor.hp = actor.maxhp * 3 / 10#回复30%HP
       @status_window.refresh #刷新状态窗口
             @劫后余生=true # @劫后余生开关打开,如果劫后余生不止一个人会,可以去除这句
       # actor.comeback =true #避免重复判断,如果劫后余生不止一个人会,可以使用该语句
      end
end
end

#*******************不止一个人会时********************************
#令每个角色学会技能后都有机会复活
#为每个角色增加 comeback 的变量
#在 Game_Battler1 中增加变量comeback
class Game_Battler
attr_accessor :comeback                 # 复活判定标志¥
#--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    @comeback = false     #¥复活
  end
#***************************************************


至于技能总共只能用10次,一个人时,你可以直接用变量
如用一号变量,你可以在def judge 中增加:
def judge
for actor in $game_party.actors   
#如果劫后余生不止一个人会,可以将下句中的 and @劫后余生 == false 该为 actor.comeback = false
     #***********************************************************
       if actor.hp == 0 and actor.skill_learn?(8) and @劫后余生 == false  and $game_variables[1] <= 10
     #***********************************************************
     #这样【变量1】大于10时,就不能复活了
   再在  @status_window.refresh  等语句之下 加上 $game_variables[1] += 1
   这样每次发动技能都会增加 【变量1】的值
   
如果多人会,可以根据角色的id 使用不同变量
     case actor.id
      when 1
              fuhou = 1
      when 2
                fuhou = 2
      when 3
               fuhou = 3
    end
  再把$game_variables[1] 换成$game_variables[fuhou]  为每个角色设置特定变量,还可以用事件方便的清空计数


回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1697
在线时间
3038 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

3
发表于 2011-8-20 12:57:06 | 只看该作者
本帖最后由 精灵使者 于 2011-8-20 12:58 编辑

大致给个算法吧。劫后余生这个做一个状态,技能则是给自己/其他人加上劫后余生状态。
那么死亡处理部分直接加上分歧。
如果角色有劫后余生的状态的话,回复1/3HP。否则,按正常死亡处理。这样就行了。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
12 小时
注册时间
2011-8-18
帖子
17
4
发表于 2011-8-20 14:51:41 | 只看该作者
这个技能不错~!可是好复杂
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
66 小时
注册时间
2011-5-25
帖子
73
5
发表于 2011-8-21 09:49:42 | 只看该作者
本帖最后由 shoed 于 2011-8-21 09:54 编辑

这个技能的做法如下:
首先要设置一下数据库
1、设置一个技能:

2、设置一个状态,通过技能可以触发此状态

3、设置一个可以复活的道具,注意是无消耗的

4、修改以下脚本,修改部分我用红色字体表示
$use_number=10

class Scene_Battle
  ###################################
  alias afx_start_phase1 start_phase1
  def start_phase1
    afx_start_phase1
    for actor in $game_party.actors
      actor.live=0
    end
  end

  ##################################
  def update_phase3_actor_select
   
    @actor_arrow.update
   
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 选择角色结束
      end_actor_select
      return
    end
    ####################################
    # 刷新角色箭头
    if @skill!=nil and @skill.id==81 and (@actor_arrow.actor.live==1 or @actor_arrow.actor.dead?)
     
      return
    end

    ########################################
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 演奏确定 SE
      $game_system.se_play($data_system.decision_se)
      # 设置行动
      @active_battler.current_action.target_index = @actor_arrow.index
      # 选择角色结束
      end_actor_select
      # 显示特技窗口中的情况下
      if @skill_window != nil
        # 结束特技选择
        end_skill_select
      end
      # 显示物品窗口的情况下
      if @item_window != nil
        # 结束物品选择
        end_item_select
      end
      # 转到下一位角色的指令输入
      phase3_next_actor
    end
  end
  
  def update_phase3_skill_select
   # 设置特技窗口为可视状态
    @skill_window.visible = true
    # 刷新特技窗口
    @skill_window.update
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 结束特技选择
      end_skill_select
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 获取特技选择窗口现在选择的特技的数据
      @skill = @skill_window.skill
      # 无法使用的情况下
      if @skill == nil or not @active_battler.skill_can_use?(@skill.id)
        # 演奏冻结 SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      ############################################
      if @skill.id==81
        if $use_number == 0
          # 演奏冻结 SE
          $game_system.se_play($data_system.buzzer_se)
          return
        end
      end

      #################################################
      # 演奏确定 SE
      $game_system.se_play($data_system.decision_se)
      # 设置行动
      @active_battler.current_action.skill_id = @skill.id
      # 设置特技窗口为不可见状态
      @skill_window.visible = false
      # 效果范围是敌单体的情况下
      if @skill.scope == 1
        # 开始选择敌人
        start_enemy_select
      # 效果范围是我方单体的情况下
      elsif @skill.scope == 3 or @skill.scope == 5
        # 开始选择角色
        start_actor_select
      # 效果范围不是单体的情况下
      else
        # 选择特技结束
        end_skill_select
        # 转到下一位角色的指令输入
        phase3_next_actor
      end
      return
    end
  end
  
  
  def make_skill_action_result
    # 获取特技
    @skill = $data_skills[@active_battler.current_action.skill_id]
    # 如果不是强制行动
    unless @active_battler.current_action.forcing
      # 因为 SP 耗尽而无法使用的情况下
      unless @active_battler.skill_can_use?(@skill.id)
        # 清除强制行动对像的战斗者
        $game_temp.forcing_battler = nil
        # 移至步骤 1
        @phase4_step = 1
        return
      end
    end
    # 消耗 SP
    @active_battler.sp -= @skill.sp_cost
    #####################################
     if @skill.id==81
      $use_number-=1
    end

    #####################################
    # 刷新状态窗口
    @status_window.refresh
    # 在帮助窗口显示特技名
    @help_window.set_text(@skill.name, 1)
    # 设置动画 ID
    @animation1_id = @skill.animation1_id
    @animation2_id = @skill.animation2_id
    # 设置公共事件 ID
    @common_event_id = @skill.common_event_id
    # 设置对像侧战斗者
    set_target_battlers(@skill.scope)
    # 应用特技效果
    for target in @target_battlers
      target.skill_effect(@active_battler, @skill)
    end
  end
end

class Game_Battler
  attr_accessor   :live             # 复活次数
  ##################################################
  alias afx_initialize initialize
  def initialize
    afx_initialize
    @live=0
  end

  
  def hp=(hp)
    @hp = [[hp, maxhp].min, 0].max
    # 解除附加的战斗不能状态
    for i in 1...$data_states.size
      if $data_states.zero_hp
        if self.dead?
          #if $scene.is_a?(Scene_Battle)
          if state?(17)
            item=$data_items[33]
            self.item_effect(item)
            remove_state(17)
            @live=1
          else
          #end
            add_state(i)
          end
        else
          remove_state(i)
        end
      end
    end
  end

  #################################################
end



附上工程文件:
复活.rar (228.37 KB, 下载次数: 32)

点评

经过多次实验,证明毫无作用啊……  发表于 2011-8-23 07:34
能评最佳答案就好  发表于 2011-8-21 13:09
真是太棒了!~~感谢~~感谢~~可惜我不能给你经验。太感谢了……  发表于 2011-8-21 12:53

评分

参与人数 1星屑 +200 梦石 +2 收起 理由
「旅」 + 200 + 2 认可答案,恭喜你获得由66RPG提供的精美好.

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-23 13:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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