[Résolu] Script son lorsqu'on dégaine une arme

Vous trouverez ici les tutoriels et l'entraide sur les outils et techniques de modding spécifiques à Oblivion.
Avatar du membre
vaykadji
Confrère
Messages : 323

Script son lorsqu'on dégaine une arme

Message par vaykadji »

Hello,

J'ai besoin d'un script pour lancer un son lorsqu'on dégaine une arme.

Pour l'instant j'ai quelque chose qui fonctionne, mais pas exactement comme je le voudrais.
► Afficher le texte
L'arme est une lame à 2mains démoniaque, qui est enchantée pour faire des dégats de feu, de foudre, et capturer l'âme de l'adversaire. J'en suis encore au stade du développement, donc rien n'est assuré. Cependant je sais que j'ai besoin d'un script qui tienne la route.
Avec le script ci-dessus, le roulement de tonnerre se joue non-stop jusqu'à ce que l'arme retourne dans son fourreau.

Ce que je voudrais, c'est que le son ne se joue qu'une seule fois, lorsqu'on dégaine l'arme, et non pas en continu, parce que ça devient vite lassant :)

Quelqu'un peut m'aider ? Ma compétence en scripting n'est pas très évoluée^^
Modifié en dernier par vaykadji le 12 juin 2010, 19:45, modifié 1 fois.
Aussi connu sous le nom de Bjorn le Barbu, a touché au scripts/textures/packageAI/Landscape editing. Retraité aujourd'hui, peut-être à bientôt pour TESO ou TESVI ?
Avatar du membre
Shadow she-wolf
Confrère
Messages : 830
Contact :

Re: Script son lorsqu'on dégaine une arme

Message par Shadow she-wolf »

Ton script est sur l'arme ?

Si oui, il vaut mieux utiliser un autre bloc que GameMode.
Il y a un bloc qui se lance automatiquement et une unique fois lorsque l'on s'équipe de l'objet ; OnEquip.

Donc le script deviendrait:

Code : Tout sélectionner

scn VayTempestEquip

Begin OnEquip
   playsound AMBThunder
   playsound AMBThunderDistant
End
Si cela pose problème, par exemple, que le son n'est pas joué. Ou que ton script n'est pas attaché à l'épée, il faut utiliser une variable, comme ceci:

Code : Tout sélectionner

scn VayTempestEquip

Short Equiped

Begin GameMode
if (player.IsWeaponout == 1) && (player.GetEquipped VayTempestLame == 1)
   if (Equiped==0)
      playsound AMBThunder
      playsound AMBThunderDistant
      Set Equiped to 1
   endif
else
   Set Equiped to 0
endif
End
...A vu d'œil...

Mais le premier script, reste de loin infiniment plus optimisé, puisqu'il n'est exécuté qu'à chaque équipement de l'objet. Tandis que l'autre est exécuté à chaque frame du jeu...
Avatar du membre
vaykadji
Confrère
Messages : 323

Re: Script son lorsqu'on dégaine une arme

Message par vaykadji »

Oui, le script est sur l'arme.
Merci, mais alors le son se déclenche lorsqu'on équipe l'arme, et non pas lorsqu'on la dégaine :)

Je ne m'y connais pas trop en scripting, mais par exemple il n'y aurait pas un bloc genre "Begin GetEquipped" ?
ou une commande du genre "playsound once AMBThunder"

Je n'ai que quelques notions de C^^ quelque chose qui empêcherait de faire une boucle, afin de ne jouer le son qu'une fois ?



Juste une précision : le Begin GameMode signifie qu'a chaque changement de terrain/cell il va jouer le son ?

Le but serait :

-On équipe l'épée.
-Son de tonnerre lorsqu'on dégaine, une seule fois les 2 sons sont joués.
-Plus de son de tonnerre jusqu'à ce qu'on rengaine, puis dégaine à nouveau, c-a-d pas si on sort ou entre dans une ville avec l'épée dégainée.

Ce n'est peut-être pas possible, mais ça me semble envisageable. Maintenant si ça prend des lignes et des lignes de code pour fonctionner, dommage je m'adapterai à un des codes déjà donnés^^

EDIT : un double script ? script1 (lance script2) attaché à l'arme. script 2 (jouer le son) script général ? Je vais essayer voir..
EDIT2 : ah ben non c'est débile, ça revient au même x)
Aussi connu sous le nom de Bjorn le Barbu, a touché au scripts/textures/packageAI/Landscape editing. Retraité aujourd'hui, peut-être à bientôt pour TESO ou TESVI ?
Avatar du membre
Shadow she-wolf
Confrère
Messages : 830
Contact :

Re: Script son lorsqu'on dégaine une arme

Message par Shadow she-wolf »

vaykadji a écrit :Merci, mais alors le son se déclenche lorsqu'on équipe l'arme, et non pas lorsqu'on la dégaine :)
Ça m'apprendra à lire rapidement...

Sinon, le second script, lui, donne quoi ?
Car non, il n'y a pas de bloc pour détecter une dégaine que je sache... (enfin, avec Obli de base, avec OBSE, je ne sais pas)
Il y a la liste de tous les blocs ici.

ou une commande du genre "playsound once AMBThunder"

Je n'ai que quelques notions de C^^ quelque chose qui empêcherait de faire une boucle, afin de ne jouer le son qu'une fois ?
C'est justement ce à quoi sert le second script.
La variable ne permet qu'une unique exécution. C'est comme cela que l'on procède en C quand on est dans une boucle. (un script est forcément une boucle)


Juste une précision : le Begin GameMode signifie qu'a chaque changement de terrain/cell il va jouer le son ?
A chaque frame en jeu (en opposition au MenuMode, qui lui ne s'exécute que dans un "menu"). Les mêmes que les FPS normalement.
Avatar du membre
vaykadji
Confrère
Messages : 323

Re: Script son lorsqu'on dégaine une arme

Message par vaykadji »

Ok, bon j'ai pensé à quelque chose comme ça :

Code : Tout sélectionner

[u]SCRIPT-A[/u]
;sur l'arme

Begin OnEquip
    RunScript scriptB

[u]SCRIPT-B[/u]

Short compteur == 0

Begin GameMode
    if (player.IsWeaponout == 1) && (Compteur == 0)
        playsound AMBThunder
        playsound AMBThunderDistant
        set Compteur to 1
    if (player.IsWeaponout == 0) && (Compteur == 1)
        set Compteur to 0
Il me semble que ça peut marcher, mais il y a peut-être des fautes dans la "syntaxe" (si je puis dire). Seulement, est-ce que ca ne va pas embêter le jeu de tourner en boucle sur le scriptB dès que l'arme est dégainée ? Et aussi, est-ce que ça arrête de tourner quand on dé-équipe l'arme?
Modifié en dernier par vaykadji le 12 juin 2010, 17:55, modifié 1 fois.
Aussi connu sous le nom de Bjorn le Barbu, a touché au scripts/textures/packageAI/Landscape editing. Retraité aujourd'hui, peut-être à bientôt pour TESO ou TESVI ?
Avatar du membre
Shadaoe
Confrère
Messages : 2807
Contact :

Re: Script son lorsqu'on dégaine une arme

Message par Shadaoe »

Hey, beeratwork a il me semble réussit à faire jouer un son lorsque l'on équipe l'arme de son mod "Sang Noir". Il pourra sûrement t'éclairer si il passe par la forge :p
You start out stealing songs, then you're robbing liquor stores, and selling crack and running over schoolkids with your car!
Avatar du membre
vaykadji
Confrère
Messages : 323

Re: Script son lorsqu'on dégaine une arme

Message par vaykadji »

Shadaoe a écrit :lorsque l'on équipe l'arme
Moi ce qui m'intéresse c'est quand on la dégaine :p
Aussi connu sous le nom de Bjorn le Barbu, a touché au scripts/textures/packageAI/Landscape editing. Retraité aujourd'hui, peut-être à bientôt pour TESO ou TESVI ?
Avatar du membre
Shadow she-wolf
Confrère
Messages : 830
Contact :

Re: Script son lorsqu'on dégaine une arme

Message par Shadow she-wolf »

Tu viens de faire en plus compliqué mon second script.

Je viens de tester, et mon second script fonctionne sans problème.



Par ailleurs, il n'y a plus de script global comme il y avait dans Morrowind.
Il n'y a donc aucune fonction qui permet de démarrer un script.

Tout script doit être rattaché à un objet, que se soit une arme, un PNJ ou une quête.

Le seul moyen d'imiter le fonctionnement des scripts globaux de Morrowind, c'est de créer une quête auquel on attache un script.
Puis il faut démarrer la quête via la commande StartQuest, et on l'arrête avec la fonction StopQuest.
Mais ici, c'est inutile de faire cela.
Avatar du membre
vaykadji
Confrère
Messages : 323

Re: Script son lorsqu'on dégaine une arme

Message par vaykadji »

Code : Tout sélectionner

scn VayTempestEquipSound

short Equipped

Begin GameMode
	if (player.IsWeaponout == 1) && (player.GetEquipped VayTempestLame == 1) && (Equipped == 0) 
		playsound AMBThunder
		playsound AMBThunderDistant
		set Equipped to 1
	endif
	if (player.IsWeaponout == 0) && (Compteur == 1)
		set Equipped to 0
	endif
End
J'ai mis ce script là, finalement, après avoir regardé comment faire un RunScript, ce qui existe d'après tescs wiki, mais pas d'après le programme tescs^^ et un runbatchscript est inutile vu qu'il ne retient pas de variables. Je pense que comme ça le code est bon. J'ai tout de même rajouté la troisième condition au IF, pour ne pas qu'il se relance. Et par la même occasion, je le force à réécrire uniquement si ca ne remplit plus les conditions. j'ai testé pendant 5min, ca marche sans problème.

-On équipe l'arme
-Ca joue le son lorsqu'on dégaine l'arme
-Ca ne joue jamais par la suite, sauf si on rengaine-dégaine.

Ouf, merci de ton coup de main, en fait oui, ton premier script était pareil, mais je n'ai pas tilté sur le coup (je pense à cause du if dans le if, ça m'a perturbé la réflexion). Ton script est mieux que le mien tu penses, je veux dire, moins lourd ?
Aussi connu sous le nom de Bjorn le Barbu, a touché au scripts/textures/packageAI/Landscape editing. Retraité aujourd'hui, peut-être à bientôt pour TESO ou TESVI ?
Avatar du membre
beeratwork
Légende de la Confrérie
Légende de la Confrérie
Messages : 1881

Re: Script son lorsqu'on dégaine une arme

Message par beeratwork »

Sur Sang Noir, je fais ceci :

Code : Tout sélectionner

Begin OnEquip player
	PlaySound AARSangNoirSoundEquip
End

Begin OnUnEquip player
	PlaySound AARSangNoirSoundUnequip
End
Puis lorsqu'on dégaine :

Code : Tout sélectionner

Begin GameMode
; Savoir si le joueur est équipé de l'arme
	if (player.GetEquipped AARSangNoir07OneHand00 == 1)
		set Equiped to 1
	elseif (player.GetEquipped AARSangNoir07OneHand00 == 0)
		set Equiped to 0
	endif

; Si le joueur est équipé
	if (Equiped == 1 && player.IsWeaponOut == 1)
		if (DoOnceApplyEffect == 0)
			PlaySound AARSangNoirSoundWeaponOut
			set DoOnceApplyEffect to 1
		endif
	endif

; Si le joueur n'est pas équipé
	if (Equiped == 0 || player.IsWeaponOut == 0)
		if (DoOnceApplyEffect == 1)
			PlaySound AARSangNoirSoundWeaponIn
			set DoOnceApplyEffect to 0
		endif
	endif
End
Moi j'utilise "Equiped" dans mon script mais je pourrais passer directement par GetEquipped
Répondre

Retourner vers « Modder Oblivion »