Login: Pass:
Gamoreen



Inscrit le: 18 Fév 2006
Messages: 18
Message Posté le: 20/10/2007 14:36 Sujet du message: UI / script / GetKey
Bonjour ^^

alors, j ai une petite idée et j avoue que j aimerais bien des avis ou autres commentaires

dans nwn2, la capture des touches clavier semble codée tres profondement, en dur. d ailleur vous aurez remarqué qu il n ya aucun racourci clavier dans les differents menus (qui sont des gui xml comme les autres)
Ca m ennuie un peu parceque j essaye de coder un piano, et j aurais aimé pouvoir utiliser mon clavier a la fasttracker (en gros une touche pour une note), mais je supose que ca pourrait etre utile pour beaucoup de minijeux.

j ai donc une solution un peu barbare a proposer, et je me demande si quelqu un a des idées pour ameliorer .
c est parti :

- dans "ingamegui.ini" et "ingameguix1.ini", j ai ajouté, dans le bloc [mandatoryGui] :
SCREEN_GETKEY=getkey.xml
a=getkeya.xml
z=getkeyz.xml
e=getkeye.xml
[etc...]

- dans getkey.xml j ai cet UIText (le reste c est du standard pour l activation et la fermeture de la fenetre)
<UIText name="inputbox" x=0 y=30 width=20 height=20 text=""
fontfamily="International" multiline="false" returnrestricted="true" editable=true
selectable=true maxlength=1 filter="alpha" allowspace="false" allowpunc="false"
update="true"
OnUpdate0=UIObject_Misc_SetLocalVarString(local:0)
OnUpdate1=UIButton_Input_ScreenOpen(local:0,"false")
/>

- le getkeya.xml (c est quasi le meme pour toutes les touches) :
<UIScene name="a" width=10 height=10 x=100 y=100 draggable=true
priority="SCENE_SCRIPT" modal="false"
idleexpiretime=0.1f
OnCreate=UIObject_Misc_ExecuteServerScript("gui_getkey","a")
/>

- enfin, le script gui_getkey , en plus du traitement de la touche recue, vide l inputbox ( SetGUIObjectText(OBJECT_SELF, "SCREEN_GETKEY","inputbox",-1,"") ) et ferme l UIScene de la touche tapée (CloseGUIScreen (OBJECT_SELF, sInput) )

quand j ouvre SCREEN_GETKEY et que je clique sur l inputbox, hop, j ai un getkey a l ancienne.
Ca marche tres tres bien chez moi, en local, mais je ne peux pas tester l influence du temps de reponse d un serveur.

la methode est un peu barbare ( 27 fichiers xml pour toutes les lettres en minuscules) et je ne sais pas du tout si on peut en faire un hak ou quelque chose comme ca. (et puis c ets loin d etre idiotproof, pour l instant)

ouala, si vous avez des conseils ou des idées pour ameliorer, je suis preneur Smile
a bon entendeur Smile
Répondre en citant
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur
Gamoreen



Inscrit le: 18 Fév 2006
Messages: 18
Message Posté le: 21/10/2007 23:04 Sujet du message:
la methode du dessus, c est pas bien... enfin c est pas si mal, mais il y a mieux, en un seul fichier et sans toucher a aucun ini de nwn2.

dans getkey.xml, en plus du code standard d ouverture et de fermeture, en fonction du besoin, donc, il suffit de mettre :

<UIText name="inputbox" x=0 y=30 width=50 height=20 text="" fontfamily="International"
multiline="false" returnrestricted="true" editable=true selectable=true maxlength=1
filter="alpha" allowspace="false" allowpunc="false"
update="true"
OnUpdate0=UIObject_Misc_SetLocalVarString(local:0)
OnUpdate1=UIObject_Input_ClearTextfield("inputbox")
OnUpdate2=UIObject_Input_SetFocus(local:0)
/>

<UIText name="a" x=0 y=60 editable=true OnGainedFocus=UIObject_Misc_ExecuteServerScript("gui_getkey","a") />
<UIText name="z" x=0 y=60 editable=true OnGainedFocus=UIObject_Misc_ExecuteServerScript("gui_getkey","z") />
<UIText name="e" x=0 y=60 editable=true OnGainedFocus=UIObject_Misc_ExecuteServerScript("gui_getkey","e") />
<UIText name="r" x=0 y=60 editable=true OnGainedFocus=UIObject_Misc_ExecuteServerScript("gui_getkey","r") />
[etc]

et hop, c est fini

une fois l UIScene lancé, gui_getkey est apelé des qu on tape une touche, meme pas besoin d initialiser un champ ou de fermer une fenetre depuis le serveur, celui ci se contente de traiter la touche, ce qui est quand meme un plus niveau echanges serveur<->client
Répondre en citant
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur
Antilia
Administrateur


Inscrit le: 21 Juin 2005
Messages: 492
Message Posté le: 22/10/2007 8:57 Sujet du message:

Je crois que tu te compliques encore la vie. Tu dois tout pouvoir faire avec un seul UIText.

Je ferai un truc style:


<UIText name="inputbox" x=0 y=30 width=50 height=20 text="" fontfamily="International"
multiline="false" returnrestricted="true" editable=true selectable=true maxlength=1
filter="alpha" allowspace="false" allowpunc="false"
update="true"
OnUpdate0=UIObject_Misc_SetLocalVarString(local:0)
OnUpdate1=UIObject_Misc_ExecuteServerScript("gui_getkey",local:0)
OnUpdate2=UIObject_Input_ClearTextfield("inputbox")
/>

Au besoin pense à passer sur #NWN2CR c'est un chat anglophone sur irc.neverwinterconnections.com, y a pas mal de types la bas qui jouent avec les UIs.

Répondre en citant
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur
Gamoreen



Inscrit le: 18 Fév 2006
Messages: 18
Message Posté le: 22/10/2007 10:03 Sujet du message:
j avais commencé par ca, effectivement, mais le gros probleme, de cette version, c est que
OnUpdate1=UIObject_Misc_ExecuteServerScript("gui_getkey",local:0)
envoie une requete au serveur a toutes les images, quelque soit la valeur de local:0, question surcharge reseau et surcharge serveur, ca se pose la.

d accord ca doit pas etre de grosses requetes, mais quand meme... en monde persistant, si j ai bien compris, les boucles infinies, les flux et les OnHeartBeat et tout ca, ben on evite un maximum ^^ ( c est aps comme si nwn2 avait beaucoup de marge Very Happy )

la la requete n est envoyée que quand il y a quelque chose a envoyer, c est forcement plus sain Smile
Répondre en citant
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur
Antilia
Administrateur


Inscrit le: 21 Juin 2005
Messages: 492
Message Posté le: 22/10/2007 11:18 Sujet du message:

J'ai du mal à te suivre, tu as mis dans ton UIText que ce n'était que des champs alpha de longueur max 1 caractère, donc grosso modo un caractère de A à Z. Je ne vois pas le coup des Images.

Pour ce qui est de la lourdeur d'un script, je pense qu'il faut se demander deux choses: Combien de temps mon script met il à se terminer? Combien de fois par minutes ce script est il executé?

Je te laisse faire la comparaison avec les scripts des IAs des PNJs et des HeartBeat. Wink

Répondre en citant
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur
Gamoreen



Inscrit le: 18 Fév 2006
Messages: 18
Message Posté le: 22/10/2007 12:34 Sujet du message:
l event OnUpdate, ce n est pas, contrairement a ce que je pensais ( et toi aussi, du coup, je pense) un truc qui se declenche quand quelque chose change dans l uiobject concerné, c est un event qui se declenche a toutes les frames ( en gros 25 fois par secondes en moyenne). effectivement, employer le terme "image" etait mal venu.

tu conviendras qu envoyer une requete au serveur 25 fois par seconde, meme si le script est court, c est inenvisageable ^^.
Répondre en citant
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur
Antilia
Administrateur


Inscrit le: 21 Juin 2005
Messages: 492
Message Posté le: 22/10/2007 12:44 Sujet du message:

Dans UIScene tu peux définir le RefreshTime je crois Wink

Répondre en citant
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur
Gamoreen



Inscrit le: 18 Fév 2006
Messages: 18
Message Posté le: 22/10/2007 13:31 Sujet du message:
yop, updaterate=0.5f, par exemple, mais du coup tu ne peux pas taper 2 touches a moins de cet intervalle de temps(la 1/2 seconde), et ca reste un appel recurent et superflu au serveur ^^
Répondre en citant
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur
Antilia
Administrateur


Inscrit le: 21 Juin 2005
Messages: 492
Message Posté le: 22/10/2007 17:38 Sujet du message:

Bien nwn2server met automatiquement en cache les scripts très utilisés, donc si ton script équivaut à un if (sChar == "") return; je doute que ce soit vraiment gênant Very Happy

Mais en effet je ne savais pas pour ça, je vais en parler au gars qui fait le DMFI. Il a bien du se poser la question. Wink

Edit: Tu as bien raison, j'avais complètement oublié que perso j'utilisais des boutons pour envoyer mes variables, ce que toi tu ne peux pas faire.

Répondre en citant
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur
Gamoreen



Inscrit le: 18 Fév 2006
Messages: 18
Message Posté le: 24/10/2007 11:33 Sujet du message:
c est pour jouer de la musique dans nwn2 ( comme on pouvait s en douter puisque c est dans ce fil de discussion)

http://membres.lycos.fr/rdhprod/HIGHSIERRA/piano.xml
ca c est a rajouter dans mes docs\nwn2\UI\custom\arkalym
(je sais pas pourquoi, j arrive pas a le mettre dans un hak, normalement c est possible, mais bon...)

http://nwvault.ign.com/View.php?view=Hakpaks.Detail&id=2258
la il y a les sons, dans un hak (il n y a besoin que du hak, pour mon truc, les autres fichiers du zip, ca sert a rien)
ne pas oublier d ajouter PMI.hak a la liste des hakpacks de son module

http://membres.lycos.fr/rdhprod/HIGHSIERRA/PMI_Irgen.erf
la il y a l erf, a importer dans un module(2 scripts):
gui_piano, c est pas la peine d y toucher
et piano_init, c est a mettre sur l on_use d un placeable utilisable

rien d autre a faire ^^

En lancant le module, et en activant le placeable, il y a une petite fenetre minuscule qui s affiche quelque part. A partir de la, normalement, toutes les touches "lettres" du clavier sont interceptées, donc :
q,s,d,f,g,h,j,k,l,m, ca donne do re mi fa sol la si do re mi
les dieses sont au bon endroit (z,e, t,y,u, o,p)
en appuyant sur "shift" en meme temps, on a les notes a l octave superieure

w ca active le son de harpe (par defaut), x la mandoline, c je sais pas exactement, une sorte de flute grave... et v la trompette.


On peut pas faire les accords, (et on ne pourra jamais, bouh)

pour "eteindre" le clavier, on peut recliquer sur le placeable ou fermer la fenetre

hop, ouala, merci pour les retours eventuels ^^
Répondre en citant
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur
maero



Inscrit le: 13 Avr 2007
Messages: 59
Message Posté le: 24/10/2007 13:24 Sujet du message:
j'ai testé, ça marche nickel Wink

L'instrument dont tu ne mentionnes pas le nom est une flûte de pan, sinon pas de soucis, piano.xml peut être mis dans un hak.
Répondre en citant
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur
Montrer les messages depuis:   

Page 1 sur 1
Sauter vers:  

 

Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum

Traduction par : phpBB-fr.com
Powered by phpBB © 2001, 2007 phpBB Group