🤔 Para Refletir :
"Não descarte uma ideia aparentemente ruim, pode ser apenas o efeito do spoiler."
- Frank

Separar Habilidades em duas Skill Lists na Batalha

Estado
Tópico fechado. Não é possível fazer postagens nela.

Virage Detoldev

Plebeu
Membro
Membro
Juntou-se
17 de Abril de 2017
Postagens
38
Bravecoins
7
Olá pessoal, como vão? Então, estou precisando de ajuda em uma coisa.

Eu estou fazendo um sistema de Especial na batalha, nele, cada turno realizado pelo personagem na batalha (atacar e usar habilidades) contam pontos e preenchem uma barra. Ao preencher a barra, o comando especial se torna clicável e abre uma janela de skill padrão onde você você seleciona o ataque.

Bem simples.

Mas o que eu queria saber é como classificar a janela de skill para mostrar somente as habilidades "especiais". Não consegui pensar no que por no código de criar uma lista de skill que me mostre somente um tipo específico de habilidades.

Alguém tem uma ideia de como eu faço isso? Para a lista de habilidades padrão não inserir as habilidades especiais e a lista de especiais não inserir as padrões?

Obrigado!
 
Olá rapaz, tudo certo?

Esse plugin pode te ajudar:

http://yanfly.moe/2016/03/27/yep-87-map-select-skill/

O que ele faz?

Ele abre uma janela listando as habilidades de um jogador, além de listar TODAS as habilidades que tem, lista os tipos de Habilidades que ele possui. Ao selecionar uma habilidade, ele guarda o ID da habilidade como número em um variável.

Edit: A ideia: Você pode criar um evento comum em que pode ser ativado ao escolher essa habilidade, assim coloque o comando primeiro e depois ponha condições nessa lógica:

Se a variável X conter o número Y, a habilidade com ID com o número Y guardado na variável X será forçada a ser utilizada pelo usuário.

Espero que tenha ajudado.
 
Daniel M. Neto comentou:
Olá rapaz, tudo certo?

Esse plugin pode te ajudar:

http://yanfly.moe/2016/03/27/yep-87-map-select-skill/

O que ele faz?

Ele abre uma janela listando as habilidades de um jogador, além de listar TODAS as habilidades que tem, lista os tipos de Habilidades que ele possui.

Espero que tenha ajudado.

Oi Daniel, obrigado pela ajuda.
Isso resolveria o problema de abrir uma janela com as habilidades ao usar o especial, mas não resolve o problemas dos especiais entrarem na janela de habilidades.

Os especiais são aprendidos pelo grupo todo, dessa forma ao abrir a opção de habilidades no menu, ela vai acabar sendo mostrada na lista, como uma magia normal.

Não sei se tem algo que possa ser inserido no código de criar a lista que filtre isso, entende?

Código:
Window_ActorCommand.prototype.addSkillCommands = function() {
    var skillTypes = this._actor.addedSkillTypes();
    skillTypes.sort(function(a, b) {
        return a - b;
    });
    skillTypes.forEach(function(stypeId) {
        var name = $dataSystem.skillTypes[stypeId];
        this.addCommand(name, 'skill', true, stypeId);
    }, this);
};

Não consigo pensar em algo que separe as habilidades, ao meu entender o jogo lê tudo como skill.
Existe algum comando que leia o que está escrito nas notas da habilidade? Acho que com isso, eu posso ver como fazer uma checagem e se tiver algo escrito na nota, não entre ou entra na lista.

Não sei se fui claro, mas é isso.

------------ RESPONDENDO AO EDIT --------------

Daniel M. Neto comentou:
Edit: A ideia: Você pode criar um evento comum em que pode ser ativado ao escolher essa habilidade, assim coloque o comando primeiro e depois ponha condições nessa lógica:

Se a variável X conter o número Y, a habilidade com ID com o número Y guardado na variável X será forçada a ser utilizada pelo usuário.

Espero que tenha ajudado.

Também não serve pois a barra do especial é preenchida em três partições. Certas habilidades usam uma, duas ou até três barras. O jogador decide então qual usar, podendo usar até 3 especiais de uma barra em cada turno.
 
Eu achei o código de Força da Ação, a qual força um aliado ou uma tropa a usar uma habilidade mesmo que ela não tenha aprendido:

