Gestion des directions des PNJ's
2 participants
Page 1 sur 1
Gestion des directions des PNJ's
Description
Cet utilitaire permet de gerer les directions des évènements. Ainsi que leur attribuer un champs de vision annecdotique.
Par Molok et Fabien
Installation
Copier / coller le script au dessus de main
Utilisation
Ce script se décompose en plusieurs fonctions
1.see? 10
: retourne true si le PNJ 10 est dans le champs de vision du PNJ 1 (utiliser 0 pour le heros)
10.seen_by? 1
: retourne true si le PNJ 10 est dans le champs de vision du PNJ1
1.look_at 10
: Tourne un PNJ (1) en direction d'un autre (10).
[1, 2, 3, 4].look_at 10
: Tourne un groupe PNJ (1, 2, 3, 4) en direction d'un autre (10).
(1..9).look_at 10
: Tourne un groupe PNJ (de 1 à 9) en direction d'un PNJ (10).
$game_events[10].scope.ray = 10
: Change le rayon de vision du PNJ 10 de 10 cases
$game_player.scope.ray = 3
: Change le rayon de vision du heros de 3 cases
Look_at peut être utilisé dans des dialogues, par exemple si des PNJs indiquent un autre PNJ dans leur conversation.
Les champs de visions sont simples ils correspondent à un demi cercle en devant le héros. Ils sont limité (par soucis de facilité de paramétrage).
Petit exemple
Cette petite vidéo a été réalisée en 3 minutes (uhu le mapping).
http://vimeo.com/34785442
Cet utilitaire permet de gerer les directions des évènements. Ainsi que leur attribuer un champs de vision annecdotique.
Par Molok et Fabien
Installation
Copier / coller le script au dessus de main
Utilisation
Ce script se décompose en plusieurs fonctions
1.see? 10
: retourne true si le PNJ 10 est dans le champs de vision du PNJ 1 (utiliser 0 pour le heros)
10.seen_by? 1
: retourne true si le PNJ 10 est dans le champs de vision du PNJ1
1.look_at 10
: Tourne un PNJ (1) en direction d'un autre (10).
[1, 2, 3, 4].look_at 10
: Tourne un groupe PNJ (1, 2, 3, 4) en direction d'un autre (10).
(1..9).look_at 10
: Tourne un groupe PNJ (de 1 à 9) en direction d'un PNJ (10).
$game_events[10].scope.ray = 10
: Change le rayon de vision du PNJ 10 de 10 cases
$game_player.scope.ray = 3
: Change le rayon de vision du heros de 3 cases
Look_at peut être utilisé dans des dialogues, par exemple si des PNJs indiquent un autre PNJ dans leur conversation.
Les champs de visions sont simples ils correspondent à un demi cercle en devant le héros. Ils sont limité (par soucis de facilité de paramétrage).
Petit exemple
Cette petite vidéo a été réalisée en 3 minutes (uhu le mapping).
http://vimeo.com/34785442
- Code:
#==============================================================================
# Look At Me Now
# Par Fabien & Molok
#==============================================================================
# API
#==============================================================================
# ** Fixnum
#------------------------------------------------------------------------------
# The class for fixed-length integers that fit into the machine's pointer, which is usually
# 31 bits long. If the result of an operation is out of Fixnum range, it is automatically
# extended into a Bignum.
#==============================================================================
class Fixnum
#--------------------------------------------------------------------------
# * self see other event
#--------------------------------------------------------------------------
def see?(other_event)
((self == 0) ? $game_player : $game_map.events[self]).see?(other_event)
end
#--------------------------------------------------------------------------
# * self is in other scope
#--------------------------------------------------------------------------
def seen_by?(other_event)
((self == 0) ? $game_player : $game_map.events[self]).seen_by?(other_event)
end
#--------------------------------------------------------------------------
# * Events collection look at one event
#--------------------------------------------------------------------------
def look_at(x_id,y=nil)
[self].look_at(x_id, y)
end
end
#==============================================================================
# ** View_Scope
#------------------------------------------------------------------------------
# Define a simple ViewScope
#==============================================================================
class View_Scope
#--------------------------------------------------------------------------
# * Instances variables
#--------------------------------------------------------------------------
attr_accessor :x, :y, :dir, :ray
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(ray = 2)
@x = @y = 0
@ray = 3
@dir = 2
end
#--------------------------------------------------------------------------
# * x, y scoped ?
#--------------------------------------------------------------------------
def in?(x, y)
if @dir == 2
return false if y < @y
elsif @dir == 4
return false if x > @x
elsif @dir == 6
return false if x < @x
elsif @dir == 8
return false if y > @y
end
collide = ((x - @x)**2) + ((y - @y)**2)
return !(collide > (@ray**2))
end
end
#==============================================================================
# ** Game_Character
#------------------------------------------------------------------------------
# This class deals with characters. It's used as a superclass of the
# Game_Player and Game_Event classes.
#==============================================================================
class Game_Character
#--------------------------------------------------------------------------
# * Alias
#--------------------------------------------------------------------------
alias scope_update update
alias scope_initialize initialize
#--------------------------------------------------------------------------
# * Instances variables
#--------------------------------------------------------------------------
attr_accessor :scope
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
scope_initialize
@scope = View_Scope.new
end
#--------------------------------------------------------------------------
# * self is in other scope
#--------------------------------------------------------------------------
def seen_by?(other_event)
return (other_event == 0 ? $game_player : $game_map.events[other_event]).scope.in?(@x, @y)
end
#--------------------------------------------------------------------------
# * self see other event
#--------------------------------------------------------------------------
def see?(other_event)
ev = (other_event == 0) ? $game_player : $game_map.events[other_event]
return @scope.in?(ev.x, ev.y)
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
@scope.dir = @direction
@scope.x = @x
@scope.y = @y
scope_update
end
#--------------------------------------------------------------------------
# * Turn toward Event
#--------------------------------------------------------------------------
def turn_toward(x, y)
sx = @x - x
sy = @y - y
return if sx == 0 and sy == 0
if sx.abs > sy.abs
sx > 0 ? turn_left : turn_right
else
sy > 0 ? turn_up : turn_down
end
end
end
#==============================================================================
# ** Array
#------------------------------------------------------------------------------
# The array class. The elements of an array are arbitrary Ruby objects.
#==============================================================================
class Array
#--------------------------------------------------------------------------
# * Events collection look at one event
#--------------------------------------------------------------------------
def look_at(x_id,y=nil)
if y == nil
ev=(x_id==0 ? $game_player : $game_map.events[x_id])
x,y=ev.x,ev.y
else
x,y=x_id,y
end
self.each do |event|
(event==0 ? $game_player : $game_map.events[event]).turn_toward(x,y)
end
end
end
#==============================================================================
# ** Range
#------------------------------------------------------------------------------
# The range object class
#==============================================================================
class Range
#--------------------------------------------------------------------------
# * Events collection look at one event
#--------------------------------------------------------------------------
def look_at(x_id,y=nil)
((self).to_a).look_at(x_id, y)
end
end
Kolom- Poulet trizo Lv.3
- Messages : 16
Fiche
Palmarès: 1
Spécialité: Script
Avertissements: Aucun
Re: Gestion des directions des PNJ's
Très cool! Ça facilite énormément les phases d'infiltration, ou même permet de gérer facilement le comportement d'ennemis visibles sur la map!
Un script très utile donc, merci Molok (et Fabien)!
Un script très utile donc, merci Molok (et Fabien)!
elm6- Justicier Lv.Zero
- Messages : 2547
Age : 33
Fiche
Palmarès: 2
Spécialité: Ecriture, making
Avertissements: Aucun
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|