XP 스크립트

#밑으로 스크립트.. 사용법은 주석중간에 제가 달아두었으니 쓰세요.

#중뷁이면... 자삭.


#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/  ◆다단 공격 - 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

Who's 백호

?

이상혁입니다.

http://elab.kr

Comment '10'
  • ?
    사야 시모토 2009.07.14 16:28

    액알에는 적용 안되는거 같은데요 ㅠㅠ

  • ?
    Amaster 2010.02.06 18:38

    당연하죠....이 스크립트는 액션타임배틀 전용인데...다단스킬은 액알로 하면 만들수있잖아요 ㄷㄷ;

    근데 이거 에러는 안나는데 왜 다단공격이 안되지??

    소리 입력하고 2번 공격하게 스킬에다가 해놨는데;;;

  • ?
    Amaster 2010.02.06 18:49

    아...되내요 ㅎㅎ 감사드립니다^^

    ABC 을 ATTACK12 로  이름바꿧더니 안됬던 거였구나;;

     

    그냥 ABC 사운드파일을 만들어야되는군..;;

    잘씁니다 ㅎㅎ

  • ?
    극상러브 2010.04.10 20:00

    스크립트 있어서 오류하지못할 수 있기때문에

  • profile
    star211 2010.04.16 19:54

    RATB 쓰는데 적이 공격하든 우리편이 공격하든 에러가 나네요

  • ?
    달탱이 2010.10.28 20:40

    오류,,,

  • profile
    개촙포에버 2011.06.26 19:37

    안된다...한번 때리고 마네여

  • ?
    Gora 2011.11.09 09:44

    데미지가 합산 되서 나오도록 하지는 못하나요?

  • ?
    Amaster 2011.12.18 02:56

    RTAB랑 같이쓰는데.. 79번줄에서 오류가...!!ㅜㅜ

  • ?
    날갯짓하는만렙토끼 2013.04.28 12:32
    ACB와 같이 사용하니
    다단공격이 먹통이 됩니다.
    오류는 안나는데.

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 습작 2012.12.24 6313
701 기타 Sphere Grid System file 백호 2009.02.21 765
700 전투 전투 관련 횟수 취득 스크립트 백호 2009.02.21 783
699 기타 Materia System file 백호 2009.02.21 751
698 이동 및 탈것 8방향움직임과 8방향 캐릭터칩 호환 2 file 백호 2009.02.21 2275
697 스킬 [KGC] Skill Grouping 백호 2009.02.21 863
696 파티 Party & Class Changing script 1 file 백호 2009.02.21 964
695 맵/타일 World Map 스크립트 1 file 백호 2009.02.21 1983
694 기타 액터 선택 스크립트 2 백호 2009.02.21 1230
693 장비 Multi-equip script 2 file 백호 2009.02.21 1101
» 스킬 [KGC] 다단공격 (즉, 여러번 공격하는 스킬) 10 백호 2009.02.21 2818
691 기타 [KGC] 개요 스크립트 2 백호 2009.02.21 1052
690 장비 장비착용시 올스탯 표시 2 file 백호 2009.02.21 1667
689 스킬 스킬 도감 1 백호 2009.02.21 1139
688 기타 프리 윈도우 스크립트 (상입오두막 출처) 6 백호 2009.02.21 1449
687 기타 스크립트로 프리윈도우 예제 4 file 백호 2009.02.21 812
686 기타 killer님 요청하신 스크립트 두번째입니다. 나뚜루 2009.02.21 760
685 전투 SBABS게이지바 file 백호 2009.02.21 2288
684 기타 Anti Event Lag Script 3 백호 2009.02.21 1058
683 기타 시작하자 마자 풀 스크린 2 백호 2009.02.21 1084
682 기타 AMS-Advanced Message Script Edited by Dubleax 3 file 백호 2009.02.21 766
Board Pagination Prev 1 ... 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ... 52 Next
/ 52