Популярные страницы сайта: скачать ГТА бесплатно, читы

Перейти к содержимому


фото

Synthwave85

Присоединился: 08.10.2015
Сейчас: Смотрит тему: Автомастерская {Smart}'a =)
Онлайн Последний вход: Сегодня, 19:03

#2242539 Обсуждение и публикация Cleo-скриптов

Автор: Synthwave85 на 23 Январь 2019 - 20:17

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




#2242538 Обсуждение и публикация Cleo-скриптов

Автор: Synthwave85 на 23 Январь 2019 - 20:03

Доработал скрипт "новый алгоритм движения поездов" от Den_Spb. Что сделано:

 

1. На станции Йеллоубелл и участке от Йеллоубелл до Линден теперь может появляться как внутренний, так и внешний поезд (раньше внешний поезд там вообще никогда не появлялся). Причем когда игрок на самой станции, могут появляться оба поезда одновременно (когда между станциями - только по очереди).

 

2. Светофор внутреннего пути на станции Йеллоубелл, светофоры возле туннеля и светофор внешнего пути на станции Линден теперь включаются красным также при появлении встречных поездов и обратно зеленым (или желтым) при их проезде мимо или заезде на 2-путный участок. Впрочем, на станции Линден на практике почти не актуально, но пусть будет. Если ехать на поезде машинистом или пассажиром и проезжать мимо тех светофоров, тоже все правильно будут светить.

 

 

 

3. Поезда появляются и исчезают за 700 метров, 600 при хорошей дальности прорисовки было маловато. И ездят со скоростью 120 км/ч, тормозят на станциях в правильном месте (глюк был замечен только 1 раз, когда Карл был в таком месте, что поезд появился перед самой станцией и остановился чуть дальше, чем надо было).

 

4. Когда внутренний поезд собирается отправляться с Йеллоубелл, а встречный поезд уже появился и горит красный светофор, внутренний поезд будет его ждать и поедет уже на зеленый светофор, когда внешний уедет на 2-путку. На станции Линден для встречного поезда аналогично, но на практике обычно ждать не приходится.

 

Минусы:

 

1. Если в случае, описанном в пункте 4, угнать поезд и поехать на красный, поезда проедут друг через друга, но такое было и в оригинальном скрипте, если поехать на однопутку задним ходом. Как в таких случаях вызывать сход обоих поездов с рельсов, я не знаю.

 

2. При миссии машиниста на внутреннем кольце, если придется ждать на Йеллоубелл зеленого светофора, не знаю, реально ли будет потом успеть по расписанию. Но ждать там поезду обычно долго не приходится.

 

В остальном, глюков больше не замечал, тестировал практически по всей территории возле однопутных участков.

Делал главным образом для себя, так что не знаю как быть с авторскими правами.

Навыки программирования у меня никакие, но очень хотелось добавить еще больше реализма по ЖД

 

