Project1
标题:
请问如何制作治疗时伤害敌人效果的状态?
[打印本页]
作者:
bloodyliao
时间:
2014-10-29 09:26
标题:
请问如何制作治疗时伤害敌人效果的状态?
就是2个状态,效果分别为:
状态1:目标受到治疗时,随机对1个敌人造成伤害,伤害值为治疗量的x%
状态2:目标受到治疗时,对全体敌人造成伤害,伤害值为治疗量的x%
请问如何实现呢?
作者:
VIPArcher
时间:
2014-10-29 09:31
本帖最后由 VIPArcher 于 2014-10-29 09:36 编辑
不嫌麻烦的话就这么做吧。
技能公式v[1]=治疗公式;v[1] #其中v[1]表示1号变量,你自己拿一个临时变量放在这里使用吧。
技能再挂钩一个公共事件,内容强制战斗指令也好,增减敌人体力值也好。应该都可以做到的。
如果你这么做的话,下面这个脚本或许是你所需要的
https://rpg.blue/thread-372077-1-1.html
作者:
chd114
时间:
2014-10-30 22:33
=begin
效果:
让技能或物品可以作用在敌人与我方队员身上
可以让同样的技能,使用在敌方身上与我方身上不同(也可以相同)
这样就可以只做出攻击队友来除去睡眠状态这一类的效果
使用方法:
在技能/物品备注里面填写 [for_both]
则可以指定为双向技能/物品
在技能/物品备注里面填写 [twin_item ID]
则可以指定双向技能/物品所使用的第二项技能/物品
没有填写时,默认为原技能ID+1
设定方法
下面的说明,技能与物品通用
要设定为双向技能的技能(假设为18号技能)备注中填写 [for_both]
效果范围设定为“敌方单体”
将第19号技能的效果范围设定为“我方单体”
其他的设定可以自由修改,我方的效果可以与敌方的不同。
如此选择目标时,则会先出现敌方目标窗口,
按 B 键再出现我方目标窗口。
如果第一个技能的效果范围设定为“我方单体”
那第二个技能必须设定为“敌方单体”
如此选择目标时,则会先出现我方目标窗口,
按 B 键再出现敌方目标窗口。
注意:
如果是1号技能(即普通攻击),在不修改脚本的情况下,2号技能就是防御
那这时候就可以使用 [twin_item ID] 来指定对我方使用技能的效果是几号技能
例如用 [twin_item 30],那在对我方使用攻击时,实际产生效用的是30号技能
=end
复制代码
class RPG::UsableItem < RPG::BaseItem
#--------------------------------------------------------------------------
# ● 判断是否为双向技能
#--------------------------------------------------------------------------
def for_both?
return @for_both unless @for_both.nil?
self.note.split(/[\r\n]+/).each{ |line|
if line =~ /\[for_both\]/
return @for_both = true
end}
return @for_both = false
end
#--------------------------------------------------------------------------
# ● 指定双向技能/物品的第二个技能/物品
#--------------------------------------------------------------------------
def twin_item
return self.id unless for_both?
return @twin_item_id unless @twin_item_id.nil?
@twin_item_id = self.id + 1
self.note.split(/[\r\n]+/).each{ |line|
if line =~ /\[twin_item (\d+)\]/
@twin_item_id = $1.to_i
end}
return @twin_item_id
end
end
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ● 回合开始
#--------------------------------------------------------------------------
alias skill_for_both_turn_start turn_start
def turn_start
selection_reset
skill_for_both_turn_start
end
#--------------------------------------------------------------------------
# ● 目标选择初始化
#--------------------------------------------------------------------------
def selection_reset
@from_enemy_selection = false
@from_actor_selection = false
end
#--------------------------------------------------------------------------
# ● 取消选择敌人目标时
#--------------------------------------------------------------------------
alias skill_for_both_on_enemy_cancel on_enemy_cancel
def on_enemy_cancel
item = current_used_item
if item.for_both? && !@from_actor_selection # 判断是否为双向技能
change_current_item_selection(item)
@from_enemy_selection = true
select_actor_selection # 开启我方队员选择窗口
@enemy_window.hide
else
selection_reset
skill_for_both_on_enemy_cancel # 呼叫原有方法
end
end
#--------------------------------------------------------------------------
# ● 取消选择同伴目标时
#--------------------------------------------------------------------------
alias skill_for_both_on_actor_cancel on_actor_cancel
def on_actor_cancel
item = current_used_item
if item.for_both? && !@from_enemy_selection # 判断是否为双向技能
change_current_item_selection(item)
@from_actor_selection = true
select_enemy_selection # 开启我方队员选择窗口
@actor_window.hide
else
if @actor_command_window.current_symbol == :attack
@actor_command_window.activate
end
selection_reset
skill_for_both_on_actor_cancel # 呼叫原有方法
end
end
#--------------------------------------------------------------------------
# ● 获取当前技能/物品
#--------------------------------------------------------------------------
def current_used_item
case @actor_command_window.current_symbol
when :attack
return $data_skills[1]
when :skill
return @skill
when :item
return @item
end
end
#--------------------------------------------------------------------------
# ● 当前技能/物品替换
#--------------------------------------------------------------------------
def change_current_item_selection(item)
case @actor_command_window.current_symbol
when :attack, :skill
BattleManager.actor.input.set_skill(item.twin_item)
when :item
BattleManager.actor.input.set_item(item.twin_item)
end
end
end
class Game_BattlerBase
#--------------------------------------------------------------------------
# ● 判断物品是否能使用
#--------------------------------------------------------------------------
alias skill_for_both_item_conditions_met? item_conditions_met?
def item_conditions_met?(item)
r_item_id = has_twin_item?(item)
if r_item_id
real_item = $data_items[r_item_id]
return skill_for_both_item_conditions_met?(real_item)
else
skill_for_both_item_conditions_met?(item)
end
end
#--------------------------------------------------------------------------
# ● 判断物品是否双向物品的第二个物品
#--------------------------------------------------------------------------
def has_twin_item?(item)
$data_items.each{ |i|
next unless i
next unless i.for_both?
t_id = i.twin_item
return i.id if t_id == item.id
}
return false
end
end
复制代码
用这个呗
作者:
bloodyliao
时间:
2014-11-1 01:58
这样好像更麻烦了……有米有检测HP,只要上升就伤害敌人什么的?
作者:
三途亚梦
时间:
2014-11-1 23:02
本帖最后由 三途亚梦 于 2014-11-2 01:28 编辑
bloodyliao 发表于 2014-11-1 01:58
这样好像更麻烦了……有米有检测HP,只要上升就伤害敌人什么的?
实现的方法是有的,不过还是有些复杂的。
你需要设置相应的状态,这个部分应该就不需要多说了。
然后,直接到 game_battler
大概第358行的
@result.make_damage(value.to_i, item)
下面加上这么一段
这段的意思是当技能或物品是治疗效果,且技能目标处在2号状态时,
将技能的造成的伤害给变量1,
受到伤害的单位的id给变量2,
然后执行公共事件1。
if self.actor? && item.damage.recover? && item.damage.to_hp? && self.states.include?($data_states[2])
$game_variables[1] = value.to_i * -1
$game_variables[2] = self.id
$game_temp.reserve_common_event(1)
end
复制代码
然后在公共事件1中写这么一段。
@params = [1, $game_variables[2], 101 , -1]
command_339
复制代码
它的效果是强制战斗指令让变量2对应的玩家人物对随机目标使用101号技能。
接着设置101号技能。
技能的公式为 v[1],目标是敌人单体。
即该技能造成伤害为变量1,也就是治疗效果造成的伤害。
以上设置全部完成后就是
当一个玩家人物处在状态2的时候,受到任何治疗效果的技能/道具的治疗时,都会将相当于治疗量的伤害随机给予一个敌方单位。
这个效果不会响应事件造成的HP变动、不会响应状态或者特性带来的HP自动回复。
然后你需要的第二个状态给予全体伤害,模仿以上方法设置就可以。
变量可以和状态2使用同一个,不会造成冲突。
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1