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

Save & Load Custom Menu [Shep]

Iniciado por Shephiroth, 29/02/2020 às 03:58

29/02/2020 às 03:58 Última edição: 09/03/2020 às 17:33 por Shephiroth
Save & Load Custom Menu

Compativel com: RMMV

[box class=titlebg]
Condições de Uso
[/box]
Livre para uso comercial e não comercial, edição e/ou compartilhamento.

[box class=titlebg]
Para que serve o script
[/box]
O Script altera o menu padrão de save e de load do jogo. Você pode personalizar o script por parâmetros, definindo uma variável que contará como porcentagem de conclusão do game.

Configurações por parâmetros:

-Quantidade de saves que aparecerão na tela (obs: números maiores que 4 saves aparecerão de forma que o jogador deva apertar para baixo para acessar os novos arquivos).
-Conclusão do Game - Selecione o ID da variável que representará a porcentagem de conclusão do jogo, durante o game, atribua por eventos valores para esta variável, como por exemplo após a abertura de um baú. O valor não é limitado em 100, você pode aumenta-lo o quanto quiser.
-ID dos ícones - Caso você queira trocar os ícones, selecione aqui os IDs dos novos modelos.

* Para configurar as cores da barra de progressão de jogo, configure os parâmetros
* Primeira Cor e Segunda Cor, escrevendo a cor desejada, sendo
* as cores pre-configuradas:
*
* -Azul        -Roxo
* -Verde       -Cinza
* -Amarelo     -Preto
* -Laranja     -Branco

Outras cores basta digitar o código Hexadecimal correspondente, de acordo com o código correto, contendo o #.

IMPORTANTE: Lembre-se de atribuir pequenos aumentos a esta variável de porcentagem em eventos durante o seu jogo, após ocasiões que você julgue importante.

[box class=titlebg]
Imagens
[/box]
Spoiler

[close]