код
//
//-----------------------------ГТА СА: НОВЫЙ АЛГОРИТМ ДВИЖЕНИЯ ПОЕЗДОВ, ВЕРСИЯ 5--------(by Den_spb)-------------------------------------------
//--- доработка Andrew_synthwave85 ---
//
// -----------------------------------------------------------------------------------------------------------------------Назначение переменных
{
0@ - одноразовое дробное число (значение используется в пределах одной операции или последовательной группы операций)
1@ - одноразовое дробное число
2@ - одноразовое дробное число
3@ - одноразовое дробное число
4@ - одноразовое дробное число
5@ - указатель на маркер внутреннего поезда
6@ - одноразовое дробное число
7@ - одноразовое целое число
8@ - указатель на внутренний поезд
9@ - указатель на внешний поезд
10@ - указатель на маркер внешнего поезда
11@ - минимальное расстояние внутреннего поезда до точки остановки, при котором может включиться торможение
12@ - максимальное расстояние внутреннего поезда до точки остановки, при котором может включиться торможение
13@ - минимальное расстояние внешнего поезда до точки остановки, при котором может включиться торможение
14@ - максимальное расстояние внешнего поезда до точки остановки, при котором может включиться торможение
15@ - запись значения производится из адреса памяти при проверке траффика поездов (вкл или откл)
16@ - значение, с которым сравнивается значение таймера событий внутреннего поезда (ожидание перед созданием поезда, стоянка на станции)
17@ - значение, с которым сравнивается значение таймера событий внешнего поезда (ожидание перед созданием поезда, стоянка на станции)
18@ - статус внутреннего поезда.
Значения статусов
0 - поезд не существует. Время, по истечении которого может быть создан поезд, не отсчитывается
1 - поезд не существует. Время, по истечении которого может быть создан поезд, отсчитывается или уже истекло
2 - поезд существует
3 - поезд тормозит на станции
4 - поезд стоит на станции
19@ - статус внешнего поезда. Значения те же.
20@ - одноразовое целое число
21@ - одноразовое целое число
22@ - одноразовое целое число
23@ - одноразовое целое число
24@ - одноразовое целое число
25@ - одноразовое целое число
26@ - указатель на внутренний мачтовый светофор
27@ - указатель на внешний мачтовый светофор
28@ - одноразовое дробное число
29@ - одноразовое дробное число
30@ - флаг автоведения внутреннего поезда.
Значения
0 - в кабине поезда CJ либо поезд не существует - автоведение отключено
1 - в кабине поезда бот - автоведение включено
31@ - флаг автоведения внешнего поезда. Значения те же.
32@ - таймер 1. Используется в событиях внутреннего поезда
33@ - таймер 2. Используется в событиях внешнего поезда
34@
35@
36@
37@
}
//------------------------------------------------------------------------------------------------------------------------------Начало скрипта
{$CLEO .cs}
0A95: enable_thread_saving // чтобы объекты (светофоры), созданные скриптом, не оставались на карте после сохранения игры
var // идентификация типа переменных
20@ : Integer
21@ : Integer
22@ : Integer
23@ : Integer
24@ : Integer
25@ : Integer
end
16@ = 0
17@ = 0
30@ = 0
31@ = 0
32@ = 0
33@ = 0
while true //------------------------------------------------------------------------------------------------------------Главный цикл скрипта
wait 0
if //--------------------------------------------------------------------------Операции для внутреннего поезда (поезд пока не существует)
856E: not car 8@ defined
then
if
18@ <> 1
then
18@ = 1
0209: 16@ = random_int_in_ranges 31 61 //15 21 // min и max время в секундах, по истечении которого может быть создан внутренний поезд
16@ *= 1000
32@ = 0
else
0A8D: 15@ = read_memory 0xC38010 size 1 virtual_protect 0 // читаем адрес памяти, чтобы узнать, вкл или откл траффик поездов
if and
15@ == 0 // траффик включен, следовательно ж д миссии не запущены. Можем продолжать
001D: 32@ > 16@ // (int)
then
actor.StorePos($PLAYER_ACTOR,3@,4@,6@)
if
056E: car 9@ defined
then
car.StorePos(9@,0@,1@,2@)
else
0@ = 0.0
1@ = 0.0
end
if or
0@ < 2520.0
1@ < 1330.0 // если внешний поезд стоит на станции Линден или только отправился с нее, внутренний не будет создан
then
if or
3@ < 1500.0
4@ < 1360.0
856E: not car 9@ defined // если игрок в однопутной зоне и существует внешний поезд, то внутренний поезд создан не будет
then
// вся плоскость игровой карты делится на части. Минимум - на 2, в этом скрипте - на 4 (карта делится осями Y и X)
// в каждой части карты должны проходить ж д пути, иначе деление нецелесообразно
if
3@ >= 0.0 // игрок в правой половине карты
then
if
4@ >= 0.0
then
21@ = 1 // номер квадранта
else
21@ = 2
end
else
if
4@ >= 0.0
then
21@ = 4
else
21@ = 3
end
end
// Файл tracks2.dat делится на наборы в соответствии с делением плоскости карты. После того, как определено,
// в какой части карты находится игрок, выбирается соответствующий набор точек.
// Далее производится последовательная проверка расстояния игрока до точек набора.
// Проверка осуществляется от дальних точек к ближним, по ходу движения поезда.
// Расстояние между точками около 300 м (менее 300 м). Первая точка набора берётся не у границы части карты (квадранта),
// а на 600 м раньше - на случай, если игрок находится вблизи границы квадрантов (частей карты).
// Проверяются два набора точек - тот, который соответствует части карты и следующий, по ходу движения поезда.
// Если расстояние между игроком и точкой меньше 600 м, то осуществляется переход на код создания поезда.
// Иначе, после проверки двух наборов выполнение данной части кода прекращается.
// Понятно, что поезд может быть создан на расстоянии 300 - 600 м от игрока.
// Для внешнего поезда эта часть кода аналогична, только наборы будут проверяться в обратном порядке,
// тоже по ходу движения поезда. Файл маршрута для внешнего поезда - tracks4.dat
if
21@ == 1
then
jump @kvad_1t1
end
if
21@ == 2
then
jump @kvad_2t1
end
if
21@ == 3
then
jump @kvad_3t1
end
if
21@ == 4
then
jump @kvad_4t1
end
:kvad_1t1 //------------------------------------------------------------------------------Внутренний поезд. Набор точек 1
0@ = -598.09 // данная часть кода была написана pas-программой автоматически
1@ = 1188.22
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@ // расстояние между игроком и точкой
2@ > 700.0 // если расстояние меньше 700 м, то перейти на код создания поезда
jf @create1 // метка, где начинается код создания поезда
0@ = -325.94
1@ = 1248.88
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = -35.79
1@ = 1293.15
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 241.37
1@ = 1229.34
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 536.14
1@ = 1247.17
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 739.12
1@ = 1461.33
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 742.99
1@ = 1697.59
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 742.51
1@ = 1787.34
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 740.75
1@ = 2026.49
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 726.84
1@ = 2321.07
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 801.16
1@ = 2609.48
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 1072.24
1@ = 2722.62
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 1236.12
1@ = 2632.27
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 1481.99
1@ = 2632.34
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 1774.87
1@ = 2675.03
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 2021.92
1@ = 2694.18
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 2229.69
1@ = 2690.17
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 2519.59
1@ = 2639.43
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 2552.81
1@ = 2344.89
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 2735.05
1@ = 2111.73
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 2781.06
1@ = 1816.16
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 2856.25
1@ = 1531.03
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 2864.77
1@ = 1239.22
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 2764.76
1@ = 983.25
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 2764.79
1@ = 743.27
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
if
21@ == 4 // если игрок находится в 4 квадранте, то заканчиваем проверку
then
jump @_5 // метка, расположенная после кода создания поезда
end
:kvad_2t1 //---------------------------------------------------------------------------Внутренний поезд. Набор точек 2
0@ = 2765.28
1@ = 528.72
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 2781.32
1@ = 239.50
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 2827.61
1@ = 36.33
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 2763.10
1@ = -250.25
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 2467.57
1@ = -275.00
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 2192.47 // point 1
1@ = -357.99
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 2122.11 // point 2
1@ = -647.61
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 2284.98
1@ = -897.82
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 2284.99
1@ = -1186.05
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 2273.19
1@ = -1484.06
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 2198.65
1@ = -1760.34
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 1989.68
1@ = -1953.75
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 1696.98
1@ = -1953.73
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 1398.43
1@ = -1948.14
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 1197.64
1@ = -1779.76
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 1002.70
1@ = -1556.24
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 815.00
1@ = -1366.51
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 778.25
1@ = -1333.63
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
if
21@ == 1
then
jump @_5
end
:kvad_3t1 //-------------------------------------------------------------------------Внутренний поезд. Набор точек 3
0@ = 589.52
1@ = -1187.75
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 335.44
1@ = -1061.40
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = 49.59
1@ = -1018.00
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = -237.89
1@ = -1069.90
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = -470.71
1@ = -1253.47
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = -742.62
1@ = -1133.88
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = -847.02
1@ = -1404.64
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = -1113.11
1@ = -1514.30
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = -1392.21
1@ = -1509.24
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = -1676.36
1@ = -1465.42
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = -1876.64
1@ = -1258.10
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = -1976.75
1@ = -995.47
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = -1978.81
1@ = -717.47
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
if
21@ == 2
then
jump @_5
end
:kvad_4t1 //--------------------------------------------------------------------------Внутренний поезд. Набор точек 4
0@ = -1980.12
1@ = -592.06
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = -1960.09
1@ = -296.04
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = -1944.42
1@ = -11.95
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = -1942.72
1@ = 171.88
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = -1756.16
1@ = 399.26
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = -1523.12
1@ = 568.50
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = -1290.21
1@ = 737.81
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = -1082.96
1@ = 888.28
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = -992.44
1@ = 954.08
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
0@ = -760.64
1@ = 1122.39
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create1
if
21@ == 3
then
jump @_5
end
jump @kvad_1t1
:create1 //---------------------------------------------------------------------------------Создание внутреннего поезда
0A8D: 15@ = read_memory 0xC38010 size 1 virtual_protect 0
if
15@ == 0 // траффик поездов включен (ж д миссии не запущены)
then
while true
wait 0
0209: 21@ = random_int_in_ranges 0 16 // выбираем тип поезда (1-15)
if and
21@ <> 8
21@ <> 9
21@ <> 10
21@ <> 11
21@ <> 12 // если тип поезда не трамвайный (8, 9, 14)
21@ <> 13 // и не зарезервированный для миссий (10 - 13), то выбор сделан
21@ <> 14 // 15-й тип оставил, там локомотив без вагонов
then
break // выход из цикла
end
end
7@ = -382234 // начало блока адресов памяти, в которых записаны ИД модели вагонов всех поездов
21@ *= 16 // номер типа * максимальное количество вагонов в типе
005A: 7@ += 21@ // (int) - находим начало выбранного типа поезда
0016: 21@ /= 16
11@ = 6.643 // зависимость тормозного пути от кол-ва вагонов на скорости 60 км/ч определяется формулой
// Тп = 6,643 + 6,357 * количество вагонов; на скорости 120 км/ч цифру 6,357 умножаем на 4
while &0(7@,1i) <> 0 // пока ИД вагона ненулевой
Model.Load(&0(7@,1i)) // загружаем необходимые модели
11@ += 25.428 // и одновременно считаем минимальный тормозной путь
7@ += 1
end
0087: 12@ = 11@ // (float)
12@ += 80.0
// при скорости 60 км/ч разница между мин. и макс. тормозными путями 20 м; при скорости 120 км/ч - 80 м
7@ = -382234
21@ *= 16
005A: 7@ += 21@ // (int)
0016: 21@ /= 16
while &0(7@,1i) <> 0 // последовательно проверяем, загружены ли модели
repeat
wait 0
until Model.Available(&0(7@,1i))
7@ += 1
end
7@ = -382234
21@ *= 16
005A: 7@ += 21@ // (int)
0016: 21@ /= 16
7@ += 14 // адрес модели 14 вагона выбранного типа
if and // можно сделать поезд 19 вагонным, но только если выполнены условия
&0(7@,1i) <> 0 // в поезде будет существовать 14 вагон
21@ < 7 // тип поезда 0-6 (остальные типы - это трамваи и поезда, используемые в миссиях)
then
22@ = &0(7@,1i) // ИД 14 вагона
7@ += 1
&0(7@,1i) = 22@ // ИД вагона 15 (0) заменена на 14
7@ += 1
23@ = &0(7@,1i) // сохраняем в памяти ИД вагона 16 (первый вагон следующего за выбранным типа)
&0(7@,1i) = 22@ // назначаем ИД 16 вагона такой же, как у 14
7@ += 1
20@ = &0(7@,1i) // ИД 17 вагона
&0(7@,1i) = 22@
7@ += 1
24@ = &0(7@,1i) // ИД 18 вагона
&0(7@,1i) = 22@
7@ += 1
25@ = &0(7@,1i) // ИД 19 вагона (последнего)
&0(7@,1i) = 0
end
// в файле маршрутов стандартной игры есть 2 особые точки
// внутренний путь в тех местах располагается выше, чем соседний путь.
// Поэтому поезд создается на пути противоположного направления.
// Чтобы этого избежать, задаем высоту создания поезда для этих точек отдельно.
if and
0@ == 2192.47 // особая точка 1
1@ == -357.99
then
06D8: 8@ = create_train_at 0@ 1@ 60.0 type 21@ direction 1
else
if and
0@ == 2122.11 // особая точка 2
1@ == -647.61
then
06D8: 8@ = create_train_at 0@ 1@ 70.0 type 21@ direction 1
else // выбрана какая-то другая точка
06D8: 8@ = create_train_at 0@ 1@ 0.0 type 21@ direction 1
end // высоту для всех остальных точек можно брать одинаковую - 0.0
end
18@ = 2
30@ = 1
06DC: set_train 8@ acc 33.33 // назначаемая поезду скорость -
06DD: set_train 8@ speed 33.33 // 120 км/ч
{if
$ONMISSION == 0 // во время миссии маркер будет мешать
then
5@ = Marker.CreateAboveCar(8@)
Marker.SetColor(5@, 0x807000FF) // 0
018B: set_marker 5@ radar_mode 2
end}
7@ = -382234
21@ *= 16
005A: 7@ += 21@ // (int)
0016: 21@ /= 16
7@ += 14
if and // если были прицеплены дополнительные вагоны, то восстанавливаем значения ИД
&0(7@,1i) <> 0
21@ < 7
then
7@ += 1 // 15
&0(7@,1i) = 0
7@ += 1 // 16
&0(7@,1i) = 23@
7@ += 1 // 17
&0(7@,1i) = 20@
7@ += 1 // 18
&0(7@,1i) = 24@
7@ += 1 // 19
&0(7@,1i) = 25@
end
7@ = -382234
21@ *= 16
005A: 7@ += 21@ // (int)
0016: 21@ /= 16
while &0(7@,1i) <> 0 // удаляем модели вагонов из памяти
Model.Destroy(&0(7@,1i))
7@ += 1
end
end
end
end
end
end
end
:_5
if //---------------------------------------------------------------------------Операции для внешнего поезда (поезд пока не существует)
856E: not car 9@ defined
then
if
19@ <> 1
then
19@ = 1
0209: 17@ = random_int_in_ranges 31 61 //15 21 // min и max время в секундах, по истечении которого может быть создан внешний поезд
17@ *= 1000
33@ = 0
else
0A8D: 15@ = read_memory 0xC38010 size 1 virtual_protect 0 // читаем адрес памяти, чтобы узнать, вкл или откл траффик поездов
if and
15@ == 0 // траффик включен, следовательно ж д миссии не запущены. Можем продолжать
001D: 33@ > 17@ // (int)
then
actor.StorePos($PLAYER_ACTOR,3@,4@,6@)
if
056E: car 8@ defined
then
car.StorePos(8@,0@,1@,2@)
else
0@ = 0.0
1@ = 0.0
end
if or
0@ < 1470.0 // если внутренний поезд стоит на станции Йеллоубелл или только отправился с нее, внешний поезд не будет создан
1@ < 2620.0
then

if or
3@ < 1500.0
4@ < 1360.0
856E: not car 8@ defined // если игрок в однопутной зоне и существует внутренний поезд, то внешний поезд создан не будет
then
if
3@ >= 0.0 // игрок в правой половине карты
then
if
4@ >= 0.0
then
21@ = 1 // номер квадранта
else
21@ = 2
end
else
if
4@ >= 0.0
then
21@ = 4
else
21@ = 3
end
end
if
21@ == 1
then
jump @kvad_1t4
end
if
21@ == 2
then
jump @kvad_2t4
end
if
21@ == 3
then
jump @kvad_3t4
end
if
21@ == 4
then
jump @kvad_4t4
end
:kvad_4t4 //------------------------------------------------------------------------------Внешний поезд. Набор точек 4
0@ = 515.98
1@ = 1240.23
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 226.84
1@ = 1238.51
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = -53.40
1@ = 1296.12
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = -347.38
1@ = 1247.21
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = -631.83
1@ = 1185.07
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = -880.27
1@ = 1040.72
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = -1030.44
1@ = 931.37
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = -1240.99
1@ = 778.43
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = -1342.19
1@ = 704.87
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
if
21@ == 1
then
jump @_6
end
:kvad_3t4 //----------------------------------------------------------------------------Внешний поезд. Набор точек 3
0@ = -1498.99
1@ = 590.90
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = -1601.06
1@ = 516.83
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = -1837.42
1@ = 347.58
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = -1948.42
1@ = 100.00
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = -1950.42
1@ = -190.28
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = -1982.39
1@ = -488.08
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = -1982.55
1@ = -768.10
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = -1971.89
1@ = -1059.67
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = -1846.91
1@ = -1309.37
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = -1629.08
1@ = -1486.73
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = -1347.52
1@ = -1513.87
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = -1053.53
1@ = -1508.42
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = -835.57
1@ = -1370.31
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = -718.41
1@ = -1128.25
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
if
21@ == 4
then
jump @_6
end
:kvad_2t4 //------------------------------------------------------------------------------Внешний поезд. Набор точек 2
0@ = -596.65
1@ = -1164.91
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = -349.44
1@ = -1223.16
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = -137.48
1@ = -1027.47
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 151.78
1@ = -1026.41
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 438.87
1@ = -1107.08
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 690.56
1@ = -1266.07
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 910.87
1@ = -1464.63
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 1097.41
1@ = -1669.80
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 1293.72
1@ = -1894.03
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 1573.67
1@ = -1957.68
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 1857.49
1@ = -1957.93
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 2152.76
1@ = -1957.85
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 2205.95
1@ = -1686.16
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 2288.74
1@ = -1407.02
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 2288.95
1@ = -1110.09
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 2281.21
1@ = -816.01
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 2078.88
1@ = -607.04
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
if
21@ == 3
then
jump @_6
end
:kvad_1t4 //-------------------------------------------------------------------------------Внешний поезд. Набор точек 1
0@ = 2062.91
1@ = -593.55
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 2087.84
1@ = -365.31
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 2367.59
1@ = -284.31
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 2661.26
1@ = -298.92
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 2832.24
1@ = -92.44
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 2805.30
1@ = 182.18
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 2769.17
1@ = 442.68
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 2768.74
1@ = 701.56
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 2768.72
1@ = 983.27
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 2868.74
1@ = 1239.21
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 2860.00
1@ = 1532.27
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 2785.01
1@ = 1782.76
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 2765.17
1@ = 2066.97
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 2563.53
1@ = 2264.64
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 2551.77
1@ = 2560.03
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 2342.07
1@ = 2694.16
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 2092.40
1@ = 2694.22
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 1797.40
1@ = 2682.39
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 1510.13
1@ = 2636.25
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 1212.03
1@ = 2637.34
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 957.59
1@ = 2762.66
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 768.57
1@ = 2550.89
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 725.39
1@ = 2288.51
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 736.95
1@ = 2009.09
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 738.76
1@ = 1746.69
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 735.12
1@ = 1461.95
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
0@ = 616.45
1@ = 1297.93
0509: 2@ = distance_between_XY 3@ 4@ and_XY 0@ 1@
2@ > 700.0
jf @create4
if
21@ == 2
then
jump @_6
end
jump @kvad_4t4
:create4 //-------------------------------------------------------------------------------------создание внешнего поезда
0A8D: 15@ = read_memory 0xC38010 size 1 virtual_protect 0
if
15@ == 0 // траффик поездов включен (ж д миссии не запущены)
then
while true
wait 0
0209: 21@ = random_int_in_ranges 0 16 // выбираем тип поезда (1-15)
if and
21@ <> 8
21@ <> 9
21@ <> 10
21@ <> 11
21@ <> 12 // если тип поезда не трамвайный (8, 9, 14)
21@ <> 13 // и не зарезервированный для миссий (10 - 13), то выбор сделан
21@ <> 14 // 15-й тип оставил, там локомотив без вагонов
then
break // выход из цикла
end
end
7@ = -382234 // начало блока адресов памяти, в которых записаны ИД модели вагонов всех поездов
21@ *= 16 // номер типа * максимальное количество вагонов в типе
005A: 7@ += 21@ // (int) - находим начало выбранного типа поезда
0016: 21@ /= 16
13@ = 6.643 // зависимость тормозного пути от кол-ва вагонов на скорости 60 км/ч определяется формулой
// Тп = 6,643 + 6,357 * количество вагонов; на скорости 120 км/ч цифру 6,357 умножаем на 4
while &0(7@,1i) <> 0 // пока ИД вагона ненулевой
Model.Load(&0(7@,1i)) // загружаем необходимые модели
13@ += 25.428 // и одновременно считаем минимальный тормозной путь
7@ += 1
end
0087: 14@ = 13@ // (float)
14@ += 80.0
// при скорости 60 км/ч разница между мин. и макс. тормозными путями 20 м; при скорости 120 км/ч - 80 м
7@ = -382234
21@ *= 16
005A: 7@ += 21@ // (int)
0016: 21@ /= 16
while &0(7@,1i) <> 0 // последовательно проверяем, загружены ли модели
repeat
wait 0
until Model.Available(&0(7@,1i))
7@ += 1
end
7@ = -382234
21@ *= 16
005A: 7@ += 21@ // (int)
0016: 21@ /= 16
7@ += 14 // адрес модели 14 вагона выбранного типа
if and // можно сделать поезд 19 вагонным, но только если выполнены условия
&0(7@,1i) <> 0 // в поезде будет существовать 14 вагон
21@ < 7 // тип поезда 0-6 (остальные типы - это трамваи и поезда, используемые в миссиях)
then
22@ = &0(7@,1i) // ИД 14 вагона
7@ += 1
&0(7@,1i) = 22@ // ИД вагона 15 (0) заменена на 14
7@ += 1
23@ = &0(7@,1i) // сохраняем в памяти ИД вагона 16 (первый вагон следующего за выбранным типа)
&0(7@,1i) = 22@ // назначаем ИД 16 вагона такой же, как у 14
7@ += 1
20@ = &0(7@,1i) // ИД 17 вагона
&0(7@,1i) = 22@
7@ += 1
24@ = &0(7@,1i) // ИД 18 вагона
&0(7@,1i) = 22@
7@ += 1
25@ = &0(7@,1i) // ИД 19 вагона (последнего)
&0(7@,1i) = 0
end


if and
0@ > 1610.0 // если выбрана точка на однопутке возле станции Yellowbell
0@ < 2170.0
1@ > 2630.0
1@ < 2699.0
then // внеш.поезд должен создаваться только на 2-путке, иначе поедет по внутр.пути
06D8: 9@ = create_train_at 2173.89 2694.16 9.82 type 21@ direction 0
else
if and
0@ > 2540.0 // если выбрана точка на однопутке в туннеле возле депо
0@ < 2785.0
1@ > 1910.0
1@ < 2470.0
then // внеш.поезд должен создаваться только на 2-путке, иначе поедет по внутр.пути
06D8: 9@ = create_train_at 2785.01 1901.28 5.46 type 21@ direction 0
else // выбрана какая-то другая точка
06D8: 9@ = create_train_at 0@ 1@ 0.0 type 21@ direction 0
end // высоту для всех остальных точек можно брать одинаковую - 0.0
end


19@ = 2
31@ = 1
06DC: set_train 9@ acc 33.33 // назначаемая поезду скорость -
06DD: set_train 9@ speed 33.33 // 120 км/ч
{if
$ONMISSION == 0 // во время миссии маркер будет мешать
then
10@ = Marker.CreateAboveCar(9@)
Marker.SetColor(10@, 0x008080FF) // 1
018B: set_marker 10@ radar_mode 2
end}
7@ = -382234
21@ *= 16
005A: 7@ += 21@ // (int)
0016: 21@ /= 16
7@ += 14
if and // если были прицеплены дополнительные вагоны, то восстанавливаем значения ИД
&0(7@,1i) <> 0
21@ < 7
then
7@ += 1 // 15
&0(7@,1i) = 0
7@ += 1 // 16
&0(7@,1i) = 23@
7@ += 1 // 17
&0(7@,1i) = 20@
7@ += 1 // 18
&0(7@,1i) = 24@
7@ += 1 // 19
&0(7@,1i) = 25@
end
7@ = -382234
21@ *= 16
005A: 7@ += 21@ // (int)
0016: 21@ /= 16
while &0(7@,1i) <> 0 // удаляем модели вагонов из памяти
Model.Destroy(&0(7@,1i))
7@ += 1
end
end
end
end
end
end
end
:_6 // --------------------------------------------------------------------------------------------------Операции с мачтовыми светофорами
// вся трасса, вдоль котой расставляются светофоры, делится на определённое число блок-участков.
// Пары мачтовых светофоров расставляются вблизи определённых точек на границах блок-участков. В данном скрипте определено 13 точек.
// Нормальная длина блок-участка около 1000 м, минимальная рекомендуемая 600 м (т к в любой момент времени существует только 1 пара светофоров)
// Начинаем с определения ближайшей к игроку точки, рядом с которой будет установлена пара светофоров
// Для этого вычисляем расстояние между игроком и каждой точкой, выбираем наименьшее значение
00A0: store_actor $PLAYER_ACTOR position_to 0@ 1@ 2@
3@ = 1431.0647 // X точки 1
4@ = 2634.4133 // Y точки 1
0509: 2@ = distance_between_XY 0@ 1@ and_XY 3@ 4@ // вычисляем расстояние
20@ = 1 // записываем порядковый номер точки
3@ = 2550.8633 // берем координаты следующей точки
4@ = 2498.4736
0509: 6@ = distance_between_XY 0@ 1@ and_XY 3@ 4@ // определяем дистанцию
if
0025: 2@ > 6@ // (float) // если расстояние игрока до 2 точки меньше, чем до первой
then
0087: 2@ = 6@ // (float) // то сохраняем меньшее значение
20@ = 2 // и номер точки
end
3@ = 2866.9167
4@ = 1287.7421
0509: 6@ = distance_between_XY 0@ 1@ and_XY 3@ 4@
if
0025: 2@ > 6@ // (float)
then
0087: 2@ = 6@ // (float)
20@ = 3
end
3@ = 2791.6074
4@ = 218.3158
0509: 6@ = distance_between_XY 0@ 1@ and_XY 3@ 4@
if
0025: 2@ > 6@ // (float)
then
0087: 2@ = 6@ // (float)
20@ = 4
end
3@ = 2284.8879
4@ = -331.9585
0509: 6@ = distance_between_XY 0@ 1@ and_XY 3@ 4@
if
0025: 2@ > 6@ // (float)
then
0087: 2@ = 6@ // (float)
20@ = 5
end
3@ = 2287.0544
4@ = -1051.7172
0509: 6@ = distance_between_XY 0@ 1@ and_XY 3@ 4@
if
0025: 2@ > 6@ // (float)
then
0087: 2@ = 6@ // (float)
20@ = 6
end
3@ = 1919.104
4@ = -1955.9293
0509: 6@ = distance_between_XY 0@ 1@ and_XY 3@ 4@
if
0025: 2@ > 6@ // (float)
then
0087: 2@ = 6@ // (float)
20@ = 7
end
3@ = -21.6351
4@ = -1020.1892
0509: 6@ = distance_between_XY 0@ 1@ and_XY 3@ 4@
if
0025: 2@ > 6@ // (float)
then
0087: 2@ = 6@ // (float)
20@ = 8
end
3@ = -1260.7156
4@ = -1515.5342
0509: 6@ = distance_between_XY 0@ 1@ and_XY 3@ 4@
if
0025: 2@ > 6@ // (float)
then
0087: 2@ = 6@ // (float)
20@ = 9
end
3@ = -1946.1219
4@ = 134.2469
0509: 6@ = distance_between_XY 0@ 1@ and_XY 3@ 4@
if
0025: 2@ > 6@ // (float)
then
0087: 2@ = 6@ // (float)
20@ = 10
end
3@ = -915.0107
4@ = 1012.6142
0509: 6@ = distance_between_XY 0@ 1@ and_XY 3@ 4@
if
0025: 2@ > 6@ // (float)
then
0087: 2@ = 6@ // (float)
20@ = 11
end
3@ = 156.3303
4@ = 1265.4232
0509: 6@ = distance_between_XY 0@ 1@ and_XY 3@ 4@
if
0025: 2@ > 6@ // (float)
then
0087: 2@ = 6@ // (float)
20@ = 12
end
3@ = 739.1387
4@ = 1994.1334
0509: 6@ = distance_between_XY 0@ 1@ and_XY 3@ 4@
if
0025: 2@ > 6@ // (float)
then
0087: 2@ = 6@ // (float)
20@ = 13
end
// После выполнения данной операции, стал известен номер ближайшей к игроку точки
// Теперь, в соответствии с номером точки, вычисляются координаты установки светофоров и углы их поворота
// Также определяются цвета (модели светофоров)
if
20@ == 1 // Если номер ближайшей к игроку точки - 1, то
then
if
056E: car 8@ defined // внутр.поезд существует
then
car.StorePos(8@,0@,1@,2@)
if
056E: car 9@ defined // внеш.поезд существует
then
car.StorePos(9@,3@,4@,6@)
else
3@ = 0.0
4@ = 0.0
end
if or
0@ > 1483.521// train position - позиция поезда относительно светофора (условие назначения красного сигнала)
// Предположим, поезд подъезжает к светофору по направлению запад-восток
// Тогда, если X координата поезда больше X координаты светофора, значит, поезд уже проехал светофор
// Условие выполнено и будет назначен красный сигнал
3@ > 1430.0 // чтобы светофор был красным при появлении встречного внеш.поезда с однопутки
then
21@ = 18633 // set traffic light color to red
else
21@ = 18632 // set traffic light color to green
end
else
if
056E: car 9@ defined // внеш.поезд существует
then
car.StorePos(9@,3@,4@,6@)
else
3@ = 0.0
4@ = 0.0
end
if
32@ < 30000 // если внутр.поезд не существует и с момента исчезновения последнего поезда прошло менее 30000 мс (30 сек)
// то будет назначен желтый сигнал
then
if
3@ < 1430.0 // точка, на которой встречный внеш.поезд уедет на 2-путку на станции Йеллоубелл
then
21@ = 18631 // set traffic light color to yellow
else
21@ = 18633 // set traffic light color to red - если появился встречный поезд, включаем красный светофор
end
else
if
3@ < 1430.0 // точка, на которой встречный внеш.поезд уедет на 2-путку на станции Йеллоубелл
then
21@ = 18632 // set traffic light color to green
else
21@ = 18633 // set traffic light color to red - если появился встречный поезд, включаем красный светофор
end
end
end
if // аналогичная операция для внешнего поезда и светофора
056E: car 9@ defined // внеш.поезд существует
then
car.StorePos(9@,0@,1@,2@)
if
0@ < 1380.6613// train position
then
22@ = 18633 // set traffic light color to red
else
22@ = 18632 // set traffic light color to green
end
else
if
33@ < 30000
then
22@ = 18631 // set traffic light color to yellow
else
22@ = 18632 // set traffic light color to green
end
end // Теперь назначаем координаты и углы поворота светофоров
0@ = 1483.521 // x координата внутреннего светофора
1@ = 2629.804 // y координата внутреннего светофора
2@ = 9.8203 // z координата внутреннего светофора
28@ = 90.0 // z угол внутреннего светофора. Следующие параметры - аналогичные, только для внешнего светофора.
3@ = 1380.6613
4@ = 2638.6968
6@ = 9.8203
29@ = 270.0
jump @lights_1 // назначение координат и моделей выполнено, можно выйти из данной секции
end
if
20@ == 2
then
if
056E: car 8@ defined // внутр.поезд существует
then
car.StorePos(8@,0@,1@,2@)
if
056E: car 9@ defined // внеш.поезд существует
then
car.StorePos(9@,3@,4@,6@)
else
3@ = 0.0
4@ = 5000.0 // такое число сугубо для технической надобности
end
if or
1@ < 2489.8071// train position
4@ < 2630.0 // чтобы светофор был красным при появлении внеш.поезда с однопутки
then
21@ = 18633 // set traffic light color to red
else
21@ = 18632 // set traffic light color to green
end
else
if
056E: car 9@ defined // внеш.поезд существует
then
car.StorePos(9@,3@,4@,6@)
else
3@ = 0.0
4@ = 5000.0 // такое число сугубо для технической надобности
end
if
32@ < 30000
then
if
4@ > 2630.0 // место, где внеш.поезд заедет на 2-путку
then
21@ = 18631 // set traffic light color to yellow
else
21@ = 18633 // set traffic light color to red - если появился встречный поезд, включаем красный светофор
end
else
if
4@ > 2630.0 // место, где внеш.поезд заедет на 2-путку
then
21@ = 18632 // set traffic light color to green
else
21@ = 18633 // set traffic light color to red - если появился встречный поезд, включаем красный светофор
end
end
end
if
056E: car 9@ defined // внеш.поезд существует
then
car.StorePos(9@,0@,1@,2@)
if
056E: car 8@ defined // внутр.поезд существует
then
car.StorePos(8@,3@,4@,6@)
else
3@ = 5000.0 // такое число сугубо для технической надобности
4@ = 0.0
end
if or
1@ > 2507.032// train position
3@ < 2250.0 // чтобы светофор был красным при появлении внутр. поезда и до прохождения им стрелки на разъезд перед туннелем
then
22@ = 18633 // set traffic light color to red
else
22@ = 18632 // set traffic light color to green
end
else
if
056E: car 8@ defined // внутр.поезд существует
then
car.StorePos(8@,3@,4@,6@)
else
3@ = 5000.0 // такое число сугубо для технической надобности
4@ = 0.0
end
if
33@ < 30000
then
if
3@ > 2250.0 // место, где внутр.поезд заедет на 2-путку
then
22@ = 18631 // set traffic light color to yellow
else
22@ = 18633 // set traffic light color to red - если появился встречный поезд, включаем красный светофор
end
else
if
3@ > 2250.0 // место, где внутр.поезд заедет на 2-путку
then
22@ = 18632 // set traffic light color to green
else
22@ = 18633 // set traffic light color to red - если появился встречный поезд, включаем красный светофор
end
end
end
0@ = 2545.4644
1@ = 2489.8071
2@ = 9.8203
28@ = 0.0
3@ = 2555.9687
4@ = 2507.032
6@ = 9.8203
29@ = 180.0
jump @lights_1
end
if
20@ == 3
then
if
056E: car 8@ defined // внутр.поезд существует
then
car.StorePos(8@,0@,1@,2@)
if
1@ < 1226.0918// train position
then
21@ = 18633 // set traffic light color to red
else
21@ = 18632 // set traffic light color to green
end
else
if
32@ < 30000
then
21@ = 18631 // set traffic light color to yellow
else
21@ = 18632 // set traffic light color to green
end
end
if
056E: car 9@ defined // внеш.поезд существует
then
car.StorePos(9@,0@,1@,2@)
if
056E: car 8@ defined // внутр.поезд существует
then
car.StorePos(8@,3@,4@,6@)
else
3@ = 0.0
4@ = 0.0
end
if or
1@ > 1341.5892// train position
4@ > 1870.0 // чтобы светофор был красным до прохождения внутр.поездом стрелки
then
22@ = 18633 // set traffic light color to red
else
22@ = 18632 // set traffic light color to green
end
else
if
056E: car 8@ defined // внутр.поезд существует
then
car.StorePos(8@,3@,4@,6@)
else
3@ = 0.0
4@ = 0.0
end
if
33@ < 30000 // если поезд не существует и с момента исчезновения последнего поезда прошло менее 30000 мс (30 сек)
// то будет назначен желтый сигнал
then
if
4@ < 1870.0
then
22@ = 18631 // set traffic light color to yellow
else
22@ = 18633 // set traffic light color to red - пока встречный внутр.поезд не заедет на 2-путку,
end // светофор на станции Линден красный
else
if
4@ < 1870.0
then
22@ = 18632 // set traffic light color to green
else
22@ = 18633 // set traffic light color to red - пока встречный внутр.поезд не заедет на 2-путку,
end // светофор на станции Линден красный
end
end
0@ = 2861.7556
1@ = 1226.0918
2@ = 9.8203
28@ = 0.0
3@ = 2871.428
4@ = 1341.5892
6@ = 9.8203
29@ = 180.0
jump @lights_1
end
if // остальные светофоры находятся на 2-путном участке, их режим работы остается как был
20@ == 4
then
if
056E: car 8@ defined // внутр.поезд существует
then
car.StorePos(8@,0@,1@,2@)
if
1@ < 208.3398// train position
then
21@ = 18633 // set traffic light color to red
else
21@ = 18632 // set traffic light color to green
end
else
if
32@ < 30000
then
21@ = 18631 // set traffic light color to yellow
else
21@ = 18632 // set traffic light color to green
end
end
if
056E: car 9@ defined // внеш.поезд существует
then
car.StorePos(9@,0@,1@,2@)
if
1@ > 228.1062// train position
then
22@ = 18633 // set traffic light color to red
else
22@ = 18632 // set traffic light color to green
end
else
if
33@ < 30000
then
22@ = 18631 // set traffic light color to yellow
else
22@ = 18632 // set traffic light color to green
end
end
0@ = 2790.0676
1@ = 208.3398
2@ = 10.4456
28@ = 17.1433
3@ = 2793.0969
4@ = 228.1062
6@ = 9.3835
29@ = 197.625
jump @lights_1
end
if
20@ == 5
then
if
056E: car 8@ defined // внутр.поезд существует
then
car.StorePos(8@,0@,1@,2@)
if and
0@ < 2274.7961// train position
1@ > -481.795
then
21@ = 18633 // set traffic light color to red
else
if
1@ < -481.795
then
21@ = 18633 // set traffic light color to red
else
21@ = 18632 // set traffic light color to green
end
end
else
if
32@ < 30000
then
21@ = 18631 // set traffic light color to yellow
else
21@ = 18632 // set traffic light color to green
end
end
if
056E: car 9@ defined // внеш.поезд существует
then
car.StorePos(9@,0@,1@,2@)
if and
1@ > -481.795// train position
0@ > 2294.8137
then
22@ = 18633 // set traffic light color to red
else
22@ = 18632 // set traffic light color to green
end
else
if
33@ < 30000
then
22@ = 18631 // set traffic light color to yellow
else
22@ = 18632 // set traffic light color to green
end
end
0@ = 2274.7961
1@ = -332.2822
2@ = 37.0372
28@ = 298.171
3@ = 2294.8137
4@ = -331.2238
6@ = 34.7746
29@ = 122.6793
jump @lights_1
end
if
20@ == 6
then
if
056E: car 8@ defined // внутр.поезд существует
then
car.StorePos(8@,0@,1@,2@)
if
1@ < -1060.2272// train position
then
21@ = 18633 // set traffic light color to red
else
21@ = 18632 // set traffic light color to green
end
else
if
32@ < 30000
then
21@ = 18631 // set traffic light color to yellow
else
21@ = 18632 // set traffic light color to green
end
end
if
056E: car 9@ defined // внеш.поезд существует
then
car.StorePos(9@,0@,1@,2@)
if
1@ > -1042.8805// train position
then
22@ = 18633 // set traffic light color to red
else
22@ = 18632 // set traffic light color to green
end
else
if
33@ < 30000
then
22@ = 18631 // set traffic light color to yellow
else
22@ = 18632 // set traffic light color to green
end
end
0@ = 2281.8567
1@ = -1060.2272
2@ = 25.8661
28@ = 0.0
3@ = 2292.123
4@ = -1042.8805
6@ = 25.8325
29@ = 180.0
jump @lights_1
end
if
20@ == 7
then
if
056E: car 8@ defined // внутр.поезд существует
then
car.StorePos(8@,0@,1@,2@)
if
0@ < 1910.3224// train position
then
21@ = 18633 // set traffic light color to red
else
21@ = 18632 // set traffic light color to green
end
else
if
32@ < 30000
then
21@ = 18631 // set traffic light color to yellow
else
21@ = 18632 // set traffic light color to green
end
end
if
056E: car 9@ defined // внеш.поезд существует
then
car.StorePos(9@,0@,1@,2@)
if
0@ > 1928.194// train position
then
22@ = 18633 // set traffic light color to red
else
22@ = 18632 // set traffic light color to green
end
else
if
33@ < 30000
then
22@ = 18631 // set traffic light color to yellow
else
22@ = 18632 // set traffic light color to green
end
end
0@ = 1910.3224
1@ = -1950.7422
2@ = 12.5547
28@ = 270.0
3@ = 1928.194
4@ = -1961.0897
6@ = 12.5469
29@ = 90.0
jump @lights_1
end
if
20@ == 8
then
if
056E: car 8@ defined // внутр.поезд существует
then
car.StorePos(8@,0@,1@,2@)
if
0@ < -30.3923// train position
then
21@ = 18633 // set traffic light color to red
else
21@ = 18632 // set traffic light color to green
end
else
if
32@ < 30000
then
21@ = 18631 // set traffic light color to yellow
else
21@ = 18632 // set traffic light color to green
end
end
if
056E: car 9@ defined // внеш.поезд существует
then
car.StorePos(9@,0@,1@,2@)
if
0@ > -12.0904// train position
then
22@ = 18633 // set traffic light color to red
else
22@ = 18632 // set traffic light color to green
end
else
if
33@ < 30000
then
22@ = 18631 // set traffic light color to yellow
else
22@ = 18632 // set traffic light color to green
end
end
0@ = -30.3923
1@ = -1014.865
2@ = 19.3695
28@ = 270.0
3@ = -12.0904
4@ = -1025.2236
6@ = 19.7471
29@ = 90.0
jump @lights_1
end
if
20@ == 9
then
if
056E: car 8@ defined // внутр.поезд существует
then
car.StorePos(8@,0@,1@,2@)
if
0@ < -1268.5348// train position
then
21@ = 18633 // set traffic light color to red
else
21@ = 18632 // set traffic light color to green
end
else
if
32@ < 30000
then
21@ = 18631 // set traffic light color to yellow
else
21@ = 18632 // set traffic light color to green
end
end
if
056E: car 9@ defined // внеш.поезд существует
then
car.StorePos(9@,0@,1@,2@)
if
0@ > -1252.0717// train position
then
22@ = 18633 // set traffic light color to red
else
22@ = 18632 // set traffic light color to green
end
else
if
33@ < 30000
then
22@ = 18631 // set traffic light color to yellow
else
22@ = 18632 // set traffic light color to green
end
end
0@ = -1268.5348
1@ = -1509.6836
2@ = 25.4872
28@ = 265.262
3@ = -1252.0717
4@ = -1521.1899
6@ = 27.1844
29@ = 86.347
jump @lights_1
end
if
20@ == 10
then
if
056E: car 8@ defined // внутр.поезд существует
then
car.StorePos(8@,0@,1@,2@)
if
1@ > 206.1199// train position
then
21@ = 18633 // set traffic light color to red
else
21@ = 18632 // set traffic light color to green
end
else
if
32@ < 30000
then
21@ = 18631 // set traffic light color to yellow
else
21@ = 18632 // set traffic light color to green
end
end
if
056E: car 9@ defined // внеш.поезд существует
then
car.StorePos(9@,0@,1@,2@)
if
1@ < 61.969// train position
then
22@ = 18633 // set traffic light color to red
else
22@ = 18632 // set traffic light color to green
end
else
if
33@ < 30000
then
22@ = 18631 // set traffic light color to yellow
else
22@ = 18632 // set traffic light color to green
end
end
0@ = -1936.4524
1@ = 206.1199
2@ = 24.5516
28@ = 180.0
3@ = -1951.3076
4@ = 61.969
6@ = 24.7109
29@ = 0.0
jump @lights_1
end
if
20@ == 11
then
if
056E: car 8@ defined // внутр.поезд существует
then
car.StorePos(8@,0@,1@,2@)
if
0@ > -905.1539// train position
then
21@ = 18633 // set traffic light color to red
else
21@ = 18632 // set traffic light color to green
end
else
if
32@ < 30000
then
21@ = 18631 // set traffic light color to yellow
else
21@ = 18632 // set traffic light color to green
end
end
if
056E: car 9@ defined // внеш.поезд существует
then
car.StorePos(9@,0@,1@,2@)
if
0@ < -925.2382// train position
then
22@ = 18633 // set traffic light color to red
else
22@ = 18632 // set traffic light color to green
end
else
if
33@ < 30000
then
22@ = 18631 // set traffic light color to yellow
else
22@ = 18632 // set traffic light color to green
end
end
0@ = -905.1539
1@ = 1014.1198
2@ = 33.5781
28@ = 125.4259
3@ = -925.2382
4@ = 1011.7167
6@ = 33.5781
29@ = 305.5475
jump @lights_1
end
if
20@ == 12
then
if
056E: car 8@ defined // внутр.поезд существует
then
car.StorePos(8@,0@,1@,2@)
if
0@ > 163.6387// train position
then
21@ = 18633 // set traffic light color to red
else
21@ = 18632 // set traffic light color to green
end
else
if
32@ < 30000
then
21@ = 18631 // set traffic light color to yellow
else
21@ = 18632 // set traffic light color to green
end
end
if
056E: car 9@ defined // внеш.поезд существует
then
car.StorePos(9@,0@,1@,2@)
if
0@ < 150.1235// train position
then
22@ = 18633 // set traffic light color to red
else
22@ = 18632 // set traffic light color to green
end
else
if
33@ < 30000
then
22@ = 18631 // set traffic light color to yellow
else
22@ = 18632 // set traffic light color to green
end
end
0@ = 163.6387
1@ = 1257.507
2@ = 21.837
28@ = 69.524
3@ = 150.1235
4@ = 1273.7073
6@ = 21.6341
29@ = 248.1258
jump @lights_1
end
if
056E: car 8@ defined // внутр.поезд существует
then
car.StorePos(8@,0@,1@,2@)
if
1@ > 2002.6312// train position
then
21@ = 18633 // set traffic light color to red
else
21@ = 18632 // set traffic light color to green
end
else
if
32@ < 30000
then
21@ = 18631 // set traffic light color to yellow
else
21@ = 18632 // set traffic light color to green
end
end
if
056E: car 9@ defined // внеш.поезд существует
then
car.StorePos(9@,0@,1@,2@)
if
1@ < 1985.515// train position
then
22@ = 18633 // set traffic light color to red
else
22@ = 18632 // set traffic light color to green
end
else
if
33@ < 30000
then
22@ = 18631 // set traffic light color to yellow
else
22@ = 18632 // set traffic light color to green
end
end
0@ = 744.1491
1@ = 2002.6312
2@ = 4.7541
28@ = 180.0
3@ = 733.924
4@ = 1985.515
6@ = 4.3359
29@ = 0.0
:lights_1 // ------------------------------------------------------------------------------------создание или замена мачтовых светофоров
23@ = -382079 // place of traffic lights - в этой общедоступной ячейке памяти сохранен для сравнения номер точки мачтовых светофоров
24@ = -382078 // colour of traffic light 1 - в этой общедоступной ячейке памяти сохранен для сравнения цвет внутр.мачт. светофора
if and
003B: 20@ == &0(23@,1i) // (int)
003B: 21@ == &0(24@,1i) // (int)
then
else // если новый цвет или место установки внутр. светофора не соответствует старому, то
model.Load(21@)
repeat
wait 0
until model.Available(21@)
if
03CA: object 26@ exists // если существует старый внутренний светофор,
then
0108: destroy_object 26@ // то сначала удаляем его
end
object.Create(26@,21@,0@,1@,2@) // создаем внутренний светофор
0177: set_object 26@ Z_angle_to 28@
model.Destroy(21@)

{ marker.CreateAboveObject(7@ 26@)
if
21@ == 18631
then
marker.SetColor(7@ 0xFFFF00FF)
else
if
21@ == 18632
then
marker.SetColor(7@ 0x00FF00FF)
else
marker.SetColor(7@ 0xFF0000FF)
end
end
018B: set_marker 7@ radar_mode 2 }

0085: &0(24@,1i) = 21@ // (int) // сохраняем цвет светофора в памяти для сравнения
end
24@ = -382077 // colour of traffic light 4 - цвет внешнего светофора
if and
003B: 20@ == &0(23@,1i) // (int) - номер точки тот же
003B: 22@ == &0(24@,1i) // (int)
then
else // операции внешних светофоров аналогичны вышеприведенным
model.Load(22@)
repeat
wait 0
until model.Available(22@)
if
03CA: object 27@ exists
then
0108: destroy_object 27@
end
object.Create(27@,22@,3@,4@,6@)
0177: set_object 27@ Z_angle_to 29@
model.Destroy(22@)

{ marker.CreateAboveObject(7@ 27@)
if
22@ == 18631
then
marker.SetColor(7@ 0xFFFF00FF)
else
if
22@ == 18632
then
marker.SetColor(7@ 0x00FF00FF)
else
marker.SetColor(7@ 0xFF0000FF)
end
end
018B: set_marker 7@ radar_mode 2 }

