Форум создан в 2008 году
[ Главная ] [ Скрипт сценария - Страница 12 - FORUM ] [ Регистрация ] [ Вход ]
· Понедельник, 23.12.2024, 03:06 · Вы вошли как Гость Новые сообщения · Участники · Правила форума · Поиск ·
Скрипт сценария
ДобрыйДата: Суббота, 13.10.2018, 20:40 | Сообщение # 166
Чеширский кот
Группа: администраторы
Сообщений: 3533
Статус: Offline
for (is=7;is<8;++is)sostav[is]=GetAsset().LookupKUIDTable(175);
Это бессмысленный цикл. Для добавления значения в одну ячейку достаточно
sostav[8]=GetAsset().LookupKUIDTable(175);
При этом не важно, была ли ранее заполнена ячейка: при установке состава на рельсы будет иметь значение то число, которое попало в ячейку последним.
Из чисто практического соображения лучше все циклы начинать так
for (is=sostav.size()+1; ....
 
РыцарьРРДата: Воскресенье, 14.10.2018, 13:54 | Сообщение # 167
Группа: проверенные
Сообщений: 290
Статус: Offline

Цитата
sostav[8]=GetAsset().LookupKUIDTable(175)
Т.е., если я правильно понял, так должна выглядеть строка, если вагон едет одиночкой. Теперь остаётся вопрос, можно ли как-то по-другому записать, что по несколько вагонов едет в начале, в середине и в конце, а то ведь общее количество строк увеличивается и, в будущем, мне труднее будет найти нужную строку, если, например, ты порекомендуешь что-то изменить в ней...
 
ДобрыйДата: Воскресенье, 14.10.2018, 14:29 | Сообщение # 168
Чеширский кот
Группа: администраторы
Сообщений: 3533
Статус: Offline
Да, это один вагон. Если тебе надо несколько, требуется цикл. Если требуется несколько вагонов по два-три раза, нужно запускать и два-три цикла.
В данном случае состав - ещё не поезд, т.е. можно сколько угодно менять содержимое ячеек массива. Поездом он станет после World.CreateTrain(sostav,mark,true).
По-другому вряд ли получится, к тому же количество строк - это не проблема. Если тебе сложно искать строки блокнотом, пользуйся программой Syn2 , там можно выбрать лексер SQL, он подсветит скрипт так, что будет удобно работать.
 
РыцарьРРДата: Воскресенье, 14.10.2018, 16:16 | Сообщение # 169
Группа: проверенные
Сообщений: 290
Статус: Offline
епрст... без расшифровки никак не получается уловить закономерность изменений в скрипте... Хочется изменить составность, сохраняя общее количестуво вагонов, а получается
Прикрепления: 0685401.jpg (425.6 Kb)
 
ДобрыйДата: Воскресенье, 14.10.2018, 17:18 | Сообщение # 170
Чеширский кот
Группа: администраторы
Сообщений: 3533
Статус: Offline
Если хочется поставить купейные внутри среди плацкартных, можно так:
   for (is=sostav.size()+1; is<14; ++is) sostav[is]=GetAsset().LookupKUIDTable(216); // сначала все вагоны плацкартные     
   for (is=5; is<10; ++is) sostav[is]=GetAsset().LookupKUIDTable(215); // теперь с 5 по 10 будут купейные
В kuid-table конфига 215 вагон - это купе, 216 - плацкарт.
 
РыцарьРРДата: Воскресенье, 14.10.2018, 18:00 | Сообщение # 171
Группа: проверенные
Сообщений: 290
Статус: Offline
А ресторан просто добавить внизу, ранее предложенным тобой способом?
 
РыцарьРРДата: Воскресенье, 14.10.2018, 18:20 | Сообщение # 172
Группа: проверенные
Сообщений: 290
Статус: Offline
Кажется, уловил:
Если я правильно понял, то сначала нужно указать общее количество вагонов, а потом вставлять другие вагоны.
Результат на скрине получился, когда я сделал так:            
Цитата
if (np==98) {                                                      // пассажирский
for (is=sostav.size()+1; is<14; ++is) sostav[is]=GetAsset().LookupKUIDTable(216);
for (is=6; is<11; ++is) sostav[is]=GetAsset().LookupKUIDTable(215);
sostav[8]=GetAsset().LookupKUIDTable(175);
sostav[14]=GetAsset().LookupKUIDTable(176);
}
Теперь осталось разобраться со случайным разворотов вагонов и будет классическая составность ПДС.
Прикрепления: 9987480.jpg (382.8 Kb)


Сообщение отредактировал РыцарьРР - Воскресенье, 14.10.2018, 18:21
 
ДобрыйДата: Воскресенье, 14.10.2018, 18:38 | Сообщение # 173
Чеширский кот
Группа: администраторы
Сообщений: 3533
Статус: Offline
РыцарьРР, да, именно так. Случайный разворот вагонов можно делать только в поезде, то есть, после команды
    Mytrain=World.CreateTrain(sostav,mark,true);
можно прописать примерно так:
   for (is=2; is<14; ++is)  if (Math.Rand(0,10)>5)  Mytrain.GetVehicles()[is].Reverse();
 
РыцарьРРДата: Воскресенье, 14.10.2018, 18:42 | Сообщение # 174
Группа: проверенные
Сообщений: 290
Статус: Offline

Цитата
Mytrain=World.CreateTrain(sostav,mark,true);
Что-то я не нашёл такого для 98-го...

Попробовал на 616-м. Вроде получилось...


Сообщение отредактировал РыцарьРР - Воскресенье, 14.10.2018, 18:54
 
ДобрыйДата: Воскресенье, 14.10.2018, 21:28 | Сообщение # 175
Чеширский кот
Группа: администраторы
Сообщений: 3533
Статус: Offline
РыцарьРР, в строке 4136, там создаётся любой выбранный состав. Чтобы можно было разворачивать вагоны в любом составе, лушьче написать так:
     for (is=2; is<sostav.size(); ++is)  if (Math.Rand(0,10)>5)  Mytrain.GetVehicles()[is].Reverse();
 
РыцарьРРДата: Понедельник, 15.10.2018, 10:27 | Сообщение # 176
Группа: проверенные
Сообщений: 290
Статус: Offline
Не пойму, где я напортачил... Сделал так:
           
Цитата
if (np==98) {                                                      // пассажирский
for (is=sostav.size()+1; is<14; ++is) sostav[is]=GetAsset().LookupKUIDTable(216);
for (is=6; is<11; ++is) sostav[is]=GetAsset().LookupKUIDTable(215); sostav[8]=GetAsset().LookupKUIDTable(175); sostav[14]=GetAsset().LookupKUIDTable(176);
Mytrain=World.CreateTrain(sostav,mark,true); for (is=2; is<14; ++is)  if (Math.Rand(0,10)>5)  Mytrain.GetVehicles()[is].Reverse();
}

После загрузки 98-го в сценарии, жалуется на строку 1194, где у меня записано так:

Цитата
bool[] stand = new bool[24]; for (it=1; it<24; ++it) stand[it]=true;   strTable = GetAsset().GetStringTable();
А по факту - поезд загрузился такой, как я хотел, но в него не сел машинист.


Сообщение отредактировал РыцарьРР - Понедельник, 15.10.2018, 10:36
 
ДобрыйДата: Понедельник, 15.10.2018, 13:47 | Сообщение # 177
Чеширский кот
Группа: администраторы
Сообщений: 3533
Статус: Offline
РыцарьРР, жалуется на первую строку нити, в которой у тебя ошибка.
Mytrain=World.CreateTrain(sostav,mark,true); for (is=2; is<14; ++is)  if (Math.Rand(0,10)>5)  Mytrain.GetVehicles()[is].Reverse();
Это лишнее, написано не в том месте. В строке 4136 задаётся превращение любого состава игрока в поезд (второе выражение):
Interface.Print ("train "+np+" on "+mark); if (np!=870) Mytrain=World.CreateTrain(sostav,mark,true);
Сделай строку такой

if (np!=870) {Mytrain=World.CreateTrain(sostav,mark,true); for (is=2; is<sostav.size(); ++is)  if (Math.Rand(0,10)>5)  Mytrain.GetVehicles()[is].Reverse(); }
Нужно именно так, поскольку в других составах вагонов меньше и если задать границу цикла is<14, в других поездах скрипт будет вылетать с ошибкой.
 
РыцарьРРДата: Понедельник, 15.10.2018, 17:31 | Сообщение # 178
Группа: проверенные
Сообщений: 290
Статус: Offline
Но это же вроде только для 870 поезда...

Ну вроде всё заработало... 2 вагона развернулись...


Сообщение отредактировал РыцарьРР - Понедельник, 15.10.2018, 17:38
 
ДобрыйДата: Понедельник, 15.10.2018, 17:39 | Сообщение # 179
Чеширский кот
Группа: администраторы
Сообщений: 3533
Статус: Offline
РыцарьРР, нет, это для всех, кроме 870: "!=" - знак "не равно".
 
РыцарьРРДата: Понедельник, 15.10.2018, 17:47 | Сообщение # 180
Группа: проверенные
Сообщений: 290
Статус: Offline

Цитата
"!=" - знак "не равно".
 Тоже урок!

PS Ковыряясь в скрипте, я будто учусь говорить, а буква "Р" не поддаётся...
 
Поиск:

Copyright Dobryi © 2024