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 6153
214 기타 일시정지 스크립트 13 【§㉤ㅏ법㉧ㅣ§】 2011.02.26 1841
213 기타 일본RPGXP게임에서 번역한 스크립트 입니다. 1 백호 2009.02.22 1735
» 기타 이벤트 범위 스크립트 2 Tine 2012.07.25 1580
211 기타 요리스크립트 (구) 6 *ps인간 2009.01.26 1932
210 기타 요리 시스템 스크립트 12 file 백호 2009.02.21 2022
209 기타 엔딩후 캐릭터 이어서 새로운 게임시작 스크립트 1 file 백호 2009.02.21 1263
208 기타 엔딩에 스탭롤을 도입하는 스크립트 1 file 백호 2009.02.21 1335
207 기타 에어리어 설정 by RPG Advocate 백호 2009.02.22 709
206 기타 업데이트 (죽었을경우부활 )스크립트한글화 2 by향온 2011.09.27 2438
205 기타 어디에 쓰이는지 불확실한 스크립트 1 백호 2009.02.22 1063
204 기타 양손무기, 전신갑옷 스크립트 2 백호 2009.02.22 1714
203 기타 액터 선택 스크립트 2 백호 2009.02.21 1228
202 기타 액알 30 지존!! 2010.07.26 5095
201 기타 암울한스크립트? 엔딩후 캐릭터 이어서 새로운 게임시작 스크립트 5 *ps인간 2009.01.26 2533
200 기타 아이디 스크립트 4 백호 2009.02.22 1761
199 기타 아래 스크립트에 대한 Guillaume777님의 개량판입니다. 백호 2009.02.22 880
198 기타 쓸만한스크립트61개포함 28 file 궭크이 2012.01.09 4297
197 기타 쓸 용도가 없지만 마비노기 게임 만들 때 좋죠[장작스크립트] 5 백호 2009.02.22 2408
196 기타 실제시간표시스크립트입니다...[중뷁이면지성;;] 4 백호 2009.02.22 1349
195 기타 시작하자 마자 풀 스크린 2 백호 2009.02.21 1082
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 Next
/ 13