Partagez
Aller en bas
Berka
Berka
Administrateur

Nombre de messages : 1832
Age : 29
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

Deplacement d'events/hero à la souris Empty Deplacement d'events/hero à la souris

le Sam 13 Déc 2008 - 19:59
Bonsoir, après une après midi de recherche...
j'ai remanié mon dernier script de déplacement à la souris.

Maintenant, vous pouvez sélectionner vos events, pour les déplacer en bloc...
par contre le temps de calcul est assez long... faudra que je revoie le pathfinding.
Deplacement d'events/hero à la souris Sans_t16

a placer au dessus de main:
Code:
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
#        Déplacement/selection d'events a la souris
#  berka                    0.3                    Rgss2
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
#              http://www.rpgmakervx-fr.com
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

#===========================================
# Mouse
#          par Berka d'apres SephirothSpawn
#===========================================
module Berka
  module Deplace_Event
    Commentaire="bouge" # pour distinguer les events déplacables
    Couleur_Cadre_Selection=Color.new(0,255,50,255)
    Couleur_Fond_Selection=Color.new(0,255,50,75)
    Icone='Graphics/system/icone.ico'
  end
end
include  Berka::Deplace_Event
module Mouse
  GetAsyncKeyState=Win32API.new("user32","GetAsyncKeyState",'i','i')
  GetKeyState=Win32API.new("user32","GetKeyState",'i','i')
  SetCursorPos=Win32API.new('user32','SetCursorPos','nn','n')
  GetCursorPo=Win32API.new('user32','GetCursorPos','p','i')
  ScreenToClient=Win32API.new('user32','ScreenToClient','lp','i')
  GetPrivateProfileStringA=Win32API.new('kernel32','GetPrivateProfileStringA','pppplp','l')
  FindWindowA=Win32API.new('user32','FindWindowA','pp','l')
  GetClientRect=Win32API.new('user32','GetClientRect','lp','i')
  GetWindowRect=Win32API.new('user32','GetWindowRect','lp','i')
  game_name="\0"*256
  GetPrivateProfileStringA.call('Game','Title','',game_name,255,".\\Game.ini")
  game_name.delete!("\0")
  @handle=FindWindowA.call('RGSS Player',game_name)
  module_function
  def click?(button)
    return true if @keys.include?(button)
    return false
  end 
  def press?(button)
    return true if @press.include?(button)
    return false
  end
  def set_pos(x_pos=0,y_pos=0)
    width,height=client_size
    if (x_pos.between?(0,width)&&y_pos.between?(0,height))
      SetCursorPos.call(client_pos[0]+x_pos,client_pos[1]+y_pos)
    end
  end
  def update
    @pos=Mouse.pos
    @keys,@press=[],[]
    @keys.push(1)if GetAsyncKeyState.call(1)&0x01==1
    @keys.push(2)if GetAsyncKeyState.call(2)&0x01==1
    @keys.push(3)if GetAsyncKeyState.call(4)&0x01==1
    @press.push(1)if pressed?(1)
    @press.push(2)if pressed?(2)
    @press.push(3)if pressed?(4)
  end 
  def pressed?(key)
    return true unless GetKeyState.call(key).between?(0,1)
    return false
  end
  def global_pos
    pos=[0,0].pack('ll')
    GetCursorPo.call(pos)!=0 ? (return pos.unpack('ll')):(return nil)
  end
  def pos
    x,y=screen_to_client(*global_pos)
    width,height=client_size
    begin
      x=0 if x<=0;y=0 if y<=0
      x=width if x>=width;y=height if y>=height
      return x,y
    end
  end
  def screen_to_client(x,y)
    return nil unless x&&y
    pos=[x,y].pack('ll')
    ScreenToClient.call(@handle,pos)!=0?(return pos.unpack('ll')):(return nil)
  end
  def client_size
    rect=[0,0,0,0].pack('l4')
    GetClientRect.call(@handle,rect)
    right,bottom=rect.unpack('l4')[2..3]
    return right,bottom
  end
  def client_pos
    rect=[0,0,0,0].pack('l4')
    GetWindowRect.call(@handle,rect)
    left,upper=rect.unpack('l4')[0..1]
    return left+4,upper+30
  end 
  def grid
    return nil if @pos.nil?
    return [(@pos[0]+$game_map.display_x/8)/32,(@pos[1]+$game_map.display_y/8)/32]
  end
end
#===========================================
# Pathfinding
#                        par SephirothSpawn
#===========================================
include Input
class Game_Character
  alias nf_pf_game_character_initialize initialize
  alias nf_pf_game_character_update update
  attr_accessor :map
  attr_accessor :runpath
  def initialize
    nf_pf_game_character_initialize
    @map,@runpath=nil,false
  end
  def update
    run_path if @runpath
    nf_pf_game_character_update
  end
  def run_path
    return if moving?
    step=@map[@x,@y]
    (@map,@runpath=nil,false;return)if step==1
    case rand(2)
    when 0
      move_right if @map[@x+1,@y]==step-1&&step!=0
      move_down if @map[@x,@y+1]==step-1&&step!=0
      move_left if @map[@x-1,@y]==step-1&&step!=0
      move_up if @map[@x,@y-1]==step-1&&step!=0
    when 1
      move_up if @map[@x,@y-1]==step-1&&step!=0
      move_left if @map[@x-1,@y]==step-1&&step!=0
      move_down if @map[@x,@y+1]==step-1&&step!=0
      move_right if @map[@x+1,@y]==step-1&&step!=0
    end
  end
  def find_path(x,y)
    sx,sy=@x,@y
    result=setup_map(sx,sy,x,y)
    @runpath,@map=result[0],result[1]
    @map[sx,sy]=result[2] if !result[2].nil?
  end
  def clear_path;@map,@runpath=nil,false;end
  def setup_map(sx,sy,ex,ey)
    map=Table.new($game_map.width,$game_map.height)
    map[ex,ey]=1
    old_positions,new_positions=[],[]
    old_positions.push([ex,ey])
    depth=10
    depth.upto(100){|step|
      loop do
        break if old_positions[0].nil?
        x,y=old_positions.shift
        return [true,map,step] if x==sx&&y+1==sy
        if $game_map.passable?(x,y)&&map[x,y+1]==0
          map[x,y+1]=step
          new_positions.push([x,y+1])
        end
        return [true,map,step] if x-1==sx&&y==sy
        if $game_map.passable?(x,y)&&map[x-1,y]==0
          map[x-1,y]=step
          new_positions.push([x-1,y])
        end
        return [true,map,step] if x+1==sx&&y==sy
        if $game_map.passable?(x,y)&&map[x+1,y]==0
          map[x+1,y]=step
          new_positions.push([x+1,y])
        end
        return [true,map,step] if x==sx&&y-1==sy
        if $game_map.passable?(x,y)&&map[x,y-1]==0
          map[x,y-1]=step
          new_positions.push([x,y-1])
        end
      end
      old_positions=new_positions
      new_positions=[]}
    return [false,nil,nil]
  end
end
class Game_Map
  alias pf_game_map_setup setup
  def setup(map_id)
    pf_game_map_setup(map_id)
    $game_player.clear_path
    for event in events.values
      event.clear_path
    end
  end
end
#===========================================
# Rect Select
#                                  par Berka
#===========================================
class Rect_Select<Sprite
  def initialize
    super
    self.x,self.y=Mouse.pos
    self.bitmap=Bitmap.new(544,416)
    self.visible=false
  end
  def update(ox=0,oy=0)
    self.visible=true
    self.bitmap.clear
    (Mouse.pos[0]-ox>0)?(self.x=ox;@cib_x=Mouse.pos[0]-self.x):(self.x=Mouse.pos[0];@cib_x=ox-Mouse.pos[0])
    (Mouse.pos[1]-oy>0)?(self.y=oy;@cib_y=Mouse.pos[1]-self.y):(self.y=Mouse.pos[1];@cib_y=oy-Mouse.pos[1])
    self.bitmap.fill_rect(0,0,@cib_x,@cib_y,Couleur_Cadre_Selection)
    self.bitmap.fill_rect(1,1,@cib_x-2,@cib_y-2,Couleur_Fond_Selection)
  end
  def chk_dessous?(x,y)
    x-=$game_map.display_x/8
    y-=$game_map.display_y/8
    return true if x.between?(self.x,@cib_x)&&y.between?(self.y,@cib_y)
    return false
  end
end
#===========================================
# Scene_Map: Select
#                                  par Berka
#===========================================
class Scene_Map<Scene_Base
  alias :select_update :update
  alias :select_start :start
  alias :select_terminate :terminate
  def start
    select_start
    @rect=Rect_Select.new
    @x,@y,@events=Mouse.pos[0],Mouse.pos[1],[]
    @base=[]
  end
  def update
    Mouse.update
    select_update
    @rect.visible=false
    if !Mouse.press?(1);@x,@y=Mouse.pos[0],Mouse.pos[1]
    else;@rect.visible=true;@rect.update(@x,@y)
      for event in $game_map.events.values
        if event.list[0].parameters==Commentaire.to_a
          (@events << event) if @rect.chk_dessous?(event.x*32,event.y*32)
        end
      end
    end
    if Mouse.click?(1)
      for event in $game_map.events.values
        if event.list[0].parameters==Commentaire.to_a
          @events << event if Mouse.grid==[event.x,event.y]
        end
      end
    elsif Mouse.click?(2)
      if !@events.empty?
        @events.each{|event|event.find_path(Mouse.grid[0],Mouse.grid[1]) 
        @events.delete(event) if event.runpath}
        @events.clear
      else;$game_player.find_path(Mouse.grid[0],Mouse.grid[1])
      end 
    elsif Mouse.click?(3)
      @events.clear
    end
  end
  def terminate
    select_terminate
    @rect.dispose
  end
end


Dernière édition par berka le Dim 14 Déc 2008 - 18:53, édité 4 fois
Korndor
Korndor
Staffeux retraité

Nombre de messages : 4959
Age : 106
Localisation : Erem Vehyx
Distinction : Champion de boxe et au lit ! :O [Wax]
Être Mythique [Mister]
Papi Korndor qui a l'ostéoporose [Skillo]
Soldat Ikéa [Coco']
Un bonhomme, un vrai ! [Neresis]
Vieillard acariâtre [Didier Gustin]
Date d'inscription : 16/12/2007
https://www.rpgmakervx-fr.com/

Deplacement d'events/hero à la souris Empty Re: Deplacement d'events/hero à la souris

le Sam 13 Déc 2008 - 20:09
Encore un script génial made in berka; je le teste après manger ^^

Bon, pour toi j'éclate aussi la limite des points de scripts x)
Berka
Berka
Administrateur

Nombre de messages : 1832
Age : 29
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

Deplacement d'events/hero à la souris Empty Re: Deplacement d'events/hero à la souris

le Sam 13 Déc 2008 - 20:12
Yeeeeessssssss ! Deplacement d'events/hero à la souris 171548 euh... merci
Alcide Rouge
Alcide Rouge
Membre

Nombre de messages : 335
Age : 26
Localisation : Paris centre
Distinction : aucune
Date d'inscription : 13/04/2008
http://sites.google.com/site/devilprojectgame/Home

Deplacement d'events/hero à la souris Empty Re: Deplacement d'events/hero à la souris

le Sam 13 Déc 2008 - 20:27
Salut !

Ton script est superbe. Je pense que je vais l'utiliser pour faciliter les déplacements dans mon jeu(les décors son entièrement fait en dessin, et les joueurs ne vont pas toujours savoir comment avancer. Bref, ça rendra mon jeu plus fluide je pense)

Juste une petite question. Quand on fait un clique droit, sur un endroit où le déplacement est possible, ce serais super si tu pouvais rajouter des petites flèches vertes, où un truc du genre. Et quand l'endroit où l'on clique est inaccessible, des petites flèches rouges par exemple. Si c'est à moi de la faire, désolé, je n'y connais pas grand chose en script. Si tu sais comment on fait, tu pourra m'expliquer s'il te plaît ? Sinon bah tant pis, je me débrouillerais
:P
Merci du partage Smile
Berka
Berka
Administrateur

Nombre de messages : 1832
Age : 29
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

Deplacement d'events/hero à la souris Empty Re: Deplacement d'events/hero à la souris

le Sam 13 Déc 2008 - 21:09
j'vais voir ca !

edit: si la case est passable ? ou si elle est accessible ?
Alcide Rouge
Alcide Rouge
Membre

Nombre de messages : 335
Age : 26
Localisation : Paris centre
Distinction : aucune
Date d'inscription : 13/04/2008
http://sites.google.com/site/devilprojectgame/Home

Deplacement d'events/hero à la souris Empty Re: Deplacement d'events/hero à la souris

le Sam 13 Déc 2008 - 21:35
:gné:

Je comprends pas XD

Bon, je vais ré expliquer, en espérant te répondre ^^

Si tu clique sur une case ou le héros peut aller, où il peut poser les pieds dessus, il y a une flèche verte. Par contre, si tu clique sur une case où le héros ne peut pas marcher, poser les pieds sur la case (un monstre bloque le passage, où alors, c'est tout bonnement que tu as cliqué sur un mur où dans le ciel), il y a une flèche rouge.

Voilà. J'espère avoir répondus. En tout cas merci d'essayer de faire ça, c'est très gentil Very Happy
Berka
Berka
Administrateur

Nombre de messages : 1832
Age : 29
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

Deplacement d'events/hero à la souris Empty Re: Deplacement d'events/hero à la souris

le Sam 13 Déc 2008 - 21:57
je demandais:

la croix signifie que :
la case est infrachissable ?
ou que le hero ne peut pas atteindre la case parce que son trajet est barré ?
Alcide Rouge
Alcide Rouge
Membre

Nombre de messages : 335
Age : 26
Localisation : Paris centre
Distinction : aucune
Date d'inscription : 13/04/2008
http://sites.google.com/site/devilprojectgame/Home

Deplacement d'events/hero à la souris Empty Re: Deplacement d'events/hero à la souris

le Sam 13 Déc 2008 - 22:04
La croix sur rpg maker ? C'est plus clair. C'est : la case est infranchissable.

Mais pour ton script, ce serais mieux que tu fasse cette option : le héros ne peut pas atteindre la case parce que son trajet est barré. Imagine, tu clique sur un endroit où tu n'a pas mis de croix, il y a les flèches vertes, et là, tu te rends compte que en fait, tu peux pas y aller. C'est frustrant. Mais si c'est trop compliqué pour ton script, fait ça : la case est infranchissable. je pense que se sera plus simple.
Berka
Berka
Administrateur

Nombre de messages : 1832
Age : 29
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

Deplacement d'events/hero à la souris Empty Re: Deplacement d'events/hero à la souris

le Sam 13 Déc 2008 - 22:20
c'est bon... j'ai zappé des events qui faisaient boucle, c'est plus rapide maintenant !
zoneneutre
zoneneutre
Membre

Nombre de messages : 129
Age : 31
Distinction : aucune
Date d'inscription : 17/03/2008

Deplacement d'events/hero à la souris Empty Re: Deplacement d'events/hero à la souris

le Dim 14 Déc 2008 - 1:10
Oulà berka Dieu du scrip,t encore un qui va me servir comme script !
Vraiment la plus que chapeau.
kordarr
kordarr
Modérateur

Nombre de messages : 1838
Age : 29
Localisation : île de la réunion, Le Tampon.
Distinction : Auto-proclamé sex-symbol de la commu'
Frère jumeau de Jonathan ( Secret Story )
Exhibitionniste en herbe
[Mist' & Coco' Smile]
Fan n°1 de Coco'
Psychopathe en chef
Date d'inscription : 05/11/2008

Deplacement d'events/hero à la souris Empty Re: Deplacement d'events/hero à la souris

le Dim 14 Déc 2008 - 1:31
Et bien Berka, tu nous étonnera toujours...

Testé et approuvé, ça ne me servira pas à moi, mais c'est un truc intéressant...

Encore bravo.

Ps: 151/150, ça c'est de l'explosage.

On devrais te nommer dieu Ruby-ste...
ASHKA
ASHKA
Membre

Nombre de messages : 242
Age : 37
Localisation : Omnipresent !!
Distinction : aucune
Date d'inscription : 28/10/2008

Deplacement d'events/hero à la souris Empty Re: Deplacement d'events/hero à la souris

le Dim 14 Déc 2008 - 11:06
Ca, c'est vraiment tres interessant !!
Il y a encore quelques defauts genant, mais ça me plait bien.
( Dommage, le pathfinding de SephirothSpawn ne tiens compte que du decors pour calculer le trajet et pas des events ... )

Bon travail !!

Tretian : 150, c'est pas assez !!
Mets lui une jauge infini, et il arrivera à la remplir ...

ASHKA
Korndor
Korndor
Staffeux retraité

Nombre de messages : 4959
Age : 106
Localisation : Erem Vehyx
Distinction : Champion de boxe et au lit ! :O [Wax]
Être Mythique [Mister]
Papi Korndor qui a l'ostéoporose [Skillo]
Soldat Ikéa [Coco']
Un bonhomme, un vrai ! [Neresis]
Vieillard acariâtre [Didier Gustin]
Date d'inscription : 16/12/2007
https://www.rpgmakervx-fr.com/

Deplacement d'events/hero à la souris Empty Re: Deplacement d'events/hero à la souris

le Dim 14 Déc 2008 - 11:08
Je vais essayer un truc xD
Aussi berka, la sélection ne peut se faire que depuis le haut-gauche vers le bas droite; on ne peut pas rendre possible la sélection depuis les quatre coins? Smile

edit: impossible d'insérer des lettres dans une jauge ^^"
Je remet comme avant Smile
Elscorto
Elscorto
Membre

Nombre de messages : 486
Age : 34
Localisation : Dans sa tombe en ce moment
Distinction : Homme de goût en chef.
Date d'inscription : 10/07/2008

Deplacement d'events/hero à la souris Empty Re: Deplacement d'events/hero à la souris

le Dim 14 Déc 2008 - 13:22
Yeah excellent berka, on va pouvoir faire du Alerte Rouge avec ton scripts Deplacement d'events/hero à la souris 697634

Tret' idem qu'ASHKA,mets une barre infini à Berka, il le mérite bien
Berka
Berka
Administrateur

Nombre de messages : 1832
Age : 29
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

Deplacement d'events/hero à la souris Empty Re: Deplacement d'events/hero à la souris

le Dim 14 Déc 2008 - 15:04
nouvelle version: possibilité de selectionner dans toutes les directions !
Korndor
Korndor
Staffeux retraité

Nombre de messages : 4959
Age : 106
Localisation : Erem Vehyx
Distinction : Champion de boxe et au lit ! :O [Wax]
Être Mythique [Mister]
Papi Korndor qui a l'ostéoporose [Skillo]
Soldat Ikéa [Coco']
Un bonhomme, un vrai ! [Neresis]
Vieillard acariâtre [Didier Gustin]
Date d'inscription : 16/12/2007
https://www.rpgmakervx-fr.com/

Deplacement d'events/hero à la souris Empty Re: Deplacement d'events/hero à la souris

le Dim 14 Déc 2008 - 15:43
Deplacement d'events/hero à la souris 344805

Si je pouvais, je te la mettrais cette barre infinie! Laughing

Merci pour tout, berka! Smile
Berka
Berka
Administrateur

Nombre de messages : 1832
Age : 29
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

Deplacement d'events/hero à la souris Empty Re: Deplacement d'events/hero à la souris

le Dim 14 Déc 2008 - 16:09
houla, je viens de voir un gros pb dans les grandes maps... je m'en occupe tout de suite !
Berka
Berka
Administrateur

Nombre de messages : 1832
Age : 29
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

Deplacement d'events/hero à la souris Empty Re: Deplacement d'events/hero à la souris

le Dim 14 Déc 2008 - 17:58
Nouvelle version corrigée !
Arayashiki
Arayashiki
Membre

Nombre de messages : 655
Age : 29
Localisation : Trois lettres me demangent. Oserai-je ?
Distinction : FUCKING nouveau dieu du mal. Gros connard en chef.
Date d'inscription : 18/08/2008

Deplacement d'events/hero à la souris Empty Re: Deplacement d'events/hero à la souris

le Dim 14 Déc 2008 - 20:48
Berka ... Une fois le site finis j'en ai rien à foutre tu viens squatter chez moi et tu m'apprend tout en direct live :P. Franchement respect. Berka 9ème dans en scripting-no-jutsu rajoute ça dans son grade ^^ ( ou distinction).
Oryps
Oryps
Membre

Nombre de messages : 60
Distinction : aucune
Date d'inscription : 15/05/2008

Deplacement d'events/hero à la souris Empty Re: Deplacement d'events/hero à la souris

le Dim 14 Déc 2008 - 21:31
Waaaah *o*
Mon vocabulaire n'est pas assez développé pour décrire à quel point j'aime ce script 8D
berka, on dirait que t'as inventé le RGSS2 ^^
legodjinn
legodjinn
Membre

Nombre de messages : 15
Age : 24
Localisation : Kivala - Zone Portuaire, Dorlan, Ewydor.
Distinction : aucune
Date d'inscription : 03/08/2009

Deplacement d'events/hero à la souris Empty Re: Deplacement d'events/hero à la souris

le Mar 11 Aoû 2009 - 8:14
Merci pour ce script Berka,mais j'ai un p'tit problème (apparemment,je suis les seul! -_-').

Lorsque je démarre mon jeu,un message d'erreur s'affiche en relatant les exploits de la linge 21 du script!

Apparemment,il y a un problème à!

include Berka::Deplace_Event
module Mouse

Merci à ce qui peuvent résoudre mon problème!

Note:Le message dit que Mouse n'est pas un module (Mouse is not Module).
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum