Partagez
Aller en bas
Bencoco
Bencoco
Membre

Nombre de messages : 31
Age : 29
Localisation : Alsace
Distinction : aucune
Date d'inscription : 04/03/2012

Le pouvoir absolu, la possession mentale à la portée de tous ! Empty Le pouvoir absolu, la possession mentale à la portée de tous !

le Mar 15 Jan 2013 - 22:59
Amis Makers, je suis très heureux de vous présenter ma dernière création !

Qui n'a jamais rêvé de pouvoir contrôler l'esprit des autres ? hein ? si si je sais que vous y avez déjà pensé au moins une fois ! même pas ? mince suis-je donc si différent ? Enfin là n'est pas la question !

Grâce à ce tout petit script tout simple vous permettrez à votre joueur de contrôler n'importe quel PNJ sur la MAP !!! C'est pas génial ?

Comment ça marche me direz-vous ! eh bien il suffit d'insérer le code suivant sous Materials comme d'habitude :


Code:
#==============================================================================
# ** Scene_Possession
#-------------------------------------------------------------------------------
#  Ce Script est une création originale de Bencoco,
#  Il peut être utilisé pour tout types de projet
#  à condition de me citer dans les credits :-D
#------------------------------------------------------------------------------
#  Ce Script permet de contrôler les PNJ sur la MAP
#  Il existe deux façon de posséder les PNJ :
#  - soit en se plaçant derrière eux
#    pour cele il faut écrire #c dans le nom du PNJ
#  - soit en étant simplement positionné à coté
#    pour cele il faut écrire #s dans le nom du PNJ
#
#            Enjoy !
#
#==============================================================================

#==============================================================================
# ** Scene_Map
#------------------------------------------------------------------------------
#  This class performs the map screen processing.
#==============================================================================

class Scene_Map < Scene_Base
 
  #--------------------------------------------------------------------------
  # * Constante
  #--------------------------------------------------------------------------
 
  TEMPS_DE_POSSESSION = 10
  SON_POSSESSION = "Darkness7"
  SWITCH_DE_CONTROLE = 1
  #--------------------------------------------------------------------------
  # * Start Processing
  #--------------------------------------------------------------------------
  def start
    super
    SceneManager.clear
    $game_player.straighten
    $game_map.refresh
    $game_message.visible = false
    create_spriteset
    create_all_windows
    @menu_calling = false
    #interrupteur qui détermine l'appel de la fonction possession
    @possession_calling = true
    $recup = []
    $possession_en_cours = false
  end

  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    $game_map.update(true)
    $game_player.update
    $game_timer.update
    @spriteset.update
    #mise à jour pour le décompte
    update_possession
    update_scene if scene_change_ok?
  end
  #--------------------------------------------------------------------------
  # * Update Scene Transition
  #--------------------------------------------------------------------------
  def update_scene
    check_gameover
    update_transfer_player unless scene_changing?
    update_encounter unless scene_changing?
    update_call_menu unless scene_changing?
    #met à jour l'appel de la fonction possession
    update_call_possession unless scene_changing?
    update_call_debug unless scene_changing?
  end
  #--------------------------------------------------------------------------
  # * Détermine si l'on a appuyé sur Shifr pour appeler Possession
  #--------------------------------------------------------------------------
  def update_call_possession
    #si aucun timer n'est en cours
    unless $game_timer.working? or $game_switches[SWITCH_DE_CONTROLE] == false
      #détermine l'appui sur la touche A
      @possession_calling ||= Input.trigger?(:A)
      call_possession if @possession_calling && !$game_player.moving?
    end
  end
 
  #--------------------------------------------------------------------------
  # * code qui appel la possession
  #--------------------------------------------------------------------------
  def call_possession

    #pour chaque event sur la map
    $game_map.events.each do |i|
      #détermine l'id de l'event
      event_id = i[0]
      #détermine la position x du joueur
      pos_player_x = $game_player.x
      #détermine la position y du joueur
      pos_player_y = $game_player.y
      #détermine la direction du joueur
      player_direction = $game_player.direction
      #détermine le nom du chara et son index
      original_graphic_p = [$game_player.character_name, $game_player.character_index]
      #détermine la position x de l'event
      pos_event_x = $game_map.events[event_id].x
      #détermine la position y de l'event
      pos_event_y = $game_map.events[event_id].y
      #détermine la direction de l'event
      event_direction = $game_map.events[event_id].direction
      #détermine si il s'agit d'une possession complexe
      possession_complexe = ($game_map.events[event_id].name =~ /#c/)
      #détermine si il s'agit d'une possession simple
      possession_simple = ($game_map.events[event_id].name =~ /#s/)
      #si c'est une possession simple
      if possession_simple != nil
       
        #if (pos_player_x == pos_event_x and ( pos_player_y + 1 == pos_event_y or pos_player_y - 1 == pos_event_y )) or (pos_player_y  == pos_event_y and (pos_player_x + 1 == pos_event_x or pos_player_x - 1 == pos_event_x))
         
        if pos_event_x >= pos_player_x-1 and pos_event_x <= pos_player_x+1 and pos_event_y >= pos_player_y-1 and pos_event_y <= pos_player_y+1
         
          original_graphic_e = [$game_map.events[event_id].character_name, $game_map.events[event_id].character_index]
          $recup = [event_id, pos_player_x ,pos_player_y,original_graphic_e,original_graphic_p,pos_event_x,pos_event_y]
          possede
          break
        end
     
      end
     
      if possession_complexe != nil

          if pos_player_x == pos_event_x
           
            if pos_player_y + 1 == pos_event_y and player_direction == 2 and event_direction == 2

              original_graphic_e = [$game_map.events[event_id].character_name, $game_map.events[event_id].character_index]
              $recup = [event_id, pos_player_x ,pos_player_y,original_graphic_e,original_graphic_p,pos_event_x,pos_event_y]
              possede
              break
           
            end
         
            if pos_player_y - 1 == pos_event_y and player_direction == 8 and event_direction == 8

              original_graphic_e = [$game_map.events[event_id].character_name, $game_map.events[event_id].character_index]
              $recup = [event_id, pos_player_x ,pos_player_y,original_graphic_e,original_graphic_p,pos_event_x,pos_event_y]
              possede
              break

            end
           
          end
#===============================================================================
          if pos_player_y == pos_event_y
           
            if pos_player_x - 1 == pos_event_x and player_direction == 4 and event_direction == 4

              original_graphic_e = [$game_map.events[event_id].character_name, $game_map.events[event_id].character_index]
              $recup = [event_id, pos_player_x ,pos_player_y,original_graphic_e,original_graphic_p,pos_event_x,pos_event_y]
              possede
              break

            end
         
            if pos_player_x + 1 == pos_event_x and player_direction == 6 and event_direction == 6

              original_graphic_e = [$game_map.events[event_id].character_name, $game_map.events[event_id].character_index]
              $recup = [event_id, pos_player_x ,pos_player_y,original_graphic_e,original_graphic_p,pos_event_x,pos_event_y]
              possede
              break
             
            end
           
          end
       
      end #fin if complexe ou simple
     
    end #fin do
     
    @possession_calling = false
   
  end
 
#===============================================================================
# - code qui effectue la possession
#===============================================================================

  def possede
# $recup = [0=event_id,
#          1=pos_player_x,2=pos_player_y,3=original_graphic_e,
#          4=original_graphic_p,5=pos_event_x,6=pos_event_y,
#          7=map_origin,8=move_type,9=dir_player]

    player_graph = $recup[4]
    event_graph = $recup[3]
   
    dir1 = $game_map.events[$recup[0]].direction
    dir2 = $game_player.direction
    trigger = $game_map.events[$recup[0]].trigger
   
    map_origin =  $game_map.map_id
    move_type = $game_map.events[$recup[0]].move_type
   
    $recup.push(map_origin,move_type,dir2,trigger)

    RPG::SE.new(SON_POSSESSION,80,100).play
   
    $game_player.set_graphic(event_graph[0],event_graph[1])
    $game_player.moveto($recup[5] ,$recup[6] )
    $game_player.set_direction(dir1)
       
    $game_map.events[$recup[0]].set_graphic(player_graph[0],player_graph[1])
    $game_map.events[$recup[0]].moveto($recup[1] ,$recup[2] )
    $game_map.events[$recup[0]].move_type = 0
    $game_map.events[$recup[0]].trigger = nil
    $game_map.events[$recup[0]].set_direction(dir2)

   

    $game_timer.start(TEMPS_DE_POSSESSION * Graphics.frame_rate)
    $possession_en_cours = true
   
  end
 
#===============================================================================
# - depossede
#===============================================================================

  def depossede


    player_graph = $recup[4]
    event_graph = $recup[3]

    fadeout(30)
   
    if $game_map.map_id != $recup[7]
     
      $game_player.reserve_transfer($recup[7],$recup[1] ,$recup[2])
      $game_player.perform_transfer
     
      $game_map.events[$recup[0]].set_graphic("",0)
      $game_map.events[$recup[0]].erase
      $game_map.events[$recup[0]].moveto(0, 0)
     
    else
     
      $game_map.events[$recup[0]].set_graphic(event_graph[0],event_graph[1])
      $game_map.events[$recup[0]].moveto($game_player.x, $game_player.y)
      $game_map.events[$recup[0]].set_direction($game_player.direction)
      $game_map.events[$recup[0]].move_type = $recup[8]
     
    end
   
    $game_player.set_graphic(player_graph[0],player_graph[1])
    $game_player.moveto($recup[1] ,$recup[2] )
    $game_player.set_direction($recup[9])
   
    $game_map.events[$recup[0]].trigger = $recup[10]
   
    $possession_en_cours = false

    RPG::SE.new(SON_POSSESSION,80,100).play
   
    fadein(30)
  end
#===============================================================================
# - Mise à jour pendant timer
#===============================================================================
 
  def update_possession
    if $game_timer.working?
      if $game_timer.sec ==0
        $game_timer.stop

        depossede
      end
    end
  end
end

class Game_Map

  #--------------------------------------------------------------------------
  # * Setup
  #--------------------------------------------------------------------------
  def setup(map_id)
    @map_id = map_id
    @map = load_data(sprintf("Data/Map%03d.rvdata2", @map_id))
    @tileset_id = @map.tileset_id
    @display_x = 0
    @display_y = 0

    referesh_vehicles
    setup_events
    setup_scroll
    setup_parallax
    setup_battleback
    @need_refresh = false
    initialize_event
  end
 
  def initialize_event

    if $possession_en_cours == true and $game_map.map_id == $recup[7]
     
    player_graph = $recup[4]

    $game_map.events[$recup[0]].set_graphic(player_graph[0],player_graph[1])

    $game_map.events[$recup[0]].moveto($recup[1] ,$recup[2] )
    $game_map.events[$recup[0]].move_type = 0


    end
 
  end

 
end
 
 

class Game_Event < Game_Character

  attr_accessor  :name
  attr_accessor  :move_type
  attr_accessor  :trigger
  #--------------------------------------------------------------------------
  # * Object Initialization
  #    event:  RPG::Event
  #--------------------------------------------------------------------------
  def initialize(map_id, event)
    super()
    @map_id = map_id
    @event = event
    @id = @event.id
    #permet d'utiliser le nom de l'event
    @name = @event.name
   
    @move_type = move_type
   
    @trigger = trigger
    moveto(@event.x, @event.y)
    refresh
  end
 

end

Le code est activable ( pas certain que ça soit français...) par un bouton "in game" que vous définissez avec :

Code:
SWITCH_DE_CONTROLE = 1

Ensuite pour qu'un PNJ puisse être contrôlable, il faut insérer les caractères #c ou #s dans son nom. Quelle différence ?
si vous appelez votre PNJ "Marguerite#c" le joueur devra être derrière le PNJ et regarder dans sa direction pour pouvoir en prendre le contrôle comme ceci :

Le pouvoir absolu, la possession mentale à la portée de tous ! Exempl10

si vous appelez votre PNJ "Marguerite#s" le joueur pourra être n'importe où autour du PNJ en regardant dans n'importe quelle direction pour pouvoir en prendre le contrôle comme ceci :

Le pouvoir absolu, la possession mentale à la portée de tous ! Exempl11

si vous le souhaitez vous pouvez modifier le temps que dure la possession grâce à cette variable :

Code:
TEMPS_DE_POSSESSION = 10

et voilà je crois que j'ai tout dit si vous avez des idées d'amélioration n'hésitez pas à les soumettre !

/!\ /!\ /!\ Comme ce script touche un peut à d'autres scripts de la base de donnée comme Scene_Map, Game_Map et Game_Event, il peut générer différents bugs avec d'autres scripts /!\ /!\ /!\

Bon Making à tous ! et à bientot pour d'autres scripts délirants !


+5 pts de participation
KrysTof
KrysTof
Membre

Nombre de messages : 437
Age : 25
Localisation : Bretagne
Distinction : aucune
Date d'inscription : 12/12/2008

Le pouvoir absolu, la possession mentale à la portée de tous ! Empty Re: Le pouvoir absolu, la possession mentale à la portée de tous !

le Mar 15 Jan 2013 - 23:14
Pas mal !! Cela peut toujours servir ! Merci du partage !! Very Happy
somereal
somereal
Membre

Nombre de messages : 378
Age : 23
Localisation : Belgium for ever!
Distinction : Use sans scrupule de blagues et remarques douteuses et délirantes. A prendre au 3e^n degré (où n est égal au nombre de neurones qu'ils vous reste après chaque lecture de ses commentaires). [Pharazon]
Date d'inscription : 14/01/2013

Le pouvoir absolu, la possession mentale à la portée de tous ! Empty Re: Le pouvoir absolu, la possession mentale à la portée de tous !

le Mar 15 Jan 2013 - 23:16
Si ça c'est pas une idée de fou!

Tu te rend compte ce que ça implique?

Tu vas changer le monde !

Je t'aime!

Balbereith
Balbereith
Staffeux retraité

Nombre de messages : 4129
Age : 26
Localisation : dans l'ombre...
Distinction : Péripatéticienne à temps perdu
Helly n°666 [Coco' ;D]
mon ptit balbounet p'tit jardinier en herbe(les râteaux ça le connait) [tonton Adurna]
Cultivateur professionnel de la commu' (il a de bons outils en de nombreux exemplaires Le pouvoir absolu, la possession mentale à la portée de tous ! 522164 ) [Coco' Smile]
Date d'inscription : 13/05/2009

Le pouvoir absolu, la possession mentale à la portée de tous ! Empty Re: Le pouvoir absolu, la possession mentale à la portée de tous !

le Jeu 17 Jan 2013 - 23:08
Merci pour ce script Wink
+5 pts de participation ^^
lokjdu27110
lokjdu27110
Membre

Nombre de messages : 21
Age : 17
Localisation : Haute Normandie
Distinction : aucune
Date d'inscription : 31/08/2014

Le pouvoir absolu, la possession mentale à la portée de tous ! Empty Re: Le pouvoir absolu, la possession mentale à la portée de tous !

le Dim 31 Aoû 2014 - 15:01
Super script ! Merci ! Smile
Gold Baron
Gold Baron
Membre

Nombre de messages : 89
Distinction : aucune
Date d'inscription : 14/04/2015

Le pouvoir absolu, la possession mentale à la portée de tous ! Empty Re: Le pouvoir absolu, la possession mentale à la portée de tous !

le Sam 2 Mai 2015 - 16:01
Oui je sais, ça pue le nécropost, mais je n'ai pas réussi à faire marcher ce script, est ce le cas de tout le monde ? Comme il n'y pas beaucoup de commentaires dessus.
Peut on donner des capacités aux PNJ ?
lokjdu27110
lokjdu27110
Membre

Nombre de messages : 21
Age : 17
Localisation : Haute Normandie
Distinction : aucune
Date d'inscription : 31/08/2014

Le pouvoir absolu, la possession mentale à la portée de tous ! Empty Re: Le pouvoir absolu, la possession mentale à la portée de tous !

le Dim 3 Mai 2015 - 13:44
Moi, sa a marché (Vive les necropost, j'utilise meme plus RPG Maker pour le moment)
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum