🤔 Para Refletir :
""Não é sobre fazer o jogo perfeito, é sobre fazer o seu melhor.""
- Ricky O Bardo

Problema Script Slippery Tiles - Preciso de ajuste

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

Ludovic Masculino

Conde
Membro
Membro
Juntou-se
19 de Junho de 2015
Postagens
493
Bravecoins
24
Eu estou usando este magnifico script do Yanfly, ele funciona perfeitamente, não ha nada de errado.
Ele faz com que determinando um numero de terreno, este tile force o jogador a se mover escorregando até parar em um bloqueio como um lugar não passável ou um evento.
No entanto percebi uma coisa, digamos que eu crie um evento de bloqueio que ao interagir esse evento desaparece liberando o caminho. Infelizmente o script faz o jogador executar a trajetória imediatamente após finalizar o evento bloqueio. eu gostaria que ao ser barrado por um bloqueio que ele realmente pare até receber um comando para mover de novo senão não poderei realizar um puzzle que estou fazendo.

um exemplo disso é esse jogo de flash browser, entre na fase cujo password é: gac721
http://www.clickjogos.com.br/jogos/orbox-b/

O script:
Código:
#==============================================================================
# 
# ? Yanfly Engine Ace - Slippery Tiles v1.00
# -- Last Updated: 2011.12.03
# -- Level: Normal
# -- Requires: n/a
# 
#==============================================================================
$imported = {} if $imported.nil?
$imported["YEA-SlipperyTiles"] = true
#==============================================================================
# ? Updates
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 2011.12.03 - Started Script and Finished.
# 
#==============================================================================
# ? Introduction
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Want slippery tiles without needing to make hundreds of events? Now you can!
# This script binds slippery tile properties to individual tiles through usage
# of notetags and terrain tags.
# 
#==============================================================================
# ? Instructions
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# To install this script, open up your script editor and copy/paste this script
# to an open slot below ? Materials/?? but above ? Main. Remember to save.
# 
# -----------------------------------------------------------------------------
# Tileset Notetags - These notetags go in the tileset notebox in the database.
# -----------------------------------------------------------------------------
# <slippery: x>
# <slippery: x, x>
# Sets the tiles marked with terrain tag x to be slippery for that particular
# tileset. When the player walks over a slippery terrain, the player will keep
# moving forward until stopped by an object or until the player lands on ground
# without slippery properties.
# 
#==============================================================================
# ? Compatibility
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# This script is made strictly for RPG Maker VX Ace. It is highly unlikely that
# it will run with RPG Maker VX without adjusting.
# 
#==============================================================================
module YEA
  module SLIPPERY_TILES
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # - Sliding Animation -
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # Set what sliding frame you want characters to use when they're on
    # slippery tiles. Standing frame is 1.
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    SLIDE_FRAME = 1
  end # SLIPPERY_TILES
end # YEA
#==============================================================================
# ? Editting anything past this point may potentially result in causing
# computer damage, incontinence, explosion of user's head, coma, death, and/or
# halitosis so edit at your own risk.
#==============================================================================
module YEA
  module REGEXP
  module TILESET
    SLIPPERY = /<(?:SLIPPERY|slippery tile):[ ]*(\d+(?:\s*,\s*\d+)*)>/i
  end # TILESET
  end # REGEXP
end # YEA
#==============================================================================
# ? DataManager
#==============================================================================
module DataManager
  #--------------------------------------------------------------------------
  # alias method: load_database
  #--------------------------------------------------------------------------
  class <<self; alias load_database_st load_database; end
  def self.load_database
    load_database_st
    load_notetags_st
  end
  #--------------------------------------------------------------------------
  # new method: load_notetags_st
  #--------------------------------------------------------------------------
  def self.load_notetags_st
    groups = [$data_tilesets]
    for group in groups
      for obj in group
        next if obj.nil?
        obj.load_notetags_st
      end
    end
  end
end # DataManager
#==============================================================================
# ? RPG::Tileset
#==============================================================================
class RPG::Tileset
  #--------------------------------------------------------------------------
  # public instance variables
  #--------------------------------------------------------------------------
  attr_accessor :slippery
  #--------------------------------------------------------------------------
  # common cache: load_notetags_st
  #--------------------------------------------------------------------------
  def load_notetags_st
    @slippery = []
    #---
    self.note.split(/[\r\n]+/).each { |line|
      case line
      #---
      when YEA::REGEXP::TILESET::SLIPPERY
        $1.scan(/\d+/).each { |num| 
        @slippery.push(num.to_i) if num.to_i > 0 }
      #---
      end
    } # self.note.split
    #---
  end
end # RPG::Tileset
#==============================================================================
# ? Game_Map
#==============================================================================
class Game_Map
  #--------------------------------------------------------------------------
  # new method: slippery_floor?
  #--------------------------------------------------------------------------
  def slippery_floor?(dx, dy)
    return (valid?(dx, dy) && slippery_tag?(dx, dy))
  end
  #--------------------------------------------------------------------------
  # new method: slippery_tag?
  #--------------------------------------------------------------------------
  def slippery_tag?(dx, dy)
    return tileset.slippery.include?(terrain_tag(dx, dy))
  end
end # Game_Map
#==============================================================================
# ? Game_CharacterBase
#==============================================================================
class Game_CharacterBase
  #--------------------------------------------------------------------------
  # new method: on_slippery_floor?
  #--------------------------------------------------------------------------
  def on_slippery_floor?; $game_map.slippery_floor?(@x, @y); end
  #--------------------------------------------------------------------------
  # new method: slippery_pose?
  #--------------------------------------------------------------------------
  def slippery_pose?
    return false unless on_slippery_floor?
    return false if @step_anime
    return true
  end
end # Game_CharacterBase
#==============================================================================
# ? Game_Player
#==============================================================================
class Game_Player < Game_Character
  #--------------------------------------------------------------------------
  # alias method: dash?
  #--------------------------------------------------------------------------
  alias game_player_dash_st dash?
  def dash?
    return false if on_slippery_floor?
    return game_player_dash_st
  end
  #--------------------------------------------------------------------------
  # alias method: update
  #--------------------------------------------------------------------------
  alias game_player_update_st update
  def update
    game_player_update_st
    update_slippery
  end
  #--------------------------------------------------------------------------
  # new method: update_slippery
  #--------------------------------------------------------------------------
  def update_slippery
    return if $game_map.interpreter.running?
    return unless on_slippery_floor?
    return if moving?
    move_straight(@direction)
  end
  #--------------------------------------------------------------------------
  # new method: pattern
  #--------------------------------------------------------------------------
  def pattern 
    return YEA::SLIPPERY_TILES::SLIDE_FRAME if slippery_pose?
    return @pattern
  end
end # Game_Player
#==============================================================================
# ? Game_Follower
#==============================================================================
class Game_Follower < Game_Character
  #--------------------------------------------------------------------------
  # new method: pattern
  #--------------------------------------------------------------------------
  def pattern 
    return YEA::SLIPPERY_TILES::SLIDE_FRAME if slippery_pose?
    return @pattern
  end
end # Game_Follower
#==============================================================================
#
 
Muito bom. Engraçado que eu escrevi um script para isso (e umas coisitas mais relacionadas) não faz muito tempo. Só alguns dias pra dizer a verdade. Por sinal ele tem esse mesmo "defeito". Vou consertar agora, hehe.

Ele funciona por Área, apesar de que também podia ser feito por tag de terreno, id de tile ou qualquer coisa. Depois penso em passar ele para Javascript.

Ele ainda não foi liberado pra ninguém (só uns amigos meus, já que fiz uma mini-demo como parte de um desafio de bolar um mini projeto nessa virada de ano) e ainda falta alguns ajustes, depois te passo, caso ache útil. Os scripts do Yanfly tem a mania de ter um monte de burocracia e notetags, então se quiser algo custom-made, pode pedir.
 
Pra dizer a verdade seria bom, o masked fez um otimo trabalho mas acabei descobrindo outra falha tipo:
Se vc errar e for parar fora dos limites de onde pode andar, eu coloquei para haver um transporte e reset do puzzle, mas quando teleporto o heroi já surge escorregando. Seria bom não ter isso. Mas como eu disse, já foi uma ajuda e tanto.
 
Ludovic comentou:
Pra dizer a verdade seria bom, o masked fez um otimo trabalho mas acabei descobrindo outra falha tipo:
Se vc errar e for parar fora dos limites de onde pode andar, eu coloquei para haver um transporte e reset do puzzle, mas quando teleporto o heroi já surge escorregando. Seria bom não ter isso. Mas como eu disse, já foi uma ajuda e tanto.

Não consegui reproduzir aqui, como exatamente está fazendo? :Ahn:
 
Masked comentou:
Ludovic comentou:
Pra dizer a verdade seria bom, o masked fez um otimo trabalho mas acabei descobrindo outra falha tipo:
Se vc errar e for parar fora dos limites de onde pode andar, eu coloquei para haver um transporte e reset do puzzle, mas quando teleporto o heroi já surge escorregando. Seria bom não ter isso. Mas como eu disse, já foi uma ajuda e tanto.

Não consegui reproduzir aqui, como exatamente está fazendo? :Ahn:

explicando melhor, em um local escorregadio, tente fazer um teletransporte para esse mesmo lugar. ao invés de ele ser teleportado parado no lugar se eu teleportar e definir por exemplo a direção left, ele já aparece escorregando para a esquerda.

Veja a imagem a seguir:
MhMaiOe.jpg


Tem região de nº 7 na qual coloquei um evento paralelo que caso o personagem vá para essa região haja um teletransporte (fade branco) para o local inicial resetando completamente o puzzle.
o unico problema é ele "estar movendo escorregando" quando ocorre o teleporte e já aparece no local inicial movendo sozinho.

mas não precisa quebrar a cabeça com isso, o que vc fez já foi suficiente o bastante para que o puzzle possa ser feito.
 
Vou estudar a modificação do Masked e aplicar o mesmo princípio nesse teleporte aí. Até sei onde que devo colocar o pedaço de código. Me dê um tempinho que eu te entrego isso, beleza?
 
Estado
Tópico fechado. Não é possível fazer postagens nela.
Voltar
Topo Inferior