1>Script:
#==============================================================================#
# **Azraven Minimap** #
#------------------------------------------------------------------------------#
# ** Autor: Azraven #
# ** Versão: 1.5b #
# ** Data: 24/12/2012 #
#------------------------------------------------------------------------------#
# - Descrição: #
# Este script adiciona um mini mapa circular no jogo. #
# - Utilização: #
# Cole este script na seção "Scripts Adicionais". #
#==============================================================================#
# - Histórico #
# 24/12/2012 - Início e término da versão 1.0b #
# 04/03/2013 - Versão 1.5b Correção de bugs e adição de novas funções. #
# * Correção de um bug em que não verificava corretamente o #
# de determinados tiles. #
# * Correção de um bug em que tiles de grama (bush) eram #
# apresentados como bloqueio. #
# * Correção de um bug em que tiles de bloqueio posicionados #
# sobre tiles de grama era mrepresentados como passáveis. #
# * Código melhorado. #
# + Adicionado a função de mostrar os veiculos. #
# + Adicionado a função de mostrar os seguidores. #
# + Adicionado a função para utilizar IDs de Região para #
# ocultar áreas passáveis. #
# 14/06/2014 * Bug relacionado ao comando "Apagar Evento Temporário" #
# corrigido. #
# * Limpeza no código. #
#------------------------------------------------------------------------------#
module Azraven
module MiniMap
#--------------------------------------------------------------------------#
# CONFIGURAÇÂO #
#--------------------------------------------------------------------------#
#Tamanho do tile do mini mapa, recomendável não usar valores menores que 3.
TileSize = 8
#--------------------------------------------------------------------------#
#Ajuste do centralizamento do mini mapa, depende do tamanho do tile.
MapOffset = -4
#--------------------------------------------------------------------------#
#Define a cor do jogador no mapa.
PlayerColor = Color.new(255,0,0)
#--------------------------------------------------------------------------#
#Mostra os seguidores.
ShowFollowers = true
#--------------------------------------------------------------------------#
#Define a cor dos seguidores no mapa.
FollowerColor = Color.new(0,128,255)
#--------------------------------------------------------------------------#
#Define se irá mostrar os veiculos no map.
ShowVehicles = true
#--------------------------------------------------------------------------#
#Define a cor do barco.
BoatColor = Color.new(255,0,255)
#--------------------------------------------------------------------------#
#Define a cor do navio.
ShipColor = Color.new(255,0,255)
#--------------------------------------------------------------------------#
#Define a cor do aeronave.
AirshipColor = Color.new(255,0,255)
#--------------------------------------------------------------------------#
#Define a cor dos objetos mostrados no mapa.
#Objetos são NPCs, portas, teleportes, baús e o que mais o usuário puder
#imaginar.
#Para adicionar um novo objeto use a seguinte sintaxe dentro das {}:
# "tag" => Color.new(R,G,B,A)
#Onde tag é o comentário que será adiocinado a tal evento.
#Separe cada objeto por "," sem as aspas.
ObjectColor = {"npc" => Color.new(0,255,0),
"teleport" => Color.new(150,50,50),
"chest" => Color.new(100,100,100)}
#--------------------------------------------------------------------------#
#Define a cor de contorno dos objetos e do jogador.
BorderColor = Color.new(0,0,0)
#--------------------------------------------------------------------------#
#Opacidade dos objetos mostrados no mapa.
ObjectLayerOpacity = 255
#--------------------------------------------------------------------------#
#Posição do mapa na tela.
#1 = Canto superior esquerdo.
#2 = Canto superior direito.
#3 = Canto inferior esquerdo.
#4 = Canto superior direito.
MiniMapCorner = 2
#--------------------------------------------------------------------------#
#Define se determinada região mostrará como bloqueada no mini mapa.
#Util pra não revelar "passagens secretas".
UseHideRegion = true
#--------------------------------------------------------------------------#
#Id da região caso UseHideRegion for true.
HideRegionId = 1
#--------------------------------------------------------------------------#
#Cor do da área impassável do mapa.
MapColor = Color.new(200,150,150)
#--------------------------------------------------------------------------#
#Cor do contorno da área impassável do mapa.
MapBorderColor = Color.new(50,50,50)
#--------------------------------------------------------------------------#
#Nome do arquivo de imagem da borda do mini mapa na pasta Graphics/System.
BorderName = "Border"
#--------------------------------------------------------------------------#
#Define se irá utilizar uam textura ao fundo.
UseBGTexture = true
#--------------------------------------------------------------------------#
#Nome do arquivo de imagem da textura usada ao
#fundo do mini mapa na pasta Graphics/System.
#Obs.: A imagem deve estar com as cores invertidas.
BackTextureName = "OldPaper"
#--------------------------------------------------------------------------#
#Cor de preenchimento do fundo caso nã oseja utilizado uma textura.
BGColor = Color.new( 100, 100, 100)
#--------------------------------------------------------------------------#
#Opção de preencher com uma cor a área externa do mapa.
ClearOutsideArea = true
#--------------------------------------------------------------------------#
#Cor utilizada para preencher a área externa do mapa.
ClearOutsideColor = Color.new(0,0,0)
#--------------------------------------------------------------------------#
#Opção de dermarcar os limites do mapa.
OutlineMapArea = true
#--------------------------------------------------------------------------#
#Cor da demarcação dos limites do mapa.
OutlineMapColor = Color.new(0,0,0)
#--------------------------------------------------------------------------#
#Id do switch que habilita/desabilita o mini mapa.
EnableSwitchId = 1
#--------------------------------------------------------------------------#
# FIM DA CONFIGURAÇÂO. #
#--------------------------------------------------------------------------#
MiniMapCoords = {1 => [0,0,112,112],
2 => [Graphics.width - 112,0,112,112],
3 => [0,Graphics.height - 112,112,112],
4 => [Graphics.width - 112,Graphics.height - 112,112,112]}
end
end
#==============================================================================#
# ** Classe Color
#==============================================================================#
class Color
#-----------------------------------------------------------------------------
# * Inverte o valor das cores
#-----------------------------------------------------------------------------
def invert
r = 255 - self.red
g = 255 - self.green
b = 255 - self.blue
a = self.alpha
self.set(r, g, b, a)
end
end
#==============================================================================#
# ** Classe Mini Map
#==============================================================================#
class MiniMap
include Azraven::MiniMap
def initialize(viewport)
@viewport = viewport
@playercolor = PlayerColor.dup.invert
@followercolor = FollowerColor.dup.invert
@boatcolor = BoatColor.dup.invert
@shipcolor = ShipColor.dup.invert
@airshipcolor = AirshipColor.dup.invert
@objectcolor = ObjectColor.dup
@objectcolor.each_pair do |key, value|
@objectcolor[key] = value.dup.invert
end
@bordercolor = BorderColor.dup.invert
@mapcolor = MapColor.dup.invert
@mapbordercolor = MapBorderColor.dup.invert
@clearoutsidecolor = ClearOutsideColor.dup.invert
@outlinemapcolor = OutlineMapColor.dup.invert
refresh
end
def refresh
@map_id = $game_map.map_id
@backmask = Sprite.new(@viewport)
@backmask.bitmap = Cache::system("Back_96")
@backmask.x = @backmask.y = 8
@backtile = Sprite.new(@viewport)
@backtile.blend_type = 2
@backtile.z = 1
@backtile.x = @backtile.y = -100
@map = Sprite.new(@viewport)
@map.z = 2
@map.blend_type = 2
@object_layer = Sprite.new(@viewport)
@object_layer.z = 3
@object_layer.blend_type = 2
@object_layer.bitmap = Bitmap.new($game_map.width*TileSize + 112,
$game_map.height*TileSize + 112)
@object_layer.opacity = ObjectLayerOpacity
@border = Sprite.new(@viewport)
@border.bitmap = Cache::system(BorderName)
@border.z = 4
@border.opacity = 255
@mask = Cache::system("Mask")
draw_back
draw_map
end
def visible?
$game_switches[EnableSwitchId]
end
def draw_map
front = make_map_bitmap(@mapcolor)
border = make_map_bitmap(@mapbordercolor)
result = Bitmap.new($game_map.width*TileSize + 112,
$game_map.height*TileSize+ 112)
result.blt(-1, 0, border, border.rect)
result.blt(1, 0, border, border.rect)
result.blt(0, -1, border, border.rect)
result.blt(0, 1, border, border.rect)
result.blt(0, 0, front, front.rect)
@mapbitmap = result
end
def draw_back
bitmap = Bitmap.new($game_map.width*TileSize+112,
$game_map.height*TileSize+112)
if UseBGTexture
bit = Cache::system(BackTextureName)
bitmap.stretch_blt(bitmap.rect, bit, bit.rect)
else
bitmap.fill_rect(bitmap.rect, BGColor)
end
if ClearOutsideArea
bitmap.fill_rect(0,0,bitmap.width, 56, @clearoutsidecolor)
bitmap.fill_rect(0,0,56, bitmap.height, @clearoutsidecolor)
bitmap.fill_rect(0,bitmap.height-56,bitmap.width, 56, @clearoutsidecolor)
bitmap.fill_rect(bitmap.width-56,0,56, bitmap.height, @clearoutsidecolor)
elsif OutlineMapArea
bitmap.fill_rect(56,55,bitmap.width-112,1,@outlinemapcolor)
bitmap.fill_rect(55,56,1,bitmap.height-112,@outlinemapcolor)
bitmap.fill_rect(bitmap.width-56,55,1,bitmap.height-112,@outlinemapcolor)
bitmap.fill_rect(56,bitmap.height-56,bitmap.width-112,1,@outlinemapcolor)
end
@backtilebitmap = bitmap
end
def draw_object_layer
for event in $game_map.events.values
unless event.list.nil?
for item in event.list
if item.code == 108 or item.code == 408
if @objectcolor.has_key?(item.parameters[0])
draw_object(event.real_x*TileSize+56,
event.real_y*TileSize+56,
@objectcolor[item.parameters[0]])
end
end
end
end
end
if ShowFollowers
unless $game_player.vehicle
$game_player.followers.each do |follower|
draw_object(follower.real_x*TileSize+56,
follower.real_y*TileSize+56,
@followercolor) if follower.visible?
end
end
end
if ShowVehicles
unless $game_map.airship.transparent
draw_object($game_map.airship.real_x*TileSize+56,
$game_map.airship.real_y*TileSize+56,
@airshipcolor)
end
unless $game_map.ship.transparent
draw_object($game_map.ship.real_x*TileSize+56,
$game_map.ship.real_y*TileSize+56,
@shipcolor)
end
unless $game_map.boat.transparent
draw_object($game_map.boat.real_x*TileSize+56,
$game_map.boat.real_y*TileSize+56,
@boatcolor)
end
end
draw_object($game_player.real_x*TileSize+56,
$game_player.real_y*TileSize+56,
@playercolor)
end
def draw_object(x, y, color)
@object_layer.bitmap.fill_rect(x, y, TileSize, TileSize, @bordercolor)
@object_layer.bitmap.fill_rect(x+1, y+1, TileSize-2, TileSize-2, color)
@object_layer.bitmap.clear_rect(x,y,1,1)
@object_layer.bitmap.clear_rect(x,y+TileSize-1,1,1)
@object_layer.bitmap.clear_rect(x+TileSize-1,y,1,1)
@object_layer.bitmap.clear_rect(x+TileSize-1,y+TileSize-1,1,1)
end
def make_map_bitmap(color)
bitmap = Bitmap.new($game_map.width*TileSize + 112,
$game_map.height*TileSize + 112)
for x in 0..$game_map.width - 1
for y in 0..$game_map.height - 1
if $game_map.airship_land_ok?(x, y) || $game_map.bush?(x, y)
if UseHideRegion
bitmap.fill_rect(x*TileSize+56,
y*TileSize+56,
TileSize, TileSize,
color) if $game_map.region_id(x, y) == HideRegionId
else
next
end
if $game_map.bush?(x, y)
unless $game_map.passable?(x, y, 4)
bitmap.fill_rect(x*TileSize+56, y*TileSize+56, TileSize, TileSize, color)
end
end
next
end
bitmap.fill_rect(x*TileSize+56, y*TileSize+56, TileSize, TileSize, color)
end
end
bitmap
end
def update_object_layer
@object_layer.bitmap.clear
draw_object_layer
end
def dispose
@backmask.dispose
@backtile.dispose
@map.dispose
@object_layer.dispose
@border.dispose
end
def update
if @map_id != $game_map.map_id
dispose
@map_id = $game_map.map_id
refresh
end
@backmask.visible = visible?
@backtile.visible = visible?
@map.visible = visible?
@object_layer.visible = visible?
@border.visible = visible?
if visible?
@map.bitmap = @mapbitmap.dup
@backtile.bitmap = @backtilebitmap.dup
sx = $game_player.real_x * (TileSize * -1) + MapOffset
sy = $game_player.real_y * (TileSize * -1) + MapOffset
update_object_layer
@map.x = @backtile.x = @object_layer.x = sx
@map.y = @backtile.y = @object_layer.y = sy
@backtile.bitmap.blt(sx*-1, sy*-1,@mask,@mask.rect)
@map.bitmap.blt(sx*-1, sy*-1,@mask,@mask.rect)
@object_layer.bitmap.blt(sx*-1, sy*-1,@mask,@mask.rect)
end
end
end
#==============================================================================#
# ** Classe Spriteset_Map
#==============================================================================#
class Spriteset_Map
alias azraven_mini_map_init initialize
alias azraven_mini_map_updt update
alias azraven_mini_map_disp dispose
include Azraven::MiniMap
def initialize
create_minimap
azraven_mini_map_init
end
def create_minimap
viewport = Viewport.new(Graphics.width - 112,0,112,112)
viewport.rect.set(MiniMapCoords[MiniMapCorner][0],
MiniMapCoords[MiniMapCorner][1],
MiniMapCoords[MiniMapCorner][2],
MiniMapCoords[MiniMapCorner][3])
viewport.z = 500
@minimapa = MiniMap.new(viewport)
end
def dispose
azraven_mini_map_disp
@minimapa.dispose
end
def update
azraven_mini_map_updt
@minimapa.update
end
end
#==============================================================================#
# ** Fim do Script
#==============================================================================#
2> Cách sử dụng:
_ Nhấn F11 để mở kho script:
_Sau đó copy toàn bộ script trên paste vào một ô trống dưới
Metarial:
_Lưu ý: Trong script này quy định nó chỉ hoạt động khi và chỉ khi
Control Swiches 001 hoạt động.
Vì vậy trong demo của bạn mà có sử dụng Control Swich thì bạn
chỉ dùng từ 002 trở lên. Còn 001 thì dùng để khởi động minimap.
Đầu tiên tạo một event và để Triggẻ là Prallel ....
Sau đó để Control Swiches: [001] là On
Rồi thoát sự kiện bằng lệnh Exit Even Processing.
*Mini map chỉ hoạt động khi Công tắc 001=On
3>Demo:
Để hiểu rõ hơn thì bạn tải Demo này về xài:

0 nhận xét:
Đăng nhận xét