Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Afiliados
Estadísticas
Tenemos 3773 miembros registrados.
El último usuario registrado es Selu64.

Nuestros miembros han publicado un total de 85868 mensajes en 12230 argumentos.

[RMXP/VX] Improved & Special Move Commands

Ver el tema anterior Ver el tema siguiente Ir abajo

[RMXP/VX] Improved & Special Move Commands

Mensaje por Wecoc el 2013-01-20, 21:00

Este script es de Woratana, dadle créditos a él yo solo lo pasé a XP pero casi todo va igual.
Este script incluye nuevas propiedades a añadir al Move Route. Para llamarlas, dentro del Move Route hay un botón de "Script" donde se podrá poner los códigos que pondré en azul más abajo.

Pero eso no es todo, el script también tiene:

- Una modificación del jump para que funcione como el de XP (solo en versión VX)
- Un nuevo collide_with_characters? que modifica la llamada hecha con Colisión (solo en versión VX)
- Un nuevo move_random que hace que el personaje cuando se mueve aleatoriamente sea solo hacia donde pueda.

Aquí los códigos nuevos que dije, para las versiones

move_toward_pos(x,y) --> mover hacia la posición x,y
move_away_from_pos(x,y) --> huir de la posición x,y
move_toward_event(id) --> seguir a evento
move_away_from_event(id) --> huir de evento
turn_toward_pos(x,y) --> mirar hacia la posición x,y
turn_away_from_pos(x,y) --> mirar al contrario de la posición x,y
turn_toward_event(id) --> mirar hacia el evento
turn_away_from_event(id) --> mirar al contrario del evento

VERSIÓN PARA XP
Código:
#===============================================================
# ● [XP] ◦ Improved & Special Move Commands ◦ □
#--------------------------------------------------------------
# â—¦ by Woratana [woratana@hotmail.com]
# â—¦ Released on: 20/03/2008
# â—¦ Version: 1.0
#--------------------------------------------------------------
=begin
â–¡=====â–¡=====â–¡=====â–¡=====â–¡=====â–¡=====â–¡=====â–¡=====â–¡=====â–¡
                  + COMMANDS LIST +
â–¡=====â–¡=====â–¡=====â–¡=====â–¡=====â–¡=====â–¡=====â–¡=====â–¡=====â–¡
################################
● IMPROVED MOVE COMMANDS ●

â–¡ SAFE JUMP:
Don't Jump if its destination is OUT OF THE SCREEN (or) NOT PASSABLE.
(Old jump will not check before jump)

â–¡ IMPROVED RANDOM MOVE
Find the movable direction before move.
(Old random move will just skip to move in that frame, if its destination is not passable.)

â–¡ IMPROVED COLLIDE_WITH_CHARACTERS CHECK (ONLY VX)
'Same as Characters' events are able to walk on other 'Below Characters' events.

● Note: If you don't want one of this improved command, just delete its part.
(I put all of their command name above their script part)
################################

################################
● SPECIAL(NEW) MOVE COMMANDS ●

++[HOW TO USE]++
● Open 'Move Route' window, (or event command 'Set Move Route')
Click 'Script...' and type the move command you want...

â–¡ MOVE TOWARD POSITION X/Y
move_toward_pos(x,y)

â–¡ MOVE AWAY FROM POSITION X/Y
move_away_from_pos(x,y)

â–¡ MOVE TOWARD EVENT ID
move_toward_event(id)

â–¡ MOVE AWAY FROM EVENT ID
move_away_from_event(id)

â–¡ TURN TOWARD POSITION X/Y
turn_toward_pos(x,y)

â–¡ TURN AWAY FROM POSITION X/Y
turn_away_from_pos(x,y)

â–¡ TURN TOWARD EVENT ID
turn_toward_event(id)

â–¡ TURN AWAY FROM EVENT ID
turn_away_from_event(id)
################################
=end

class Game_Character
  ##################################################################
  # IMPROVED MOVE COMMANDS
  ##################################################################
  #-------------------------------------------------------------
  # SAFE JUMP
  #-------------------------------------------------------------
  def jump(x_plus, y_plus)
    if x_plus.abs > y_plus.abs            # 横の距離のほうが長い
      x_plus < 0 ? turn_left : turn_right
    elsif x_plus.abs > y_plus.abs        # 縦の距離のほうが長い
      y_plus < 0 ? turn_up : turn_down
    end
    new_x = @x + x_plus
    new_y = @y + y_plus
    if (x_plus == 0 and y_plus == 0) or passable?(new_x, new_y)
      @x += x_plus
      @y += y_plus
      distance = Math.sqrt(x_plus * x_plus + y_plus * y_plus).round
      @jump_peak = 10 + distance - @move_speed
      @jump_count = @jump_peak * 2
      @stop_count = 0
      straighten
    end
  end
 
  #-------------------------------------------------------------
  # IMPROVED RANDOM MOVE
  #-------------------------------------------------------------
  def move_random
    safe = false
    checked = []
    while safe == false
      break if checked.include?(0) and checked.include?(1) and
      checked.include?(2) and checked.include?(3)
      case rand(4)
      when 0; return if checked.include?(0); checked.push 0
        if passable?(@x, @y, 2)
          safe = true; move_down(false)
        end
      when 1; return if checked.include?(1); checked.push 1
        if passable?(@x, @y, 4)
          safe = true; move_left(false)
        end
      when 2; return if checked.include?(2); checked.push 2
        if passable?(@x, @y, 6)
          safe = true; move_right(false)
        end
      when 3; return if checked.include?(3); checked.push 3
        if passable?(@x, @y, 8)
          safe = true; move_up(false)
        end
      end
    end
  end
 
#  #----------------------------------------------------------------------
#  # IMPROVED COLLIDE_WITH_CHARACTERS CHECK
#  #----------------------------------------------------------------------
#  def collide_with_characters?(x, y)
#    for event in $game_map.events_xy(x, y)          # Matches event position
#      unless event.through                          # Passage OFF?
#        return true if event.priority_type == 1    # Target is normal char
#      end
#    end
#    if @priority_type == 1                          # Self is normal char
#      return true if $game_player.pos_nt?(x, y)    # Matches player position
#      return true if $game_map.boat.pos_nt?(x, y)  # Matches boat position
#      return true if $game_map.ship.pos_nt?(x, y)  # Matches ship position
#    end
#    return false
#  end
 
  ##################################################################
  # SPECIAL(NEW) MOVE COMMANDS
  ##################################################################
  #--------------------------------------------------------------------------
  # * Move toward Position
  #--------------------------------------------------------------------------
  def move_toward_pos(x,y)
    sx = distance_x_from_pos(x)
    sy = distance_y_from_pos(y)
    if sx != 0 or sy != 0
      if sx.abs > sy.abs                  # Horizontal distance is longer
        sx > 0 ? move_left : move_right  # Prioritize left-right
        if @move_failed and sy != 0
          sy > 0 ? move_up : move_down
        end
      else                                # Vertical distance is longer
        sy > 0 ? move_up : move_down      # Prioritize up-down
        if @move_failed and sx != 0
          sx > 0 ? move_left : move_right
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Move away from Position
  #--------------------------------------------------------------------------
  def move_away_from_pos(x,y)
    sx = distance_x_from_pos(x)
    sy = distance_y_from_pos(y)
    if sx != 0 or sy != 0
      if sx.abs > sy.abs                  # Horizontal distance is longer
        sx > 0 ? move_right : move_left  # Prioritize left-right
        if @move_failed and sy != 0
          sy > 0 ? move_down : move_up
        end
      else                                # Vertical distance is longer
        sy > 0 ? move_down : move_up      # Prioritize up-down
        if @move_failed and sx != 0
          sx > 0 ? move_right : move_left
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Move toward Event
  #--------------------------------------------------------------------------
  def move_toward_event(id)
    move_toward_pos($game_map.events[id].x,$game_map.events[id].y)
  end
  #--------------------------------------------------------------------------
  # * Move away from Event
  #--------------------------------------------------------------------------
  def move_away_from_event(id)
    move_away_from_pos($game_map.events[id].x,$game_map.events[id].y)
  end
  #--------------------------------------------------------------------------
  # * Turn toward Position
  #--------------------------------------------------------------------------
  def turn_toward_pos(x,y)
    sx = distance_x_from_pos(x)
    sy = distance_y_from_pos(y)
    if sx.abs > sy.abs                    # Horizontal distance is longer
      sx > 0 ? turn_left : turn_right
    elsif sx.abs < sy.abs                # Vertical distance is longer
      sy > 0 ? turn_up : turn_down
    end
  end
  #--------------------------------------------------------------------------
  # * Turn away from Position
  #--------------------------------------------------------------------------
  def turn_away_from_pos(x,y)
    sx = distance_x_from_pos(x)
    sy = distance_y_from_pos(y)
    if sx.abs > sy.abs                    # Horizontal distance is longer
      sx > 0 ? turn_right : turn_left
    elsif sx.abs < sy.abs                # Vertical distance is longer
      sy > 0 ? turn_down : turn_up
    end
  end
  #--------------------------------------------------------------------------
  # * Turn toward Event
  #--------------------------------------------------------------------------
  def turn_toward_event(id)
    turn_toward_pos($game_map.events[id].x,$game_map.events[id].y)
  end
  #--------------------------------------------------------------------------
  # * Turn away from Event
  #--------------------------------------------------------------------------
  def turn_away_from_event(id)
    turn_away_from_pos($game_map.events[id].x,$game_map.events[id].y)
  end
  #--------------------------------------------------------------------------
  # * Calculate X Distance From Event
  #--------------------------------------------------------------------------
  def distance_x_from_pos(x)
    sx = @x - x
    return sx
  end
  #--------------------------------------------------------------------------
  # * Calculate Y Distance From Event
  #--------------------------------------------------------------------------
  def distance_y_from_pos(y)
    sy = @y - y
    return sy
  end
end

VERSIÓN PARA VX

Código:
#===============================================================
# ● [VX] ◦ Improved & Special Move Commands ◦ □
#--------------------------------------------------------------
# â—¦ by Woratana [woratana@hotmail.com]
# â—¦ Released on: 20/03/2008
# â—¦ Version: 1.0
#--------------------------------------------------------------
=begin
â–¡=====â–¡=====â–¡=====â–¡=====â–¡=====â–¡=====â–¡=====â–¡=====â–¡=====â–¡
                  + COMMANDS LIST +
â–¡=====â–¡=====â–¡=====â–¡=====â–¡=====â–¡=====â–¡=====â–¡=====â–¡=====â–¡
################################
● IMPROVED MOVE COMMANDS ●

â–¡ SAFE JUMP:
Don't Jump if its destination is OUT OF THE SCREEN (or) NOT PASSABLE.
(Old jump will not check before jump)

â–¡ IMPROVED RANDOM MOVE
Find the movable direction before move.
(Old random move will just skip to move in that frame, if its destination is not passable.)

â–¡ IMPROVED COLLIDE_WITH_CHARACTERS CHECK
'Same as Characters' events are able to walk on other 'Below Characters' events.

● Note: If you don't want one of this improved command, just delete its part.
(I put all of their command name above their script part)
################################

################################
● SPECIAL(NEW) MOVE COMMANDS ●

++[HOW TO USE]++
● Open 'Move Route' window, (or event command 'Set Move Route')
Click 'Script...' and type the move command you want...

â–¡ MOVE TOWARD POSITION X/Y
move_toward_pos(x,y)

â–¡ MOVE AWAY FROM POSITION X/Y
move_away_from_pos(x,y)

â–¡ MOVE TOWARD EVENT ID
move_toward_event(id)

â–¡ MOVE AWAY FROM EVENT ID
move_away_from_event(id)

â–¡ TURN TOWARD POSITION X/Y
turn_toward_pos(x,y)

â–¡ TURN AWAY FROM POSITION X/Y
turn_away_from_pos(x,y)

â–¡ TURN TOWARD EVENT ID
turn_toward_event(id)

â–¡ TURN AWAY FROM EVENT ID
turn_away_from_event(id)
################################
=end

