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!!!
eu já consigo que um mob siga outro com isso aqui (falta melhorar!!!):
Seguir avançado Por Jamal XVI
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!!!
eu já consigo que um mob siga outro com isso aqui (falta melhorar!!!):
Seguir avançado Por Jamal XVI
- Spoiler:
- FunçãoO
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 UsarQuando você for editar o movimento do evento no comando mover evento, clique em chamar script e
escreva:
Para seguir personagem:
- Código:
seguir_avancado
- Código:
seguir_avancado(id_do_evento)
- 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