Catterpillar EX

    tecao98
    tecao98
    Membro Experiente
    Membro Experiente

    Mensagens : 146
    Credibilidade : 17

    Catterpillar EX Empty Catterpillar EX

    Mensagem por tecao98 em Dom Jan 06, 2013 6:24 pm

    Introdução

    O famoso script "Cartterpillar" é bastante interessante, é muito usado em projetos de RMXP, este script faz com que se houver mais de 2 membros no grupo, os personagens fique seguindo o herói principal

    Script

    Código:
    #################################################################
    ################## CATERPILLAR EX ###############################
    ####### Caterpillar - http://www4.big.or.jp/~fukuyama/ ##########
    ####### Seleção rápida - JOAONETO #######
    ####### Ativar/Desativar Caterpillar - JOAONETO #################
    ####### Quantidade de Heróis - JOAONETO #########################
    #################################################################

    # Este é o mesmo Caterppilar, porém com algumas inclusões:
    #1º - Mudança de líder em tempo de jogo
    #2º - Ativar/Desativar Caterpillar em tempo de jogo
    #3º - Mudar a quantidade de heróis que o Caterpillar vai exibir

    # Para mudar a equipe, aperte L(A tecla Q)
    # Para On/Off o Caterpillar, Aperte R(A tecla W)
    #Para mudar as Teclas, apenas troque-as no código logo abaixo.

    #Para mudar a quantidade de exibição de heróis, apenas mude o
    #Valor de $HEROS para o valor que você quer mais um.
    #EX: $HEROS = 3 vai mostrar o Líder mais 3 aliados
    #---------------------------------------------------------------
    class Scene_Map
      alias new_update update
      def update
        new_update
        if Input.trigger?(Input::L)
          $game_system.se_play($data_system.decision_se)
          change_party
        end
        if Input.trigger?(Input::R)
          $game_system.se_play($data_system.decision_se)
          $TRAIN_ACTOR_TRANSPARENT == false ? $TRAIN_ACTOR_TRANSPARENT = true : $TRAIN_ACTOR_TRANSPARENT = false
        end
      end
     
      def change_party
        @heros = []
        for i in 0...$game_party.actors.size
          @heros[i] = $game_party.actors[i]
        end
        for i in 1...@heros.size
          $game_party.actors[i - 1] = @heros[i]
        end
        $game_party.actors[@heros.size - 1] = @heros[0]
        $game_player.refresh
      end
    end

    TRAIN_ACTOR_TRANSPARENT_SWITCH = true
    $TRAIN_ACTOR_TRANSPARENT = false
    $HEROS = 5

    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 .. $HEROS
              @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 .. $HEROS
              @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 = $TRAIN_ACTOR_TRANSPARENT
          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

    Screen

    Catterpillar EX Screenjncc2

    Créditos

    João Neto - Criador do Script
    Tecão98 - Criador do Tópico

      Data/hora atual: Qui Set 19, 2019 6:01 pm