XP 스크립트



#==============================================================================
# ** Game_Player
#------------------------------------------------------------------------------
#  장애물을 자동으로 피해가는 스크립트 - 준돌
#
#
#  방향키를 지속적으로 누르고 있을경우 앞에 장애물을
#  옆으로 틀어서 피해지나갑니다.
#==============================================================================

class Game_Player < Game_Character
  #--------------------------------------------------------------------------
  # * Invariables
  #--------------------------------------------------------------------------
  CENTER_X = (320 - 16) * 4  # Center screen x-coordinate * 4
  CENTER_Y = (240 - 16) * 4  # Center screen y-coordinate * 4
  #--------------------------------------------------------------------------
  # * Passable Determinants
  #    x : x-coordinate
  #    y : y-coordinate
  #    d : direction (0,2,4,6,8)
  #        * 0 = Determines if all directions are impassable (for jumping)
  #--------------------------------------------------------------------------
  def passable?(x, y, d)
    # Get new coordinates
    new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
    new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
    # If coordinates are outside of map
    unless $game_map.valid?(new_x, new_y)
      # Impassable
      return false
    end
    # If debug mode is ON and ctrl key was pressed
    if $DEBUG and Input.press?(Input::CTRL)
      # Passable
      return true
    end
    super
  end
  #--------------------------------------------------------------------------
  # * Set Map Display Position to Center of Screen
  #--------------------------------------------------------------------------
  def center(x, y)
    max_x = ($game_map.width - 20) * 128
    max_y = ($game_map.height - 15) * 128
    $game_map.display_x = [0, [x * 128 - CENTER_X, max_x].min].max
    $game_map.display_y = [0, [y * 128 - CENTER_Y, max_y].min].max
  end
  #--------------------------------------------------------------------------
  # * Move to Designated Position
  #    x : x-coordinate
  #    y : y-coordinate
  #--------------------------------------------------------------------------
  def moveto(x, y)
    super
    # Centering
    center(x, y)
    # Make encounter count
    make_encounter_count
  end
  #--------------------------------------------------------------------------
  # * Increaase Steps
  #--------------------------------------------------------------------------
  def increase_steps
    super
    # If move route is not forcing
    unless @move_route_forcing
      # Increase steps
      $game_party.increase_steps
      # Number of steps are an even number
      if $game_party.steps % 2 == 0
        # Slip damage check
        $game_party.check_map_slip_damage
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Get Encounter Count
  #--------------------------------------------------------------------------
  def encounter_count
    return @encounter_count
  end
  #--------------------------------------------------------------------------
  # * Make Encounter Count
  #--------------------------------------------------------------------------
  def make_encounter_count
    # Image of two dice rolling
    if $game_map.map_id != 0
      n = $game_map.encounter_step
      @encounter_count = rand(n) + rand(n) + 1
    end
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    # If party members = 0
    if $game_party.actors.size == 0
      # Clear character file name and hue
      @character_name = ""
      @character_hue = 0
      # End method
      return
    end
    # Get lead actor
    actor = $game_party.actors[0]
    # Set character file name and hue
    @character_name = actor.character_name
    @character_hue = actor.character_hue
    # Initialize opacity level and blending method
    @opacity = 255
    @blend_type = 0
  end
  #--------------------------------------------------------------------------
  # * Same Position Starting Determinant
  #--------------------------------------------------------------------------
  def check_event_trigger_here(triggers)
    result = false
    # If event is running
    if $game_system.map_interpreter.running?
      return result
    end
    # All event loops
    for event in $game_map.events.values
      # If event coordinates and triggers are consistent
      if event.x == @x and event.y == @y and triggers.include?(event.trigger)
        # If starting determinant is same position event (other than jumping)
        if not event.jumping? and event.over_trigger?
          event.start
          result = true
        end
      end
    end
    return result
  end
  #--------------------------------------------------------------------------
  # * Front Envent Starting Determinant
  #--------------------------------------------------------------------------
  def check_event_trigger_there(triggers)
    result = false
    # If event is running
    if $game_system.map_interpreter.running?
      return result
    end
    # Calculate front event coordinates
    new_x = @x + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
    new_y = @y + (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
    # All event loops
    for event in $game_map.events.values
      # If event coordinates and triggers are consistent
      if event.x == new_x and event.y == new_y and
        triggers.include?(event.trigger)
        # If starting determinant is front event (other than jumping)
        if not event.jumping? and not event.over_trigger?
          event.start
          result = true
        end
      end
    end
    # If fitting event is not found
    if result == false
      # If front tile is a counter
      if $game_map.counter?(new_x, new_y)
        # Calculate 1 tile inside coordinates
        new_x += (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
        new_y += (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
        # All event loops
        for event in $game_map.events.values
          # If event coordinates and triggers are consistent
          if event.x == new_x and event.y == new_y and
            triggers.include?(event.trigger)
            # If starting determinant is front event (other than jumping)
            if not event.jumping? and not event.over_trigger?
              event.start
              result = true
            end
          end
        end
      end
    end
    return result
  end
  #--------------------------------------------------------------------------
  # * Touch Event Starting Determinant
  #--------------------------------------------------------------------------
  def check_event_trigger_touch(x, y)
    result = false
    # If event is running
    if $game_system.map_interpreter.running?
      return result
    end
    # All event loops
    for event in $game_map.events.values
      # If event coordinates and triggers are consistent
      if event.x == x and event.y == y and [1,2].include?(event.trigger)
        # If starting determinant is front event (other than jumping)
        if not event.jumping? and not event.over_trigger?
          event.start
          result = true
        end
      end
    end
    return result
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def turn_ai_side
    case @direction
    when 2
      if not passable?(@x, @y, 4)
      turn_left_90
      elsif not passable?(@x, @y, 6)
      turn_right_90
      else
        rand(2) == 0 ? turn_right_90 : turn_left_90
      end
    when 4
      if not passable?(@x, @y, 2)
      turn_right_90
      elsif not passable?(@x, @y, 8)
      turn_left_90
      else
        rand(2) == 0 ? turn_right_90 : turn_left_90
      end
    when 6
      if not passable?(@x, @y, 2)
      turn_left_90
      elsif not passable?(@x, @y, 8)
      turn_right_90
      else
        rand(2) == 0 ? turn_right_90 : turn_left_90
      end
    when 8
      if not passable?(@x, @y, 4)
      turn_right_90
      elsif not passable?(@x, @y, 6)
      turn_left_90
      else
        rand(2) == 0 ? turn_right_90 : turn_left_90
      end
    end
  end
  def update
    # Remember whether or not moving in local variables
    last_moving = moving?
    # If moving, event running, move route forcing, and message window
    # display are all not occurring
    unless moving? or $game_system.map_interpreter.running? or
          @move_route_forcing or $game_temp.message_window_showing
      # Move player in the direction the directional button is being pressed
      case Input.dir4
      when 2
        move_down
      when 4
        move_left
      when 6
        move_right
      when 8
        move_up
      end
    end
    # Remember coordinates in local variables
    last_real_x = @real_x
    last_real_y = @real_y
    super
    # If character moves down and is positioned lower than the center
    # of the screen
    if @real_y > last_real_y and @real_y - $game_map.display_y > CENTER_Y
      # Scroll map down
      $game_map.scroll_down(@real_y - last_real_y)
    end
    # If character moves left and is positioned more let on-screen than
    # center
    if @real_x < last_real_x and @real_x - $game_map.display_x < CENTER_X
      # Scroll map left
      $game_map.scroll_left(last_real_x - @real_x)
    end
    # If character moves right and is positioned more right on-screen than
    # center
    if @real_x > last_real_x and @real_x - $game_map.display_x > CENTER_X
      # Scroll map right
      $game_map.scroll_right(@real_x - last_real_x)
    end
    # If character moves up and is positioned higher than the center
    # of the screen
    if @real_y < last_real_y and @real_y - $game_map.display_y < CENTER_Y
      # Scroll map up
      $game_map.scroll_up(last_real_y - @real_y)
    end
    # If not moving
    unless moving?
      tc_event = false
      d = @direction
      new_x = @x + (d == 6 ? 1 : d == 4 ? -1 : 0)
      new_y = @y + (d == 2 ? 1 : d == 8 ? -1 : 0)
      for event in $game_map.events.values
        tc_event = true if (event.x == new_x and event.y == new_y and [1,2].include?(event.trigger))
      end
      if tc_event == false
        case Input.dir4
        when 2
          if not passable?(@x, @y, d)
            turn_ai_side
            move_forward if Input.press? (Input::DOWN)
          end
        when 4
          if not passable?(@x, @y, d)
            turn_ai_side
            move_forward if Input.press? (Input::LEFT)
          end
        when 6
          if not passable?(@x, @y, d)
            turn_ai_side
            move_forward if Input.press? (Input::RIGHT)
          end
        when 8
          if not passable?(@x, @y, d)
            turn_ai_side
            move_forward if Input.press? (Input::UP)
          end
        end
      end
      # If player was moving last time
      if last_moving
        # Event determinant is via touch of same position event
        result = check_event_trigger_here([1,2])
        # If event which started does not exist
        if result == false
          # Disregard if debug mode is ON and ctrl key was pressed
          unless $DEBUG and Input.press?(Input::CTRL)
            # Encounter countdown
            if @encounter_count > 0
              @encounter_count -= 1
            end
          end
        end
      end
      # If C button was pressed
      if Input.trigger?(Input::C)
        # Same position and front event determinant
        check_event_trigger_here([0])
        check_event_trigger_there([0,1,2])
      end
    end
  end
end

#--------------------------------------------------------------





오랜만에 스크립트를 올리네요 ^^;
예제를 올릴려고 했는데... 제가 1.02a버전으로 옮겨서
스크립트만 올렸습니다
적용하시려면 스크립트란에서 Game_Player 섹션을
이스크립트로 갈아치우시거나
main위에 찔러넣으시면 됩니다.


이스크립트는
그림과 같이 방향키를 꾸욱 누르고있으면
장해물을 오른쪽이나 왼쪽으로 돌아서 피해갑니다
하지만 앞과 오른쪽이 동시에 막혀있으면
자동으로 왼쪽으로 틀어서 쓸대없는 방향전환은 하지 않습니다

그리고 이벤트실행을 해야하는데
스크립트와 충돌하여 이벤트를 피해가는일이 벌어지지 않도록
처리해두었습니다...


그럼 많이 이용해주세요 ^^

열제~

Who's 백호

?

이상혁입니다.

http://elab.kr

Atachment
첨부 '1'
Comment '13'
  • ?
    용호작무 2009.09.18 08:22

    우와! 이거 진짜 유용하겠네요!

    감사합니다!
  • ?
    라크리모사 2010.01.17 04:21

    우오!!잘쓰겠습니다!!

  • ?
    이안 2010.01.17 12:34

    흠 ...............

  • ?
    케나이슬라이드 2010.01.18 22:38

    도트단위 이동 스크립트랑 같이 쓰면

    그 스크립트에서 좁은길 들어가기 힘든거 보완이 될지도?..

  • ?
    개념있는초등학생 2010.01.19 21:59

    오류입니다. 도트이동이랑합치면 8방향이4방향으로 되고 벽을 통과하고 그 안에서 끼이는 현상이 발생합니다.

    안보이시면 다운하시기 바랍니다.

    다운링크 : 다운로드

  • ?
    개념있는초등학생 2010.01.20 11:56

    제가 실력이 좀 안되서 제가 잘못합친줄 알았는데 님 컴퓨터에서도 그렇습니까?그럼 다행이군요..

  • ?
    케나이 2010.01.20 00:01

    아 그렇네요...

  • ?
    포뇨 2010.03.30 23:14

    우옹...완전멋짐ㅋ

    잘쓸게요

  • ?
    홈버스트집사 2010.07.22 12:00

    ㄳㄳㄳㄳㄳㄳㄳ

  • ?
    지존!! 2010.07.24 14:13

    짱좋아

  • ?
    GM인온라인 2014.05.07 16:48
    잘쓰겠습니다 ^^^
  • ?
    GM인온라인 2014.05.09 23:05
    제가 기본적인 예제를 통해 적용시키고 해보았는데, npc랑 대화할려고 근처가면 바로 빗겨 나가는 단점이 살 짝 있네요.. 참고하시길
  • ?
    비형 2015.06.27 12:20
    너무 좋은 스크립트인데요.. 8방향이랑 호환이 안되서 너 아쉬워요..ㅜㅜ

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 습작 2012.12.24 6153
42 이동 및 탈것 이거만드느라 똥줄탓다!(는뻥) 초간단스크립트 10 *PS인간 2009.02.10 2369
41 이동 및 탈것 하이 대쉬 시스템 ver.1.0 15 백호 2009.02.22 2364
40 이동 및 탈것 8방향움직임과 8방향 캐릭터칩 호환 2 file 백호 2009.02.21 2273
39 이동 및 탈것 테두리 글자 & 그림자 글자 2 file 백호 2009.02.21 2014
38 이동 및 탈것 이동루트 설정 스크립트-특정범위 13 file 『★Browneyedgirls』 2010.02.18 2000
37 이동 및 탈것 Super Simple Vehicle System Enhanced 8.0 by DerVVulfman 1 Alkaid 2010.12.12 1956
» 이동 및 탈것 자동으로 장애물을 피해가는 스크립트 13 file 백호 2009.02.22 1929
35 이동 및 탈것 이벤트가 이벤트를 따라가는것 8 백호 2009.02.22 1872
34 이동 및 탈것 젤다 스타일 맵스크롤 5 file 백호 2009.02.21 1838
33 이동 및 탈것 그래픽의 크기로 좁은길은 못지나가게한다. 7 file 백호 2009.02.21 1816
32 이동 및 탈것 기차스크립트 6 백호 2009.02.21 1757
31 이동 및 탈것 8방향 이동 & 대쉬 스크립트 5 백호 2009.02.21 1701
30 이동 및 탈것 이벤트의 스크립트로 기동하는 점프 루트 완성 2 file 백호 2009.02.21 1698
29 이동 및 탈것 마우스 이동 조금 뜯어봤습니다. file 백호 2009.02.21 1680
28 이동 및 탈것 新(?)대쉬기능 스크립트.. 3 백호 2009.02.22 1625
27 이동 및 탈것 Trickster's Caterpillar System 0.99 3 Alkaid 2010.12.23 1590
26 이동 및 탈것 이벤트의 점프의 길이를 자유자제로~! 아랫꺼 업글버전 3 file 백호 2009.02.21 1575
25 이동 및 탈것 텔레포트 마나소비량 수정하기 3 지존!! 2010.07.22 1562
24 이동 및 탈것 Maplinks - 맵연결을 쉽게 하기 1 백호 2009.02.22 1541
23 이동 및 탈것 점프 높이를 자유자제로 조절하는 스크립트!! 8 file 백호 2009.02.21 1539
Board Pagination Prev 1 2 3 4 Next
/ 4