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


    Melhorar tempo de resposta na criação do char

    Merim
    Merim
    Novato
    Novato


    Mensagens : 21
    Créditos : 7

    Melhorar tempo de resposta na criação do char Empty Melhorar tempo de resposta na criação do char

    Mensagem por Merim Ter Dez 10, 2024 12:07 am

    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.

    Valentine, Paulo Soreto, Uchiha ~ e Manticora gostam desta mensagem


      Data/hora atual: Ter Jan 14, 2025 9:30 am