[No Limits 2] Tuto sur les scripts

  • 268 Réponses
  • 56780 Vues

0 Membres et 1 Invité sur ce sujet

Re : [No Limits 2] Tuto sur les scripts
« Réponse #255 le: 07 avril 2016 à 08:48:52 »
Salut Salut!

Je commence tout juste les scripts et j'ai tenté de juste mettre un objet 3D en rotation de manière permanente via un script trouvé sur le forum de nolimits exchange!

  • J'ai créé une roue dentée sur sketchup que j'ai exporté en Collada dans un dossier "test".
  • J'ai nommé le fichier 3D en question "test".
  • J'ai modifié le script pour coller à ma situation:
    Citer
    import com.nolimitscoaster.*;
    import nlvm.math3d.*;

    public class test extends Script
    {
       private static final float rotationrate = 5;
       private float y = 0;

       SceneObject sco;
       SceneObjectElement elem;

       public bool onInit()
       {
          //Get handle for scenery object file
          sco = sim.getSceneObjectForEntityId(getParentEntityId());
          if (sco == null)
          {
             System.err.println("No scene object was found.");
             return false;
          }
          
          //Get handle for test element
          elem = sco.getElementForName("test");
          if (elem == null)
          {
             System.err.println("No object named 'test' was found.");
             return false;
          }
          
          return true;
       }
          
       public void onNextFrame(float tick)
       {
          y += rotationrate * sim.getCurSimulationTickSec();
          elem.setRotation(new Vector3f(0,y,0));
       }
    }

    • J'ai créé le NLSCO en associant le script à l'objet 3D


    ...Et je reçoit le message d'erreur
    Citer
    No object named 'test' was found

    Quelqu'un peut-il m'expliquer? Si je galère déjà sur ça j'ai peur pour la suite  :-D

*

Hors ligne Jmy

  • *******
  • 1 300
  • Tous différents mais tous passionnés!
    • Voir le profil
Re : [No Limits 2] Tuto sur les scripts
« Réponse #256 le: 07 avril 2016 à 10:27:41 »
Dans Sketchup, as tu nommé ton entité "test" ?
Ton script cherche un objet ( SceneObject sco;) et un sous objet ( SceneObjectElement elem;)...
« Modifié: 07 avril 2016 à 10:29:58 par Jmy »

Re : [No Limits 2] Tuto sur les scripts
« Réponse #257 le: 07 avril 2016 à 10:34:19 »
Oui je l'ai nommé "test" aussi mais c'est pas un "élément" c'est un "composant"...Peut-être que c'est ça le problème? Comment changer les script pour régler ça?

*

Hors ligne Jmy

  • *******
  • 1 300
  • Tous différents mais tous passionnés!
    • Voir le profil
Re : [No Limits 2] Tuto sur les scripts
« Réponse #258 le: 07 avril 2016 à 10:45:55 »
Est ce que tu as appelé ton objet "test" dans le scene object instance properties ?
Je suis une burne en script mais je vais essayer de te dépatouiller !

Re : [No Limits 2] Tuto sur les scripts
« Réponse #259 le: 07 avril 2016 à 10:48:47 »
Ah bah en c'est bon en fait j'avais pas nommé le composant "test" en fait et maintenant ça marche ! C'est nickel ! Merci beaucoup!  :wink:

*

Hors ligne Jmy

  • *******
  • 1 300
  • Tous différents mais tous passionnés!
    • Voir le profil
Re : Re : [No Limits 2] Tuto sur les scripts
« Réponse #260 le: 07 avril 2016 à 10:50:33 »
Ah bah en c'est bon en fait j'avais pas nommé le composant "test" en fait et maintenant ça marche ! C'est nickel ! Merci beaucoup!  :wink:

De rien, sinon il y a aussi celui ci... Je crois que c'est Benij qui l'avait posté...
import com.nolimitscoaster.*;
//import nlvm.math3d.*;

public class HeliceScript extends Script
{
  private SceneObject m_sco;
  private SceneObjectElement m_mainroue;
 

  private float m_angle;

public bool onInit()

    {

   m_sco = sim.getSceneObjectForEntityId(getParentEntityId());
   
   m_mainroue = m_sco.getElementForName("helice");

   return true;

   }

public void onNextFrame(float tick)
   {
   
   m_angle += tick * 2.0f;

   m_angle = m_angle % (float)(2*Math.PI);

   m_mainroue.setRotation(m_angle, 0, 0);

   }

}

Re : [No Limits 2] Tuto sur les scripts
« Réponse #261 le: 11 avril 2016 à 09:12:14 »
Salut salut!

Je cherche un script qui me permettrait de créer un effet de fumigène du style vapeur sous pression qui fuit d'une canalisation et synchronisée avec le passage du train. J'ai aucune idée de comment faire ça...
Il y a déjà des effets de brume dans le jeu mais c'est clairement pas assez dynamique par rapport à ce que je souhaite  :-P
Quelqu'un aurait une idée?

*

Hors ligne yoyo212

  • ********
  • 1 623
  • EGF what else ? Wildfire !
    • Voir le profil
    • dawaweb.ch
Re : Re : [No Limits 2] Tuto sur les scripts
« Réponse #262 le: 11 avril 2016 à 09:27:05 »
Quelqu'un aurait une idée?

http://www.dawaweb.ch/dawa/?page_id=2148

A toi de l'adapter. Si t'y connais rien en particules, j'ai ajouté une page http://www.dawaweb.ch/dawa/?page_id=1718
Mumuses toi bien  :mrgreen:

Re : [No Limits 2] Tuto sur les scripts
« Réponse #263 le: 11 avril 2016 à 12:11:19 »
De base j'y connais rien en script, je vais regarder mais je risque de revenir poser des questions  :-P Merci Yoyo :)

*

Hors ligne Jmy

  • *******
  • 1 300
  • Tous différents mais tous passionnés!
    • Voir le profil
Re : Re : [No Limits 2] Tuto sur les scripts
« Réponse #264 le: 12 avril 2016 à 13:11:59 »
Salut salut!

Je cherche un script qui me permettrait de créer un effet de fumigène du style vapeur sous pression qui fuit d'une canalisation et synchronisée avec le passage du train. J'ai aucune idée de comment faire ça...
Il y a déjà des effets de brume dans le jeu mais c'est clairement pas assez dynamique par rapport à ce que je souhaite  :-P
Quelqu'un aurait une idée?

Toi, tu veux ça !  :wink:
http://www.youtube.com/embed/J3e7ij_MvSM?rel=0
« Modifié: 12 avril 2016 à 13:26:53 par Jmy »

Re : [No Limits 2] Tuto sur les scripts
« Réponse #265 le: 18 juin 2017 à 14:42:28 »
Bonjour! J'ai trouvé le script SplineExport (je l'ai trouvé sur Youtube puis je l'ai recopié et mis le script dans le dossier de Nolimits, dans le parc que je fait, et quand je lance le script (dans l'éditeur), il me marque un message d'erreur:

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

public class SplineExport extends Script {
    /////////////////////////////////////////////
    float heartline = 0.3f;
    float seperation = 0.25f;

    float beginDistance = 0.0f;
    int beginIndex = 0;
    /////////////////////////////////////////////

    public Coaster currentCoaster;
    Train fTrain;

    Vector3f last;
    bool first = true;
    float dis = 0.0f;
    bool breakScript = false;

    float totalDistance = 0.0f;
   
    int i=0;

    public bool onInit() {
        currentCoaster = sim.getCoasterForEntityId(getParentEntityId());
        fTrain = currentCoaster.getTrainAt(0);
        last = new Vector3f();

        return true;
    }
   
    public void onNextFrame(float tick) {
        if(breakScript) return;

        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.getBogieOrientationAndPosition(0, fo, to, ro, po);

        Vector3f cross = new Vector3f(
            ro.y * fo.z - ro.z * fo.z,
            ro.z * fo.x - ro.x * fo.z,
            ro.z * fo.y - ro.y * fo.x
        );
       
        cross.normalize();
        cross.mul(heartline);
        cross.add(po);

        if(first && beginDistance == 0.0f) {
            System.out.println((i + beginIndex)+ "\t" + po.x + "m\t" + po.y + "m\t" + (po.z * -1.0f) + "m\t");
            System.out.println((i + beginIndex)+ "\t" + cross.x + "m\t" + cross.y + "m\t" + (cross.z * -1.0f) + "m\t");

            first = false;
            i++;
        } else {
            Vector3f v2 = po;
            Vector3f v1 = last;
            float distance = (float) Math.sqrt(Math.pow(v2.x, 2) + Math.pow(v2.y - v1.y, 2) + Math.pow(v2.z - v1.z, 2));
            if(first && beginDistance != 0.0f) {
                first = false;
                distance = 0.0f;
            }

            dis += distance;
            totalDistance += distance;

            if(dis > seperation) {
                if(beginDistance ==0.0f || (beginDistance != 0.0f && totalDistance > beginDistance)) {
                    System.out.println((i + beginIndex)+ "\t" + po.x + "m\t" + po.y + "m\t" + (po.z * -1.0f) + "m\t");
                    System.out.println((i + beginIndex)+ "\t" + cross.x + "m\t" + cross.y + "m\t" + (cross.z * -1.0f) + "m\t");

                    i++;
                }

                dis = 0.0f;
            }
        }
       
        last.x = po.x;
        last.y = po.y;
        last.z = po.z;

        if(i > 490) {
            System.out.println("Change beginDistance to " + totalDistance + "and beginIndex to " + (i + beginIndex));
            breakScript = true;
        }
    }

}
Je ne trouve pas la source de l'erreur
Quelqu'un aurait-il idée de ce qui bloque? Une erreur dans le script? Merci d'avance
Un seul parc d'attraction visité, Aqualud au Touquet.
Coasters fait? Que des coasters aquatique, un à la fête foraine de Lille, les autres étaient les toboggans d'Aqualud! Et aussi les petits coasters enfantin dans les fêtes foraines!

*

Hors ligne Thesosonani

  • *
  • 16
  • En ce moment sur la route de Port aventura
    • Voir le profil
Re : [No Limits 2] Tuto sur les scripts
« Réponse #266 le: 20 juillet 2017 à 15:21:34 »
Salut
J'ai une question, j'ai tenté de faire un programme qui permet d'avoir différent musique dans chaque train (dans mon coaster j'en ai 4), mais lorsque j'ai essayer de lancer le programme il m'indique qu'il y a une erreur (Syntax error: Unexpected character detected), mais je n'arrive pas à voir ou se trouve l'erreur, donc es ce que vous pouvez m'aider s'il vous plaît ?   :cry:

PS: (j'ai fait mon programme à partir du programme MultiTriggerMusic de Meletou  :wink: )

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

 public class MultiTriggerMusic extends Script implements TrackTriggerListener{

    private static final String scriptName = "MultiTriggerMusic";

// .................................definition des 2 triggers et des trains..................................
    private TrackTrigger Trigger1;
    private TrackTrigger Trigger2;
Train fTrain;
private int NbTrain;

//*********************************definition des 4 musiques**********************************

 private static final String sSoundFile1 = "Squeezie.ogg";
 StaticSound sSound1;
 private static final String sSoundFile2 = "AlexSkrindo.ogg";
 StaticSound sSound2;
 private static final String sSoundFile3 = "CartoonOnOn.ogg";
 StaticSound sSound3;
 private static final String sSoundFile4 = "CatoonWhyWeLose.ogg";
 StaticSound sSound4;
//***************************************************************************************************
    public bool onInit(){
     
       Coaster coaster = sim.getCoasterForEntityId(getParentEntityId());

//...................................recherche des triggers sur les rails.................................

       Trigger1 = coaster.getTrackTrigger("startmuisic");
       Trigger1.addTrackTriggerListener(this);
       Trigger2 = coaster.getTrackTrigger("stopmusic");
       Trigger2.addTrackTriggerListener(this);
//============================================On charge les 2 musiques =======================================

       sSound1 = StaticSound.loadFromFile(sSoundFile1, StaticSound.E_ENVMODE_LOCAL);
       sSound2 = StaticSound.loadFromFile(sSoundFile2, StaticSound.E_ENVMODE_LOCAL);
   sSound3 = StaticSound.loadFromFile(sSoundFile3, StaticSound.E_ENVMODE_LOCAL);
       sSound4 = StaticSound.loadFromFile(sSoundFile4, StaticSound.E_ENVMODE_LOCAL);


       return true;
     
    }
//-----------------------------------------------------------------------------------------
    fTrain = coaster.getTrackAt(0);

NbTrain = coaster.getTrackCount();
System.out.println(NbTrain);


public void onNextFrame(float fTickTime)
    {
    }

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

             Sound1outAction1();
          }
       }

        if (trigger == Trigger2){
          if (train.getSpeed() > 0)
          {
             Sound1outAction2();

          }
      }
    }

if (fTrain = coaster.getTrackAt(1))
{
       if (trigger == Trigger1)
       {
          if (train.getSpeed() > 0){

             Sound2outAction1();
          }
       }

        if (trigger == Trigger2){
          if (train.getSpeed() > 0)
          {
             Sound2outAction2();

          }
      }
    }

if (fTrain = coaster.getTrackAt(2))
{
       if (trigger == Trigger1)
       {
          if (train.getSpeed() > 0){

             Sound3outAction1();
          }
       }

        if (trigger == Trigger2){
          if (train.getSpeed() > 0)
          {
             Sound3outAction2();

          }
      }
    }

if (fTrain = coaster.getTrackAt(3))
{
       if (trigger == Trigger1)
       {
          if (train.getSpeed() > 0){

             Sound4outAction1();
          }
       }

        if (trigger == Trigger2){
          if (train.getSpeed() > 0)
          {
             Sound4outAction2();

          }
      }
    }
 }
//-------------------------------------------------------------------------------------------
    public void onTrainLeaving(TrackTrigger trigger, Train train)
    {
    }
//------------------------------------------------------------------------------------------
    public void Sound1outAction1()
    {
         System.out.println("Entré: Trigger1");
         soundTrigger1();                                                               
         sSound1.play();                                                                 // play musique 1
    }
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     public void Sound1outAction2()
    {
         System.out.println("Entré: Trigger2");
         sSound1.stop();                                                                   // stop musique 1
    }
//------------------------------------------------------------------------------------------
    public void Sound2outAction1()
    {
         System.out.println("Entré: Trigger1");
         soundTrigger2();                                                             
         sSound2.play();                                                                  // play musique 2
    }
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     public void Sound2outAction2()
    {
         System.out.println("Entré: Trigger2");
         sSound2.stop();                                                                 // stop musique 2
    }

//------------------------------------------------------------------------------------------
    public void Sound3outAction1()
    {
         System.out.println("Entré: Trigger1");
         soundTrigger3();                                                           
         sSound3.play();                                                                  // play musique 3
    }
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     public void Sound3outAction2()
    {
         System.out.println("Entré: Trigger2");
         sSound3.stop();                                                                // stop musique 3
    }

//------------------------------------------------------------------------------------------
    public void Sound4outAction1()
    {
         System.out.println("Entré: Trigger1");
         soundTrigger4();                                                           
         sSound4.play();                                                                   // play musique 4
    }
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     public void Sound4outAction2()
    {
         System.out.println("Entré: Trigger2");
         sSound4.stop();                                                                 // stop musique 4
    }
//+++++++++++++++++++++++++++++++++++++++Position de la 1 musique ++++++++++++++++++++++++++++++++++++++
     public void soundTrigger1()
        {

  if(sSound1 == null)
                 {
   System.err.println("Sound file 1 not found");
   return;
   }

  sSound1.setPosition(new Vector3f(0.0f,0.0f,0.0f));
  sSound1.setGain(20.0f);

 }
//.........................................Position de la 2 musique...................................
  public void soundTrigger2()
        {

  if(sSound2 == null)
                 {
   System.err.println("Sound file 2 not found");
   return;
   }

  sSound2.setPosition(new Vector3f(0.0f,1.0f,0.0f));
  sSound2.setGain(20.0f);

 }
//..................................Position de la musique 3...................................
  public void soundTrigger3()
        {

  if(sSound3 == null)
                 {
   System.err.println("Sound file 3 not found");
   return;
   }

  sSound3.setPosition(new Vector3f(0.0f,1.0f,0.0f));
  sSound3.setGain(20.0f);
  }
//................................Position de la muisique 4...................................
  public void soundTrigger4()
        {

  if(sSound4 == null)
                 {
   System.err.println("Sound file 4 not found");
   return;
   }

  sSound4.setPosition(new Vector3f(0.0f,1.0f,0.0f));
  sSound4.setGain(20.0f);
  }

 }
« Modifié: 20 juillet 2017 à 21:02:52 par Thesosonani »

*

Hors ligne Jmy

  • *******
  • 1 300
  • Tous différents mais tous passionnés!
    • Voir le profil
Re : Re : [No Limits 2] Tuto sur les scripts
« Réponse #267 le: 24 juillet 2017 à 11:53:06 »
public bool onInit(){
     
       Coaster coaster = sim.getCoasterForEntityId(getParentEntityId());

//...................................recherche des triggers sur les rails.................................

       Trigger1 = coaster.getTrackTrigger("startmuisic");

Est ce normal ?
Est ce qu'il te donne le numéro de la ligne en question?

*

Hors ligne Thesosonani

  • *
  • 16
  • En ce moment sur la route de Port aventura
    • Voir le profil
Re : [No Limits 2] Tuto sur les scripts
« Réponse #268 le: 25 juillet 2017 à 14:17:04 »
Est ce normal ?
Est ce qu'il te donne le numéro de la ligne en question?

Pour moi c'est normal, j'ai suivi le programme de meltou1 en changeant certains paramètre pour les trains. Et il me dit que l'erreur ce trouve en ligne 1  :scream: