Deplacement d'events/hero à la souris
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.
a placer au dessus de main:
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.
a placer au dessus de main:
- Code:
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# Déplacement/selection d'events a la souris
# berka 0.3 Rgss2
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# http://rpgmakervx.1fr1.net
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
#===========================================
# 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
- KorndorStaffeux retraité
- Nombre de messages : 4959
Age : 111
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
Re: Deplacement d'events/hero à la souris
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)
Bon, pour toi j'éclate aussi la limite des points de scripts x)
Re: Deplacement d'events/hero à la souris
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
Merci du partage
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
Merci du partage
Re: Deplacement d'events/hero à la souris
Sam 13 Déc 2008 - 21:09
j'vais voir ca !
edit: si la case est passable ? ou si elle est accessible ?
edit: si la case est passable ? ou si elle est accessible ?
Re: Deplacement d'events/hero à la souris
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
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
Re: Deplacement d'events/hero à la souris
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é ?
la croix signifie que :
la case est infrachissable ?
ou que le hero ne peut pas atteindre la case parce que son trajet est barré ?
Re: Deplacement d'events/hero à la souris
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.
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.
Re: Deplacement d'events/hero à la souris
Sam 13 Déc 2008 - 22:20
c'est bon... j'ai zappé des events qui faisaient boucle, c'est plus rapide maintenant !
- zoneneutreMembre
- Nombre de messages : 129
Age : 36
Distinction : aucune
Date d'inscription : 17/03/2008
Re: Deplacement d'events/hero à la souris
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.
Vraiment la plus que chapeau.
- kordarrModérateur
- Nombre de messages : 1838
Age : 34
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' ]
Fan n°1 de Coco'
Psychopathe en chef
Date d'inscription : 05/11/2008
Re: Deplacement d'events/hero à la souris
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...
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...
- ASHKAMembre
- Nombre de messages : 242
Age : 42
Localisation : Omnipresent !!
Distinction : aucune
Date d'inscription : 28/10/2008
Re: Deplacement d'events/hero à la souris
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
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
- KorndorStaffeux retraité
- Nombre de messages : 4959
Age : 111
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
Re: Deplacement d'events/hero à la souris
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?
edit: impossible d'insérer des lettres dans une jauge ^^"
Je remet comme avant
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?
edit: impossible d'insérer des lettres dans une jauge ^^"
Je remet comme avant
- ElscortoMembre
- Nombre de messages : 486
Age : 39
Localisation : Dans sa tombe en ce moment
Distinction : Homme de goût en chef.
Date d'inscription : 10/07/2008
Re: Deplacement d'events/hero à la souris
Dim 14 Déc 2008 - 13:22
Yeah excellent berka, on va pouvoir faire du Alerte Rouge avec ton scripts
Tret' idem qu'ASHKA,mets une barre infini à Berka, il le mérite bien
Tret' idem qu'ASHKA,mets une barre infini à Berka, il le mérite bien
Re: Deplacement d'events/hero à la souris
Dim 14 Déc 2008 - 15:04
nouvelle version: possibilité de selectionner dans toutes les directions !
- KorndorStaffeux retraité
- Nombre de messages : 4959
Age : 111
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
Re: Deplacement d'events/hero à la souris
Dim 14 Déc 2008 - 15:43
Si je pouvais, je te la mettrais cette barre infinie!
Merci pour tout, berka!
Re: Deplacement d'events/hero à la souris
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 !
- ArayashikiMembre
- Nombre de messages : 655
Age : 34
Localisation : Trois lettres me demangent. Oserai-je ?
Distinction : FUCKING nouveau dieu du mal. Gros connard en chef.
Date d'inscription : 18/08/2008
Re: Deplacement d'events/hero à la souris
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 . Franchement respect. Berka 9ème dans en scripting-no-jutsu rajoute ça dans son grade ^^ ( ou distinction).
- OrypsMembre
- Nombre de messages : 60
Distinction : aucune
Date d'inscription : 15/05/2008
Re: Deplacement d'events/hero à la souris
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 ^^
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 ^^
- legodjinnMembre
- Nombre de messages : 15
Age : 29
Localisation : Kivala - Zone Portuaire, Dorlan, Ewydor.
Distinction : aucune
Date d'inscription : 03/08/2009
Re: Deplacement d'events/hero à la souris
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).
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).
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum