블루님 말씀대로 일본판으로 하니까 실행은 되는데 중요한 건,
튕겨버리더군요
스크립트는 아래와 같고,
튕길때의 에러 메세지는 그림과 같습니다.
튕기는 시점은 연계 스킬을 시전 하기전, 7번스킬을 쓴 후 60번 스킬이 발동하기 전에 튕깁니다.
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/ ◆連繋スキル - KGC_CooperationSkill◆
#_/----------------------------------------------------------------------------
#_/ 複数のスキルを組み合わせ、別のスキルを発動させる機能です。
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#==============================================================================
# ★ カスタマイズ項目 ★
#==============================================================================
module KGC
# ◆연계 스킬 배열
# ≪[발동 스킬 ID, [필요 스킬 ID1, 필요 스킬 ID2, ...]]≫
# 배열이므로, 잊지 않고 , 그리고 단락지어 주세요.
CS_SKILLS = [101, [7, 60]], # 고대의 마법
[101, [7, 60]], [101, [8, 60]], [101, [9, 60]], # 스파이럴 플레어
# ←이 ] 는 지우지 않는 것
# ◆적연계 스킬 허가
# true 로 하면, 적도 연계 스킬 판정을 실시한다.
CS_ENEMY_PERMIT = true
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
$imported["CooperationSkill"] = true
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Battler (分割定義 3)
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# ● 連繋スキルの効果適用
# user : スキルの使用者 (バトラー)
# skill : スキル
# actor : 使用者がアクター
#--------------------------------------------------------------------------
def cooperation_skill_effect(users, skill, actor)
# クリティカルフラグをクリア
self.critical = false
# スキルの効果範囲が HP 1 以上の味方で、自分の HP が 0、
# またはスキルの効果範囲が HP 0 の味方で、自分の HP が 1 以上の場合
if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
# メソッド終了
return false
end
# 有効フラグをクリア
effective = false
# コモンイベント ID が有効の場合は有効フラグをセット
effective |= skill.common_event_id > 0
# 第一命中判定
hit2 = 100 * users.size
if skill.atk_f > 0
for i in 0...users.size
user = actor ? $game_party.actors[users[i][0]] : $game_troop.enemies[users[i][0]]
hit2 += user.hit * skill.atk_f / 100
end
end
hit2 /= users.size * 0.75
hit = Integer(skill.hit * hit2 / 100)
hit_result = (rand(100) < hit)
# 不確実なスキルの場合は有効フラグをセット
effective |= hit < 100
# 命中の場合
if hit_result == true
# 威力を計算
power = 0
for i in 0...users.size
user = actor ? $game_party.actors[users[i][0]] : $game_troop.enemies[users[i][0]]
power += user.atk * skill.atk_f / 100
end
power /= users.size * 0.75
power = Integer(power + skill.power)
if power > 0
power -= self.pdef * skill.pdef_f / 200
power -= self.mdef * skill.mdef_f / 200
power = [power, 0].max
end
# 倍率を計算
rate = 0
for i in 0...users.size
user = actor ? $game_party.actors[users[i][0]] : $game_troop.enemies[users[i][0]]
rate += (user.str * skill.str_f / 100)
rate += (user.dex * skill.dex_f / 100)
rate += (user.agi * skill.agi_f / 100)
rate += (user.int * skill.int_f / 100)
end
rate /= users.size * 0.75
rate = Integer(rate + 20)
# 基本ダメージを計算
self.damage = power * rate / 20
# 属性修正
self.damage *= elements_correct(skill.element_set)
self.damage /= 100
# ダメージの符号が正の場合
if self.damage > 0
# 防御修正
if self.guarding?
self.damage /= 2
end
end
# 分散
if skill.variance > 0 and self.damage.abs > 0
amp = [self.damage.abs * skill.variance / 100, 1].max
self.damage += rand(amp+1) + rand(amp+1) - amp
end
# 第二命中判定
eva = 0; user_dex = 0
for i in 0...users.size
user = actor ? $game_party.actors[users[i][0]] : $game_troop.enemies[users[i][0]]
user_dex += user.dex
end
user_dex /= users.size
eva += 8 * self.agi / user_dex
eva += self.eva
hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
# 不確実なスキルの場合は有効フラグをセット
effective |= hit < 100
end
# 命中の場合
if hit_result == true
# 威力 0 以外の物理攻撃の場合
if skill.power != 0 and skill.atk_f > 0
# ステート衝撃解除
remove_states_shock
# 有効フラグをセット
effective = true
end
# HP からダメージを減算
last_hp = self.hp
self.hp -= self.damage
effective |= self.hp != last_hp
# ステート変化
@state_changed = false
effective |= states_plus(skill.plus_state_set)
effective |= states_minus(skill.minus_state_set)
# 威力が 0 の場合
if skill.power == 0
# ダメージに空文字列を設定
self.damage = ""
# ステートに変化がない場合
unless @state_changed
# ダメージに "Miss" を設定
self.damage = "Miss"
end
end
# ミスの場合
else
# ダメージに "Miss" を設定
self.damage = "Miss"
end
# 戦闘中でない場合
unless $game_temp.in_battle
# ダメージに nil を設定
self.damage = nil
end
# メソッド終了
return effective
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● スキルの使用可能判定
# skill_id : スキル ID
#--------------------------------------------------------------------------
def skill_can_use?(skill_id)
return super(skill_id)
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Scene_Battle (分割定義 1)
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
alias main_KGC_CooperationSkill main
def main
# 連繋スキル発動フラグを解除
@cooperation_skill_exec = false
# 連繋判定用配列を初期化
@cooperate_actors, @cooperate_enemies = [], []
# 元の処理を実行
main_KGC_CooperationSkill
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Scene_Battle (分割定義 2)
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# ● パーティコマンドフェーズ開始
#--------------------------------------------------------------------------
alias start_phase2_KGC_CooperationSkill start_phase2
def start_phase2
# 連繋スキル発動フラグを解除
@cooperation_skill_exec = false
# 連繋判定用配列を初期化
@cooperate_actors, @cooperate_enemies = [], []
# 元の処理を実行
start_phase2_KGC_CooperationSkill
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Scene_Battle (分割定義 4)
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# ● フレーム更新 (メインフェーズ ステップ 6 : リフレッシュ)
#--------------------------------------------------------------------------
alias update_phase4_step6_KGC_CooperationSkill update_phase4_step6
def update_phase4_step6
# 敵全滅判定
target_all_dead = true
for battler in (@active_battler.is_a?(Game_Actor) ? $game_troop.enemies : $game_party.actors)
if battler.exist?
target_all_dead = false
break
end
end
# 連繋スキル発動中の場合
if @cooperation_skill_exec
# 連繋スキル発動フラグを解除
@cooperation_skill_exec = false
# 判定用配列をクリア
if @active_battler.is_a?(Game_Actor)
@cooperate_actors = []
elsif @active_battler.is_a?(Game_Enemy) && KGC::CS_ENEMY_PERMIT
@cooperate_enemies = []
end
# 行動がスキルで、対象が残っている場合
elsif @active_battler.current_action.kind == 1 && !target_all_dead
# 判定用データ作成
data = [@active_battler.index, @active_battler.current_action.skill_id]
if @active_battler.is_a?(Game_Actor)
if @cooperate_actors.size >= 1
for i in 0...@cooperate_actors.size
# 自身、及び異常データを削除
if @cooperate_actors[i][0] == @active_battler.index ||
@cooperate_actors[i].size != 2
@cooperate_actors[i] = nil
end
end
@cooperate_actors.compact!
end
# 判定用配列に追加
@cooperate_actors << data
elsif @active_battler.is_a?(Game_Enemy) && KGC::CS_ENEMY_PERMIT
if @cooperate_enemies.size >= 1
for i in 0...@cooperate_enemies.size
# 自身、及び異常データを削除
if @cooperate_enemies[i][0] == @active_battler.index ||
@cooperate_enemies[i].size != 2
@cooperate_enemies[i] = nil
end
end
@cooperate_enemies.compact!
end
# 判定用配列に追加
@cooperate_enemies << data
end
# 連繋スキル発動判定
for i in 0...KGC::CS_SKILLS.size
cs = KGC::CS_SKILLS[i]
# アクター判定
if @active_battler.is_a?(Game_Actor)
exec, @exec_battlers = [], []
for j in 0...cs[1].size
exec[j] = false
for k in 0...@cooperate_actors.size
if @cooperate_actors[k] == nil || @cooperate_actors[k].size != 2
@cooperate_actors.delete_at(k)
next
end
if cs[1][j] == @cooperate_actors[k][1]
exec[j] = true
@exec_battlers << @cooperate_actors[k]
end
end
end
exec2 = true
for j in 0...@exec_battlers.size
unless $game_party.actors[@exec_battlers[j][0]].exist?
exec2 = false
break
end
end
exec3 = true
for j in 0...@exec_battlers.size
unless $game_party.actors[@exec_battlers[j][0]].skill_can_use?(cs[0])
exec3 = false
break
end
end
# 連繋スキル発動
if exec.all? && exec2 && exec3
# 発動フラグを立てる
@cooperation_skill_exec = true
if $imported["ActiveCountBattle"] && @input_battler != nil
for j in 0...@exec_battlers.size
if $game_party.actors[@exec_battlers[j][0]] == @input_battler
# コマンド入力を解除
command_input_cancel
end
end
end
# スキル取得
skill = $data_skills[cs[0]]
# SP消費
for j in 0...@exec_battlers.size
$game_party.actors[@exec_battlers[j][0]].sp -= skill.sp_cost
end
@status_window.refresh
# ヘルプウィンドウにスキル名を表示
@help_window.set_text(skill.name, 1)
if $imported["SkillMessage"]
# スキル使用メッセージ表示
show_skill_message(@active_battler, skill)
end
# アニメーション ID を設定
@animation1_id = skill.animation1_id
@animation2_id = skill.animation2_id
# 対象存在判定
target_dead = false
for target in @target_battlers
unless target.exist?
target_dead = true
break
end
end
# 攻撃対象取得
if skill.scope == 2 || skill.scope == 4 || skill.scope == 6 || target_dead
@target_battlers = []
set_target_battlers(skill.scope)
end
for target in @target_battlers
target.cooperation_skill_effect(@cooperate_actors, skill, true)
end
# 発動者全員に発動アニメを表示
for j in 0...@exec_battlers.size
$game_party.actors[@exec_battlers[j][0]].animation_id = @animation1_id
$game_party.actors[@exec_battlers[j][0]].animation_hit = true
end
# ステップ 4 に移行
@phase4_step = 4
return
end
# エネミー判定
elsif @active_battler.is_a?(Game_Enemy) && KGC::CS_ENEMY_PERMIT
exec, @exec_battlers = [], []
for j in 0...cs[1].size
exec[j] = false
for k in 0...@cooperate_enemies.size
if @cooperate_enemies[k] == nil || @cooperate_enemies[k].size != 2
@cooperate_enemies.delete_at(k)
next
end
if cs[1][j] == @cooperate_enemies[k][1]
exec[j] = true
@exec_battlers << @cooperate_enemies[k]
end
end
end
exec2 = true
for j in 0...@exec_battlers.size
unless $game_troop.enemies[@exec_battlers[j][0]].exist?
exec2 = false
break
end
end
exec3 = true
for j in 0...@exec_battlers.size
unless $game_troop.enemies[@exec_battlers[j][0]].skill_can_use?(cs[0])
exec3 = false
break
end
end
# 連繋スキル発動
if exec.all? && exec2 && exec3
# 発動フラグを立てる
@cooperation_skill_exec = true
# スキル取得
skill = $data_skills[cs[0]]
# SP消費
for j in 0...@exec_battlers.size
$game_troop.enemies[@exec_battlers[j][0]].sp -= skill.sp_cost
end
# ヘルプウィンドウにスキル名を表示
@help_window.set_text(skill.name, 1)
if $imported["SkillMessage"]
# スキル使用メッセージ表示
show_skill_message(@active_battler, skill)
end
# アニメーション ID を設定
@animation1_id = skill.animation1_id
@animation2_id = skill.animation2_id
# 対象存在判定
target_dead = false
for target in @target_battlers
unless target.exist?
target_dead = true
break
end
end
# 攻撃対象取得
if skill.scope == 2 || skill.scope == 4 || skill.scope == 6 || target_dead
@target_battlers = []
set_target_battlers(skill.scope)
end
for battler in @target_battlers
battler.cooperation_skill_effect(@cooperate_enemies, skill, false)
end
# 発動者全員に発動アニメを表示
for j in 0...@exec_battlers.size
$game_troop.enemies[@exec_battlers[j][0]].animation_id = @animation1_id
$game_troop.enemies[@exec_battlers[j][0]].animation_hit = true
end
# ステップ 4 に移行
@phase4_step = 4
return
end
end
end
else
# 判定用配列から削除
if @active_battler.is_a?(Game_Actor) && @cooperate_actors.size > 1
for i in 0...@cooperate_actors.size
if @cooperate_actors[i][0] == @active_battler.index
@cooperate_actors.delete_at(i)
break
end
end
elsif @active_battler.is_a?(Game_Enemy) && KGC::CS_ENEMY_PERMIT &&
@cooperate_enemies.size > 1
for i in 0...@cooperate_enemies.size
if @cooperate_enemies[i][0] == @active_battler.index
@cooperate_enemies.delete_at(i)
break
end
end
end
end
# 元の処理を実行
update_phase4_step6_KGC_CooperationSkill
end
#--------------------------------------------------------------------------
# ● 連繋スキル発動中判定
# battler : 判定するバトラー
#--------------------------------------------------------------------------
def cooperation_exec?(battler)
if @cooperation_skill_exec
if battler.is_a?(Game_Actor)
# 発動者に含まれているか判定
for i in 0...@exec_battlers.size
if @exec_battlers[i][0] == battler.index
return true
end
end
elsif battler.is_a?(Game_Enemy) && KGC::CS_ENEMY_PERMIT
# 発動者に含まれているか判定
for i in 0...@exec_battlers.size
if @exec_battlers[i][0] == battler.index
return true
end
end
end
end
return false
end
end