#밑으로 스크립트.. 사용법은 주석중간에 제가 달아두었으니 쓰세요.
#중뷁이면... 자삭.
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/ ◆다단 공격 - KGC_MultiAttack◆
#_/----------------------------------------------------------------------------
#_/ 여러 차례 효과를 적용하는 행동을 작성합니다.
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#=======================================================================
# ★ 커스터마이즈 항목 ★
#=======================================================================
module KGC
# ◆공격 판정용SE파일명
# (대문자·소문자는 묻지 않는다. 확장자(extension) 불요)
MATK_HIT_SE = "ABC"
#이것은 사운드 파일입니다. 애니매이션중 이걸 넣으면 그때 데미지가 나갑니다.
#즉, 애니매이션중 ABC사운드 파일이 재생될때마다 공격이 된다는 소리죠.
#맨 마지막에 나가는 기존 데미지 처리는 정상적으로 돌아갑니다.
#사운드 폴더 내에 ABC파일이 없으면 안되구요, 원하시면 ABC를 바꾸시면 됩니다.
# (물론, 그 사운드 파일이 사운드 폴더 안에 있는 한에요.)
# ◆다단 공격시 ,1Hit마다 스테이터스 윈도우를 재묘화
# (쓸데없게 무겁기 때문에 , 고속화ACB이외에서는 사용하지 않는 것이 무난)
MATK_HIT_REFRESH = false
end
#즉, 이것을 true로 바꾸면.. 렉이 발생할 수 있다는 소리입니다.
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
$imported = {} if $imported == nil
$imported["MultiAttack"] = true
#아직 이건 잘 모르겠네요; 위쪽에 사운드 파일과 연관이 있는것같은..데
# 이 밑으로는 데미지 처리 스크립트니 건들지 않는게 좋아요.
#==============================================================================
# ■ Sprite_Battler
#==============================================================================
class Sprite_Battler < RPG::Sprite
#--------------------------------------------------------------------------
# ● 오브젝트 초기화
#--------------------------------------------------------------------------
alias initialize_KGC_MultiAttack initialize
def initialize(viewport, battler = nil)
initialize_KGC_MultiAttack(viewport, battler)
@_damage_sprite_array, @_damage_duration_array = [], []
end
#--------------------------------------------------------------------------
# ● 해방
#--------------------------------------------------------------------------
alias dispose_KGC_MultiAttack dispose
def dispose
for i in 0...@_damage_sprite_array.size
dispose_damage(i)
end
dispose_KGC_MultiAttack
end
#--------------------------------------------------------------------------
# ● 다단 히트 판정
#--------------------------------------------------------------------------
def multi_attack?
if @_multi_attack
@_multi_attack = false
return true
end
return false
end
#------------------------------------------------------------------------
# ● 데미지 스프라이트 작성
#------------------------------------------------------------------------
def damage(value, critical)
@_damage_sprite_array.compact!
@_damage_duration_array.compact!
super
sprite = RPG::Sprite.new
sprite.bitmap = @_damage_sprite.bitmap.dup
sprite.ox = @_damage_sprite.ox
sprite.oy = @_damage_sprite.oy
sprite.x = @_damage_sprite.x
sprite.y = @_damage_sprite.y + @_damage_sprite_array.size * 4
sprite.z = @_damage_sprite.z
@_damage_sprite_array.unshift(sprite)
@_damage_duration_array.unshift(40)
dispose_damage(-1)
end
#--------------------------------------------------------------------------
# ● 데미지 스프라이트 파기
#--------------------------------------------------------------------------
def dispose_damage(index = nil)
return if index == nil
if index >= 0 && @_damage_sprite_array[index] != nil
@_damage_sprite_array[index].bitmap.dispose
@_damage_sprite_array[index].dispose
@_damage_sprite_array[index] = @_damage_duration_array[index] = nil
elsif index < 0 && @_damage_sprite != nil
@_damage_sprite.bitmap.dispose
@_damage_sprite.dispose
@_damage_sprite, @_damage_duration = nil, 0
end
end
#--------------------------------------------------------------------------
# ● 애니메이션 실행 타이밍
#--------------------------------------------------------------------------
def animation_process_timing(timing, hit)
if (timing.condition == 0) || (timing.condition == 1 && hit) ||
(timing.condition == 2 && !hit)
if timing.se.name != ""
@_multi_attack |= timing.se.name.upcase == KGC::MATK_HIT_SE.upcase
end
end
super
end
#--------------------------------------------------------------------------
# ● 프레임 갱신
#--------------------------------------------------------------------------
alias update_KGC_MultiAttack update
def update
@_multi_attack = false if Graphics.frame_count % 2 == 0
update_KGC_MultiAttack
if @_damage_sprite_array.size > 0
for i in 0...@_damage_sprite_array.size
sprite = @_damage_sprite_array[i]
if @_damage_duration_array[i] == 0
dispose_damage(i)
next
end
@_damage_duration_array[i] -= 1
sprite.x = self.x
if $imported["DamageAlter"]
if @_damage_duration_array[i] > 27
sprite.y -= [(@_damage_duration_array[i] - 33) / 2 + 1, 1].max
end
else
case @_damage_duration_array[i]
when 38..39
sprite.y -= 4
when 36..37
sprite.y -= 2
when 34..35
sprite.y += 2
when 28..33
sprite.y += 4
end
end
sprite.opacity = 256 - (12 - @_damage_duration_array[i]) * 32
end
@_damage_sprite_array.compact!
@_damage_duration_array.compact!
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Spriteset_Battle
#==============================================================================
class Spriteset_Battle
#--------------------------------------------------------------------------
# ● 스프라이트 취득
#--------------------------------------------------------------------------
def sprites
return @enemy_sprites + @actor_sprites
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Scene_Battle (분할 정의 1)
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# ● 프레임 갱신
#--------------------------------------------------------------------------
alias update_KGC_MultiAttack update
def update
battler = $imported["ActiveCountBattle"] ? @action_battler : @active_battler
if @phase4_step == 5 && @target_battlers != [] && battler != nil
# 스테이터스 윈도우재 묘화
@status_window.refresh if KGC::MATK_HIT_REFRESH
for sprite in @spriteset.sprites
# 다단 히트 판정
next if !sprite.multi_attack? || @target_battlers.index(sprite.battler) == nil
sprite.damage(sprite.battler.damage, sprite.battler.critical)
case battler.current_action.kind
when 0
if battler.current_action.basic == 0
sprite.battler.attack_effect(battler)
end
when 1
skill = $data_skills[battler.current_action.skill_id]
sprite.battler.skill_effect(battler, skill)
when 2
item = $data_skills[battler.current_action.item_id]
sprite.battler.item_effect(item)
end
end
end
# 원의 처리를 실행
update_KGC_MultiAttack
end
end
컹.. 오류나시거나 중뷁이라면 댓글로.
KGC오류방지 스크립트가 필요할 수 도 있음.
만약 애니매이션 상에서 저 사운드를 6개 넣었다면..
실제 공격나가는 수는 7개입니다.
중간에 나가는 공격과 맨 마지막에 나가는 공격 하나를 합쳐서이죠.
3타 스킬을 만드시려면 사운드에 2타만 추가하시면 됩니다.
그리고 사운드 파일은.. 소리 없는걸로 하시는게 좋아요. 아니면 볼륨을 0으로 하거나 (이건 좀 귀찮겠죠?)
여기서 말하는 ABC사운드 파일이 없으면 에러납니다.
그냥 녹음기 들어가셔서 아무렇게나 녹음하고나서,
사운드파일로 저장하시면 됩니다.
무음일 경우엔 말이죠 하하..
사용법이 쉬운편이라 예제는 올리지 않겠습니다.
출처_KGC
#중뷁이면... 자삭.
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/ ◆다단 공격 - KGC_MultiAttack◆
#_/----------------------------------------------------------------------------
#_/ 여러 차례 효과를 적용하는 행동을 작성합니다.
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#=======================================================================
# ★ 커스터마이즈 항목 ★
#=======================================================================
module KGC
# ◆공격 판정용SE파일명
# (대문자·소문자는 묻지 않는다. 확장자(extension) 불요)
MATK_HIT_SE = "ABC"
#이것은 사운드 파일입니다. 애니매이션중 이걸 넣으면 그때 데미지가 나갑니다.
#즉, 애니매이션중 ABC사운드 파일이 재생될때마다 공격이 된다는 소리죠.
#맨 마지막에 나가는 기존 데미지 처리는 정상적으로 돌아갑니다.
#사운드 폴더 내에 ABC파일이 없으면 안되구요, 원하시면 ABC를 바꾸시면 됩니다.
# (물론, 그 사운드 파일이 사운드 폴더 안에 있는 한에요.)
# ◆다단 공격시 ,1Hit마다 스테이터스 윈도우를 재묘화
# (쓸데없게 무겁기 때문에 , 고속화ACB이외에서는 사용하지 않는 것이 무난)
MATK_HIT_REFRESH = false
end
#즉, 이것을 true로 바꾸면.. 렉이 발생할 수 있다는 소리입니다.
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
$imported = {} if $imported == nil
$imported["MultiAttack"] = true
#아직 이건 잘 모르겠네요; 위쪽에 사운드 파일과 연관이 있는것같은..데
# 이 밑으로는 데미지 처리 스크립트니 건들지 않는게 좋아요.
#==============================================================================
# ■ Sprite_Battler
#==============================================================================
class Sprite_Battler < RPG::Sprite
#--------------------------------------------------------------------------
# ● 오브젝트 초기화
#--------------------------------------------------------------------------
alias initialize_KGC_MultiAttack initialize
def initialize(viewport, battler = nil)
initialize_KGC_MultiAttack(viewport, battler)
@_damage_sprite_array, @_damage_duration_array = [], []
end
#--------------------------------------------------------------------------
# ● 해방
#--------------------------------------------------------------------------
alias dispose_KGC_MultiAttack dispose
def dispose
for i in 0...@_damage_sprite_array.size
dispose_damage(i)
end
dispose_KGC_MultiAttack
end
#--------------------------------------------------------------------------
# ● 다단 히트 판정
#--------------------------------------------------------------------------
def multi_attack?
if @_multi_attack
@_multi_attack = false
return true
end
return false
end
#------------------------------------------------------------------------
# ● 데미지 스프라이트 작성
#------------------------------------------------------------------------
def damage(value, critical)
@_damage_sprite_array.compact!
@_damage_duration_array.compact!
super
sprite = RPG::Sprite.new
sprite.bitmap = @_damage_sprite.bitmap.dup
sprite.ox = @_damage_sprite.ox
sprite.oy = @_damage_sprite.oy
sprite.x = @_damage_sprite.x
sprite.y = @_damage_sprite.y + @_damage_sprite_array.size * 4
sprite.z = @_damage_sprite.z
@_damage_sprite_array.unshift(sprite)
@_damage_duration_array.unshift(40)
dispose_damage(-1)
end
#--------------------------------------------------------------------------
# ● 데미지 스프라이트 파기
#--------------------------------------------------------------------------
def dispose_damage(index = nil)
return if index == nil
if index >= 0 && @_damage_sprite_array[index] != nil
@_damage_sprite_array[index].bitmap.dispose
@_damage_sprite_array[index].dispose
@_damage_sprite_array[index] = @_damage_duration_array[index] = nil
elsif index < 0 && @_damage_sprite != nil
@_damage_sprite.bitmap.dispose
@_damage_sprite.dispose
@_damage_sprite, @_damage_duration = nil, 0
end
end
#--------------------------------------------------------------------------
# ● 애니메이션 실행 타이밍
#--------------------------------------------------------------------------
def animation_process_timing(timing, hit)
if (timing.condition == 0) || (timing.condition == 1 && hit) ||
(timing.condition == 2 && !hit)
if timing.se.name != ""
@_multi_attack |= timing.se.name.upcase == KGC::MATK_HIT_SE.upcase
end
end
super
end
#--------------------------------------------------------------------------
# ● 프레임 갱신
#--------------------------------------------------------------------------
alias update_KGC_MultiAttack update
def update
@_multi_attack = false if Graphics.frame_count % 2 == 0
update_KGC_MultiAttack
if @_damage_sprite_array.size > 0
for i in 0...@_damage_sprite_array.size
sprite = @_damage_sprite_array[i]
if @_damage_duration_array[i] == 0
dispose_damage(i)
next
end
@_damage_duration_array[i] -= 1
sprite.x = self.x
if $imported["DamageAlter"]
if @_damage_duration_array[i] > 27
sprite.y -= [(@_damage_duration_array[i] - 33) / 2 + 1, 1].max
end
else
case @_damage_duration_array[i]
when 38..39
sprite.y -= 4
when 36..37
sprite.y -= 2
when 34..35
sprite.y += 2
when 28..33
sprite.y += 4
end
end
sprite.opacity = 256 - (12 - @_damage_duration_array[i]) * 32
end
@_damage_sprite_array.compact!
@_damage_duration_array.compact!
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Spriteset_Battle
#==============================================================================
class Spriteset_Battle
#--------------------------------------------------------------------------
# ● 스프라이트 취득
#--------------------------------------------------------------------------
def sprites
return @enemy_sprites + @actor_sprites
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Scene_Battle (분할 정의 1)
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# ● 프레임 갱신
#--------------------------------------------------------------------------
alias update_KGC_MultiAttack update
def update
battler = $imported["ActiveCountBattle"] ? @action_battler : @active_battler
if @phase4_step == 5 && @target_battlers != [] && battler != nil
# 스테이터스 윈도우재 묘화
@status_window.refresh if KGC::MATK_HIT_REFRESH
for sprite in @spriteset.sprites
# 다단 히트 판정
next if !sprite.multi_attack? || @target_battlers.index(sprite.battler) == nil
sprite.damage(sprite.battler.damage, sprite.battler.critical)
case battler.current_action.kind
when 0
if battler.current_action.basic == 0
sprite.battler.attack_effect(battler)
end
when 1
skill = $data_skills[battler.current_action.skill_id]
sprite.battler.skill_effect(battler, skill)
when 2
item = $data_skills[battler.current_action.item_id]
sprite.battler.item_effect(item)
end
end
end
# 원의 처리를 실행
update_KGC_MultiAttack
end
end
컹.. 오류나시거나 중뷁이라면 댓글로.
KGC오류방지 스크립트가 필요할 수 도 있음.
만약 애니매이션 상에서 저 사운드를 6개 넣었다면..
실제 공격나가는 수는 7개입니다.
중간에 나가는 공격과 맨 마지막에 나가는 공격 하나를 합쳐서이죠.
3타 스킬을 만드시려면 사운드에 2타만 추가하시면 됩니다.
그리고 사운드 파일은.. 소리 없는걸로 하시는게 좋아요. 아니면 볼륨을 0으로 하거나 (이건 좀 귀찮겠죠?)
여기서 말하는 ABC사운드 파일이 없으면 에러납니다.
그냥 녹음기 들어가셔서 아무렇게나 녹음하고나서,
사운드파일로 저장하시면 됩니다.
무음일 경우엔 말이죠 하하..
사용법이 쉬운편이라 예제는 올리지 않겠습니다.
출처_KGC