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

[AJUDA]Chamada de Script!

Iniciado por Aandel, 03/03/2019 às 01:27

03/03/2019 às 01:27 Última edição: 06/03/2019 às 08:47 por King Gerar
 :coffee:
Hi galera!
Teria algum código de script ou plugin ou uma formula de dano que verifique se um Tipo de Equipamento, no meu caso o Escudo, estaria equipado em determinado Personagem!
O que pretendo é que determinada Habilidade só possa ser usada caso esse tipo de equipamento esteja equipado no personagem, como ainda não consegui nenhum plugin que dita uma condição sobre as armaduras, estou tentando ver se é possível usando códigos dentro da formula de danos.
Thanks pela ajuda!!! :ok:

Tenho uma formula base da qual estou tentando extrair algo e ver se consigo estabelecer o que pretendo, se alguém puder me dar um help eu agradeço muito por demais!

var a = $gameActors.actor(1).equips()[1]; a ? a.etypeId == 2 : false

03/03/2019 às 11:11 #1 Última edição: 03/03/2019 às 11:12 por King Gerar
Acho que através da fórmula tu não vai conseguir o que quer não, pois a fórmula só têm impacto na aplicação do dano, sendo assim, quando verificar se o personagem possui ou não determinado equipamento a habilidade já terá sido usada.

Bom seria verificar se o personagem possui o equipamento requerido pela habilidade antes de usá-la, pois, se negativo, a habilidade não ficaria disponível. Fiz um plugin pra isso, veja se atende.

Opa King! Agradeço muito pelo plugin!  :ded: Porém como ele apenas bloqueia o acesso a Habilidade e não a remove completamente, queria ver se tem como adicionar uma mensagem caso o equipamento necessário não estiver equipado?

Tentei add um Evento Comum na Habilidade que chama a mensagem com uma Condição na vá esperança de que ela aparecesse, mas constatei o que vc já havia dito, a Skill precisa ser usada para chamar o dano e consequentemente  seus Efeitos, no caso, a Mensagem.

O que tentei usar nas Condições do Evento Comum que a Skill deveria chamar foi exatamente o mesmo código que descrevi na outra mensagem:
var a = $gameActors.actor(1).equips()[1]; a ? a.etypeId == 2 : false


E no Evento Comum coloquei essa condição para mostrar a mensagem:
♦Se: Script: var a = $gameActors.actor(1).equips()[1]; a ? a.etypeId == 2 : false
 ♦
 :Se Não
 ♦Texto:
 :        : Melhor equipar um Escudo!
 ♦
 :Fim
♦                   





Aí eu acho que já seria a questão de tu informar o jogador que a habilidade necessita do escudo, seja na descrição dela ou mesmo no momento de sua aquisição. E deixar o jogador a par também que existem habilidades sem esse requerimento e habilidades que têm esse requerimento.

Colocar a mensagem é um pouco mais difícil, tem que criar ou utilizar alguma das janelas durante a batalha e mexer em muito mais coisa do que essa pequena porção que modifiquei para fazer esse script. Agora, eu acho que consigo fazer com que a habilidade não seja mostrada caso tu não tenha o equipamento. Te atende assim?

03/03/2019 às 22:38 #4 Última edição: 03/03/2019 às 22:55 por King Gerar
Acho que vale mais a pena mesmo informar o Jogador sobre  requisitos do que add mais coisas  ao plugin!

Porém, apesar do plugin funcionar perfeitamente em um projeto limpo, infelizmente ao testar no meu Projeto cheios de plugins e "frescurites" aqui, seu plugin e o Equip Slots Core do Himework, se mostraram incompatíveis. Creio eu que o plugin Equip Slots Core por modificar ou mesmo anular a janela tradicional de cada Personagem ter seus Equipamentos, o plugin Skill Equip Requirement não consegue localizar o Tipo de Armadura que os personagens estão equipados.

Segue o Plugin Custom Equip! Se vc tiver um tempo (sei como é corrido essa vida :uu:), e verificar o motivo da incompatibilidade eu agradeço muito, pois ambos plugins são necessários aqui. :ok:

/*:
-------------------------------------------------------------------------------
@title Equip Slots Core
@author Hime --> HimeWorks (http://himeworks.com)
@date Apr 15, 2016
@version 1.5
@filename HIME_EquipSlotsCore.js
@url http://himeworks.com/2015/11/equip-slots-core/

If you have any questions or concerns, you can contact me at any of
the following sites:

Main Website: http://himeworks.com
Facebook: https://www.facebook.com/himeworkscom/
Twitter: https://twitter.com/HimeWorks
Youtube: https://www.youtube.com/c/HimeWorks
Tumblr: http://himeworks.tumblr.com/
-------------------------------------------------------------------------------
@plugindesc v1.5 -  Fornece ferramentas para configurar slots de equipar personalizados
para cada ator individualmente.
@help 
-------------------------------------------------------------------------------
== Description ==

Video: https://www.youtube.com/watch?v=fXcA0IdPsPg

Por padrão, o RPG Maker oferece 5 tipos de equipamentos para trabalhar com:

  Weapon
  Shield
  Head
  Body
  Accessory
  
Você também tem a capacidade de adicionar e modificar slots de equipamento diretamente
o banco de dados.

No entanto, um problema que você pode notar é que todo ator terá
aqueles equipam slots, mesmo que eles não possam usar nenhum dos equipamentos que você
projetado para esses slots.

Outro problema é que você não pode adicionar várias cópias do mesmo slot para
um ator: eles só podem ter um de cada. Quer usar dois acessórios?
Não pode ser feito.

Este plugin resolve esse problema. Ele fornece maneiras para você personalizar
os atores equipam os slots, permitindo que você escolha exatamente quais slots
eles terão no jogo.

== Termos de Uso ==

- Gratuito para uso em projetos não comerciais com créditos
- Entre em contato para uso comercial

== Change Log ==

1.5 - Apr 15, 2016
 * added support for multiple equip types for equips.
 * standardized the way to check whether an equip slot can hold an item
1.4 - Apr 11, 2016
 * Change the way etype ID is checked
 * Fixed "Change Equipment" command
1.3 - Mar 14, 2016
 * Added support for adding and removing equip slots using script calls
1.2 - Nov 20, 2015
 * updated to support enemy equips
1.1 - Nov 18, 2015
 * updated to support Yanfly's EquipCore
1.0 - Nov 12, 2015
 * initial release

== Usage ==

-- Adicionando slots de equipar --

Primeiro, se você estiver usando este plugin, a caixa padrão "Initial equipment"
não será mais usado. Em vez disso, você gerenciará todos os slots de equip equip
usando tags de nota.

Para adicionar um slot equip, use a seguinte tag de nota:

  <equip slot: ETYPE>
  
O ETYPE, que é a abreviação de "equip type", é um dos tipos de equipamentos
que você configurou para o seu projeto. Você pode ver isso na guia Tipos.

Você pode escrever o ID do etipo ou escrever o nome exato
do tipo. Por exemplo, Weapon é equipar tipo 1, então você pode escrever

  <equip slot: 1>
  <equip slot: Weapon>
  
Dependendo de suas preferências Eu recomendaria escrever o texto completo
nome para que fique mais claro, mas se você mudar os nomes dos tipos de equipamento
você precisará lembrar de atualizar essas tags de nota.

Se você quiser adicionar mais slots equip, basta adicionar mais tags de notas.
Quer 3 armas e 2 anéis, assumindo que eles estão no banco de dados?

  <equip slot: Weapon>
  <equip slot: Weapon>
  <equip slot: Weapon>
  <equip slot: Ring>
  <equip slot: Ring>

-- Especificando o equipamento inicial --

Como a caixa Initial Equipment não é mais usada, você precisará
encontre outra maneira de especificá-los.

O equip equipar a nota da etiqueta de suporte inicial equipa, usando algo chamado
"Código do Item", e está escrito assim:

  <equip slot: ETYPE ITEMCODE>

Um código de item é uma forma rápida de referenciar uma arma, armadura ou
item. Eles se parecem com isso:

  a1 - armor 1
  w3 - weapon 3
  i5 - item 5
  
Então, por exemplo, se você quer que seu ator tenha um slot de arma com
arma 4 do banco de dados como o seu primeiro equipar, use a tag de nota

  <equip slot: Weapon w4>
  
-- Adicionando e Removendo Equip Slots Dinamicamente --

Você pode querer adicionar ou remover equip slots durante o jogo.
Para adicionar um slot equip, use a chamada de script

ACTOR.addEquipSlot(ETYPE)

Onde o ACTOR é uma referência a um objeto Game_Actor, e o ETYPE é
o nome ou ID do slot equip que você deseja adicionar.

Por exemplo, você pode escrever

  $gameActors.actor(2).addEquipSlot(4)
  $gameActors.actor(2).addEquipSlot("Accessory")
  
Para dar ao ator 2 um slot extra equip do tipo 4 e "Acessório"

A remoção de slots é feita usando uma chamada de script semelhante

   ACTOR.removeEquipSlot(ETYPE)
   
Por exemplo, se você quiser remover o slot equip que você adicionou antes, você pode
escrever

  $gameActors.actor(2).removeEquipSlot(4)
  $gameActors.actor(2).removeEquipSlot("Accessory")
   
Um slot equipar aleatório desse tipo será removido. Se o slot equip contiver
um item, o item não será equipado e retornará ao inventário.

Se não houver tal slot equip, nada acontecerá.

-- Vários tipos de equipamentos --

Por padrão, todos os equipamentos possuem um tipo de equipamento.
Você pode atribuir tipos de equipamentos adicionais usando tags de notas.

Com vários tipos de equipamentos, você pode colocar o mesmo equipamento em vários slots
da sua escolha.

Para atribuir tipos de equipamentos adicionais, armaduras de notas ou armas com

  <equip type: TYPE />
  
Você pode atribuir quantos tipos de equipamentos desejar.
 
-- Cenas Personalizadas --

Este plugin fornece uma funcionalidade de slot equipável. O objetivo
é ser capaz de usá-lo com * qualquer * equip scene, se é o
cena padrão ou uma cena personalizada.

-------------------------------------------------------------------------------
 */ 
