XP 스크립트



맵 이름 표시 스크립트를 본인이 원하는대로 수정하는 방법을 알려드리겠습니다.

 

상당수의 사람들이 스크립트가 마치 프로그래밍을 하는 것 처럼 복잡해서 만들기는 커녕 수정도 잘 못하고 계신 것 같습니다.

 

단순히 스크립트를 복사해서 붙여넣기만 하는 것이 아니라 어느정도 수정이라도 할 줄은 알아야 자기 게임에 맞게 혹은

 

개성있게 게임을 만들 수 있을 것 같아서 올리게 되었습니다.

 

우선 간단하면서 꼭 필요한 부분만 빨간색으로 해뒀으니 그 부분만 중점적으로 보시면 될 것 같습니다.

 

그 부분의 수정에 대한 설명은 맨 아랫줄에 적도록 하겠습니다.

 

 


# ▼▲▼ XRXS20. 맵명 표시 윈도우 ver.2 ▼▲▼ built100108
# by 앵아 재흙

#==============================================================================
# □ 커스터마이즈 포인트
#==============================================================================
module XRXS20
#
# 제외하는 맵ID (맵의 머리의 것 . 을 회피하고 싶은 경우)
#
EXCLUSIVE_MAPS = []
#
# 윈도우범위
#
WINDOW_FRAME = true # 표시
WINDOW_SKIN = "" # 개별 윈도우 스킨("" : 종래)
WINDOW_WIDTH_FIX = 0 # 가로폭 고정(0:고정하지 않고 자동)
WINDOW_HEIGHT = 24 # 세로폭
#
# 폰트
#
FONT_NAME = "굴림"
FONT_COLOR = Color.new(255, 255, 0, 255)
FONT_SIZE = 18
#
# [표시 위치] (0:좌상 ,1:우상 ,2:좌하 ,3:우하)
#
POSITION = 1
#
# [표시 시간]
#
TIME_FADEIN = 16 # 용명
TIME_STOP = 64 # 표시 정지
TIME_FADEOUT = 24 # 페이드아웃
end

#--------------------------------------------------------------------------
# 텍스트 모형
#--------------------------------------------------------------------------
class Window_Map_Name < Window_Base
def text_model(text)
return "" + text + ""
end
end
#
#[기능]
# 맵명의 선두에 피리어드 「.」이 있으면(자) 맵명을 표시하지 않습니다.
#
#==============================================================================
# □ XRXS. 맵 나토리 이득 기구
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# ○ 맵명을 취득
#--------------------------------------------------------------------------
def name
$data_mapinfos = load_data("Data/MapInfos.rxdata") if $data_mapinfos.nil?
$data_mapinfos[@map_id].name
end
end

#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
#--------------------------------------------------------------------------
# ● 공개 인스턴스 변수
#--------------------------------------------------------------------------
attr_accessor :xrxs20_fade_duration
end
#==============================================================================
# ■ Game_Map
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# ● 공개 인스턴스 변수
#--------------------------------------------------------------------------
attr_reader :map_id
end
#==============================================================================
# □ Window_Map_Name_Space
#==============================================================================
class Window_Map_Name_Space < Window_Base
#--------------------------------------------------------------------------
# ○ 오브젝트 초기화
#--------------------------------------------------------------------------
def initialize(x, y, w, h)
super(x-16, y-16, w+32, h+32)
self.opacity = 0
self.visible = false
@align = 1
end
#--------------------------------------------------------------------------
# ○ 문자를 설정
#--------------------------------------------------------------------------
def set_text(text)
# 묘화폭을 계산
if XRXS20::WINDOW_WIDTH_FIX == 0
bitmap = Bitmap.new(1,1)
bitmap.font.name = XRXS20::FONT_NAME
bitmap.font.size = XRXS20::FONT_SIZE
width = bitmap.text_size(text).width + 25
bitmap.dispose
else
width = XRXS20::WINDOW_WIDTH_FIX
end
# 컨텐츠 영역을 작성
if self.contents != nil
self.contents.dispose
end
self.width = width + 32
self.contents = Bitmap.new(width, self.height - 32)
self.contents.font.name = XRXS20::FONT_NAME
self.contents.font.color = XRXS20::FONT_COLOR
self.contents.font.size = XRXS20::FONT_SIZE
self.contents.font.bold = true
if text.nil?
return
end
# 문자의 묘화
x = 12
y = 0
width -= 6
height = self.contents.height
text_color = self.contents.font.color.dup
self.contents.font.color = Color.new( 0, 0, 0, 192)
self.contents.draw_text(x+2, y+2, width, height, text, @align)
self.contents.font.color = Color.new( 64, 64, 64, 192)
self.contents.draw_text(x-1, y-1, width, height, text, @align)
self.contents.draw_text(x+1, y-1, width, height, text, @align)
self.contents.draw_text(x-1, y+1, width, height, text, @align)
self.contents.draw_text(x+1, y+1, width, height, text, @align)
self.contents.font.color = text_color
self.contents.draw_text(x, y, width, height, text, @align)
end
end
#==============================================================================
# □ Window_Map_Name
#------------------------------------------------------------------------------
#  맵명을 표시하는 윈도우입니다.
#==============================================================================
class Window_Map_Name < Window_Base
#--------------------------------------------------------------------------
# ○ 공개 인스턴스 변수
#--------------------------------------------------------------------------
attr_accessor :text
#--------------------------------------------------------------------------
# ○ 오브젝트 초기
#--------------------------------------------------------------------------
def initialize
y = XRXS20::POSITION >= 2 ? 440 : 8
w = 64
h = XRXS20::WINDOW_HEIGHT
super(-w, y, w, h)
self.opacity = 0
self.visible = false
if XRXS20::WINDOW_SKIN != ""
# 스킨의 검색
skin = (RPG::Cache.windowskin(XRXS20::WINDOW_SKIN) rescue nil)
# 스킨의 설정 (스킨이 발견되었을 경우)
self.windowskin = skin unless skin.nil?
end
@space = Window_Map_Name_Space.new(self.x, self.y, self.width, self.height)
end
#--------------------------------------------------------------------------
# ○ 텍스트 설정
# text : 윈도우에 표시하는 캐릭터 라인
#--------------------------------------------------------------------------
def set_text(text)
if text.nil? or text.empty? or text =~ /^./
@showing_time = -1
@text = ""
@space.set_text(@text)
$game_temp.xrxs20_fade_duration = -1
else
# 설정
@text = text_model(text)
# 묘사
@space.set_text(@text)
if XRXS20::WINDOW_WIDTH_FIX == 0
self.width = @space.width - 16
else
self.width = XRXS20::WINDOW_WIDTH_FIX
end
case XRXS20::POSITION % 2
when 0
@x_indent = 4
when 1
@x_indent = 632 - self.width
end
end
self.visible = false
@space.visible = false
# 위치의 갱신
fade_relocation
end
#--------------------------------------------------------------------------
# ○ 페이드 시간에 의한 위치의 갱신
#--------------------------------------------------------------------------
def fade_relocation
# 페이드 시간의 설정
if $game_temp.xrxs20_fade_duration.nil?
$game_temp.xrxs20_fade_duration = (XRXS20::TIME_FADEIN + XRXS20::TIME_STOP + XRXS20::TIME_FADEOUT)
end
#
# 용명
#
d = $game_temp.xrxs20_fade_duration - (XRXS20::TIME_STOP + XRXS20::TIME_FADEOUT)
if d > 0
self.visible = XRXS20::WINDOW_FRAME
@space.visible = true
amount = ((XRXS20::TIME_FADEIN - d) * 255.0 / XRXS20::TIME_FADEIN).ceil
@space.contents_opacity = amount
self.opacity = [amount*5/8, 160].min
self.x = @x_indent - d
@space.x = self.x - 16
$game_temp.xrxs20_fade_duration -= 1
#
# 통상 표시
#
elsif ($game_temp.xrxs20_fade_duration > XRXS20::TIME_FADEOUT) or
($game_temp.xrxs20_fade_duration == 0 and XRXS20::TIME_FADEOUT == 0)
self.visible = XRXS20::WINDOW_FRAME
@space.visible = true
@space.contents_opacity = 255
self.opacity = 160
self.x = @x_indent
@space.x = self.x - 16
if $game_temp.xrxs20_fade_duration > 0
$game_temp.xrxs20_fade_duration -= 1
end
#
# 페이드아웃
#
elsif $game_temp.xrxs20_fade_duration > 0
self.visible = XRXS20::WINDOW_FRAME
@space.visible = true
amount = ($game_temp.xrxs20_fade_duration * 255.0 / XRXS20::TIME_FADEOUT).ceil
@space.contents_opacity = amount
self.opacity = amount * 5/8
self.x = (@x_indent + XRXS20::TIME_FADEOUT) - $game_temp.xrxs20_fade_duration
@space.x = self.x - 16
$game_temp.xrxs20_fade_duration -= 1
if $game_temp.xrxs20_fade_duration == 0
self.visible = false
@space.visible = false
end
end
end
#--------------------------------------------------------------------------
# ○ 프레임 갱신 [오버라이드(override)]
#--------------------------------------------------------------------------
def update
fade_relocation
super
end
#--------------------------------------------------------------------------
# ○ 해방 [오버라이드(override)]
#--------------------------------------------------------------------------
def dispose
@space.dispose
super
end
#--------------------------------------------------------------------------
# ○ 가시 상태 [오버라이드(override)]
#--------------------------------------------------------------------------
def visible=(b)
@space.visible = b unless @space.nil?
super
end
end
#==============================================================================
# ■ Scene_Map
#==============================================================================
class Scene_Map
#--------------------------------------------------------------------------
# ● 메인 처리
#--------------------------------------------------------------------------
alias xrxs20_main main
def main
# 지명 윈도우를 작성
@map_name_window = Window_Map_Name.new
# 지명 윈도우의 갱신
name = XRXS20::EXCLUSIVE_MAPS.include?($game_map.map_id) ? nil : $game_map.name
@map_name_window.set_text(name)
# 되돌리는
xrxs20_main
# 지명 윈도우를 해방
@map_name_window.dispose
end
#--------------------------------------------------------------------------
# ● 프레임 갱신
#--------------------------------------------------------------------------
alias xrxs20_update update
def update
# 지명 윈도우의 갱신
@map_name_window.update
# 귀환시키는
xrxs20_update
end
#--------------------------------------------------------------------------
# ● 플레이어의 장소 이동
#--------------------------------------------------------------------------
alias xrxs20_transfer_player transfer_player
def transfer_player
# 지명 윈도우의 불가시화
@map_name_window.visible = false
# 귀환시키는
xrxs20_transfer_player
# 페이드 시간의 클리어
$game_temp.xrxs20_fade_duration = nil
# 지명 윈도우의 갱신
name = XRXS20::EXCLUSIVE_MAPS.include?($game_map.map_id) ? nil : $game_map.name
@map_name_window.set_text(name)
end
end