[box class=titlebg]
Script
[/box]
/*:
* @plugindesc Este plugin altera o menu padrão de Save/Load do jogo.
* @author Shephiroth v.1.1
*
*
* @param Quantos Saves
* @desc Quantos saves serão exibidos no menu.
* @default 4
*
* @param Conclusão do game
* @desc Selecione qual variável irá representar a porcentagem de conclusão do game
* @default 1
*
* @param Ícone de ouro
* @desc Defina o ID do ícone presente no seu Iconset.
* @default 314
*
* @param Ícone de mapa
* @desc Defina o ID do ícone presente no seu Iconset
* @default 190
*
* @param Ícone de conclusão
* @desc Defina o ID do ícone presente no seu Iconset
* @default 123
*
* @param Ícone de batalhas
* @desc Defina o ID do ícone presente no seu Iconset
* @default 77
*
* @param Ícone de saves
* @desc Defina o ID do ícone presente no seu Iconset
* @default 297
*
* @param Primeira cor
* @desc Defina o ID do ícone presente no seu Iconset
* @default vermelho
*
* @param Segunda cor
* @desc Defina o ID do ícone presente no seu Iconset
* @default verde
*
* @param Exibe Ouro
* @desc Defina se o campo de Ouro aparecerá ou não
* @default sim
*
* @param Exibe Batalha
* @desc Defina se o campo de Batalha aparecerá ou não
* @default sim
*
* @param Exibe Save
* @desc Defina se o campo de Save aparecerá ou não
* @default sim 
*
*
* @help
* ================================================================================
*    Configurações dos parâmetros
* ================================================================================
* Esse código é apenas uma edição do código padrão disponibilizado pela Kadokawa.
*
* Para configurar as cores da barra de progressão de jogo, configure os parâmetros
* Primeira Cor e Segunda Cor na lateral direita, escrevendo a cor desejada, sendo
* as cores pre-configuradas:
*
* -Azul        -Roxo
* -Verde       -Cinza
* -Amarelo     -Preto
* -Laranja     -Branco
*  Pra adicionar outra cor basta digitar o código Hexadecimal correspondente,
* iniciando com #
*
* exemplo: #FF00FF
*
* ================================================================================
*
*/
(function() {
    var parameters = PluginManager.parameters('SaveMenuShep');
    var qtdSave = Number(parameters['Quantos Saves'] || '4');
    var variavelPorcentagem = Number(parameters['Conclusão do game'] || '1');
    var iconeOuro = Number(parameters['Ícone de ouro'] || '314');
    var iconeMapa = Number(parameters['Ícone de mapa'] || '190');
    var iconeConclusao = Number(parameters['Ícone de conclusão'] || '123');
    var iconeBatalhas = Number(parameters['Ícone de batalhas'] || '77');
    var iconeSaves = Number(parameters['Ícone de saves'] || '297');
    var primeiraCorGauge = String(parameters['Primeira cor']||'vermelho');
    var segundaCorGauge = String(parameters['Segunda cor']||'verde')
    var exibeOuro = String(parameters['Exibe Ouro']||'sim')
    var exibeBatalha = String(parameters['Exibe Batalha']||'sim')
    var exibeSave = String(parameters['Exibe Save']||'sim')
    var _Scene_File_create = Scene_File.prototype.create;
    Scene_File.prototype.create = function() {
        _Scene_File_create.call(this);
        this._listWindow.height = this._listWindow.fittingHeight(2);
        var y = this._listWindow.y + this._listWindow.height;
        this._statusWindow = new Window_SavefileStatus(0, y, Graphics.boxWidth, Graphics.boxHeight - y);
        this._statusWindow.setMode(this.mode());
        this._listWindow.statusWindow = this._statusWindow;
        this._listWindow.callUpdateHelp();
        this.addWindow(this._statusWindow);
    };
    var _Scene_File_start = Scene_File.prototype.start;
    Scene_File.prototype.start = function() {
        _Scene_File_start.call(this);
        this._listWindow.callUpdateHelp();
    };
    // JANELA DE COMANDOS #############################################
    Window_SavefileList.prototype.windowWidth = function() {
        return Graphics.boxWidth;
    };
    Window_SavefileList.prototype.maxCols = function() {
        return 4;
    };
    Window_SavefileList.prototype.numVisibleRows = function() {
        return 4;
    };
    Window_SavefileList.prototype.spacing = function() {
        return 8;
    };
    Window_SavefileList.prototype.itemHeight = function() {
        return this.lineHeight() * 2;
    };
    var _Window_SavefileList_callUpdateHelp =
            Window_SavefileList.prototype.callUpdateHelp;
    Window_SavefileList.prototype.callUpdateHelp = function() {
        _Window_SavefileList_callUpdateHelp.call(this);
        if (this.active && this.statusWindow) {
            this.statusWindow.setId(this.index() + 1);
        }
    };
    function Window_SavefileStatus() {
        this.initialize.apply(this, arguments);
    }
    Window_SavefileStatus.prototype = Object.create(Window_Base.prototype);
    Window_SavefileStatus.prototype.constructor = Window_SavefileStatus;
    Window_SavefileStatus.prototype.initialize = function(x, y, width, height) {
        Window_Base.prototype.initialize.call(this, x, y, width, height);
        this._id = 1;
    };
    Window_SavefileStatus.prototype.setMode = function(mode) {
        this._mode = mode;
    };
    Window_SavefileStatus.prototype.setId = function(id) {
        this._id = id;
        this.refresh();
    };
    // CARREGA AS INFORMAÇÕES DO SAVE #############################################
    DataManager.makeSavefileInfo = function() {
        var info = {};
        if ($gameMap.displayName()) {
            info.location   = $gameMap.displayName();
        }
        info.playtime   = $gameSystem.playtimeText();
        info.faces      = $gameParty.facesForSavefile();
        info.gold       = $gameParty.gold();   
        info.conclusao  = $gameVariables.value(variavelPorcentagem);
        info.batalhas   = $gameSystem.battleCount();
        info.saves      = $gameSystem.saveCount();
        return info;
    };
    // CARREGA E DESENHA OS LOADS FILES #############################################
    Window_SavefileStatus.prototype.refresh = function() {
        this.contents.clear();
        var id = this._id;
        var valid = DataManager.isThisGameFile(id);
        info = DataManager.loadSavefileInfo(id);
        var rect = this.contents.rect;
        if (this._mode === 'load') {
            this.changePaintOpacity(valid);
        }
        this.drawFileId(id, rect.x, rect.y);
        if (info) {
            this.changePaintOpacity(valid);
            this.drawContents(info, rect, valid);
            this.changePaintOpacity(true);
        }
    };
    // QTD MAX DE SAVES DE ACORDO COM PARAMETRO #############################################
    DataManager.maxSavefiles = function() {
        return qtdSave;
    };
    Window_SavefileStatus.prototype.drawFileId = function(id, x, y) {
        this.drawText("Arquivo" + ' ' + id, x, y, 180);
    };
    // DESENHA A TELA DE SAVE/LOAD #############################################
    Window_SavefileStatus.prototype.drawContents = function(info, rect, valid) {
        if (valid) {
            this.drawPartyfaces(info, 100,50);
        }
        this.drawText("Tempo de jogo: "+info.playtime, rect.x, 0, rect.width, 'right');
        if (exibeOuro.toLowerCase() == "sim"){
            this.drawIcon(iconeOuro,10,210);
            this.drawText("Ouro: "+info.gold+ $dataSystem.currencyUnit, 50, 210, rect.width, 'left');
        }
       
        this.drawIcon(iconeMapa,10,260);
        this.drawText("Mapa: "+info.location, 50, 260, rect.width, 'left');
        this.drawIcon(iconeConclusao,10,310);
        this.drawText("Jogo concluído: "+info.conclusao+" %", 50, 310, rect.width, 'left');
        var primeiraCor;
        var segundaCor;
        switch (primeiraCorGauge.toLowerCase()) {
            case "azul":
                primeiraCor = "#014ED3";
                break
            case "vermelho":
                primeiraCor = "#ff0000";
                break
            case "verde":
                primeiraCor = "#00ff00";
                break
            case "amarelo":
                primeiraCor = "#ffff00";
                break
            case "laranja":
                primeiraCor = "#FD580A";
                break
            case "roxo":
                primeiraCor = "#7A04F8";
                break   
            case "cinza":
                primeiraCor = "#979494";
                break
            case "preto":
                primeiraCor = "#000000";
                break
            case "branco":
                primeiraCor = "#ffffff";
                break           
            default:
                primeiraCor = primeiraCorGauge;
        }
        switch (segundaCorGauge.toLowerCase()) {
            case "azul":
                segundaCor = "#014ED3";
                break
            case "vermelho":
                segundaCor = "#ff0000";
                break
            case "verde":
                segundaCor = "#00ff00";
                break
            case "amarelo":
                segundaCor = "#ffff00";
                break
            case "laranja":
                segundaCor = "#FD580A";
                break
            case "roxo":
                segundaCor = "#7A04F8";
                break   
            case "cinza":
                segundaCor = "#979494";
                break
            case "preto":
                segundaCor = "#000000";
                break
            case "branco":
                segundaCor = "#ffffff";
                break           
            default:
                segundaCor = segundaCorGauge;
        }
       
        this.drawGauge(10,340,info.conclusao*7.5,1,primeiraCor,segundaCor);
        this.drawGauge(10,345,info.conclusao*7.5,1,primeiraCor,segundaCor);
        this.drawGauge(10,350,info.conclusao*7.5,1,primeiraCor,segundaCor);
        if (exibeBatalha.toLowerCase() == "sim"){
            this.drawIcon(iconeBatalhas,420,210);
            this.drawText("Batalhas: "+info.batalhas, 460, 210, rect.width, 'left');
        }   
        if (exibeSave.toLowerCase() == "sim"){
            this.drawIcon(iconeSaves,420,260);
            this.drawText("Saves: "+info.saves, 460, 260, rect.width, 'left');
        }
    };
    Window_SavefileStatus.prototype.drawPartyfaces = function(info, x, y) {
        if (info && info.faces) {
            for (var i = 0; i < info.faces.length; i++) {
                var data = info.faces[i];
                this.drawFace(data[0], data[1], x + i * 150, y);
                this.drawCharacter(data[0], data[1],x + i * 155, y + 150);
            }
        }
    };
})();

