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 6317
941 전투 XAS Hero Edition Ver. 3.91 3 프리즌커피 2011.12.23 3902
940 맵/타일 Call Map Event by DerVVulfman Alkaid 2011.12.21 1865
939 기타 탤레포트 스크립트 3 앞잡이 2011.12.10 2261
938 전투 Mr. Mo's ABS Ultimate 1.9 by DerVVulfman 2 Alkaid 2011.12.01 1902
937 전투 Mr. Mo's ABS Ultimate 1.2 by DerVVulfman Alkaid 2011.11.13 1642
936 그래픽 Meagan's Particles 1.1 by DerVVulfman 3 Alkaid 2011.11.01 2212
935 HUD 맵 이름 표시와 미니맵을 같이하자 8 file 뮤리온。 2011.10.08 4200
» HUD 맵 이름 표시 스크립트 수정하기 (계속 뜨게 하기, 위치 바꾸기 등) 3 뮤리온。 2011.10.08 2897
933 기타 업데이트 (죽었을경우부활 )스크립트한글화 2 by향온 2011.09.27 2438
932 온라인 온라인 스크립트입니다^^(예제파일) 7 캉쿤 2011.09.24 4395
931 온라인 온라인 스크립트 KnM 배포합니다. 43 file 뮤바보 2011.09.23 5354
930 기타 부활스크립트 4 캉쿤 2011.09.19 2068
929 이동 및 탈것 8방향이동 9 캉쿤 2011.09.19 2535
928 HUD 맵이름표시 6 캉쿤 2011.09.14 2388
927 상점 상점아템 가격변동(중뷁?) 4 캉쿤 2011.09.14 2189
926 키입력 한글입력기(자음, 모음 분리. 아마 중복일 듯...) 11 캉쿤 2011.09.13 3228
925 아이템 아이템 소지수 한계돌파(중복일 확률 높음) 3 캉쿤 2011.09.13 1487
924 저장 렉없는 자동세이브(중복임??) 4 캉쿤 2011.09.12 1991
923 스킬 Blacksmith System 2.0 by ForeverZer0 4 Alkaid 2011.09.07 1780
922 전투 Mr Mo DVV Addon #20~#21 Alkaid 2011.09.05 1433
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 52 Next
/ 52