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


+14
NowaDraco
urbios
Gabriel Lenz
Otávio Grunje
Paulo Soreto
LeonM²
lovins
Guilink
SrºJokker
CraazY
DeaN
イアゴル
Satheios
RD12
18 participantes

    Save in Server 2.0 [New]

    RD12
    RD12
    Lenda
    Lenda


    Medalhas : Save in Server 2.0 [New] 48080450Save in Server 2.0 [New] Trophy11Save in Server 2.0 [New] GIueZSave in Server 2.0 [New] ZgLkiRU
    Mensagens : 1946
    Créditos : 745

    Save in Server 2.0 [New] Empty Save in Server 2.0 [New]

    Mensagem por RD12 Qui maio 09, 2013 8:23 pm

    Save in Server

    Eae pessoal. Como meu outro SiS estava com problemas, decidi fazer um decente e postar. Esse SiS era pra ser pro só meu Netplay(no qual pretendo fazer um projeto com um amigo). Mas não faz mal postar para vcs.
    Com esse script vc pode enviar e receber qualquer arquivo, imagens, videos.. Mas fiz configurado para o SiS, não recomendo enviar arquivos pesados.

    Características:
    **Ele salva o arquivo do save.rxdata direto no server. O arquivo foi "resumido" e compactado, menos de 5kb, pode variar.
    **Scene de espera, enquanto baixa os arquivos(bem rápido msm)
    **Salva tudo, itens, equipamentos, magias, switches, locais tbm, variaveis, etc...

    Como Funciona: Quem quiser entender, eu gero o arquivo de save, compacto com o Zlib para ficar menor, codifico com base64, para enviar como string para salvar no server. Dps é só receber, e refazer, decodificar, descompactar e criar o arquivo de novo.
    obs: Foi necessário modificar o script do server.


    Colocando no Jogo

    Primeiro adicione esse script acima do Main:

    Código:
    #=:=:=:==:=:=:==:=:=:==:=:=:==:=:=:==:=:=:==:=:=:==:=:=:==:=:=:==:=:=:==:=:=:==:
    #Autor: RD12            Save in Server 2.0
    #=:=:=:==:=:=:==:=:=:==:=:=:==:=:=:==:=:=:==:=:=:==:=:=:==:=:=:==:=:=:==:=:=:==:

    class SiS
     
      def file_encode(file)
        File.open("Jogadores/"+file, 'rb') do|rdfile|
          @data = rdfile.read#].pack("m0")
        end
        @data = [Zlib::Deflate.deflate(@data, 9)].pack('m0').gsub("\n", '')
        return @data
      end
     
      def file_decode(str)
        data = Zlib::Inflate.inflate(str.unpack('m0')[0])
        return data
      end
       
      def send(id)
        name = Network::Main.name
        fdata = file_encode("#{name}-#{id}.rxdata")
        Network::Main.socket.send("<char_id>#{id}</char_id>\n")
        ptsize = 3048
        for p in 1 .. (fdata.length/ptsize)+1
          packet = fdata[(p - 1)*ptsize ... p*ptsize]
          unless packet.nil? or packet.empty?
            Network::Main.socket.send("<save_data>#{packet}</save_data>\n")
          end
        end
        Network::Main.socket.send("<save_end></save_end>\n")
      end
     
      def receive(id)
        Network::Main.socket.send("<rec_save>#{id}</rec_save>\n")
      end
     
      def delete(id)
        Network::Main.socket.send("<del_save>#{id}</del_save>\n")
      end 
    end
    $SiS = SiS.new

    class Game_Actor < Game_Battler
      attr_accessor :map_id
    end

    class Scene_LoadSave
     
      def main
        @sprite = Sprite.new
        #Modifique a title de loading entre ( )
        @sprite.bitmap = RPG::Cache.title($data_system.title_name)
        $char_file = []
        @tcount = 0
        Graphics.transition
        loop do
          Network::Base.update
          Network::Main.update
          Graphics.update
          update
          if $scene != self
            break
          end
        end
        Graphics.freeze
        @sprite.dispose
      end
     
      def update
        if $char_file.size == 3
          for i in 0..2
            if $char_file[i].size > 10
              file_dec = $SiS.file_decode($char_file[i])
              file = File.open("Jogadores/#{Network::Main.name}-#{i+1}.rxdata", 'wb')
              file.write(file_dec)
              file.close
            end
          end
          $scene = Scene_Title.new
        else
          @tcount += 1
          if @tcount == 10
            @tcount = 0
            Network::Main.socket.send("<rec_save>#{$char_file.size+1}</rec_save>\n")
          end
        end
      end
    end

    class Scene_Map
      alias rd_update update
      alias rd_main main
      def main
        @siscount = 0
        rd_main
      end
      def update
        rd_update
        @siscount += 1
        if @siscount == 140
          @siscount = 0
          autosave
        end
        $game_party.actors[0].map_id = $game_map.map_id
      end
    end


    class Scene_Title
        def carregar2
        $ABS = MrMo_ABS.new
        name = Network::Main.name
        file = File.open("Jogadores/#{name}-#{@id_c}.rxdata", "rb")
        characters = Marshal.load(file)
        Graphics.frame_count = Marshal.load(file)
        #$game_system        = Marshal.load(file)
        $game_switches      = Marshal.load(file)
        $game_variables    = Marshal.load(file)
        $game_self_switches = Marshal.load(file)
        #$game_screen        = Marshal.load(file)
        $game_actors        = Marshal.load(file)
        $game_party        = Marshal.load(file)
        #$game_troop        = Marshal.load(file)
        #$game_map          = Marshal.load(file)
        $game_player        = Marshal.load(file)
        #$ABS                = Marshal.load(file)
        $distribuir_pontos  = Marshal.load(file)
        $guild_name        = Marshal.load(file)
        $guild_position    = Marshal.load(file)
        $flag              = Marshal.load(file)
        $guild_points      = Marshal.load(file)
        $guild_lider_name  = Marshal.load(file)
        $hotkey            = Marshal.load(file)
        $game_map = Game_Map.new
        $game_map.setup($game_party.actors[0].map_id)
        $game_player.center($game_player.x, $game_player.y)
        $game_map.update
        $ABS.update
        $game_party.refresh
        $game_map.autoplay
        Graphics.freeze
        $char_id = @id_c
        $divide_exp = false
        if Network::Main.group == 'admin'
          $game_party.actors[0].grupo = "Admin"
        else
          $game_party.actors[0].grupo = "Standard"
        end
        #Sair da Guild que foi deletada
        if $guild_name != ""
          if Network::Main.user_exist?($guild_name.to_s+"-Guild-DEL") == true
            $guild_name = ""
            $game_party.actors[0].guild = ""
            $game_player.refresh
            $guild_position = LANGUAGE::GUILDRANK
            $guild_lider_name = ""
            $guild_points = 0
            return
          end
        end
        if $guild_name == ""
          $flag = 1
        end
        $game_player.refresh
        $chat_ativo_agr = true
        $scene = Scene_Map.new
        $fechando_ativar = true
        Network::Main.send_start
        file.close
      end
     
      def sim
        @delete.visible = false
        @delete.active = false
        if $Icon[4].visible == true
          @deletechar[1] = true
          name = Network::Main.name
          File.delete("Jogadores/#{name}-1.rxdata")
          Network::Main.socket.send("<delete_char>1</delete_char>\n")
          @op_[1] = false
        elsif $Icon[5].visible == true
          @deletechar[2] = true
          name = Network::Main.name
          File.delete("Jogadores/#{name}-2.rxdata")
          Network::Main.socket.send("<delete_char>2</delete_char>\n")
          @op_[2] = false
        elsif $Icon[6].visible == true
          @deletechar[3] = true
          name = Network::Main.name
          File.delete("Jogadores/#{name}-3.rxdata")
          Network::Main.socket.send("<delete_char>3</delete_char>\n")
          @op_[3] = false
        end
        $scene = Scene_Title.new
      end

    end

    Substitua o script [ACT] Auto Save por este:

    Código:
    #==============================================================================
    # ** Auto Save
    #------------------------------------------------------------------------------
    # By Valentine
    #    RD12
    #==============================================================================

    def autosave
      name = Network::Main.name
      char_id = $char_id
      file = File.open("Jogadores/#{name}-#{char_id}.rxdata", "wb")
      characters = []
      for i in 0...$game_party.actors.size
        actor = $game_party.actors[i]
        characters.push([actor.character_name, actor.character_hue])
      end
      Marshal.dump(characters, file)
      Marshal.dump(Graphics.frame_count, file)
      Marshal.dump($game_switches, file)
      Marshal.dump($game_variables, file)
      Marshal.dump($game_self_switches, file)
      Marshal.dump($game_actors, file)
      Marshal.dump($game_party, file)
      Marshal.dump($game_player, file)
      #Marshal.dump($ABS, file)
      Marshal.dump($distribuir_pontos, file)
      Marshal.dump($guild_name, file)
      Marshal.dump($guild_position, file)
      Marshal.dump($flag, file)
      Marshal.dump($guild_points, file)
      Marshal.dump($guild_lider_name, file)
      Marshal.dump($hotkey, file)
      file.close
      $SiS.send(char_id)
    end

    def resetwindows
      $equip_w.visible = false
      $equip_w.active = false
      $member_list.visible = false
      $member_list.active = false
      $item_w.visible = false
      $item_w.active = false
      $janela_gold_w.visible = false
      $help_w.visible = false
      $help_w.active = false
      $help_w_2.visible = false
      $help_w_2.active = false
      $help_w.visible = false
      $help_w.active = false
      $painel_adm.visible = false
      $painel_adm.active = false
      $convite.visible = false
      $convite.active = false
      $teleport.visible = false
      $teleport.active = false
      $skill.visible = false
      $skill.active = false
      $flag1.visible = false
      $guild_w.visible = false
      $guild_w.active = false
      $msg.visible = false
      $msg.active = false
      $flag2.visible = false
      $guild_created.visible = false
      $guild_created.active = false
      $memorizando_skill = false
      $memorizando = false
      $status.visible = false
      $status.active = false
      $quest_list.visible = false
      $quest_list.active = false
      $quest_w.visible = false
      $quest_w.active = false
    end

    Agora script [WIN] Load_Character Apague as linhas 22 e 26:
    @game_system = Marshal.load(file)
    @game_screen = Marshal.load(file)


    Agora no [NET] Network, linha 702 em baixo de return if @socket == nil
    Adicione
    Código:
        loop = 0
          autosave if $scene.is_a?(Scene_Map)
          loop do
            loop += 1
            self.update
            break if @auth
            break if loop == 300
          end
    um pouquinho mais em baixo procure por autosave e apague. Para evitar um bug.

    Agora no [NET] Network linha 977 em baixo de case line
    Adicione

    Código:
        #get save data
        when /<rec_save>(.*)<\/rec_save>/
          $char_file = [] if $char_file.nil?
          $char_file << $1.to_s

    Mais em baixo procure por $scene = Scene_Title.new
    substitua por: $scene = Scene_LoadSave.new

    Vá na pasta do server, Scripts.lua, abra com um editor e em cima do peúltimo end(linha 443) adicione:

    Código:
      elseif cmd == "<char_id>" then
        do
          data    = string.gsub(data, "<char_id>", "")
          data    = string.gsub(data, "</char_id>", "")
          save_file  = io.open("Jogadores/"..user.name.."-"..data..".rxdata", "wb");
        end
      elseif cmd == "<save_data>" then
        do
          data      = string.gsub(data, "<save_data>", "")
          data      = string.gsub(data, "</save_data>", "")
          save_file:write(data)
        end
       elseif cmd == "<save_end>" then
        do
         save_file:close()
        end
      elseif cmd == "<rec_save>" then
        do
          data      = string.gsub(data, "<rec_save>", "")
          data      = string.gsub(data, "</rec_save>", "")
          local char_file    = io.open("Jogadores/"..user.name.."-"..data..".rxdata", "rb")
          if char_file ~= nil then
          local save_contents = char_file:read("*all")
            NP():SendToUser(user.id, "<rec_save>"..save_contents.."</rec_save>\n")
             else
            NP():SendToUser(user.id, "<rec_save>nil</rec_save>\n")
          end
        char_file:close()
          io.close(char_file)
        end
      elseif cmd == "<delete_char>" then
        do
          data      = string.gsub(data, "<delete_char>", "")
          data      = string.gsub(data, "</delete_char>", "")
          os.remove("Jogadores/"..user.name.."-"..data..".rxdata")
      end

    Crie uma pasta com o nome Jogadores, dentro da pasta do server.
    A pasta jogadores ainda é necessária no jogo.

    DEMO: http://www.mediafire.com/?2g9w5u0q1y7l3td


    Credítos RD12
    Satheios
    Satheios
    Aldeia Friend
    Aldeia Friend


    Medalhas : Save in Server 2.0 [New] Trophy12Save in Server 2.0 [New] IlSfE
    Mensagens : 1248
    Créditos : 306

    Save in Server 2.0 [New] Empty Re: Save in Server 2.0 [New]

    Mensagem por Satheios Qui maio 09, 2013 8:45 pm

    Muito bom RD12!
    Eu testei aqui e está funcionando!
    @Edit.:
    Erro meu, obrigado pelo sistema amigo!
    Aqui está 100% funcional, pelo menos não deu bugs!

    +1 Crédito.
    Abraços,
    Vinks.


    _________________



    Ninguém pode ser perfeito, mas todos podem ser melhores.
    Visite o meu projeto, Tales of a Kingdom e prepare-se para um novo mundo!




    イアゴル
    イアゴル
    Membro Ativo
    Membro Ativo


    Mensagens : 350
    Créditos : 27

    Save in Server 2.0 [New] Empty Re: Save in Server 2.0 [New]

    Mensagem por イアゴル Qui maio 09, 2013 9:50 pm

    EDIT:Aqui bugo, ele demora pra entrar no registro,eu crio o char e quando entra no jogo a tela congela mais a musica continua e o progama para de funcionar!

    Eis os script que estou usando:

    Botão Window,Anti Lag,Mapa Mundo,Pet Global,Anti-pause,CoolDown,Speed Attack.

    EDIT2: Irmão descobri, era o Anti Lag que tava conflitando com o sis 2.0 xD!

    EDIT3:Aconceteu 1 vez só,eu sai da casa e dei exit do jogo pelo X do window,quando voltei,o char tava invisivel e nao andava e não aparecia sprite das magia usadas. Pronto erro reportado xD.


    _________________
    Save in Server 2.0 [New] Kkkv



    Haters? Haters gonna Hate!
    DeaN
    DeaN
    Colaborador
    Colaborador


    Mensagens : 1243
    Créditos : 48

    Save in Server 2.0 [New] Empty Re: Save in Server 2.0 [New]

    Mensagem por DeaN Qui maio 09, 2013 10:28 pm

    Legal muito bom RD12.


    _________________
    Dean, Programador Geral :)

    Contato: Skype:matucarvalho e Facebook
    The Enze - Vulzt

    Shield Block
    Anti-Cheat para jogos de FPS, agora vou adaptar para jogos de RPG principalmente para o RMXP.
    www.shieldblock.net
    fb.com/shieldblockoficial

    Save in Server 2.0 [New] MiB0H
    CraazY
    CraazY
    Novato
    Novato


    Mensagens : 18
    Créditos : 0

    Save in Server 2.0 [New] Empty Re: Save in Server 2.0 [New]

    Mensagem por CraazY Qui maio 09, 2013 10:32 pm

    Muito bom Very Happy
    イアゴル
    イアゴル
    Membro Ativo
    Membro Ativo


    Mensagens : 350
    Créditos : 27

    Save in Server 2.0 [New] Empty Re: Save in Server 2.0 [New]

    Mensagem por イアゴル Qui maio 09, 2013 10:33 pm

    RD12 descubri aquele erro de quando o jogador da exit pelo X o jogador continua online como um fantasma.pra arrumar é o mesmo esquema ou você vai modificar algo?


    _________________
    Save in Server 2.0 [New] Kkkv



    Haters? Haters gonna Hate!
    SrºJokker
    SrºJokker
    Experiente
    Experiente


    Mensagens : 591
    Créditos : 234

    Save in Server 2.0 [New] Empty Re: Save in Server 2.0 [New]

    Mensagem por SrºJokker Sex maio 10, 2013 9:44 am

    O problema do Reset foi resolvido?


    _________________
    Com um pouco de criatividade o BOM fica ainda MELHOR.
    By: Ykky
    Save in Server 2.0 [New] Signpk11

    Save in Server 2.0 [New] Subzeropegadinhanofuteb

    Parceiro...


    Spoiler:
    イアゴル
    イアゴル
    Membro Ativo
    Membro Ativo


    Mensagens : 350
    Créditos : 27

    Save in Server 2.0 [New] Empty Re: Save in Server 2.0 [New]

    Mensagem por イアゴル Sex maio 10, 2013 10:05 am

    Foi ,salva tudo agora Very Happy só ta bugado o personagem fantasma !


    _________________
    Save in Server 2.0 [New] Kkkv



    Haters? Haters gonna Hate!
    Guilink
    Guilink
    Novato
    Novato


    Mensagens : 23
    Créditos : 9

    Save in Server 2.0 [New] Empty Re: Save in Server 2.0 [New]

    Mensagem por Guilink Sex maio 10, 2013 1:07 pm

    Excelente, eu estou no trabalho agora e assim que eu chegar em casa vou testar. Eu estava tentando fazer um sistema assim a meses, se funcionar para o meu projeto vai ser muito bom mesmo. É muito bom ter makers assim no cenario maker atual. Parabêns.


    _________________
    Save in Server 2.0 [New] Logotosketas

    lovins
    lovins
    Membro Ativo
    Membro Ativo


    Mensagens : 340
    Créditos : 68

    Save in Server 2.0 [New] Empty Re: Save in Server 2.0 [New]

    Mensagem por lovins Sex maio 10, 2013 6:41 pm

    Bom, o meu deu bug de quando eu criava/logava no char ele ficava "NAO RESPONDENDO", mas o motivo é que no script so SiS tem uma alias "rd_main" que estão definidas nos dois scripts fazendo ocorrer um conflito, mas eu mudei e consegui arrumar, só trocar o seu script de Anti Lag - Alta Prioridade por esse:
    http://pastebin.com/srkK9mnR
    Código:

    #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
    #|Autor: RD12|        Anti Lag - Alta Prioridade
    #|Adapt: Darkmel|        SiS 2.0 - RD12
    #--------------------------------------------------------------------------------
    # Aumenta a prioridade que o jogo tem em relação ao uso do processador
    #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
    #Chame: Prioridade.Alta para deixar ela alta(menos lag)
    #      Prioridade.Normal para deixar normal.
    class Prioridade
      def self.iniciar
        @AltaPrioridade = Win32API.new('kernel32', 'SetPriorityClass', ['p', 'i'], 'i')
      end
       
      def self.Alta
        @AltaPrioridade.call(-1, 0x080)
      end
     
      def self.Normal
        @AltaPrioridade.call(-1, 0x020)     
      end
     
    end
    class Scene_Map
      alias rd_mainlag main
      def main
        Prioridade.iniciar
        Prioridade.Alta
        rd_mainlag
      end
    end
          


    イアゴル escreveu:Foi ,salva tudo agora Save in Server 2.0 [New] 364988687 só ta bugado o personagem fantasma !
    Bom, eu testei aqui sai varias vezes pe;o "X", umas 5 vezes e não deu bug nenhum desse ai não.


    Última edição por Darkmel em Sex maio 10, 2013 6:47 pm, editado 1 vez(es)


    _________________
    Save in Server 2.0 [New] 616s9EW

    Conteúdo patrocinado


    Save in Server 2.0 [New] Empty Re: Save in Server 2.0 [New]

    Mensagem por Conteúdo patrocinado


      Data/hora atual: Sex Nov 22, 2024 1:18 am