[No Limits 2] Tuto sur les scripts

  • 283 Réponses
  • 83144 Vues

0 Membres et 1 Invité sur ce sujet

*

Scotty

  • ********
  • 2 100
  • J'aime les belles thémas.
    • Voir le profil
Re : [No Limits 2] Tuto sur les scripts
« Réponse #270 le: 09 février 2018 à 18:53:27 »
J'avais essayé de faire la même chose, j'en été arrivé au même problème que toi.  :-(
What a thema !



*

CoasterZz.

  • ******
  • 832
  • One Ring to rule them all
    • Voir le profil
Re : [No Limits 2] Tuto sur les scripts
« Réponse #271 le: 10 février 2018 à 17:17:50 »
Il doit bien y avoir une quelconque manière de réaliser cette action qui est sur le papier ultra basique. Je n'ai malheureusement aucune connaissances en la matière pour scripter la chose moi-même.



Si un train se trouve sur le block noir, jaune ou bleu, alors le switch est en position 2. Dans le cas contraire le switch peut repasser en position 1. Cela peut se régler via un "Fake Block" plus loin sur la voie qui définie le point à partir duquel le switch peut changer à nouveau.

Je pense même qu'on peut le faire via des triggers à même la voie, dans le genre :
Si un train se trouve sur le trigger 1, alors le switch passe en position 2, Si un train passe le trigger 2, alors le switch repasse en position 1.

Quelqu'un a une idée ?

*

CoasterZz.

  • ******
  • 832
  • One Ring to rule them all
    • Voir le profil
Re : [No Limits 2] Tuto sur les scripts
« Réponse #272 le: 08 mars 2018 à 01:45:35 »
Bon je viens aux nouvelles.

On a tenté plusieurs choses mais il semblerait qu'il y ai une erreur.

D'abord on a chargé le track et le switch avec ça :

Coaster coaster = sim.getCoasterForEntityId(getParentEntityId());
SpecialTrack switch = coaster.getSpecialTrack("monSwitch");

Puis on a tenté de d'effectuer le switch comme expliqué dans la doc de NL2 via :

switch.setSwitchDirection(1);

mais peu importe la valeur, rien ne se passe et ça renvoie "false" qu'on log dans la console, ce qui signifie que le déplacement a échoué.

Je précise que cette tentative est effectuée en utilisant des triggers sur la voie.

Des idées ?

*

Scotty

  • ********
  • 2 100
  • J'aime les belles thémas.
    • Voir le profil
Re : [No Limits 2] Tuto sur les scripts
« Réponse #273 le: 08 mars 2018 à 11:44:21 »
T'as pensé à envoyer un mail à Meletou, c'est celui qui faisait des tutos script en Français sur NL² ?
What a thema !



*

CoasterZz.

  • ******
  • 832
  • One Ring to rule them all
    • Voir le profil
Re : [No Limits 2] Tuto sur les scripts
« Réponse #274 le: 08 mars 2018 à 16:54:56 »
We did it !! Un ami a réussi à prog le script et tout fonctionne ! Je le partagerais si il le veut bien. Mais pour le moment le problème est résolut !  :rire:

*

Twan

  • ********
  • 5 474
  • ça maaaaarche
    • Voir le profil
  • Home Park: Cità Park Mamen
Re : [No Limits 2] Tuto sur les scripts
« Réponse #275 le: 16 juin 2018 à 20:01:10 »
Quelqu'un aurait un lien du script generator ?

Parcs 2019 : Phantasialand x2, Disneyland Paris, Walt Disney Studios, Parc Astérix, Walibi Holland.
A venir : Grona Lund, Liseberg, Kolmarden, EuropaPark.

*

CoasterZz.

  • ******
  • 832
  • One Ring to rule them all
    • Voir le profil
Re : [No Limits 2] Tuto sur les scripts
« Réponse #276 le: 16 juin 2018 à 23:58:46 »
Je l'ai link

*

Twan

  • ********
  • 5 474
  • ça maaaaarche
    • Voir le profil
  • Home Park: Cità Park Mamen
Re : [No Limits 2] Tuto sur les scripts
« Réponse #277 le: 17 juin 2018 à 00:42:04 »
Merci ! D’ailleur Je serai étonné de voir le script de ton Coaster ci dessus ;)

Parcs 2019 : Phantasialand x2, Disneyland Paris, Walt Disney Studios, Parc Astérix, Walibi Holland.
A venir : Grona Lund, Liseberg, Kolmarden, EuropaPark.

