赞 | 2 |
VIP | 143 |
好人卡 | 1 |
积分 | 1 |
经验 | 216792 |
最后登录 | 2019-10-10 |
在线时间 | 24 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 61
- 在线时间
- 24 小时
- 注册时间
- 2008-8-5
- 帖子
- 1924
|
你有仔细看过巴哈的解答吗?把该敌人对所有魔法属性的有效度设为 E,然后把魔法状态有效度设为 F,这样就是魔法免疫了~
死亡缠绕的做法大概可以分为四大步骤:
1、在数据库中用某种方法设置某技能的范围是战场上所有人;
2、技能选择结束时判断技能范围,如果是所有人则打开一个选择所有人的选项窗口;
3、判断选择后的对象是角色还是敌人
4、应用伤害/治愈,是敌人时伤害为正,是我方伤害为负
以下仅供参考,插入 Main 之前,然后在数据库中添加一个技能死亡缠绕,伤害设为正数,然后在备注中写:
/*范围为所有人*/
在战斗中使用这个技能就能看到效果了~
请注意红色的部分,是在原 RGSS2 脚本基础上新增的内容,方便楼主对照# 设置一个死亡缠绕专用的战场全员范围的标识
DEATH_COIL_SCOPE = 32767
#==============================================================================
# ■ Scene_Title
#------------------------------------------------------------------------------
# 处理标题画面的类。
#==============================================================================
class Scene_Title
# 载入数据库时调用
# 将描述中带有 /*范围为所有人*/ 的技能的范围设置为所有人
def check_special_skill_scope
for i in $data_skills
next if i == nil
if i.note =~ /\/\*范围为所有人\*\//
i.scope = DEATH_COIL_SCOPE
end
end
end
#--------------------------------------------------------------------------
# ● 载入数据库
#--------------------------------------------------------------------------
alias load_database_old load_database if
!method_defined? :load_database_old
def load_database
load_database_old
check_special_skill_scope
end
#--------------------------------------------------------------------------
# ● 载入战斗测试用的数据库
#--------------------------------------------------------------------------
alias load_bt_database_old load_bt_database if
!method_defined? :load_bt_database_old
def load_bt_database
load_bt_database_old
check_special_skill_scope
end
end
#==============================================================================
# ■ Window_TargetAll
#------------------------------------------------------------------------------
# 战斗画面中选择行动对象的所有角色(照猫画虎,仿照 Window_TargetEnemy 写就行了)
#==============================================================================
class Window_TargetAll < Window_Command
#--------------------------------------------------------------------------
# ● 初始化对象
#--------------------------------------------------------------------------
def initialize
commands = []
@targets = []
for target in $game_troop.members + $game_party.members
next unless target.exist?
commands.push(target.name)
@targets.push(target)
end
super(416, commands, 2, 4)
end
#--------------------------------------------------------------------------
# ● 获取角色对象
#--------------------------------------------------------------------------
def target
return @targets[@index]
end
end
#==============================================================================
# ■ Scene_Battle
#------------------------------------------------------------------------------
# 处理战斗画面的类。
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# ● 确定特技
#--------------------------------------------------------------------------
def determine_skill
@active_battler.action.set_skill(@skill.id)
@skill_window.active = false
# 范围为所有人时开始选择所有人
if @skill.scope == DEATH_COIL_SCOPE
start_target_all_selection
elsif @skill.need_selection?
if @skill.for_opponent?
start_target_enemy_selection
else
start_target_actor_selection
end
else
end_skill_selection
next_actor
end
end
#--------------------------------------------------------------------------
# ● 开始选择对象的所有角色
#--------------------------------------------------------------------------
def start_target_all_selection
@target_all_window = Window_TargetAll.new
@target_all_window.y = @info_viewport.rect.y
@info_viewport.rect.x += @target_all_window.width
@info_viewport.ox += @target_all_window.width
@actor_command_window.active = false
end
#--------------------------------------------------------------------------
# ● 选择对象所有角色结束
#--------------------------------------------------------------------------
def end_target_all_selection
@info_viewport.rect.x -= @target_all_window.width
@info_viewport.ox -= @target_all_window.width
@target_all_window.dispose
@target_all_window = nil
if @actor_command_window.index == 0
@actor_command_window.active = true
end
end
#--------------------------------------------------------------------------
# ● 更新选择对象敌方角色
#--------------------------------------------------------------------------
def update_target_all_selection
@target_all_window.update
if Input.trigger?(Input::B)
Sound.play_cancel
end_target_all_selection
elsif Input.trigger?(Input::C)
Sound.play_decision
# 默认系统传递给 action 的是角色或敌人在队伍中的索引
# 这里传递的是窗口选项的索引
# 具体见下面对于 Game_BattleAction 的修改
@active_battler.action.target_index = @target_all_window.index
end_target_all_selection
end_skill_selection
end_item_selection
next_actor
end
end
#--------------------------------------------------------------------------
# ● 更新画面
#--------------------------------------------------------------------------
def update
super
update_basic(true)
update_info_viewport # 更新显示信息的视区
if $game_message.visible
@info_viewport.visible = false
@message_window.visible = true
end
unless $game_message.visible # 在显示消息以外的情况
return if judge_win_loss # 判断胜败
update_scene_change
# 选择所有人的窗口存在时更新
if @target_all_window != nil
update_target_all_selection # 选择所有对象
elsif @target_enemy_window != nil
update_target_enemy_selection # 选择敌方对象
elsif @target_actor_window != nil
update_target_actor_selection # 选择对象角色
elsif @skill_window != nil
update_skill_selection # 选择特技
elsif @item_window != nil
update_item_selection # 选择物品
elsif @party_command_window.active
update_party_command_selection # 选择同伴指令
elsif @actor_command_window.active
update_actor_command_selection # 选择角色指令
else
process_battle_event # 战斗处理
process_action # 战斗行动
process_battle_event # 处理战斗事件
end
end
end
end
#==============================================================================
# ■ Game_BattleAction
#------------------------------------------------------------------------------
# 处理行动 (战斗中的行动) 的类。这个类在 Game_Battler 类
# 的内部使用。
#==============================================================================
class Game_BattleAction
#--------------------------------------------------------------------------
# ● 生成特技以及物品目标
# obj : 特技以及物品
#--------------------------------------------------------------------------
def make_obj_targets(obj)
targets = []
# 范围为所有人时
if obj.scope == DEATH_COIL_SCOPE
# 所有敌人在窗口选项中我方角色的前面
# 如果 @target_index 大于等于存活敌人的数量
# 说明选择的是我方角色
bound = $game_troop.existing_members.size
targets.push(@target_index < bound ?
$game_troop.smooth_target(@target_index) :
$game_party.smooth_target(@target_index - bound))
elsif obj.for_opponent?
if obj.for_random?
if obj.for_one? # 敌单体随机
number_of_targets = 1
elsif obj.for_two? # 敌二体随机
number_of_targets = 2
else # 敌三体随机
number_of_targets = 3
end
number_of_targets.times do
targets.push(opponents_unit.random_target)
end
elsif obj.dual? # 敌单体 连续
targets.push(opponents_unit.smooth_target(@target_index))
targets += targets
elsif obj.for_one? # 敌单体
targets.push(opponents_unit.smooth_target(@target_index))
else # 敌全体
targets += opponents_unit.existing_members
end
elsif obj.for_user? # 使用者
targets.push(battler)
elsif obj.for_dead_friend?
if obj.for_one? # 我方单体 (不能战斗)
targets.push(friends_unit.smooth_dead_target(@target_index))
else # 我方单体 (不能战斗)
targets += friends_unit.dead_members
end
elsif obj.for_friend?
if obj.for_one? # 我方单体
targets.push(friends_unit.smooth_target(@target_index))
else # 我方单体
targets += friends_unit.existing_members
end
end
return targets.compact
end
end
#==============================================================================
# ■ Game_Battler
#------------------------------------------------------------------------------
# 处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的
# 超级类来使用。
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# ● 计算特技以及物品造成的伤害
# user : 使用特技以及物品的人
# obj : 特技以及物品
# 将结果代入 @hp_damage 或 @mp_damage。
#--------------------------------------------------------------------------
def make_obj_damage_value(user, obj)
damage = obj.base_damage # 获取基本伤害
if damage > 0 # 伤害为正数
damage += user.atk * 4 * obj.atk_f / 100 # 打击关系度: 使用者
damage += user.spi * 2 * obj.spi_f / 100 # 精神关系度: 使用者
unless obj.ignore_defense # 无视防御力以外
damage -= self.def * 2 * obj.atk_f / 100 # 打击关系度: 对象者
damage -= self.spi * 1 * obj.spi_f / 100 # 精神关系度: 对象者
end
damage = 0 if damage < 0 # 减少为 0
elsif damage < 0 # 伤害为负数
damage -= user.atk * 4 * obj.atk_f / 100 # 打击关系度: 使用者
damage -= user.spi * 2 * obj.spi_f / 100 # 精神关系度: 使用者
end
damage *= elements_max_rate(obj.element_set) # 属性修正
damage /= 100
damage = apply_variance(damage, obj.variance) # 分散
damage = apply_guard(damage) # 防御修正
# 技能范围是所有人且对象是我方人员时
if obj.scope == DEATH_COIL_SCOPE && self.is_a?(Game_Actor)
damage = -damage # 伤害变为治疗
end
if obj.damage_to_mp
@mp_damage = damage # MP 伤害
else
@hp_damage = damage # HP 伤害
end
end
end 系统信息:本贴由本区版主认可为正确答案,66RPG感谢您的热情解答~ |
|