AccueilAccueil  PortailPortail  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  ConnexionConnexion  




Partagez
 

 Gestion des directions des PNJ's

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
XHTMLBoy
Citadin Lv.7
Citadin Lv.7
XHTMLBoy


Masculin Inscrit le : 15/03/2011
Messages : 167

Gestion des directions des PNJ's Empty
MessageSujet: Gestion des directions des PNJ's   Gestion des directions des PNJ's Icon_minitimeLun 9 Jan 2012 - 15:42

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

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
Revenir en haut Aller en bas
http://funkywork.blogspot.com/
Invité
Invité
avatar



Gestion des directions des PNJ's Empty
MessageSujet: Re: Gestion des directions des PNJ's   Gestion des directions des PNJ's Icon_minitimeLun 9 Jan 2012 - 17:10

Sympathique, comme toujours ! +2 points de participation !
Revenir en haut Aller en bas
Brandobscure001
Seigneur Lv.18
Seigneur Lv.18
Brandobscure001


Masculin Age : 27
Inscrit le : 26/12/2010
Messages : 2220

Gestion des directions des PNJ's Empty
MessageSujet: Re: Gestion des directions des PNJ's   Gestion des directions des PNJ's Icon_minitimeLun 9 Jan 2012 - 17:30

Merci pour ce Script Molok Very Happy
en pluse il y a une Video.
Revenir en haut Aller en bas
Contenu sponsorisé




Gestion des directions des PNJ's Empty
MessageSujet: Re: Gestion des directions des PNJ's   Gestion des directions des PNJ's Icon_minitime

Revenir en haut Aller en bas
 

Gestion des directions des PNJ's

Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

 Sujets similaires

-
» Deplacement 4 directions
» [VX] Marcher dans les 8 directions
» Marché 8 directions, en plus approfondi...
» [EventExtender] Condition de directions simplifiées
» Aller dans les 8 directions sur VXAce

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
RPG Maker VX :: Entraide :: Scripts :: Scripts VX - RGSS2 :: Évents & PNJs-
Créer un forum | ©phpBB | Forum gratuit d'entraide | Signaler un abus | Forum gratuit