[No Limits 2] Tuto sur les scripts

Tcho , J'ai modifier le premier Script OnboardAudio que je pensais avoir réussi a comprendre , ma syntaxe est correcte visiblement , mais j'ai un problème , il play a tout les trigger seulement la 4ème musique , ça doit donc venir du'une erreur que j'ai fait quelque part , quelqu'un serait la détecter?

Code:
import com.nolimitscoaster.*;

public class OnboardMusic extends Script implements TrackTriggerListener
	{
	private static final String music1File = "1.ogg";
	private static final String music2File = "2.ogg";
	private static final String music3File = "3.ogg";
	private static final String music4File = "4.ogg";
	private static final String startMusic1TriggerName = "TestTrigger1";
	private static final String startMusic2TriggerName = "TestTrigger2";
	private static final String startMusic3TriggerName = "TestTrigger3";
	private static final String startMusic4TriggerName = "TestTrigger4";

	private TrackTrigger startMusic1Trig;
	private TrackTrigger startMusic2Trig;
	private TrackTrigger startMusic3Trig;
	private TrackTrigger startMusic4Trig;

	public bool onInit()
	{
	   Coaster coaster = sim.getCoasterForEntityId(getParentEntityId());
	   if (coaster == null){
		System.err.println("This script must be attached to a coaster");
		return false;
	}
	startMusic1Trig = coaster.getTrackTrigger(startMusic1TriggerName);
		if (startMusic1Trig == null){
		System.err.println("TrackTrigger not found: '" + startMusic1TriggerName + "'");
	return false;
	}
	startMusic1Trig.addTrackTriggerListener(this);
	startMusic2Trig = coaster.getTrackTrigger(startMusic2TriggerName);
		if (startMusic2Trig == null){
		System.err.println("TrackTrigger not found: '" + startMusic2TriggerName + "'");
	return false;
	}
	startMusic2Trig.addTrackTriggerListener(this);
	startMusic3Trig = coaster.getTrackTrigger(startMusic3TriggerName);
		if (startMusic3Trig == null){
		System.err.println("TrackTrigger not found: '" + startMusic3TriggerName + "'");
	return false;
	}
	startMusic3Trig.addTrackTriggerListener(this);
	startMusic4Trig = coaster.getTrackTrigger(startMusic4TriggerName);
		if (startMusic4Trig == null){
	System.err.println("TrackTrigger not found: '" + startMusic4TriggerName + "'");
	return false;
	}
	startMusic4Trig.addTrackTriggerListener(this);
	for (int i=0; i<coaster.getTrainCount(); ++i)
	{
		StreamedSound music1 = StreamedSound.loadFromFile(music1File);
		if (music1 == null){
		System.err.println("Music file cannot be found or opened: '" + music1File + "'");
	return false;
	}
		StreamedSound music2 = StreamedSound.loadFromFile(music2File);
		if (music2 == null){
		System.err.println("Music file cannot be found or opened: '" + music2File + "'");
	return false;
	}
		StreamedSound music3 = StreamedSound.loadFromFile(music3File);
		if (music3 == null){
		System.err.println("Music file cannot be found or opened: '" + music3File + "'");
	return false;
	}
		StreamedSound music4 = StreamedSound.loadFromFile(music4File);
		if (music4 == null){
		System.err.println("Music file cannot be found or opened: '" + music4File + "'");
	return false;
	}
		Train train = coaster.getTrainAt(i);
		train.setOnboardStreamedSound(music1);
		train.setOnboardStreamedSound(music2);
		train.setOnboardStreamedSound(music3);
		train.setOnboardStreamedSound(music4);
		}
	return true;
	}
	public void onTrainEntering(TrackTrigger trigger, Train train)
	{
	StreamedSound music1 = train.getOnboardStreamedSound();
		if (music1 != null)
		{
		if (trigger == startMusic1Trig)
		{
		music1.play();
		}
	}
	StreamedSound music2 = train.getOnboardStreamedSound();
		if (music2 != null)
		{
		if (trigger == startMusic2Trig)
		{
		music2.play();
		}
	}
		StreamedSound music3 = train.getOnboardStreamedSound();
		if (music3 != null)
		{
		if (trigger == startMusic3Trig)
		{
		music3.play();
		}
	}
		StreamedSound music4 = train.getOnboardStreamedSound();
		if (music4 != null)
		{
		if (trigger == startMusic4Trig)
		{
		music4.play();
		}
	}
}
public void onTrainLeaving(TrackTrigger trigger, Train train)
	{
	}
}
 
Gary roach prod a dit:
Je sors de l'hosto avec une narcose complète mais je m'étais justement arrêté la dessus à ton stade et j'avais le même hic. D'où ma question toujours en suspens, est-il possible de charger plusieurs musique en Onboard ?
(non de bleu, ça dois être possible ... :-)
 
exact, mais je ne comprend pas pourquoi tu veut faire un script que j'ai déjà explique et que j'ai mis sur le site je crois...
 
Le problème de celui poster est qu'il n'est pas dans le train , du coup en on-ride on ne l'entend pas , et il re-strart a chaque passage quelque soit le train du coup j'en voulais un avec le son a l'intérieur du train.
Et pour l'autre script j'ai pas réussi a le comprendre pour mettre plusieurs musiques.
 
Bonjour,

Pour ton problème Gary roach prod, effectivement on ne peut mettre qu'un son on-ride à la fois, du coup sur ces lignes, tu écrase pour chaque train la dernière musique, ce qui fait que la musique 4 est jouée a chaque trigger :
Code:
Train train = coaster.getTrainAt(i);
		train.setOnboardStreamedSound(music1);
		train.setOnboardStreamedSound(music2);
		train.setOnboardStreamedSound(music3);
		train.setOnboardStreamedSound(music4);

Alors j'ai pas essayé, mais je pense que ça devrai marcher si tu suis ces étapes :
[list type=decimal]
[*]Déclare tes différentes variables de type StreamedSound en tant que variables privées de ta classe
[*]Dans ta fonction d'initialisation, retire la boucle for qui te permet d'initialiser les musiques pour chaque train mais garde les lignes de code qu'elle contient (initialisation des StreamedSound)
[*]Supprime les 5 lignes ci dessus. En gros tu initialise chaque StreamedSound une seule fois et sans les assigner aux trains
[*]Dans ta fonction onTrainEntering, assigne le StreamedSound au train entrant au niveau du trigger avant de lancer la musique. J'ai pas remis tout le code mais ca devrait donner quelque chose comme ca :
[/list]

Code:
if (trigger == startMusic1Trig && music1 != null)
{
	train.setOnboardStreamedSound(music1);
	music1.play();
}
else if (trigger == startMusic2Trig && music2 != null)
{
	train.setOnboardStreamedSound(music2);
	music2.play();
}
...
 
J’essaye le truc de DJ Julio sans succès  :cry:

Je vous met un petit script qui permet de mettre une musique ou un son par train (ici 4) qui démarre dès la descente des harnais.

Code:
import com.nolimitscoaster.*;

public class onboardaudio extends Script
{
	private static final String filename1 = "music1.ogg";
	private static final String filename2 = "music2.ogg";
	private static final String filename3 = "music3.ogg";
	private static final String filename4 = "music4.ogg";

	
	Train train;
	Coaster coaster;
	
	public bool onInit()
	{
		StreamedSound mysound1 = StreamedSound.loadFromFile(filename1);
		StreamedSound mysound2 = StreamedSound.loadFromFile(filename2);
		StreamedSound mysound3 = StreamedSound.loadFromFile(filename3);
		StreamedSound mysound4 = StreamedSound.loadFromFile(filename4);
		
		
		
		Coaster coaster = sim.getCoasterForEntityId(getParentEntityId());
  	   
		
		train = coaster.getTrainAt(0);
		train.setOnboardStreamedSound(mysound1);
		
		train = coaster.getTrainAt(1);
		train.setOnboardStreamedSound(mysound2);
		
		train = coaster.getTrainAt(2);
		train.setOnboardStreamedSound(mysound3);
		
		train = coaster.getTrainAt(3);
		train.setOnboardStreamedSound(mysound4);
  	
		
		mysound1.playLoop();
		mysound2.playLoop();
		mysound3.playLoop();
		mysound4.playLoop();
		
		return true;
	}
}

 
Voilà cette fois je suis chez moi, j'ai pu expérimenter et faire fonctionner ce que j'ai mis plus haut, et ça marche niquel  :-P
Voici le code  :wink:

Code:
import com.nolimitscoaster.*;

public class OnboardMusic extends Script implements TrackTriggerListener
{
	private static final String music1File = "1.ogg";
	private static final String music2File = "2.ogg";
	private static final String music3File = "3.ogg";
	private static final String music4File = "4.ogg";
	private static final String startMusic1TriggerName = "TestTrigger1";
	private static final String startMusic2TriggerName = "TestTrigger2";
	private static final String startMusic3TriggerName = "TestTrigger3";
	private static final String startMusic4TriggerName = "TestTrigger4";

	private StreamedSound music1;
	private StreamedSound music2;
	private StreamedSound music3;
	private StreamedSound music4;
	
	private TrackTrigger startMusic1Trig;
	private TrackTrigger startMusic2Trig;
	private TrackTrigger startMusic3Trig;
	private TrackTrigger startMusic4Trig;

	public bool onInit()
	{
		Coaster coaster = sim.getCoasterForEntityId(getParentEntityId());
		if (coaster == null)
		{
			System.err.println("This script must be attached to a coaster");
			return false;
		}
		startMusic1Trig = coaster.getTrackTrigger(startMusic1TriggerName);
		if (startMusic1Trig == null)
		{
			System.err.println("TrackTrigger not found: '" + startMusic1TriggerName + "'");
			return false;
		}
		startMusic1Trig.addTrackTriggerListener(this);
		startMusic2Trig = coaster.getTrackTrigger(startMusic2TriggerName);
		if (startMusic2Trig == null)
		{
			System.err.println("TrackTrigger not found: '" + startMusic2TriggerName + "'");
			return false;
		}
		startMusic2Trig.addTrackTriggerListener(this);
		startMusic3Trig = coaster.getTrackTrigger(startMusic3TriggerName);
		if (startMusic3Trig == null)
		{
			System.err.println("TrackTrigger not found: '" + startMusic3TriggerName + "'");
			return false;
		}
		startMusic3Trig.addTrackTriggerListener(this);
		startMusic4Trig = coaster.getTrackTrigger(startMusic4TriggerName);
		if (startMusic4Trig == null)
		{
			System.err.println("TrackTrigger not found: '" + startMusic4TriggerName + "'");
			return false;
		}
		startMusic4Trig.addTrackTriggerListener(this);
		
		music1 = StreamedSound.loadFromFile(music1File);
		if (music1 == null)
		{
			System.err.println("Music file cannot be found or opened: '" + music1File + "'");
			return false;
		}
		music2 = StreamedSound.loadFromFile(music2File);
		if (music2 == null)
		{
			System.err.println("Music file cannot be found or opened: '" + music2File + "'");
			return false;
		}
		music3 = StreamedSound.loadFromFile(music3File);
		if (music3 == null)
		{
			System.err.println("Music file cannot be found or opened: '" + music3File + "'");
			return false;
		}
		music4 = StreamedSound.loadFromFile(music4File);
		if (music4 == null)
		{
			System.err.println("Music file cannot be found or opened: '" + music4File + "'");
			return false;
		}
		
		return true;
	}
	
	public void onTrainEntering(TrackTrigger trigger, Train train)
	{
		if (trigger == startMusic1Trig && music1 != null)
		{
			train.setOnboardStreamedSound(music1);
			music1.play();
		}
		else if (trigger == startMusic2Trig && music2 != null)
		{
			train.setOnboardStreamedSound(music2);
			music2.play();
		}
		else if (trigger == startMusic3Trig && music3 != null)
		{
			train.setOnboardStreamedSound(music3);
			music3.play();
		}
		else if (trigger == startMusic4Trig && music4 != null)
		{
			train.setOnboardStreamedSound(music4);
			music4.play();
		}
	}
	
	public void onTrainLeaving(TrackTrigger trigger, Train train)
	{
	}
}
 
Oui et non  :-D Les StreamedSound sont des sons diffusés uniquement en vue on-ride d'un coaster, ils sont inaudible dans les autres vues, même si on se place juste à coté du train. Mais leurs avantages sont qu'ils sont diffusés en stéréo peut importe où l'on se situe dans le train et qu'on a pas à gérer le déplacement du son pour qu'il suive le train par rapport aux StaticSound.

Je pense qu'il vaut mieux utiliser les StreamedSound pour les audios onboard, c'est vrai qu'on perd le fait d'entendre la musique en off-ride lorsque le train passe à côté de nous, mais faut avouer que même dans la réalité c'est assez subtil à entendre  :wink:
 
Merci pour la réponse.

J'ai fait un test de recherche de la position du train, peut etre que l'on peux le modifier ?

import com.nolimitscoaster.*;
import nlvm.math3d.*;

// cractéristique des trains  Jmeletou@hotmail.com

public class ProprieteTrain extends Script  implements TrackTriggerListener
{
      //  private SceneObject sco;                                  // definition d'un objet dans la scene
        Train fTrain;                                              // definition de la variable train
        private int NbTrain;

        private static final String scriptName = "ProprieteTrain";
       
          private TrackTrigger Trigger1;                            // definition trigger 1
          private TrackTrigger Trigger2;                            // definition trigger 2

          private static final String sSoundFile1 = "Moon Lifter.ogg";    // 1ere musique definition
  StaticSound sSound1;
 
  private Vector3f positionSound ;

public bool onInit()
{
                String name;                                        // definition de la variable String name

Coaster coaster = sim.getCoasterForEntityId(getParentEntityId());
if (coaster == null){
System.err.println("This script must be attached to a coaster");
return false;
}
  name =  coaster.getName();
  System.out.println(name);          // donne le nom du coaster

  fTrain = coaster.getTrainAt(0);                  // cherche le numero du train    0 = 1er train  1 = 2eme train ...
                                                    // Dans la classe coaster
                  NbTrain = coaster.getTrainCount();                // nombre entier cherche le nombre de trains
  System.out.println(NbTrain);
 
  Trigger1 = coaster.getTrackTrigger("startSound1");
                  Trigger1.addTrackTriggerListener(this);
                  Trigger2 = coaster.getTrackTrigger("stopSound1");
                  Trigger2.addTrackTriggerListener(this);
                 
                    sSound1 = StaticSound.loadFromFile(sSoundFile1, StaticSound.E_ENVMODE_LOCAL);


/**

                  sco = sim.getSceneObject("LightTest");
                    if (sco == null)
                              {
                                System.err.println(scriptName + ": the script is not part of a scene object");        // on trouve pas le nom
                                return false;
                              }
                             

*/

              return true;

      }
        public void onNextFrame(float tick)
        {
                Vector3f fo = new Vector3f(0.0f, 0.0f, 0.0f);
                Vector3f to = new Vector3f(0.0f, 0.0f, 0.0f);
                Vector3f ro = new Vector3f(0.0f, 0.0f, 0.0f);
                Vector3f po = new Vector3f(0.0f, 0.0f, 0.0f);
               
                fTrain.getCarOrientationAndPosition(1, fo, to, ro, po);  // recherche la position du train  avec la position du car
 
                positionSound = po;
                System.out.println( positionSound);
            sSound1.setPosition(positionSound);                        // definition de l'emission du sound1 suit le train
        }
       

           

        public void onTrainEntering(TrackTrigger trigger, Train train)
          {
                 
                  if (trigger == Trigger1)
                      {
                          if (train.getSpeed() > 0)
                          {

                sSound1.setGain(20.0f);
                                sSound1.play();
                          }
                      }
                      if (trigger == Trigger2)
                                {
                                  if (train.getSpeed() > 0)
                                  {
                                    sSound1.stop();
                                  }
                                } 
                  }

                  public void onTrainLeaving(TrackTrigger trigger, Train train)
{
}
}
 
gabifou : que veut-tu dire par "ne s'affiche pas" ?  :roll:

Meletou1 : tu voudrais le modifier pour diffuser plusieurs musiques pour un même train ?  :-)
 
Oui le modifier pour avoir plusieurs trains avec des musiques différentes toujours déclencher par des triggers et même de changer de musique pour le meme train. C'est une extension à ce script qui n'a été fait que pour un train.
 
viewer.php