Afficher une minimap (script)

Publié le par Cid6

On a beaucoup vu ce genre de script en tutoriaux, mais là c'est vraiment un script, bien que je préfére et que je préférerais toujours mon tuto dessus je vous met ce script que je n'ai même pas eu a utiliser, j'espére qu'il marche, il permet d'afficher une minimap, ainsi qu'un indicateur a mon avis, enfin, voyez, installez le.....

Tout d'abord, créez un nouveau script nommé 'Window_MiniMap' au dessus de 'Main' et copiez ceci dedans :


#==========================
# ■ MiniMapScript
#--------------------------
# Translation by: Mr. DJ
# Request by: KHORN
# Made by: markusmks
#==========================

class MiniMapScript < Window_Base
attr_accessor :modus
#--------------------------
# &#9679; Initialize
#--------------------------
def initialize(mapname=nil)
super(0, 0, 200, 67)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.color = normal_color
self.contents.font.name = "Arial"
self.contents.font.size = 20
self.windowskin = nil
# ------------OPTIONEN----------
# Modus 1 = Name of the map as: "mapname.png"
# Vb: "Dungeon.png"
# Modus 2 = Id as the name as "mapID.png"
# Vb: "1.png"
# Modus 3 = $name_minim[MapID] = "Screen" / screenone ".png"
# in Modus 3 you save all the images in /pictures/MiniMaps and asign them to the map with call script
#==========================
@modus = 3
#--------------------------
@mapname = mapname
if @modus == 1
real_map = $game_map.name
elsif @modus == 2
real_map = $game_map.map_id.to_s
elsif @modus == 3
real_map = $name_minim[$game_map.map_id]
end
@real_map = real_map
if FileTest.exist?("Graphics/Pictures/MiniMaps/"+real_map+".png")
@mapname = real_map
end
if @mapname != nil
#--<Colors>-- Will be the colors of the player and NPC, but do not change these! see below
player_color = Color.new(0,0,0)
npc_color = Color.new(255,0,0)
#----MAP------------------------#
@player_color=player_color
@npc_color=npc_color
@gra_dir = "Graphics/Pictures/MiniMaps/"
@mmap = @gra_dir+@mapname+".png"
map = Bitmap.new(@mmap)
@map_sprite = Sprite.new
@map_sprite.bitmap = map
@map_sprite.x = 0
@map_sprite.y = 0
@map_sprite.opacity = 180
@map_sprite.zoom_x = 0.98
@map_sprite.zoom_y = 0.98
#------PLAYER------------#
@player_sprite = Sprite.new
@player_sprite.bitmap = Bitmap.new(3,3)
@player_sprite.bitmap.fill_rect(0,0,3,3,@player_color) #you can change these
@event_sprite = []
for i in $game_map.events.keys.sort
if ($game_map.events[i].is_a?(Game_Event) and $game_map.events[i].list!=nil and $game_map.events[i].list[0].code == 108 and $game_map.events[i].list[0].parameters == ["mm_point"])
@event_sprite[i] = Sprite.new
@event_sprite[i].bitmap = Bitmap.new(3,3)
if $game_map.events[i].list[1].parameters[0] != nil
colors = $game_map.events[i].list[1].parameters[0].split
red = colors[0].to_i
green = colors[1].to_i
blue = colors[2].to_i
@npc_color = Color.new(red,green,blue)
else
@npc_color = Color.new(255,0,0)
end
@event_sprite[i].bitmap.fill_rect(0,0,3,3,@npc_color)
end
end
refresh
end
end
#--------------------------
# &#9679; Refresh
#--------------------------
def refresh
self.contents.clear
if @event_sprite == []
renew
end
if FileTest.exist?("Graphics/Pictures/MiniMaps/"+@real_map+".png")
@mapname = @real_map
else
@mapname = nil
end
if @mapname != nil
for i in $game_map.events.keys.sort
if ($game_map.events[i].is_a?(Game_Event) and $game_map.events[i].list!=nil and $game_map.events[i].list[0].code == 108 and $game_map.events[i].list[0].parameters == ["mm_point"])
if @event_sprite == []
renew
return
end
@event_sprite[i].x = $game_map.events[i].real_x/16
@event_sprite[i].y = $game_map.events[i].real_y/16
@event_sprite[i].opacity = 255
@event_sprite[i].zoom_x = 1
@event_sprite[i].zoom_y = 1
end
i += 1
end
#----PLAYER MOVE---------#
@player_sprite.x = $game_player.real_x/16
@player_sprite.y = $game_player.real_y/16
@player_sprite.opacity = 255
@player_sprite.zoom_x = 1
@player_sprite.zoom_y = 1
#----------------------------#
end
end
#--------------------------
# &#9679; Renew Graphics
#--------------------------
def renew
dispose
if @modus == 1
real_map = $game_map.name
elsif @modus == 2
real_map = $game_map.map_id.to_s
elsif @modus == 3
real_map = $name_minim[$game_map.map_id]
end
@real_map = real_map
if FileTest.exist?("Graphics/Pictures/MiniMaps/"+@real_map+".png")
@mapname = real_map
end
@gra_dir = "Graphics/Pictures/MiniMaps/"
@mmap = @gra_dir+@mapname+".png"
map = Bitmap.new(@mmap)
@map_sprite = Sprite.new
@map_sprite.bitmap = map
@map_sprite.x = 0
@map_sprite.y = 0
@map_sprite.opacity = 180
@map_sprite.zoom_x = 0.98
@map_sprite.zoom_y = 0.98
@player_sprite = Sprite.new
@player_sprite.bitmap = Bitmap.new(3,3) #you can change these

@player_sprite.bitmap.fill_rect(0,0,3,3,@player_color=Color.new(0,0,0)) #you can change these
@event_sprite = []
for i in $game_map.events.keys.sort
if ($game_map.events[i].is_a?(Game_Event) and $game_map.events[i].list!=nil and $game_map.events[i].list[0].code == 108 and $game_map.events[i].list[0].parameters == ["mm_point"])
@event_sprite[i] = Sprite.new
@event_sprite[i].bitmap = Bitmap.new(3,3)
if $game_map.events[i].list[1].parameters[0] != nil
colors = $game_map.events[i].list[1].parameters[0].split
red = colors[0].to_i
green = colors[1].to_i
blue = colors[2].to_i
@npc_color = Color.new(red,green,blue)
else
@npc_color = Color.new(255,0,0)
end
@event_sprite[i].bitmap.fill_rect(0,0,3,3,@npc_color) #you can change these
end
end
end
#--------------------------
# &#9679; Update
#--------------------------
def update
if @modus == 3 and $name_minim[$game_map.map_id] != ""
renew
end
refresh
end
#--------------------------
# &#9679; Dispose all
#--------------------------
def dispose
if @event_sprite != nil
for sprite in @event_sprite
if sprite != nil
sprite.dispose
end
end
end
if @player_sprite != nil
@player_sprite.dispose
end
if @map_sprite != nil
@map_sprite.dispose
end
end
end

#==========================
# &#9632; Game_MiniMap
#--------------------------
# © i dont know
#==========================

class Game_MiniMap
#--------------------------
# &#9679; Initialize
#--------------------------
def initialize
@data = []
end
#--------------------------
# &#9679; Map ID
# variable_id : Map ID
#--------------------------
def [](variable_id)
if variable_id <= 5000 and @data[variable_id] != nil
return @data[variable_id]
else
return ""
end
end
#--------------------------
# &#9679; MiniMap Screen declared here
# variable_id : Map ID
# value : Screen Name
#--------------------------
def []=(variable_id, value)
if variable_id <= 5000
@data[variable_id] = value
end
end
end

# ==================== Read this ==
#
# As i cannot alias, please read this!!
# To make sure the data of the minimaps is saved,
# Copy the text between the edits, to the corresponding place in:
# Scene_Title, Scene_Load, Scene_Save
# After you did that...
# ...Delete all the codes below
# so they wont work here ^^... Mr. DJ
#
#==========================

class Scene_Title
def command_new_game
$game_system.se_play($data_system.decision_se)
Audio.bgm_stop
Graphics.frame_count = 0
$game_temp = Game_Temp.new
$game_system = Game_System.new
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_screen = Game_Screen.new
$game_actors = Game_Actors.new
$game_party = Game_Party.new
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
# EDIT -------------------------------
$name_minim = Game_MiniMap.new
# ------------------------------------
$game_party.setup_starting_members
$game_map.setup($data_system.start_map_id)
$game_player.moveto($data_system.start_x, $data_system.start_y)
$game_player.refresh
$game_map.autoplay
$game_map.update
$scene = Scene_Map.new
end
end
class Scene_Save
def write_save_data(file)
characters = []
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
characters.push([actor.character_name, actor.character_hue])
end
Marshal.dump(characters, file)
Marshal.dump(Graphics.frame_count, file)
$game_system.save_count += 1
$game_system.magic_number = $data_system.magic_number
Marshal.dump($game_system, file)
Marshal.dump($game_switches, file)
Marshal.dump($game_variables, file)
Marshal.dump($game_self_switches, file)
Marshal.dump($game_screen, file)
Marshal.dump($game_actors, file)
Marshal.dump($game_party, file)
Marshal.dump($game_troop, file)

Marshal.dump($game_map, file)
Marshal.dump($game_player, file)
# EDIT ------------------------
Marshal.dump($name_minim, file)
# -----------------------------
end
end
class Scene_Load
def read_save_data(file)
characters = Marshal.load(file)
Graphics.frame_count = Marshal.load(file)
$game_system = Marshal.load(file)
$game_switches = Marshal.load(file)
$game_variables = Marshal.load(file)
$game_self_switches = Marshal.load(file)
$game_screen = Marshal.load(file)
$game_actors = Marshal.load(file)
$game_party = Marshal.load(file)
$game_troop = Marshal.load(file)
$game_map = Marshal.load(file)
$game_player = Marshal.load(file)
# EDIT ---------------------------------
$name_minim = Marshal.load(file)
# --------------------------------------
if $game_system.magic_number != $data_system.magic_number
$game_map.setup($game_map.map_id)
$game_player.center($game_player.x, $game_player.y)
end
$game_party.refresh
end
end


Puis, remplacez le script "Scene_Map" par ça :


#==========================
# &#9632; Show Map .name
#--------------------------
# &#12288;shows map name
#==========================

class Game_Map
def name
$map_infos[@map_id]
end
end

class Scene_Title
$map_infos = load_data("Data/MapInfos.rxdata")
for key in $map_infos.keys
$map_infos[key] = $map_infos[key].name
end
end

#==========================
# &#9632; Scene_Map
#--------------------------
# &#12288;einige edits für minimap, von markusmks
# 1) line 1-18
# 2) line 43
# 3) line 65
# 4) line 85-89
# 5) line 304-305
#
# Diese Codes in schon editierte Scene_Maps einfügen, oder wenn man nichts
# editiert hat, einfach Scene_Map ersetzen
#==========================

class Scene_Map
#--------------------------

#--------------------------
def main

@spriteset = Spriteset_Map.new

@message_window = Window_Message.new
@mini_map = MiniMapScript.new

Graphics.transition

loop do

Graphics.update

Input.update

update

if $scene != self
break
end
end

Graphics.freeze

@spriteset.dispose

@message_window.dispose
@mini_map.dispose

if $scene.is_a?(Scene_Title)

Graphics.transition
Graphics.freeze
end
end
#--------------------------
def update

loop do

$game_map.update
$game_system.map_interpreter.update
$game_player.update
if @mini_map != nil
@mini_map.update
else
@mini_map = MiniMapScript.new
end

$game_system.update
$game_screen.update

unless $game_temp.player_transferring
break
end

transfer_player

if $game_temp.transition_processing
break
end
end

@spriteset.update

@message_window.update

if $game_temp.gameover

$scene = Scene_Gameover.new
return
end

if $game_temp.to_title

$scene = Scene_Title.new
return
end

if $game_temp.transition_processing

$game_temp.transition_processing = false

if $game_temp.transition_name == ""
Graphics.transition(20)
else
Graphics.transition(40, "Graphics/Transitions/" +
$game_temp.transition_name)
end
end

if $game_temp.message_window_showing
return
end

if $game_player.encounter_count == 0 and $game_map.encounter_list != []

unless $game_system.map_interpreter.running? or
$game_system.encounter_disabled

n = rand($game_map.encounter_list.size)
troop_id = $game_map.encounter_list[n]

if $data_troops[troop_id] != nil

$game_temp.battle_calling = true
$game_temp.battle_troop_id = troop_id
$game_temp.battle_can_escape = true
$game_temp.battle_can_lose = false
$game_temp.battle_proc = nil
end
end
end

if Input.trigger?(Input::B)

unless $game_system.map_interpreter.running? or
$game_system.menu_disabled

$game_temp.menu_calling = true
$game_temp.menu_beep = true
end
end

if $DEBUG and Input.press?(Input::F9)

$game_temp.debug_calling = true
end

unless $game_player.moving?

if $game_temp.battle_calling
call_battle
elsif $game_temp.shop_calling
call_shop
elsif $game_temp.name_calling
call_name
elsif $game_temp.menu_calling
call_menu
elsif $game_temp.save_calling
call_save
elsif $game_temp.debug_calling
call_debug
end
end
end
#--------------------------
def call_battle

$game_temp.battle_calling = false

$game_temp.menu_calling = false
$game_temp.menu_beep = false

$game_player.make_encounter_count

$game_temp.map_bgm = $game_system.playing_bgm
$game_system.bgm_stop

$game_system.se_play($data_system.battle_start_se)

$game_system.bgm_play($game_system.battle_bgm)

$game_player.straighten

$scene = Scene_Battle.new
end
#--------------------------
def call_shop

$game_temp.shop_calling = false

$game_player.straighten

$scene = Scene_Shop.new
end
#--------------------------
def call_name

$game_temp.name_calling = false

$game_player.straighten

$scene = Scene_Name.new
end
#--------------------------
def call_menu

$game_temp.menu_calling = false

if $game_temp.menu_beep

$game_system.se_play($data_system.decision_se)

$game_temp.menu_beep = false
end

$game_player.straighten

$scene = Scene_Menu.new
end
#--------------------------
def call_save

$game_player.straighten

$scene = Scene_Save.new
end
#--------------------------
def call_debug

$game_temp.debug_calling = false

$game_system.se_play($data_system.decision_se)

$game_player.straighten

$scene = Scene_Debug.new
end
#--------------------------
def transfer_player

$game_temp.player_transferring = false

if $game_map.map_id != $game_temp.player_new_map_id

$game_map.setup($game_temp.player_new_map_id)
end

$game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)

case $game_temp.player_new_direction
when 2
$game_player.turn_down
when 4
$game_player.turn_left
when 6
$game_player.turn_right
when 8
$game_player.turn_up
end

$game_player.straighten

$game_map.update

@spriteset.dispose
@spriteset = Spriteset_Map.new
@mini_map.dispose
@mini_map = MiniMapScript.new

if $game_temp.transition_processing

$game_temp.transition_processing = false

Graphics.transition(20)
end

$game_map.autoplay

Graphics.frame_reset

Input.update
end
end
#==========================
# &#9632; Show Map .name
#--------------------------
# &#12288;shows map name
#==========================

class Game_Map
def name
$map_infos[@map_id]
end
end

class Scene_Title
$map_infos = load_data("Data/MapInfos.rxdata")
for key in $map_infos.keys
$map_infos[key] = $map_infos[key].name
end
end

#==========================
# &#9632; Scene_Map
#--------------------------
# &#12288;einige edits für minimap, von markusmks
# 1) line 1-18
# 2) line 43
# 3) line 65
# 4) line 85-89
# 5) line 304-305
#
# Diese Codes in schon editierte Scene_Maps einfügen, oder wenn man nichts
# editiert hat, einfach Scene_Map ersetzen
#==========================

class Scene_Map
#--------------------------
def main

@spriteset = Spriteset_Map.new

@message_window = Window_Message.new
@mini_map = MiniMapScript.new

Graphics.transition

loop do

Graphics.update

Input.update

update

if $scene != self
break
end
end

Graphics.freeze

@spriteset.dispose

@message_window.dispose
@mini_map.dispose

if $scene.is_a?(Scene_Title)

Graphics.transition
Graphics.freeze
end
end
#--------------------------
def update

loop do

$game_map.update
$game_system.map_interpreter.update
$game_player.update
if @mini_map != nil
@mini_map.update
else
@mini_map = MiniMapScript.new
end

$game_system.update
$game_screen.update

unless $game_temp.player_transferring
break
end

transfer_player

if $game_temp.transition_processing
break
end
end

@spriteset.update

@message_window.update

if $game_temp.gameover

$scene = Scene_Gameover.new
return
end

if $game_temp.to_title

$scene = Scene_Title.new
return
end

if $game_temp.transition_processing

$game_temp.transition_processing = false