0085: &0(23@,1i) = 20@ // (int) save new parameters in memory
0085: &0(24@,1i) = 22@ // (int)
end // Конец мачтовых светофоров
//-------------------------------------------------------------------------------------алгоритм торможения внутреннего поезда на станции
056E: car 8@ defined // если поезд существует
jf @_7
if and
18@ == 2 // имеет подходящий статус
30@ == 1 // и в кабине бот
jf @_7
car.StorePos(8@,3@,4@,6@) // тогда определяем позицию поезда и последовательно вычисляем расстояния до точек торможения на станциях
0509: 2@ = distance_between_XY 1474.9031 2634.6375 and_XY 3@ 4@ // 1474.9031 2634.6375 - точка на какой-то станции
if and
0025: 12@ > 2@ // (float) если поезд достаточно близко к точке торможения
0025: 2@ > 11@ // (float) но не слишком близко (иначе не успеет затормозить на станции)
3@ < 1474.9031 // смысл этого условия следующий
// предположим, поезд приближается к станции по направлению юг-север. Тогда, если Y координата поезда меньше Y координаты точки остановки,
// то это значит, что поезд подъезжает к станции, а не отъезжает от неё - можно включить торможение
then
06DD: set_train 8@ speed 0.0 // включаем торможение
18@ = 3 // присваиваем новый статус
jump @_7 // выходим из данной секции
end
0509: 2@ = distance_between_XY 2866.8667 1246.4919 and_XY 3@ 4@ //
if and
0025: 12@ > 2@ // (float)
0025: 2@ > 11@ // (float)
4@ > 1246.4919
then
06DD: set_train 8@ speed 0.0
18@ = 3
jump @_7
end
0509: 2@ = distance_between_XY 1696.873 -1955.7689 and_XY 3@ 4@
if and
0025: 12@ > 2@ // (float)
0025: 2@ > 11@ // (float)
3@ > 1696.873
then
06DD: set_train 8@ speed 0.0
18@ = 3
jump @_7
end
0509: 2@ = distance_between_XY 784.326 -1341.736 and_XY 3@ 4@ // рынок 821.194 -1364.7119 -0.4794
if and
0025: 12@ > 2@ // (float)
0025: 2@ > 11@ // (float)
3@ > 784.326
then
06DD: set_train 8@ speed 0.0
18@ = 3
jump @_7
end
0509: 2@ = distance_between_XY -1943.7788 183.2991 and_XY 3@ 4@
if and
0025: 12@ > 2@ // (float)
0025: 2@ > 11@ // (float)
4@ < 183.2991
then
06DD: set_train 8@ speed 0.0
18@ = 3
end
:_7
//---------------------------------------------------------------------------------------------------алгоритм торможения внешнего поезда
056E: car 9@ defined // команды те же, что и для внутреннего поезда
jf @_8
if and
19@ == 2
31@ == 1
jf @_8
car.StorePos(9@,3@,4@,6@)
0509: 2@ = distance_between_XY 1392.7462 2634.2546 and_XY 3@ 4@
if and
0025: 14@ > 2@ // (float)
0025: 2@ > 13@ // (float)
3@ > 1392.7462
then
06DD: set_train 9@ speed 0.0
19@ = 3
jump @_8
end
0509: 2@ = distance_between_XY 2867.2666 1330.1616 and_XY 3@ 4@
if and
0025: 14@ > 2@ // (float)
0025: 2@ > 13@ // (float)
4@ < 1330.1616
then
06DD: set_train 9@ speed 0.0
19@ = 3
jump @_8
end
0509: 2@ = distance_between_XY 1778.1157 -1955.7063 and_XY 3@ 4@
if and
0025: 14@ > 2@ // (float)
0025: 2@ > 13@ // (float)
3@ < 1778.1157
then
06DD: set_train 9@ speed 0.0
19@ = 3
jump @_8
end
0509: 2@ = distance_between_XY 841.0762 -1393.855 and_XY 3@ 4@
if and
0025: 14@ > 2@ // (float)
0025: 2@ > 13@ // (float)
3@ < 841.0762
then
06DD: set_train 9@ speed 0.0
19@ = 3
jump @_8
end
0509: 2@ = distance_between_XY -1946.4993 81.0843 and_XY 3@ 4@
if and
0025: 14@ > 2@ // (float)
0025: 2@ > 13@ // (float)
4@ > 81.0843
then
06DD: set_train 9@ speed 0.0
19@ = 3
end
:_8
if //-------------------------------------------------------------------------------------Назначение времени стоянки внутреннему поезду
056E: car 8@ defined
then
if and
18@ == 3
30@ == 1
01C1: car 8@ stopped
then
18@ = 4
0209: 16@ = random_int_in_ranges 15 21 // мин и макс время стоянки внутреннего поезда в секундах
16@ *= 1000
32@ = 0
end
end
if //-------------------------------------------------------------------------------------Назначение времени стоянки внешнему поезду
056E: car 9@ defined
then
if and
19@ == 3
31@ == 1
01C1: car 9@ stopped
then
19@ = 4
0209: 17@ = random_int_in_ranges 15 21 // мин и макс время стоянки внешнего поезда в секундах
17@ *= 1000
33@ = 0
end
end
if //---------------------------------------------------------------------------------------Отправление внутреннего поезда со станции
056E: car 8@ defined
then
car.StorePos(8@,0@,1@,2@)
if
056E: car 9@ defined // если внешний поезд существует (актуально на станции Йеллоубелл)
then
car.StorePos(9@,3@,4@,6@)
else
3@ = 0.0
4@ = 0.0
end
if 1@ < 2620.0 // Йеллоубелл - самая северная станция, эта координата показатель, что внутр.поезд находится там
then
if and
18@ == 4
30@ == 1
001D: 32@ > 16@ // (int) - время стоянки истекло
then
18@ = 2
06DD: set_train 8@ speed 33.33 // отправление со всех остальных станций
end
else
if and
18@ == 4
30@ == 1
001D: 32@ > 16@ // (int) - время стоянки истекло
3@ < 1425.0 // отправление с Йеллоубелл: если внеш.поезд существует и не покинул однопутку, внутр.поезд ожидает
then // для красного светофора условия аналогичные, поезд поедет только на зеленый
18@ = 2
06DD: set_train 8@ speed 33.33 // отправление с Йеллоубелл
end
end

