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.
- Código:
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][0]
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][0] : ''
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 + [0] * (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[0], 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.