if $game_temp.transition_name == ""
Graphics.transition(20)
else
Graphics.transition(40, "Graphics/Transitions/" +
$game_temp.transition_name)
end
end

if $game_temp.message_window_showing
return
end

if $game_player.encounter_count == 0 and $game_map.encounter_list != []

unless $game_system.map_interpreter.running? or
$game_system.encounter_disabled

n = rand($game_map.encounter_list.size)
troop_id = $game_map.encounter_list[n]

if $data_troops[troop_id] != nil

$game_temp.battle_calling = true
$game_temp.battle_troop_id = troop_id
$game_temp.battle_can_escape = true
$game_temp.battle_can_lose = false
$game_temp.battle_proc = nil
end
end
end

if Input.trigger?(Input::B)

unless $game_system.map_interpreter.running? or
$game_system.menu_disabled

$game_temp.menu_calling = true
$game_temp.menu_beep = true
end
end

if $DEBUG and Input.press?(Input::F9)

$game_temp.debug_calling = true
end

unless $game_player.moving?

if $game_temp.battle_calling
call_battle
elsif $game_temp.shop_calling
call_shop
elsif $game_temp.name_calling
call_name
elsif $game_temp.menu_calling
call_menu
elsif $game_temp.save_calling
call_save
elsif $game_temp.debug_calling
call_debug
end
end
end
#--------------------------
def call_battle

$game_temp.battle_calling = false

$game_temp.menu_calling = false
$game_temp.menu_beep = false

$game_player.make_encounter_count

$game_temp.map_bgm = $game_system.playing_bgm
$game_system.bgm_stop

$game_system.se_play($data_system.battle_start_se)

$game_system.bgm_play($game_system.battle_bgm)

$game_player.straighten

$scene = Scene_Battle.new
end
#--------------------------
def call_shop

$game_temp.shop_calling = false

$game_player.straighten

$scene = Scene_Shop.new
end
#--------------------------
def call_name

$game_temp.name_calling = false

$game_player.straighten

$scene = Scene_Name.new
end
#--------------------------
def call_menu

$game_temp.menu_calling = false

if $game_temp.menu_beep

$game_system.se_play($data_system.decision_se)

$game_temp.menu_beep = false
end

$game_player.straighten

$scene = Scene_Menu.new
end
#--------------------------
def call_save

$game_player.straighten

$scene = Scene_Save.new
end
#--------------------------
def call_debug

$game_temp.debug_calling = false

$game_system.se_play($data_system.decision_se)

$game_player.straighten

$scene = Scene_Debug.new
end
#--------------------------
def transfer_player

$game_temp.player_transferring = false

if $game_map.map_id != $game_temp.player_new_map_id

$game_map.setup($game_temp.player_new_map_id)
end

$game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)

case $game_temp.player_new_direction
when 2
$game_player.turn_down
when 4
$game_player.turn_left
when 6
$game_player.turn_right
when 8
$game_player.turn_up
end

$game_player.straighten

$game_map.update

@spriteset.dispose
@spriteset = Spriteset_Map.new
@mini_map.dispose
@mini_map = MiniMapScript.new

if $game_temp.transition_processing

$game_temp.transition_processing = false

Graphics.transition(20)
end

$game_map.autoplay

Graphics.frame_reset

Input.update
end
end


Ensuite, allez dans le répertoire 'graphics', puis 'pictures' et créez un nouveau dossier nommé 'Minimaps'. C'est là qu'on va placer les images des minicartes. Ces images doivent être au format .png.
Pour afficher la minicarte dans le jeu, il faut créer un évènement qui déclenche une commande script comme ceci :

$name_minim[1] = "plaine"


Le numéro entre crochets représente l'ID de la map (vous pouvez le voir en faisant propriétés de la carte, en haut) est le nom qu'il y a après sera le nom du fichier minicarte associé à cette map.
Enfin, pour afficher les évènements sur la minicarte,il faut mettre un commentaire de ce type dans l'évènement :

mm_point
255 255 255
255 255 255 représente la couleur qui le représentera sur la minicarte, ici c'est le blanc.
Publicité

Publié dans Scripts RPG Makers XP

Pour être informé des derniers articles, inscrivez vous :
Commenter cet article
M
Bonjour<br />  <br /> Il me marque une erreur a la ligne 316 : EOF ERROR (Window_MiniMap)<br />  <br /> Cordialement
Répondre