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
961 타이틀/게임오버 타이틀 화면 커스터마이즈 (타이틀 메뉴 바꾸는 스크립트) 9 file №1 2012.08.04 4390
960 메뉴 Etude87_Horror_Menu_XP ver.1.1 15 file 습작 2012.08.04 2759
» 기타 이벤트 범위 스크립트 2 Tine 2012.07.25 1580
958 메뉴 메뉴바꾸기 4 file ureazy 2012.07.23 2844
957 맵/타일 Etude87_Map_Remember_XP ver.1.2 2 습작 2012.07.17 1614
956 기타 Etude87_Bone_Animation_Character ver.1.2 4 습작 2012.07.06 1255
955 기타 창고 스크립트 5 긔염둥이♥ 2012.06.18 1723
954 HUD 맵이름 스크립트 1 file 긔염둥이♥ 2012.05.19 2913
953 메뉴 메뉴화면에 '해야 할 일' 알려주는 창 넣기 11 하진 2012.04.23 3255
952 전투 Mr.Mo's ABS Ultimate 3.4 by DerVVulfman Alkaid 2012.03.14 1803
951 기타 [자작]데미지표시 19 file JACKY 2012.02.15 3837
950 이름입력 RPG Advocate의 이름 입력 스크립트를 약간 손댄 것 Alkaid 2012.01.28 2784
949 스킬 스킬 포인트를 올리자! 3 what더붥 2012.01.26 2680
948 기타 FPLE 2 - First Person Labyrinth Explorer by MGC 1 Alkaid 2012.01.17 3415
947 기타 Note Editor for RMXP by NEWOLD 1 Alkaid 2012.01.15 2101
946 기타 간단한 Scene_Base #2 2 Alkaid 2012.01.15 1738
945 기타 쓸만한스크립트61개포함 28 file 궭크이 2012.01.09 4296
944 전투 Mr.Mo's ABS Ultimate 2.6 by DerVVulfman Alkaid 2012.01.04 1820
943 변수/스위치 Etude87_Variables_XP 2 습작 2011.12.26 2104
942 온라인 온라인 스크립트 Unis Net RMXP 공식 배포! 25 file 뮤바보 2011.12.25 9398
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