[box class=titlebg]
Créditos e Avisos
[/box]
Criador: Não é necessário, mas caso se sinta a vontade pode citar Shephiroth
Aceito todas sugestões para melhora-lo :D
.

Eita, já voltou programando melhor que o Pantufas, muito bom haha. Minha sugestão é que permita ao usuário escolher se vai ou não mostrar as opções menos relevantes. Por exemplo, eu esconderia o número de batalhas e de ouro. Talvez colocar um ícone ou rosto de personagem no lugar de "Arquivo N + Tempo" também ajude a identificar melhor. Primeiro porque o tempo de jogo é mostrado duas vezes, segundo porque acho mais fácil uma informação visual pra me situar que ter de me lembrar onde parei pelo tempo. Ah, talvez a opção de selecionar a cor da barrinha também seja uma boa.

No mais, excelente.  :clap:

Meeeeeeeeeeeh! Daqui a pouco teremos um compilado de plugins seus! Hahahahaha
Por favor, não pare!

Tá muito bonito esse Save e Load Custom.

+1 Rep (só porque você é totalmente nostálgico)

@Corvo

Fala Corvo! Obrigado pelas sugestões, são ideias excelentes! Já estou implantando algumas sugestões. Atualizei o código do tópico :D




@Eliyud

Muito obrigado Eliyud! E vou postar mais códigos em breve hehe
.