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



Le Deal du moment :
Code promo Nike : -25% dès 50€ ...
Voir le deal

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 : 28
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
» Marché 8 directions, en plus approfondi...
» [VX] Marcher dans les 8 directions
» [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 | Cookies | Forum gratuit