Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

Ayuda script seguimiento personajes (XP)

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP Ayuda script seguimiento personajes (XP)

Mensaje por plergoth el 2018-01-27, 20:46

buenos días queridos makers, hoy pido ayuda con un script de seguimiento de personajes que encontré en este foro pero ahora no lo encuentro por aquí para enseñároslo, así que haré un copiar pegar.

Código:
##--------------------------------------------
# Train_Actor
# TRAIN_ACTOR_TRANSPARENT_SWITCH = false

TRAIN_ACTOR_TRANSPARENT_SWITCH = true
TRAIN_ACTOR_TRANSPARENT_SWITCHES_INDEX = 401

#Input::DOWN  = 2
#Input::LEFT  = 4
#Input::RIGHT = 6
#Input::UP    = 8

DOWN_LEFT  = 1
DOWN_RIGHT = 3
UP_LEFT    = 7
UP_RIGHT  = 9
JUMP      = 5



class Game_Party_Actor < Game_Character

def initialize
super()
@through = true
end

def setup(actor)
if actor != nil
  @character_name = actor.character_name
  @character_hue = actor.character_hue
else
  @character_name = ""
  @character_hue = 0
end
@opacity = 255
@blend_type = 0
end

def screen_z(height = 0)
if $game_player.x == @x and $game_player.y == @y
  return $game_player.screen_z(height) - 1
end
super(height)
end
#--------------------------------------------------------------------------

def move_down(turn_enabled = true)
if turn_enabled
  turn_down
end

if passable?(@x, @y, Input::DOWN)
  turn_down
  @y += 1
end
end
#--------------------------------------------------------------------------
def move_left(turn_enabled = true)
if turn_enabled
  turn_left
end
if passable?(@x, @y, Input::LEFT)
  turn_left
  @x -= 1
end
end
#--------------------------------------------------------------------------
def move_right(turn_enabled = true)
if turn_enabled
  turn_right
end
if passable?(@x, @y, Input::RIGHT)
  turn_right
  @x += 1
end
end
#--------------------------------------------------------------------------
def move_up(turn_enabled = true)
if turn_enabled
  turn_up
end
if passable?(@x, @y, Input::UP)
  turn_up
  @y -= 1
end
end
#--------------------------------------------------------------------------
def move_lower_left
unless @direction_fix
  @direction = (@direction == Input::RIGHT ? Input::LEFT : @direction == Input::UP ? Input::DOWN : @direction)
end

if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::LEFT)) or
  (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::DOWN))
  @x -= 1
  @y += 1
end
end
#--------------------------------------------------------------------------

def move_lower_right
unless @direction_fix
  @direction = (@direction == Input::LEFT ? Input::RIGHT : @direction == Input::UP ? Input::DOWN : @direction)
end
if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::RIGHT)) or
  (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::DOWN))
  @x += 1
  @y += 1
end
end
#--------------------------------------------------------------------------

def move_upper_left
unless @direction_fix
  @direction = (@direction == Input::RIGHT ? Input::LEFT : @direction == Input::DOWN ? Input::UP : @direction)
end
if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::LEFT)) or
  (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::UP))
  @x -= 1
  @y -= 1
end
end

#--------------------------------------------------------------------------

def move_upper_right
unless @direction_fix
  @direction = (@direction == Input::LEFT ? Input::RIGHT : @direction == Input::DOWN ? Input::UP : @direction)
end
if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::RIGHT)) or
  (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::UP))
  @x += 1
  @y -= 1
end
end

def set_move_speed(move_speed)
@move_speed = move_speed
end
end

class Spriteset_Map

def setup_actor_character_sprites?
return @setup_actor_character_sprites_flag != nil
end

def setup_actor_character_sprites(characters)
if !setup_actor_character_sprites?
  index_game_player = 0
  @character_sprites.each_index do |i|
    if @character_sprites[i].character.instance_of?(Game_Player)
      index_game_player = i
      break
    end
  end

  for character in characters.reverse
    @character_sprites.unshift(
      Sprite_Character.new(@viewport1, character)
    )
  end
  @setup_actor_character_sprites_flag = true
end
end
end

class Scene_Map

def setup_actor_character_sprites(characters)
@spriteset.setup_actor_character_sprites(characters)
end
end

class Game_Party

def set_transparent_actors(transparent)
@transparent = transparent
end
def setup_actor_character_sprites
if @characters == nil
  @characters = []
  for i in 1 .. 4
    @characters.push(Game_Party_Actor.new)
  end
end
if @actors_chach == nil
  @actors_chach = []
end
if @actors_chach != @actors
  @actors_chach = @actors.clone
  for i in 1 .. 4
    @characters[i - 1].setup(actors[i])
  end
end
if $scene.instance_of?(Scene_Map)
  $scene.setup_actor_character_sprites(@characters)
end
end
def update_party_actors
setup_actor_character_sprites
transparent = $game_player.transparent
if transparent == false
  if TRAIN_ACTOR_TRANSPARENT_SWITCH
    transparent = $game_switches[TRAIN_ACTOR_TRANSPARENT_SWITCHES_INDEX]
  else
    transparent = $game_player.transparent
  end
end

for character in @characters
  character.transparent = transparent
  character.set_move_speed($game_player.get_move_speed)
  character.update
end
end

def moveto_party_actors( x, y )
setup_actor_character_sprites
for character in @characters
  character.moveto( x, y )
end
if @move_list == nil
  @move_list = []
end
for i in 0 .. 10
  @move_list[i] = nil
end
end

def move_party_actors
if @move_list == nil
  @move_list = []
  for i in 0 .. 10
    @move_list[i] = nil
  end
end

@move_list.each_index do |i|
  if @characters[i] != nil
    case @move_list[i].type
      when Input::DOWN
        @characters[i].move_down(@move_list[i].args[0])
      when Input::LEFT
        @characters[i].move_left(@move_list[i].args[0])
      when Input::RIGHT
        @characters[i].move_right(@move_list[i].args[0])
      when Input::UP
        @characters[i].move_up(@move_list[i].args[0])
      when DOWN_LEFT
        @characters[i].move_lower_left
      when DOWN_RIGHT
        @characters[i].move_lower_right
      when UP_LEFT
        @characters[i].move_upper_left
      when UP_RIGHT
        @characters[i].move_upper_right
      when JUMP
        @characters[i].jump(@move_list[i].args[0],@move_list[i].args[1])
    end
  end
end
end

class Move_List_Element
def initialize(type,args)
  @type = type
  @args = args
end

def type() return @type end
def args() return @args end
end

def add_move_list(type,*args)
@move_list.unshift(Move_List_Element.new(type,args)).pop
end

def move_down_party_actors(turn_enabled = true)
move_party_actors
add_move_list(Input::DOWN,turn_enabled)
end

def move_left_party_actors(turn_enabled = true)
move_party_actors
add_move_list(Input::LEFT,turn_enabled)
end

def move_right_party_actors(turn_enabled = true)
move_party_actors
add_move_list(Input::RIGHT,turn_enabled)
end

def move_up_party_actors(turn_enabled = true)
move_party_actors
add_move_list(Input::UP,turn_enabled)
end

def move_lower_left_party_actors
move_party_actors
add_move_list(DOWN_LEFT)
end

def move_lower_right_party_actors
move_party_actors
add_move_list(DOWN_RIGHT)
end

def move_upper_left_party_actors
move_party_actors
add_move_list(UP_LEFT)
end

def move_upper_right_party_actors
move_party_actors
add_move_list(UP_RIGHT)
end

def jump_party_actors(x_plus, y_plus)
move_party_actors
add_move_list(JUMP,x_plus, y_plus)
end
end



module Game_Player_Module

def update
$game_party.update_party_actors
super
end

def moveto( x, y )
super
$game_party.moveto_party_actors( x, y )
end

def move_down(turn_enabled = true)
if passable?(@x, @y, Input::DOWN)
  $game_party.move_down_party_actors(turn_enabled)
end
super(turn_enabled)
end

def move_left(turn_enabled = true)
if passable?(@x, @y, Input::LEFT)
  $game_party.move_left_party_actors(turn_enabled)
end

super(turn_enabled)
end

def move_right(turn_enabled = true)
if passable?(@x, @y, Input::RIGHT)
  $game_party.move_right_party_actors(turn_enabled)
end
super(turn_enabled)
end

def move_up(turn_enabled = true)
if passable?(@x, @y, Input::UP)
  $game_party.move_up_party_actors(turn_enabled)
end
super(turn_enabled)
end

def move_lower_left
if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::LEFT)) or
  (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::DOWN))
  $game_party.move_lower_left_party_actors
end
super
end

def move_lower_right
if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::RIGHT)) or
  (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::DOWN))
  $game_party.move_lower_right_party_actors
end
super
end

def move_upper_left
if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::LEFT)) or
  (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::UP))
  $game_party.move_upper_left_party_actors
end
super
end

def move_upper_right
if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::RIGHT)) or
  (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::UP))
  $game_party.move_upper_right_party_actors
end
super
end

def jump(x_plus, y_plus)
new_x = @x + x_plus
new_y = @y + y_plus
if (x_plus == 0 and y_plus == 0) or passable?(new_x, new_y, 0)
  $game_party.jump_party_actors(x_plus, y_plus)
end
super(x_plus, y_plus)
end

# -----------------------------------------------

def get_move_speed
return @move_speed
end
end

class Game_Player
include Game_Player_Module
end

El script en sí funciona pero creo que no estaba pensado para cambiar los trajes de los personajes, cosa que hice. El problema del script es que solo "carga" los trajes cuando abres el juego la primera vez, los cambios de trajes que se hagan posteriormente no los carga. Me di cuenta de esto al crear un personaje que puede cambiar de forma (o sprite) a voluntad, pero a pesar de que el battler cambiase no cambiaba de sprite, en cambio si guardaba y volvía a cargar esa partida el traje si cambiaba

Teniendo en cuenta que mi capacidad para entender los scripts es prácticamente nula no me atrevo a tocar nada, así que allá va mi pregunta:

¿Sería posible hacer un "llamar script" para utilizarlo a voluntad?
avatar
plergoth
Soñador
Soñador

0/3

Créditos 297

Gracias : 26

Volver arriba Ir abajo

RPG Maker XP Re: Ayuda script seguimiento personajes (XP)

Mensaje por plergoth el 2018-02-04, 16:46

Perdonad por el doble post, ha pasado más de una semana y no he recibido respuesta, mi nula comprensión de los scripts hace que sea incapaz de arreglar el script para actualizarlo cuando yo quiera y no solo cuando cargue por primera vez el juego.

¿Tan difícil es hacer algo así? Snif
avatar
plergoth
Soñador
Soñador

0/3

Créditos 297

Gracias : 26

Volver arriba Ir abajo

RPG Maker XP Re: Ayuda script seguimiento personajes (XP)

Mensaje por Wecoc el 2018-02-05, 02:37

Bueno, intentaría arreglarlo... No parece tan difícil en realidad. Pero el tema es que este script es de 2009 en el foro, el script en sí creo que aún es bastante anterior (y para rematar se desconoce el autor). Me refiero a que seguramente sea uno de los primeros scripts que hubo para eso xD Se entiende que sea tan limitado.

Actualmente tienes muchas otras alternativas mejores. ¿Te has planteado usar otro? El Heretic's Caterpillar sigue siendo uno de los favoritos.

Si no hay otra que usar ese se intentará implementar el cambio de gráfico.
avatar
Wecoc
Administrador
Administrador



Créditos 12297

Gracias : 648

Volver arriba Ir abajo

RPG Maker XP Re: Ayuda script seguimiento personajes (XP)

Mensaje por plergoth el 2018-02-05, 03:20

¡Ahí va! No me di cuenta que era tan viejo, solo me fijé en que funcionaba y ya está, no tenía ni idea que hubiese ese script. Voy a tener que probarlo y a ver que tal (ya de paso repasar los scripts a ver si hay más modernos de los que estoy usando hasta ahora)

Una vez más me salvas de caer en la penumbra, muchas gracias por el aviso, probaré si me funciona bien o si sé utilizarlo... que ese ya es otro tema.

Muchas gracias por mostrarme el camino, no sé qué haría sin la gente del foro.

Edito: Ya probé el script Heretic caterpillar, a pesar de funcionar bien y ser relativamente sencillo de usar, tengo un problema para mi proyecto. El script necesita tener un evento por cada personaje en cada mapa, ahora mismo mi proyecto tiene 10 personajes y 536 datas de momento, aun está a medias la historia y todo eso... tardaría una eternidad en retocarlo todo... además de los retoques que tengo que hacer... así que en definitiva me va a costar una burrada de tiempo, pero qué se le va a hacer.

La solución más rápida sería retocar el script de seguimiento o uno similar que permitiese actualizarse con algún interruptor o llamar script (o algo así, no tengo ni idea, hablo por hablar), yo no sé hacer eso, pero tampoco puedo pedirte que lo hagas, tú tendrás tus cosas que hacer y todo eso. A parte de incluirte en los créditos (que lo haré de todas formas junto a otros foreros) no sabría con qué darte las gracias, así que si al final quieres retocarlo tómalo como algo secundario, solo si realmente tienes ganas, si tienes tiempo y no tienes otras cosas que hacer, pero sobre todo no te esfuerces, si no lo ves claro no lo hagas. De todas formas guardo el Heretic caterpillar.
avatar
plergoth
Soñador
Soñador

0/3

Créditos 297

Gracias : 26

Volver arriba Ir abajo

RPG Maker XP Re: Ayuda script seguimiento personajes (XP)

Mensaje por Wecoc el 2018-02-05, 21:40

El script necesita tener un evento por cada personaje en cada mapa, ahora mismo mi proyecto tiene 10 personajes y 536 datas de momento, aun está a medias la historia y todo eso... tardaría una eternidad en retocarlo todo...

Entiendo... Entonces el de Heretic no es el más apropiado en tu caso, a no ser que tenga algún fix o rewrite que arregle tus problemas (me parece haber leído que se le había hecho un rewrite hace unos años pero no logré entender qué cosas cambiaron).

Por suerte hay muchos sistemas de Caterpillar/Train Actor por ahí, nada que un poco de búsqueda no pueda resolver.

Yo en verdad poco puedo ayudar en ese tema porque no uso ninguno, pero te paso algunos que sé que son bastante usados:
- Fukuyama's Caterpillar (tan viejo como el que pusiste, pero igual te sirve mejor)
- Zeriab's Caterpillar Script (este también suele ser uno de los más recomendados)
avatar
Wecoc
Administrador
Administrador



Créditos 12297

Gracias : 648

Volver arriba Ir abajo

RPG Maker XP Re: Ayuda script seguimiento personajes (XP)

Mensaje por plergoth el 2018-02-06, 01:54

@Wecoc escribió:
- Fukuyama's Caterpillar (tan viejo como el que pusiste, pero igual te sirve mejor)

Por alguna extraña razón no he conseguido que funcione correctamente el de Zeriabs, algo que no entiendo, pero bueno, en cambio el de Fukuyama no solo funcionó correctamente si no que cambia el gráfico del personaje de forma instantánea. El único problema es que las partidas hechas antes de usar el script no funcionan (me sé de alguien que me matará por esto)

Creo que el problema que tengo al buscar estas cosas es que no se inglés y al usar el buscador apenas encontraba nada.

Una vez más muchas gracias por la ayuda, ya me has salvado en varias ocasiones. Hay que hacerte un monumento. Very Happy
avatar
plergoth
Soñador
Soñador

0/3

Créditos 297

Gracias : 26

Volver arriba Ir abajo

RPG Maker XP Re: Ayuda script seguimiento personajes (XP)

Mensaje por Wecoc el 2018-02-06, 09:52

Bueno, pues ya casi lo tienes xD No entiendo qué problema hubo en el de Zeriab, pero bueno.
Hice un script que te "updatea" las partidas que quedan anticuadas por haber subido o quitado un script.
Si no te sirve, mucho será que tengas que desecharlas y volver a testear el juego hasta recuperar las que tenías, pero bueno...  

Wecoc's Script Savefiles Updater
Es fácil de usar. Lo pones encima de main, lo usas como un nuevo script de cargado para actualizar las partidas que quieras y luego lo borras de nuevo.
avatar
Wecoc
Administrador
Administrador



Créditos 12297

Gracias : 648

Volver arriba Ir abajo

RPG Maker XP Re: Ayuda script seguimiento personajes (XP)

Mensaje por plergoth el 2018-02-06, 23:58

Lo mismo te ríes pero el caso es que no me ha funcionado, me dice que no es un archivo de guardado Smile