*

CoasterZz.

  • ******
  • 832
  • One Ring to rule them all
    • Voir le profil
Re : [No Limits 2] Tuto sur les scripts
« Réponse #278 le: 17 juin 2018 à 01:04:39 »
Il ne marche pas via le Script generator. Le generator est uniquement pensé pour faire fonctionner des aiguillages par pair, de manière à avoir une section en avant, puis en arrière, puis en avant et retour station pour faire court.

Sur mon ride l'idée était de quitter la station, passer un aiguillage pour se retrouver sur une section de launch sur laquelle le train s'engage en marche avant, avant de revenir en arrière, de passer l'aiguillage sur la seconde voie vers une tour, puis de repartir en avant.

En gros si l'on suivait le générateur de scripts, après le premier passage de l'aiguillage Nolimits 2 considère que le train passe en mode Backward et ce peu importe si il est en fait en marche avant. Donc il y a un paradoxe qui empêche le track de fonctionner.

Notre script (qui, sans retouches ne fonctionne probablement pas sur un autre track) fonctionne via un système de triggers. Le Trigger A se situe juste après l'aiguillage et exige un passage de l'aiguillage sur voie 2. Ensuite plus loin sur le layout un Trigger B force le retour de l'aiguillage en voie 1 à départ de station, lorsque le launch a été effectué.

import com.nolimitscoaster.*;

public class SwitchScript extends Script implements BlockSystemController {

    private static final String _script = "SwitchScript";
    private static final int STATE_BLOCK_FREE = 0;
    private static final int STATE_BLOCK_APPROACHING = 1;
    private static final int STATE_BLOCK_LEAVING = 2;
    private static final int STATE_BLOCK_BEFORE_TRIGGER = 3;
    private static final int STATE_BLOCK_BEHIND_TRIGGER = 4;
    private static final int STATE_BLOCK_WAITING = 5;
    private static final int STATE_BLOCK_WAIT_FOR_CLEAR = 6;
    private static final int STATE_BLOCK_WAIT_FOR_ADVANCE = 7;
    private static final int STATE_BLOCK_IN_STATION = 8;
    private static final int AUTO_MODE = 0;
    private static final int MANUAL_BLOCK_MODE = 1;
    private static final int FULL_MANUAL_MODE = 2;

    private Coaster _coaster;
    private Block _station;
    private SpecialTrack _switch;
    private Block _preLaunch;
    private float _preLaunchTime;
    private Block _trimBrakes;
    private float _trimBrakesTime;
    private Block _stock;
    private float _stockTime;
    private Block _tableStock;
    private float _tableStockTime;

    private int _mode;

    //<editor-fold desc="Initiation">
    public bool onInit() {
        System.out.println(_script + " started !");

        String blockName;
        _coaster = sim.getCoasterForEntityId(getParentEntityId());

        if (_coaster == null) {
            System.err.println(_script + " : Error loading Coaster.");
            return false;
        }
        _coaster.setBlockSystemController(this);
        blockName = "Station";
        _station = _coaster.getBlock(blockName);
        if (!checkAndSetInitialBlockState(_station, blockName)) {
            return false;
        }
        _station.setAdvanceFwdVisible(true);
        blockName = "Switch";
        _switch = _coaster.getSpecialTrack(blockName);
        if (_switch == null) {
            System.err.println(_script + ": SpecialTrack '" + blockName + "' not found.");
            return false;
        }
        blockName = "PreLaunch";
        _preLaunch = _coaster.getBlock(blockName);
        if (!checkAndSetInitialBlockState(_preLaunch, blockName)) {
            return false;
        }
        _preLaunch.setAdvanceFwdVisible(true);
        blockName = "TrimBrakes";
        _trimBrakes = _coaster.getBlock(blockName);
        if (!checkAndSetInitialBlockState(_trimBrakes, blockName)) {
            return false;
        }
        _trimBrakes.setAdvanceFwdVisible(true);
        blockName = "Stock";
        _stock = _coaster.getBlock(blockName);
        if (!checkAndSetInitialBlockState(_stock, blockName)) {
            return false;
        }
        _stock.setAdvanceFwdVisible(true);
        blockName = "TableBlock";
        _tableStock = _coaster.getBlock(blockName);
        if (!checkAndSetInitialBlockState(_tableStock, blockName)) {
            return false;
        }
        _tableStock.setAdvanceFwdVisible(true);
        _mode = AUTO_MODE;
        return true;
    }
    //</editor-fold>

    //<editor-fold desc="Trains Stages">
    public void onNextFrame(float tick) {
        if (_mode != FULL_MANUAL_MODE) {
            processStation();
            processPreLaunch();
            processTrimBrakes();
            processStock();
            processTableStock();
            if (_mode == MANUAL_BLOCK_MODE) {
                updateControlPanel();
            }
        }
    }

    public void onAutoMode(Coaster c) {
        if (_mode == FULL_MANUAL_MODE) {
            setInitialBlockState(_station);
            setInitialBlockState(_preLaunch);
            setInitialBlockState(_trimBrakes);
            setInitialBlockState(_stock);
            setInitialBlockState(_tableStock);
        }
        _mode = AUTO_MODE;
        updateControlPanel();
    }

    public void onManualBlockMode(Coaster c) {
        if (_mode == FULL_MANUAL_MODE) {
            setInitialBlockState(_station);
            setInitialBlockState(_preLaunch);
            setInitialBlockState(_trimBrakes);
            setInitialBlockState(_stock);
            setInitialBlockState(_tableStock);
        }
        _mode = MANUAL_BLOCK_MODE;
        updateControlPanel();
    }

    public void onFullManualMode(Coaster c) {
        _mode = FULL_MANUAL_MODE;
        updateControlPanel();
    }

    public void onAdvanceFWDButton(Block block) {
        if (block == _station) {
            _preLaunch.setState(STATE_BLOCK_APPROACHING);
            _station.setState(STATE_BLOCK_LEAVING);
            _station.getSection().setStationLeaving();
        }
        if (block == _preLaunch) {
            _trimBrakes.setState(STATE_BLOCK_APPROACHING);
            _preLaunch.setState(STATE_BLOCK_LEAVING);
        }
        if (block == _trimBrakes) {
            _stock.setState(STATE_BLOCK_APPROACHING);
            _trimBrakes.setState(STATE_BLOCK_LEAVING);
        }
        if (block == _stock) {
            _tableStock.setState(STATE_BLOCK_APPROACHING);
            _stock.setState(STATE_BLOCK_LEAVING);
        }
        if (block == _tableStock) {
            _station.setState(STATE_BLOCK_APPROACHING);
            _tableStock.setState(STATE_BLOCK_LEAVING);
        }
    }

    public void onAdvanceBWDButton(Block block) {
    }

    private void updateControlPanel() {
        _station.setAdvanceFwdEnabled(_station.getState() == STATE_BLOCK_WAIT_FOR_ADVANCE && preparePreLaunchEntering());
        _switch.setCanManualSwitchDirection((_preLaunch.getState() == STATE_BLOCK_FREE) || (_preLaunch.getState() == STATE_BLOCK_WAIT_FOR_ADVANCE) || (_preLaunch.getState() == STATE_BLOCK_WAIT_FOR_CLEAR));
        _preLaunch.setAdvanceFwdEnabled(_preLaunch.getState() == STATE_BLOCK_WAIT_FOR_ADVANCE && prepareTrimBrakesEntering());
        _trimBrakes.setAdvanceFwdEnabled(_trimBrakes.getState() == STATE_BLOCK_WAIT_FOR_ADVANCE && prepareStockEntering());
        _stock.setAdvanceFwdEnabled(_stock.getState() == STATE_BLOCK_WAIT_FOR_ADVANCE && prepareTableStockEntering());
        _tableStock.setAdvanceFwdEnabled(_tableStock.getState() == STATE_BLOCK_WAIT_FOR_ADVANCE && prepareStationEntering());
    }
    //</editor-fold>

    //<editor-fold desc="Blocks Entering Preparation">
    private bool preparePreLaunchEntering() {
        if (_preLaunch.getState() == STATE_BLOCK_FREE && _trimBrakes.getState() != STATE_BLOCK_APPROACHING) {
            if (_switch.getVisibleSwitchState() == 1) {
                return true;
            } else {
                if (_mode == AUTO_MODE) {
                    _switch.setSwitchDirection(1);
                }
            }
        }
        return false;
    }

    private bool prepareTrimBrakesEntering() {
        if (_trimBrakes.getState() == STATE_BLOCK_FREE) {
            return true;
        }
        return false;
    }

    private bool prepareStockEntering() {
        if (_stock.getState() == STATE_BLOCK_FREE) {
            return true;
        }
        return false;
    }

    private bool prepareTableStockEntering() {
        if (_tableStock.getState() == STATE_BLOCK_FREE) {
            return true;
        }
        return false;
    }

    private bool prepareStationEntering() {
        if (_station.getState() == STATE_BLOCK_FREE) {
            return true;
        }
        return false;
    }
    //</editor-fold>

    //<editor-fold desc="Blocks Processing">
    private void processStation() {
        Block stationBlock = _station;
        Block nextBlock = _preLaunch;
        switch (stationBlock.getState()) {
            case STATE_BLOCK_IN_STATION:
                if (stationBlock.getSection().isStationWaitingForClearBlock()) {
                    if (nextBlock.getState() == STATE_BLOCK_FREE) {
                        stationBlock.getSection().setStationNextBlockClear();
                    }
                } else if (stationBlock.getSection().isStationWaitingForAdvance()) {
                    if (_mode == MANUAL_BLOCK_MODE) {
                        if (nextBlock.getState() == STATE_BLOCK_FREE) {
                            stationBlock.setState(STATE_BLOCK_WAIT_FOR_ADVANCE);
                        } else {
                            stationBlock.getSection().setStationNextBlockOccupied();
                        }
                    } else {
                        if (nextBlock.getState() == STATE_BLOCK_FREE) {
                            if (preparePreLaunchEntering()) {
                                nextBlock.setState(STATE_BLOCK_APPROACHING);
                                stationBlock.setState(STATE_BLOCK_LEAVING);
                                stationBlock.getSection().setStationLeaving();
                            }
                        } else {
                            stationBlock.getSection().setStationNextBlockOccupied();
                        }
                    }
                }
                break;
            case STATE_BLOCK_WAIT_FOR_ADVANCE:
                if ((_mode != MANUAL_BLOCK_MODE) || !stationBlock.getSection().isStationWaitingForAdvance() || (nextBlock.getState() != STATE_BLOCK_FREE)) {
                    stationBlock.setState(STATE_BLOCK_IN_STATION);
                }
                break;
            case STATE_BLOCK_LEAVING:
                if (stationBlock.getNumberOfTrainsOnBlock() != 0) {
                    stationBlock.getSection().setBrakesOff();
                    stationBlock.getSection().setTransportsStandardFwdOn();
                    stationBlock.getSection().setTransportsLaunchFwdOn();
                } else {
                    stationBlock.setState(STATE_BLOCK_FREE);
                }
                break;
            case STATE_BLOCK_FREE:
                stationBlock.getSection().setTransportsOff();
                stationBlock.getSection().setBrakesOn();
                break;
            case STATE_BLOCK_APPROACHING:
                if (stationBlock.getSection().isTrainOnSection()) {
                    stationBlock.getSection().setStationEntering();
                    stationBlock.setState(STATE_BLOCK_IN_STATION);
                } else {
                    stationBlock.getSection().setBrakesOff();
                    stationBlock.getSection().setTransportsOff();
                }
                break;
        }
    }

    private void processPreLaunch() {
        switch (_preLaunch.getState()) {
            case STATE_BLOCK_APPROACHING:
                _preLaunch.getSection().setBrakesOff();
                _preLaunch.getSection().setTransportsOff();
                if (_preLaunch.getSection().isTrainOnSection()) {
                    _preLaunch.setState(STATE_BLOCK_BEFORE_TRIGGER);
                }
                break;
            case STATE_BLOCK_BEFORE_TRIGGER:
                _preLaunch.getSection().setBrakesTrim();
                _preLaunch.getSection().setTransportsStandardBwdDependingOnBrake();
                if (!_preLaunch.getSection().isTrainBehindBrakeTrigger()) {
                    _preLaunch.setState(STATE_BLOCK_BEHIND_TRIGGER);
                }
                break;
            case STATE_BLOCK_BEHIND_TRIGGER:
                _preLaunch.getSection().setBrakesOn();
                _preLaunch.getSection().setTransportsOff();
            {
                Train train = _preLaunch.getSection().getTrainOnSection();
                if (train.getSpeed() == 0) {
                    _preLaunchTime = 0;
                    _preLaunch.setState(STATE_BLOCK_WAITING);
                }
            }
            break;
            case STATE_BLOCK_WAITING:
                _preLaunch.getSection().setBrakesOn();
                _preLaunch.getSection().setTransportsOff();
                _preLaunchTime += sim.getCurSimulationTickSec();
                preparePreLaunchLeaving();
                if (_preLaunchTime >= _preLaunch.getSection().getBrakeWaitTime()) {
                    _preLaunch.setState(STATE_BLOCK_WAIT_FOR_CLEAR);
                }
                break;
            case STATE_BLOCK_WAIT_FOR_CLEAR:
                _preLaunch.getSection().setBrakesOn();
                _preLaunch.getSection().setTransportsOff();
                if (preparePreLaunchLeaving()) {
                    if (_mode == MANUAL_BLOCK_MODE) {
                        _preLaunch.setState(STATE_BLOCK_WAIT_FOR_ADVANCE);
                    } else {
                        if (prepareTrimBrakesEntering()) {
                            _trimBrakes.setState(STATE_BLOCK_APPROACHING);
                            _preLaunch.setState(STATE_BLOCK_LEAVING);
                        }
                    }
                }
                break;
            case STATE_BLOCK_WAIT_FOR_ADVANCE:
                _preLaunch.getSection().setBrakesOn();
                _preLaunch.getSection().setTransportsOff();
                if (!preparePreLaunchLeaving()) {
                    _preLaunch.setState(STATE_BLOCK_WAIT_FOR_CLEAR);
                }
                break;
            case STATE_BLOCK_LEAVING:
                if (_preLaunch.getSection().isTrainOnSection()) {
                    _preLaunch.getSection().setBrakesOff();
                    _preLaunch.getSection().setTransportsStandardFwdOn();
                    _preLaunch.getSection().setTransportsLaunchFwdOn();
                } else {
                    _preLaunch.getSection().setBrakesOn();
                    _preLaunch.getSection().setTransportsOff();
                }
                if (_preLaunch.getNumberOfTrainsOnBlock() == 0) {
                    _preLaunch.setState(STATE_BLOCK_FREE);
                }
                break;
            case STATE_BLOCK_FREE:
                _preLaunch.getSection().setBrakesOn();
                _preLaunch.getSection().setTransportsOff();
                break;
        }
    }

    private void processTrimBrakes() {
        switch (_trimBrakes.getState()) {
            case STATE_BLOCK_FREE:
                _trimBrakes.getSection().setTransportsOff();
                _trimBrakes.getSection().setBrakesOn();
                break;
            case STATE_BLOCK_APPROACHING:
                if (_trimBrakes.getSection().isTrainOnSection()) {
                    _trimBrakes.setState(STATE_BLOCK_BEFORE_TRIGGER);
                } else {
                    if (prepareStockEntering()) {
                        _trimBrakes.getSection().setBrakesOff();
                    } else {
                        _trimBrakes.getSection().setBrakesOn();
                    }
                    _trimBrakes.getSection().setTransportsOff();
                }
                break;
            case STATE_BLOCK_BEFORE_TRIGGER:
                prepareStockEntering();
                _trimBrakes.getSection().setBrakesTrim();
                _trimBrakes.getSection().setTransportsStandardFwdDependingOnBrake();
                if (_trimBrakes.getSection().isTrainBehindBrakeTrigger()) {
                    _trimBrakes.setState(STATE_BLOCK_BEHIND_TRIGGER);
                    _trimBrakesTime = 0;
                }
                break;
            case STATE_BLOCK_BEHIND_TRIGGER:
                if (_mode == MANUAL_BLOCK_MODE) {
                    if (prepareStockEntering()) {
                        _trimBrakes.setState(STATE_BLOCK_WAIT_FOR_ADVANCE);
                    } else {
                        _trimBrakes.getSection().setTransportsOff();
                        _trimBrakes.getSection().setBrakesOn();
                    }
                } else {
                    if (prepareStockEntering() && (_mode == AUTO_MODE) && (!_trimBrakes.getSection().isBrakeCompleteStop() || _trimBrakesTime > _trimBrakes.getSection().getBrakeWaitTime())) {
                        _stock.setState(STATE_BLOCK_APPROACHING);
                        _trimBrakes.setState(STATE_BLOCK_LEAVING);
                    } else {
                        if (_trimBrakes.getSection().getTrainOnSection().getSpeed() == 0)
                            _trimBrakesTime += sim.getCurSimulationTickSec();

                        _trimBrakes.getSection().setTransportsOff();
                        _trimBrakes.getSection().setBrakesOn();
                    }
                }
                break;
            case STATE_BLOCK_WAIT_FOR_ADVANCE:
                if (_mode == AUTO_MODE) {
                    _trimBrakes.setState(STATE_BLOCK_BEHIND_TRIGGER);
                } else {
                    if (!prepareStockEntering()) {
                        _trimBrakes.setState(STATE_BLOCK_BEHIND_TRIGGER);
                    } else {
                        _trimBrakes.getSection().setTransportsOff();
                        _trimBrakes.getSection().setBrakesOn();
                    }
                }
                break;
            case STATE_BLOCK_LEAVING:
                _trimBrakes.getSection().setBrakesOff();
                _trimBrakes.getSection().setTransportsStandardFwdOn();
                _trimBrakes.getSection().setTransportsLaunchFwdOn();
                preparePreLaunchEntering();
                if (_trimBrakes.getNumberOfTrainsOnBlock() == 0) {
                    _trimBrakes.setState(STATE_BLOCK_FREE);
                }
                break;
            case STATE_BLOCK_WAIT_FOR_CLEAR:
                if (_trimBrakes.getSection().isTrainBehindBrakeTrigger()) {
                    _trimBrakes.setState(STATE_BLOCK_BEHIND_TRIGGER);
                } else {
                    _trimBrakes.setState(STATE_BLOCK_BEFORE_TRIGGER);
                }
                break;
        }
    }

    private void processStock() {
        switch (_stock.getState()) {
            case STATE_BLOCK_FREE:
                _stock.getSection().setTransportsOff();
                _stock.getSection().setBrakesOn();
                break;
            case STATE_BLOCK_APPROACHING:
                if (_stock.getSection().isTrainOnSection()) {
                    _stock.setState(STATE_BLOCK_BEFORE_TRIGGER);
                } else {
                    if (prepareTableStockEntering()) {
                        _stock.getSection().setBrakesOff();
                    } else {
                        _stock.getSection().setBrakesOn();
                    }
                    _stock.getSection().setTransportsOff();
                }
                break;
            case STATE_BLOCK_BEFORE_TRIGGER:
                prepareTableStockEntering();
                _stock.getSection().setBrakesTrim();
                _stock.getSection().setTransportsStandardFwdDependingOnBrake();
                if (_stock.getSection().isTrainBehindBrakeTrigger()) {
                    _stock.setState(STATE_BLOCK_BEHIND_TRIGGER);
                    _stockTime = 0;
                }
                break;
            case STATE_BLOCK_BEHIND_TRIGGER:
                if (_mode == MANUAL_BLOCK_MODE) {
                    if (prepareTableStockEntering()) {
                        _stock.setState(STATE_BLOCK_WAIT_FOR_ADVANCE);
                    } else {
                        _stock.getSection().setTransportsOff();
                        _stock.getSection().setBrakesOn();
                    }
                } else {
                    if (prepareTableStockEntering() && (_mode == AUTO_MODE) && (!_stock.getSection().isBrakeCompleteStop() || _stockTime > _stock.getSection().getBrakeWaitTime())) {
                        _tableStock.setState(STATE_BLOCK_APPROACHING);
                        _stock.setState(STATE_BLOCK_LEAVING);
                    } else {
                        if (_stock.getSection().getTrainOnSection().getSpeed() == 0)
                            _stockTime += sim.getCurSimulationTickSec();

                        _stock.getSection().setTransportsOff();
                        _stock.getSection().setBrakesOn();
                    }
                }
                break;
            case STATE_BLOCK_WAIT_FOR_ADVANCE:
                if (_mode == AUTO_MODE) {
                    _stock.setState(STATE_BLOCK_BEHIND_TRIGGER);
                } else {
                    if (!prepareTableStockEntering()) {
                        _stock.setState(STATE_BLOCK_BEHIND_TRIGGER);
                    } else {
                        _stock.getSection().setTransportsOff();
                        _stock.getSection().setBrakesOn();
                    }
                }
                break;
            case STATE_BLOCK_LEAVING:
                _stock.getSection().setBrakesOff();
                _stock.getSection().setTransportsStandardFwdOn();
                _stock.getSection().setTransportsLaunchFwdOn();
                if (_stock.getNumberOfTrainsOnBlock() == 0) {
                    _stock.setState(STATE_BLOCK_FREE);
                }
                break;
            case STATE_BLOCK_WAIT_FOR_CLEAR:
                if (_stock.getSection().isTrainBehindBrakeTrigger()) {
                    _stock.setState(STATE_BLOCK_BEHIND_TRIGGER);
                } else {
                    _stock.setState(STATE_BLOCK_BEFORE_TRIGGER);
                }
                break;
        }
    }

    private void processTableStock() {
        switch (_tableStock.getState()) {
            case STATE_BLOCK_FREE:
                _tableStock.getSection().setTransportsOff();
                _tableStock.getSection().setBrakesOn();
                break;
            case STATE_BLOCK_APPROACHING:
                if (_tableStock.getSection().isTrainOnSection()) {
                    _tableStock.setState(STATE_BLOCK_BEFORE_TRIGGER);
                } else {
                    if (prepareStationEntering()) {
                        _tableStock.getSection().setBrakesOff();
                    } else {
                        _tableStock.getSection().setBrakesOn();
                    }
                    _tableStock.getSection().setTransportsOff();
                }
                break;
            case STATE_BLOCK_BEFORE_TRIGGER:
                prepareStationEntering();
                _tableStock.getSection().setBrakesTrim();
                _tableStock.getSection().setTransportsStandardFwdDependingOnBrake();
                if (_tableStock.getSection().isTrainBehindBrakeTrigger()) {
                    _tableStock.setState(STATE_BLOCK_BEHIND_TRIGGER);
                    _tableStockTime = 0;
                }
                break;
            case STATE_BLOCK_BEHIND_TRIGGER:
                if (_mode == MANUAL_BLOCK_MODE) {
                    if (prepareStationEntering()) {
                        _tableStock.setState(STATE_BLOCK_WAIT_FOR_ADVANCE);
                    } else {
                        _tableStock.getSection().setTransportsOff();
                        _tableStock.getSection().setBrakesOn();
                    }
                } else {
                    if (prepareStationEntering() && (_mode == AUTO_MODE) && (!_tableStock.getSection().isBrakeCompleteStop() || _tableStockTime > _tableStock.getSection().getBrakeWaitTime())) {
                        _station.setState(STATE_BLOCK_APPROACHING);
                        _tableStock.setState(STATE_BLOCK_LEAVING);
                    } else {
                        if (_tableStock.getSection().getTrainOnSection().getSpeed() == 0)
                            _tableStockTime += sim.getCurSimulationTickSec();

                        _tableStock.getSection().setTransportsOff();
                        _tableStock.getSection().setBrakesOn();
                    }
                }
                break;
            case STATE_BLOCK_WAIT_FOR_ADVANCE:
                if (_mode == AUTO_MODE) {
                    _tableStock.setState(STATE_BLOCK_BEHIND_TRIGGER);
                } else {
                    if (!prepareStationEntering()) {
                        _tableStock.setState(STATE_BLOCK_BEHIND_TRIGGER);
                    } else {
                        _tableStock.getSection().setTransportsOff();
                        _tableStock.getSection().setBrakesOn();
                    }
                }
                break;
            case STATE_BLOCK_LEAVING:
                _tableStock.getSection().setBrakesOff();
                _tableStock.getSection().setTransportsStandardFwdOn();
                _tableStock.getSection().setTransportsLaunchFwdOn();
                if (_tableStock.getNumberOfTrainsOnBlock() == 0) {
                    _tableStock.setState(STATE_BLOCK_FREE);
                }
                break;
            case STATE_BLOCK_WAIT_FOR_CLEAR:
                if (_tableStock.getSection().isTrainBehindBrakeTrigger()) {
                    _tableStock.setState(STATE_BLOCK_BEHIND_TRIGGER);
                } else {
                    _tableStock.setState(STATE_BLOCK_BEFORE_TRIGGER);
                }
                break;
        }
    }
    //</editor-fold>

    //<editor-fold desc="Blocks Leaving Preparation">
    private bool preparePreLaunchLeaving() {
        if (_switch.getVisibleSwitchState() == 0) {
            return true;
        } else {
            if (_mode == AUTO_MODE) {
                _switch.setSwitchDirection(0);
            }
        }
        return false;
    }
    //</editor-fold>

    //<editor-fold desc="Blocks States Management">
    private static bool checkAndSetInitialBlockState(Block block, String name) {
        if (block == null) {
            System.err.println(_script + ": '" + name + "' not found.");
            return false;
        }
        registerBlockStates(block);
        setInitialBlockState(block);
        return true;
    }

