//-----------------------------------------------------------------------------
// Xiglute Jump Ability
//-----------------------------------------------------------------------------
// For: RPG MAKER MV
// Xiglute_Jump.js
//-----------------------------------------------------------------------------
var Imported = Imported || {};
Imported.Xiglute_Jump = true;
var Xiglute = Xiglute || {}; // Xiglute's Objeto Principal
Xiglute.pCmd = Xiglute.pCmd || {}; // Plugin Command manager
Xiglute.JA = Xiglute.JA || {};
//-----------------------------------------------------------------------------
/*:
* @plugindesc Permite que o jogador salte pressionando um botão.
*
* @author Xiglute - Xiglute.com
*
* @param Key
* @desc Veja o arquivo de ajuda para as teclas disponíveis. Esta tecla também funcionará como tecla "cancelar"
* @default c
*
* @param Jump Distance
* @desc A distância de pulo padrão no jogo.
* @default 2
*
* @param Blocking Regions
* @desc IDs de região que bloqueiam pulos (não podem ser saltados) separados por vírgulas
* @default 255,254
*
* @param Jump Sound
* @desc Efeito sonoro usado quando o jogador salta usando o botão de pulo
* FileName,volume,pitch. (deixe em branco para sem som)
* @default Jump1, 80, 150
*
* @help
* Xiglute Jump
* ----------------------------------------------------------------------------
* JUMP KEY
* ----------------------------------------------------------------------------
* Este plugin usa principalmente controles padrão do RPG Maker MV para a tecla de pulo
* configurada. Também permite o uso de outras teclas do teclado, mas qualquer tecla que você escolha, eu aconselho você a testar se não está em conflito com outro controle.
* ----------------------------------------------------------------------------
* Possíveis chaves a serem usadas para a configuração "Key":
* tab
* enter // Não recomendado tecla já usada
* shift // Não recomendado tecla já usada
* ctrl
* alt
* space // Não recomendado tecla já usada
* 0-9
* a-z // Q,W,Z,X não são recomendados pois já s]ao usadas
* semi-colon
* comma
* period
* single quote
* pageup
* pagedown
*
* Use one of the below key codes instead for compatibility with gamepads
* ok // A
* cancel // B
* shift // X
* menu // Y
* pageup // LB
* pagedown // RB
* up // D-pad up
* down // D-pad down
* left // D-pad left
* right // D-pad right
*
* ----------------------------------------------------------------------------
* EVENT COMMENT
* ----------------------------------------------------------------------------
* Um evento pode ser usado para controlar onde o jogador pode e não pode pular. E se
* o primeiro comando de evento da página possuir um comentário com:
*
* Então o jogador não pode saltar sobre ele. Mude a página do evento para uma sem
* este comentário e, em seguida, o jogador pode saltar sobre ele.
* ----------------------------------------------------------------------------
* REGIONS
* ----------------------------------------------------------------------------
* IDs de região podem ser definidos nas configurações. O jogador não pode pular sobre
* estas regiões. Separe vários IDs de região com vírgulas.
* ----------------------------------------------------------------------------
* PLUGIN COMMANDS
* ----------------------------------------------------------------------------
* JUMPACTION STATUS // STATUS pode ser TRUE ou FALSE para ativar/desativar
* // a tecla de pulo do jogador.
* Example:
* JUMPACTION FALSE // Desabilita a tecla de pulo do jogador
* JUMPACTION TRUE // Ativa novamente
* ----------------------------------------------------------------------------
*/
//-----------------------------------------------------------------------------
// CODE
//-----------------------------------------------------------------------------
(function() {
if (!Xiglute.aliased) {
var Xiglute_Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
if (Xiglute.pCmd[command]) {
Xiglute.pCmd[command](args);
return;
};
Xiglute_Game_Interpreter_pluginCommand.call(this, command, args);
};
Xiglute.aliased = true; // Não mantenha aliasing para outros scripts Xiglute.
};
// Direto para o Objeto Plugin
Xiglute.pCmd.JUMPACTION = function(arguments) {
Xiglute.JA.btnStatus(arguments[0]);
};
// Fim
Xiglute.JA.key = PluginManager.parameters('Xiglute_Jump')["Key"].toLowerCase();
//Xiglute.JA.cmdTxt = PluginManager.parameters('Xiglute_Jump')["Option Command"];
Xiglute.JA.jDist = Number(PluginManager.parameters('Xiglute_Jump')["Jump Distance"]);
Xiglute.JA.regions = function () {
var arr = PluginManager.parameters('Xiglute_Jump')["Blocking Regions"].split(",");
for (i = 0;i < arr.length;i++) {
arr
= Number(arr);
};
return arr;
}();
Xiglute.JA.Se = function() {
var arr = PluginManager.parameters('Xiglute_Jump')["Jump Sound"].split(",");
var obj = {name: arr[0],pan: 0,pitch: Number(arr[2]),volume: Number(arr[1])};
return obj;
}();
Xiglute.JA.btnStatus = function(status) {
$gameSystem.jumpBtnDisable = status === "FALSE" ? true : false;
};
// Potential keys user can add:
var txt_ids = {
"tab":9,"enter":13,"shift":16,"ctrl":17,"alt":18,"space":32,"0":48,"1":49,"2":50,"3":51,"4":52,"5":53,"6":54,
"7":55,"8":56,"9":57,"a":65,"b":66,"c":67,"d":68,"e":69,"f":70,"g":71,"h":72,"i":73,"j":74,"k":75,"l":76,"m":77,
"n":78,"o":79,"p":80,"q":81,"r":82,"s":83,"t":84,"u":85,"v":86,"w":87,"x":88,"y":89,"z":90,"semi-colon":186,
"comma":188,"period":190,"single quote":222,
};
// Adicionar tecla para 'pular'
Input.keyMapper[txt_ids[Xiglute.JA.key]] = 'jump';
// Xiglute Jump desativa o comando cancelar e não chama menu para pular
Input.isJumpTriggered = function(keyName) {
return this._latestButton === keyName && this._pressedTime === 0;
};
var Xiglute_Game_Player_moveByInput = Game_Player.prototype.moveByInput;
Game_Player.prototype.moveByInput = function() {
if (this.isJumping()) return;
if (this._priorityType == 1.5) this._priorityType = 1;
if (this.canMove() && Input.isJumpTriggered('jump')) {
if (this.isNormal && !$gameSystem.jumpBtnDisable) this.do_jump();
};
Xiglute_Game_Player_moveByInput.call(this);
};
Game_Player.prototype.do_jump = function() {
var jdis = Xiglute.JA.jumpDistanceXY();
if (jdis.y !== 0) this._priorityType = 1.5;
AudioManager.playSe(Xiglute.JA.Se);
this.jump(jdis.x, jdis.y);
//var dis = Math.abs(jdis.x) + Math.abs(jdis.y);
$gameParty._steps += 1; //dis;
};
Xiglute.JA.jumpMax = function(dir,dis) {
var m = {x: 0, y:0};
var x = $gamePlayer.x
var y = $gamePlayer.y
switch (dir) {
case 2:
m.y = dis;
for (var i = 0;i < dis;i++) {if (Xiglute.JA.checkBlock(x, y + i + 1)) {m.y = i;break;}};
break;
case 4:
m.x = dis;
for (var i = 0;i < dis;i++) {if (Xiglute.JA.checkBlock(x - i - 1, y)) {m.x = i;break;}};
break;
case 6:
m.x = dis;
for (var i = 0;i < dis;i++) {if (Xiglute.JA.checkBlock(x + i + 1, y)) {m.x = i;break;}};
break;
case 8:
m.y = dis;
for (var i = 0;i < dis;i++) {if (Xiglute.JA.checkBlock(x, y - i - 1)) {m.y = i;break;}};
break;
};
return m;
};
Xiglute.JA.checkBlock = function(x,y) {
return Xiglute.JA.regions.contains($gameMap.regionId(x,y)) || Xiglute.JA.stopperEvent(x,y);
};
Xiglute.JA.stopperEvent = function(x,y) {
var block = false;
var events = $gameMap.eventsXy(x,y);
for (var i = 0;i <= events.length;i++) {
if (events
&& events.page()) {
if (events.page().list[0].code === 108 && events.page().list[0].parameters[0] === "") {
block = true;
break;
};
};
};
return block;
};
Xiglute.JA.canJump = function(x,y,d) {
if (x < 0 || x > $gameMap.width() || y < 0 || y > $gameMap.height()) {
return false;
};
if (Xiglute.JA.eventThere(x,y)) {
return false;
} else {
return $gameMap.isPassable(x,y,d);
};
};
Xiglute.JA.eventThere = function(x,y) {
var events = $gameMap.eventsXyNt(x,y);
var eventThere = false;
for (var i = 0; i < events.length; i++) {
// If event is there, not passable and not lower
if (events
._priorityType === 1 && !events._through) {
// Can jump on if no event blocking. Blocking events have priority
eventThere = true;
} else {
// Can not jump on
return false;
};
};
return eventThere;
};
Xiglute.JA.getDistance = function() {
// Para adicionar modificadores de distância do pulo
return Xiglute.JA.jDist;
};
Xiglute.JA.jumpDistanceXY = function() {
var jump = {x: 0, y:0}; // x,y
var can_jump = true; // init true
var dis = Xiglute.JA.getDistance(); // obter distância do pulo do jogador
var dir = $gamePlayer.direction();
var px = $gamePlayer.x;
var py = $gamePlayer.y;
var maxdis = Xiglute.JA.jumpMax(dir,dis); // Máximo x, y da região do bloco não pulavel
var realdis = 0;
switch (dir) {
case 2: // DOWN
for (var i = 0;i < maxdis.y;i++) {
if (Xiglute.JA.canJump(px, py + maxdis.y - i,dir)) {
realdis = maxdis.y - i;
break;
};
};
jump.y = realdis;
break;
case 8: // UP
for (var i = 0;i < maxdis.y;i++) {
if (Xiglute.JA.canJump(px, py - maxdis.y + i,dir)) {
realdis = maxdis.y - i;
break;
};
};
jump.y = -realdis;
break;
case 4: // LEFT
for (var i = 0;i < maxdis.x;i++) {
if (Xiglute.JA.canJump(px - maxdis.x + i, py,dir)) {
realdis = maxdis.x - i;
break;
};
};
jump.x = -realdis;
break;
case 6: // RIGHT
for (var i = 0;i < maxdis.x;i++) {
if (Xiglute.JA.canJump(px + maxdis.x - i, py,dir)) {
realdis = maxdis.x - i;
break;
};
};
jump.x = realdis;
break;
};
return jump;
};
})();
Este post foi editado por Oliveira Dario em 6 de julho de 2019 15:19:20 ART"