Aller au contenu


Script Ce Déclanchant Lorsque L'on Boit Une Potion


  • Veuillez vous connecter pour répondre
24 réponses à ce sujet

#1 Vardac Reborn

Vardac Reborn

Posté 14 septembre 2009 - 08:50

Bonjour,

Je cherche à réaliser un script qui fait, que lorsque le NPC boit une potion il ne peu plus combattre, ce qui rend la chose plus logique, car prendre la potion dans son sac la décapsuler la boire et tout ça avec une lance à la main met forcément un peu de temps. Je vous met mon script :

Begin CR_potion_combat
   
   Short done
   Float timer
   
   If ( done == 0 )
	   If ( GetSoundPlaying, "Drink" == 1 )
		   DisablePlayerFighting
		   set done to 1
		   MenuTest
		   MessageBox "Vous prenez 5 secondes pour boire votre potion"
	   endif
   endif
   
   If ( done == 1 )
	   If ( menumode == 0 )
		   set timer to ( timer + GetSecondsPassed )
		   if ( timer > 5 )
			   EnablePlayerFighting
			   EnableInventoryMenu
			   set done to 0
			   set timer to 0
		   endif
	   endif
   endif
   
   End

Merci

Modifié par Vardac Reborn, 14 septembre 2009 - 12:26.


#2 Cogite Stibon

Cogite Stibon

    Théoriquement moddeur


Posté 14 septembre 2009 - 09:01

Bonjour,

Tout d'abord, merci de mettre un titre explicite à ton post. "Un script me crispe" dans la section "Les scripts me crispent", ce n'est pas explicite.

Ensuite, il faut que tu expliques mieux ce que tu veux dire par "ça ne marche pas". Un script peux bugguer de pleins de façons différentes.

Enfin, je n'ai pas compris si tu voulais que ce script s'applique à un NPC, à tous les NPC, ou au PC. Ni à quoi ou qui tu l'as attaché.

Si tu veux de l'aide, il faut aider ceux qui pourraient t'aider.

Cogite

Tout droit vers le non-linéaire !
It's not the engine, it's the writing.
HERMA MORA ALTADOON AE


#3 Post-it

Post-it

    Attachant détachable adhérant sans tâcher


Posté 14 septembre 2009 - 09:08

Bonjour Vardac Reborn, pas mal ton idée ! :huhu:

Quel est le problème exactement ? Il te sert à quoi le EnableInventoryMenu ?

Tu as oublié un "e" à boire.
Il manque un espace entre MenuMode == 0 et la parenthèse de fin.
J'ajouterai MenuTest pour quitter l'inventaire après le sound.

Voilà ! Mais je me demande bien pourquoi ton script ne fonctionnerait pas !

Y'a le Post-it et le Post-at ...

------------------------------------------------
Membre auto-proclamé des défenseurs des post-its sur forum, maintenant que je sais ce que c'est ...

#4 Vardac Reborn

Vardac Reborn

Posté 14 septembre 2009 - 09:29

Oui donc le enableinventorymenu est là car je voudrais que l'on ne puisse plus allez voir dans l'inventaire le temps des 5 secondes, histoire de pas boire 200 potions et de n'attendre que 5 secondes.

Sinon il ne marche pas dans le sens il n'a pas l'air de se déclencher quand je bois une potion. J'ai pourtant fais un startscript, ou encore fait joueur le son avec la console, mais rien à faire il ne se déclenche pas.

#5 Post-it

Post-it

    Attachant détachable adhérant sans tâcher


Posté 14 septembre 2009 - 09:43

 Vardac Reborn, le 14.09.2009 à 10:28, dit :

Oui donc le enableinventorymenu est là car je voudrais que l'on ne puisse plus allez voir dans l'inventaire le temps des 5 secondes, histoire de pas boire 200 potions et de n'attendre que 5 secondes.

Eh bien dans ce cas il te faut également un Disableinventorymenu. Non ?

 Vardac Reborn, le 14.09.2009 à 10:28, dit :

Sinon il ne marche pas dans le sens il n'a pas l'air de se déclencher quand je bois une potion. J'ai pourtant fais un startscript, ou encore fait joueur le son avec la console, mais rien à faire il ne se déclenche pas.
Ton script est un global. Si ton mod est tribunal requis, il suffit de mettre ton script en lancement au début du jeu. Je ne vois pas pourquoi avec le startscript (console) cela ne fonctionne pas. Désolé.

Y'a le Post-it et le Post-at ...

------------------------------------------------
Membre auto-proclamé des défenseurs des post-its sur forum, maintenant que je sais ce que c'est ...

#6 Vardac Reborn

Vardac Reborn

Posté 14 septembre 2009 - 09:54

 Post-it, le 14.09.2009 à 10:42, dit :

Eh bien dans ce cas il te faut également un Disableinventorymenu. Non ?

Non justement cette fonction n'existe pas à parement ... c'est pourquoi je suis bien embêté ...

Et puis oui j'ai mis un startscript au début du jeu et cela ne fait rien...

#7 Cogite Stibon

Cogite Stibon

    Théoriquement moddeur


Posté 14 septembre 2009 - 10:33

Si ton script est un global, a priori, il n'est pas attaché à un objet particulier, donc le GetSoundPlaying ne sait pas sur quel objet porter.

Essaye avec  "player"->GetSoundPlaying

Et n'oublie pas de changer le titre de ton post.

Tout droit vers le non-linéaire !
It's not the engine, it's the writing.
HERMA MORA ALTADOON AE


#8 abg

abg

    L'ABG pour les civilisés


Posté 14 septembre 2009 - 10:38

Tout d'abord, je crois qu'il y a un bug sur la détection du son "swallow" par GetSoundPlaying. Pour t'assurer que ta démarche ne butte pas là-dessus, il faudrait commencer ne laisser que le strict minimum dans le script :

If ( player->GetSoundPlaying, "Swallow" == 1 )
	Messagebox, "Gloups... ça marche !"
EndIf

La méthode minimaliste est encore la meilleure pour valider un script  :huhu:

Ensuite, puisque tu fais tourner ça en script global, il manque les redirections de commande vers "player" (ton perso quel qu'il soit a toujours "player" comme identifiant pour le jeu) :
player->GetSoundPlaying...
Sans quoi Morrowind est incapable de savoir quel émetteur de son potentiel produit le "swallow". Dans le doute, il ne teste rien (mais la où un langage correct donnerait un message d'erreur, avec Morro c'est un silence assourdissant  :mrgreen: )

Edit : coiffé par Cogite  :shocked:

Modifié par abg, 14 septembre 2009 - 10:39.

Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#9 Vardac Reborn

Vardac Reborn

Posté 14 septembre 2009 - 11:13

Gloups ... ça marche pas ...

Je sais vraiment pas pourquoi cela ne fonctionne pas ...

#10 abg

abg

    L'ABG pour les civilisés


Posté 14 septembre 2009 - 11:21

 Vardac Reborn, le 14.09.2009 à 12:12, dit :

Gloups ... ça marche pas ...

Je sais vraiment pas pourquoi cela ne fonctionne pas ...

Peut-être bien à cause de ce que rapporte l'auteur du mod "Nécessités de Morrowind" :

Citation

- Ivresse : Le TESC est limité dans la détection de l'utilisation des potions. Nous avons été obligés de faire une astuce pour détecter cette utilisation.

Ça doit se rapporter à mon doute sur la mauvaise détection du son "swallow". Essaye peut-être d'étudier l'astuce signalée dans ce mod...
Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#11 Cogite Stibon

Cogite Stibon

    Théoriquement moddeur


Posté 14 septembre 2009 - 11:23

Tu es sûr de l'Id du son ?
Tu teste avec une touche de raccourci, ou en menu mode ?
Getsoundplaying ne semble pas marcher en menumode

Edit : Titre rendu explicite

Tout droit vers le non-linéaire !
It's not the engine, it's the writing.
HERMA MORA ALTADOON AE


#12 abg

abg

    L'ABG pour les civilisés


Posté 14 septembre 2009 - 11:35

 Cogite Stibon, le 14.09.2009 à 12:22, dit :

Tu es sûr de l'Id du son ?

Effectivement  :huhu: (On ferait peut-être un bon tandem si on prenait le temps de se concerter  :shocked: )
"Swallow" correspond à l'ingestion d'ingrédients. Celle de potions est associée à "Drink"...
Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#13 Vardac Reborn

Vardac Reborn

Posté 14 septembre 2009 - 12:24

Oui effectivement l'ID était celui des ingrédients, donc j'ai remplacé par drink, mais il doit aussi y avoir le fait que le son n'est pas pris en compte dans l'inventaire comme nous l'a fait remarqué Cogite Stibon. Donc, maintenant reste à savoir comment pouvoir détecter le son ? je vais voir un peu dans NoM si je ne trouve pas quelque chose.

#14 abg

abg

    L'ABG pour les civilisés


Posté 14 septembre 2009 - 13:13

 Vardac Reborn, le 14.09.2009 à 13:23, dit :

mais il doit aussi y avoir le fait que le son n'est pas pris en compte dans l'inventaire comme nous l'a fait remarqué Cogite Stibon.

Fait un essai quand même avec drink car je ne serais pas si affirmatif que ça quant au non fonctionnement de GetSoundPlaying en mode menu...
Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#15 Vardac Reborn

Vardac Reborn

Posté 14 septembre 2009 - 13:17

Déjà essayé ... et même essayé en mangeant des ingrédients.

#16 abg

abg

    L'ABG pour les civilisés


Posté 14 septembre 2009 - 14:07

Message d'erreur ?

Je demande ça parce que l'essai d'un petit bout de script avec "Drink" me renvoie une "expression error" suivie d'un "left eval"  :huhu:
Alors qu'avec une manipulation d'arme (testée avec le son "Item Weapon Shortblade Up"), ça fonctionne parfaitement : GetSoundPlaying renvoie 1 dès que l'épée courte est manipulée dans la main du PJ (que soit en la posant dans l'inventaire, en mode menu donc, ou en la dégainant hors mode menu...)

If ( player->GetSoundPlaying, "Drink" == 1 )
MessageBox, "Gloups, Ingestion d'une boisson !"
EndIf


= message d'erreur, alors que :

If ( player->GetSoundPlaying, "Item Weapon Shortblade Up" == 1 )
MessageBox, "En garde !"
EndIf


est OK :shocked:

Modifié par abg, 14 septembre 2009 - 14:11.

Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#17 Vardac Reborn

Vardac Reborn

Posté 14 septembre 2009 - 15:42

 jilin, le 07.02.2004 à 09:32, dit :

pour getsoundplaying, il s'avère que çà ne capte que les sons joué par l'appelant ;)

player->getsoundplaying "sound ID" te diras ok si le son est joué par le joueur ;)

donc, tu peux entendre le sons sans le capter pour autant, par exemple, les sons de crochetage sont joué par ce que tu veux crocheter ( pporte, coffre....), donc, un peu chiant à capter

Peu être que le son est joué par la potion et non le Player, alors que pour l'arme c'est le contraire.

#18 Cogite Stibon

Cogite Stibon

    Théoriquement moddeur


Posté 14 septembre 2009 - 15:55

Ca, tu peux le tester facilement en créant une nouvelle potion dans le TESCS, et en y attachant un script avec un simple getsoundplaying. Mais ça m'étonnerait car la potion, au moment où on la boit, n'a pas d'emplacement 3D dans le monde (contrairement aux serrures, par exemple).

Tout droit vers le non-linéaire !
It's not the engine, it's the writing.
HERMA MORA ALTADOON AE


#19 Finraïl

Finraïl

    Modèle de wiwilandais nanotechnologique


Posté 14 septembre 2009 - 20:29

Sors le test de la fonction du if, et stocke le résultat dans une variable que tu testes en if. Je mettrai presque ma main à couper que le problème est là.

 abg, le 14.09.2009 à 15:06, dit :

Message d'erreur ?

Je demande ça parce que l'essai d'un petit bout de script avec "Drink" me renvoie une "expression error" suivie d'un "left eval"  ;)
Alors qu'avec une manipulation d'arme (testée avec le son "Item Weapon Shortblade Up"), ça fonctionne parfaitement : GetSoundPlaying renvoie 1 dès que l'épée courte est manipulée dans la main du PJ (que soit en la posant dans l'inventaire, en mode menu donc, ou en la dégainant hors mode menu...)

If ( player->GetSoundPlaying, "Drink" == 1 )
MessageBox, "Gloups, Ingestion d'une boisson !"
EndIf


= message d'erreur, alors que :

If ( player->GetSoundPlaying, "Item Weapon Shortblade Up" == 1 )
MessageBox, "En garde !"
EndIf


est OK :?

Abg, deux heures de colle pour ne pas avoir lu mon post là-dessus dans le forum MR. La solution à ton problème est précisément la manip que je recommande de tester  ;)

Not Quite Dead, le 22.06.2006 à 19:42, dit :

[...]un changement avatarien, même infime, est PAS BIEN et nuisible [...]
Les lisez-moi c'est bon, mangez-en !! Image IPB

Fervent Partisan de l'Immuabilité Avatarienne.

Morrowind Renaissance


#20 abg

abg

    L'ABG pour les civilisés


Posté 14 septembre 2009 - 21:16

 Finraïl, le 14.09.2009 à 21:28, dit :

Abg, deux heures de colle pour ne pas avoir lu mon post là-dessus dans le forum MR. La solution à ton problème est précisément la manip que je recommande de tester  :?

Mon pauvre Finraïl, tu luttes contre des années d'habitudes déplorables ;) ...

Begin TestScript

Short GosierSec

Set GosierSec To ( "player"->GetSoundPlaying, "Drink" )
If ( GosierSec == 1 )
	MessageBox, "Aah, ça fait du bien !"
	Set GosierSec To 0
EndIf

End TestScript

Verdict in-game :

Expression Error: BADOBJECTPOINTER in TestScript.
Set expression returned an error.

Qu'est-ce que j'ai encore fait qui va pas  ;) ?

Modifié par abg, 14 septembre 2009 - 21:23.

Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#21 Finraïl

Finraïl

    Modèle de wiwilandais nanotechnologique


Posté 15 septembre 2009 - 22:40

les guillemets à player ?  :cry:

Not Quite Dead, le 22.06.2006 à 19:42, dit :

[...]un changement avatarien, même infime, est PAS BIEN et nuisible [...]
Les lisez-moi c'est bon, mangez-en !! Image IPB

Fervent Partisan de l'Immuabilité Avatarienne.

Morrowind Renaissance


#22 Vardac Reborn

Vardac Reborn

Posté 16 septembre 2009 - 10:57

Je suis pas sûr que les guillemets gênent quoi que ce soit, il est même préférable de les mettre en générale il me semble. Je pense que c'est morrowind qui a un problème avec ce son, vielle rancune sûrement ^^, car ton script ne semble par comporter d'erreurs.

#23 abg

abg

    L'ABG pour les civilisés


Posté 16 septembre 2009 - 10:59

 Finraïl, le 15.09.2009 à 23:39, dit :

les guillemets à player ?  :cry:

Pareil...

J'ai aussi testé d'autres sons de manip d'objet dans inventaire (Item Clothes Up, Item book Up, Swallow...). Pas de message d'erreur mais pas de détection du son non plus  :dry:

C'est à se demander si ce n'est pas à la tête du client :
"Drink" : problème évoqué par le readme de NOM avec l'erreur de script que ça me donne.
Epée courte (Item Weapon Shortblade Up) : ça marche (pas testé avec d'autres catégories d'armes)
Autres objets testés : ça marche pas (que ce soit en mode menu ou pas, à chaque fois, j'ai essayé les émissions de sons dans les deux cas...) : la variable reste à 0...
Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#24 Vardac Reborn

Vardac Reborn

Posté 16 septembre 2009 - 11:00

Après reflexion :

BADOBJECTPOINTER => "Bad object pointer". Je pense que c'est le fait que l'ID qui joue le son (ici player) n'est pas valide. C'est la potion qui doit jouer le son. Et là ça pose problème

#25 elendell

elendell

    Mécano Dell'Arte


Posté 21 septembre 2009 - 00:56

Bonjour,

 Vardac Reborn, le 16.09.2009 à 11:59, dit :

Après reflexion :

BADOBJECTPOINTER => "Bad object pointer". Je pense que c'est le fait que l'ID qui joue le son (ici player) n'est pas valide. C'est la potion qui doit jouer le son. Et là ça pose problème
Je ne pense pas car pour les autres sons, il faut bien tester si "Player" ou tel "PNJ/objet" joue le son. Pour le son d'une arme par exemple, on ne teste pas si l'arme joue le son mais bien celui qui la manie.

Au passage je signale que ce problème de "Drink" est indiqué dans le MSfD :

MSfD8, le page : 154, dit :

Note: pour une raison inconnue, l’ID son "drink" provoque une erreur ; donc ne vérifiez pas si le joueur est en train de boire une potion.

(Ce qui ne m'a pas empêché de vérifier, avec le même résultat qu'abg  :huhu: ).




0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)