Código:
/* Index 		= ID da posição do Ator/Inimigo na batalha
   skillId 		= ID da habilidade que será utilizada
   targetIndex 	= ID do alvo (pode ser Ator ou Tropa, dependendo do alvo configurado
   				  na habilidade)

// Aliados
$gameParty.members()[index].forceAction(skillId, targetIndex);
BattleManager.forceAction($gameParty.members()[index]);

// Tropas (Inimigos)
$gameTroop.members()[index].forceAction(skillId, targetIndex);
BattleManager.forceAction($gameTroop.members()[index]);

E você pode usar como base o código da janela padrão da janela de Skills (Abra o Spoiler pra copiar o código inteiro dela):

Código:
//-----------------------------------------------------------------------------
// Window_SkillList
//
// The window for selecting a skill on the skill screen.

function Window_SkillList() {
    this.initialize.apply(this, arguments);
}

Window_SkillList.prototype = Object.create(Window_Selectable.prototype);
Window_SkillList.prototype.constructor = Window_SkillList;

Window_SkillList.prototype.initialize = function(x, y, width, height) {
    Window_Selectable.prototype.initialize.call(this, x, y, width, height);
    this._actor = null;
    this._stypeId = 0;
    this._data = [];
};

Window_SkillList.prototype.setActor = function(actor) {
    if (this._actor !== actor) {
        this._actor = actor;
        this.refresh();
        this.resetScroll();
    }
};

Window_SkillList.prototype.setStypeId = function(stypeId) {
    if (this._stypeId !== stypeId) {
        this._stypeId = stypeId;
        this.refresh();
        this.resetScroll();
    }
};

Window_SkillList.prototype.maxCols = function() {
    return 2;
};

Window_SkillList.prototype.spacing = function() {
    return 48;
};

Window_SkillList.prototype.maxItems = function() {
    return this._data ? this._data.length : 1;
};

Window_SkillList.prototype.item = function() {
    return this._data && this.index() >= 0 ? this._data[this.index()] : null;
};

Window_SkillList.prototype.isCurrentItemEnabled = function() {
    return this.isEnabled(this._data[this.index()]);
};

Window_SkillList.prototype.includes = function(item) {
    return item && item.stypeId === this._stypeId;
};

Window_SkillList.prototype.isEnabled = function(item) {
    return this._actor && this._actor.canUse(item);
};

Window_SkillList.prototype.makeItemList = function() {
    if (this._actor) {
        this._data = this._actor.skills().filter(function(item) {
            return this.includes(item);
        }, this);
    } else {
        this._data = [];
    }
};

Window_SkillList.prototype.selectLast = function() {
    var skill;
    if ($gameParty.inBattle()) {
        skill = this._actor.lastBattleSkill();
    } else {
        skill = this._actor.lastMenuSkill();
    }
    var index = this._data.indexOf(skill);
    this.select(index >= 0 ? index : 0);
};

Window_SkillList.prototype.drawItem = function(index) {
    var skill = this._data[index];
    if (skill) {
        var costWidth = this.costWidth();
        var rect = this.itemRect(index);
        rect.width -= this.textPadding();
        this.changePaintOpacity(this.isEnabled(skill));
        this.drawItemName(skill, rect.x, rect.y, rect.width - costWidth);
        this.drawSkillCost(skill, rect.x, rect.y, rect.width);
        this.changePaintOpacity(1);
    }
};

Window_SkillList.prototype.costWidth = function() {
    return this.textWidth('000');
};

Window_SkillList.prototype.drawSkillCost = function(skill, x, y, width) {
    if (this._actor.skillTpCost(skill) > 0) {
        this.changeTextColor(this.tpCostColor());
        this.drawText(this._actor.skillTpCost(skill), x, y, width, 'right');
    } else if (this._actor.skillMpCost(skill) > 0) {
        this.changeTextColor(this.mpCostColor());
        this.drawText(this._actor.skillMpCost(skill), x, y, width, 'right');
    }
};

Window_SkillList.prototype.updateHelp = function() {
    this.setHelpWindowItem(this.item());
};

Window_SkillList.prototype.refresh = function() {
    this.makeItemList();
    this.createContents();
    this.drawAllItems();
};

Tomara que ajude :)
 
Editei por que já consegui o que queria. Mais uma vez obrigado Daniel.
Algum moderador poderia trancar o tópico?

A quem interessar, eu consegui adicionar uma nova lista usando o comando:

Código:
Window_ActorCommand.prototype.addEspecialCommand = function() {
    var skillTypes = this._actor.addedSkillTypes();
    var name = $dataSystem.skillTypes[2];
    this.addCommand(name, 'especial', true, 2);
};

Vale lembrar que ainda deve adicionar no Window_ActorCommand.prototype.makeCommandList, abaixo do if (this._actor) {
     
Código:
this.addEspecialCommand();

Observação: Ponha na ordem em que você quer que a lista apareça.
 
Depois no Scene_Battle.prototype.createActorCommandWindow, eu adicionei o comando abaixo, para quando abrir uma janela de comando de batalha, adicionar Handler, para poder selecionar a opção com a minha nova lista:

Código:
this._actorCommandWindow.setHandler('especial',  this.commandEspecial.bind(this));

Observação: Ponha na ordem em que você quer que a lista apareça.

Espero que num futuro isso possa ajudar alguém.

Até. o/
 
Que bom que conseguiu o que precisava, é tudo questão de fazer um "arranjo técnico" adequado, rs.

Se precisar de falar qualquer detalhe ou dúvida adicional relacionada, me fale ou a qualquer outro staff para que possamos reabrir o tópico.

[Tópico trancado a pedido do autor!]
 
Estado
Tópico fechado. Não é possível fazer postagens nela.
Voltar
Topo Inferior