Citadin Lv.7
Inscrit le : 15/03/2011 Messages : 167
| Sujet: Gestion des directions des PNJ's Lun 9 Jan 2012 - 15:42 | |
| DescriptionCet utilitaire permet de gerer les directions des évènements. Ainsi que leur attribuer un champs de vision annecdotique. Par Molok et Fabien InstallationCopier / coller le script au dessus de main UtilisationCe 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 exempleCette 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
|
|
Invité
| Sujet: Re: Gestion des directions des PNJ's Lun 9 Jan 2012 - 17:10 | |
| Sympathique, comme toujours ! +2 points de participation ! |
|
Seigneur Lv.18
Age : 28 Inscrit le : 26/12/2010 Messages : 2220
| Sujet: Re: Gestion des directions des PNJ's Lun 9 Jan 2012 - 17:30 | |
| Merci pour ce Script Molok en pluse il y a une Video. |
|
| Sujet: Re: Gestion des directions des PNJ's | |
| |
|