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
801 스킬 Miriam's Handicrafts! 1.3 by DerVVulfman Alkaid 2012.08.26 1204
800 맵/타일 Mode07 0.5 by mewsterus 3 백호 2009.02.22 1149
799 메뉴 MOG - Scroll Bar for XP file 습작 2014.07.06 1532
798 상점 Mog- 상점업그레이드 ps인간 2009.01.23 2682
797 메뉴 Mog-메뉴업그레이드? ps인간 2009.01.23 2948
796 기타 mog-스테이터스 업그레이드? ps인간 2009.01.23 1904
795 아이템 mog-아이템창업그레이드? ps인간 2009.01.23 2555
794 HUD MOG_Active_Hud 3 file Bera 2010.09.11 2468
793 HUD MOG_C_HUD. 6 file Bera 2010.09.11 2329
792 기타 Monster Arena by trickster file 백호 2009.02.22 812
791 키입력 Mouse Input Module v5 by Near Fantastica (SDK호환) 2 백호 2009.02.22 962
790 이동 및 탈것 Mouse_move file 백호 2009.02.21 922
789 이동 및 탈것 Mouse_move 호환 100%강화버전 4 file 백호 2009.02.21 1512
788 이동 및 탈것 Mouse_move 호환버전 1 file 백호 2009.02.21 1059
787 전투 Mr Mo DVV Addon #14~#17 3 Alkaid 2011.05.23 1285
786 전투 Mr Mo DVV Addon #18~#19 Alkaid 2011.07.13 1266
785 전투 Mr Mo DVV Addon #20~#21 Alkaid 2011.09.05 1432
784 전투 Mr. Mo's ABS 5.5 13 Alkaid 2010.09.10 3459
783 전투 Mr. Mo's ABS Ultimate 1.2 by DerVVulfman Alkaid 2011.11.13 1640
782 전투 Mr. Mo's ABS Ultimate 1.9 by DerVVulfman 2 Alkaid 2011.12.01 1900
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ... 52 Next
/ 52