Ogłoszenie 

Uwaga! To forum jest w trybie offline.
Wszelką pomoc uzyskasz pod adresem
forum.ultimateam.pl


Administracja Forum


Poprzedni temat «» Następny temat
HUD Mapy
Autor Wiadomość
Ayene 




Ranga RM:
4 gry

Pomogła: 232 razy
Dołączyła: 18 Wrz 2007
Posty: 2424
Wysłany: Pią 12 Mar, 2010 14:54
HUD Mapy
~ HUD Mapy [XP] ~

Krótki opis
Podobny skrypt jest już na forum, lecz z opinii użytkowników wynika, że jest on mało atrakcyjny graficznie. Dlatego zamieszczam inny ;-) Może się komuś przyda.
Konfiguracja skryptu jest dosyć prosta. Wymagane jest jednak użycie kilku obrazków, dlatego zamieszczam do ściągnięcia demo (znajdują się w folderze Graphics/Pictures).

Autor skryptu
squall [squall@rmxp.ch]

Tłumaczenie i poprawki
Ayene [yurika@o2.pl]

Kompatybilność
Tylko XP

Skrypt
Spoiler:

Kod:
#==============================================================================
# HUD MAPY
#------------------------------------------------------------------------------
# Autor: squall // [mail]squall@rmxp.ch[/mail]
# Tłumaczenie: Ayene
#==============================================================================
# Umieść skrypt nad Main
#------------------------------------------------------------------------------
# Skrypt rysuje Mini mapę
#==============================================================================

  ACTIVATED_ID = 26 # przełącznik włączający/wyłączający HUD

 # Położenie HUD:
   # 1 - górny lewy róg
   # 2 - górny prawy róg
   # 3 - dolny lewy róg
   # 4 - dolny prawy róg
  HUD_ALIGN = 4

#==============================================================================
class Scene_Map
 alias main_passminimap main
 alias update_passminimap update
 alias transfer_passminimap transfer_player
 #--------------------------------------------------------------------------
 # initialize
 #--------------------------------------------------------------------------
 def initialize
   @corner = HUD_ALIGN
 end
 #--------------------------------------------------------------------------
 # main
 #--------------------------------------------------------------------------
 def main
   @mini_map = Map_Event.new(@corner)
   main_passminimap
   @mini_map.dispose
 end
 #--------------------------------------------------------------------------
 # update
 #--------------------------------------------------------------------------
 def update
   @mini_map.update
   if $game_system.map_interpreter.running?
     @mini_map.visible = false
   elsif not $game_system.map_interpreter.running? and @mini_map.on?
     @mini_map.visible = true
   end
   update_passminimap
 end
 #--------------------------------------------------------------------------
 # transfer_player
 #--------------------------------------------------------------------------
 def transfer_player
   transfer_passminimap
   @mini_map.dispose
   @mini_map = Map_Event.new(@corner)
 end
end

#==============================================================================
# Map_Base
#==============================================================================

class Map_Base < Sprite
 #--------------------------------------------------------------------------
 # constants and instances
 #--------------------------------------------------------------------------
 PMP_VERSION  = 6 
 attr_reader :event
 #--------------------------------------------------------------------------
 # initialize
 #--------------------------------------------------------------------------
 def initialize(corner)
   super(Viewport.new(16, 16, width, height))
   viewport.z = 8000
   @border = Sprite.new
   @border.x = viewport.rect.x - 6
   @border.y = viewport.rect.y - 6
   @border.z = viewport.z - 1
   @border.bitmap = RPG::Cache.picture("mapback")
   self.visible = on?
   self.opacity = 180
   case corner
   when 1
     self.x = 16
     self.y = 16
   when 2
     self.x = 640 - width - 16
     self.y = 16
   when 3
     self.x = 16
     self.y = 480 - height - 16
   when 4
     self.x = 640 - width - 16
     self.y = 480 - height - 16
   else
     self.x = 16
     self.y = 16
   end
   self.visible = on?
 end
 #--------------------------------------------------------------------------
 # dispose
 #--------------------------------------------------------------------------
 def dispose
   @border.dispose
   super
 end
 #--------------------------------------------------------------------------
 # x=
 #--------------------------------------------------------------------------
 def x=(x)
   self.viewport.rect.x = x
   @border.x = x - 6
 end
 #--------------------------------------------------------------------------
 # y=
 #--------------------------------------------------------------------------
 def y=(y)
   self.viewport.rect.y = y
   @border.y = y - 6
 end
 #--------------------------------------------------------------------------
 # visible=
 #--------------------------------------------------------------------------
 def visible=(bool)
   super
   self.viewport.visible = bool
   @border.visible = bool
 end
 #--------------------------------------------------------------------------
 # minimap_on?
 #--------------------------------------------------------------------------
 def on?
   return $game_switches[ACTIVATED_ID]
 end
 #--------------------------------------------------------------------------
 # update
 #--------------------------------------------------------------------------
 def update
   super
   self.visible = on?
   
   if viewport.ox < display_x
     viewport.ox += 1
   elsif viewport.ox > display_x
     viewport.ox -= 1
   end
   if viewport.oy < display_y
     viewport.oy += 1
   elsif viewport.oy > display_y
     viewport.oy -= 1
   end
 end
 #--------------------------------------------------------------------------
 # width
 #--------------------------------------------------------------------------
 def width
   return 120
 end
 #--------------------------------------------------------------------------
 # height
 #--------------------------------------------------------------------------
 def height
   return 90
 end
 #--------------------------------------------------------------------------
 # display_x
 #--------------------------------------------------------------------------
 def display_x
   return $game_map.display_x * 3 / 64
 end
 #--------------------------------------------------------------------------
 # display_y
 #--------------------------------------------------------------------------
 def display_y
   return $game_map.display_y * 3 / 64
 end
end

#==============================================================================
# Map_Passability
#==============================================================================

class Map_Passability < Map_Base
 #--------------------------------------------------------------------------
 # constants
 #--------------------------------------------------------------------------
 INDEX  =
 [
 26, 27, 32, 33,    4, 27, 32, 33,   26,  5, 32, 33,    4,  5, 32, 33,   
 26, 27, 32, 11,    4, 27, 32, 11,   26,  5, 32, 11,    4,  5, 32, 11,   
 26, 27, 10, 33,    4, 27, 10, 33,   26,  5, 10, 33,    4,  5, 10, 33,
 26, 27, 10, 11,    4, 27, 10, 11,   26,  5, 10, 11,    4,  5, 10, 11, 
 24, 25, 30, 31,   24,  5, 30, 31,   24, 25, 30, 11,   24,  5, 30, 11, 
 14, 15, 20, 21,   14, 15, 20, 11,   14, 15, 10, 21,   14, 15, 10, 11,
 28, 29, 34, 35,   28, 29, 10, 35,    4, 29, 34, 35,    4, 29, 10, 35,
 38, 39, 44, 45,    4, 39, 44, 45,   38,  5, 44, 45,    4,  5, 44, 45,
 24, 29, 30, 35,   14, 15, 44, 45,   12, 13, 18, 19,   12, 13, 18, 11,
 16, 17, 22, 23,   16, 17, 10, 23,   40, 41, 46, 47,    4, 41, 46, 47,
 36, 37, 42, 43,   36,  5, 42, 43,   12, 17, 18, 23,   12, 13, 42, 43,
 36, 41, 42, 47,   16, 17, 46, 47,   12, 17, 42, 47,    0,  1,  6,  7
 ]
 X = [0, 1, 0, 1]
 Y = [0, 0, 1, 1]
 #--------------------------------------------------------------------------
 # initialize
 #--------------------------------------------------------------------------
 def initialize(corner)
   super(corner)
   @autotile = RPG::Cache.picture("minimap_tiles")
   setup()
 end
 #--------------------------------------------------------------------------
 # setup
 #--------------------------------------------------------------------------
 def setup()
   @map = load_data(sprintf("Data/Map%03d.rxdata", $game_map.map_id))
   tileset = $data_tilesets[@map.tileset_id]
   @passages = tileset.passages
   @priorities = tileset.priorities
   redefine_tiles
   refresh
 end
 #--------------------------------------------------------------------------
 # pass
 #--------------------------------------------------------------------------
 def pass(tile_id)
   return 15 if tile_id == nil
   return @passages[tile_id] != nil ? @passages[tile_id] : 15
 end
 #--------------------------------------------------------------------------
 # passable
 #--------------------------------------------------------------------------
 def passable(tile_id)
   return pass(tile_id) < 15
 end
 #--------------------------------------------------------------------------
 # redefine_tile
 #--------------------------------------------------------------------------
 def redefine_tiles
   width = @map.width
   height = @map.height
   map = RPG::Map.new(width, height)
   map.data = @map.data.dup
   for x in 0...width
     for y in 0...height
       for level in [1, 2]
         id = @map.data[x, y, level]
         if id != 0 and @priorities[id] == 0
           @map.data[x, y, 0] = id
           @passages[@map.data[x, y, 0]] = @passages[id]
         end
       end
     end
   end
   for x in 0...width
     for y in 0...height
       for level in [0]
       tile = @map.data[x, y, level]
       u = @map.data[x,   y-1, level]
       l = @map.data[x-1, y,   level]
       r = @map.data[x+1, y,   level]
       d = @map.data[x,   y+1, level]
       if !passable(tile)
         map.data[x, y] = 0
       else
         if tile == 0
           map.data[x, y, level] = 0
           next
         end
         if pass(tile) < 15
           if !passable(u) and !passable(l) and !passable(r) and !passable(d)
             map.data[x, y, level] = 0
           elsif !passable(u) and !passable(l) and !passable(r) and passable(d)
             map.data[x, y, level] = 90
           elsif !passable(u) and !passable(l) and !passable(d) and passable(r)
             map.data[x, y, level] = 91
           elsif !passable(u) and !passable(r) and !passable(d) and passable(l)
             map.data[x, y, level] = 93
           elsif !passable(l) and !passable(r) and !passable(d) and passable(u)
             map.data[x, y, level] = 92
           elsif !passable(u) and !passable(d) and passable(r) and passable(l)
             map.data[x, y, level] = 81
           elsif !passable(u) and !passable(r) and passable(d) and passable(l)
             map.data[x, y, level] = 84
           elsif !passable(u) and !passable(l) and passable(d) and passable(r)
             map.data[x, y, level] = 82
           elsif !passable(d) and !passable(r) and passable(l) and passable(u)
             map.data[x, y, level] = 86
           elsif !passable(d) and !passable(l) and passable(r) and passable(u)
             map.data[x, y, level] = 88
           elsif !passable(r) and !passable(l) and passable(d) and passable(u)
             map.data[x, y, level] = 80
           elsif !passable(u) and passable(d) and passable(r) and passable(l)
             map.data[x, y, level] = 68
           elsif !passable(d) and passable(u) and passable(r) and passable(l)
             map.data[x, y, level] = 76
           elsif !passable(r) and passable(d) and passable(u) and passable(l)
             map.data[x, y, level] = 72
           elsif !passable(l) and passable(d) and passable(u) and passable(r)
             map.data[x, y, level] = 64
           else
             map.data[x, y, level] = 48
           end
         else
           map.data[x, y, level] = 0
         end
       end
       end
     end
   end
   @map = map.dup
   map = nil
 end
 #--------------------------------------------------------------------------
 # refresh
 #--------------------------------------------------------------------------
 def refresh
   self.visible = false
   self.bitmap = Bitmap.new(@map.width * 6, @map.height * 6)
   bitmap = Bitmap.new(@map.width * 6, @map.height * 6)
   rect1 = Rect.new(6, 0, 6, 6)
   for y in 0...@map.height
     for x in 0...@map.width
       for level in [0]
         tile_id = @map.data[x, y, level]
         next if tile_id == 0
         id = tile_id / 48 - 1
         tile_id %= 48
         for g in 0..3
           h = 4 * tile_id + g
           y1 = INDEX[h] / 6
           x1 = INDEX[h] % 6
           rect2 = Rect.new(x1 * 3, y1 * 3, 3, 3)
           bitmap.blt(x * 6 + X[g] *  3, y * 6 + Y[g] * 3, @autotile, rect2)
         end
       end
     end
   end
   d_rect = Rect.new(0, 0, @map.width * 6, @map.height * 6)
   s_rect = Rect.new(0, 0, bitmap.width, bitmap.height)
   self.bitmap.stretch_blt(d_rect, bitmap, s_rect)
   self.viewport.ox = display_x
   self.viewport.oy = display_y
   bitmap.clear
   bitmap.dispose
 end
end

#==============================================================================
# Map_Event
#==============================================================================

class Map_Event < Map_Passability
 #--------------------------------------------------------------------------
 # initialize
 #--------------------------------------------------------------------------
 def initialize(corner = 4)
   super(corner)
   @dots = []
   @player = Sprite.new(self.viewport)
   @player.bitmap = RPG::Cache.picture("mm cursors")
   @player.src_rect = Rect.new(0, 0, 15, 15)
   @player.z = self.z + 3
   @events = {}
   
   for key in $game_map.events.keys
     event = $game_map.events[key]
     next if event.list == nil
     for i in 0...event.list.size
       next if event.list[i].code != 108
       @events[key] = Sprite.new(self.viewport)
       @events[key].z = self.z + 2
       if event.list[i].parameters[0].include?("event")
         @events[key].bitmap = RPG::Cache.picture("event")
       elsif event.list[i].parameters[0].include?("enemy")
         @events[key].bitmap = RPG::Cache.picture("enemy")
       elsif event.list[i].parameters[0].include?("teleport")
         @events[key].bitmap = RPG::Cache.picture("teleport")
       elsif event.list[i].parameters[0].include?("chest")
         @events[key].bitmap = RPG::Cache.picture("chest")
       elsif event.list[i].parameters[0].include?("npc")
         @events[key].bitmap = RPG::Cache.picture("npc")
       elsif event.list[i].parameters[0].include?("savepoint")
         @events[key].bitmap = RPG::Cache.picture("savepoint")
       end
     end
   end
 end
 #--------------------------------------------------------------------------
 # dispose
 #--------------------------------------------------------------------------
 def dispose
   @player.dispose
   for event in @events.values
     event.dispose
   end
   super
 end
 #--------------------------------------------------------------------------
 # update
 #--------------------------------------------------------------------------
 def update
   super
   @player.x = $game_player.real_x * 3 / 64 - 5
   @player.y = $game_player.real_y * 3 / 64 - 4
   @player.src_rect.x = ($game_player.direction / 2 - 1) * 15
   for key in @events.keys
     event = @events[key]
     mapevent = $game_map.events[key]
     event.x = mapevent.real_x * 3 / 64
     event.y = mapevent.real_y * 3 / 64
   end
 end
end


Demo



Screenshot
Spoiler:


Instrukcja
1. Wklej skrypt nad "Main" w Edytorze Skryptu.
2. Reszta instrukcji znajduje się w treści skryptu i w Demie.

Piszcie w razie problemów.
________________________


 
 
 
Melvin 




Preferowany:
RPG Maker XP

Ranga RM:
1 gra

Pomógł: 35 razy
Dołączył: 23 Paź 2009
Posty: 1063
Wysłany: Pią 12 Mar, 2010 14:56
SUPER!! :hura:
Super skrypt.
Na pewno mi się przyda.
________________________
MelvinClass:
Spoiler:

 
 
Czeliosss 



Ranga RM:
1 gra

Pomógł: 49 razy
Dołączył: 02 Lis 2009
Posty: 661
Skąd: Wa-wa
Wysłany: Pią 12 Mar, 2010 16:37
Skrypt świetny. Ale nie wiem jak zrobić, żeby te kolorowe ikony były pokazane.
________________________
...Amelanduil & FireBlade words will be remembered...
...Amelanduil & FireBlade acts will be remembered...
...Amelanduil & FireBlade never gonna die...

Nie pisać, bo nie odpiszę.
 
 
Melvin 




Preferowany:
RPG Maker XP

Ranga RM:
1 gra

Pomógł: 35 razy
Dołączył: 23 Paź 2009
Posty: 1063
Wysłany: Pią 12 Mar, 2010 17:02
Musisz dać komentarz.
Tak jak w demku.
________________________
MelvinClass:
Spoiler:

 
 
Czeliosss 



Ranga RM:
1 gra

Pomógł: 49 razy
Dołączył: 02 Lis 2009
Posty: 661
Skąd: Wa-wa
Wysłany: Pią 12 Mar, 2010 17:12
Dzięki. Szczerze to mam twierdzówkę i nie chciało mi otworzyć projektu, nawet po tutku Ayene.
________________________
...Amelanduil & FireBlade words will be remembered...
...Amelanduil & FireBlade acts will be remembered...
...Amelanduil & FireBlade never gonna die...

Nie pisać, bo nie odpiszę.
 
 
Melvin 




Preferowany:
RPG Maker XP

Ranga RM:
1 gra

Pomógł: 35 razy
Dołączył: 23 Paź 2009
Posty: 1063
Wysłany: Pią 12 Mar, 2010 20:33
A ja mam pytanko...

Jak zrobić że np. zdarzenie ma na mapce kolor czarny i żeby po rozmowie z nim, na mapce zmienił się na kolor czerwony?
________________________
MelvinClass:
Spoiler:

 
 
Ayene 




Ranga RM:
4 gry

Pomogła: 232 razy
Dołączyła: 18 Wrz 2007
Posty: 2424
Wysłany: Sob 13 Mar, 2010 16:21
Melvin, wystarczy zmienić stronę zdarzenia i wpisać na niej inny komentarz. Jednak stojąc na mapie od razu kolor kropki się nie zmieni - dopiero po wejściu i wyjściu z menu, teleporcie albo - gdy bardzo Tobie zależy - po wywołaniu za pomocą polecenia 'Skrypt':
Kod:
$scene = Scene_Map.new
________________________


 
 
 
Melvin 




Preferowany:
RPG Maker XP

Ranga RM:
1 gra

Pomógł: 35 razy
Dołączył: 23 Paź 2009
Posty: 1063
Wysłany: Sob 13 Mar, 2010 16:28
... Rozumiem, że mapka musi się odświeżyć?
Np. po przez wywołanie skryptu
Cytat:
$scene = Scene_Map.new

Tak?
________________________
MelvinClass:
Spoiler:

 
 
maciekjakis 



Preferowany:
RPG Maker XP

Dołączył: 21 Lut 2010
Posty: 1
Skąd: Człuchów
Wysłany: Sob 20 Mar, 2010 20:36
Jak włączyć tą mapę?
 
 
Ayene 




Ranga RM:
4 gry

Pomogła: 232 razy
Dołączyła: 18 Wrz 2007
Posty: 2424
Wysłany: Sob 20 Mar, 2010 20:37
Aktywuj przełącznik nr 26.
________________________


 
 
 
daffid77 




Preferowany:
RPG Maker XP

Dołączył: 04 Kwi 2010
Posty: 10
Wysłany: Pią 09 Kwi, 2010 13:34
Mam pytanie bo dodałem wszystko ale jak zaczynam grać to mi tej mapy nie pokazuję co trzeba zrobić ?> :?:
________________________
W Życiu Piękne Są tylko Chwilę

[Kto pare razy dostał po ryju i wie że nie jest ze szkła tez czuje że żyje dopiero gdy balansuje na krawędzi...!

 
 
 
Czeliosss 



Ranga RM:
1 gra

Pomógł: 49 razy
Dołączył: 02 Lis 2009
Posty: 661
Skąd: Wa-wa
Wysłany: Pią 09 Kwi, 2010 17:01
Masz napisane post wyżej.
Ps. Czytaj cały temat lub instrukcję skryptu ( jest po PL).
________________________
...Amelanduil & FireBlade words will be remembered...
...Amelanduil & FireBlade acts will be remembered...
...Amelanduil & FireBlade never gonna die...

Nie pisać, bo nie odpiszę.
 
 
the dragon 



Preferowany:
RPG Maker XP

Dołączył: 21 Maj 2010
Posty: 4
Wysłany: Pią 21 Maj, 2010 19:12
jak zmienić ten skrypt żeby można był widzieć mapę bez włączania jej proszę o odpowieć z góry dzięki
 
 
Czeliosss 



Ranga RM:
1 gra

Pomógł: 49 razy
Dołączył: 02 Lis 2009
Posty: 661
Skąd: Wa-wa
Wysłany: Sob 22 Maj, 2010 07:45
Chyba się nie da, ale nie jestem pewien. A jaki masz problem z włączeniem przełącznika?
Pzdr.
________________________
...Amelanduil & FireBlade words will be remembered...
...Amelanduil & FireBlade acts will be remembered...
...Amelanduil & FireBlade never gonna die...

Nie pisać, bo nie odpiszę.
 
 
erienus 




Preferowany:
RPG Maker XP

Pomógł: 29 razy
Dołączył: 12 Lut 2010
Posty: 300
Wysłany: Sob 22 Maj, 2010 08:59
Czeliosss - jak znasz ruby, da się wszystko xD
Cytat:
Ale ja znam same podstawy. - Czeliosss
________________________
Kolekcjonuję "Pomógł". Jeżeli ci pomogłem i chcesz wzbogacić moją kolekcję, kliknij "Pomógł".
Ostatnio zmieniony przez Czeliosss Sob 22 Maj, 2010 09:04, w całości zmieniany 1 raz  
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group | Template Klam by Ayene