class Game_Character
  ##################################################################
  # IMPROVED MOVE COMMANDS
  ##################################################################
  #-------------------------------------------------------------
  # SAFE JUMP
  #-------------------------------------------------------------
  def jump(x_plus, y_plus)
    if x_plus.abs > y_plus.abs            # 横の距離のほうが長い
      x_plus < 0 ? turn_left : turn_right
    elsif x_plus.abs > y_plus.abs        # 縦の距離のほうが長い
      y_plus < 0 ? turn_up : turn_down
    end
    new_x = @x + x_plus
    new_y = @y + y_plus
    if (x_plus == 0 and y_plus == 0) or passable?(new_x, new_y)
      @x += x_plus
      @y += y_plus
      distance = Math.sqrt(x_plus * x_plus + y_plus * y_plus).round
      @jump_peak = 10 + distance - @move_speed
      @jump_count = @jump_peak * 2
      @stop_count = 0
      straighten
    end
  end
 
  #-------------------------------------------------------------
  # IMPROVED RANDOM MOVE
  #-------------------------------------------------------------
  def move_random
    safe = false
    checked = []
    while safe == false
      break if checked.include?(0) and checked.include?(1) and
      checked.include?(2) and checked.include?(3)
      case rand(4)
      when 0; return if checked.include?(0); checked.push 0
        if passable?(@x, @y + 1)
          safe = true; move_down(false)
        end
      when 1; return if checked.include?(1); checked.push 1
        if passable?(@x - 1, @y)
          safe = true; move_left(false)
        end
      when 2; return if checked.include?(2); checked.push 2
        if passable?(@x + 1, @y)
          safe = true; move_right(false)
        end
      when 3; return if checked.include?(3); checked.push 3
        if passable?(@x - 1, @y)
          safe = true; move_up(false)
        end
      end
    end
  end
 
  #----------------------------------------------------------------------
  # IMPROVED COLLIDE_WITH_CHARACTERS CHECK
  #----------------------------------------------------------------------
  def collide_with_characters?(x, y)
    for event in $game_map.events_xy(x, y)          # Matches event position
      unless event.through                          # Passage OFF?
        return true if event.priority_type == 1    # Target is normal char
      end
    end
    if @priority_type == 1                          # Self is normal char
      return true if $game_player.pos_nt?(x, y)    # Matches player position
      return true if $game_map.boat.pos_nt?(x, y)  # Matches boat position
      return true if $game_map.ship.pos_nt?(x, y)  # Matches ship position
    end
    return false
  end
 
  ##################################################################
  # SPECIAL(NEW) MOVE COMMANDS
  ##################################################################
  #--------------------------------------------------------------------------
  # * Move toward Position
  #--------------------------------------------------------------------------
  def move_toward_pos(x,y)
    sx = distance_x_from_pos(x)
    sy = distance_y_from_pos(y)
    if sx != 0 or sy != 0
      if sx.abs > sy.abs                  # Horizontal distance is longer
        sx > 0 ? move_left : move_right  # Prioritize left-right
        if @move_failed and sy != 0
          sy > 0 ? move_up : move_down
        end
      else                                # Vertical distance is longer
        sy > 0 ? move_up : move_down      # Prioritize up-down
        if @move_failed and sx != 0
          sx > 0 ? move_left : move_right
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Move away from Position
  #--------------------------------------------------------------------------
  def move_away_from_pos(x,y)
    sx = distance_x_from_pos(x)
    sy = distance_y_from_pos(y)
    if sx != 0 or sy != 0
      if sx.abs > sy.abs                  # Horizontal distance is longer
        sx > 0 ? move_right : move_left  # Prioritize left-right
        if @move_failed and sy != 0
          sy > 0 ? move_down : move_up
        end
      else                                # Vertical distance is longer
        sy > 0 ? move_down : move_up      # Prioritize up-down
        if @move_failed and sx != 0
          sx > 0 ? move_right : move_left
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Move toward Event
  #--------------------------------------------------------------------------
  def move_toward_event(id)
    move_toward_pos($game_map.events[id].x,$game_map.events[id].y)
  end
  #--------------------------------------------------------------------------
  # * Move away from Event
  #--------------------------------------------------------------------------
  def move_away_from_event(id)
    move_away_from_pos($game_map.events[id].x,$game_map.events[id].y)
  end
  #--------------------------------------------------------------------------
  # * Turn toward Position
  #--------------------------------------------------------------------------
  def turn_toward_pos(x,y)
    sx = distance_x_from_pos(x)
    sy = distance_y_from_pos(y)
    if sx.abs > sy.abs                    # Horizontal distance is longer
      sx > 0 ? turn_left : turn_right
    elsif sx.abs < sy.abs                # Vertical distance is longer
      sy > 0 ? turn_up : turn_down
    end
  end
  #--------------------------------------------------------------------------
  # * Turn away from Position
  #--------------------------------------------------------------------------
  def turn_away_from_pos(x,y)
    sx = distance_x_from_pos(x)
    sy = distance_y_from_pos(y)
    if sx.abs > sy.abs                    # Horizontal distance is longer
      sx > 0 ? turn_right : turn_left
    elsif sx.abs < sy.abs                # Vertical distance is longer
      sy > 0 ? turn_down : turn_up
    end
  end
  #--------------------------------------------------------------------------
  # * Turn toward Event
  #--------------------------------------------------------------------------
  def turn_toward_event(id)
    turn_toward_pos($game_map.events[id].x,$game_map.events[id].y)
  end
  #--------------------------------------------------------------------------
  # * Turn away from Event
  #--------------------------------------------------------------------------
  def turn_away_from_event(id)
    turn_away_from_pos($game_map.events[id].x,$game_map.events[id].y)
  end
  #--------------------------------------------------------------------------
  # * Calculate X Distance From Event
  #--------------------------------------------------------------------------
  def distance_x_from_pos(x)
    sx = @x - x
    if $game_map.loop_horizontal?        # When looping horizontally
      if sx.abs > $game_map.width / 2    # Larger than half the map width?
        sx -= $game_map.width            # Subtract map width
      end
    end
    return sx
  end
  #--------------------------------------------------------------------------
  # * Calculate Y Distance From Event
  #--------------------------------------------------------------------------
  def distance_y_from_pos(y)
    sy = @y - y
    if $game_map.loop_vertical?          # When looping vertically
      if sy.abs > $game_map.height / 2    # Larger than half the map height?
        sy -= $game_map.height            # Subtract map height
      end
    end
    return sy
  end
end

Créditos a Woratana
avatar
Wecoc
Administrador
Administrador



Créditos 12087

Gracias : 519

Volver arriba Ir abajo

Re: [RMXP/VX] Improved & Special Move Commands

Mensaje por MaddManu el 2013-01-20, 21:22

Parece que haces todos los scripts que necesito xD, me es muy útil pero de nuevo me salta una pregunta y un problema, es posible, en vez de introducir las coordenadas manualmente, hacerlo mediante el uso de variables?
avatar
MaddManu
Soñador
Soñador

0/3

Créditos 373

Gracias : 4

Volver arriba Ir abajo

Re: [RMXP/VX] Improved & Special Move Commands

Mensaje por youkai el 2013-01-20, 22:05

Pues si, es posible haciendo uso de variables ya que al final una variable no es mas que un numero(lo que con un valor predefinido xDD)
Por ejemplo:
move_toward_pos($game_variables[5], 4)

No hay ningun tipo de problema con eso ^^
Saludos,
¥oukai
avatar
youkai
Soñador
Soñador

0/3

Créditos 280

Gracias : 10

Volver arriba Ir abajo

Excelente

Mensaje por Arenas88 el 2013-01-20, 22:16

Gracias por el aporte Wecoc, la transición al XP me es de gran ayuda. Sin duda un muy buen script, características como la de move_toward_pos(x,y lo hace obligatorio a la hora de programar escenas con mayor comodidad. Lo tenia en la mente hace rato este script, sin duda que me ahorraste la busqueda...

¡Saludos!

_________________

Ganadora de dos premios Mundo Maker como 3er mejor screen y mejor screen RpgM XP.



avatar
Arenas88
Analista
Analista

0/3

Créditos 1077

Gracias : 0

Volver arriba Ir abajo

Re: [RMXP/VX] Improved & Special Move Commands

Mensaje por MaddManu el 2013-01-21, 08:57

Gracias de nuevo Youkai!
avatar
MaddManu
Soñador
Soñador

0/3

Créditos 373

Gracias : 4

Volver arriba Ir abajo

Re: [RMXP/VX] Improved & Special Move Commands

Mensaje por Producciones The Golden el 2016-12-22, 20:01

PERDÓN POR EL NECROPOSTING PERO TENGO UN PROBLEMA Y ES URGENTE:

EDIT: me olvidé de decir que es RPG MAKER XP JAJAJAJA
En un proyecto tengo los eventos empleando este script y funcionan perfectamente (move_toward_event(#)) pero el problema que tengo es con un evento TOTALMENTE AJENO AL SCRIPT, es un evento que funciona como proyectil, el cual al activarse un interruptor aparece donde el jugador ("elegir posición de evento") y debería salir disparado, obviamente, pero no lo hace, ese es el problema, no aparece donde el jugador y se mueve, es como si no existiera, Y HE VERIFICADO QUE NO TUVIERA NADA QUE VER CON EL SCRIPT DICHO EVENTO, Y TAMBIÉN QUE AL SACAR EL SCRIPT EL PROYECTIL CUMPLA CON SU FUNCIÓN, OSEA QUE EL PROBLEMA ES EL USO DEL SCRIPT, por favor busquen una solución rápido así decido si uso o no dicho script.
Espero que no necesiten del proyecto ya que está muy mal organizado y cada cosa funciona como yo sé que funciona, y no creo que cualquiera pueda entender este desmadre XD.
avatar
Producciones The Golden
Veterano
Veterano

0/3

Créditos 637

Gracias : 60

Volver arriba Ir abajo

Re: [RMXP/VX] Improved & Special Move Commands

Mensaje por Wecoc el 2016-12-22, 23:36

Antes que nada, he limpiado un poco el script porque tenía carácteres raros en los comentarios:

Código:
#===============================================================
# [XP] Improved & Special Move Commands [Edit]
#--------------------------------------------------------------
# by Woratana [woratana@hotmail.com]
# Released on: 20/03/2008
# Version: 1.0
#--------------------------------------------------------------
=begin
===============================================
                  + COMMANDS LIST +
===============================================
################################
  IMPROVED MOVE COMMANDS
  
  SAFE JUMP
  Don't Jump if its destination is OUT OF THE SCREEN (or) NOT PASSABLE.
  (Old jump will not check before jump)
  
  IMPROVED RANDOM MOVE
  Find the movable direction before move.
  (Old random move will just skip to move in that frame,
  if its destination is not passable.)
  
  Note: If you don't want one of this improved command, just delete its part.
  (I put all of their command name above their script part)

################################

################################
  SPECIAL(NEW) MOVE COMMANDS
  
  ++[HOW TO USE]++
  Open 'Move Route' window, (or event command 'Set Move Route')
  Click 'Script...' and type the move command you want...
  
  MOVE TOWARD POSITION X/Y
  move_toward_pos(x,y)
  
  MOVE AWAY FROM POSITION X/Y
  move_away_from_pos(x,y)
  
  MOVE TOWARD EVENT ID
  move_toward_event(id)
  
  MOVE AWAY FROM EVENT ID
  move_away_from_event(id)
  
  TURN TOWARD POSITION X/Y
  turn_toward_pos(x,y)
  
  TURN AWAY FROM POSITION X/Y
  turn_away_from_pos(x,y)
  
  TURN TOWARD EVENT ID
  turn_toward_event(id)
  
  TURN AWAY FROM EVENT ID
  turn_away_from_event(id)
  
################################
=end

class Game_Character
  ##################################################################
  # IMPROVED MOVE COMMANDS
  ##################################################################
  #-------------------------------------------------------------
  # SAFE JUMP
  #-------------------------------------------------------------
  def jump(x_plus, y_plus)
    if x_plus.abs > y_plus.abs
      x_plus < 0 ? turn_left : turn_right
    elsif x_plus.abs > y_plus.abs
      y_plus < 0 ? turn_up : turn_down
    end
    new_x = @x + x_plus
    new_y = @y + y_plus
    if (x_plus == 0 and y_plus == 0) or passable?(new_x, new_y)
      @x += x_plus
      @y += y_plus
      distance = Math.sqrt(x_plus * x_plus + y_plus * y_plus).round
      @jump_peak = 10 + distance - @move_speed
      @jump_count = @jump_peak * 2
      @stop_count = 0
      straighten
    end
  end
  #-------------------------------------------------------------
  # IMPROVED RANDOM MOVE
  #-------------------------------------------------------------
  def move_random
    safe = false
    checked = []
    while safe == false
      break if checked.include?(0) and checked.include?(1) and
      checked.include?(2) and checked.include?(3)
      case rand(4)
      when 0; return if checked.include?(0); checked.push 0
        if passable?(@x, @y, 2)
          safe = true; move_down(false)
        end
      when 1; return if checked.include?(1); checked.push 1
        if passable?(@x, @y, 4)
          safe = true; move_left(false)
        end
      when 2; return if checked.include?(2); checked.push 2
        if passable?(@x, @y, 6)
          safe = true; move_right(false)
        end
      when 3; return if checked.include?(3); checked.push 3
        if passable?(@x, @y, 8)
          safe = true; move_up(false)
        end
      end
    end
  end
  ##################################################################
  # SPECIAL(NEW) MOVE COMMANDS
  ##################################################################
  #--------------------------------------------------------------------------
  # * Move toward Position
  #--------------------------------------------------------------------------
  def move_toward_pos(x,y)
    sx = distance_x_from_pos(x)
    sy = distance_y_from_pos(y)
    if sx != 0 or sy != 0
      if sx.abs > sy.abs                  # Horizontal distance is longer
        sx > 0 ? move_left : move_right  # Prioritize left-right
        if @move_failed and sy != 0
          sy > 0 ? move_up : move_down
        end
      else                                # Vertical distance is longer
        sy > 0 ? move_up : move_down      # Prioritize up-down
        if @move_failed and sx != 0
          sx > 0 ? move_left : move_right
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Move away from Position
  #--------------------------------------------------------------------------
  def move_away_from_pos(x,y)
    sx = distance_x_from_pos(x)
    sy = distance_y_from_pos(y)
    if sx != 0 or sy != 0
      if sx.abs > sy.abs                  # Horizontal distance is longer
        sx > 0 ? move_right : move_left  # Prioritize left-right
        if @move_failed and sy != 0
          sy > 0 ? move_down : move_up
        end
      else                                # Vertical distance is longer
        sy > 0 ? move_down : move_up      # Prioritize up-down
        if @move_failed and sx != 0
          sx > 0 ? move_right : move_left
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Move toward Event
  #--------------------------------------------------------------------------
  def move_toward_event(id)
    move_toward_pos($game_map.events[id].x,$game_map.events[id].y)
  end
  #--------------------------------------------------------------------------
  # * Move away from Event
  #--------------------------------------------------------------------------
  def move_away_from_event(id)
    move_away_from_pos($game_map.events[id].x,$game_map.events[id].y)
  end
  #--------------------------------------------------------------------------
  # * Turn toward Position
  #--------------------------------------------------------------------------
  def turn_toward_pos(x,y)
    sx = distance_x_from_pos(x)
    sy = distance_y_from_pos(y)
    if sx.abs > sy.abs                   # Horizontal distance is longer
      sx > 0 ? turn_left : turn_right
    elsif sx.abs < sy.abs                # Vertical distance is longer
      sy > 0 ? turn_up : turn_down
    end
  end
  #--------------------------------------------------------------------------
  # * Turn away from Position
  #--------------------------------------------------------------------------
  def turn_away_from_pos(x,y)
    sx = distance_x_from_pos(x)
    sy = distance_y_from_pos(y)
    if sx.abs > sy.abs                   # Horizontal distance is longer
      sx > 0 ? turn_right : turn_left
    elsif sx.abs < sy.abs                # Vertical distance is longer
      sy > 0 ? turn_down : turn_up
    end
  end
  #--------------------------------------------------------------------------
  # * Turn toward Event
  #--------------------------------------------------------------------------
  def turn_toward_event(id)
    turn_toward_pos($game_map.events[id].x,$game_map.events[id].y)
  end
  #--------------------------------------------------------------------------
  # * Turn away from Event
  #--------------------------------------------------------------------------
  def turn_away_from_event(id)
    turn_away_from_pos($game_map.events[id].x,$game_map.events[id].y)
  end
  #--------------------------------------------------------------------------
  # * Calculate X Distance From Event
  #--------------------------------------------------------------------------
  def distance_x_from_pos(x)
    sx = @x - x
    return sx
  end
  #--------------------------------------------------------------------------
  # * Calculate Y Distance From Event
  #--------------------------------------------------------------------------
  def distance_y_from_pos(y)
    sy = @y - y
    return sy
  end
end

- Prueba el engine con el script.
- Si no te funciona busca en el script el método jump, empieza en la línea:
def jump(x_plus, y_plus)
y lo borras entero (hasta el próximo método, IMPROVED RANDOM MOVE)
Vuelve a probar el proyecto a ver si funciona el engine.
- Si no te funciona recupera el script que he puesto y ésta vez borra el método move_random de la misma manera.
Vuelve a probar el proyecto.

Si has explicado el problema bien, solo puede ser problema de uno de los dos así a éstas alturas deberías tenerlo resuelto.

Si no te funciona habrá que mirarlo más detenidamente. En ese caso no necesitamos el proyecto pero sí al menos screens del engine del evento y de los eventos comunes que use si usa alguno.
avatar
Wecoc
Administrador
Administrador



Créditos 12087

Gracias : 519

Volver arriba Ir abajo

Re: [RMXP/VX] Improved & Special Move Commands

Mensaje por Producciones The Golden el 2016-12-22, 23:58

No se solucionó, probé con el nuevo script, quitandole el jump y quitandole el random move, te paso capturas de los eventos:

EVENTOS QUE USAN EL SCRIPT SPECIAL MOVE COMMANDS:
Esto es un evento de venado que sigue a otro evento de venado más grande el cual tiene un movimiento aleatorio:

aquí vemos un evento común el cual hace que cuando el escorpión está vivo el lagarto lo sigue, y cuando muere el lagarto se empieza a mover aleatoriamente:

EVENTOS DE LA BALA TOTALMENTE AJENOS AL SCRIPT:
este es el evento común que lleva a la bala a la posición del jugador y hace que esta se mueva en la dirección a la que el jugador mira:

por último el evento que al cumplir tales condiciones recarga el arma sustituyendo por 1 las balas recargadas y restando 1 a las balas totales:


VUELVO A ACLARAR QUE SIN EL SCRIPT TODO LO DE EL ARMA Y LA BALA FUNCIONA PERFECTAMENTE, se ve que el script altera el cambio de posición de la bala, es lo único que llego a deducir...
Si necesitas capturas de algún otro evento paralelo dimelo, pero creo que esos son los cuatro más importantes en este caso. MUCHAS GRACIAS WECOC :3 SIEMPRE TE HE ADMIRADO
avatar
Producciones The Golden
Veterano
Veterano

0/3

Créditos 637

Gracias : 60

Volver arriba Ir abajo

Re: [RMXP/VX] Improved & Special Move Commands

Mensaje por Wecoc el 2016-12-23, 01:46

El primero está bien.

El segundo está bien pero ten en cuenta que eso significa que el EVENT ID del LAGARTO siempre tendrá que ser el mismo en todos los mapas para que el mover evento se aplique al evento que toca.
Quizá hubiera sido mejor usar un evento normal en proceso paralelo en vez de un evento común, especialmente si es un caso de un único mapa.

En el tercero posibles errores: 1 - Que no esté activo el interruptor arma, 2 - No veo donde se define que las variables 13 y 14 sean las coordenadas del personaje, pero creo que debería definirse ahí justo antes del Posición de Evento hacia esas variables, 3 - Igual que antes, el evento bala tendrá que tener siempre la misma ID.
Además ese Borrar evento temporalmente sobra ahí. Otro error que veo es que la condición es que la bala comienzo sea ON por lo tanto después del mover evento no tiene sentido activarlo, creo que te equivocaste y ahí debería ser OFF.

En el último hay los mismos problemas con activar interruptores que ya estan activados y esas cosas, con el interruptor bala comienzo. Creo que el que sobra es el primero, que queda fuera de las condiciones. Puedes ahorrarte todas esas excepciones vacías (imagen) e irá un poco más rápido el engine. A parte de eso no hay ningún fallo más.

Cada vez me parece menos probable que el script sea el único causante del fallo, quizá interactúe de algún modo que no logro ver, pero el problema ahí es que hay que pulir el engine mejor.
avatar
Wecoc
Administrador
Administrador



Créditos 12087

Gracias : 519

Volver arriba Ir abajo

Re: [RMXP/VX] Improved & Special Move Commands

Mensaje por Producciones The Golden el 2016-12-23, 02:08

Hice todo lo que entendí de lo que dijiste pero sigue igual, tomando en cuenta que al sacar el script todo funciona perfectamente creo que el script entra en conflicto con algo como el "elegir posición" por ejemplo, ¿quieres que te envíe el engine? en sí no queda nada que pueda hacer dentro de lo que me doy cuenta yo, y si no puedes hacer más pues no usaré el script.
avatar
Producciones The Golden
Veterano
Veterano

0/3

Créditos 637

Gracias : 60

Volver arriba Ir abajo

Re: [RMXP/VX] Improved & Special Move Commands

Mensaje por Wecoc el 2016-12-23, 03:12

Intervenga o no el script, es un script muy sencillo y que de la base solo modifica los dos métodos que dije antes (salto y mover random) y que como se ha visto no son el problema, así que sí o sí hay que arreglarlo mediante el engine, no mediante el script. En otras palabras, solo puede ser problema del engine.

Por eso creo que usar o no el script es bastante indiferente porque aunque el script saque a la luz un bug del engine que sin el script no se ve, el bug sigue estando, así que en ciertos casos podría seguir siendo un problema. El bug me parece que tiene que ver con la asignación de coordenadas en las variables; sin el script el evento no se mueve hacia el otro así que no se nota, pero con el script se nota que las variables de las coordenadas del evento o del personaje no están siendo actualizadas en el momento que toca.

Arreglarte un engine dentro del juego me es más difícil de hacer que arreglar un script, si sacaras solo el engine + el script en un proyecto a parte de modo que se recreara el bug y me pasaras solo ese proyecto "vacío" entonces sí me sería más cómodo arreglarlo y volver a pasártelo bien. Especialmente si dijiste que el proyecto estaba algo caótico con eso.

Si lo haces me lo mandas por MP, si no al menos ya tienes más pistas de donde buscar el fallo.
avatar
Wecoc
Administrador
Administrador



Créditos 12087

Gracias : 519

Volver arriba Ir abajo

Re: [RMXP/VX] Improved & Special Move Commands

Mensaje por Producciones The Golden el 2016-12-23, 03:27

Seguiré intentando, enviarte un proyecto vacío te haría no tomar en cuenta el resto de eventos de mi juego y además puede ni siquiera ocurrir el bug, si no hallo la forma (que creo que no la hallaré) de sacar el bug trataré de seguir el proyecto con el, ya que cada vez que actualizo algo en el juego lo pruebo haciendo todo lo posible, tomando en cuenta cada variable, así que si no me vuelvo a topar con el bug sin el script creo que nadie podría, de todas maneras muchas gracias por tu atención Wecoc! como he dicho antes siempre te he admirado, desde antes de crearme esta cuenta miraba tus scripts y decía: "patata..."... okno XD decía "de onde saka pa´ tanto eskript ejte menda?!"; en verdad muchas gracias por todo, pero... ahora... otra cosa fuera del tema: ¿sabes de alguna forma en la que en el transcurso del juego SE CREEN EVENTOS? porque pienso añadir la posibilidad de crear barricadas en una mesa de "construcción" las cuales siendo objetos en el inventario, se puedan poner en el mapa, todo eso lo sé hacer, lo que no sé hacer es el que al ponerlo en el mapa se cree un NUEVO evento, te agradecería mucho que me dieras una ayudita con eso, saludos!
avatar
Producciones The Golden
Veterano
Veterano

0/3

Créditos 637

Gracias : 60

Volver arriba Ir abajo

Re: [RMXP/VX] Improved & Special Move Commands

Mensaje por Wecoc el 2016-12-23, 03:44

Bueno sobre el engine ese tú mismo, si el juego puede pasar tal como está y no se puede recrear como has dicho no hay problema en dejarlo.

Te agradecería que no cambiaras de tema si no tiene nada que ver con lo anterior, mejor abrir otro para que el foro no quede desordenado. Pero bueno, sobre la pregunta, hay algunos scripts que "crean" eventos (o pseudo-eventos) pero nunca me parecieron muy buena idea, porque es complicarse la vida innecesariamente. Lo mejor es crear un evento vacío y hacer que se active solo con cierta condición/interruptor, no se verá ni funcionará sin ella y parecerá que no hay nada, de modo que lograrás el mismo efecto que si se creara de novo.
avatar
Wecoc
Administrador
Administrador



Créditos 12087

Gracias : 519

Volver arriba Ir abajo

Re: [RMXP/VX] Improved & Special Move Commands

Mensaje por Producciones The Golden el 2016-12-23, 04:11

@Wecoc escribió:Te agradecería que no cambiaras de tema si no tiene nada que ver con lo anterior, mejor abrir otro para que el foro no quede desordenado. Pero bueno, sobre la pregunta, hay algunos scripts que "crean" eventos (o pseudo-eventos) pero nunca me parecieron muy buena idea, porque es complicarse la vida innecesariamente. Lo mejor es crear un evento vacío y hacer que se active solo con cierta condición/interruptor, no se verá ni funcionará sin ella y parecerá que no hay nada, de modo que lograrás el mismo efecto que si se creara de novo.
Voy a abrir un nuevo tema en el foro ahora mismo al respecto, te espero allí Wecoc :3
avatar
Producciones The Golden
Veterano
Veterano

0/3

Créditos 637

Gracias : 60

Volver arriba Ir abajo

Re: [RMXP/VX] Improved & Special Move Commands

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.