맵/타일

맵 이동시 이벤트(NPC) 위치 유지하기 (수정)

by 이브 posted Nov 07, 2012
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

울트라알파님이 올려주신 소스 보고 좋아보여서 사용하는데, 약간의 문제점이 있길래 수정하였습니다



맵을 다른곳에 갔다가 다시 돌아오면 npc케릭터(이벤트)들의 위치가 처음상태로 되돌아가는것이 어색해 보일때 사용하면

아주 유용한 스크립트 입니다.


별다른 설정은 필요없으며 이벤트위치가 저장되지 않았으면 좋겠다 싶은 이벤트만 따로 걸러줄 수 있습니다.


위치를 저장하고싶지 않은경우 :

이벤트의 가장 처음 부분에 주석 이벤트가 작성되어야 합니다.

주석 내용은

donotsave

로 입력하면 됩니다.

※ 주석에 donotsave 외에 다른 내용이 포함되어 있으면 안됩니다.

※※ 스크립트 내에 donotsave를 자신이 원하는 글자로 변경이 가능합니다. 

   예)     elsif (@list[0].parameters[0] == "nosave") 



스크립트 적용방법 :

아래의 스크립트를 main 바로 위쪽에 새로 삽입하여 봍여넣어 주세요.




#==============================================================================

# ■ Game_Event

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

#  이벤트 처리 클래스입니다. 조건 판정에 의한 이벤트 페이지 전환 및 병렬 처리

# 이벤트 실행 등의 기능을 가지고있어 Game_Map 클래스에서 내부적으로 사용됩니다.

#==============================================================================

class Game_Event < Game_Character

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

  # ● 이벤트 위치의 보존여부 결정

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

  def save_pos?

    if (@list[0].code != 108) 

      return true

    elsif (@list[0].parameters[0] == "donotsave") 

      return false

    else

      return true

    end

  end

end

#==============================================================================

# ■ Game_Map

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

# 맵을 다루는 클래스입니다. 스크롤 및 통행 가능 판정 등의 기능을 가지고 있습니다.

#이 클래스의 인스턴스는 $ game_map에서 참조됩니다.

#==============================================================================

class Game_Map

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

  # ● 초기화대상

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

  alias save_event_pos_initialize initialize

  def initialize

    save_event_pos_initialize

    @event_pos = {}

  end

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

  # ● 설치

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

  alias save_event_pos_setup setup

  def setup(map_id)

    save_event_pos

    save_event_pos_setup(map_id)

    load_event_pos

  end

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

  # ● 이벤트 위치 보존

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

  def save_event_pos

    return if @map_id == 0

    @event_pos[@map_id] ||= []

    @events.each{|i,e|

    if e.save_pos?

      @event_pos[@map_id][i] = [e.x,e.y]

    else

      @event_pos[@map_id][i] = nil

    end

    }

  end

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

  # ● 이벤트 위치 로드

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

  def load_event_pos

    return if @map_id == 0

    @event_pos[@map_id] ||= []

    @events.each{|i,e|

    next unless @event_pos[@map_id][i]

    e.moveto(@event_pos[@map_id][i][0],@event_pos[@map_id][i][1])

    }

  end

end 

#출처 : http://www.66rpg.com/articles/4901