Project1
标题:
请教如何让回复技能智能化一些?
[打印本页]
作者:
文雅夕露
时间:
2017-12-2 20:05
标题:
请教如何让回复技能智能化一些?
比如说:一个复活技能(己方单体Hp为0)。
当队伍所有人都没有战斗不能的状态。这个技能无法被直接使用,直接以灰色字表示不能使用。
同理:一个回复技能。当队伍所有人Hp全满时,直接以灰色字表示不能使用。
请教这功能该怎么做到。
作者:
芯☆淡茹水
时间:
2017-12-2 20:37
本帖最后由 芯☆淡茹水 于 2017-12-2 20:40 编辑
很久没碰XP,估摸着瞎写的
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
alias xrdata_skill_can_use? skill_can_use?
def skill_can_use?(skill_id)
return false if !has_dead_member? && is_bereborn_skill?(skill_id)
return false if all_full_blood? && is_recovery_skill?(skill_id)
return xrdata_skill_can_use?(skill_id)
end
#--------------------------------------------------------------------------
def ranks
return self.is_a?(Game_Actor) ? $game_party.actors : $game_troop.enemies
end
#--------------------------------------------------------------------------
def has_dead_member?
ranks.each do |member|
next if member.hidden
return true if member.dead?
end
return false
end
#--------------------------------------------------------------------------
def all_full_blood?
ranks.each do |member|
next if member.hidden
return false if member.hp < member.maxhp
end
return true
end
#--------------------------------------------------------------------------
def is_bereborn_skill?(skill_id)
return false if $data_skills[skill_id].nil?
return $data_skills[skill_id].minus_state_set.include?(1)
end
#--------------------------------------------------------------------------
def is_recovery_skill?(skill_id)
return false if $data_skills[skill_id].nil?
return $data_skills[skill_id].power < 0
end
end
#==============================================================================
复制代码
作者:
guoxiaomi
时间:
2017-12-2 20:50
额,预计好boss要放大招,提前放复活/恢复技能也是很重要的吧?这个设定放在菜单更合适?
作者:
chd114
时间:
2017-12-4 17:23
2楼的脚本翻译一下是这样
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
alias xrdata_skill_can_use? skill_can_use?#在旧的内容里添加新内容的alias方法
def skill_can_use?(skill_id)#判断技能能否使用
return false if !has_dead_member? && is_bereborn_skill?(skill_id)#技能以阵亡队友为目标,但是不存在阵亡队友,不可用
return false if all_full_blood? && is_recovery_skill?(skill_id)#技能是恢复技能,但是团队成员全部满血,不可用
return xrdata_skill_can_use?(skill_id)#读取旧的内容
end
#--------------------------------------------------------------------------
def ranks#判断使用者/使用对象所属团队(角色的场合返回团队party,敌人的场合返回敌群troop)
return self.is_a?(Game_Actor) ? $game_party.actors : $game_troop.enemies
end
#--------------------------------------------------------------------------
def has_dead_member?#是否存在阵亡队友
ranks.each do |member|
next if member.hidden
return true if member.dead?
end
return false
end
#--------------------------------------------------------------------------
def all_full_blood?#团队内队员是否全部满血
ranks.each do |member|
next if member.hidden
return false if member.hp < member.maxhp
end
return true
end
#--------------------------------------------------------------------------
def is_bereborn_skill?(skill_id)#技能是否可对阵亡队友使用
return false if $data_skills[skill_id].nil?
return $data_skills[skill_id].minus_state_set.include?(1)
end
#--------------------------------------------------------------------------
def is_recovery_skill?(skill_id)#技能是否属性恢复技能
return false if $data_skills[skill_id].nil?
return $data_skills[skill_id].power < 0
end
end
#==============================================================================
复制代码
作者:
SailCat
时间:
2017-12-4 18:18
本帖最后由 SailCat 于 2017-12-4 18:20 编辑
参见我的脚本:技能消耗你想消耗的一切:
https://rpg.blue/forum.php?mod=viewthread&tid=403718
插入那个脚本
然后写备注(写描述里):
没有人战斗不能时没法用:#cf:$game_party.actors.inject(false){|f,x| f||=x.hp0?}
没有人不满血时没法用:#cf:$game_party.actors.inject(false){|f,x| f||=x.hp<x.maxhp}
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1