#==============================================================================
# ■ 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. 혹시 사용범을 아시는분은 따로 설명부탁드립니다.