    private static void registerBlockStates(Block block) {
        block.registerState(STATE_BLOCK_FREE, "Free", Block.LAMP_OFF);
        block.registerState(STATE_BLOCK_APPROACHING, "Approaching", Block.LAMP_FLASHING);
        block.registerState(STATE_BLOCK_LEAVING, "Leaving", Block.LAMP_ON);
        block.registerState(STATE_BLOCK_BEFORE_TRIGGER, "Before Trigger", Block.LAMP_ON);
        block.registerState(STATE_BLOCK_BEHIND_TRIGGER, "Behind Trigger", Block.LAMP_ON);
        block.registerState(STATE_BLOCK_WAITING, "Waiting", Block.LAMP_ON);
        block.registerState(STATE_BLOCK_WAIT_FOR_CLEAR, "Waiting for Clear Block", Block.LAMP_ON);
        block.registerState(STATE_BLOCK_WAIT_FOR_ADVANCE, "Waiting for Advance", Block.LAMP_ON);
        block.registerState(STATE_BLOCK_IN_STATION, "In Station", Block.LAMP_ON);
    }

    private static void setInitialBlockState(Block block) {
        if (block.getNumberOfTrainsOnBlock() > 0) {
            if (block.getSection().iStation()) {
                block.setState(STATE_BLOCK_IN_STATION);
            } else {
                block.setState(STATE_BLOCK_WAIT_FOR_CLEAR);
            }
        } else {
            block.setState(STATE_BLOCK_FREE);
        }
    }
    //</editor-fold>
}

On est parti du Script Generator, mais ensuite je suis bien incapable d'expliquer ce que mon collègue a fait pour que ça fonctionne.
« Modifié: 17 juin 2018 à 01:07:50 par CoasterZz. »

*

Twan

  • ********
  • 5 474
  • ça maaaaarche
    • Voir le profil
  • Home Park: Cità Park Mamen
Re : [No Limits 2] Tuto sur les scripts
« Réponse #279 le: 17 juin 2018 à 11:38:39 »
Ok. Parce qu'en gros j'ai a peu près la même volonté donc le même problème, je m'explique :

Le train part de la station en avant sur une section launch, celle ci le fait accéléré, il repasse sur cette section en arrière, puis sur la station, toujours en arrière, puis aiguillage et monte sur une fleche. Il repart ainsi en marche avant sur l'aguillage, station et launch puis fait le parcours en marche avant. Arrivé sur les final brake, l'aguillage doit changer de position pour remettre le train en station.

Et c'est la merde.



Voici une image sur paint.
« Modifié: 17 juin 2018 à 11:41:02 par Antoine Gress »

Parcs 2019 : Phantasialand x2, Disneyland Paris, Walt Disney Studios, Parc Astérix, Walibi Holland.
A venir : Grona Lund, Liseberg, Kolmarden, EuropaPark.

*

CoasterZz.

  • ******
  • 832
  • One Ring to rule them all
    • Voir le profil
Re : [No Limits 2] Tuto sur les scripts
« Réponse #280 le: 17 juin 2018 à 13:08:54 »


Voilà à quoi ça ressemble en action de mon côté.

*

Twan

  • ********
  • 5 474
  • ça maaaaarche
    • Voir le profil
  • Home Park: Cità Park Mamen
Re : [No Limits 2] Tuto sur les scripts
« Réponse #281 le: 19 juin 2018 à 00:09:20 »
J'arrive pas du tout à le faire fonctionner... :/

Parcs 2019 : Phantasialand x2, Disneyland Paris, Walt Disney Studios, Parc Astérix, Walibi Holland.
A venir : Grona Lund, Liseberg, Kolmarden, EuropaPark.

*

Scotty

  • ********
  • 2 100
  • J'aime les belles thémas.
    • Voir le profil
Re : Re : [No Limits 2] Tuto sur les scripts
« Réponse #282 le: 19 juin 2018 à 00:34:21 »
J'arrive pas du tout à le faire fonctionner... :/

As tu renommé les blocks ? Sinon le script ne peux pas les repérer 
What a thema !



*

CoasterZz.

  • ******
  • 832
  • One Ring to rule them all
    • Voir le profil
Re : [No Limits 2] Tuto sur les scripts
« Réponse #283 le: 19 juin 2018 à 00:51:28 »
J'avais prévenu que ça ne fonctionnerai probablement pas avec un autre track malheureusement. Surtout que ta configuration est si j'ai bien compris un tout petit peu différente.   :-(

Je précise que les deux Triggers doivent être nommés : moveSwitchRight et moveSwitchLeft
« Modifié: 19 juin 2018 à 00:53:14 par CoasterZz. »

 

Related Topics

  Titre / Démarré par Réponses Dernier message
2 Réponses
2920 Vues
Dernier message 14 mars 2010 à 18:33:15
par Clemox
2 Réponses
1309 Vues
Dernier message 29 août 2014 à 10:58:19
par benije