end
if //-------------------------------------------------------------------------------------------Отправление внешнего поезда со станции
056E: car 9@ defined
then
car.StorePos(9@,0@,1@,2@)
if
056E: car 8@ defined
then
car.StorePos(8@,3@,4@,6@)
else
3@ = 0.0
4@ = 0.0
end
if 0@ < 2850.0 // Линден - самая восточная станция, эта координата показатель, что внеш.поезд находится там
then
if and
19@ == 4
31@ == 1
001D: 33@ > 17@ // (int) - время стоянки истекло
then
19@ = 2
06DD: set_train 9@ speed 33.33 // отправление со всех остальных станций
end
else
if and
19@ == 4
31@ == 1
001D: 33@ > 17@ // (int) - время стоянки истекло
4@ < 1865.0 // отправление с Линден: если внутр.поезд существует и не покинул однопутку, внеш.поезд ожидает
then // для красного светофора условия аналогичные, поезд поедет только на зеленый
19@ = 2
06DD: set_train 9@ speed 33.33 // отправление с Линден
end
end

end
if //---------------------------------------------------------------------------------------вход игрока в локомотив внутреннего поезда
056E: car 8@ defined
then
if and
not actor.InCar($PLAYER_ACTOR,8@)
0203: actor $PLAYER_ACTOR near_car 8@ radius 8.0 8.0 flag 0 on_foot
00E1: player 0 pressed_key 15
then
05CB: AS_actor $PLAYER_ACTOR enter_car 8@ as_driver -1 ms
end
end
if //-------------------------------------------------------------------------------------------вход игрока в локомотив внешнего поезда
056E: car 9@ defined
then
if and
not actor.InCar($PLAYER_ACTOR,9@)
0203: actor $PLAYER_ACTOR near_car 9@ radius 8.0 8.0 flag 0 on_foot
00E1: player 0 pressed_key 15
then
05CB: AS_actor $PLAYER_ACTOR enter_car 9@ as_driver -1 ms
end
end
if //------------------------------------------------------------------------------------ отключение автоведения для внутреннего поезда
056E: car 8@ defined
then
if and
30@ == 1
actor.InCar($PLAYER_ACTOR,8@)
09AE: actor $PLAYER_ACTOR driving_train // проверка на случай, если игрок является пассажиром поезда
then
30@ = 0
06DD: set_train 8@ speed 0.0 // чтобы поезд не уехал сам, когда игрок выйдет из кабины
end
end
if //---------------------------------------------------------------------------------------- отключение автоведения для внешнего поезда
056E: car 9@ defined
then
if and
31@ == 1
actor.InCar($PLAYER_ACTOR,9@)
09AE: actor $PLAYER_ACTOR driving_train // проверка на случай, если игрок является пассажиром поезда
then
31@ = 0
06DD: set_train 9@ speed 0.0 // чтобы поезд не уехал сам, когда игрок выйдет из кабины
end
end
if //--------------------------------------------------------------------------------------------------------удаление внутреннего поезда
056E: car 8@ defined
then
actor.StorePos($PLAYER_ACTOR,0@,1@,6@)
car.StorePos(8@,3@,4@,6@)
0509: 2@ = distance_between_XY 0@ 1@ and_XY 3@ 4@
if
2@ > 700.0 // если поезд удалился от игрока более, чем на 700 м
then
07BD: destroy_train 8@ // то удаляем поезд
30@ = 0
18@ = 0
end
end
if //-----------------------------------------------------------------------------------------------------------удаление внешнего поезда
056E: car 9@ defined
then
actor.StorePos($PLAYER_ACTOR,0@,1@,6@)
car.StorePos(9@,3@,4@,6@)
0509: 2@ = distance_between_XY 0@ 1@ and_XY 3@ 4@
if and
0@ > 900.0 // если игрок в районе однопутных участков
1@ > 2000.0
then
if or
0025: 3@ > 0@ // условия, при которых поезд можно считать удаляющимся от игрока и удалять, если расстояние станет больше 700 м
3@ > 2430.0
then
if
2@ > 1400.0 // если поезд создался на большом расстоянии от игрока
then // (подходящее место на двухпутке может быть намного дальше 700м), чтобы сразу же не исчез
07BD: destroy_train 9@
31@ = 0
19@ = 0
end
else
if
2@ > 700.0 // если поезд удалился от игрока более, чем на 700 м
then
07BD: destroy_train 9@ // то удаляем поезд
31@ = 0
19@ = 0
end
end
else
if
2@ > 700.0 // если поезд удалился от игрока более, чем на 700 м
then
07BD: destroy_train 9@ // то удаляем поезд
31@ = 0
19@ = 0
end
end
end
if //------------------------------------------------------------------запись указателя на внутренний поезд в общедоступную ячейку памяти
056E: car 8@ defined
then
7@ = -382076
0085: &0(7@,1i) = 8@ // (int) - записываем в память указатель на поезд для синхронизации с другими ж д скриптами
end
if //---------------------------------------------------------------------запись указателя на внешний поезд в общедоступную ячейку памяти
056E: car 9@ defined
then
7@ = -382075
0085: &0(7@,1i) = 9@ // (int) - записываем в память указатель на поезд для синхронизации с другими ж д скриптами
end
end


Настройки файлов tllgs.ide, gta.dat, tracks2.dat, tracks4.dat и модели светофоров можно использовать с оригинального скрипта.




#2242417 Авторынок "Avant Авто"

Автор: Synthwave85 на 15 Январь 2019 - 17:11

Глендеил ,Гринвуд и Гермеса и Энфорсер!

Так на первые три вроде уже есть достойные замены:

 

https://gta.com.ua/f...s.phtml?id=9220 - Glendale + Glenshit (в списке для карпака кстати до сих пор нет, а зря)

http://gta.com.ua/fo...=3241&p=2240371 - Greenwood

http://gta.com.ua/fo...=3241&p=2241180 - Hermes

 

Вон с Enforcer"ом да, печаль


  • Roma-K нравится это


#2242394 Mad Driver's General Showroom [NFS/FM4/DSF|WIP|GTA]

Автор: Synthwave85 на 14 Январь 2019 - 10:40

Все открывается, задняя дверь открывается при помощи скрипта от kenking'a "Van-Door" - пока что смотрится кривовато, но к релизу все будет настроено. 

В целом, я начал заниматься этой моделью исключительно ради того, чтобы закрыть себе позицию Journey альтернативной заменой.

Если при виде издалека одна из половинок задней двери будет пропадать (как в случае с GMC Suburban, и флагом IS_VAN это не поправляется), то лучше сделать 2 варианта и пусть в одном из них дверь будет открываться не совсем правильно или будет открываться только 1 половинка, но не будет пропадать. А то идея с 7 компонентами получилась хорошая, но движок игры все портит.

Journey вроде как 2-местная машина считается в игре, может лучше его на Moonbeam или Perennial?




#2240494 StratenSurf/533's Projects

Автор: Synthwave85 на 18 Август 2018 - 18:08

В общем, возможно ли сделать покраску в два цвета в Трансфендере/любом другом гараже?

 

А разве это не в .exe прописано, какие из моделей красятся в 2 (или даже 4) цвета в тюнинг-гаражах? Самому очень хочется такой скрипт, чтобы все машины окрашивались во все свои цвета в гаражах, но тот что имеется, позволяет перекрашивать машины где угодно прямо на улице и бесплатно, что не совсем труъ...




#2240214 Авторынок "Avant Авто"

Автор: Synthwave85 на 30 Июль 2018 - 19:34

К нас поступил в продажу старенький, но верный Ford F-100 1956 V8.

 

Машинка очень классная, а тюнинга и гидравлики не будет? Для замены Slamvan? Или планируется скорее на Walton или Sadler?




#2237991 StratenSurf/533's Projects

Автор: Synthwave85 на 29 Март 2018 - 19:11

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

attachicon.gif gallery2297.jpg

А универсал с фарами и решеткой 1986 года для Вайса никак не реально?




#2237563 Mad Driver's General Showroom [NFS/FM4/DSF|WIP|GTA]

Автор: Synthwave85 на 07 Март 2018 - 21:12

В качестве бонуса, для особых любителей будет версия покраски из Vice City Stiories:

 

 

А нельзя ли тогда огонь оставить текстурой, а серый или черный основной цвет сделать задаваемым через carcols?


Жыыыр!!! (Я про кубанский гермес)))

 

Что да то да, после релиза Гермес+Кубинский можно будет возобновлять тему про карпак для Вайса!




#2237367 StratenSurf/533's Projects

Автор: Synthwave85 на 27 Февраль 2018 - 19:08

версия vcpd будет?

Тогда еще и такси хочется... Но явно не brougham, а обычную.


  • Human нравится это


#2236822 GTA 6 - новости, обсуждения, пожелания

Автор: Synthwave85 на 06 Февраль 2018 - 20:15

Очень хочу сюжет GTA 6 в эпоху 80-х или первой половины 90-х независимо от локации!




#2236299 Stratumx' vehicles

Автор: Synthwave85 на 15 Январь 2018 - 16:08

Круто, давно ждем! Будет только used-версия или в идеальном состоянии тоже? Можно было бы добавить экстрой боковые сидения в задней части кузова для реализма посадки пассажиров. И заодно аналогичный пикап нет планов сделать с IVF?




#2234463 Дополнительные компоненты

Автор: Synthwave85 на 30 Октябрь 2017 - 20:09

Значит оранжевые проблесковые маячки на спецтранспорте (towtruck, utility, sweeper и т.д.) реализуемы со всеми 2dfx-эффектами? Хочется, чтобы они были включаемые и отключаемые клавишей, как и полицейские (можно той же, можно другой), но чтобы остальные участники движения не были должны уступать дорогу. В трафике чтобы встречались как включенные, так и отключенные.




#2234157 Дополнительные компоненты

Автор: Synthwave85 на 14 Октябрь 2017 - 16:42

Ну круто вообще. 

А 8 поворотников - запас под Икарус 280?  :troll:

 

Раз уж пошли такие предположения, логичнее сначала спросить - вообще реально в GTA 3 и Vice City сделать прицепы как в SA?




#2233394 StratenSurf/533's Projects

Автор: Synthwave85 на 02 Сентябрь 2017 - 23:53

Могу предложить поставить для разнообразия вот такие диски (Alloy wheel), как мне кажется они более подходят для гражданской версии.

 

Если уж зашла речь о дисках, то хотелось бы и такси в 2-х версиях - с дисками (как вариант - с такими как на старой доброй модели от SPC) и без (как на твоем скрине). И полицейскую версию LSPD также и 1991/1992 годов (можно и с дисками как на твоей модели для LVMPD и как на старой модели LSPD), все-таки тру-замена, а рестайл 1994 года слегка анахронизм (хоть ничего против это модели не имею)...


  • DEALER нравится это


#2232929 Модификации для GTA: San Andreas

Автор: Synthwave85 на 09 Август 2017 - 20:39

 
Что понравилось:
1. Плагин распространяется на сдвижные двери микроавтобусов (проверял только с Boxville-подобными, со средними боковыми не пробовал).
2. Поврежденные компоненты после открытия и закрытия остаются поврежденными, а не восстанавливаются волшебным образом.
3. После выхода Карла из машины все компоненты могут оставаться открытыми.
 
Вопросы:
1. Распространяется ли плагин на все компоненты возможных универсалов или внедорожников, у которых есть 7 компонентов (4 двери + двойная задняя твоим же скриптом)? Хотя бы по нажатии F12?
2. Распространяется ли на двери автобусов (не проверял - сейчас не стоят такие модели)?
3. Если бы в теории был бы прицеп или полуприцеп с рабочими задними дверями (хз, реально ли такое вообще) - можно ли сидя в тягаче, по нажатии F12, открыть и двери прицепа тоже? Для автобусов-гармошек с рабочими дверями 2-й секции тоже актуально.
4. Если во время миссии захватить машину с заблокированными дверями, убив водителя, как поведет себя плагин?