Melhorar tempo de resposta na criação do personagem

tópico anterior - próximo tópico

Merim

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.