Project1

标题: 【急】RMVX如何使人物在使用某种物品的时候无敌? [打印本页]

作者: 思数冉    时间: 2011-7-23 23:46
标题: 【急】RMVX如何使人物在使用某种物品的时候无敌?
我的做法是增加一个无敌状态,然后使用物品的时候增加这个状态,再用公共事件处理,公共事件是并行处理,开关是开着的,内容是(简记):
循环
{
如果 (一个主角的名字)无敌
{
自动回复
}
否则
{
跳出循环
}
}


之前没有写跳出循环结果没法切换场景了,写了之后没有效果啊,于是我觉得这种方法不可行,就想到在条件分支里放脚本做到敌人攻击不减血,吸取不减魔,问题是我不怎么会脚本!= =|
于是求助各位有什么办法?(上面的自动回复只是为了模拟出效果,但是没成功,加循环是为了每次被攻击都自动回复)


谢谢了dsu_plus_rewardpost_czw
作者: 仲秋启明    时间: 2011-7-24 09:13
并行处理不用循环
作者: 絀神入化    时间: 2011-7-24 11:33
{:nm_5:}我认为最直接的方法是对方攻击、精神清零~
作者: 思数冉    时间: 2011-7-25 18:58
2L没有用啊
作者: 怪蜀黍    时间: 2011-7-25 21:06
假设你的无敌状态编号为10,那么在Game_Battler类下的def make_attack_damage_value(attacker)和def make_obj_damage_value(user, obj)这个两定义的最后一个end前都分别加上:
  1. if self.state?(10)      
  2. @hp_damage = 0
  3. @mp_damage = 0
  4. end
复制代码
这样你的无敌就实现了。这样可以使他HP、MP不变,但是会中状态。要彻底无敌,连状态也不中就还需要改脚本。
作者: fux2    时间: 2011-7-26 08:05
卧槽VX的战斗系统= =
  1. module Fux2
  2.   INVINCIBLE_INDEX = 17   #无敌状态编号
  3. end

  4. class Scene_Battle < Scene_Base
  5.   def update_target_enemy_selection
  6.     @target_enemy_window.update
  7.     if Input.trigger?(Input::B)
  8.       Sound.play_cancel
  9.       end_target_enemy_selection
  10.     elsif Input.trigger?(Input::C)
  11.       if @target_enemy_window.enemy.state?(Fux2::INVINCIBLE_INDEX)
  12.         $data_system.sounds[3].play
  13.         return
  14.       end
  15.       Sound.play_decision
  16.       @active_battler.action.target_index = @target_enemy_window.enemy.index
  17.       end_target_enemy_selection
  18.       end_skill_selection
  19.       end_item_selection
  20.       next_actor
  21.     end
  22.   end
  23. end

  24. class Game_Unit
  25.   def existing_members_bat
  26.     result = []
  27.     for battler in members
  28.       next unless battler.exist?
  29.       next if battler.state?(Fux2::INVINCIBLE_INDEX)
  30.       result.push(battler)
  31.     end
  32.     return result
  33.   end
  34. end
  35. class Game_BattleAction
  36.   def make_obj_targets(obj)
  37.     targets = []
  38.     if obj.for_opponent?
  39.       if obj.for_random?
  40.         if obj.for_one?
  41.           number_of_targets = 1
  42.         elsif obj.for_two?
  43.           number_of_targets = 2
  44.         else
  45.           number_of_targets = 3
  46.         end
  47.         number_of_targets.times do
  48.           targets.push(opponents_unit.random_target)
  49.         end
  50.       elsif obj.dual?
  51.         targets.push(opponents_unit.smooth_target(@target_index))
  52.         targets += targets
  53.       elsif obj.for_one?
  54.         targets.push(opponents_unit.smooth_target(@target_index))
  55.         targets.push(friends_unit.smooth_target(@target_index))
  56.       else
  57.         targets += opponents_unit.existing_members_bat
  58.       end
  59.     elsif obj.for_user?
  60.       targets.push(battler)
  61.     elsif obj.for_dead_friend?
  62.       if obj.for_one?
  63.         targets.push(friends_unit.smooth_dead_target(@target_index))
  64.       else
  65.         targets += friends_unit.dead_members
  66.       end
  67.     elsif obj.for_friend?
  68.       if obj.for_one?
  69.         targets.push(friends_unit.smooth_target(@target_index))
  70.       else
  71.         targets += friends_unit.existing_members
  72.       end
  73.     end
  74.     return targets.compact
  75.   end
  76. end
复制代码

作者: 思数冉    时间: 2011-7-28 19:37
楼上谢了

不过顺便问下,如果要状态无敌呢?就是负面状态在一定时间内无效
作者: fux2    时间: 2011-7-29 07:47
思数冉 发表于 2011-7-28 19:37
楼上谢了

不过顺便问下,如果要状态无敌呢?就是负面状态在一定时间内无效 ...

增加一个移除所有状态好了{:nm_7:}
反正用了这个脚本之后该状态的敌人根本不受战斗影响.
作者: 冰舞蝶恋    时间: 2011-7-29 20:01
物品施加【无敌状态】,属性为空,过几回合解除神马的自己设定。
战斗并行公共事件判断:角色如果进入【无敌】状态,如果开关XXX没被打开,则用变量代入血量、DEF(防御力),并加到满,开关XXX打开。否则的场合(则角色无无敌状态),血量、防御力减到0,再各自加上之前被代入的变量。
嗯。。就这样了,表达能力甚差,T。T希望能听得懂。
作者: 思数冉    时间: 2011-7-29 20:15
-8L:这个我知道,可我的意思是一定时间内无效,举个例子,增加了某个状态后,几个回合内,当敌人使用可以让我方角色中毒的技能时,无法服加【毒】状态,其他状态攻击也是这样,除了那几个提升还有无敌状态以为,其他状态全部无效化,这个要怎么做,咱对脚本研究不深,战斗测试,上面的无敌脚本好像可以达到这个效果,就是不知道怎么单独达到这个效果,谢谢

-9L,用7L脚本我已经搞定无敌了,不过还是谢谢你




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