var Imported = Imported || {} ;
var TH = TH || {};
Imported.EquipSlotsCore = 1;
TH.EquipSlotsCore = TH.EquipSlotsCore || {};

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

(function ($) {

  $.Regex = /<equip[-_ ]slot:\s+(\w+)(?:\s+(\w)(\d+))?>/img  
  $.EtypeRegex = /<equip[-_ ]type:\s*(.+?)\s*\/>/img

  $.etypeIds = function(obj) {
    if (obj.etypeIds === undefined) {
      obj.etypeIds = [obj.etypeId];
      var res;
      while (res = $.EtypeRegex.exec(obj.note)) {
      
        obj.etypeIds.push($.getEtypeId(res[1]));
      }
    }
    return obj.etypeIds;
  } 
  
  $.etypeNameToId = function(etypeName) {
    if (!$.etypeMap) {
      $.etypeMap = {}
      for (var i = 1; i < $dataSystem.equipTypes.length; i++) {
        var name = $dataSystem.equipTypes[i].toUpperCase();
        $.etypeMap[name] = i;      
      }
    }   
    return $.etypeMap[etypeName.toUpperCase()];
  }

  $.getEtypeId = function(etypeId) {
    if (isNaN(etypeId)) {
      etypeId = $.etypeNameToId(etypeId);
    }
    else {
      etypeId = Math.floor(etypeId)
    }   
    return etypeId;
  };

  Game_EquipSlot.prototype.initialize = function() {
    this._etypeId = 1;
    this._item = new Game_Item();
  };

  Game_EquipSlot.prototype.setEtypeId = function(etypeID) {
    this._etypeId = etypeID;
  };

  Game_EquipSlot.prototype.etypeId = function() {
    return this._etypeId;
  };

  Game_EquipSlot.prototype.setObject = function(item) {
    this._item.setObject(item);
  };

  Game_EquipSlot.prototype.object = function() {
    return this._item.object();
  };

  Game_EquipSlot.prototype.setEquip = function(isWeapon, item) {
    this._item.setEquip(isWeapon, item);
  };
  
  /* Support for multiple equip types */
  Game_EquipSlot.prototype.canEquip = function(item) {
    ids = $.etypeIds(item);
    return ids.contains(this._etypeId);
  }
  
  Game_EquipSlot.prototype.isEtypeId = function(id) {
    return this._etypeId === id;
  };
  
  /***************************************************************************/
  
  var TH_EquipSlotsCore_GameBattler_initMembers = Game_Battler.prototype.initMembers;
  Game_Battler.prototype.initMembers = function() {
    this._equips = [];
    TH_EquipSlotsCore_GameBattler_initMembers.call(this);    
  };
  
  /* Returns equip slot objects */
  Game_Battler.prototype.equipSlotList = function() {
    return this._equips;
  };
    
  /* Returns all of the equip slot types for the battler
   * Purely for backwards compatibility
   */
  Game_Battler.prototype.equipSlots = function() {
    var slots = this._equips;
    var ids = [];
    for (var i = 0; i < slots.length; i++) {
      ids.push(slots[i].etypeId());
    }
    return ids;
  };
  
  Game_Battler.prototype.equips = function() {
    return this._equips.map(function(item) {
        return item.object();
    });
  };
    
  Game_Battler.prototype.initEquips = function(equips) {    
    var baseSlots = this.baseSlots();
    if (baseSlots.length > 0) {
      var maxSlots = baseSlots.length;
      this._equips = [];
      for (var i = 0; i < maxSlots; i++) {
        this._equips[i] = JsonEx.makeDeepCopy(baseSlots[i]);      
      }
      this.releaseUnequippableItems(true);
      this.refresh();
    }
  };
  
  /* Base equip slots for the battler */
  Game_Battler.prototype.baseSlots = function() {
    return [];
  }  
  
  Game_Battler.prototype.getBaseSlots = function(battler) {
    if (!battler.baseEquipSlots) {      
      battler.baseEquipSlots = [];
      var res;
      while (res = $.Regex.exec(battler.note)) {
        var equipSlot = new Game_EquipSlot();
        var etypeId = res[1];
        var itemType = res[2];
        var itemID = res[3];
              
        // /* Not a number. Assume it's the name of an equip type */
        etypeId = $.getEtypeId(etypeId);
        
        equipSlot.setEtypeId(etypeId);        
        if (itemType) {
          equipSlot.setEquip(itemType.toLowerCase() === "w", Math.floor(itemID));
        }
        
        battler.baseEquipSlots.push(equipSlot);
      }
    }
    return battler.baseEquipSlots;
  };
  
  Game_Battler.prototype.weapons = function() {
    return this.equips().filter(function(item) {
      return item && DataManager.isWeapon(item);
    });
  };

  Game_Battler.prototype.armors = function() {
    return this.equips().filter(function(item) {
      return item && DataManager.isArmor(item);
    });
  };
  
  /* Finds the first equip slot with the given equip type */
  Game_Battler.prototype.getSlotByEtypeId = function(etypeId) {
    var slots = this._equips;
    for (var i = 0; i < slots.length; i++) {
      if (slots[i].isEtypeId(etypeId)) {
        return i;
      }
    }
  };
  
  /* Overwrite. */
  Game_Battler.prototype.changeEquip = function(slotId, item) {
    if (this.tradeItemWithParty(item, this.equips()[slotId]) &&
            (!item || this.equipSlotList()[slotId].canEquip(item))) {
        this._equips[slotId].setObject(item);
        this.refresh();
    }
  };
  
  /* Ovewrite. We need to find a slot. Assumes 1 is the weapon type */
  Game_Battler.prototype.changeEquipById = function(etypeId, itemId) {
    var slotId = this.getSlotByEtypeId(etypeId);
    if (this.equipSlots()[slotId] === 1) {
        this.changeEquip(slotId, $dataWeapons[itemId]);
    } else {
        this.changeEquip(slotId, $dataArmors[itemId]);
    }
  };  
  
  /* Adds a new equip slot to the actor */
  Game_Battler.prototype.addEquipSlot = function(etypeId) {
    var equipSlot = new Game_EquipSlot();    
    etypeId = $.getEtypeId(etypeId);
    equipSlot.setEtypeId(etypeId);        
    this._equips.push(equipSlot);
  };
  
  /* Removes one instance of the specified equip slot. If an object
   * exists in that slot, the object is un-equipped.
   */
  Game_Battler.prototype.removeEquipSlot = function(etypeId) {
    etypeId = $.getEtypeId(etypeId);
    var slots = this._equips;
    for (var i = 0; i < slots.length; i++) {
      if (slots[i].isEtypeId(etypeId)) {
        this.tradeItemWithParty(null, slots[i].object());
        slots.splice(i, 1);
        break;
      }      
    };
  };

  /* Overwrite */
  Game_Battler.prototype.releaseUnequippableItems = function(forcing) {
    for (;;) {
      var slots = this.equipSlotList();
      var slotTypes = this.equipSlots();
      var equips = this.equips();
      var changed = false;
      for (var i = 0; i < equips.length; i++) {
        var item = equips[i];
        if (item && (!this.canEquip(item) || !slots[i].canEquip(item))) {
          if (!forcing) {
            this.tradeItemWithParty(null, item);
          }
          this._equips[i].setObject(null);
          changed = true;
        }
      }
      if (!changed) {
          break;
      }
    }
  };
  
  /* Overwrite */
  Game_Battler.prototype.bestEquipItem = function(slotId) {
    var slot = this.equipSlotList()[slotId];
    var etypeId = this.equipSlots()[slotId];
    var items = $gameParty.equipItems().filter(function(item) {
        return slot.canEquip(item) && this.canEquip(item);
    }, this);
    var bestItem = null;
    var bestPerformance = -1000;
    for (var i = 0; i < items.length; i++) {
        var performance = this.calcEquipItemPerformance(items[i]);
        if (performance > bestPerformance) {
            bestPerformance = performance;
            bestItem = items[i];
        }
    }
    return bestItem;
  };
  
  /***************************************************************************/
  
  /* Pulled up */
  var TH_GameActor_equipSlots = Game_Actor.prototype.equipSlots;
  Game_Actor.prototype.equipSlots = function() {
    return Game_Battler.prototype.equipSlots.call(this);    
  };
  
  /* Pulled up */
  Game_Actor.prototype.equips = function() {
    return Game_Battler.prototype.equips.call(this);
  };
  
  /* Pulled up */
  Game_Actor.prototype.weapons = function() {
    return Game_Battler.prototype.weapons.call(this);
  };

  /* Pulled up */
  Game_Actor.prototype.armors = function() {
    return Game_Battler.prototype.armors.call(this);
  };
  
  /* Pulled up */
  var TH_GameActor_initEquips = Game_Actor.prototype.initEquips;
  Game_Actor.prototype.initEquips = function(equips) {    
    Game_Battler.prototype.initEquips.call(this, equips);    
  };
  
  /* Pulled up */
  Game_Actor.prototype.changeEquipById = function(etypeId, itemId) {
    Game_Battler.prototype.changeEquipById.call(this, etypeId, itemId);
  };
  
  /* Pulled up */
  Game_Actor.prototype.changeEquip = function(slotId, item) {  
    Game_Battler.prototype.changeEquip.call(this, slotId, item);
  };  
  
  /* Pulled up */
  Game_Actor.prototype.releaseUnequippableItems = function(forcing) {
    Game_Battler.prototype.releaseUnequippableItems.call(this, forcing);
  };
  
  /* Pulled up */
  Game_Actor.prototype.bestEquipItem = function(slotId) {
    return Game_Battler.prototype.bestEquipItem.call(this, slotId);
  };
  
  /* By default, we check the actor for any equip slots */  
  Game_Actor.prototype.baseSlots = function() {
    var slots = Game_Battler.prototype.baseSlots.call(this);
    return slots.concat(this.getBaseSlots(this.actor()))
  };
    
  /***************************************************************************/
  
  /* Overwrite. Ask if the equip slot can hold the item */
  Window_EquipItem.prototype.includes = function(item) {
    if (item === null) {
        return true;
    }
    if (this._slotId < 0 || !this._actor.equipSlotList()[this._slotId].canEquip(item)) {
        return false;
    }
    return this._actor.canEquip(item);
  };
  
  /***************************************************************************/
  
})(TH.EquipSlotsCore);

Atualizei o código. Vê se funciona agora, é o mesmo link.

Citação de: King Gerar online 04/03/2019 às 08:43Atualizei o código. Vê se funciona agora, é o mesmo link.

:T.T: :*-*: :clap: :ok: :viiish:

Thaks :rei:! Funcionou como deveria!
Gostaria de pedir para fechar esse tópico junto com esse outro, https://centrorpg.com/index.php?topic=21977.0! Ambos são "farinha do mesmo saco"! :XD:

:lock: