Maire Lv.9
Age : 34 Inscrit le : 15/10/2008 Messages : 351
| Sujet: [VX] Menu contextuel Lun 5 Jan 2009 - 19:51 | |
| voila un menu utilisant le meme principe que le menu contextuel de windows. Pour un seul héro ! a placer au dessus de main - Code:
-
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-= # Menu Popup Ms Style # v 1.0 # Berka http://www.rpgmakervx-fr.com rgss2 #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-= module Menu dll='user32' #dll utilisée CreatePopupMenu=Win32API.new(dll,'CreatePopupMenu','','l') #creation menu AppendMenu=Win32API.new(dll,'AppendMenu','lllp','l') #ajout des objets du menu DestroyMenu=Win32API.new(dll,'DestroyMenu','p','l') #destruction du menu GetCursorPos=Win32API.new(dll,'GetCursorPos','p','i') #position souris à l'ecran ScreenToClient=Win32API.new(dll,'ScreenToClient','lp','i') #coord à l'ecran GetClientRect=Win32API.new(dll,'GetClientRect','lp','i') #position player a l'ecran GetWindowRect=Win32API.new(dll,'GetWindowRect','lp','i') #dimensions player GetAsyncKeyState=Win32API.new(dll,"GetAsyncKeyState",'i','i') # test d'entree clavier TrackPopupMenuEx=Win32API.new(dll,'TrackPopupMenuEx','lpiipi','i') #event du menu GetprivateProfileString=Win32API.new('kernel32','GetPrivateProfileString','pppplp','l') #lecture fichier FindWindow=Win32API.new(dll,'FindWindow','pp','i') #recuperation handle d'une fenetre #style des objets du menu Normal=0 #normal Grise=1 #grisé Desactive=2 #désactivé (+grisé) Coche=8 #coché Saut=16 #barre d'espacement module_function def creer @h_menu=CreatePopupMenu.call #creation d'un menu sous_menus #appel des soumenus update #mise a jour end def sous_menus AppendMenu.call(@h_menu,Normal,1,Vocab::item) #menu objets AppendMenu.call(@h_menu,Normal,2,Vocab::skill) #competences AppendMenu.call(@h_menu,Normal,3,Vocab::equip) #equipement AppendMenu.call(@h_menu,Normal,4,Vocab::status) #statut s=$game_system.save_disabled #sauvegarde desactivée ? AppendMenu.call(@h_menu,s ? Desactive : Normal,5,Vocab::save) #sauvegarde normale/desactivée AppendMenu.call(@h_menu,Normal,6,Vocab::game_end) #fin #pour rajouter des choix, c'est ici, avec le n°7 end def update $menu=true #le menu est affiché x,y=pos[0]+client_pos[0],pos[1]+client_pos[1] #coords d'affichage du menu @choix=TrackPopupMenuEx.call(@h_menu,(256|2),x,y,handle,0) #apparition des events du menu choix if GetAsyncKeyState.call(1)&0x01==1 #si clic gauche: appel du choix dispose if GetAsyncKeyState.call(2)&0x01==1 # si clic droit: fermeture du menu end def handle title="\0"*256 #creation d'une chaine vide GetprivateProfileString.call("Game","Title","",title,256,".//Game.ini") #lecture de game.ini: récup titre title.delete!("\0") #supression des espaces vides return FindWindow.call("RGSS Player",title) #recuperation handle fenetre depuis titre end def global_pos @pos=[0,0].pack('ll') #compactage de 2 entiers GetCursorPos.call(@pos)!=0 ? (return @pos.unpack('ll')):(return nil) #retour des coords souris ecran end def pos x,y=screen_to_client(*global_pos) #recuperation des coords dans le player width,height=client_size begin x=0 if x<=0;y=0 if y<=0 # conditions de positionnement x=width if x>=width;y=height if y>=height # idem return x,y end end def screen_to_client(x,y) return nil unless x&&y # evite les bugs: continue si x/y sont initialisés @pos=[x,y].pack('ll') ScreenToClient.call(handle,@pos)!=0 ? (return @pos.unpack('ll')):(return nil) end def client_size #la flemme 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 #pareil... rect=[0,0,0,0].pack('l4') GetWindowRect.call(handle,rect) left,upper=rect.unpack('l4')[0..1] return left+4,upper+24 end def dispose;DestroyMenu.call(@h_menu);$menu=false;end #suppression menu def choix Sound.play_decision #son validation case @choix #comparaison du choix when 1;$scene=Scene_Item.new when 2;$scene=Scene_Skill.new(0) when 3;$scene=Scene_Equip.new(0) when 4;$scene=Scene_Status.new(0) when 5;$scene=Scene_File.new(true,false,false) when 6;$scene=Scene_End.new #pour rajouter des choix, c'est ici, avec le même n° qu'au dessus else;dispose #sinon suppression end end end #=========================================== # Scene_Map # par Berka #=========================================== include Menu class Scene_Map < Scene_Base alias popup_init initialize alias popup_update update def update Menu.creer if GetAsyncKeyState.call(2)&0x01==1 #si clic droit: menu ! popup_update end end #=========================================== # Scene_XXX retour a la map # par Berka #=========================================== class Scene_Item<Scene_Base def return_scene $menu ? $scene=Scene_Map.new : $scene=Scene_Menu.new(0) #si menu a été affiché: map, sinon menu normal $menu=false #fermeture menu popup end end class Scene_Skill<Scene_Base def return_scene $menu ? $scene=Scene_Map.new : $scene=Scene_Menu.new(1) $menu=false end end class Scene_Equip<Scene_Base def return_scene $menu ? $scene=Scene_Map.new : $scene=Scene_Menu.new(2) $menu=false end end class Scene_Status<Scene_Base def return_scene $menu ? $scene=Scene_Map.new : $scene=Scene_Menu.new(3) $menu=false end end class Scene_File<Scene_Base def return_scene if @from_title;$scene=Scene_Title.new elsif @from_event||$menu;$scene=Scene_Map.new else;$scene=Scene_Menu.new(4) end $menu=false end end class Scene_End<Scene_Base def return_scene $menu ? $scene=Scene_Map.new : $scene=Scene_Menu.new(5) $menu=false end end |
|
Prêtre Lv13
Age : 30 Inscrit le : 11/10/2008 Messages : 801
| Sujet: Re: [VX] Menu contextuel Lun 5 Jan 2009 - 19:52 | |
| J'ai pas trop compris à quoi ça sert. |
|
Age : 33 Inscrit le : 27/06/2008 Messages : 10881
| Sujet: Re: [VX] Menu contextuel Lun 5 Jan 2009 - 19:53 | |
| C'est pas mal ( même si je ne vois pas comment on pourrait l'utiliser dans un rpg >w< )
Merci du partage x)
* tiens, 3 points d'aide au forum puisque ta barre de script déborde * |
|
Roi des Lapinous
Age : 34 Inscrit le : 11/10/2008 Messages : 2292
| Sujet: Re: [VX] Menu contextuel Lun 5 Jan 2009 - 19:53 | |
| C'est un menu à la façon windows à ce que j'ai compris ^^ Je vais tester ça à l'air sympa si c'est juste pour un héro =p |
|
Prêtre Lv13
Age : 30 Inscrit le : 11/10/2008 Messages : 801
| Sujet: Re: [VX] Menu contextuel Lun 5 Jan 2009 - 19:54 | |
| a oui j'avais pas vus le screen pardon ^^' |
|
Maire Lv.9
Age : 34 Inscrit le : 15/10/2008 Messages : 351
| Sujet: Re: [VX] Menu contextuel Lun 5 Jan 2009 - 20:06 | |
| ce menu n'est utile que dans les arpg, parce qu'il est hyper rapide... ca peut etre cool: ca limite le nombre d'attaques, et pendant qu'on navigue pour chercher un skill, les ennemis nous petent la figure....
c'est une des seules utilités à quoi j'ai pensé en le faisant |
|
Roi des Lapinous
Age : 34 Inscrit le : 11/10/2008 Messages : 2292
| Sujet: Re: [VX] Menu contextuel Lun 5 Jan 2009 - 20:26 | |
| Si quelqu'un ce lance dans un éspéce de Dugeon Fire ou Diablo.. comment on dit déja... un hack and slash! Si c'est possible avec VX ce script peux être sympathique! |
|
Invité
| Sujet: Re: [VX] Menu contextuel Mar 6 Jan 2009 - 9:26 | |
| On pourrais l'utiliser avec le script immitant le menu Windows, pour mettre sur un ordinateur non? Avec interrupteur d'acivation non? ^^"
Aller sur un PC et acceder à cette page, m'enfin ça peut toujours être sympa si le skin est modifiable ^^ |
|
| Sujet: Re: [VX] Menu contextuel | |
| |
|