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
841 기타 Complete Climate and Time System 1.2 by ForeverZer0 1 Alkaid 2010.09.17 1310
840 액터 Actor Customization 6.0.2 by Synthesize 4 file Alkaid 2010.09.17 1912
839 그래픽 MAWS: Modified Advanced Weather Script 1.2 by Agckuu Coceg 2 file Alkaid 2010.09.13 1969
838 메뉴 L's Custom Menu #3: 1인용 메뉴 Revision 1 3 Alkaid 2010.09.12 2360
837 저장 Advanced Save Menu 편집한 것. (SDK2용) Alkaid 2010.09.11 1219
836 HUD MOG_Active_Hud 3 file Bera 2010.09.11 2468
835 HUD MOG_C_HUD. 6 file Bera 2010.09.11 2329
834 액터 크리쳐 합체, 'SW_CreatureMix(for_rmxp)' by SiotWarrior 21 file 시옷전사 2010.09.11 2777
833 메뉴 L's Custom Menu #4: 'Compact' (SDK 2.x 필수) Alkaid 2010.09.11 1755
832 전투 Minkoff's Animated Battlers - Enhanced 13.2 by DerVVulfman Alkaid 2010.09.10 1687
831 전투 CTB by Charlie Fleed 3.1 - FF10 스타일의 전투시스템 6 Alkaid 2010.09.10 2974
830 전투 Mr. Mo's ABS 5.5 13 Alkaid 2010.09.10 3459
829 전투 DerVVulfman's addons for Mr.Mo's ABS file Alkaid 2010.09.10 1645
828 메시지 Hermes(Hermes Extends RPGXP Message System) 0.3d by derula Alkaid 2010.09.10 2024
827 아이템 Categorized Items Menu 1.3 by albertfish 1 file Alkaid 2010.09.09 1795
826 기타 간단한 Scene_Base Alkaid 2010.09.09 1390
825 메뉴 Ring menu edit (Non-SDK ver.) Alkaid 2010.09.08 1538
824 메뉴 Ring menu edit for SDK2 (Original by Hypershadow180) file Alkaid 2010.09.08 1374
823 메시지 Universal Message System 1.8.0 by ccoa 1 file Alkaid 2010.09.08 2184
822 그래픽 Weather Script(버전 불명) by ccoa 1 file Alkaid 2010.09.08 1571
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