XP 스크립트

#==============================================================================
# ■ Game_Event
#------------------------------------------------------------------------------
#  이벤트를 취급하는 클래스입니다.조건 판정에 의한 이벤트 페이지 변환이나, 병렬처리
# 이벤트 실행등의 기능을 가지고 있어 Game_Map 클래스의 내부에서 사용됩니다.
#==============================================================================

class Game_Event < Game_Character
  #--------------------------------------------------------------------------
  # ● 이벤트 명문자열제어
  #--------------------------------------------------------------------------
  def get_name( mode = false)    
    data = []
    itemf = []
    itemf2 = []
    #문자열을 우선 선별해, 격납
    data = @event.name.split(/ /)
    #이름란으로부터 코멘트 이외의 수치를 선별
    if data[1] != nil && data.size >= 4
      #mode=false의 경우는 이름만 돌려준다
      if mode == false
        return data[0]
      end
      #mode=true의 경우는 수치 배열만 돌려준다
      for i in 0...data.size
        itemf[i] = data[i].split(/([0-9]+) \s/)
        itemf[i][0] = itemf[i][0].to_i
        itemf2[i] = itemf[i][0]
      end
      itemf2.delete_at(0)
    else
      return false
    end
    return itemf2
  end 
  #--------------------------------------------------------------------------
  # ● 접촉 이벤트의 기동 판정
  #--------------------------------------------------------------------------
  def check_event_trigger_touch(x, y)
    # 이벤트 실행중의 경우
    if $game_system.map_interpreter.running?
      return
    end
    #이벤트 나토리 이득
    get_n = get_name(false)
    tmp = false
    # 트리거가 [이벤트로부터 접촉] 한편 플레이어 좌표가 이벤트 범위 일치했을 경우
    if @trigger == 2 && get_n != false && get_n == "EVENT_WIDE"
      get_p = []
      #이벤트명에 있는 수치 취득
      get_p = get_name(true)
      if get_p.size >= 3
        case get_p[0]
        when 0 #X or Y
          if (x - $game_player.x).abs <= get_p[1] && y == $game_player.y or 
              (y - $game_player.y).abs <= get_p[2] && x == $game_player.x 
            tmp = true  
          end
        when 1 #X and Y
          if (x - $game_player.x).abs <= get_p[1] && 
              (y - $game_player.y).abs <= get_p[2] 
            tmp = true  
          end
        end
      end
      # 점프중 이외로,
      if tmp and not jumping?
        start
        return
      end
    end
    # 트리거가 [이벤트로부터 접촉] 한편 플레이어의 좌표와 일치했을 경우
    if @trigger == 2 and x == $game_player.x and y == $game_player.y
      # 점프중 이외로, 기동 판정이 정면의 이벤트라면
      if not jumping? and not over_trigger?
        start
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 자동 이벤트의 기동 판정
  #--------------------------------------------------------------------------
  def check_event_trigger_auto
    #이벤트 나토리 이득
    get_n = get_name(false)
    tmp = false
    # 트리거가 [이벤트로부터 접촉] 한편 플레이어 좌표가 이벤트 범위 일치했을 경우
    if @trigger == 2 && get_n != false && get_n == "EVENT_WIDE"
      get_p = []
      #이벤트명에 있는 수치 취득
      get_p = get_name(true)
      if get_p.size >= 3
        case get_p[0]
        when 0 #X or Y
          if (x - $game_player.x).abs <= get_p[1] && y == $game_player.y or 
              (y - $game_player.y).abs <= get_p[2] && x == $game_player.x 
            tmp = true  
          end
        when 1 #X and Y
          if (x - $game_player.x).abs <= get_p[1] && 
              (y - $game_player.y).abs <= get_p[2] 
            tmp = true  
          end
        end
      end
      # 점프중 이외로, 이벤트 실행중이 아닌 경우(오동작 막는다)
      if tmp and not jumping? and !$game_system.map_interpreter.running?
        start
        return
      end
    end
    # 트리거가 [이벤트로부터 접촉] 한편 플레이어의 좌표와 일치했을 경우
    if @trigger == 2 and @x == $game_player.x and @y == $game_player.y
      # 점프중 이외로, 기동 판정이 동위치의 이벤트라면
      if not jumping? and over_trigger?
        start
      end
    end
    # 트리거가 [자동 실행] 의 경우
    if @trigger == 3
      start
    end
  end
end


#==============================================================================
# ■ Game_Player
#------------------------------------------------------------------------------
#  플레이어를 취급하는 클래스입니다.이벤트의 기동 판정이나, 맵의 스크롤등의
# 기능을 가지고 있습니다.이 클래스의 인스턴스는 $game_player 로 참조됩니다.
#==============================================================================

class Game_Player < Game_Character

  #--------------------------------------------------------------------------
  # ● 동위치의 이벤트 기동 판정
  #--------------------------------------------------------------------------
  def check_event_trigger_here(triggers)
    result = false
    # 이벤트 실행중의 경우
    if $game_system.map_interpreter.running?
      return result
    end
    # 전이벤트의 루프
    for event in $game_map.events.values
      # 이벤트의 좌표와 트리거가 일치했을 경우
      if event.x == @x and event.y == @y and triggers.include?(event.trigger)
        # 점프중 이외로, 기동 판정이 동위치의 이벤트라면
        if not event.jumping? and event.over_trigger?
          event.start
          result = true
        end
      #추가 변경
      else
        get_n = event.get_name(false)
        tmp = false
        # 트리거가 [이벤트로부터 접촉] 한편 플레이어 좌표가 이벤트 범위 일치했을 경우
        if triggers.include?(event.trigger) && get_n != false && 
            get_n == "EVENT_WIDE"
          get_p = []
          #이벤트명에 있는 수치 취득
          get_p = event.get_name(true)
          if get_p.size >= 3
            case get_p[0]
            when 0 #X or Y
              if (event.x - @x).abs <= get_p[1] && event.y == @y or 
                  (event.y - @y).abs <= get_p[2] && event.x == @x 
                tmp = true  
              end
            when 1 #X and Y
              if (event.x - @x).abs <= get_p[1] &&  
                  (event.y - @y).abs <= get_p[2] 
                tmp = true  
              end
            end
          end
          # 점프중 이외로,
          if tmp and not event.jumping? 
            event.start
            result = true
          end
        end
      # 추가 여기까지
      end
    end
    return result
  end
  #--------------------------------------------------------------------------
  # ● 정면의 이벤트 기동 판정
  #--------------------------------------------------------------------------
  def check_event_trigger_there(triggers)
    result = false
    # 이벤트 실행중의 경우
    if $game_system.map_interpreter.running?
      return result
    end
    # 정면의 좌표를 계산
    new_x = @x + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
    new_y = @y + (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
    # 전이벤트의 루프
    for event in $game_map.events.values
      # 이벤트의 좌표와 트리거가 일치했을 경우
      if event.x == new_x and event.y == new_y and
         triggers.include?(event.trigger)
        # 점프중 이외로, 기동 판정이 정면의 이벤트라면
        if not event.jumping? and not event.over_trigger?
          event.start
          result = true
        end
      #추가 변경  
      else
        get_n = event.get_name(false)
        tmp = false
        # 트리거가 [이벤트로부터 접촉] 한편 플레이어 좌표가 이벤트 범위 일치했을 경우
        if triggers.include?(event.trigger) && get_n != false && 
            get_n == "EVENT_WIDE"
          get_p = []
          #이벤트명에 있는 수치 취득
          get_p = event.get_name(true)
          if get_p.size >= 3
            case get_p[0]
            when 0 #X or Y
              if (event.x - @x).abs <= get_p[1] && event.y == @y or 
                  (event.y - @y).abs <= get_p[2] && event.x == @x 
                tmp = true  
              end
            when 1 #X and Y
              if (event.x - @x).abs <= get_p[1] 
                  (event.y - @y).abs <= get_p[2] && 
                tmp = true  
              end
            end
          end
          # 점프중 이외로,
          #이벤트 트리거가 0이외의 경우, 결정 버튼이 밀리지 않았다
          if tmp and not event.jumping? and event.trigger != 0 and !Input.trigger?(Input::C)
            event.start
            result = true
          end
        end
      # 추가 여기까지       
      end
    end
    # 해당하는 이벤트가 발견되지 않았던 경우
    if result == false
      # 정면의 타일이 카운터라면
      if $game_map.counter?(new_x, new_y)
        # 1 타일안쪽의 좌표를 계산
        new_x += (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
        new_y += (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
        # 전이벤트의 루프
        for event in $game_map.events.values
          # 이벤트의 좌표와 트리거가 일치했을 경우
          if event.x == new_x and event.y == new_y and
             triggers.include?(event.trigger)
            # 점프중 이외로, 기동 판정이 정면의 이벤트라면
            if not event.jumping? and not event.over_trigger?
              event.start
              result = true
            end
          end
        end
      end
    end
    return result
  end
  #--------------------------------------------------------------------------
  # ● 접촉 이벤트의 기동 판정
  #--------------------------------------------------------------------------
  def check_event_trigger_touch(x, y)
    result = false
    # 이벤트 실행중의 경우
    if $game_system.map_interpreter.running?
      return result
    end
    # 전이벤트의 루프
    for event in $game_map.events.values
      # 이벤트의 좌표와 트리거가 일치했을 경우
      if event.x == x and event.y == y and [1,2].include?(event.trigger)
        # 점프중 이외로, 기동 판정이 정면의 이벤트라면
        if not event.jumping? and not event.over_trigger?
          event.start
          result = true
        end
      #추가 변경  
      else
        get_n = event.get_name(false)
        tmp = false
        # 트리거가 [이벤트로부터 접촉] 한편 플레이어 좌표가 이벤트 범위 일치했을 경우
        if [1,2].include?(event.trigger) && get_n != false && 
            get_n == "EVENT_WIDE"
          get_p = []
          #이벤트명에 있는 수치 취득
          get_p = event.get_name(true)
          if get_p.size >= 3
            case get_p[0]
            when 0 #X or Y
              if (event.x - @x).abs <= get_p[1] && event.y == @y or 
                  (event.y - @y).abs <= get_p[2] && event.x == @x 
                tmp = true  
              end
            when 1 #X and Y
              if (event.x - @x).abs <= get_p[1] && 
                  (event.y - @y).abs <= get_p[2] 
                tmp = true  
              end
            end
          end
          # 점프중 이외로,
          if tmp and not event.jumping?
            event.start
            result = true
          end
        end
      # 추가 여기까지       
      end
    end
    return result
  end
end


이벤트 범위를 어찌하는것 같은데 스크립트 젬뱅이라 모르겠습니다.
그래도 쓸사람은 알아서 쓰실수 있을것 같아 올려봅니다.

p.s. 혹시 사용범을 아시는분은 따로 설명부탁드립니다.
Comment '2'
  • ?
    tomraccon 2012.08.31 23:39
    어디에 쓰는 것일꼬?
  • ?
    카비 2012.09.17 16:38
    [제가 보기엔 이벤트의 이름에 수치를 입력해줘야하는것같습니다. 좀 읽어보시길]

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 습작 2012.12.24 6203
961 전투 XAS Hero Edition v3.82 19 아방스 2010.12.27 4347
960 메뉴 기본메뉴 뜯어고친것. (스샷추가) 6 file 백호 2009.02.22 4315
959 키입력 한글입력기 6 백호 2009.02.22 4306
958 기타 쓸만한스크립트61개포함 28 file 궭크이 2012.01.09 4298
957 온라인 온라인스크립트 실행방법 13 file 백호 2009.02.22 4275
956 HUD 캐릭터 아래 SP,HP표시해주는 스크립트 33 file 김!제스! 2010.08.04 4273
955 기타 XP 각종 스크립트입니다. 36 file 쿠도신이치 2009.04.26 4272
954 액알입니다.정말 확신함 12 dkqkfsoatp 2007.12.13 4267
953 타이틀/게임오버 [펌]색다른 게임오버 스크립트 14 file 또라에몽 2010.05.09 4267
952 이동 및 탈것 아하! 그렇구나의 3D 신기술 체험 3 14 아하!잘봤어요. 2010.02.28 4261
951 기타 말풍선 스크립트. 62 file 『동그라미』♥ 2010.02.04 4254
950 전투 사이드뷰 전투(보행그래픽) 15 file 백호 2009.02.21 4244
949 스킬 스킬샵 스크립트 16 file 독도2005 2009.08.24 4223
948 메인화면에 별똥별 효과 6 file 아방스 2007.11.09 4220
947 기타 [게이지바]게이지바 스크립트 2.5 (실용적?) 17 file 코아 코스튬 2010.12.05 4219
946 메뉴 메뉴를 바꾸는 스크립트 14 №1 2012.08.04 4214
945 이름입력 한글이름 입력기 스크립트 14 백호 2009.02.22 4211
944 미니맵 [헬악이님 제보] 단축키 미니맵 만들기!!| 13 file 아방스 2007.11.09 4197
943 HUD 맵 이름 표시와 미니맵을 같이하자 8 file 뮤리온。 2011.10.08 4195
942 전투 ATB시스템 입니다. [스샷 첨부] 17 백호 2009.02.22 4182
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