Postagens recentes

#1
Scripts e Plugins / Res: Mostrar quantidade de ven...
Última postagem por Resque - Dez 28, 2024, 04:08 PM
@Merim

Script muito bacana!!

Eu sempre gosto de farmar em jogos, mais do que apenas jogar e seguir a história principal. É um tempo que uso para relaxar sabe? Ainda mais se tiver uma musica bem bacana.

Espero ver mais Scripts seu aqui e muito obrigado!
#2
Scripts e Plugins / Mostrar quantidade de venda na...
Última postagem por Merim - Dez 27, 2024, 10:17 PM
Introdução
Essa pequena modificação mostra o total em dinheiro que você vai conseguir ao vender
O item ...recursos... armas e afins na loja do NPC
é algo bastante útil pois para quem gosta de farmar no jogo e quer ver a quantidade que vai ganhar em cada item (montante)
Antes de tudo faça um backup do seu projeto
Printscreen

 Não selecionado a quantidade 

Selecionado a quantidade e mostra o valor total
Claro você pode fazer ajustes conforme precisar para seu jogo.
Modificações 


[VS] Window_Shop troque todo por esse :
#==============================================================================
# ** Window_Shop
#------------------------------------------------------------------------------
#  Esta classe lida com a janela da loja.
#------------------------------------------------------------------------------
#  Autor: Valentine       Mod: Merim
#==============================================================================
class Window_Shop < Window_ItemSelectable
 
  attr_reader :price

  def initialize
    super(280, 165, 212, 212)
    self.visible = false
    self.closable = true
    self.title = Vocab::Shop
  end

  def show(shop_goods, purchase_only)
    @shop_goods = shop_goods
    @purchase_only = purchase_only
    super()
  end

  def hide_window
    # Não envia o send_close_window se pressionar Esc quando a loja não estiver aberta
    return unless visible
    $network.send_close_window
  end

  def enable?(item)
    item && @price[item] <= $game_party.gold && !$game_party.item_max?(item)
  end

  def make_item_list
    @data = []
    @price = {}
    @shop_goods.each do |goods|
      item = $game_party.item_object(goods
 + 1, goods[1])
      if item
        @data << item
        @price[item] = goods[2] == 0 ? item.price : goods[3]
      end
    end
  end
  def update
    super
    $windows[:amount].show(Enums::Amount::BUY_ITEM, item, index) if Mouse.dbl_clk?(:L) && index >= 0
  end
  def update_drag
    return unless Mouse.press?(:L)
    return if $cursor.object
    return if $dragging_window
    return unless index >= 0
    $cursor.change_item(item, Enums::Mouse::SHOP)
  end
  def update_drop
    return if Mouse.press?(:L)
    return unless $cursor.object
    return unless $cursor.type == Enums::Mouse::ITEM
    return unless in_area?
    sell_item
  end
  def sell_item
    if @purchase_only
      $error_msg = Vocab::NotSellItem
      Sound.play_buzzer
      return
    end
    $windows[:amount].show(Enums::Amount::SELL_ITEM, $windows[:item].item)
  end
end
[VS]Window_Amount troque todo por esse :
#==============================================================================
# ** Window_Amount
#------------------------------------------------------------------------------
#  Esta classe lida com a janela de quantidade.
#------------------------------------------------------------------------------
#  Autor: Valentine   Mod: Merim
#==============================================================================
class Window_Amount < Window_Base
 
  def initialize
    super(400, 230, 150, 140)  # Ajusta a altura da janela para 140
    self.visible = false
    self.closable = true
    self.title = Vocab::Amount
    @amount_box = Number_Box.new(self, 10, 40, 130, 5) { enable_ok_button }  # Ajusta a posição da barra de quantidade
    @ok_button = Button.new(self, 60, 110, Vocab::Ok) { ok }  # Reposiciona o botão OK para mais abaixo
    @total_value = 0
  end
 
  def deposit_gold
    amount = @amount_box.value
    puts "Tentando depositar #{amount} ouro."
    return if $game_party.gold < amount
    puts "Ouro suficiente no inventário."
    $network.send_bank_gold(amount)
  end

  def show(type, item = nil, index = 0)
    @type = type
    @item = item
    @index = index
    @amount_box.clear
    @amount_box.active = true
    @ok_button.enable = false
    @quantity = 1
    update_total_value
    if index == 0 && item_number_one?
      @amount_box.value = 1
      ok
      return
    end
    super()
    refresh
  end
 
  def update_total_value
    @total_value = @item.price * @amount_box.value if @item
  end

  def refresh
    super
    contents.clear
    if @item
      draw_text(0, 0, contents.width, line_height, @item.name)  # Coloca o nome do recurso no topo
      draw_text(0, 50, contents.width, line_height, "#{@item.name} x #{@amount_box.value}")  # Ajusta a posição da quantidade logo abaixo da barra de quantidade
    else
      draw_text(0, 0, contents.width, line_height, "Gold")  # Exibe "Gold" no topo se @item for nil
      draw_text(0, 50, contents.width, line_height, "Gold x #{@amount_box.value}")  # Exibe "Gold" e a quantidade logo abaixo da barra de quantidade
    end
    draw_text(0, 80, contents.width, line_height, "Total: #{@total_value} G")  # Ajusta a posição do total para logo abaixo da quantidade
  end
 
  def item_number_one?
    return ($game_trade.my_item_number(@item) == 1) if @type == Enums::Amount::REMOVE_TRADE_ITEM
    return ($game_bank.item_number(@item) == 1) if @type == Enums::Amount::WITHDRAW_ITEM
    return ($game_party.item_number(@item) == 1)
  end
 
  def ok
    case @type
    when Enums::Amount::BUY_ITEM
      buy_item
    when Enums::Amount::SELL_ITEM
      sell_item
    when Enums::Amount::DROP_ITEM
      drop_item
    when Enums::Amount::ADD_TRADE_ITEM
      add_trade_item
    when Enums::Amount::ADD_TRADE_GOLD
      add_trade_gold
    when Enums::Amount::REMOVE_TRADE_ITEM
      remove_trade_item
    when Enums::Amount::REMOVE_TRADE_GOLD
      remove_trade_gold
    when Enums::Amount::DEPOSIT_ITEM
      deposit_item
    when Enums::Amount::DEPOSIT_GOLD
      deposit_gold
    when Enums::Amount::WITHDRAW_ITEM
      withdraw_item
    when Enums::Amount::WITHDRAW_GOLD
      withdraw_gold
    end
    hide
  end
 
  def buy_item
    amount = [@amount_box.value, Configs::MAX_ITEMS - $game_party.item_number(@item)].min
    return if $game_party.full_items?(@item)
    if $game_party.gold < @item.price * amount
      $error_msg = Vocab::NotEnoughMoney
      return
    end
    $network.send_buy_item(@index, amount)
  end
 
  def sell_item
    amount = @amount_box.value
    return if $game_party.item_number(@item) < amount
    $network.send_sell_item(@item.id, $game_party.kind_item(@item), amount)
  end
 
  def drop_item
    amount = @amount_box.value
    return if $game_party.item_number(@item) < amount
    if $game_map.drops.size >= Configs::MAX_MAP_DROPS
      $error_msg = Vocab::FullDrops
      return
    elsif @item.soulbound?
      $error_msg = Vocab::SoulboundItem
      return
    end
    $network.send_add_drop(@item.id, $game_party.kind_item(@item), amount)
  end
 
  def add_trade_item
    amount = @amount_box.value
    return if $game_party.item_number(@item) < $game_trade.my_item_number(@item) + amount
    return if $game_trade.full_items?(@item)
    if @item.soulbound?
      $error_msg = Vocab::SoulboundItem
      return
    end
    $network.send_trade_item(@item.id, $game_party.kind_item(@item), amount)
  end
 
  def add_trade_gold
    amount = @amount_box.value
    return if $game_party.gold < $game_trade.my_gold + amount
    $network.send_trade_gold(amount)
  end
 
  def remove_trade_item
    amount = @amount_box.value
    return if $game_trade.my_item_number(@item) < amount
    return if $game_party.full_items?(@item)
    $network.send_trade_item(@item.id, $game_party.kind_item(@item), -amount)
  end
 
  def remove_trade_gold
    amount = @amount_box.value
    return if $game_trade.my_gold < amount
    $network.send_trade_gold(-amount)
  end
 
  def deposit_item
    amount = [@amount_box.value, Configs::MAX_ITEMS - $game_bank.item_number(@item)].min
    return if $game_party.item_number(@item) < amount
    return if $game_bank.full_items?(@item)
    if @item.soulbound?
      $error_msg = Vocab::SoulboundItem
      return
    end
    $network.send_bank_item(@item.id, $game_party.kind_item(@item), amount)
  end
 
  def deposit_gold
    amount = @amount_box.value
    return if $game_party.gold < amount
    $network.send_bank_gold(amount)
  end
 
  def withdraw_item
    amount = [@amount_box.value, Configs::MAX_ITEMS - $game_party.item_number(@item)].min
    return if $game_bank.item_number(@item) < amount
    return if $game_party.full_items?(@item)
    $network.send_bank_item(@item.id, $game_party.kind_item(@item), -amount)
  end
 
  def withdraw_gold
    amount = @amount_box.value
    return if $game_bank.gold < amount
    $network.send_bank_gold(-amount)
  end
 
  def enable_ok_button
    @ok_button.enable = (@amount_box.value != 0)
    update_total_value
    refresh
  end
 
  def update
    super
    ok if Input.trigger?(:C) && @amount_box.value != 0
  end
 
end
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.
#3
Scripts e Plugins / Melhorar tempo de resposta na ...
Última postagem por Merim - Dez 27, 2024, 10:13 PM
Introdução
Eu estava enfrentando um problema na criação do personagem
isso pode ser um bug relacionado diversos em alguns tipos de hardware ou sistema (não sei ) ou até questão
da (versão) Ruby instalada
Enfim o meu problema é que na hora de criar um personagem demorava F**k 20 segundos para atualizar a seleção de personagens ...não era imediato sabe...
então resolvi buscar o problema na raíz (ou tentar)
E isso pode ajudar quem enfrenta a mesma situação a resolver esse problema.
LOG ANTES da modificação
Início da criação do personagem às 2024-12-09 23:39:44 -0300 Personagem criado às 2024-12-09 23:40:04 -0300, duração: 20.6581078 segundos
LOG DEPOIS da modificação
Início da criação do personagem às 2024-12-09 23:42:17 -0300 Personagem criado às 2024-12-09 23:42:17 -0300, duração: 0.1741648 segundos
Printscreen
Não Perceptível por imagem
Modificações
Antes de tudo faça um backup do seu projeto
Vá até a pasta scripts do servidor e procure pelo script database.rb
use seu editor de texto (código) para fazer essa modificação
procure por def self.create_player  até  s_client.disconnect
Troque esse trecho por esse script abaixo não esqueça de salvar as alterações
Após isso é só executar o servidor e criar o personagem.
def self.create_player(client, actor_id, name, character_index, class_id, sex, params, points)
  actor = Actor.new
  actor.name = name
  actor.character_name = $data_classes[class_id].graphics[sex][character_index]

  actor.character_index = $data_classes[class_id].graphics[sex][character_index][1]
  actor.face_name = $data_classes[class_id].graphics[sex + 2] ? $data_classes[class_id].graphics[sex + 2][character_index] : ''
  actor.face_index = $data_classes[class_id].graphics[sex + 2] ? $data_classes[class_id].graphics[sex + 2][character_index][1] : 0
  actor.class_id = class_id
  actor.sex = sex
  actor.level = $data_actors[class_id].initial_level
  actor.exp = $data_classes[class_id].exp_for_level(actor.level)
  maxhp = params[Enums::Param::MAXHP] * 10 + $data_classes[class_id].params[Enums::Param::MAXHP, actor.level]
  maxmp = params[Enums::Param::MAXMP] * 10 + $data_classes[class_id].params[Enums::Param::MAXMP, actor.level]
  actor.hp = maxhp
  actor.mp = maxmp
  actor.param_base = [maxhp, maxmp]
  (Enums::Param::ATK..Enums::Param::LUK).each do |param_id|
    actor.param_base << $data_classes[class_id].params[param_id, actor.level] + params[param_id]
  end
  actor.equips = $data_actors[class_id].equips +  * (Configs::MAX_EQUIPS - 5)
  actor.points = points
  actor.guild_name = ''
  actor.revive_map_id = actor.map_id = $data_system.start_map_id
  actor.revive_x = actor.x = $data_system.start_x
  actor.revive_y = actor.y = $data_system.start_y
  actor.direction = Enums::Dir::DOWN
  actor.gold = 0
  actor.items = {}
  actor.weapons = {}
  actor.armors = {}
  actor.skills = []
  $data_classes[class_id].learnings.each do |learning|
    actor.skills << learning.skill_id if learning.level <= actor.level
  end
  actor.quests = {}
  actor.hotbar = Array.new(Configs::MAX_HOTBAR) { Hotbar.new(0, 0) }
  actor.switches = Array.new(Configs::MAX_PLAYER_SWITCHES, false)
  actor.variables = Array.new(Configs::MAX_PLAYER_VARIABLES, 0)
  actor.self_switches = {}
  s_client = sql_client
  s_client.transaction do
    s_client[:actors].insert(
      slot_id: actor_id, account_id: client.account_id_db, name: actor.name,
      character_name: actor.character_name, character_index: actor.character_index,
      face_name: actor.face_name, face_index: actor.face_index, class_id: actor.class_id,
      sex: actor.sex, level: actor.level, exp: actor.exp, hp: actor.hp, mp: actor.mp,
      mhp: actor.param_base, mmp: actor.param_base[1], atk: actor.param_base[2], def: actor.param_base[3],
      int: actor.param_base[4], res: actor.param_base[5], agi: actor.param_base[6], luk: actor.param_base[7],
      points: actor.points, revive_map_id: actor.revive_map_id, revive_x: actor.revive_x,
      revive_y: actor.revive_y, map_id: actor.map_id, x: actor.x, y: actor.y,
      direction: actor.direction, creation_date: Time.now.to_i, last_login: Time.now.to_i
    )
    actor.id_db = s_client[:actors].select(:id).where(name: actor.name).single_value
    actor.equips.each_with_index do |equip_id, slot_id|
      s_client[:actor_equips].insert(actor_id: actor.id_db, slot_id: slot_id, equip_id: equip_id)
    end
    actor.skills.each do |skill|
      s_client[:actor_skills].insert(actor_id: actor.id_db, skill_id: skill)
    end
    Configs::MAX_HOTBAR.times do |slot_id|
      s_client[:actor_hotbars].insert(actor_id: actor.id_db, slot_id: slot_id)
    end
    Configs::MAX_PLAYER_SWITCHES.times do |switch_id|
      s_client[:actor_switches].insert(actor_id: actor.id_db, switch_id: switch_id + 1)
    end
    Configs::MAX_PLAYER_VARIABLES.times do |variable_id|
      s_client[:actor_variables].insert(actor_id: actor.id_db, variable_id: variable_id + 1)
    end
  end
  s_client.disconnect
  client.actors[actor_id] = actor
end

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.
#4
Scripts e Plugins / Horário no Jogo
Última postagem por Merim - Dez 27, 2024, 10:04 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 também para ajudar o jogador a saber os horários de eventos temporários definidos em horas por exemplo vai de sua imaginação e criatividade.
Você pode definir também a hora do jogo e não da vida real também (isso é por sua conta)
A Hora fica presa ao Minimapa , então se você arrastar a janela do Minimapa a hora vai junto.
Troque o [VS] Sprite_Minimap todo por esse script abaixo[/center]
Printscreen


Horário no Jogo

Modificação

Antes de tudo faça um backup do seu projeto
# ** 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 = Time.now.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
   
end
#5
Scripts e Plugins / Horário no Jogo ( Com fuso hor...
Última postagem por Merim - Dez 27, 2024, 10:02 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) 
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
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.



#6
Jogos Completos / Saiyans Online Adventures - De...
Última postagem por Resque - Nov 25, 2024, 11:44 AM
🌌🔥 Saiyans Online Adventures - Desperte o Guerreiro Dentro de Você! 🔥🌌

Prepare-se para uma experiência épica onde força, estratégia e aventura se encontram! Em Saiyans Online Adventures, você explora um vasto universo inspirado pelos guerreiros mais poderosos, enfrentando desafios incríveis e lutando por glória e sobrevivência.

⚡ Sobre o Jogo:
Escolha seu caminho, desbloqueie transformações lendárias e descubra o verdadeiro poder de um Saiyajin! Reúna aliados, enfrente inimigos temíveis e domine um universo em constante expansão.

🌟 Destaques do Jogo:

    Criação de Personagem Personalizada: Defina seu visual, raça e habilidades para criar o guerreiro perfeito.
    Transformações Lendárias: Liberte o Super Saiyajin e outras formas incríveis ao longo da sua jornada.
    Exploração de Mundos: Viaje entre planetas, descubra segredos ancestrais e enfrente desafios únicos.
    Sistema de Combate Intenso: Lutas dinâmicas e estratégicas que testarão sua habilidade e criatividade.
    Missões Online e PvP: Enfrente jogadores de todo o mundo ou junte-se a eles para derrotar chefes épicos!

🚀 Está Pronto para o Combate?
O universo está chamando, guerreiro! Mostre do que você é capaz e torne-se uma lenda em Saiyans Online Adventures!

🔗 https://saiyansonline.com/

📢 Comente aqui: Qual é sua transformação favorita? Compartilhe sua jornada e junte-se à nossa comunidade!

#7
Suporte Técnico / Guia de Instalação RPG Maker V...
Última postagem por Resque - Nov 03, 2024, 07:40 PM
Para instalar o RPG Maker VX Ace e configurar o sistema AOS (Active Battle System), siga este guia:

1. Instalação do RPG Maker VX Ace
Baixe o RPG Maker VX Ace: Certifique-se de baixar uma cópia legítima, que pode ser adquirida na Steam ou no site oficial da Enterbrain.

Instale o programa: Siga as instruções de instalação do instalador. Ao final, certifique-se de que o programa está funcionando.

2. Baixe o AOS (Active Battle System)
O AOS é um sistema de batalha ativo que modifica o sistema de combate padrão do RPG Maker VX Ace para um estilo mais dinâmico e em tempo real, semelhante a alguns jogos de ação.

Encontre o script AOS: Procure no site de scripts de RPG Maker VX Ace, fóruns de RPG Maker, ou em sites de comunidade como RPGMaker.net. Observação: muitos scripts populares são escritos em Ruby.
Baixe o script AOS: Salve o arquivo em uma pasta acessível.

3. Importação do Script no RPG Maker VX Ace
Abra o RPG Maker VX Ace e vá ao projeto onde deseja instalar o AOS.
No menu, clique em Script Editor (pressione F11).
Navegue até o final da lista de scripts na coluna da esquerda.
Crie uma nova seção para o script AOS clicando com o botão direito e selecionando Insert.
Cole o Script: Copie o conteúdo do script AOS e cole na seção nova criada.

4. Configuração do AOS
Leia as instruções incluídas no script AOS. Geralmente, os scripts têm uma seção de comentários no início ou ao longo do código explicando as configurações.
Edite as variáveis conforme desejado. Muitas vezes, os scripts permitem alterar elementos como a velocidade do combate, a interface, e outros parâmetros do sistema.

5. Teste o Sistema
Volte ao menu principal do RPG Maker VX Ace e execute o jogo para testar se o AOS foi configurado corretamente.
Resolva possíveis conflitos: Caso ocorram erros, pode ser que haja conflito com outros scripts. Verifique a ordem de execução dos scripts e consulte os comentários para ajustes.

6. Recursos Extras
Gráficos e Sons: Você pode adicionar recursos personalizados para o sistema de batalha, como ícones, efeitos sonoros, e animações, para enriquecer a experiência.
Documentação e Comunidade: O AOS pode ter uma documentação própria ou uma comunidade onde você pode tirar dúvidas e encontrar tutoriais.
Pronto! Agora o seu RPG Maker VX Ace deve estar com o AOS configurado e pronto para criar batalhas em tempo real.
#8
Jogos Completos / Social Clicker: Persona - Vem ...
Última postagem por Resque - Nov 03, 2024, 02:43 PM
📱✨ Social Clicker: Persona - Gerencie redes sociais! ou não.🌟📱

Já pensou em ajudar sua amiga a alcançar a fama nas redes sociais? Em Social Clicker: Persona, sua missão é gerenciar e divulgar suas lives, superando desafios financeiros e tentando manter uma vida equilibrada ao lado dela. Mas não se deixe enganar – há muitos mistérios ocultos nessa jornada rumo ao sucesso!

🧑🎤 Sobre o Jogo: Seu principal recurso é o clique! Desbloqueie todos os upgrades e facilite sua jornada administrando bem seu dinheiro. Este jogo explora temas adultos e esconde mistérios ao longo da evolução. Para alcançar a liberdade completa, basta desbloquear a primeira persona – a partir daí, você terá total controle para explorar os mundos que desejar!

🌟 Destaques do Jogo:

    Criação de Persona Personalizada: Escolha o estilo, o tom e a atitude que definem sua presença online.
    Aumente Seus Seguidores: Cada clique e post conta para crescer seu número de seguidores e alcançar o status de celebridade!
    Missões e Desafios de Influência: Aceite desafios emocionantes, colabore com outros influenciadores e aprenda a lidar com os altos e baixos da fama.
    Conquistas e Recompensas Exclusivas: Ganhe badges, itens e upgrades para sua persona enquanto alcança novos níveis de popularidade.

👁� Seu personagem tem a habilidade de transitar entre vidas paralelas, onde sempre encontra sua "persona" — uma figura constante que é sua amiga e com quem ele compartilha o cotidiano. Essa persona é sua âncora, o elemento essencial para ele conseguir fazer essas transições entre mundos. A cada nova vida, ele desperta em um corpo diferente, assumindo a consciência e o contexto de uma existência já em andamento, mas em outra realidade.

Há, no entanto, uma carcaça awake — uma versão do personagem que despertou para as memórias de suas vidas paralelas e compreendeu o poder das transições entre esses mundos. Esse ser torna-se o antagonista do personagem, ao possuir plena consciência e controle sobre as realidades paralelas, ameaçando as dimensões que o personagem conhece e suas Personas.


🔗 https://store.steampowered.com/app/3180510/Social_Clicker__Persona/

📢 Comente aqui: Qual é o seu estilo de influencer? Compartilhe conosco e venha fazer parte dessa experiência!
#9
Jogos Completos / Mystical Hunter Online
Última postagem por Resque - Nov 03, 2024, 02:13 PM
🎮🌌 Mystical Hunter Online - Mergulhe em uma Aventura Épica Feita no RPG Maker VX com VXAOS! 🌌🎮

Prepare-se para explorar um universo cheio de magia, mistérios e perigos ocultos! No Mystical Hunter Online, você é um Caçador Místico, e sua missão é desvendar segredos, derrotar criaturas lendárias e descobrir artefatos poderosos que podem mudar o rumo da história.

🧙�♂️ Sobre o Jogo: Desenvolvido com RPG Maker VX e o sistema avançado VXAOS, Mystical Hunter Online oferece uma jogabilidade envolvente e personalizável, combinando gráficos clássicos de RPG com mecânicas modernas e cheias de possibilidades.

🌟 Destaques do Jogo:

    Classes e Habilidades Exclusivas: Escolha entre diferentes classes e especialize-se para se tornar o Caçador Místico definitivo.
    Mundo Aberto e Envolvente: Descubra reinos desconhecidos, cavernas escondidas e ruínas antigas, cada um com seus próprios segredos e desafios.
    Sistema de Combate Dinâmico: Uma mistura entre combate estratégico e ação em tempo real, onde cada movimento conta.
    Missões Coletivas e PvP: Junte-se a outros jogadores para enfrentar criaturas épicas ou desafie-os em duelos para provar sua força.

⚔️ Você Está Pronto para a Aventura? Mystical Hunter Online já está disponível para download! Conecte-se com jogadores de todo o mundo e embarque em uma jornada inesquecível!


🔗 Site Oficial: https://mysticalhunteronline.com/

📢 Aventureiros, comentem aqui! O que mais esperam desse mundo místico? Queremos ouvir de vocês!
#10
Tutoriais e Guias / Aula de Ruby - Aula 1. Introdu...
Última postagem por Resque - Nov 03, 2024, 01:42 PM
Bem-vindo ao Curso de Ruby!

Ruby é uma linguagem de programação poderosa, flexível e amigável, criada com o objetivo de tornar o processo de desenvolvimento mais divertido e eficiente. Ela é usada em áreas que vão desde o desenvolvimento de sites e aplicações (principalmente com o framework Ruby on Rails) até scripts automatizados e análise de dados.

Por que aprender Ruby? Ruby é uma excelente escolha para iniciantes e também para programadores experientes, pois é:

  •     Fácil de ler e escrever: Ruby foi projetada para ser intuitiva e se assemelha a uma linguagem natural, o que facilita tanto o aprendizado quanto a manutenção do código.
  •     Altamente produtiva: Com uma sintaxe clara e uma grande variedade de bibliotecas, Ruby permite escrever menos código para fazer mais coisas.
  •     Extensivamente utilizada na web: Muitas empresas, como GitHub, Shopify e Airbnb, usam Ruby e seu famoso framework, Ruby on Rails, para desenvolver e manter suas aplicações web.

Objetivos do Curso:
Neste curso, vamos aprender desde o básico até conceitos mais avançados de Ruby. Começaremos explorando os fundamentos, como variáveis, tipos de dados, e operações básicas, e gradualmente passaremos para tópicos mais complexos, como estrutura de controle, orientação a objetos e manipulação de dados.

Pré-requisitos: Não é necessário ter experiência prévia em programação, mas alguma familiaridade com lógica básica pode ser útil. Nosso objetivo é tornar o aprendizado o mais acessível e prático possível, por isso você poderá acompanhar o curso independentemente do seu nível.

Ao final do curso, você terá uma compreensão sólida de Ruby e estará pronto para construir suas próprias aplicações, automatizar tarefas e explorar frameworks como o Ruby on Rails.

Pronto para começar? Vamos mergulhar no universo de Ruby!

1. Introdução às Variáveis

Definição: Uma variável é um "espaço" onde podemos armazenar dados temporariamente, como números, strings, arrays, entre outros. Em Ruby, uma variável pode conter qualquer tipo de valor e o tipo é determinado automaticamente pela linguagem.

idade = 25  # A variável `idade` armazena o valor 25
nome = "Alice"  # A variável `nome` armazena o texto "Alice"

Conceito de Tipagem Dinâmica

Em Ruby, não precisamos declarar o tipo da variável. Ruby atribui o tipo de acordo com o valor armazenado:
  • idade = 25 cria uma variável do tipo Integer.
  • nome = "Alice" cria uma variável do tipo String.

2. Convenções de Nomenclatura
Em Ruby, as variáveis seguem algumas convenções:

  •     Usamos letras minúsculas e _ (underscore) para separar palavras (ex: nome_completo).
  •     Ruby diferencia maiúsculas de minúsculas, então idade e Idade são variáveis diferentes.
  •     Nomes de variáveis não podem começar com números nem com caracteres especiais.

Boas Práticas:
Use nomes significativos para variáveis.
Prefira o formato snake_case (ex: idade_usuario).

3. Declarando e Atribuindo Variáveis
Para declarar uma variável em Ruby, basta usar um nome válido seguido do operador de atribuição = e do valor desejado.

nome = "João"
idade = 30
altura = 1.75

Podemos alterar o valor de uma variável ao longo do código:

idade = 25
idade = 26  # Agora idade é 26

Tipos de Dados em Variáveis

As variáveis podem armazenar diferentes tipos de dados, como:

  •     Integer: números inteiros (idade = 25)
  •     Float: números decimais (altura = 1.75)
  •     String: texto (nome = "Alice")
  •     Boolean: valores verdadeiros/falsos (ativo = true)

4. Manipulação de Variáveis

As variáveis podem ser combinadas e manipuladas usando operadores matemáticos ou de concatenação.

a = 10
b = 5
soma = a + b  # soma será 15

Concatenando strings:

nome = "Alice"
sobrenome = "Silva"
nome_completo = nome + " " + sobrenome  # nome_completo será "Alice Silva"

5. Conclusão

Nesta aula, você aprendeu sobre variáveis em Ruby, incluindo como declará-las, atribuir valores e manipular esses valores. Variáveis são essenciais para armazenar e processar dados em um programa Ruby, e agora você tem a base para usá-las em seus projetos.