<스크립트 설명>

 

# 윈도우범위
#
WINDOW_FRAME = true # 표시
WINDOW_SKIN = "" # 개별 윈도우 스킨("" : 종래)
WINDOW_WIDTH_FIX = 0 # 가로폭 고정(0:고정하지 않고 자동)
WINDOW_HEIGHT = 24 # 세로폭

 

윈도우 범위는 맵 이름을 표시하는 창을 뜻합니다.

WINDOW_FRAME은 창을 표시할 건지를 물어보는 것 입니다.

뒤에 true대신 false를 입력하면 창이 없이 글자만 뜨게 되겠죠

 

WINDOWS_SKIN은 넘어가도록 하겠습니다.

 

WINDOWS_WIDTH는 창의 넓이 입니다. 숫자로 고정을 하게되면 글자가 5글자이건 10글자이건

그대로 있습니다. 좋을 수도 있겠지만 긴 글자의 경우는 튀어나가서 보기 싫게 됩니다.

 

WINDOWS_HEIGHT는 창의 높이입니다. 이 부분이 약간 중요하다고 볼 수 있습니다.

물론 건드리지 않으면 잘 나오지만 아래에 나오는 폰트 사이즈를 수정할 때 글자의 크기가 커지면

창을 튀어나오게 됩니다. 그럴 때 이 부분의 숫자를 크게 해서 글자 크기에 맞게 바꿔주시면 됩니다.

 

 

# 폰트
#
FONT_NAME = "굴림"
FONT_COLOR = Color.new(255, 255, 0, 255)
FONT_SIZE = 18
#

 

이 부분은 폰트를 수정하는 곳 입니다. 폰트는 다 아시죠? 글꼴 즉 글자체입니다.

굴림 부분을 돋음, 궁서 등 윈도우 자체에 있는 폰트로 마음껏 바꿀 수 있습니다.

 

그리고 Color은 RGB를 15진수가 아닌 10진수로 255까지 나타낸 것 같습니다.

RGB는 숫자 3개를 순서대로 Red, Green, Blue로 나타낸 것 입니다.

이 때 마지막 숫자는 아마 그림자인 것 같습니다. 어쨌든 저 숫자를 변경해서 색깔을 정할 수 있는데요

레드, 그린, 블루를 섞어서 여러가지 색을 만들 수 있습니다.

빨강 : 255, 0, 0

초록 : 0, 255, 0

파랑 : 0, 0, 255

노랑 : 255, 255, 0

분홍 : 255, 0, 255

하늘 : 100, 200, 255

 

마지막줄은 폰트 사이즈 즉 글자의 크기입니다.

뒤의 18을 마음대로 바꿔주시면 되겠죠? 그리고 글자의 크기를 바꾸신 후에는 위에 있는

WINDOWS_WIDTH를 수정해서 글자크기에 맞게 창의 크기도 조절 해 주셔야 합니다.


# [표시 위치] (0:좌상 ,1:우상 ,2:좌하 ,3:우하)
#
POSITION = 1

 

맵의 이름이 어디에 표시될 것인지를 정하는 부분입니다.

사용자가 X,Y 점 즉 좌표를 입력하는 것이 아니라 미리 입력된 좌표로 가게끔 해 두었습니다.

어떻게 보면 편리할 수도 있지만 한편으로는 정확한 수정이 어렵다는게 단점입니다.

어쨌든 POSITION뒤의 숫자를 바꾸시면 됩니다.

0은 왼쪽 위, 1은 오른쪽 위, 2는 왼쪽 아래, 3은 오른쪽 아래입니다.


#
# [표시 시간]
#
TIME_FADEIN = 16 # 용명
TIME_STOP = 64 # 표시 정지
TIME_FADEOUT = 24 # 페이드아웃
end

 

이 부분은 꽤 많은 분들이 궁금해하실 것 같습니다.

맵 이름을 계속 표시하고 싶은데 계속 사라질 때 수정하는 부분입니다.

 

TIME_FADEIN은 맵이름이 나타나는 속도입니다. 숫자가 크면 더 느리게 서서히 나타납니다.

 

TIME_STOP은 넘어가도록 하겠습니다.

 

TIME_FADEOUT 이 부분이 가장 중요합니다. 페이드아웃 즉 서서히 사라지는 시간을 뜻하는데요

이 부분은 FADEIN과 달리 없어지는데 걸리는 시간이 아니라 얼마 뒤에 없어지냐를 뜻합니다.

즉 예를들어 10으로 하면 10초 후에 서서히 사라지고 20으로 하면 20초 후에 서서히 사라집니다.이 때 사라지기를 원하지 않는 분들은 -1로 해놓으시면 됩니다. -1이라는 시간은 존재하지 않기 때문에

계속 표시가 됩니다.

Comment '3'

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 습작 2012.12.24 6153
34 HUD 맵이름 스크립트 1 file 긔염둥이♥ 2012.05.19 2913
33 HUD 맵 이름 표시와 미니맵을 같이하자 8 file 뮤리온。 2011.10.08 4190
» HUD 맵 이름 표시 스크립트 수정하기 (계속 뜨게 하기, 위치 바꾸기 등) 3 뮤리온。 2011.10.08 2886
31 HUD 맵이름표시 6 캉쿤 2011.09.14 2379
30 HUD 맵 이름을 표시해주는 스크립트입니다. 25 임희성 2011.02.12 2936
29 HUD 시트르산의 나침반 스크립트 19 file 시트르산 2011.01.23 3195
28 HUD 주인공,NPC이름 머리 나타내기 49 file 송긔 2010.11.28 6059
27 HUD [게이지바]3.0버젼「현재시간, 플레이시간, 걸음수, 윈도우 이동 추가」(HelloCoa2Ver3.0) 63 file 코아 코스튬 2010.10.30 4921
26 HUD [게이지바]2.0버젼「체력,마나,경험치,직업,캐릭터,레벨,돈,맵이름」(HelloCoa2Ver2.0) 67 file 코아 코스튬 2010.10.23 5550
25 HUD MOG_Active_Hud 3 file Bera 2010.09.11 2468
24 HUD MOG_C_HUD. 6 file Bera 2010.09.11 2329
23 HUD HUD Menu 2.0 by Raziel 3 Alkaid 2010.09.07 2031
22 HUD 강화 나침반 스크립트 (원본 by 허걱) 16 file JACKY 2010.08.16 3105
21 HUD 캐릭터 아래 SP,HP표시해주는 스크립트 33 file 김!제스! 2010.08.04 4269
20 HUD 맵이름스크립트 52 file 이안 2010.01.17 3552
19 HUD 이름띄우기스크립트 - [ID홍길동] 이 아닌 [홍길동]으로 표기하기 27 블루레스 2009.11.06 4054
18 HUD [VX 가능] 이벤트 이름 띄우기 41 file 독도2005 2009.08.22 3901
17 HUD [맵이동시 맵이름을 표시] 심플한 디자인 36 file 제로스S2 2009.08.05 5000
16 HUD 머리위에 직업명을 표시해줍니다... 9 file 제로스S2 2009.08.03 2465
15 HUD HUD Menu 1.2 by Raziel 6 file 백호 2009.02.22 2390
Board Pagination Prev 1 2 Next
/ 2