Aldeia RPG

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Suporte ao desenvolvimento de jogos


    Horário no Jogo (Com fuso horário)

    Merim
    Merim
    Novato
    Novato


    Mensagens : 21
    Créditos : 7

    Horário no Jogo (Com fuso horário) Empty Horário no Jogo (Com fuso horário)

    Mensagem por Merim Qua Dez 11, 2024 12:03 pm

    Introdução
    Mostra a hora abaixo do Minimapa de forma sútil que não atrapalha na visão
    Ajuda também ao jogador a saber as horas (se estiver em modo tela cheia)
    Pode ser usado de maneira como se fosse o horário do jogo (server) de maneira fake para não precisar modificar nada no banco de dados do servidor e client.. só modificando o fuso horário
    Pode mudar o Fuso horário (Você pode colocar o horário que quiser seguindo qualquer fuso )
    A Hora fica presa ao Minimapa , então se você arrastar a janela do Minimapa a hora vai junto.
    Printscreen
    Horário no Jogo (Com fuso horário) Fusoho10
    Rodei o servidor as 11:50 do horário real 
    No jogo aparece as 13:50 
    Modificação
    Antes de tudo faça um backup do seu projeto
    Troque o [VS] Sprite_Minimap todo por esse script abaixo

    Código:
    # Defina o fuso horário do servidor
    SERVER_TIMEZONE_OFFSET = -1  # Ajuste conforme o fuso horário do servidor

    #==============================================================================
    # ** Sprite_Minimap
    #------------------------------------------------------------------------------
    #  Esta classe lida com a exibição do mapa em miniatura.
    #------------------------------------------------------------------------------
    #  Autor: Valentine            Mod: Merim
    #==============================================================================

    class Sprite_Minimap < Sprite2

      Event_Data = Struct.new(:name, :width)
        
      def initialize
        super
        self.bitmap = Bitmap.new(172, 148)  # Aumenta a altura para 148 para incluir a hora
        self.x = adjust_x
        self.y = 9
        self.z = 50
        self.bitmap.font.size = 15
        @bitmap = Cache.system('Minimap')
        @dragable = true
        @event_sprites = {}
        @event_data = {}
        @last_tip_name = ''
        create_player_point
        create_tool_tip
        refresh
        update
      end
      
      def line_height
        18
      end
      
      def adjust_x
        Graphics.width - 188
      end
      
      def in_area?(x = 0, y = 0, w = self.bitmap.width, h = self.bitmap.height)
        super(x + 24, y, w - 24, h)
      end
      
      def change_opacity(x = 0, y = 0)
        super()
        @player_sprite.opacity = self.opacity
        @event_sprites.each_value { |sprite| sprite.opacity = self.opacity }
      end
        
      def create_player_point
        @player_sprite = Sprite.new
        @player_sprite.bitmap = Bitmap.new(16, 16)
        @player_sprite.bitmap.blt(0, 0, @bitmap, Rect.new(142, 0, 16, 16))
        @player_sprite.z = self.z + 1
      end
      
      def create_tool_tip
        @tool_tip = Sprite.new
        @tool_tip.bitmap = Bitmap.new(self.bitmap.width, line_height)
        @tool_tip.z = @player_sprite.z + 1
      end
      
      def create_event(event_id, event_name, rect_y)
        event_sprite = Sprite.new
        event_sprite.bitmap = Bitmap.new(16, 16)
        event_sprite.bitmap.blt(0, 0, @bitmap, Rect.new(142, rect_y, 16, 16))
        event_sprite.x = self.x + object_x($game_map.events[event_id])
        event_sprite.y = self.y + object_y($game_map.events[event_id])
        event_sprite.z = self.z
        @event_sprites[event_id] = event_sprite
        @event_data[event_id] = Event_Data.new(event_name, text_width(event_name) + 8)
      end
      
      def dispose
        super
        @player_sprite.bitmap.dispose
        @player_sprite.dispose
        @tool_tip.bitmap.dispose
        @tool_tip.dispose
        dispose_events
      end
      
      def dispose_events
        @event_sprites.each_value do |event|
          event.bitmap.dispose
          event.dispose
        end
        @event_sprites.clear
        @event_data.clear
      end
      
      def object_x(object)
        [[object.x * 134 / $game_map.width + 25, 33].max, 161].min
      end
      
      def object_y(object)
        [[object.y * 106 / $game_map.height - 5, 3].max, 104].min
      end
        
      def refresh
        @tool_tip.visible = false
        draw_background
        draw_icon
        draw_map_name
        draw_time  # Desenha a hora abaixo do minimapa
        dispose_events
        if FileTest.exist?("Graphics/Minimaps/#{$game_map.map_id}.png")
          draw_map
          draw_events
        else
          @player_sprite.visible = false
        end
      end
        
      def draw_background
        self.bitmap.clear
        self.bitmap.blt(30, 0, @bitmap, self.bitmap.rect)
      end
      
      def draw_icon
        bitmap = Cache.system('Iconset')
        icon_index = $game_map.pvp? ? Configs::MAP_PVP_ICON : Configs::MAP_NONPVP_ICON
        rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
        self.bitmap.blt(0, 0, bitmap, rect)
      end
        
      def draw_map_name
        self.bitmap.draw_text(30, 113, 142, 18, $game_map.display_name, 1)
      end

      def draw_time
        current_time = server_time.strftime("%H:%M")
        self.bitmap.draw_text(30, 130, 142, 18, current_time, 1)
      end
      
      def draw_map
        bitmap = Cache.minimap($game_map.map_id.to_s)
        self.bitmap.blt(33, 3, bitmap, bitmap.rect)
      end
      
      def refresh_tool_tip(event_name, width)
        @last_tip_name = event_name
        @tool_tip.bitmap.clear
        rect = Rect.new(0, 0, width, @tool_tip.bitmap.height)
        @tool_tip.bitmap.fill_rect(rect, Color.new(0, 0, 0, 160))
        @tool_tip.bitmap.draw_text(rect, event_name, 1)
      end
      
      def draw_events
        @player_sprite.visible = true
        $game_map.events.each do |event_id, event|
          next unless event.list
          # Missão
          if event.quest_not_started?
            create_event(event_id, Vocab::Quest, 32)
            next
          # Boss
          elsif event.boss?
            create_event(event_id, Vocab::Boss, 96)
            next
          end
          event.list.each do |item|
            # Loja
            if item.code == 302
              create_event(event_id, Vocab::Shop, 16)
              break
            elsif item.code == 355
              # Banco
              if item.parameters[0].include?('open_bank')
                create_event(event_id, Vocab::Bank, 48)
                break
              # Teletransporte
              elsif item.parameters[0].include?('open_teleport')
                create_event(event_id, Vocab::Teleport, 64)
                break
              # Ponto de referência
              elsif item.parameters[0].include?('check_point')
                create_event(event_id, Vocab::CheckPoint, 80)
                break
              end
            end
          end
        end
      end
        
      def update
        super
        change_opacity(24)
        @player_sprite.x = self.x + object_x($game_player)
        @player_sprite.y = self.y + object_y($game_player)
        @event_sprites.each do |event_id, event_sprite|
          event_sprite.x = self.x + object_x($game_map.events[event_id])
          event_sprite.y = self.y + object_y($game_map.events[event_id])
          update_tool_tip(event_id)
        end
      end
      
      def update_tool_tip(event_id)
        return if @tool_tip.visible && @last_tip_name != @event_data[event_id].name
        @tool_tip.visible = in_area?(object_x($game_map.events[event_id]) - 24, object_y($game_map.events[event_id]), 40, 16)
        if @tool_tip.visible
          @tool_tip.x = Mouse.x + 18 + @event_data[event_id].width > Graphics.width ? Graphics.width - @event_data[event_id].width :  Mouse.x + 18
          @tool_tip.y = Mouse.y + 18 + @tool_tip.bitmap.height > Graphics.height ? Graphics.height - @tool_tip.bitmap.height : Mouse.y + 18
          refresh_tool_tip(@event_data[event_id].name, @event_data[event_id].width) unless @last_tip_name == @event_data[event_id].name
        end
      end

      # Método para obter a hora do servidor
      def server_time
        Time.now.getutc + SERVER_TIMEZONE_OFFSET * 3600  # Adapta conforme o fuso horário do servidor
      end
    end

    # Defina o fuso horário do servidor
    SERVER_TIMEZONE_OFFSET = -1  # Ajuste conforme o fuso horário do servidor aqui você define

    Qualquer bug ou algo do tipo favor reportar nesse post , até o presente momento não tive nenhum 

    Grande abraço ! e bom desenvolvimento a todos.


    Valentine, Uchiha ~ e Manticora gostam desta mensagem


      Data/hora atual: Ter Jan 14, 2025 10:59 am