Suporte no desenvolvimento de jogos


    monstro invocar outro monstro (capangas)

    Maephel
    Maephel
    Ocasional
    Ocasional

    Mensagens : 212
    Créditos : 18
    Cash : 0

    monstro invocar outro monstro (capangas) Empty monstro invocar outro monstro (capangas)

    Mensagem por Maephel em Dom Out 28, 2012 9:04 am

    Salve! Salve! aldeões!

    Me veio recentemente a idéia "tem como um monstro invocar um outro monstro? e o mostro invocado seguir o mostro que o invocou?"

    Viria a ser um sistema em que um boss incocasse outros mobs pra ajudar ele! mas a minha duvida é de como fazer isso!!! alguém saberia como resolver tal dilema? (antes que alguém diga "seja um bom scrpiter" eu já estou buscando conhecimento para tal!)

    Desde de já meu agradecimento!!! monstro invocar outro monstro (capangas) 364988687

    eu já consigo que um mob siga outro com isso aqui (falta melhorar!!!):
    Seguir avançado Por Jamal XVI

    Spoiler:

    Função
    O
    script faz com que o personagem siga algo (personagens,eventos ou até
    mesmo posições) de modo mais "esperto", detectando obstáculos e os
    contornando.

    Modo de Usar
    Quando você for editar o movimento do evento no comando mover evento, clique em chamar script e
    escreva:

    Para seguir personagem:
    Código:
    seguir_avancado
    Para seguir evento

    Código:
    seguir_avancado(id_do_evento)
    Para seguir um posição no mapa


    Código:
    seguir_avancado(posicao_x,posicao_y)

    Código:
    =begin
    Script de Seguir Avançado
    Autor: Jamal XVI
    Função: Faz com que o personagem siga algo (um personagem, um
    evento ou até mesmo de uma uma posição) de uma
    maneira mais 'esperta' detectando obstáculos e os contornando.
    Ultilizando: Na hora que colocar mover evento clique em
    chamar script (em mover_evento) e escreva o seguinte:
    seguir_avancado => desse modo ele seguira o personagem
    seguir_avancado(evento_id) => desse modo ele seguirá um evento
    seguir_avancado(x,y) => desse modo ele seguira até uma posição
    dada do mapa.
    Comandos Adicionais:
    =end
    module Jamal_XVI
      class Seguir
        attr_reader :x, :y
        def initialize(x,y)
          @x = x
          @y = y
        end
      end
    end
    class Game_Character
      def seguir_avancado(val=0,val2=0)
        return if moving?
        if @prefy == nil ; @prefy = 0 ; end
        if @prefx == nil ; @prefx = 0 ; end
        if val == 0 and val2 == 0
          @seguir_alvo = Jamal_XVI::Seguir.new($game_player.x,
          $game_player.y)
        elsif val != 0 and val2 == 0
          evento = $game_map.events[val]
          @seguir_alvo = Jamal_XVI::Seguir.new(evento.x,
          evento.y)
        else
          @seguir_alvo = Jamal_XVI::Seguir.new(val,val2)
        end
        sx = @x - @seguir_alvo.x
        sy = @y - @seguir_alvo.y
        if sx == 0 and sy == 0
          return
        end
        abs_sx = sx.abs
        abs_sy = sy.abs
        if abs_sx == abs_sy
          if pode_x? and pode_y?
            rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
          elsif pode_x?
            abs_sx += 1
          elsif pode_y?
            abs_sy += 1
          else
            return
          end
        end
        if abs_sx > abs_sy
          ver_x(sx,sy)
        else
          ver_y(sy,sx)
        end
      end
      def ver_x(sx,sy=0)
        ty = @y - @seguir_alvo.y
        tx = @x - @seguir_alvo.x
        abs_sx = tx > 0 ? tx :  -tx
        abs_sy = ty > 0 ? ty :  -ty
        unless abs_sx == 0 and abs_sy == 1
          if sx > 0
            ver_x_maior(sy)
          else
            ver_x_menor(sy)
          end
        else
          turn_toward_player
        end
      end
      def ver_y(sy,sx=0)
        ty = @y - @seguir_alvo.y
        tx = @x - @seguir_alvo.x
        abs_sx = tx > 0 ? tx :  -tx
        abs_sy = ty > 0 ? ty :  -ty
        unless abs_sy == 0 and abs_sx == 1
          if sy > 0
            ver_y_maior(sx)
          else
            ver_y_menor(sx)
          end
        else
          turn_toward_player
        end
      end
      def ver_x_maior(sy)
        if passable?(@x,@y,4)
          @prefx = 6
          move_left
        elsif pode_y?
          sy = pegar_sy(sy)
          ver_y(sy)
        else
          move_random
        end
      end
      def ver_x_menor(sy)
        if passable?(@x,@y,6)
          @prefx = 4
          move_right
        elsif pode_y?
          sy = pegar_sy(sy)
          ver_y(sy)
        else
          move_random
        end
      end
      def ver_y_maior(sx)
        if passable?(@x,@y,8)
          @prefy = 2
          move_up
        elsif pode_x?
          sx = pegar_sx(sx)
          ver_x(sx)
        else
          move_random
        end
      end
      def ver_y_menor(sx)
        if passable?(@x,@y,2)
          @prefy = 8
          move_down
        elsif pode_x?
          sx = pegar_sx(sx)
          ver_x(sx)
        else
          move_random
        end
      end
      def verificar_se_pode_y(sy)
        sx = @x - @seguir_alvo.x
        dir = sx > 0 ? 4 : 6
        if sy != 0
          if sy > 0 and passable?(@x,@y-1,dir)
            return true
          elsif sy < 0 and passable?(@x,@y+1,dir)
            return true
          end
        end
        return false
      end
      def verificar_se_pode_x(sx)
        sy = @y - @seguir_alvo.y
        dir = sy > 0 ? 8 : 2
        if sx != 0
          if sx > 0 and passable?(@x-1,@y,dir)
            return true
          elsif sx < 0 and passable?(@x+1,@y,dir)
            return true
          end
        end
        @prefx = 6
        return false
      end
      def pegar_sy(sy)
        if verificar_se_pode_y(sy)
          return sy
        elsif ver_condicao_ad_y
          return 1
        end
        @prefy = 8
        return -1
      end
      def ver_condicao_ad_x
        sx = @x - @seguir_alvo.x
        if passable?(@x,@y,6)
          unless sx > 0 and passable?(@x,@y,4)
            unless @prefx == 6
              return true
            end
          end
        end
        return false
      end
      def ver_condicao_ad_y
        sy = @y - @seguir_alvo.y
        if passable?(@x,@y,2)
          unless sy < 0 and passable?(@x,@y,8)
            unless @prefy == 8
              return true
            end
          end
        end
        return false
      end
      def pegar_sx(sx)
        if verificar_se_pode_x(sx)
          return sx
        elsif ver_condicao_ad_x
          return -1
        end
        return 1
      end
      def pode_x?
        if passable?(@x,@y,6) or
          passable?(@x,@y,4)
          return true
        end
        return false
      end
      def pode_y?
        if passable?(@x,@y,2) or
          passable?(@x,@y,8)
          return true
        end
        return false
      end
    end

      Tópicos similares

      -

      Data/hora atual: Qua Set 18, 2019 11:08 pm