기타

액터선택지제작 간편화 스크립트

by Evangelista posted Feb 26, 2009
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

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

사용예

스크립트 실행 후 액터ID가 들어갈 변수는 49번입니다. (스크립트 디폴트입니다. 실제로 쓸 때는 본문을 수정해 주십시오.)

스크립트 수정법은 스크립트 내부에 자세히 기입되어 있습니다.

 

이벤트스크립트커맨드 $scene = Scene_ActorChoice.new 는 액터선택지간편화스크립트를 호출하는 것입니다.

스크립트를 호출할 때에는 반드시 전후에 약간의 웨이트를 주시기 바랍니다. 안 그러면 오동작합니다.



1. 이벤트를 만듭니다. 이 이벤트는 현재 파티원 중 누가 강의를 할 것인가를 선택합니다.

학교에서 임시 강사로 강의를 한다는 내용이지요.



2. 이벤트커맨드 스크립트를 사용해 액터초이스간편화 스크립트 Scene을 불러옵니다.

이 윈도우는 Window_MenuStatus로서 메뉴화면상의 것을 그대로 사용합니다.

때문에 제가 올린 스크립은 놔두고 원래 Window_MenuStatus를 수정하면 그것을 그대로 반영할 수 있습니다.

다만 완전커스텀된 Window_MenuStatus(MOG메뉴 등의)와는 어떠한 충돌이 있을지도 모릅니다.

그것은 제가 MOG메뉴를 사용해보지 않아서 모르겠습니다.

 

여하간 Window_MenuStatus를 그대로 사용하기 때문에 현재 파티원, 그들의 정렬상태, 캐릭터 상태 등이

딱 현상황에 맞게 표시됩니다.

만약 지금 캐릭터 배치 순서가 라피스-루시아-세이-도미니크-리프 순으로 되어 있다면 이 윈도우에서도

그렇게 표시된다는 것입니다.

또한 이 때 액터 ID는 DB상의 고유 액터ID를 그대로 입력받지만 선택시 인덱스는 캐릭터 배치순서가 바뀌면

함께 바뀝니다. 즉 현재 배치순서의 고유값이 인덱스가 됩니다.




3. 변수값 조건분기로 이벤트의 처리를 작성하면 됩니다.



본 스크립트는 파티내 액터의 구성이나 배열이 불특정할 때,
액터를 선택지로 골라야 하는 경우의 제작의 편의성과 인터페이스 개선을 위해 만들어졌습니다.

B버튼으로 강제취소를 하면 꼬일 염려가 있기도 합니다. 이것을 해소하기 위해서는
액터 선택의 갱신 부분에 있는
    if Input.trigger?(Input::B)
      Sound.play_cancel
      $scene = Scene_Map.new
    elsif Input.trigger?(Input::C)
      $game_party.last_actor_index = @status_windows.index
      # n번 변수에 선택한 캐릭터의 선택시 인덱스(-1)를 대입한다. (초기값 48, 수정가능)
      $game_variables[48] = @status_windows.index
      # n번 변수에 선택한 캐릭터의 액터ID를 대입한다. (초기값 49, 수정가능)
      $game_variables[49] = $game_party.members[@status_windows.index].id
      Sound.play_decision
      $scene = Scene_Map.new
    end
부분을
    if Input.trigger?(Input::C)
      $game_party.last_actor_index = @status_windows.index
      # n번 변수에 선택한 캐릭터의 선택시 인덱스(-1)를 대입한다. (초기값 48, 수정가능)
      $game_variables[48] = @status_windows.index
      # n번 변수에 선택한 캐릭터의 액터ID를 대입한다. (초기값 49, 수정가능)
      $game_variables[49] = $game_party.members[@status_windows.index].id
      Sound.play_decision
      $scene = Scene_Map.new
    end
이렇게 수정해 주시면 간단합니다.








▽아래부터 복사
#==============================================================================
# ■ Scene_ActorChoice
#------------------------------------------------------------------------------
# 액터의 선택 후 선택한 액터의 ID, 선택시 인덱스를 각각 변수에 대입합니다.
#
# [사용방법]
# 이벤트커맨드 스크립트에서 $scene = Scene_ActorChoice 를 입력.
# 사용시의 윈도우는 Window_MenuStatus 를 이용했습니다.
# 변수에 액터 ID나 선택시 인덱스를 대입한 후에는 조건분기로 사용해 주십시오.
# 주의할 것은 선택시 인덱스는 실제 선택한 것이 몇 번째이든 -1을 해야 한다는 점입니다.
# 예) 선택화면에서 세 번째 캐릭터를 선택했을 때 인덱스 : 2
#
# [커스터마이즈]
# 66, 68행
# $game_variables[n]의 n 부분에 대입할 변수 ID를 기입해 주십시오.
#
# ※ 본 스크립트의 기본 베이스는 Scene_Menu를 사용했습니다.
#
#==============================================================================

class Scene_ActorChoice < Scene_Base
  #--------------------------------------------------------------------------
  # ● 오브젝트 초기화
  #     menu_index : 커멘드의 커서 초기 위치
  #--------------------------------------------------------------------------
  def initialize(menu_index = 0)
    @status_window_index = menu_index
  end
  #--------------------------------------------------------------------------
  # ● 개시 처리
  #--------------------------------------------------------------------------
  def start
    super
    create_menu_background
    @status_windows = Window_MenuStatus.new(0, 0)
    @status_windows.active = true
    @status_windows.index = @status_window_index
  end
  #--------------------------------------------------------------------------
  # ● 종료 처리
  #--------------------------------------------------------------------------
  def terminate
    super
    dispose_menu_background
    @status_windows.dispose
  end
  #--------------------------------------------------------------------------
  # ● 업데이트
  #-------------------------------------------------------------------------- 
  def update
    super
    update_menu_background
    @status_windows.update
    update_actor_selection_achoice
  end
  #--------------------------------------------------------------------------
  # ● 액터 선택의 갱신
  #--------------------------------------------------------------------------
  def update_actor_selection_achoice
    if Input.trigger?(Input::B)
      Sound.play_cancel
      $scene = Scene_Map.new
    elsif Input.trigger?(Input::C)
      $game_party.last_actor_index = @status_windows.index
      # n번 변수에 선택한 캐릭터의 선택시 인덱스(-1)를 대입한다. (초기값 48, 수정가능)
      $game_variables[48] = @status_windows.index
      # n번 변수에 선택한 캐릭터의 액터ID를 대입한다. (초기값 49, 수정가능)
      $game_variables[49] = $game_party.members[@status_windows.index].id
      Sound.play_decision
      $scene = Scene_Map.new
    end
  end
end

 

########################################################
# 제작 : dest21c (창조도시 및 아방스 Evangelista)                                      #
########################################################