Advertisement
LeonMMS

LM² - Global Minimap 1.4.1

Aug 24th, 2017
279
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 6.91 KB | None | 0 0
  1. #       LM² - Global Minimap  1.4.1
  2. #       Data 07/05/15 | Revisão 28/08/17
  3. #   Criado por LeonMM, alguns metodos pertencem a Squall e RD12
  4. #  Versão Netplay Diamond - Obrigado Kies~ pelos testes
  5. class Global_Minimap < Sprite
  6.   # Posicionamento do minimapa
  7.   X = 675
  8.   Y = 10
  9.   attr_accessor :show_players
  10.   # Inicializar minimapa
  11.   def initialize(showplayers = true)
  12.     @view = Viewport.new(X,Y,110,110)
  13.     @view.z = 1000
  14.     @bg = Sprite.new
  15.     @bg.bitmap = RPG::Cache.minimap("BG")
  16.     @bg.x = X - 5
  17.     @bg.y = Y - 5
  18.     @bg.z = 999
  19.     @pass = Sprite.new(@view)
  20.     @pass.bitmap = Bitmap.new($game_map.width * 5 , $game_map.height * 5)
  21.     @nicon = Sprite.new
  22.     @nicon.bitmap = showplayers ? RPG::Cache.minimap("Players") : RPG::Cache.minimap("PlayersOFF")
  23.     @nicon.x = X - 34
  24.     @nicon.y = Y - 5
  25.     @nicon.z = 1000
  26.     @show_players = showplayers
  27.     @events = {}
  28.     @enemys = {}
  29.     @netplayers = {}
  30.     @oldmpp = nil
  31.     @gplayer_x = $game_player.x
  32.     @gplayer_y = $game_player.y
  33.     draw
  34.     draw_player
  35.     draw_events
  36.   end
  37.   # Desenhar o minimapa, jogadores e eventos
  38.   def draw
  39.     @pass.bitmap.clear
  40.     for x in 0...$game_map.width
  41.       for y in 0...$game_map.height
  42.         next if not $game_map.passable?(x,y,0)
  43.         passbm = RPG::Cache.minimap("Passable")
  44.         @pass.bitmap.blt( x * 5, y * 5, passbm, Rect.new( 0, 0, 5, 5))
  45.       end
  46.     end
  47.   end
  48.   def draw_player
  49.     @player = Sprite.new(@view)
  50.     @player.bitmap = RPG::Cache.minimap("Player")
  51.     @player.x = $game_player.x * 5
  52.     @player.y = $game_player.y * 5
  53.     @player.z = 1003
  54.     minox = @player.x - 50
  55.     maxox = (@pass.bitmap.width - 110)
  56.     newox = (@pass.bitmap.width - 60) >= @player.x ? minox : maxox
  57.     minoy = @player.y - 50
  58.     maxoy = (@pass.bitmap.height - 110)
  59.     newoy = (@pass.bitmap.height - 60) >= @player.y ? minoy : maxoy
  60.     @view.ox = newox <= 0 ? 0 : newox
  61.     @view.oy = newoy <= 0 ? 0 : newoy  
  62.   end
  63.   def draw_events
  64.     for key in $game_map.events.keys
  65.       event = $game_map.events[key]
  66.       next if event.list == nil
  67.       for i in 0...event.list.size
  68.         next if event.list[i].code != 108
  69.         @events[key] = Sprite.new(@view)
  70.         @events[key].z = 1002
  71.         @events[key].x = event.x * 5
  72.         @events[key].y = event.y * 5        
  73.         if event.list[i].parameters[0].include?("Inim")
  74.           @events[key].bitmap = RPG::Cache.minimap("Enemies")
  75.           @enemys[key] = true
  76.         elsif event.list[i].parameters[0].include?("Event")
  77.           @events[key].bitmap = RPG::Cache.minimap("Events")
  78.         elsif event.list[i].parameters[0].include?("Objective")
  79.           @events[key].bitmap = RPG::Cache.minimap("Objective")
  80.         end
  81.       end
  82.     end
  83.   end  
  84.   # Atualizar o minimapa, jogadores e eventos
  85.   def update
  86.     update_player
  87.     update_events
  88.     update_netplayers if @show_players
  89.     update_view if moving?
  90.     update_icon if $mouse.in_area?(@nicon.x, @nicon.y, 26, 26)
  91.   end
  92.   def update_player
  93.     @player.x = $game_player.x * 5
  94.     @player.y = $game_player.y * 5
  95.   end
  96.   def update_events
  97.     for key in @events.keys
  98.       event = @events[key]
  99.       mapevent = $game_map.events[key]
  100.       if @enemys[key]
  101.         event.visible = !mapevent.erased
  102.         next if !event.visible
  103.       end
  104.       event.x = mapevent.x * 5
  105.       event.y = mapevent.y * 5
  106.     end
  107.   end
  108.   def update_netplayers
  109.     if @oldmpp != Network.players.values.compact
  110.       @oldmpp = Network.players.values.compact
  111.       @netplayers.clear
  112.       for key in Network.players.values.compact
  113.         @netplayers[key] = Sprite.new(@view)
  114.         @netplayers[key].z = 1003
  115.         @netplayers[key].bitmap = RPG::Cache.minimap("OPlayers")
  116.       end
  117.     end
  118.     for key in Network.players.values.compact
  119.       next unless @netplayers[key]
  120.       @netplayers[key].x = key.x * 5
  121.       @netplayers[key].y = key.y * 5
  122.     end
  123.   end
  124.   def update_view
  125.     if $game_player.x >= 11 and (@pass.bitmap.width - 60) >= @player.x
  126.       if $game_player.direction == 6
  127.         @view.ox += 5
  128.       elsif $game_player.direction == 4
  129.         @view.ox -= 5
  130.       end  
  131.     elsif $game_player.x <= 10  
  132.       @view.ox = 0
  133.     end
  134.     if $game_player.y >= 11 and (@pass.bitmap.height- 60) >= @player.y
  135.       if $game_player.direction == 2
  136.         @view.oy += 5
  137.       elsif $game_player.direction == 8
  138.         @view.oy -= 5
  139.       end  
  140.     elsif $game_player.y <= 10  
  141.       @view.oy = 0
  142.     end
  143.   end
  144.   # Verificação do Icone
  145.   def update_icon
  146.     return unless Input.trigger?(Input::Key['Mouse Left'])
  147.     @show_players = !@show_players
  148.     @nicon.bitmap = @show_players ? RPG::Cache.minimap("Players") : RPG::Cache.minimap("PlayersOFF")
  149.     if @show_players
  150.       @netplayers.clear
  151.       for key in Network.players.values.compact
  152.         @netplayers[key] = Sprite.new(@view)
  153.         @netplayers[key].z = 1003
  154.         @netplayers[key].bitmap = RPG::Cache.minimap("OPlayers")
  155.       end
  156.     else  
  157.       for mp in @netplayers.values
  158.         mp.dispose if !@show_players
  159.       end
  160.     end  
  161.   end
  162.   # Metodo dispose
  163.   def dispose
  164.     @bg.dispose
  165.     @pass.dispose
  166.     @player.dispose
  167.     @nicon.dispose
  168.     for event in @events.values
  169.       event.dispose
  170.     end
  171.     for mp in @netplayers.values
  172.       mp.dispose
  173.     end
  174.   end  
  175.   # Ajuste de posicionamento
  176.   def moving?
  177.     if $game_player.x != @gplayer_x or $game_player.y != @gplayer_y
  178.       @gplayer_x = $game_player.x
  179.       @gplayer_y = $game_player.y
  180.       return true
  181.     end
  182.     return false
  183.   end  
  184.   # Redesenhar Eventos
  185.   def redraw_events
  186.     for event in @events.values
  187.       event.dispose
  188.     end
  189.     @events.clear
  190.     draw_events
  191.   end  
  192. end
  193. # Insere o minimapa na cena
  194. class Scene_Map
  195.   alias main_gminimap main
  196.   alias update_gminimap update
  197.   alias transfer_gminimap transfer_player
  198.   attr_accessor :mini_map
  199.   attr_accessor :mini_map_active
  200.   def main
  201.     @mini_map_active = true
  202.     @mini_map = Global_Minimap.new(true)
  203.     main_gminimap
  204.     @mini_map.dispose
  205.   end
  206.   def update
  207.     update_gminimap
  208.     if Input.trigger?(Input::Key['M'])
  209.       return if $typing
  210.       @mini_map_active = !@mini_map_active
  211.       if @mini_map_active
  212.         @mini_map = Global_Minimap.new(@mini_map.show_players)
  213.       else
  214.         @mini_map.dispose        
  215.       end  
  216.     end  
  217.     @mini_map.update if @mini_map_active
  218.   end
  219.   def transfer_player
  220.     transfer_gminimap
  221.     if @mini_map_active
  222.       @mini_map.dispose
  223.       @mini_map = Global_Minimap.new(@mini_map.show_players)
  224.     end
  225.   end
  226. end
  227. # Game_Event
  228. class Game_Event
  229.   alias refresh_gminimap refresh
  230.   def refresh
  231.     refresh_gminimap
  232.     $scene.mini_map.redraw_events if $scene.is_a?(Scene_Map) and  $scene.mini_map_active
  233.   end  
  234. end
  235. # Modulo de RPG::Cache.minimap
  236. module RPG
  237.   module Cache
  238.     def self.minimap(filename)
  239.       self.load_bitmap("Graphics/Pictures/Minimapa/", filename)
  240.     end
  241.   end
  242. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement