PDA

Просмотр полной версии : Вопросы по Auran GameScript



Страницы : [1] 2 3 4 5 6

Novice
24.08.2010, 22:26
В етой теме предлагаю задавать вопросы по скриптовому языку Trainz`а. Итак, первый вопрос: Есть ли в Трейнз скриптах таймери и как их запустить на определённое время, по истечении которого запустится функцыя (Проигрывание звука например).

P.S. Ето моя первая тема, так шо просьба не пинать

Kompozitor
24.08.2010, 23:33
Кто нибудь знает, каким тэгом вызывается "замолкание" и включение дефолтного "enginesound"? Хочу сделать команду типа "дырчать-не дырчать". А то возле сплотки тепловозов в депо невозможно находиться - космодром.

При сходе с рельсов замолкают ведь локи. Значит, это должно быть где-то написано.

TRam_
25.08.2010, 09:30
каким тэгом вызывается "замолкание" и включение дефолтного "enginesound"к сожалению, ни скриптовой функции, ни тега конфига пока неизвестно...

Kompozitor
28.08.2010, 02:29
к сожалению, ни скриптовой функции, ни тега конфига пока неизвестно...
А кто ж глушит моторы после схода с рельсов? Где-то ж зарыто...:phil_19:

А возможна ли смена на другой конфиг в виде команды. ну вроде в одном конфиге нормальный Enginesound, а в другом-молчащий? Или два Enginesound в одном конфиге.

Прошу простить, если фантастику говорю.

TRam_
28.08.2010, 17:17
Не, сам когда-то мечтал менять enginespec'и и звуки... Но пока ауран ничего подобного не планирует.

Pumatex
28.08.2010, 17:22
По теме: где можно узнать основы написания скриптов?

TRam_
28.08.2010, 17:56
http://www.trainz-dm.narod.ru/article.html и на railunion.net

Novice
28.08.2010, 22:20
Итак, повторяю свой вопрос :Есть ли в Трейнз скриптах таймери и как их запустить на определённое время, по истечении которого запустится функцыя (Проигрывание звука например). И есчё один вопрос : где можно задать параметру (давлению в торм. цылиндрах напр) подниматся с определённой скоростью (0.5 бар/сек например).Настоятельно прошу ответить.

P.S Я рад што моя тема прижилась:drinks:

TRam_
28.08.2010, 23:09
В трейнз есть потоки (т.е. выполняется один кусок кода, потом этот кусок кода перестаёт выполняться на заданное время, и тем временем выполняются другие куски кода, и собственно прорисовка).

выглядит это так

tread void MyFunction() //функция-поток
{
[некий код]
Sleep(12); // "таймер задержки" на 12 секунд
[некий код]
}

По поводу параметра конкретно давления ТЦ - напрямую его нельзя изменять, только косвенно. Примерно так.

в настройках вагону прописывается наличие компрессора и отсутствие соединения с другими вагонами. В начале игры КМ автоматически устанавливается положение "отпуска". Затем включается разрядка ТМ, причём скорость разрядки подбирается так, чтобы давление в ТМ не менялось (это происходит, когда оно чуть ниже давления запасного резервуара).

А дальше, если нам надо опустошить ТЦ, уменьшаем утечку из ТМ, давление там становится выше давления запасного резервуара, и ТЦ опустошается (тем скорее, чем больше разность давлений). И наоборот, увеличивая утечку, мы наполняем ТЦ.
(если что, функция "задать утечку из ТМ" public native void Vehicle.SetBrakePipeEfficiency ( float efficiency) )

Novice
30.08.2010, 16:39
Прочитал я ваш, Владимир, ответ, загдянул в скрипт 2ТЕ116 (от Rokky), и меня осенило!! Надо задать тег functiohn SetCompressorEficently скажем 0.5 далее задать "спящую" команду проигривания звука компрессора ( например Sleep(World.PlaySound(MyAsset,"sound/compressor_start.wav")) , задать условие, при котором компрессор запускается. При завершении зарядки сказать, шо SetCompressorEficently=0 и затать тоже "спящую" команду вырубления компрессора World.PlaySound(MyAsset,"sound/compressor_stop.wav").

Спасибо вам, Владимир aka TRam , што ответили! Но вы меня неправильно поняли, я имел ввиду не ТЦ, а главный резервуар. Но все равно, я вам очень благодарен! Спасибо!!

Добавлено через 4 часа 31 минуту
Ну, правилино написал, нет?:connie_es:

Добавлено через 35 минут
Я придумал как зделать более-менее нормальный "холодильник" ( автоматический).
Нужно ввести в игру два тега. Один будет поднимать температуру, другой опускать:duel7dl:. Один назовём Nagrevalel, другой Motor_vent. Когда игрок включает первую позицию контроллера ( if GetEngineSetting (throttle) >1) , говорим, шо Nagrevatel включился (Nagrevatel =true) и задаем ему еффективность шоб он грел vater_temp (SetNagrevatelEffincently) . Когда он нагреет воду до определённого уровня (например vater_temp =70) ставим ему еффективность равную нулю, и включаем Motor_vent и уже ему задаём ефективность (5 или -5 ?????) и и запускаются звук и анимацыя вентилятора.Когда уменьшает vater_temp до 50 например запускаем звук вырубления вентилятора и останавливаем анимации, и включаем Nagrevalel задаём ему еффективность и так далее. ФУУУУУУУУУХ:wacko2: Люди, которые понимают в етом деле, скажыте правильно ли я написал и поправте , где я ошыбся.
Я ничего не понимаю в скриптах, но я точно знаю, что ошыбся и скажыте пишутся не так!:aggressive: Проверяй орфографию!

Сергей12
30.08.2010, 19:23
Ребята есть предложение. Оно уже не новое но тем не менее. Всем известно как в моделях делают буферники. Или делают отдельный меш, или лепят корону. Корона конечно совсем не то. Меши не видно на более менее приличном удалении. А если сделать такую штуку. При текстурировании модели делать текстуры буферных фонарей отдельно. Например четыре буферника в модели. Два белых, два красных.
Делается текстура стекла, лампы и рефлектора. Потом вот такой командой это всё включается. SetMCTextureSelfIllumination("имя текстуры",180.0,180.0,180.0);
Объясню приемущества. С помощью вот этого 180.0,180.0,180.0 меняется яркость, и цветовые тона текстуры. Можно сделать белую текстуру (в реале) например красной. Но это не самое главное. Главное это яркость. Можно сделать так что бы буфера горели как солнце!))) И их яркость можно очень легко менять. Например при поднятом ТП, или запущенном дизеле лампы горят процентов на дридцать ярче.
А во время запуска дизеля их практически не видно из за просадки напряжения АБ.
И вообще ими можно варьировать как угодно. Это было применено в освещении приборов на ЧС4Т-544 Beta. В ходе экспериментов были достигнуты кое какие результаты. Вплодь до изменения цветового тона в зависимости от времени суток.
Причём реализовать это можно очень легко. И меньше заморочек в модели. Просто нужна соответсвующая раскладка текстур.

Novice
31.08.2010, 10:12
Ах да , я вчера забыл, надо есчё переменную vater_temp добавить.

P.S. Ау!! Куда все подевались??:flag_of_truce: Ответте пожалуйста.

Сергей12
31.08.2010, 11:47
Правильно мыслишь. И отвяжи управление ГВХ от позиций. Потому как он может включится и на нулевой позиции. Привяжи его лучше к времени года. И напиши температурную кривую. А в ней и пропиши позиции. Так как она на прямую зависит от нагрузки дизеля. Так будет точнее. Ну и конечно не забудь наличие запущенного дизеля. Удачи!)

Volkman
31.08.2010, 12:39
Ребят ну помогите мне, я хочу написать скрипт любой, но какой программой его писать, например команду "открыть двери" Вот совсем ничего не понимаю.

Novice
31.08.2010, 14:57
И напиши температурную кривую

А как ёё прописать?

Добавлено через 1 минуту

Ну и конечно не забудь наличие запущенного дизеля

Понял. Надо дописать if Dizelstarted=true

Добавлено через 2 минуты
И как ввести в игру новый тег ( В моём случае Nagrevatel)

Добавлено через 9 минут
Я извиняюсь за столь большое количество вопросов. Просто в скриптовании я новичёк.

Rokky
06.09.2010, 09:36
Как можно передать данные из локомотива в кабину?

TRam_
06.09.2010, 11:23
а) через класс-наследник CabinData
б) через публичные функции скрипта или кабины (при этом либо в кабине должна быть копия скрипта лока, либо наоборот: в локе должна быть копия скрипта кабины)
в) через месседжи и хендлеры (по-русски через сообщения и обработчики сообщений)

Я вот тут думаю... Почему у ТЭП70 после модернизации скрипта пропало освещение и звук дизеля? И когда устанавливаю оригинальный, свет и звук не появляется... И что ж это за глюк...

Rokky
06.09.2010, 11:38
Я вот тут думаю... Почему у ТЭП70 после модернизации скрипта пропало освещение и звук дизеля? И когда устанавливаю оригинальный, свет и звук не появляется... И что ж это за глюк...

Странно, а попробуй такой куид звука <kuid:293946:100006>, если он есть, короны света там нет. Я её загасил в конфиге лока, так как хотел сделать меши прожектора. Как на ВЛ10-1628. Если нужна будет корона напиши, скину мешь лока и конфиг исправленный.

TRam_
06.09.2010, 14:22
не, ничего не нужно. Оказалось, что если в enginespec вписать 16 позиций (а не 8, как необходимо), а потом запустить лок, то у него пропадают освещение прожектором и звук дизеля. КАК это связано, даже предполагать боюсь ....

Volkman
09.10.2010, 22:19
Кто мне поможет, напишите скрипт или расскажите как написать чтобы локомотив при входе в кривую наклонялся в ту или иную сторону. Как на этом скрине http://radikal.ru/F/s006.radikal.ru/i214/1010/9e/944fd750309e.jpg.html

Damien Zhar
09.10.2010, 23:55
Ужас. А при чём тут Gamescript? Если я не ошибаюсь наклонка вагонов пишется не скриптом, а в конфигурации вагона. Посмотрите в том составе как прописано. Тут ещё где то были наработки по наклону и качанию составов.

TRam_
10.10.2010, 00:17
скриптом тоже можно. Открывай скрипт в блокноте, и ищи там функцию Init и прописывай там

SetRollBasedOnTrack(20);

Число подбираешь. (чем больше - тем сильнее наклон). Если при 20 вагон вовсе начинает вращаться, ставь 3.

Volkman
10.10.2010, 13:19
TRam_ (https://forum.trainzup.net/member.php?u=67) что то я не совсем понял как, можно подробней?

WearsPrada
27.10.2010, 16:45
Какой тэг или блок отвечает за расход топлива?

amd103
27.10.2010, 16:52
Это делается скриптом, соответственно, зависит от скрипта, который ты используешь.

TRam_
27.10.2010, 16:54
Какой тэг или блок отвечает за расход топлива?в скриптах DLC

fuel_consume_speed - расход в юнитах/секунду на холостом
fuel_consume_speed_k - прибавка к расходу при добавлении одной позиции



Это делается скриптом, соответственно, зависит от скрипта, который ты используешь.Миха, Миха.. Это ж ты писал, что ж не отвечаешь.

WearsPrada
27.10.2010, 17:03
Это делается скриптом, соответственно, зависит от скрипта, который ты используешь.
В том то и дело, что скрипта то нет... использую какой то старый. Вот. А в CCG ничего поэму поводу не сказано... Нужна помощь в скриптовании локомотива ЧМЭ3. Кому интересно и не сложно прошу помочь мне в этом. Просто коробок на колесах делать не охота...

amd103
27.10.2010, 17:35
Миха, Миха.. Это ж ты писал, что ж не отвечаешь.
ммм, это было так давно, что лучше не спрашивать меня об этом :)

В том то и дело, что скрипта то нет... использую какой то старый. Вот. А в CCG ничего поэму поводу не сказано...
Раз старый, то скорее всего DLC. А в ССГ и не будет сказано, ибо по умолчанию в ТРС никакого расхода нет.

релейщик-автоматчик
27.10.2010, 18:36
Начал делать функции,которые требуют использование массивов и возник вопрос: как создать 2х мерный массив?

TRam_
27.10.2010, 19:00
создать массив элементов класса, у которого внутри публичный 1-мерный массив.

релейщик-автоматчик
27.10.2010, 19:33
а можно с примером... вот мне надо создать массив 2 на 2 и задать ему значения 2-5 3-6

amd103
27.10.2010, 19:49
class ArrayWrapper
{
public int[] Array = new int[0];
};

ArrayWrapper[] array2d = new ArrayWrapper[2];
array2d[0].Array[0] = 2;
array2d[0].Array[1] = 5;
array2d[1].Array[0] = 3;
array2d[1].Array[1] = 6;

релейщик-автоматчик
27.10.2010, 21:06
Спасибо) а еще кто может объяснить правильный синтаксис оператора For

amd103
27.10.2010, 21:14
Он такой же, как в С/С++/С#/Java, ищи инфу по ним.

релейщик-автоматчик
28.10.2010, 18:09
Спасибо,разобрался,всё работает)

вот еще вопрос к хорошим скриптерам... в треинз есть лог-файл. Какими командами скрипта можно сохранять какие-либо сообщения в лог трс?

TRam_
28.10.2010, 18:47
Interface.Log(string linetoprint)

релейщик-автоматчик
28.10.2010, 19:44
Сделаю ленту теперь)

релейщик-автоматчик
29.10.2010, 17:24
всем спасибо! возник вопрос,как вызывать направление движения? то есть не реверс,а сторну,куда катится поезд с определенной скоростью?

lexxcorp
14.11.2010, 13:43
помогите файлом "TRS2010-API.zip" или какой там самый новый

-- Добавлено пользователем14.11.2010 в 16:43 -- Предыдущее сообщение было 13.11.2010 в 17:40 --

дайте хотябы "TRS2006-API.zip" он то должен быть у многих

TRam_
14.11.2010, 13:47
http://trainzresources.com/directory/index.php?main_page=product_info&products_id=900

Да, TRS2010-API есть в виде вики-энциклопедии, тут http://online.ts2009.com/mediaWiki/index.php5/Scripting

lexxcorp
14.11.2010, 23:43
по первой ссылки The requested URL /TRS2006/manuals/index.chm was not found on this server.

по второй спасбо, буду втыкать

amd103
17.11.2010, 00:36
Меня сегодня ТРС жутко огорчил. Тесты на асимптотику супа показывают, что она реализована тупым перебором на тупом массиве. Это финиш.

TRam_
17.11.2010, 00:52
И вообще, меня сегодня ТРС жутко огорчил. Тесты на асимптотику супа показывают, что она реализована тупым перебором на тупом массиве. Это финиш.потестируй класс на поиск BinarySortedArrayS из xPath :). А то мне интересно, будет ли поиск сходиться к бинарному по времени выполнения :)

amd103
18.11.2010, 00:13
Там сбалансированное бинарное дерево? Это неплохо, но тут бы лучше подошло хэширование. И к тому же, в ГС нет обобщенных классов.

TRam_
18.11.2010, 00:59
Там сбалансированное бинарное дерево?нет конечно (балансировать деревья, когда trainz не поддерживает прямой работы с памятью и указателей - та ещё работа). Просто массив на бинарном поиске. Самосортирующийся при добавлении элемента (когда-то делал в нём сортировку, но потом понял, что всё равно наваливать несортированную кучу элементов, а затем её сортировать никто не будет, хотя вообще это быстрее).

amd103
18.11.2010, 01:17
Для деревьев прямая работа с памятью не нужна.


class TreeNode
{
public TreeNode Left;
public TreeNode Right;
public string Data;
};

TRam_
18.11.2010, 01:43
Для деревьев прямая работа с памятью не нужна.
ещё как нужна...

понятное дело, что создать-то дерево просто -

node.Left = new TreeNode();
node.Left.Data= "___";


другое дело если потребуется нечто такое -

TreeNode temp = node.Left;
temp.Data = "____";

то трс обычно отказывается это запоминать. Так что возникает необходимость создания структуры типа

TreeNode[] TNA=new TreeNode[i];

с добавлением элементов

TNA[i+1]=new TreeNode();
TNA[i].Left=TNA[i+1];
TNA[i+1].Data="____";

Думаю, что последнее "дерево в массиве" вряд-ли будет намного лучше (попробуй из него удалить элемент, а потом перестроить), чем простой и дубовый бинарный поиск по этому же массиву.

amd103
18.11.2010, 02:34
"Обычно отказывается запоминать" — это смешно. Это просто непонимание различий между значениями и ссылками. Так как ты с джаваподобными языками (ГС, в принципе, им и является, но не в счет, для него теории нет) не занимался, быстренько поясню: ссылка — это всегда указатель. А по ссылкам в ГС всегда используются все объекты и строки. Единственное отличие между объектами и строками — первые сравниваются по адресу, а строки по значению. 3 примитивных типа — int, bool, float — всегда передаются по значению. Операция распаковки из обжекта тоже возвращает значение.

Посмотри еще на функцию Str.UnpackString, по смыслу выглядит она так:


string UnpackString(string str)
{
int i = 0;
while (str[i] != ' ' and i < str.size())
++i;
string ret = str[0, i];
str[0, Math.Min(i + 1, str.size())] = null;
return ret;
}

string a = "Quick brown fox jumps over the lazy dog"
UnpackString(a); // returns "Quick"
UnpackString(a); // returns "brown"
UnpackString(a); // returns "fox"
UnpackString(a); // returns "jumps"
UnpackString(a); // returns "over"
// a == "the lazy dog"

К слову, то, что ты написал, сработает как надо.

Думаю, что последнее "дерево в массиве" вряд-ли будет намного лучше (попробуй из него удалить элемент, а потом перестроить), чем простой и дубовый бинарный поиск по этому же массиву.
Почитай про структуру "куча". Тот вариант, что у тебя, делает вставку за O(nlogn), куча за O(logn).

TRam_
18.11.2010, 03:16
Это просто непонимание различий между значениями и ссылками.просто я не понимаю, можно ли делать ссылки на неразмеченную побласть. Вообще мне удавалось в "моём варианте" впихивать даже Soup'ы. НО!

При передаче, например, данного объекта родительской функции от его содержимого ничего не оставалось. Естественно, если он глобален, тогда да, заботиться об этом не нужно. Но если передавать, то вариант функции

public bool AddElement(BinarySortedElementS Element1)
{
....
DBSE[i]=Element1;

}
работать не будет, в то время как вариант

public bool AddElement(string Name, GSObject NObject)
{
.....
DBSE[i]=new BinarySortedElementS();
DBSE[i].a=Name;
DBSE[i].Object=NObject;
}

работает корректно. Если там действительно стек, то почему передача не проходит? Те же проблемы были и с вложенными Soup'ами..

amd103
18.11.2010, 05:11
просто я не понимаю, можно ли делать ссылки на неразмеченную побласть.
Что значит "неразмеченная область"?


Вообще мне удавалось в "моём варианте" впихивать даже Soup'ы.
Учитывая, что соуп — наследник GSObject'а — ничего удивительного.

В чем заключалась неработа первого варианта?

TRam_
18.11.2010, 08:51
В чем заключалась неработа первого варианта?
в том, что в DBSE[i].Object оказывался null (хотя предварительно было выполнено Element1=new BinarySortedElementS(); Element1.Object=NObject;)

amd103
18.11.2010, 13:53
А в NObject нулл сам по себе оказаться не мог? Тут только два варианта возможны — или каким-то невероятным способом ты реализовал типы по значению, или ты что-то делаешь не так :)

релейщик-автоматчик
19.11.2010, 09:59
Что вы обсуждаете? Для чего такое надо?

amd103
19.11.2010, 13:05
В чем именно состоит вопрос?
Обсуждаем мы сначала недостатки класса Soup в производительности, затем то, как это исправить.
Для чего нужен Soup, надеюсь, понятно. Замена нужна для того, чтобы скрипты работали быстрее.

dvigatel
19.11.2010, 20:33
Ксто сможет, поделитесь текстом скрипта, чтобы в кривых локомотив наклонялся(если авторство позволяет)

TRam_
19.11.2010, 20:42
Для наклона в кривых есть Vehicle.SetRollBasedOnTrack ( float multiplier ) . multiplier определяет амплитуду наклона.

dvigatel
19.11.2010, 20:43
Ну это просто вписать в текстовой файл и сохранить в script.gs?

CergeyK
30.11.2010, 17:56
Скрипт и звуки!
Всем привет! Кто разбирается откликнитесь, помогите разобраться в этих скриптах!
[/URL]

Здесь звуки со скриптами, звуки идут беспрерывно, что в них не так? Помогите пожалуйста разобраться!

Вот ссылка [URL]http://narod.ru/disk/477658001/scrip...sound.zip.html (http://narod.ru/disk/477658001/scrip...sound.zip.html) та не работает!

jim_spb
01.12.2010, 04:00
Скрипт и звуки!
Всем привет! Кто разбирается откликнитесь, помогите разобраться в этих скриптах!
[/URL]

Здесь звуки со скриптами, звуки идут беспрерывно, что в них не так? Помогите пожалуйста разобраться!

Вот ссылка [URL]http://narod.ru/disk/477658001/scrip...sound.zip.html (http://narod.ru/disk/477658001/scrip...sound.zip.html) та не работает!

Cergey, эта ссылка нерабочая.

CergeyK
01.12.2010, 17:40
Cergey, эта ссылка нерабочая.

Вот, а эта http://narod.ru/disk/477658001/script%20%26%20sound.zip.html

dvigatel
01.01.2011, 20:11
Я взял скрипт с нового чмэ3-а и мне нехавтает еще 4 огня
Это все что я прописал в конфиге. Какие имена еще доступны кроме этих?
alw0
arw0
alr0
arr0

P.S. TRam_, почисти ящик ЛС, а то к тебе не достучатся

TRam_
01.01.2011, 20:28
4 огня вообще включаться не должны - из 4 верхних работает только два, красные.

atr1
atr2

но вот включаться они могут только на автомате...

dvigatel
01.01.2011, 20:34
Ну да Д1 всего 8 фонарей, 4 белых, 4 красных.
atr1
atr2 это???

А зачем тогда вверху 2 белых?

TRam_
01.01.2011, 21:02
Зачем 2 белых - знают только венгры :)


atr1
atr2 это???да, это. Два верхних красных.

dvigatel
01.01.2011, 21:32
Благодарю. А они только автоматом включаюся?

TRam_
01.01.2011, 21:37
да, кнопки из браузера выпилены...

dvigatel
01.01.2011, 21:41
А кто их удалил оттуда? Автор скрипта? И еще я в скрипте искал название браузера, ну там текст "передние буферники", и в скрипте его нету. Где он находится?

TRam_
01.01.2011, 22:00
Если хочешь оригинальный скрипт, то он на старых локах типа ВЛ10-944 или ВЛ10к-1461 (автор varz).

А убирал кнопки этих БФов из браузера лично я, так как на локах верхних огней не бывает.

dvigatel
02.01.2011, 21:56
Ага, понятно. А новый скрипт со чмэ3, скрипт качение идет отдельным куидом?

TRam_
02.01.2011, 22:03
Нет, качание отдельным куидом идёт только к вагонам.

dvigatel
02.01.2011, 22:06
значит, при выкладке дополнения(вагона) нужно выкладывать один с скриптов качения?(рывками и плавно)

TRam_
02.01.2011, 22:50
да. А лучше ссылку сделать "используются такие-то скрипты, от туда то"

dvigatel
03.01.2011, 08:57
Ага. А если классы не менять, поставить 2 локомотива с одинаковыми классами, конфликты будут?

WearsPrada
08.01.2011, 22:40
Пример блока для запуска анимации через html окно можно?

Frantsuz
10.03.2011, 01:26
Как сделать запуск двигателя, ЭПТ и качание кабины?

WearsPrada
10.03.2011, 13:06
Написать скрипт на 2000 строк, или же использовать уже написанный, только подставить под нужный локомотив/кабину.

kachsheev
11.03.2011, 11:30
Народ, не подскажите, есть ли где-нибудь материалы с описанием всех функций игрового скрипта?

TRam_
11.03.2011, 13:07
http://online.ts2009.com/mediaWiki/index.php5/Scripting

AlexanderGn
11.03.2011, 15:40
Народ, не подскажите, есть ли где-нибудь материалы с описанием всех функций игрового скрипта? В папке Scripts игры.

lubinda
11.03.2011, 20:56
или же использовать уже написанный, только подставить под нужный локомотив/кабину.
А это не будет считаться воровством?

TRam_
11.03.2011, 21:19
А это не будет считаться воровством?Если скрипт не изменялся - никак нет. Даже если изменялся, и в списке авторов вписаны все авторы скрипта - тоже нет.

Max
12.03.2011, 13:12
В 2010 не могу добиться, чтобы скриптом можно было вывести в окно браузера текст с определёнными параметрами шрифта.
HTMLWindow.MakeRow(HTMLWindow.MakeCell("123456",img)). Если верить ACG2006, то после запятой указываются параметры текста. Какие бы значения я не задавал переменной img, ничего не меняется - ни размер, ни цвет шрифта.
Подскажите, если кто знает, как задать параметры шрифта в этом случае?

TRam_
12.03.2011, 15:32
не, не верно. Это параметры ячейки таблицы. Чтобы изменить шрифт, надо так делать

HTMLWindow.MakeRow(HTMLWindow.MakeCell("<font color='#ff0000' size=4 face='arial'>123456 </font>")) например

Nemo
23.03.2011, 21:48
У меня есть функция, которая должна вызывать функцию, описанную ниже неё. Поменять местами нельзя, потому что нижняя вызывает верхнюю. По-моему можно как-то указать, что функция есть, но описана ниже, не помню как. Делается это в GS?

TRam_
23.03.2011, 22:27
Делается заголовок этой функции. То есть строка объявления функции и её параметров, но оканчивающаяся точкой с запятой а не скобками с кодом.

amd103
31.03.2011, 16:43
С учетом того, что теперь длину звуков скрипты должны знать заранее, написал программу, которая выводит длину всех wavок в заданной папке в нужном формате.

Обновлено — теперь длина звуков всегда выводится с десятичной точкой.

Пример использования:

wavlengthlist "E:\TS2010\UserData\editing\2te116 sounds\tedsound" "soundDb.SetNamedTag(\"%f\", %l);"

Результат выполнения:

soundDb.SetNamedTag("idle_1.wav", 0.193);
soundDb.SetNamedTag("idle_10.wav", 0.250);
soundDb.SetNamedTag("idle_100.wav", 0.353);
soundDb.SetNamedTag("idle_101.wav", 0.255);
soundDb.SetNamedTag("idle_102.wav", 0.264);
soundDb.SetNamedTag("idle_103.wav", 0.202);
soundDb.SetNamedTag("idle_104.wav", 0.261);
soundDb.SetNamedTag("idle_105.wav", 0.255);
soundDb.SetNamedTag("idle_106.wav", 0.252);
soundDb.SetNamedTag("idle_107.wav", 0.261);
soundDb.SetNamedTag("idle_108.wav", 0.262);
soundDb.SetNamedTag("idle_109.wav", 0.253);
soundDb.SetNamedTag("idle_11.wav", 0.256);
soundDb.SetNamedTag("idle_110.wav", 0.264);
soundDb.SetNamedTag("idle_111.wav", 0.194);
soundDb.SetNamedTag("idle_112.wav", 0.279);
soundDb.SetNamedTag("idle_113.wav", 0.279);
soundDb.SetNamedTag("idle_114.wav", 0.298);
soundDb.SetNamedTag("idle_115.wav", 0.321);
soundDb.SetNamedTag("idle_116.wav", 0.301);
soundDb.SetNamedTag("idle_117.wav", 0.312);
soundDb.SetNamedTag("idle_118.wav", 0.287);
soundDb.SetNamedTag("idle_119.wav", 0.255);
soundDb.SetNamedTag("idle_12.wav", 0.261);
soundDb.SetNamedTag("idle_120.wav", 0.209);
soundDb.SetNamedTag("idle_13.wav", 0.262);
soundDb.SetNamedTag("idle_14.wav", 0.256);
soundDb.SetNamedTag("idle_15.wav", 0.284);
soundDb.SetNamedTag("idle_16.wav", 0.288);
soundDb.SetNamedTag("idle_17.wav", 0.272);
soundDb.SetNamedTag("idle_18.wav", 0.305);
soundDb.SetNamedTag("idle_19.wav", 0.496);
soundDb.SetNamedTag("idle_2.wav", 0.247);
soundDb.SetNamedTag("idle_20.wav", 0.501);
soundDb.SetNamedTag("idle_21.wav", 0.501);
soundDb.SetNamedTag("idle_22.wav", 0.500);
soundDb.SetNamedTag("idle_23.wav", 0.501);
soundDb.SetNamedTag("idle_24.wav", 0.500);
soundDb.SetNamedTag("idle_25.wav", 0.500);
soundDb.SetNamedTag("idle_26.wav", 0.500);
soundDb.SetNamedTag("idle_27.wav", 0.501);
soundDb.SetNamedTag("idle_28.wav", 0.501);
soundDb.SetNamedTag("idle_29.wav", 0.501);
soundDb.SetNamedTag("idle_3.wav", 0.246);
soundDb.SetNamedTag("idle_30.wav", 0.282);
soundDb.SetNamedTag("idle_31.wav", 0.285);
soundDb.SetNamedTag("idle_32.wav", 0.252);
soundDb.SetNamedTag("idle_33.wav", 0.312);
soundDb.SetNamedTag("idle_34.wav", 0.272);
soundDb.SetNamedTag("idle_35.wav", 0.347);
soundDb.SetNamedTag("idle_36.wav", 0.260);
soundDb.SetNamedTag("idle_37.wav", 0.277);
soundDb.SetNamedTag("idle_38.wav", 0.276);
soundDb.SetNamedTag("idle_39.wav", 0.250);
soundDb.SetNamedTag("idle_4.wav", 0.225);
soundDb.SetNamedTag("idle_40.wav", 0.290);
soundDb.SetNamedTag("idle_41.wav", 0.264);
soundDb.SetNamedTag("idle_42.wav", 0.319);
soundDb.SetNamedTag("idle_43.wav", 0.287);
soundDb.SetNamedTag("idle_44.wav", 0.356);
soundDb.SetNamedTag("idle_45.wav", 0.284);
soundDb.SetNamedTag("idle_46.wav", 0.254);
soundDb.SetNamedTag("idle_47.wav", 0.253);
soundDb.SetNamedTag("idle_48.wav", 0.252);
soundDb.SetNamedTag("idle_49.wav", 0.249);
soundDb.SetNamedTag("idle_5.wav", 0.231);
soundDb.SetNamedTag("idle_50.wav", 0.251);
soundDb.SetNamedTag("idle_51.wav", 0.266);
soundDb.SetNamedTag("idle_52.wav", 0.198);
soundDb.SetNamedTag("idle_53.wav", 0.222);
soundDb.SetNamedTag("idle_54.wav", 0.273);
soundDb.SetNamedTag("idle_55.wav", 0.274);
soundDb.SetNamedTag("idle_56.wav", 0.283);
soundDb.SetNamedTag("idle_57.wav", 0.221);
soundDb.SetNamedTag("idle_58.wav", 0.245);
soundDb.SetNamedTag("idle_59.wav", 0.257);
soundDb.SetNamedTag("idle_6.wav", 0.260);
soundDb.SetNamedTag("idle_60.wav", 0.279);
soundDb.SetNamedTag("idle_61.wav", 0.282);
soundDb.SetNamedTag("idle_62.wav", 0.282);
soundDb.SetNamedTag("idle_63.wav", 0.296);
soundDb.SetNamedTag("idle_64.wav", 0.279);
soundDb.SetNamedTag("idle_65.wav", 0.279);
soundDb.SetNamedTag("idle_66.wav", 0.277);
soundDb.SetNamedTag("idle_67.wav", 0.284);
soundDb.SetNamedTag("idle_68.wav", 0.214);
soundDb.SetNamedTag("idle_69.wav", 0.214);
soundDb.SetNamedTag("idle_7.wav", 0.259);
soundDb.SetNamedTag("idle_70.wav", 0.233);
soundDb.SetNamedTag("idle_71.wav", 0.268);
soundDb.SetNamedTag("idle_72.wav", 0.282);
soundDb.SetNamedTag("idle_73.wav", 0.268);
soundDb.SetNamedTag("idle_74.wav", 0.277);
soundDb.SetNamedTag("idle_75.wav", 0.501);
soundDb.SetNamedTag("idle_76.wav", 0.501);
soundDb.SetNamedTag("idle_77.wav", 0.253);
soundDb.SetNamedTag("idle_78.wav", 0.499);
soundDb.SetNamedTag("idle_79.wav", 0.511);
soundDb.SetNamedTag("idle_8.wav", 0.240);
soundDb.SetNamedTag("idle_80.wav", 0.258);
soundDb.SetNamedTag("idle_81.wav", 0.303);
soundDb.SetNamedTag("idle_82.wav", 0.263);
soundDb.SetNamedTag("idle_83.wav", 0.331);
soundDb.SetNamedTag("idle_84.wav", 0.504);
soundDb.SetNamedTag("idle_85.wav", 0.496);
soundDb.SetNamedTag("idle_86.wav", 0.502);
soundDb.SetNamedTag("idle_87.wav", 0.498);
soundDb.SetNamedTag("idle_88.wav", 0.568);
soundDb.SetNamedTag("idle_89.wav", 0.604);
soundDb.SetNamedTag("idle_9.wav", 0.250);
soundDb.SetNamedTag("idle_90.wav", 0.633);
soundDb.SetNamedTag("idle_91.wav", 0.350);
soundDb.SetNamedTag("idle_92.wav", 0.279);
soundDb.SetNamedTag("idle_93.wav", 0.270);
soundDb.SetNamedTag("idle_94.wav", 0.393);
soundDb.SetNamedTag("idle_95.wav", 0.232);
soundDb.SetNamedTag("idle_96.wav", 0.270);
soundDb.SetNamedTag("idle_97.wav", 0.273);
soundDb.SetNamedTag("idle_98.wav", 0.321);
soundDb.SetNamedTag("idle_99.wav", 0.327);

Скачать:
exe (http://ifile.it/df85p6z/wavlengthlist.exe)
src (http://pastebin.com/2JW724cR)

TRam_
31.03.2011, 17:29
а, хорошо. Попробуем .

kachsheev
08.04.2011, 00:06
Простите,что немного не по теме..хотя и связано с скрипом.
Чем "выскребсти" текст из *.gse?

TRam_
08.04.2011, 00:26
Ничем. Или по крайней мере неизвестно чем.

Max
08.04.2011, 10:49
С учетом того, что теперь длину звуков скрипты должны знать заранее...
Прошу прощения, я что-то пропустил. "Теперь" - это с какого момента?:blush2:

amd103
08.04.2011, 11:01
С TS12.

kachsheev
10.04.2011, 13:22
Нужна помощь..решил переделать LLC для одного вагончика.
В итоге ни одна корона не работает.

TRam_
10.04.2011, 13:28
Скрипт локомотива на вагоны поставить нельзя. Кроме того на последних вагонах одна меш на все три фонаря - надо в ней меш с точками прикрутить

kachsheev
10.04.2011, 13:45
Ну...у меня головной вагон, так что это не имеет значения...
С точками нет проблем...короны к ним прикручены, разница лишь в количестве красных фонарей, а их у меня не три, а два...
Просто делал на примере ДР1 с мурманска...

TRam_
10.04.2011, 14:54
Просто делал на примере ДР1 с мурманска...голова ДР1 - это локомотив.

Nemo
10.04.2011, 15:05
Всем известна функция


public native float PlaySound(Asset asset, string filename, float volume, float minDistance, float maxDistance, GameObject target, string attachmentPoint, bool looping)

Если последний аргумент, bool looping, будет тру, то как потом остановить этот луп? Судя по тому, что все делают на луп-звук отдельный поток, только перезагрузкой игры, да?

TRam_
10.04.2011, 16:05
хз, пока его никто не пробовал. Как его отключать - непонятно, ауран ничего не написал, а тестить пока не охота...

Вообще этот луп ввели в 2010, если не ошибаюсь.

amd103
10.04.2011, 16:14
Он был давно, в 2006-ом уже был.

Don_Capone
12.04.2011, 08:16
SetRollBasedOnTrack работает только для внешней модели лока? К кабине возможно прикрутить?

TRam_
12.04.2011, 14:59
для кабины SetCabinSwayAmount (float amount)

Don_Capone
12.04.2011, 15:20
CabinSway разве не для раскачки? (которая не работает, хех)

TRam_
12.04.2011, 15:25
нет, это функция задания наклона кабины в кривой. Одно из значений sway - наклоняться .

Don_Capone
13.04.2011, 12:43
Что-то я не пойму с этими наклонами: при положительных значениях roll и sway лок и наклоняется наружу(от центра) кривой. При отрицательных roll, наклоняется вовнутрь, как и надо, но вот незадача: если значение roll меньше единицы (например -0.3), то лок наклоняется вовнутрь, а кабина наружу(то есть в противоположную сторону). Стоит поставить roll -1, как кабина снова наклоняется вместе с локом вовнутрь, но сам лок наклоняется очень сильно, в реале он бы наверное опрокинулся при таком наклоне :)
Отрицательные значения sway похоже не поддерживаются(при загрузке начинаются эрроры).

Можно конечно забить на внешнюю модель, всё равно из кабины едешь, но может есть какой-то способ "подружить" наклоны?
Я всё это пихаю в скрипт кабины. Может надо отдельно roll в скрипт лока, а sway в кабину?

TRam_
13.04.2011, 13:02
Сделать наклон кабины очень маленьким, а наклон кузова - большим. Ведь наклон кабины производится относительно кузова.

Don_Capone
13.04.2011, 15:13
Что-то я не понял, как это

Сделать наклон кабины очень маленьким, а наклон кузова - большим.
поможет одновременно наклон кузова и кабины одинаково реалистичными? В том, что у меня получилось - наклон кабины нормальный, а вот кузов слишком перекашивается в кривых. Если

Сделать наклон кабины очень маленьким, а наклон кузова - большим.
то он будет перекошен ещё сильнее.

TRam_
13.04.2011, 15:42
ещё раз повторю - кабина поворачивается относительно кузова. Так что чем меньше она будет наклоняться - тем лучше.

Эрендир
21.04.2011, 21:29
Может быть кто знает, как получить диаметр тригера для Trackside объекта?

TRam_
21.04.2011, 22:54
Никак. Разве что померяв расстояние сразу после срабатывания.

amd103
22.04.2011, 06:56
http://storage2.static.itmages.ru/i/11/0422/s_1303444773_09b049b54f.jpeg (http://itmages.ru/image/view/173904/09b049b5)
Тыкай мышью на триггере и двигай, появится цифра.
Инструмент Get Trigger Radius почему-то работать не хочет.

Эрендир
22.04.2011, 07:44
amd103, это я и так знаю. Меня интересовало, как в скрипте получить его радиус.

TRam_, так и думал. Обидно, досадно.... ну ладно.

Don_Capone
24.04.2011, 04:13
Что изменилось в скриптах в ТС12? Ведь сейчас ни один скриптованный локомотив не работает. Неужели дело только в звуках? И как теперь прописывать звуки, чтобы они работали нормально? Есть инфа?

TRam_
24.04.2011, 07:04
Ведь сейчас ни один скриптованный локомотив не работает.один работает https://www.youtube.com/watch?v=OKBJMn5LDq8

лежит на http://ifolder.ru/23045313

И ЧМЭ5 вроде тоже работает.

Don_Capone
24.04.2011, 07:34
Эти не считаются. Хотя и хорошо конечно, что ты добавил 116-му нагрев.

И 2ТЭ116 таки звучит вырвиушно, даже если 3д звук отключить. С ним вообще невозможно. Надеюсь это исправимо.


Так всё же, как и что править надо? Это где-инбудь написано?

TRam_
24.04.2011, 07:37
Так всё же, как и что править надо? Это где-инбудь написано?надо править задержки на воспроизведение звука. Задержки расчитывать с помощью "вычислителя длины звуков" от amd103 , чуть раньше в этой теме...

Don_Capone
24.04.2011, 07:44
То есть перед каждым звуком надо ставить Sleep, или использовать Sleep(waorldplaysound....)? А как с саундскриптами быть? По-подробней надо.

TRam_
24.04.2011, 08:15
или использовать Sleep(waorldplaysound....)?наоборот, надо выбрасывать Sleep(waorldplaysound....) и делать отдельные waorld.playsound и Sleep

Don_Capone
29.04.2011, 05:40
Я так понял, произошли ещё какие-то изменения в механизме отправки сообщений?(например, из кабины в скрипт лока).
И ещё не совсем понятно(вернее совсем не понятно) как юзать прогу https://forum.trainzup.net/showthread.php?t=763&p=90538&viewfull=1#post90538

TRam_
29.04.2011, 08:06
произошли ещё какие-то изменения в механизме отправки сообщений?нет, не было никаких изменений.

Don_Capone
29.04.2011, 09:03
Как тогда объяснить, что перестал подниматься никак не связанный со звуками токоприёмник? Раньше он поднимался с помощью сообщения из кабины в скрипт лока. Там "panthandler" используется. Естественно остальные сообщения до лока судя по всему тоже не доходят.

amd103
29.04.2011, 11:05
Мы все любим командную строку:
http://s41.radikal.ru/i091/1104/07/e62a7ec1ec78t.jpg (http://radikal.ru/F/s41.radikal.ru/i091/1104/07/e62a7ec1ec78.png.html)
Вот она, она прекрасна:
http://i010.radikal.ru/1104/e7/9605ad37975dt.jpg (http://radikal.ru/F/i010.radikal.ru/1104/e7/9605ad37975d.png.html)
Есть какая-то куча звуков:
http://s012.radikal.ru/i319/1104/0e/c750058af3f6t.jpg (http://radikal.ru/F/s012.radikal.ru/i319/1104/0e/c750058af3f6.png.html)
Пишем нужные параметры — путь к папке и формат вывода:
http://i001.radikal.ru/1104/bc/2e0abd373102t.jpg (http://radikal.ru/F/i001.radikal.ru/1104/bc/2e0abd373102.png.html)
Получаем результат:
http://s40.radikal.ru/i088/1104/10/2394c86f7721t.jpg (http://radikal.ru/F/s40.radikal.ru/i088/1104/10/2394c86f7721.png.html)

Don_Capone
29.04.2011, 12:18
Я в общем-то так и предполагал, что без командной строки тут не обошлось.
Теперь осталось понять, почему не отсылаются мессаги.

Эрендир
01.05.2011, 10:58
Люди добрые, подскажите, как проверить, находится ли состав на тригере или нет. InnerReEnter(train.GetId()); - почему-то возвращает false если первый вагон с тригера скатился.

TRam_
01.05.2011, 11:44
Повесить Sniff на сообщения Object, Enter и Object, Leave на триггер, а у своего объекта организовать обработчик (хэндлер) этих сообщений. Если первое сообщение уже было, а второго не было, поезд над триггером (хотя тут есть вопросы насчёт расцепления и сцепленя поезда, конечно)

Эрендир
01.05.2011, 13:27
TRam_, это я знаю. Просто не хотелось городить огород. Думалось, что есть что-то вроде InnerReEnter(train.GetId()); что бы красиво и элегантно. Видать не судьба.

amd103
01.05.2011, 14:52
В чем вообще смысел ReEnter методов?

TRam_
01.05.2011, 14:54
Без понятия. Знаю, что InnerEnter - это вроде как остановившийся в зоне действия триггера.

Эрендир
01.05.2011, 17:17
Знаю, что InnerEnter - это вроде как остановившийся в зоне действия триггера.

Не обязатель остановившийся, а просто вообще присутсвует в зоне действия тригера любая часть состава.

-- Добавлено пользователем в 17:17 -- Предыдущее сообщение было в 16:15 --

TRam_, и всё таки, всё оказалось гораздо проще. Нужно было всего лишь использовать ReEnter вместо InnerReEnter.

amd103, методом тыка вышло, что через ReEnter можно узнать, находится ли состав в радиусе тригера.

Pumatex
04.05.2011, 16:30
С помощью руководства, которое есть в Trainz 2010, можно изучить хотя бы основы скриптования, или нужна другая литература?

TRam_
04.05.2011, 16:31
Ищи руководство по C# и начинай изучение с него.

Pumatex
04.05.2011, 16:37
TRam_, это как раз по мне. :yes: Я знаю только Бейсик и Паскаль, хоть изучу что-то новое и лучшее.
А потом для изучения скриптования руководство с диска подойдет?

Don_Capone
04.05.2011, 17:01
Просто открывай все доступные скрипты локов, и смотри что там. Ну и http://online.ts2009.com/mediaWiki/index.php5/TrainzScript_Language_Reference Правда оно устарело для ТС12, изменения в проигрывании звуков и в чём-то ещё.

amd103
04.05.2011, 17:06
В двенашке есть одна новенькая удобная фича. В са-амом конце файла vehicle.gs можно теперь обнаружить:

public void NotifyTrainChanged(Train prevTrain, Train nextTrain)
{
// Override this function as required, but don't forget to call the
// inherited version in case it does something in the future.

// Attempting to manipulate the makeup or positioning of any Train from
// within this function is illegal behavior. If you need to do that,
// trigger a delayed action using a message or a thread.
}

Don_Capone
04.05.2011, 17:18
А какие ещё есть изменения? А то ТРам говорит что нету, но они есть, это факт.

amd103
04.05.2011, 17:27
Да правок-то кучка, только просматривать их все замучаешься, а кенгуру ничего об этом не пишут.

TRam_
04.05.2011, 18:00
А то ТРам говорит что нету, но они есть, это факт.я говорю что коренных изменений нету(типа задания питча воспроизводимому звуку). Функцию давно заметил, действительно полезная.

Don_Capone
06.05.2011, 09:22
Разобрался я почему не отсылаются мессаги. Может и не совсем разобрался, но теперь хотя бы отсылаются.

Получается теперь мессаг должен содержать не только минор, но и мажор.
То есть раньше было, например
PostMessage(loco,"","Vent1_off",0.0);
В ТС12 такое не работает.
Работает
PostMessage(loco,"Vent","Vent1_off",0.0);

Ну и в хэндлер тоже мажор добавить.
AddHandler(me,"Vent","Vent1_off","VentHandler");

TRam_
06.05.2011, 10:20
Получается теперь мессаг должен содержать не только минор, но и мажор.без понятия зачем тебе понадобилась отсылка сообщений без мажора.

Don_Capone
06.05.2011, 10:28
Оно не надобилось, оно так было само по себе.

Pumatex
06.05.2011, 12:30
А скрипты писать надо в специальной программе или в Блокноте?

Don_Capone
06.05.2011, 12:34
Кстати да. Есть ли редектор, который показывает строки? Ну очень неудобно порой искать какой-нибудь line 1682.
А так-то можно конечно и в блокноте(лучше в вродпаде)

Pumatex
06.05.2011, 13:10
А какой формат файлов? Всмысле сохранять в каком формате.

Don_Capone
06.05.2011, 13:12
.gs

BlackGoga
06.05.2011, 13:53
Вопрос был скорее всего не с каким расширением, а о кодировке.
Сохранять в обычной ANSI кодировке с расширением .gs, например: myscript.gs

TRam_
06.05.2011, 13:58
Кодировка ANSI.

Pumatex
06.05.2011, 14:21
Спасибо, надеюсь, мои глупые вопросы кончились.

Don_Capone
06.05.2011, 14:22
А мои не кончились.

Есть ли редектор, который показывает строки? Ну очень неудобно порой искать какой-нибудь line 1682

BlackGoga
06.05.2011, 14:36
Don_Capone, Notepad++ к примеру. Также и синтаксис подсвечивает.

Snark
06.05.2011, 14:42
Don_Capone, например Notepad++.

update: о как, одновременно получилось. Изначально даже точно так же написать хотел.

WearsPrada
06.05.2011, 15:10
Notepad++
Без этой проги нет смысла писать конфиги и скрипты, в свое время мне её Олег OlegKhim подкинул )))

Эрендир
06.05.2011, 18:42
Ещё можно воспользоваться UltreEdit. Там даже можно настроить подсветку прямо для GS.

Max
06.05.2011, 20:19
А мне удобнее Syn2...

BlackGoga
07.05.2011, 09:55
В принципе удобнее всего использовать какую-нибудь IDE, чтобы помимо синтаксиса еще и давала список переменных и функций класса с параметрами при написании кода. Что-нибудь типа Eclipse.

Эрендир
07.05.2011, 20:42
BlackGoga, ну а кто спорит. После привыкания к VS особенно. И так с GS этого не хватает.

Диспетчер
11.05.2011, 17:33
Мы все любим командную строку:.....
Прошу помощи,в чём ошибка?:connie_es:
http://savepic.org/1746469m.jpg (http://savepic.org/1746469.htm)

amd103
11.05.2011, 17:40
Программа имеет размер 0 байт, расширения тоже нет.

Диспетчер
11.05.2011, 17:43
Странно,а с чем это может быть связанно?Игра на месте все папки и файлы целы.....?

amd103
11.05.2011, 17:50
Перекачай (http://ifile.it/df85p6z/wavlengthlist.exe).

Диспетчер
11.05.2011, 17:53
Всё заработало спасибо!!!

Rokky
18.05.2011, 18:36
Как заставить работать SetMeshAnimationFrame("pisec_skor", smer.GetValue());?

TRam_
18.05.2011, 19:08
Может

SetMeshAnimationFrame("pisec_skor", 0.1*Math.Fabs(loco.GetVelocity));

Анимируй мешь писца и вместо 0.1 поставь нужный коэффициент между номером кадра и скоростью.

mashinist
18.05.2011, 21:36
pisec_skor
А я подумал писец скоро(к 21 мая). Извиняюсь за оффтоп.

TRam_
18.05.2011, 21:40
писец скоростемера :coolface:

Максим
18.05.2011, 22:38
скоро(к 21 мая).
да меня тоже что то беспокоит

TRam_
18.05.2011, 22:51
Предсказатель сказал "в шесть часов будет БУМ" да никак не сказал, чьего времени...

Максим
18.05.2011, 22:57
это я тож читал

Rokky
19.05.2011, 05:36
TRam_, не работает. Я воткнул этот фрейм в нитку апдейт, не? Весьма непонятно.

TRam_
19.05.2011, 09:17
TRam_, не работает.сколько кадров в анимации писца?

Rokky
19.05.2011, 09:33
150

TRam_
19.05.2011, 09:35
точно у тебя сделано

pisec_skor
{
mesh ***
anim ***
auto-create 1
att **
att-parent ***
}

?

Для 150 кадров

SetMeshAnimationFrame("pisec_skor", 3.6*Math.Fabs(loco.GetVelocity));

Rokky
19.05.2011, 18:30
TRam_, всё так. Но мне нужно чтобы писец двигался в унисон со стрелкой скорика. В реале то они "одно целое".

kachsheev
19.05.2011, 18:59
Интересно, AGS позволяет вводить координаты в текстуре?

TRam_
19.05.2011, 21:11
нет. Только менять текстуру. Смена координат только в некоторых штуках внутри движка (например "вращающееся" колёсико загрузки в 2006 трейнзе)

Эрендир
31.05.2011, 07:58
Будте добры, просветите. Есть ли возможность отображения в gs отобразить диалоговое окно с сообщением и кнопкой "ОК"? Что-то ничего об этом не нашёл в Interface и Browser

amd103
31.05.2011, 10:39
Надо создавать браузер и грузить в него что-то типа такого:


<html>
<body>
Proceed? <br>
<a href="live://scriptname/dialogname/ok">OK</a>
</body>
</html>

Извращениями с таблицами можно сделать видимость кнопок и т.п.

Эрендир
31.05.2011, 11:11
amd103, так, а на кнопку хендлер вешаю на minor: Browser-URL, а Major: live://scriptname/dialogname/ok?

amd103
31.05.2011, 11:39
Мажор с минором наоборот только.

Эрендир
31.05.2011, 11:41
Мажор с минором наоборот только.

Ах... Ну да. Попутал что-то.

Rokky
11.06.2011, 13:00
Выручайте, товарищи скриптеры, кто может вынести все лентозаписывающие параметры в отдельный скрипт? Чтобы он был модульным и в основной скрипт можно было вписать только запись Log'а.

TRam_
11.06.2011, 13:49
Чтобы он был модульным, нужно чтоб расчёт потреблённой энергии/топлива и работы АЛСНа был модульным...

Rokky
11.06.2011, 14:00
Блин, тогда просто нужны параметры записи и их расчеты. И куда в скрипте ставить.

Rokky
17.06.2011, 12:37
Так кто-нибудь поможет с лентописными параметрами скрипта? Написать их, хотя бы, в текстовом документе, с пояснениями, чтобы можно было их вставить в скрипт. Интересует получение самих данных этих параметров: скорость, километраж, давление, сигналы, включение ЭПК. Interface.Log я соберу сам. Не?

amd103
17.06.2011, 15:32
http://pastebin.com/a0rZVsw6
http://pastebin.com/g4uEX1X3

Какие блин все нетерпеливые :pekaface:

Rokky
17.06.2011, 15:58
С этим то понятно, а как эти параметры получить в скрипте...

amd103
17.06.2011, 16:04
http://pastebin.com/g4uEX1X3
Я одну ссылку потерял, пардон.

Эрендир
20.06.2011, 13:13
Люди добрые, кто знает.

Имеем два TrackMark объекта, назовём их Mark1 и Mark2. В Mark2 имеем ссылку на Mark1 - TrackMark mrk;. Если удалить Mark1 с карты, то ссылка продолжает указывать на не существующий объект mrk != null; Есть ли возможность проверить был ли этот объект удалён, а то ER_nativeCallError замучал.

TRam_
21.06.2011, 00:05
Router.GetGameObject("Mark1") != null работает . По другому никак.

Эрендир
21.06.2011, 00:13
TRam_, жаль. Придётся хранить в дополнение имя, а оно, блин, тоже может поменятсья... :scratch_one-s_head:

TRam_
21.06.2011, 00:25
Можно ещё Router.GetGameObject(int ID)

Только надо не забывать, что это ID присвается для кажого запуска карты новое (в .т.ч. при переходе в "быстрый машинист")

Эрендир
21.06.2011, 00:30
Можно ещё Router.GetGameObject(int ID)

Ох... Точно. Я забыл про него.


Только надо не забывать, что это ID присвается для кажого запуска карты новое (в .т.ч. при переходе в "быстрый машинист")

Это я знаю. Поскольку это нужно только в рамках редактора, да и то только в браузере настройки, то этого вполне достаточно. Благодарю.

Rokky
23.06.2011, 13:08
А где в скрипте 2ТЭ116 выводятся данные в браузер о расходе топлива? Какая функция расхода? Нужно для лентописца.

TRam_
23.06.2011, 15:39
расход - в thread void PowerLoop

вывод осуществляется через встроенную GetPercentHTMLCode

Rokky
23.06.2011, 17:14
TRam_, а чуток по-конкретней, не? Какой тег выводит, как выводит. Как можно сделать вывод топлива в этот параметр - int CE = (int) %Потрачено ЭЭ, кВт*ч/ДТ, л%;?

Nemo
27.06.2011, 03:40
Такой вопрос... Если трэйнзовские потоки - это лишь псевдопотоки, какой смысл стараться всё делать в одном thread-е?

amd103
27.06.2011, 17:40
Суть в балансе. Нет смысла терять лишние такты на переключения между ними.
Алсо, их максимум 60.

TRam_
27.06.2011, 17:53
Алсо, их максимум 60.я слышал что 100 . Ну не суть, в потоках вредно именно переключение между ними (при этом перезапоминаются/возобновляются переменные, переподгружается выполняемый код, и т.п.).

amd103
28.06.2011, 18:43
Вспомни эпичный срач о не менее эпичных скриптах Сергея XII. Там их было 55, добавление еще нескольких порождало исключение.

-- Добавлено пользователем28.06.2011 в 18:43 -- Предыдущее сообщение было 27.06.2011 в 19:05 --

Давно замечал, что ГСЦ как-то неиллюзорно фейлит с массивами.

http://pastebin.com/wKDDgWMq


void gsExtrapolate()
{
int i;
for (i = 1; i < Nodes.size(); ++i)
{
float x1 = Nodes[i].PhiBuffer[0];
float x2 = Nodes[i].PhiBuffer[1];
float x3 = Nodes[i].PhiBuffer[2];

float div = (x2 + x2) - (x1 + x3);

if (Math.Fabs(div) > floatEpsilon)
Nodes.Phi = (x2 * x2 - x1 * x3) / div;
else
Nodes.Phi = x3;
}
}

После того, как обнаружил, смеялся минут 5. Мало того, что это компилилось без единой ошибки. Оно еще и работало без единого разрыва!

TRam_
28.06.2011, 21:37
А что тут ".Phi" ? Этакий параметр массива :) ?

amd103
29.06.2011, 00:04
Вот в том и дело, что в массиве его не должно быть никак ни коим образом ни разу, это член класса его элементов. На что компилятору по барабану, как оказалось.

Алсо, походу они исправили баг с максимумом в 120 линкуемых файлов.

Эрендир
02.07.2011, 10:24
Никто ничего не делал с библиотеками (Library)?

Я правильно понимаю, что создаю asset у которого kind "library", в него пихайю скрипт унаследованный от класса Library. В скрипте реализую функцию LibraryCall? Это библиотека создаётся в единственном экземпляре?
Вот чего так и не догнал, как из своего asset'а на неё ссылку получить, что бы потом LibraryCall вызывать?

-- Добавлено пользователем02.07.2011 в 10:24 -- Предыдущее сообщение было 01.07.2011 в 12:09 --

Вопрос снят. Разобрался. Не туда глядел :connie_es:

amd103
07.07.2011, 01:00
Сейчас можно напрямую подключать файлы из других ассетов через script-include-table в конфиге и самым обычным include в скрипте. Гораздо удобнее общего LibraryCall'а.

Эрендир
07.07.2011, 09:48
amd103, это я знаю, но не для всех типов допов можно. Например в командах машиниста нельзя использовать тег script-include-table, и в правилах вроде бы тоже. Я ещё когда БОК делал с этим столкнулся. Не хотелось мне один файл постоянно по всем ассетам копировать. А LibraryCall удобен тем, что у него всегда один экземпляр, и на карту его ставить в виде объекта не нужно.

Rokky
17.07.2011, 13:56
Почему не работает блок озвучки радиостанции

public thread void StartRadio()
{
if (MyData.lightOnraciy)
{
int max_number = Str.ToInt(radio.GetStringTable().GetString("number"));

while (MyData.lightOnraciy)
{
int TrackNum = Math.Rand(1,max_number);
Sleep(World.PlaySound(radio,TrackNum + ".wav",1,3,4,me,"a.limfront"));
Sleep(Math.Rand(30.0f,300.0f));
}
}
}

где:
MyData.lightOnraciy - включение рации

public bool lightOnraciy = false;

Attach:
if (gencd.lightOnraciy)
value = 1.0;
else
value = 0.0;
pa_radiostanciya.SetValue(value);
podsvet_raciy.SetValue(value);

UserSetControl:
if(p_control == pa_radiostanciya)
{
bool isOn = p_value > 0.5;
float value = 0.0;
if (isOn)
value = 1.0;
if(p_value>0.5)
cd.lightOnraciy=true;
else
cd.lightOnraciy=false;
podsvet_raciy.SetValue(value);
loco.SetCabinData(cd);
}

При этом подсветка кнопок и экрана включается (podsvet_raciy.SetValue(value);), а звуков не слышно.

amd103
17.07.2011, 16:47
public thread void StartRadio()
{
int max_number = Str.ToInt(radio.GetStringTable().GetString("number "));

while (true)
{
if (MyData.lightOnraciy)
{
int TrackNum = Math.Rand(1, max_number);
World.PlaySound(radio, TrackNum + ".wav", 1, 1, 6, me, "a.limfront");
Sleep(Math.Rand(40.0f,300.0f));
}
}
}

В конец аттача добавить

StartRadio();

Rokky
17.07.2011, 19:50
Что-то не хочет работать. Первые 4 звука проигрываются и тишина.

amd103
17.07.2011, 20:15
нуу, максимальный интервал ты 5 минут все-таки сделал :)

Pumatex
17.07.2011, 22:44
Немножко оффтопа.
Эта книга (http://www.bolero.ru/catalog/books/9785845915627.html) подойдет для изучения C#, чтобы потом перейти на Auran GameScript?

Rokky
17.07.2011, 22:45
Не, не работает. 4 первых звука --- 5 минут тишины --- 4 первых звука --- 5 минут тишины и так далее.

TRam_
17.07.2011, 23:21
public thread void StartRadio()
{
int max_number = Str.ToInt(radio.GetStringTable().GetString("number"));

while (true)
{
if (MyData.lightOnraciy)
{
int TrackNum = Math.Rand(1, max_number);
World.PlaySound(radio, TrackNum + ".wav", 1, 1, 6, me, "a.limfront");
Sleep(Math.Rand(40.0f,300.0f));
}
Sleep(3);
}
}


и проверь чтоб в string-table куида радио было


number "10"

(или сколько там звуков)

amd103
17.07.2011, 23:49
Эта книга (http://www.bolero.ru/catalog/books/9785845915627.html) подойдет для изучения C#, чтобы потом перейти на Auran GameScript?
Да.

Не, не работает. 4 первых звука --- 5 минут тишины --- 4 первых звука --- 5 минут тишины и так далее.
А если выключатель передернуть, то как? Ошибок не возникает перед/во время тишины?



public thread void StartRadio()
{
int max_number = Str.ToInt(radio.GetStringTable().GetString("number"));

while (true)
{
if (MyData.lightOnraciy)
{
int TrackNum = Math.Rand(1, max_number);
World.PlaySound(radio, TrackNum + ".wav", 1, 1, 6, me, "a.limfront");
Sleep(Math.Rand(40.0f,300.0f));
}
Sleep(3);
}
}
ммм, не уверен, что такая магия сработает. Можно попробовать максимальную задержку уменьшить.

Don_Capone
18.07.2011, 10:12
Вопрос не совсем по скриптам, скорее по расчётам.
Как рассчитать расход электроэнергии электровозом переменного тока? Вот есть у меня значения тока ТЭД, и значение напряжения ТЭД. Ну напряжение в КС тоже можно добавить. Каким образом можно рассчитать расход? Формула нужна для этого какая-то, или потребуется что-то ещё?

Эрендир
18.07.2011, 10:48
W=U*I*3600, где U - напряжение на ТЭД (напряжение КС), I - ток через ТЭД. Значение будет в кВт*ч. Это для постоянки, но упращённо. Для переменки надо бы ещё посчитать потери на трансформаторе. Но, в принципе, этим можно пренебречь в рамках игры.

Don_Capone
18.07.2011, 11:18
где U - напряжение на ТЭД (напряжение КС)
Так ТЭД или КС? Это разные вещи абсолютно.

Для переменки надо бы ещё посчитать потери на трансформаторе.
Надо именно для переменки. Судя по тому, что я читал в ПТР, на переменке нужно учитывать активный ток двигателей. Я толком не понял как все тамошние расчёты применить в трейнзе, но когда я попробовал поставить формулы в скрипт электровоз стал жрать энергию как адронный коллайдер.

Надо что-то более точное, подходящее для трейнза.

Эрендир
18.07.2011, 11:35
Don_Capone, P=U*I - это и есть активная мощьность, которая и получается через активный ток. А потребляемая энергия W=P*3600. ТЭД у нас от постоянного тока питается. Вот если бы он работал от перменного, тогда бы P=U*I*cos φ, где φ - угол между фазами U и I.

Don_Capone
18.07.2011, 12:44
Так я так понял это расход за час получается, а надо-то в реальном времени как-то.

Эрендир
18.07.2011, 12:51
Ну так в чём сложность? Если у нас W=P*сек. 1Вт = 1Вт*с.

Don_Capone
18.07.2011, 13:31
Всё равно что-то странное он показывает. Не пойму как в скрипте записать это.

TRam_
18.07.2011, 15:32
В реальном времени мощность - это сила*скорость

то есть

dE = loco.GetVelocity()*loco.GetEngineParam("applied-force")*dt/kpd;

где dE - потраченная энергия, dt - промежуток времени, kpd - КПД.

Эрендир
18.07.2011, 15:36
Вопрос звучал:


Как рассчитать расход электроэнергии электровозом переменного тока?

amd103
18.07.2011, 15:43
= Ток, потребляемый из КС * Напряжение в КС * Косинус фи электровоза (есть в справочных данных).
Ток из КС является суммарным током всех ТЭД, помноженным на текущий к-т трансформации, плюс ток собственных нужд на к-т обмотки собственных нужд, если учитывается такое, конечно.

TRam_
18.07.2011, 15:46
= Ток, потребляемый из КС * Напряжение в КС * Косинус фи электровоза (есть в справочных данных)но человеку тогда нужна формула для тока в электровозе и формула для напряжения в сети :) . Причём ток зависит от напряжения, скорости, позиции контроллера и ступени ослабления поля. А напряжение зависит от тока (для тока 25 кВ несущественно).

Rokky
18.07.2011, 20:46
А если выключатель передернуть, то как? Ошибок не возникает перед/во время тишины?

Нет, ошибок нет. Могу сказать, что до моего вмешательства оно работало, я всего лишь хотел на кнопку повесить звуки. Раньше была ошибка, что-то с временем ожидания: Timeout истёк, но после вставки слипа в цикле Вайл ошибка исчезла. И она не зависела от включения кнопки.

-- Добавлено пользователем в 22:46 -- Предыдущее сообщение было в 22:45 --


и проверь чтоб в string-table куида радио было

Контент радио встроен и стринг-тейбла там нет. В локомотиве стринги я тоже не нашёл.

amd103
18.07.2011, 20:48
Вот черт, там же вайл без слипа получается. Точно-точно, блин, нельзя отвечать на эти темы перед сном. Попробуй вариант Вовы, он правильный, у меня ошибка.

TRam_
18.07.2011, 22:29
Контент радио встроен и стринг-тейбла там нет.значит добавь

Rokky
18.07.2011, 22:35
Володя, ты бы хоть сказал, что залил звуки под куид2. 2 дня затраха со скриптом, только лишь потому, что куид не тот был. Закон подлости, всё находишь не там где ищешь.

-- Добавлено пользователем в 00:35 -- Предыдущее сообщение было в 00:33 --


Контент радио встроен и стринг-тейбла там нет.

встроен и стринг-тейбла там нет, будь он трижды не ладен. А ты заливал на ДЛС. Он не может быть встроенным никак, вот она нестыковка. Хорошо ума хватило сравнить куиды в разных локомотивах.

TRam_
19.07.2011, 00:04
А ты заливал на ДЛС.Я залил, и залил со стринг-тейблом. Или стринг-тейбл на ДЛСе пропал?

Rokky
19.07.2011, 10:50
Стрингов нет во встроенных звуках. Которые в игру вошли. На ДЛС всё есть. Я же говорю, в 1739 стоял куид не тот, там был куид старых звуков, вот и не работало.

Nemo
21.07.2011, 16:54
Я так понял, в ТРС процедурам входные параметры передаются всегда по значению, то есть изменение входной переменной внутри процедуры не изменит переменную в вызвавшем эту процедуру объекте, указанную на вход процедуры. Хотелось бы узнать, как же тогда размещать ссылки на объекты? Прокатит ли следующее:


class Myclass1
{
...
float value;
};

class Myclass2
{
...
Myclass1 Object1;
...
void Init(void)
{
Object1 = new Myclass1();
Object1.value = 0.0;
}
};

class Myclass3
{
...
Myclass1 Object2;
Myclass2 Object3;
...
void Init(void)
{
Object3 = new Myclass2();
Object3.Init();
Object2 = Object3.Object1;
}
...
void Checker(void)
{
Object2.value = 1.0;
}
};Вот вопрос: при вызове процедуры Checker() значение параметра value изменится только у Object2 или у Object3.Object1 тоже?

-- Добавлено пользователем в 16:54 -- Предыдущее сообщение было в 16:37 --

Ведь я не отводил память для Object2 с помощью new, поэтому это должна быть просто ссылка на Object3.Object1 и изменения одного из этих объектов должны трогать и второй, или нет?

amd103
21.07.2011, 17:23
Простые типы всегда по значению, сложные (объекты, строки, массивы) — по ссылке. И да, терминологически вернее называть все функциями.

В классе Myclass1 поле value недоступно другим объектам, ибо оно защищеное (по умолчанию все поля такие). Используй public чтобы разрешить доступ извне.

Значение value изменится у обоих.

Второй вопрос не понял.

TRam_
21.07.2011, 17:32
Ведь я не отводил память для Object2 с помощью new, поэтому это должна быть просто ссылка на Object3.Object1 и изменения одного из этих объектов должны трогать и второй, или нет?Без разницы, будешь ли ты пользоваться Object3.Object1 или Object2. После присваивания в Myclass3::Init(void) это одно и то же, изменяется синхронно.

Да, и верно сказано - надо перед всеми объявлениями поставить public .

Nemo
21.07.2011, 18:04
Если сложные объекты всегда по ссылке, то как тогда скопировать сложный объект, то есть передать его по значению?

Используй public чтобы разрешить доступ извне.
Это я случайно забыл тут, ага.

amd103
21.07.2011, 18:10
Для строк есть метод Str.CloneString(string), который делает лишь return str + '";

Для массивов есть copy:
int[] clone = new int[source.size()]
clone.copy(source);
Или что-то такое, не могу сказать точно.

Для прочих — руками.

TRam_
21.07.2011, 18:11
Если сложные объекты всегда по ссылке, то как тогда скопировать сложный объект, то есть передать его по значению?Создавая с нуля и копируя все параметры. Только так.


Для прочих — руками.Для супа тоже есть.

Soup sp2=Constrictors.New();
sp2.Copy(initalSoup);

Nemo
22.07.2011, 14:36
А можно создавать массивы с нулевым числом элементов?
типа
MyArray = new Myclass[0];
?

Эрендир
22.07.2011, 14:50
Nemo, можно

amd103
22.07.2011, 17:57
Можно и динамически расширять, сжимать, брать интервал:

int[] array = new int[0];
array[array.size()] = 0;
array[array.size()] = 1;
array[array.size()] = 2;
array[array.size()] = 3;
int[] firstTwo = array[0, 2];
int[] lastTwo = array[2, 4];
array[0, 2] = null;

Как-то так.

Эрендир
25.07.2011, 08:49
Такой вопрос, можно ли как-то определить для конкретно взятого объекта Vehicle на сколько растянута сцепка?

TRam_
25.07.2011, 09:17
Нельзя. Но силу в сцепке определить можно, с помощью GetCouplingStress(Vehicle other)

Эрендир
25.07.2011, 09:36
Так и думал. Жаль. Сила в моём случае врятли поможет.

TRam_
25.07.2011, 09:41
Сцепка поезда растягивается только один раз. А сожмётся только тогда, когда поезд в обратную сторону поедет. Так что для её сжимания надо всю мат. модель писать с 0.

Эрендир
25.07.2011, 09:51
TRam_, да просто команда сцепки невсегда дожимает её до конца... чисто зрительно. То есть, вагоны сцепились, а внешне сцепки друг до друга не дошли. Вот я и думал, что вдруг можно проверить этот момент, и докатить лок чуть-чуть.

TRam_
25.07.2011, 09:55
А почему б GSTrackSearch не использовать? Длину вагона можно ж получить.

Эрендир
25.07.2011, 10:01
Хм... Надо попробовать. Правда когда делал "Движение в депо", мне показалось, что GetLenght() не всегда возвращает точную длину вагона. Возможно просто показалось.

Nemo
29.07.2011, 11:11
А известны причины, по которым вылетает ошибка ER_Timeout? Как от неё оптимизироваться?

Эрендир
29.07.2011, 11:27
Nemo, слишком долго твой скрипт занимает процессорное время. Как следствие, ТРС считает, что твой скрипт завис. Надо переодически делать небольшие паузы через Sleep. Хотя бы на 0.01 секунды. Скажем, если у тебя масив, то на каждые 1000 элементов один Sleep(0.01)

Nemo
29.07.2011, 15:03
на каждые 1000 элементов один Sleep(0.01)
У меня 4 массива, в них суммарно всего 9 элементов. Чему там виснуть? Попробую слипы натыкать...

Don_Capone
31.07.2011, 15:04
Как можно сделать таймер, работающий, пока выполняется условие?

То есть смысл такой:
Выполнилось условие - таймер запустился, и работает, пока условие выполняется.
Если условие перестало выполняться - таймер сбросился.
Если таймер успел дотикать до нужного времени - выполнилось второе условие.

amd103
31.07.2011, 17:57
World.GetSeconds() — счетчик секунд, не останавливается во время пауз.
World.GetTimeElapsed() — то же, останавливается во время пауз.
Если условие выполнилось, запоминаешь секунды где-нибудь, периодически проверяешь разность текущего и сохраненного, если больше нужного времени — выполнилось действие.

Don_Capone
31.07.2011, 18:14
Ну да, я пробовал что-то подобное. Но интересует вот это подробней:

периодически проверяешь разность текущего и сохраненного
Как и с какой периодичностью проверяется? Я пробовал это всё update-е осуществить.

Лучшим примером послужит кусок кода.

amd103
31.07.2011, 20:41
thread void Monitor()
{
float checkInterval = %some_time%;
float timerTime = %some_another_time%;

bool conditionState = false;
float conditionStartTime;

while (true)
{
bool condition = %condition%;
float time = World.GetTimeElapsed();
if (condition and !conditionState)
{
conditionState = true;
conditionStartTime = time
}

if (!condition and conditionState)
{
conditionState = false;
%do_second%();
}

if (conditionState)
{
float condTime = time - conditionStartTime;
if (condTime > timerTime)
{
%do_first%();
}
}
}
}

Нужную периодичность ты лучше знаешь, зависит от того, что ты мониторишь.

Don_Capone
01.08.2011, 06:43
По-моему checkinterval нигде не используется. Так и надо?
Однако не работает :/

В общем мне нужно сделать отказ локомотива при езде на реостатной позиции
Выглядит это так:



thread void hod_position_check()
{
float checkInterval = 1.0;
float timerTime = 25.0;

bool conditionState = false;
float conditionStartTime;
while(true)
{
float time1 = World.GetTimeElapsed();
if(!hod_pos and !conditionState)
{
conditionState = true;
conditionStartTime = time1;
}
if (hod_pos and conditionState)
{
conditionState = false;
}
if (conditionState)
{
float failtime = time1 - conditionStartTime;
if(failtime > timerTime)
{
locofail = true;
}
}
}
}
Соответственно
hod_pos - условие ходовой позиции
locofail - условие поломки
Интервал 1 секунда(он же в секундах измеряется?)
таймер 25 секунд(ну просто для проверки)

Запускается тред при наборе реостатной позиции, то есть
if(!hod_pos)
{
hod_position_check();
}

При наборе реостатной позиции вся эта халабуда начинает жутко тормозить и выдавать эрроры "Thread Exception: ER_timeout, line 930"(в коде желтая строка).

Что я делаю не так?

Donate with PayPal button

New New