Ya me he acostumbrado a las incompatibilidades con scripts, incluso los que son sencillos de usar, mucho me temo que es por el pack de scripts de Moonpearl, pero creo que no llegaré a saberlo hasta que entienda el idioma scripter, y eso va a ser complicado de momento.

No pasa nada, volveré a empezar la partida de testeo en busca de fallos, que siempre queda alguno.
avatar
plergoth
Soñador
Soñador

0/3

Créditos 297

Gracias : 26

Volver arriba Ir abajo

RPG Maker XP Re: Ayuda script seguimiento personajes (XP)

Mensaje por plergoth el 2018-02-14, 00:21

Siento mucho hacer este mensaje doble, pero creo que tengo que hacerlo, el problema ya estaba resuelto hasta que he hecho varias pruebas. Si no se puede hacer el doble post por algo así avisadme antes de borrar el mensaje para que pueda editar un mensaje anterior.

Resulta que el Fukuyama's caterpillar tiene un pequeño problema, trata los eventos atravesables como "no atravesables", el caso es que no puede atravesar ningún evento en modo fantasma, no sé si es normal ni si hay alguna forma de solucionarlo.

Al principio no lo noté, hasta que en una escena el Pathfinder se volvió loco (una escena en el que un evento debía atravesar varios eventos fantasmas y colocarse en la casilla central, el evento en cuestión dio un par de vueltas y comenzó a andar en linea recta hasta chocar con otro evento, después el juego se congeló, me ha pasado con varios eventos más y seguro que pasará más veces.

¿Hay alguna forma de solucionarlo?
avatar
plergoth
Soñador
Soñador

0/3

Créditos 297

Gracias : 26

Volver arriba Ir abajo

RPG Maker XP Re: Ayuda script seguimiento personajes (XP)

Mensaje por Wecoc el 2018-02-14, 17:31

Lo he probado en un proyecto vacío y no encontré ninguna diferencia entre la pasabilidad con y sin script. Piensa que por defecto los eventos vacíos van un poco distintos a los demás, cuando no son atravesables el personaje igualmente puede atravesarlos pero los eventos no atravesables no pueden.

Si estás seguro de que es por el script de Caterpillar muestra una captura del caso concreto en el que no va como debería.

PD.- Por cierto has dicho "Pathfinder", y eso es otra cosa... creo que te confundiste con Caterpillar pero si además estás usando un Pathfinder entonces sí es probable que esa sea la causa del problema.
avatar
Wecoc
Administrador
Administrador



Créditos 12297

Gracias : 648

Volver arriba Ir abajo

RPG Maker XP Re: Ayuda script seguimiento personajes (XP)

Mensaje por plergoth el 2018-02-14, 20:03

Después de leer lo que has dicho del pathfinder (que uso los dos, pathfinder y caterpillar) resulta que el problema viene por el pathfinder, pero el problema sucede incluso aunque no use el pathfinder... así que tenias razón, la culpa no es del Caterpillar, es del Pathfinder...

Porras... pues ahora si que estoy frito, por que me pierdo con los scripts, hay una opción que dice "Passable" pero no sé usarla... concretamente estoy usando el Lagless Path Finder... tendré que hacer más pruebas para ver si aprendo a usarlo correctamente cuando pase esas cosas.

Bueno, más bien no sé usar eso de rango ni pasable por que no sé como llamar correctamente al script, me quedé en las coordenadas x y.

Edit: He usado el Caterpillar en un proyecto de prueba y funciona bien, a la que pongo el pathfinder empieza el error, lo malo es que aunque borre el pathfinder sigue sin salir bien, así que creo que tengo que ingeniármelas para copiar mi proyecto sin poner el pathfinder... tal vez así funcione bien... no tengo ni idea, lo probaré por si acaso.

Edit 2: Pues después de varias pruebas, tener que volver a empezar toda la partida hasta el primer punto en donde sale el error... resulta que sale igual, sin pathfinder y habiendo cogido una versión anterior y pasar todos los archivos excepto los scripts que los he pasado de uno en uno, así que por algún motivo que desconozco en mi proyecto no funciona bien, y mira que me duele por que por fin parecía que había solucionado algo. lo que es no saber.
avatar
plergoth
Soñador
Soñador

0/3

Créditos 297

Gracias : 26

Volver arriba Ir abajo

RPG Maker XP Re: Ayuda script seguimiento personajes (XP)

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.