O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Alterar Local do Salve Game do RPG Maker VX Ace

Iniciado por brunogarugon, 27/08/2020 às 20:13

27/08/2020 às 20:13 Última edição: 03/09/2020 às 00:13 por brunogarugon
Olá, gostaria de alterar o local de salvamento do jogo criado através do RPG Maker VX Ace. Eu criei o game, mas para que o salvamento funcione sem problemas na pasta padrão de instalação do jogo (program files), o usuário precisa conceder privilégios de administrador ao game, o que nem sempre é interessante. Gostaria de saber se existe alguma alternativa para direcionar o save game para a pasta Documentos por exemplo, onde não seria necessário conceder privilégios de administrador para salvar o jogo.
Bruno Garugon

ué, mas por padrão é exatamente aonde você falou que é  :'-':

ou você quer que o seu jogo esteja no Program Files e o save no Documentos? é isso?
Não pode manter os dois no Documentos?

28/08/2020 às 00:07 #2 Última edição: 28/08/2020 às 00:09 por Syureri
Obtendo o diretório de documentos usando as variáveis de ambiente:
Código: Ruby
home_directory = ENV['HOME'] # C:/Users/Fulano

documents_directory = home_directory + '/Documents' # ou "#{home_directory}/Documents"

Com essa informação em mãos, tudo o que você precisa fazer é ir no script padrão DataManager e procurar os locais onde ele trabalha com os arquivos de save. Por padrão ele procura/salva simplesmente um arquivo de save com o nome Save[número].rvdata2. Abaixo deixo um simples código que modifica o local onde ele procura jogos salvos.

Código: Ruby
module DataManager
  
  # Recomendo salvar em Documents/My Games/NomeDoJogo, visto que geralmente alguns jogos são salvos lá.
  DOCUMENTS_DIR = "#{ENV['HOME']}/Documents/My Simple Game"
  
  # É importante criar o diretório antes de salvar algo lá.
  Dir.mkdir(DOCUMENTS_DIR) if !Dir.exists?(DOCUMENTS_DIR)
  
  def self.save_file_exists?
    !Dir.glob("#{DOCUMENTS_DIR}/Save*.rvdata2").empty?
  end
  
  def self.make_filename(index)
    sprintf("#{DOCUMENTS_DIR}/Save%02d.rvdata2", index + 1)
  end
  
end


Basta modificar DOCUMENTS_DIR para o diretório onde o jogo deve ser salvo. Note que isso obviamente substitui o funcionamento dos métodos save_file_exists? e make_filename, então tome cuidado com incompatibilidades com scripts que mexem neles também. No mais, basta colocar acima de main e ver os resultados.

Obs: O método save_file_exists? serve pra indicar se um arquivo de save existe, enquanto o método make_filename(index) irá obter o caminho do arquivo de save para carregar/escrever.

Citação de: Syureri online 28/08/2020 às 00:07
(...)
Isso sim é suporte de primeira, merecia mais Likes.
Só uma dúvida, nesses sistemas RGSS1/2/3 pode usar Variáveis de Ambiente?
Por exemplo, caminho da pasta do usuário logado seria mais a pasta do jogo em Documentos:
%userprofile%\Documents\RPGVXAce\MyRpgGame

Exemplo: C:\Users\Crixus\Documents\RPGVXAce\MyRpgGame

Ou mais precisamente a pasta de onde o Script está rodando:
%~dp0

Não uso %cd% por que se rodar como Administrador o programa roda como se estivesse na System32 se eu não me engano.

Extra:
Pelo que pesquisei no MV tendo a própria LIB teria que ser assim:
console.log(process.env.USERNAME)

Retornaria no meu usuário: Crixus

29/08/2020 às 12:10 #4 Última edição: 29/08/2020 às 12:13 por Syureri
Opa, perdão pela demora.
Então, em ruby é possível usar as Variáveis de Ambiente sim através da variável ENV. Ela é uma Hash que contém os valores das variáveis mapeados usando os nomes como chaves. Nesse caso do exemplo, ENV['Home'] retornaria 'C:/Users/Usuário'. Acredito que ele também deve pegar as variáveis definidas temporariamente caso o jogo seja aberto pelo Terminal. No MV/MZ é esse processo mesmo (embora eu acredite que só funcione em Node.js, que o Rpg Maker usa).

Essa é uma preocupação bem válida, muitas das vezes o jogo está sendo executado em uma pasta onde ele possui permissão de ler, mas não de escrever. Por isso alguns jogos salvam seus dados na pasta Documents/My Games ou no bom e velho AppData o/

Citação de: Raizen online 27/08/2020 às 22:38
ué, mas por padrão é exatamente aonde você falou que é  :'-':

ou você quer que o seu jogo esteja no Program Files e o save no Documentos? é isso?
Não pode manter os dois no Documentos?

Sim, no caso eu queria o Jogo no Program Files e o save game nos documentos
Bruno Garugon

Citação de: Syureri online 28/08/2020 às 00:07
Obtendo o diretório de documentos usando as variáveis de ambiente:
Código: Ruby
home_directory = ENV['HOME'] # C:/Users/Fulano

documents_directory = home_directory + '/Documents' # ou "#{home_directory}/Documents"

Com essa informação em mãos, tudo o que você precisa fazer é ir no script padrão DataManager e procurar os locais onde ele trabalha com os arquivos de save. Por padrão ele procura/salva simplesmente um arquivo de save com o nome Save[número].rvdata2. Abaixo deixo um simples código que modifica o local onde ele procura jogos salvos.

Código: Ruby
module DataManager
  
  # Recomendo salvar em Documents/My Games/NomeDoJogo, visto que geralmente alguns jogos são salvos lá.
  DOCUMENTS_DIR = "#{ENV['HOME']}/Documents/My Simple Game"
  
  # É importante criar o diretório antes de salvar algo lá.
  Dir.mkdir(DOCUMENTS_DIR) if !Dir.exists?(DOCUMENTS_DIR)
  
  def self.save_file_exists?
    !Dir.glob("#{DOCUMENTS_DIR}/Save*.rvdata2").empty?
  end
  
  def self.make_filename(index)
    sprintf("#{DOCUMENTS_DIR}/Save%02d.rvdata2", index + 1)
  end
  
end


Basta modificar DOCUMENTS_DIR para o diretório onde o jogo deve ser salvo. Note que isso obviamente substitui o funcionamento dos métodos save_file_exists? e make_filename, então tome cuidado com incompatibilidades com scripts que mexem neles também. No mais, basta colocar acima de main e ver os resultados.

Obs: O método save_file_exists? serve pra indicar se um arquivo de save existe, enquanto o método make_filename(index) irá obter o caminho do arquivo de save para carregar/escrever.

Muito obrigado pela Resposta completa. Vou tentar as opções.
Bruno Garugon