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

Continuação de uma Dúvida Anterior

Iniciado por Kayke silva, 03/12/2018 às 16:40

03/12/2018 às 16:40 Última edição: 04/12/2018 às 09:22 por Corvo
https://centrorpg.com/index.php?topic=21401.0

Deu certo mais no menu inicial quando clico em continua aparece o arquivo onde foi salvo quero saber se tem como inicia o jogo sem ter que selecionar o arquivo

03/12/2018 às 16:50 #1 Última edição: 03/12/2018 às 16:58 por Corvo
Quando isso acontecer, peça à um membro da equipe para destrancar o tópico anterior. E evite usar caixa alta nos títulos dos tópicos.


Aqui não há escolha, você vai precisar mexer no código do jogo. Na pasta js abra o rpg_scenes.js. Na linha 516 temos o seguinte método:

Scene_Title.prototype.commandContinue = function() {
    this._commandWindow.close();
    SceneManager.push(Scene_Load);
};


Altere-o para o seguinte:

Scene_Title.prototype.commandContinue = function() {
    this._commandWindow.close();
	DataManager.loadFromLocalFile(1)
    //SceneManager.push(Scene_Load);
};


Também não testei.

Deu um erro
TypeError
DataManager.loadFromLocalFile is not a function

Oxe, usa algum plugin que modifique o sistema de saves? Vou dar uma olhada e comento assim que possível.

Como o Corvo disse, não há como fazer essa alteração sem mexer no código do jogo, mas seria interessante tu criar um código à parte ao invés de alterar o atual. Isso pois, tu alterando o código base, outros plugins podem não lidar bem com essa alteração, culminando em erros. Tendo essa alteração em um código à parte, tu pode desativar esse plugin na ocorrência desses erros para identificar se ele é o responsável.

Enfim, se desejar, crie um novo plugin para conter essa alteração. Se não, modificamos no código base mesmo. Vou tentar passar como eu olhei aqui e vi uma forma viável de fazer o que imagino que tu queira.

O que tu quer nada mais é do que encurtar o caminho feito pelo jogador ao carregar um jogo, sendo assim, tudo que tu tem que fazer é remover a parte que tu quer que seja encurtada, começando do que acontece quando tu clica na opção continuar na tela de título.

Scene_Title.prototype.commandContinue = function() {
    this._commandWindow.close();
    SceneManager.push(Scene_Load);
};


A função acima é chamada, e ela fecha a janela de opções (onde está novo jogo, continuar e opções) e chama a tela de carregamento. Não queremos chamar a tela de carregamento, sendo assim vamos à função que carrega um jogo salvo, chamada quando confirmamos a seleção em um arquivo de jogo salvo na tela de carregamento.

Scene_Load.prototype.onSavefileOk = function() {
    Scene_File.prototype.onSavefileOk.call(this);
    if (DataManager.loadGame(this.savefileId())) {
        this.onLoadSuccess();
    } else {
        this.onLoadFailure();
    }
};


A primeira linha é a criação da função. A segunda chama a função onSavefileOk da Scene_File, a classe mãe, que por sorte não tem nada. A terceira linha,que inicia uma condição, é a que nos interessa, pois ela é que carrega e retorna que há um jogo salvo ou retorna que não há um jogo salvo. Caso haja um jogo salvo, iremos para dentro da condição, que é o que acontece após carregar o jogo. Nesse caso, vamos para função onLoadSuccess, que está também na Scene_Load.

Scene_Load.prototype.onLoadSuccess = function() {
    SoundManager.playLoad();
    this.fadeOutAll();
    this.reloadMapIfUpdated();
    SceneManager.goto(Scene_Map);
    this._loadSuccess = true;
};


SoundManager.playLoad(); - Executa o som de jogo carregado.
this.fadeOutAll(); - Escurece a tela.
this.reloadMapIfUpdated(); - Atualiza o mapa se o jogo tiver sido atualizado após esse save ter sido criado.
SceneManager.goto(Scene_Map); - Muda a cena atual para a cena de mapas, onde movimentamos os personagens.
this._loadSuccess = true; - Muda o valor da variável que marca se houve sucesso ou não no carregamento do jogo salvo.

E a terceira linha acima ainda é uma função que está na Scene_Load.

Scene_Load.prototype.reloadMapIfUpdated = function() {
    if ($gameSystem.versionId() !== $dataSystem.versionId) {
        $gamePlayer.reserveTransfer($gameMap.mapId(), $gamePlayer.x, $gamePlayer.y);
        $gamePlayer.requestMapReload();
    }
};


Em tese teríamos que mover todos esses códigos para a Scene_Title, pois queremos que a partir dela o jogo já seja carregado, não indo para a tela de carregamento. Porém, não é só jogar tudo lá, devemos conferir a sintaxe para que tudo funcione certinho. No fim das contas teríamos algo similar a isto.

Scene_Title.prototype.commandContinue = function() {
    if (DataManager.loadGame(1)) {
        SoundManager.playLoad();
				this.fadeOutAll();
				this.reloadMapIfUpdated();
				SceneManager.goto(Scene_Map);
    } else {
        SoundManager.playBuzzer();
				this._commandWindow.activate();
    }
};

Scene_Title.prototype.reloadMapIfUpdated = function() {
    if ($gameSystem.versionId() !== $dataSystem.versionId) {
        $gamePlayer.reserveTransfer($gameMap.mapId(), $gamePlayer.x, $gamePlayer.y);
        $gamePlayer.requestMapReload();
    }
};


Repare que como ID do save estou usando 1. Testei aqui e funcionou, ao menos superficialmente. A criação do arquivo de um jogo salvo não é uma execução de código linear, várias funções estão envolvidas nessa mecânica para que o arquivo salvo contenha todas as funções necessárias para quando o jogo for carregado, portanto não tenho certeza se está será uma solução definitiva para o que tu quer. Queria poder explicar melhor esses códigos para, mais do que tu conseguir, tu entender como chegou nesse resultado, mas esse horário e o dia não ajudam muito. Testa aí, vê se dá certo e reporta pra gente qual foi o resultado. Estaremos aqui pra ajudar em qualquer dificuldade que venha a ter.  :ok: