Project1
标题:
如何设置出可以反弹敌人伤害的技能啊?
[打印本页]
作者:
lonelydragon64
时间:
2013-10-15 23:32
标题:
如何设置出可以反弹敌人伤害的技能啊?
本帖最后由 lonelydragon64 于 2013-10-17 00:09 编辑
各位大虾,小弟初学,头都想破了,如何能设置出反弹敌人伤害的技能啊~~~求教啊~在线等~
作者:
美丽晨露
时间:
2013-10-15 23:40
本帖最后由 美丽晨露 于 2013-10-15 23:43 编辑
可以使用攻击和魔法反弹的脚本
然后设置技能和状态即可。
# ▼▲▼ XRXS27. 特殊効果 SuperEX「魔法反射」 ver.1.03 ▼▲▼
# by 桜雅 在土, clum-sea
#==============================================================================
# □ カスタマイズポイント
#==============================================================================
class Scene_Battle
SKILL_REFREX_STATE_NAME = "攻击反弹" # 「魔法反射」ステート名
SKILL_REFREX_STATE_NAME1 = "攻击反弹高级" # 「魔法反射」ステート名
SKILL_REFREX_STATE_NAME2 = "" # 「魔法反射」ステート名
SKILL_REFREX_STATE_NAME3 = "" # 「魔法反射」ステート名
SKILL_REFREX_STATE_NAME4 = "" # 「魔法反射」ステート名
SKILL_REFREX_ANIMATION_ID = 303 # 魔法反射のアニメーションID
REFREX_PENETRATION_ELEMENT_SKILL_NAME = "攻击反弹" # 「反射貫通」属性名
end
class Scene_Battle
#--------------------------------------------------------------------------
# ○ スキルが魔法であるかどうか
#--------------------------------------------------------------------------
def skill2_is_a_magic?(skill)
return false unless skill.is_a?(RPG::Skill)
return (skill.int_f > skill.str_f)
end
#--------------------------------------------------------------------------
# ○ スキルが魔法であるかどうか
#--------------------------------------------------------------------------
def skill3_is_a_magic?(skill)
return false unless skill.is_a?(RPG::Skill)
return (skill.int_f > skill.atk_f)
end
end
#=============================================================================
# ◇ 「魔法反射」ステート by 桜雅 在土
#=============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# ● スキルまたはアイテムの対象側バトラー設定
#--------------------------------------------------------------------------
alias xrxs_skill_refrex_set_target_battlers set_target_battlers
def set_target_battlers(scope)
xrxs_skill_refrex_set_target_battlers(scope)
# スキル使用時
if @active_battler.current_action.kind == 1
# 魔法である場合
unless skill2_is_a_magic?(@skill) or skill3_is_a_magic?(@skill)
element_id = get_refrex_skill_penetration_id
# スキルに反射貫通が付加されているか。
skill_state_penetration(@skill, element_id, @active_battler)
if @active_battler.penetration != true
# 検索
for target in @target_battlers.dup
# 魔法反射ステートにかかっているか?
state_id = get_skillal_refrex_id
state_id1 = get_skillal_refrex_id1
state_id2 = get_skillal_refrex_id2
state_id3 = get_skillal_refrex_id3
state_id4 = get_skillal_refrex_id4
if state_id != nil and target.state?(state_id)
# 反射---
target.refrexed = true
@target_battlers.delete(target)
unless @target_battlers.include?(@active_battler)
@target_battlers.push(@active_battler)
end
# ---反射の設定完了
end
if state_id1 != nil and target.state?(state_id1)
# 反射---
target.refrexed = true
@target_battlers.delete(target)
unless @target_battlers.include?(@active_battler)
@target_battlers.push(@active_battler)
end
# ---反射の設定完了
end
if state_id2 != nil and target.state?(state_id2)
# 反射---
target.refrexed = true
@target_battlers.delete(target)
unless @target_battlers.include?(@active_battler)
@target_battlers.push(@active_battler)
end
# ---反射の設定完了
end
if state_id3 != nil and target.state?(state_id3)
# 反射---
target.refrexed = true
@target_battlers.delete(target)
unless @target_battlers.include?(@active_battler)
@target_battlers.push(@active_battler)
end
# ---反射の設定完了
end
if state_id4 != nil and target.state?(state_id4)
# 反射---
target.refrexed = true
@target_battlers.delete(target)
unless @target_battlers.include?(@active_battler)
@target_battlers.push(@active_battler)
end
# ---反射の設定完了
end
end
end
end
end
end
#--------------------------------------------------------------------------
# ● スキルに反射貫通属性が付加されているか
#--------------------------------------------------------------------------
def skill_state_penetration(skill, element_id, user)
if skill.element_set.include?(element_id)
# 反射フラグリセット
user.refrexed = false
# 貫通フラグをセット
user.penetration = true
end
end
#--------------------------------------------------------------------------
# ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション)
#--------------------------------------------------------------------------
alias xrxs_skill_refrex_update_phase4_step4 update_phase4_step4
def update_phase4_step4
# 対象側アニメーション
xrxs_skill_refrex_update_phase4_step4
# 魔法反射(貫通しない場合)
for target in $game_party.actors + $game_troop.enemies - @target_battlers
next if target.refrexed == nil or target.refrexed == false
target.animation_id = SKILL_REFREX_ANIMATION_ID
target.animation_hit = (target.damage != "Miss")
# 反射フラグリセット
target.refrexed = false
end
for target in @target_battlers
# 反射フラグリセット
target.refrexed = false
end
# 貫通フラグリセット
@active_battler.penetration = false
end
#--------------------------------------------------------------------------
# ○ 魔法反射ステートのID取得
#--------------------------------------------------------------------------
def get_skillal_refrex_id
if @xrxs27a_magic_refrex_state_id == nil
result = nil
for i in 1 ... $data_states.size
if $data_states[i].name[/\A#{SKILL_REFREX_STATE_NAME}\Z/]
result = $data_states[i].id
break
end
end
@xrxs27a_magic_refrex_state_id = result
end
return @xrxs27a_magic_refrex_state_id
end
#--------------------------------------------------------------------------
# ○ 魔法反射ステートのID取得
#--------------------------------------------------------------------------
def get_skillal_refrex_id1
if @xrxs27a_magic_refrex_state_id1 == nil
result = nil
for i in 1 ... $data_states.size
if $data_states[i].name[/\A#{SKILL_REFREX_STATE_NAME1}\Z/]
result = $data_states[i].id
break
end
end
@xrxs27a_magic_refrex_state_id1 = result
end
return @xrxs27a_magic_refrex_state_id1
end
#--------------------------------------------------------------------------
# ○ 魔法反射ステートのID取得
#--------------------------------------------------------------------------
def get_skillal_refrex_id2
if @xrxs27a_magic_refrex_state_id2 == nil
result = nil
for i in 1 ... $data_states.size
if $data_states[i].name[/\A#{SKILL_REFREX_STATE_NAME2}\Z/]
result = $data_states[i].id
break
end
end
@xrxs27a_magic_refrex_state_id2 = result
end
return @xrxs27a_magic_refrex_state_id2
end
#--------------------------------------------------------------------------
# ○ 魔法反射ステートのID取得
#--------------------------------------------------------------------------
def get_skillal_refrex_id3
if @xrxs27a_magic_refrex_state_id3 == nil
result = nil
for i in 1 ... $data_states.size
if $data_states[i].name[/\A#{SKILL_REFREX_STATE_NAME3}\Z/]
result = $data_states[i].id
break
end
end
@xrxs27a_magic_refrex_state_id3 = result
end
return @xrxs27a_magic_refrex_state_id3
end
#--------------------------------------------------------------------------
# ○ 魔法反射ステートのID取得
#--------------------------------------------------------------------------
def get_skillal_refrex_id4
if @xrxs27a_magic_refrex_state_id4 == nil
result = nil
for i in 1 ... $data_states.size
if $data_states[i].name[/\A#{SKILL_REFREX_STATE_NAME4}\Z/]
result = $data_states[i].id
break
end
end
@xrxs27a_magic_refrex_state_id4 = result
end
return @xrxs27a_magic_refrex_state_id4
end
#--------------------------------------------------------------------------
# ○ 反射貫通属性のID取得
#--------------------------------------------------------------------------
def get_refrex_skill_penetration_id
if @xrxs27a_refrex_penetration_element_id == nil
result = nil
for i in 1 ... $data_system.elements.size
if $data_system.elements[i] == REFREX_PENETRATION_ELEMENT_SKILL_NAME
result = i
break
end
end
@xrxs27a_refrex_penetration_element_id = result
end
return @xrxs27a_refrex_penetration_element_id
end
end
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
attr_accessor :refrexed
attr_accessor :penetration
end
复制代码
# ▼▲▼ XRXS27. 特殊効果 SuperEX「魔法反射」 ver.1.03 ▼▲▼
# by 桜雅 在土, clum-sea
#==============================================================================
# □ カスタマイズポイント
#==============================================================================
class Scene_Battle
MAGIC_REFREX_STATE_NAME = "魔法反弹" # 「魔法反射」ステート名
MAGIC_REFREX_STATE_NAME1 = "魔法反弹高级" # 「魔法反射」ステート名
MAGIC_REFREX_STATE_NAME2 = "" # 「魔法反射」ステート名
MAGIC_REFREX_STATE_NAME3 = "" # 「魔法反射」ステート名
MAGIC_REFREX_STATE_NAME4 = "" # 「魔法反射」ステート名
MAGIC_REFREX_ANIMATION_ID = 303 # 魔法反射のアニメーションID
REFREX_PENETRATION_ELEMENT_NAME = "魔法反弹" # 「反射貫通」属性名
end
class Scene_Battle
#--------------------------------------------------------------------------
# ○ スキルが魔法であるかどうか
#--------------------------------------------------------------------------
def skill_is_a_magic?(skill)
return false unless skill.is_a?(RPG::Skill)
return (skill.int_f > skill.str_f) if skill.power > 0
end
#--------------------------------------------------------------------------
# ○ スキルが魔法であるかどうか
#--------------------------------------------------------------------------
def skill1_is_a_magic?(skill)
return false unless skill.is_a?(RPG::Skill)
return (skill.int_f > skill.atk_f) if skill.power > 0
end
end
#=============================================================================
# ◇ 「魔法反射」ステート by 桜雅 在土
#=============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# ● スキルまたはアイテムの対象側バトラー設定
#--------------------------------------------------------------------------
alias xrxs_magic_refrex_set_target_battlers set_target_battlers
def set_target_battlers(scope)
xrxs_magic_refrex_set_target_battlers(scope)
# スキル使用時
if @active_battler.current_action.kind == 1
# 魔法である場合
if skill_is_a_magic?(@skill) or skill1_is_a_magic?(@skill)
element_id = get_refrex_penetration_id
# スキルに反射貫通が付加されているか。
skill_state_penetration(@skill, element_id, @active_battler)
if @active_battler.penetration != true
# 検索
for target in @target_battlers.dup
# 魔法反射ステートにかかっているか?
state_id = get_magical_refrex_id
state_id1 = get_magical_refrex_id1
state_id2 = get_magical_refrex_id2
state_id3 = get_magical_refrex_id3
state_id4 = get_magical_refrex_id4
if state_id != nil and target.state?(state_id)
# 反射---
target.refrexed = true
@target_battlers.delete(target)
unless @target_battlers.include?(@active_battler)
@target_battlers.push(@active_battler)
end
# ---反射の設定完了
end
if state_id1 != nil and target.state?(state_id1)
# 反射---
target.refrexed = true
@target_battlers.delete(target)
unless @target_battlers.include?(@active_battler)
@target_battlers.push(@active_battler)
end
# ---反射の設定完了
end
if state_id2 != nil and target.state?(state_id2)
# 反射---
target.refrexed = true
@target_battlers.delete(target)
unless @target_battlers.include?(@active_battler)
@target_battlers.push(@active_battler)
end
# ---反射の設定完了
end
if state_id3 != nil and target.state?(state_id3)
# 反射---
target.refrexed = true
@target_battlers.delete(target)
unless @target_battlers.include?(@active_battler)
@target_battlers.push(@active_battler)
end
# ---反射の設定完了
end
if state_id4 != nil and target.state?(state_id4)
# 反射---
target.refrexed = true
@target_battlers.delete(target)
unless @target_battlers.include?(@active_battler)
@target_battlers.push(@active_battler)
end
# ---反射の設定完了
end
end
end
end
end
end
#--------------------------------------------------------------------------
# ● スキルに反射貫通属性が付加されているか
#--------------------------------------------------------------------------
def skill_state_penetration(skill, element_id, user)
if skill.element_set.include?(element_id)
# 反射フラグリセット
user.refrexed = false
# 貫通フラグをセット
user.penetration = true
end
end
#--------------------------------------------------------------------------
# ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション)
#--------------------------------------------------------------------------
alias xrxs_magic_refrex_update_phase4_step4 update_phase4_step4
def update_phase4_step4
# 対象側アニメーション
xrxs_magic_refrex_update_phase4_step4
# 魔法反射(貫通しない場合)
for target in $game_party.actors + $game_troop.enemies - @target_battlers
next if target.refrexed == nil or target.refrexed == false
target.animation_id = MAGIC_REFREX_ANIMATION_ID
target.animation_hit = (target.damage != "Miss")
# 反射フラグリセット
target.refrexed = false
end
for target in @target_battlers
# 反射フラグリセット
target.refrexed = false
end
# 貫通フラグリセット
@active_battler.penetration = false
end
#--------------------------------------------------------------------------
# ○ 魔法反射ステートのID取得
#--------------------------------------------------------------------------
def get_magical_refrex_id
if @xrxs27_magic_refrex_state_id == nil
result = nil
for i in 1 ... $data_states.size
if $data_states[i].name[/\A#{MAGIC_REFREX_STATE_NAME}\Z/]
result = $data_states[i].id
break
end
end
@xrxs27_magic_refrex_state_id = result
end
return @xrxs27_magic_refrex_state_id
end
#--------------------------------------------------------------------------
# ○ 魔法反射ステートのID取得
#--------------------------------------------------------------------------
def get_magical_refrex_id1
if @xrxs27_magic_refrex_state_id1 == nil
result = nil
for i in 1 ... $data_states.size
if $data_states[i].name[/\A#{MAGIC_REFREX_STATE_NAME1}\Z/]
result = $data_states[i].id
break
end
end
@xrxs27_magic_refrex_state_id1 = result
end
return @xrxs27_magic_refrex_state_id1
end
#--------------------------------------------------------------------------
# ○ 魔法反射ステートのID取得
#--------------------------------------------------------------------------
def get_magical_refrex_id2
if @xrxs27_magic_refrex_state_id2 == nil
result = nil
for i in 1 ... $data_states.size
if $data_states[i].name[/\A#{MAGIC_REFREX_STATE_NAME2}\Z/]
result = $data_states[i].id
break
end
end
@xrxs27_magic_refrex_state_id2 = result
end
return @xrxs27_magic_refrex_state_id2
end
#--------------------------------------------------------------------------
# ○ 魔法反射ステートのID取得
#--------------------------------------------------------------------------
def get_magical_refrex_id3
if @xrxs27_magic_refrex_state_id3 == nil
result = nil
for i in 1 ... $data_states.size
if $data_states[i].name[/\A#{MAGIC_REFREX_STATE_NAME3}\Z/]
result = $data_states[i].id
break
end
end
@xrxs27_magic_refrex_state_id3 = result
end
return @xrxs27_magic_refrex_state_id3
end
#--------------------------------------------------------------------------
# ○ 魔法反射ステートのID取得
#--------------------------------------------------------------------------
def get_magical_refrex_id4
if @xrxs27_magic_refrex_state_id4 == nil
result = nil
for i in 1 ... $data_states.size
if $data_states[i].name[/\A#{MAGIC_REFREX_STATE_NAME4}\Z/]
result = $data_states[i].id
break
end
end
@xrxs27_magic_refrex_state_id4 = result
end
return @xrxs27_magic_refrex_state_id4
end
#--------------------------------------------------------------------------
# ○ 反射貫通属性のID取得
#--------------------------------------------------------------------------
def get_refrex_penetration_id
if @xrxs27_refrex_penetration_element_id == nil
result = nil
for i in 1 ... $data_system.elements.size
if $data_system.elements[i] == REFREX_PENETRATION_ELEMENT_NAME
result = i
break
end
end
@xrxs27_refrex_penetration_element_id = result
end
return @xrxs27_refrex_penetration_element_id
end
end
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
attr_accessor :refrexed
attr_accessor :penetration
end
复制代码
作者:
lonelydragon64
时间:
2013-10-17 00:07
美丽晨露 发表于 2013-10-15 23:40
可以使用攻击和魔法反弹的脚本
然后设置技能和状态即可。
哇哦~ 谢谢BOSS~~ 又有得学习了~~ 万分感谢啊·
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1