LM² - Account Bank 1.0

    Compartilhe
    avatar
    LeonMM
    Moderador Local
    Moderador Local

    Mensagens : 1928
    Créditos : 110

    LM² - Account Bank 1.0

    Mensagem por LeonMM em Qua Ago 30, 2017 9:19 pm

    LM² - Account Bank 1.0:
    Este é um sistema de banco por conta, ou seja, uma unica conta possui acesso ao banco independente do personagem que esta sendo utilizado, fiz deste modo em uma primeira instancia pela facilidade, e por menor consumo do servidor.
    Screen:
    Screen:

    Clique aqui para Screen
    Ps: Ignorem a janela de Gold abaixo do inventário, aquela foi uma adição para uso pessoal meu, entretanto não me importo em disponibilizar se pedirem.
    Tutorial Básico:
    Tutorial Cliente:
    Primeiramente insiram um novo script com o código rmxp do link abaixo.
    Agora vem a parte complexa.
    Procure pela linha (ctrl+shift+f):

    Código:
    $windows[:choice] = Window_Choice.new

    Abaixo dela coloque:

    Código:
    $windows[:bank] = Bank.new

    Procure por:

    Código:
    $windows[:shop].on_close if $game_player.moving? and $windows[:shop].visible

    Abaixo adicione:

    Código:
    $windows[:bank].on_close if $game_player.moving? and $windows[:bank].visible

    Procure por:

    Código:
    $windows[:choice].on_close

    Abaixo adicione:

    Código:
     $windows[:bank].on_close

    Na [ND] Window_Amount, abaixo de  add_drop na linha 56 adicione antes do end:

    Código:
        when 6
          add_bank
        when 7  
          remove_bank

    No mesmo script antes do ultimo and adicione::

    Código:
      # LMM - Bank
      def add_bank(item = @item, value = @value_box.text.to_i)
        return if $game_party.item_number(item) < value
        update_bank_item(item, value)
      end
      def remove_bank(item = @item, value = @value_box.text.to_i)
        return if $windows[:bank].check_number(item.id,value)
        update_bank_item(item, -value)
      end
      def update_bank_item(item, value)
        case item
        when RPG::Item
          $network.send_bank_item(Constants::KIND_ITEM, item.id, value)
          $game_party.gain_item(item.id, -value)
        when RPG::Weapon
          $network.send_bank_item(Constants::KIND_WEAPON, item.id, value)
          $game_party.gain_weapon(item.id, -value)
        when RPG::Armor
          $network.send_bank_item(Constants::KIND_ARMOR, item.id, value)
          $game_party.gain_armor(item.id, -value)
        end
      end  

    Va no script [ND] Window_Item, no def update_drop, antes do penultimo end adicione

    Código:
        when 6
          $windows[:amount].open($mouse.object, 7)

    Procure por:

    Código:
      PACKET_ADMIN_COMMAND        = '<39>'

    Abaixo adicione:

    Código:
      PACKET_REQUEST_BANK         = '<50>'
      PACKET_SEND_BANK_ITEM       = '<51>'

    Vá no script [ND] Send_Data, antes do ultimo end adicione:

    Código:
      # LM² - Bank
      def request_bank
        @socket.send("#{PACKET_REQUEST_BANK}\n")
      end
      
      def send_bank_item(kind, id, amount)
        @socket.send("#{PACKET_SEND_BANK_ITEM}#{kind};#{id};#{amount}\n")
      end

    Procure por:

    Código:
    when PACKET_ADMIN_COMMAND; handle_admin_command(data)

    Abaixo adicione:

    Código:
     when PACKET_REQUEST_BANK; handle_request_bank(data)

    No mesmo script [ND] Handle_Data, antes do ultimo end adicione:

    Código:
      #--------------------------------------------------------------------------
      # * Processamento da dados do banco
      #     data : dados
      #--------------------------------------------------------------------------
      def handle_request_bank(data)
        data = data.split(';')
        for i in 0...data.size
          data[i] = data[i].split('|')
          data[i][0] = data[i][0].to_i
          data[i][1] =  data[i][1].to_i
          data[i][2] =  data[i][2].to_i
        end  
        $windows[:bank].bankdata = data if $windows[:bank].visible
        $windows[:bank].refresh if $windows[:bank].visible    
      end

    Agora iremos para o Servidor, está é a parte mais complexa do tutorial.
    Tutorial Servidor ():


    Primeiramente copie o código lua do link abaixo, salve num arquivo chamado bank.lua dentro da pasta Scripts do seu servidor, isto pode ser feito através de um editor de texto como wordpad.
    Abra o arquivo constants.lua e procure por:

    Código:
    PACKETADMINCOMMAND       = '<39>'

    Abaixo adicione:

    Código:
    PACKETREQUESTBANK        = '<50>'
    PACKETSENDBANKITEM       = '<51>'

    Abra o arquivo handledata.lua e procure por:

    Código:
    elseif header == PACKETVARIABLE then self:handlevariable(index, player, data)

    Abaixo adicione:

    Código:
        elseif header == PACKETREQUESTBANK then self:handlerequestbank(index, player)
        elseif header == PACKETSENDBANKITEM then self:handlesenbankitem(index, player, data)

    No final deste mesmo arquivo adicione:

    Código:
    -- LM² - Bank
    function TcpServer:handlerequestbank(index, player)
        if player.charnum == 0 then return end
        local bank  = Bank(player.user)
        if bank.bankdata ~= "" then
           -- bank:returnbank()
        end    
        banksave = bank.bankdata
        self:sendbank(index, banksave)
    end
    function TcpServer:handlesenbankitem(index, player, data)
        if player.charnum == 0 then return end
        local bank  = Bank(player.user)
        local recv = data:split(';')
        bank:modifyitem(recv[1], recv[2], recv[3])
        banksave = bank.bankdata
        self:sendbank(index, banksave)
    end

    Abra o arquivo senddata.lua, vá até o final dele, e adicione:

    Código:
    -- LM² - Bank
    function TcpServer:sendbank(index, data)
     self:sendtoplayer(index, PACKETREQUESTBANK, data)
    end

    Vá no arquivo main.lua, procure por:

    Código:
    require './Scripts/handledata'

    Abaixo adicione:

    Código:
    require './Scripts/bank'

    Pronto, agora seu script está configurado, para chama-lo basta usar o comando por evento via script:

    Código:
    $windows[:bank].trigger


    Links:
    Código RMXP
    Código Lua
    Creditos:
    A mim por criar, ao Soreto pela ajuda com o estudo do Servidor e Lua, ao Valentine por auxilio.

    Qualquer erro deverá ser reportado. Qualquer duvida leiam minha assinatura.


    Última edição por LeonMM em Qua Ago 30, 2017 11:28 pm, editado 2 vez(es)


    _________________
    Caso precise de suporte para algum dos meus scripts, me adicione no Discord: LeonMM#9597
    Scripts para NetMaker:

    Scripts Comuns:
    avatar
    Valentine
    Administrador
    Administrador

    Medalhas :
    Mensagens : 4634
    Créditos : 953

    Re: LM² - Account Bank 1.0

    Mensagem por Valentine em Qua Ago 30, 2017 9:34 pm

    Muito bom.

    + 1 crédito.


    _________________
    avatar
    Paulo S.
    Lenda
    Lenda

    Mensagens : 1929
    Créditos : 349

    Re: LM² - Account Bank 1.0

    Mensagem por Paulo S. em Qui Ago 31, 2017 6:19 am

    Muito bom cara, sua disposição pra programar tá me deixando pra baixo uaehuaheuahe
    Continue assim, tenho certeza que ter uma diversidade maior de sistemas estimulará o crescimento da comunidade.


    _________________
    avatar
    quimera555
    Ocasional
    Ocasional

    Mensagens : 167
    Créditos : 36

    Re: LM² - Account Bank 1.0

    Mensagem por quimera555 em Qui Ago 31, 2017 7:22 am

    Muito epico este sistema de banco !

    + Créditos


    _________________
    avatar
    Adanrox
    Diva
    Diva

    Mensagens : 550
    Créditos : 74

    Re: LM² - Account Bank 1.0

    Mensagem por Adanrox em Sex Set 01, 2017 1:33 pm

    Muito bom, isso é uma excelente ideia, nao poderia faltar, rsrsrs
    O que realmente esta faltando na minha opniao é limite de spaço/slot do banco e do inventario... na teoria esse banco esta sendo infinito espaco de ocupaçao de itens.
    + 1 Credito


    _________________
    avatar
    LeonMM
    Moderador Local
    Moderador Local

    Mensagens : 1928
    Créditos : 110

    Re: LM² - Account Bank 1.0

    Mensagem por LeonMM em Sex Set 01, 2017 1:41 pm

    Adanrox escreveu:Muito bom, isso é uma excelente ideia, nao poderia faltar, rsrsrs
    O que realmente esta faltando na minha opniao é limite de spaço/slot do banco e do inventario... na teoria esse banco esta sendo infinito espaco de ocupaçao de itens.
    + 1 Credito
    Não seria muito complicado fazer isso, talvez eu trabalhe nisso esse final de semana, irei descansar por um dia ou dois, ai depois disso que eu verei sobre limite de espaço, não só para o banco, como para o inventário também.
    Entretanto eu realmente acho melhor esperar para fazer isso, já que o Val vai alterar a forma como os itens são tratados numa versão futura, logo seria melhor eu esperar isso antes de alterar algo.
    Obrigado a todos pelo apoio.


    _________________
    Caso precise de suporte para algum dos meus scripts, me adicione no Discord: LeonMM#9597
    Scripts para NetMaker:

    Scripts Comuns:

      Data/hora atual: Ter Set 19, 2017 4:02 pm