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 6203
1021 아이템 흠..몬스터도감말고 아이템도감~ 9 백호 2009.02.21 2028
1020 전투 흠.. 아직도 이 스크립트가 없군요 ㅋㅋ(제가올림..) 1 file 백호 2009.02.21 3337
1019 전투 횡스크롤형식의 스크립트 7 백호 2009.02.21 2982
1018 기타 횡스크롤 스크립트 한국말 번역. 15 file 백호 2009.02.21 3315
1017 기타 회복으로 데미지를 받는 좀비 스크립트 7 백호 2009.02.22 2010
1016 메뉴 화살표 모양 셀렉트 커서 사용 2 백호 2009.02.22 2118
1015 그래픽 화면을 부드럽게 해주는스크립트[ 아주 유용] 56 file - 하늘 - 2009.08.05 6566
1014 미니맵 화면에 축소된 미니맵을 표시하는 스크립트 - 한글 번역 - 6 file 백호 2009.02.21 2560
1013 화면에 축소된 맵을 표시하는 스크립트 7 file 백호 2009.02.21 2394
1012 기타 홈페이지 띄우기 (VX 상관없음.) 6 KNAVE 2009.08.25 2139
1011 메뉴 혹시있나해서-_-.. 대화창에 테두리치기 스크립트 7 백호 2009.02.22 2596
1010 기타 현재시간표시 33 file 코아 코스튬 2010.10.09 2529
1009 기타 현재 맵BGM을 그대로 전투 BGM으로 연결 from phylomortis.com 백호 2009.02.22 1180
1008 이름입력 한글조합입력기(영어가능) file 조규진1 2019.11.10 507
1007 메시지 한글자씩 뜨는 스크립트 6 백호 2009.02.21 3005
1006 키입력 한글입력스크립트 16 file 아방스 2007.11.09 11828
1005 키입력 한글입력기(자음, 모음 분리. 아마 중복일 듯...) 11 캉쿤 2011.09.13 3225
1004 키입력 한글입력기 6 백호 2009.02.22 4306
1003 이름입력 한글이름 입력기 스크립트 14 백호 2009.02.22 4211
1002 메시지 한글 채팅 스크립트 32 file こなた 2009.01.22 4947
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 52 Next
/ 52