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

Menu de Pause [Shep]

Iniciado por Shephiroth, 28/02/2020 às 00:49

28/02/2020 às 00:49 Última edição: 09/03/2020 às 17:34 por Shephiroth
Menu de Pause

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 adiciona um menu de pause ao seu game, pausando o contador. No menu o jogador terá acesso a 4 opções: Continuar, Salvar, Carregar e sair.
O plugin aceita parâmetros para configurar se todas estas opções devem aparecer. O Título do menu também pode ser customizado por parâmetros.

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

[close]

[box class=titlebg]
Script
[/box]
/*:
* @plugindesc Este plugin abrirá um Menu de Pause com as opções definidas por parâmetro.
* @author Shephiroth v.1.1
*
*
* @param titulo
* @desc Título da janela.
* @default Pause
*
* @param salvar
* @desc Habilita a opção salvar no menu de pausa. "Sim ou Não"
* @default sim
*
* @param carregar
* @desc Habilita a opção de carregar no menu de pausa.  "Sim ou Não"
* @default sim
*
* @param sair
* @desc Habilita a opção sair no menu de pausa.  "Sim ou Não"
* @default sim
*
* @param tecla que ativa o pause
* @desc Define qual o botão ativa/desativa o menu de pause
* @default 80
*
* @help
* ================================================================================
*    Configurações dos parâmetros
* ================================================================================
* No campo dos parâmetros ao lado você poderá configurar qual tecla deverá ser
* utilizada para ativar/desativar o menu de pause.
*
* CUIDADO: Tome cautela para não utilizar uma tecla importante para outra função!
*
* Por padrão a tecla "P" é selecionada. Caso deseje trocar, mude o parâmetro
* "botao" seguindo a lista abaixo:
*
* a    65          j   74          s   83
* b    66          k   75          t   84
* c    67          l   76          u   85
* d    68          m   77          v   86
* e    69          n   78          w   87
* f    70          o   79          x   88
* g    71          p   80          y   89
* h    72          q   81          z   90
* i    73          r   82
*
* ================================================================================
*
*/
(function() {
    // PARÂMETROS #############################################
    var parameters = PluginManager.parameters('PauseMenuShep');
    var titulo = String(parameters['Título da janela'] || 'Menu de Pause');
    var salvar = String(parameters['Salvar o Jogo'] || 'Sim');
    var carregar = String(parameters['Carregar o jogo'] || 'Sim');
    var sair = String(parameters['Sair'] || 'Sim');
    var tecla = String(parameters['tecla que ativa o pause'] || '80');
    //  #######################################################
    // FUNÇÃO QUE ATUALIZA NO MAPA ############################
    _pause_alias_scene_map_update = Scene_Map.prototype.update;
    Scene_Map.prototype.update = function(){
        _pause_alias_scene_map_update.call(this);
        Input.keyMapper[tecla] = "PauseMenu";
        if (Input.isTriggered("PauseMenu")) SceneManager.push(Scene_PauseMenuShep);
    };
    function Scene_PauseMenuShep() {
        this.initialize.apply(this, arguments);
    }
    Scene_PauseMenuShep.prototype = Object.create(Scene_MenuBase.prototype);
    Scene_PauseMenuShep.prototype.constructor = Scene_PauseMenuShep;
    Scene_PauseMenuShep.prototype.initialize = function() {
        Scene_MenuBase.prototype.initialize.call(this);
    };
    Scene_PauseMenuShep.prototype.create = function(){
        Scene_MenuBase.prototype.create.call(this);
        this._customWindow = new Window_Custom((this.width-350)/2,((this.height-75)/2)-250,350,170);
        this.addWindow(this._customWindow);
        this._customCommandWindow = new Window_CustomCommand(0,0);
        this._customCommandWindow.setHandler("command1", this.command1.bind(this));
        this._customCommandWindow.setHandler("command2", this.command2.bind(this));
        this._customCommandWindow.setHandler("command3", this.command3.bind(this));
        this._customCommandWindow.setHandler("command4", this.command4.bind(this));
        this.addWindow(this._customCommandWindow);
        this._customCommandWindow.activate();
    }
    // FUNÇÃO DOS COMANDOS ############################
    Scene_PauseMenuShep.prototype.command1 = function(){
        if (this._customCommandWindow.visible) this._customCommandWindow.activate();
        SceneManager.push(Scene_Save);
    }
    Scene_PauseMenuShep.prototype.command2 = function(){
        if (this._customCommandWindow.visible) this._customCommandWindow.activate();
        SceneManager.push(Scene_Load);
    }
    Scene_PauseMenuShep.prototype.command3 = function(){
        if (this._customCommandWindow.visible) this._customCommandWindow.activate();
        SceneManager.exit();
    }
    Scene_PauseMenuShep.prototype.command4 = function(){
        if (this._customCommandWindow.visible) this._customCommandWindow.activate();
        this.popScene();
    }
    Scene_PauseMenuShep.prototype.update = function () {
        Scene_MenuBase.prototype.update.call(this);
        if (Input.isTriggered("PauseMenu")) this.popScene();
    }
    Scene_PauseMenuShep.prototype.start = function (){
        Scene_MenuBase.prototype.start.call(this);
        this._customWindow.drawAllItems();
    };
    // JANELA DE TÍTULO #############################################
    function Window_Custom() {
        this.initialize.apply(this, arguments);
    }
    Window_Custom.prototype = Object.create(Window_Base.prototype);
    Window_Custom.prototype.constructor = Window_Custom;
    Window_Custom.prototype.initialize = function (x, y, width, height) {
        Window_Base.prototype.initialize.call(this, x, y, width, height);
    }
    Window_Custom.prototype.drawAllItems = function() {
        this.contents.clear();
        this.drawText (parameters.titulo, 0,0,this.width - this.padding * 2, "center");
        this.drawText ($gameMap.displayName(), 0,50,this.width - this.padding * 2, "center");
        this.drawText ($gameSystem.playtimeText(), 0,100,this.width - this.padding * 2, "center");
    }
    // JANELA DE COMANDOS #############################################
    function Window_CustomCommand () {
        this.initialize.apply (this, arguments);
    }
    Window_CustomCommand.prototype = Object.create (Window_Command.prototype);
    Window_CustomCommand.prototype.constructor = Window_CustomCommand;
    Window_CustomCommand.prototype.initialize = function (x,y){
        Window_Command.prototype.initialize.call(this, x, y);
        this.updatePlacement();
    }
    Window_CustomCommand.prototype.updatePlacement = function() {
        this.x = (Graphics.boxWidth - this.width) / 2;
        this.y = (Graphics.boxHeight - this.height) / 2;
    };
    Window_CustomCommand.prototype.makeCommandList = function (){
        this.addCommand ("Continuar", "command4");
        if (parameters.salvar.toLowerCase()) this.addCommand ("Salvar o jogo", "command1")
        if (parameters.carregar.toLowerCase() == "sim")this.addCommand ("Carregar o jogo", "command2", this.isContinueEnabled() )
        if (parameters.sair.toLowerCase() == "sim")this.addCommand ("Sair", "command3");
    };
    Window_CustomCommand.prototype.isContinueEnabled = function() {
        return DataManager.isAnySavefileExists();
    };
    // PAUSA O CONTADOR (AUTOR Triacontane) #############################################
    var _SceneManager_renderScene = SceneManager.renderScene;
    SceneManager.renderScene = function() {
        var frame = Graphics.frameCount;
        _SceneManager_renderScene.apply(this, arguments);
        if (this.disableFrameCountAdd()) {
            Graphics.frameCount = frame
        }
    };
    SceneManager.disableFrameCountAdd = function() {
        return !(this._scene instanceof Scene_Map || this._scene instanceof Scene_Battle);
    };
})();

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

28/02/2020 às 14:13 #1 Última edição: 28/02/2020 às 14:15 por Raizen
Boa Sheph!! Está bem show o plugin!
:wow:

CitarEsse é meu primeiro Plugin para o RMMV, aceito todas sugestões para melhora-lo :D

Só porque pediu haha.

você definiu os parâmetros a nível global, no JS um jeito de "concertar isso é colocar tudo dentro de uma function inclusive as funções que você renomeou, as funções continuam globais, porém as variáveis só vão ser visíveis dentro da function Ex:

(function() {
var....
var...


Tem outros modos de realizar isso, mas esse é um dos jeitos mais rápidos de fazer.

Eu também trocaria esse nome
_alias_scene_map_update

pra algo mais especifico, sei lá, _pause_menu_scene_map_update. Evitar conflito com o dos outros pluginzeiros xD, eu prefiro camelCase, mas o carinha que escreveu o código do MV fez uma embananada com camelCase + snake_case, acho que pra tentar manter algumas coisas do RGSS.

Isso daqui :  if (parameters.sair == "Sim" || parameters.sair =="sim")
Não poderia ser?
if (parameters.sair.toLowerCase() =="sim")


Eu pessoalmente fora do Ruby não curto muito os ifs de linha única, mas ai é o modo como eu gosto de escrever mesmo xD.




Acho que é isso haha, eu também estou bem longe de ter muito conhecimento em JS, mas estou aprendendo no caminho.

Aeeeeeeeeeeeeee!! Finalmente alguém disposto a criar conteúdo para o RPG Maker MV! Hahahahaa
Está ótimo, Shep!

A única sugestão que eu daria era de colocar uma window com o tempo decorrido de jogo e o nome do mapa atual. Mas, de qualquer forma, são coisas supérfluas!

+1 Rep.

Eba, obrigado Raizen884.

Citação de: Raizen online 28/02/2020 às 14:13
você definiu os parâmetros a nível global, no JS um jeito de "concertar isso é colocar tudo dentro de uma function inclusive as funções que você renomeou, as funções continuam globais, porém as variáveis só vão ser visíveis dentro da function Ex:

(function() {
var....
var...



Dica valiosíssima! Obrigado, vou corrigir isso.


Citação de: Raizen online 28/02/2020 às 14:13

Eu também trocaria esse nome
_alias_scene_map_update

pra algo mais especifico, sei lá, _pause_menu_scene_map_update. Evitar conflito com o dos outros pluginzeiros xD, eu prefiro camelCase, mas o carinha que escreveu o código do MV fez uma embananada com camelCase + snake_case, acho que pra tentar manter algumas coisas do RGSS.


Hum, bom saber, vou aplicar essa alteração também! :D

Citação de: Raizen online 28/02/2020 às 14:13

Isso daqui :  if (parameters.sair == "Sim" || parameters.sair =="sim")
Não poderia ser?
if (parameters.sair.toLowerCase() =="sim")



Isso foi engraçado, eu esqueci do case sensitive e fiquei insistindo, debugando, tentando achar onde havia errado, ai eu coloquei o OR e rolou, ai esqueci que podia fazer assim também rsrs

Citação de: Raizen online 28/02/2020 às 14:13

Eu pessoalmente fora do Ruby não curto muito os ifs de linha única, mas ai é o modo como eu gosto de escrever mesmo xD.


Eu sinto que a formatação com o If em uma única linha facilita bastante quando vou fazer um teste de caixa branca por exemplo.

Já fiz as correções e subi uma nova versão! Muito obrigado pelas sugestões man! :D




Citação de: Eliyud online 28/02/2020 às 14:28
Aeeeeeeeeeeeeee!! Finalmente alguém disposto a criar conteúdo para o RPG Maker MV! Hahahahaa
Está ótimo, Shep!

A única sugestão que eu daria era de colocar uma window com o tempo decorrido de jogo e o nome do mapa atual. Mas, de qualquer forma, são coisas supérfluas!

+1 Rep.

Valeeu Eliyud! :D

Boas sugestões, vou atualizar o tópico com elas :)

Vou continuar fazendo scripts desde os mais simples pra aprender cada vez mais e rechear a comunidade com conteúdo pro RMMV!
.


Boa!!
Legal ver galera BR produzindo conteúdo para o MV!!! :)

@MakerGame2000

Muito obrigado :D
Eu trabalho com Delphi e um pouco em C#, então a lógica da programação eu já entendo um pouco, ai só a sintaxe do Javascript mesmo, boas práticas dentro do RPG Maker e talz que vou pegando com o tempo. e aprendendo com o Raizen ;P




@Eliaquim

Muito obrigado! Logo logo vem mais.
.

Show de bola em Shep!
Bem interessante a parte de pausar o contador...  :XD: