Project1

标题: 仿手机网游天龙八部自动加血自动加蓝 [打印本页]

作者: Zhangjiaxing1    时间: 2013-5-8 17:40
标题: 仿手机网游天龙八部自动加血自动加蓝
在rm上实现这种效果,怎么设置简单点,用脚本还是事件方便点,具体就是用一个变量作为血库,战斗胜利后补充角色hp(sp),补完了就没了,如果不够的话,按照队伍顺序补血,如果角色死亡则不补,直接跳到下一个。
作者: 亿万星辰    时间: 2013-5-8 18:35
用事件吧,战斗结束后执行公共事件,挨个计算每个活着角色的缺失血量,然后和变量选一个更小的值,然后把这个值恢复给这个角色,变量减去这个值。
作者: 芯☆淡茹水    时间: 2013-5-9 00:11
本帖最后由 芯☆淡茹水 于 2013-5-9 01:49 编辑

    LS是事件,本楼是脚本。(事件,脚本都有了)


下面的脚本是在战斗场景胜利后插入了一段(因为比较简单,未测试)


复制下面的脚本,插入 main 前。

RUBY 代码复制
  1. #==============================================================================
  2. # 储存回复 HP 血量的变量 ID
  3. VAR_HP = 1
  4. # 储存回复 SP 血量的变量 ID
  5. VAR_SP = 2
  6. #  战斗不能的状态 ID ,加HP/SP时排除死亡角色。
  7. DEAD_ID = 1
  8. #==============================================================================
  9. class Scene_Battle
  10.   def battle_end(result)
  11.     # 清除战斗中标志
  12.     $game_temp.in_battle = false
  13.     # 清除全体同伴的行动
  14.     $game_party.clear_actions
  15.     # 解除战斗用状态
  16.     for actor in $game_party.actors
  17.       actor.remove_states_battle
  18.     end
  19.     # 清除敌人
  20.     $game_troop.enemies.clear
  21.     # 调用战斗返回
  22.     if $game_temp.battle_proc != nil
  23.       $game_temp.battle_proc.call(result)
  24.       $game_temp.battle_proc = nil
  25.     end
  26.     ###########################################################################
  27.     #  HP
  28.     if $game_variables[VAR_HP] > 0
  29.       for i in 0...$game_party.actors.size
  30.         if $game_variables[VAR_HP] == 0
  31.           break
  32.         end
  33.         actor = $game_party.actors[i]
  34.         if not actor.state?(DEAD_ID) and actor.hp < actor.maxhp
  35.           if actor.maxhp - actor.hp <= $game_variables[VAR_HP]
  36.             renew_hp = actor.maxhp - actor.hp
  37.           else
  38.             renew_hp = $game_variables[VAR_HP]
  39.           end
  40.           $game_variables[VAR_HP] -= renew_hp
  41.           actor.hp += renew_hp
  42.         end
  43.       end
  44.     end
  45.     #  SP
  46.     if $game_variables[VAR_SP] > 0
  47.       for i in 0...$game_party.actors.size
  48.         if $game_variables[VAR_SP] == 0
  49.           break
  50.         end
  51.         actor = $game_party.actors[i]
  52.         if not actor.state?(DEAD_ID) and actor.sp < actor.maxsp
  53.           if actor.maxsp - actor.sp <= $game_variables[VAR_SP]
  54.             renew_sp = actor.maxsp - actor.sp
  55.           else
  56.             renew_sp = $game_variables[VAR_SP]
  57.           end
  58.           $game_variables[VAR_SP] -= renew_sp
  59.           actor.sp += renew_sp
  60.         end
  61.       end
  62.     end
  63.     ###########################################################################
  64.     # 切换到地图画面
  65.     $scene = Scene_Map.new
  66.   end
  67. end
  68. #===============================================================================

作者: 亿万星辰    时间: 2013-5-9 07:05
本帖最后由 亿万星辰 于 2013-5-9 07:18 编辑
  1. for actor in $game_party.actors
  2.   break if $game_variables[VAR_HP] <= 0 and $game_variables[VAR_SP] <= 0
  3.   unless actor.dead?
  4.     recoverhp = [actor.maxhp - actor.hp, $game_variables[VAR_HP]].min
  5.     recoversp = [actor.maxsp - actor.sp, $game_variables[VAR_SP]].min
  6.     actor.hp += recoverhp
  7.     actor.sp += recoversp
  8.     $game_variables[VAR_HP] -= recoverhp
  9.     $game_variables[VAR_SP] -= recoversp
  10.   end
  11. end
复制代码
精简了一下中间的部分,楼上也可以看下~@芯☆淡茹水  
作者: Zhangjiaxing1    时间: 2013-5-9 11:26
我想到一个:
   for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]  
     if not actor.state?(1)
       if actor.maxhp - actor.hp > $game_variables[1]
         actor.hp += $game_variables[1]
        $game_variables[1] = 0
       else
       $game_variables[1] -= actor.maxhp - actor.hp
       actor.hp  = actor.maxhp
    end
   end
end
作者: chd114    时间: 2013-5-11 12:21
楼主难道还是没解决吗?这个问题可以设定成已经解决了@hcm @hys111111  




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