Скрипт сценария
|
|
Добрый | Дата: Суббота, 13.10.2018, 20:40 | Сообщение # 166 |
Чеширский кот
Группа: администраторы
Сообщений: 3524
Статус: Offline
| for (is=7;is<8;++is)sostav[is]=GetAsset().LookupKUIDTable(175); Это бессмысленный цикл. Для добавления значения в одну ячейку достаточно sostav[8]=GetAsset().LookupKUIDTable(175); При этом не важно, была ли ранее заполнена ячейка: при установке состава на рельсы будет иметь значение то число, которое попало в ячейку последним. Из чисто практического соображения лучше все циклы начинать так for (is=sostav.size()+1; ....
Intel Core i5 11400; B560M Pro4; IRDM Pro 4000 МГц/16 Гб; GeForce RTX 3060 OC
|
|
| |
РыцарьРР | Дата: Воскресенье, 14.10.2018, 13:54 | Сообщение # 167 |
Группа: проверенные
Сообщений: 290
Статус: Offline
| Цитата sostav[8]=GetAsset().LookupKUIDTable(175) Т.е., если я правильно понял, так должна выглядеть строка, если вагон едет одиночкой. Теперь остаётся вопрос, можно ли как-то по-другому записать, что по несколько вагонов едет в начале, в середине и в конце, а то ведь общее количество строк увеличивается и, в будущем, мне труднее будет найти нужную строку, если, например, ты порекомендуешь что-то изменить в ней...
|
|
| |
Добрый | Дата: Воскресенье, 14.10.2018, 14:29 | Сообщение # 168 |
Чеширский кот
Группа: администраторы
Сообщений: 3524
Статус: Offline
| Да, это один вагон. Если тебе надо несколько, требуется цикл. Если требуется несколько вагонов по два-три раза, нужно запускать и два-три цикла. В данном случае состав - ещё не поезд, т.е. можно сколько угодно менять содержимое ячеек массива. Поездом он станет после World.CreateTrain(sostav,mark,true). По-другому вряд ли получится, к тому же количество строк - это не проблема. Если тебе сложно искать строки блокнотом, пользуйся программой Syn2 , там можно выбрать лексер SQL, он подсветит скрипт так, что будет удобно работать.
Intel Core i5 11400; B560M Pro4; IRDM Pro 4000 МГц/16 Гб; GeForce RTX 3060 OC
|
|
| |
РыцарьРР | Дата: Воскресенье, 14.10.2018, 16:16 | Сообщение # 169 |
Группа: проверенные
Сообщений: 290
Статус: Offline
| епрст... без расшифровки никак не получается уловить закономерность изменений в скрипте... Хочется изменить составность, сохраняя общее количестуво вагонов, а получается
|
|
| |
Добрый | Дата: Воскресенье, 14.10.2018, 17:18 | Сообщение # 170 |
Чеширский кот
Группа: администраторы
Сообщений: 3524
Статус: 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 - плацкарт.
Intel Core i5 11400; B560M Pro4; IRDM Pro 4000 МГц/16 Гб; GeForce RTX 3060 OC
|
|
| |
РыцарьРР | Дата: Воскресенье, 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); } Теперь осталось разобраться со случайным разворотов вагонов и будет классическая составность ПДС.
Сообщение отредактировал РыцарьРР - Воскресенье, 14.10.2018, 18:21 |
|
| |
Добрый | Дата: Воскресенье, 14.10.2018, 18:38 | Сообщение # 173 |
Чеширский кот
Группа: администраторы
Сообщений: 3524
Статус: Offline
| РыцарьРР, да, именно так. Случайный разворот вагонов можно делать только в поезде, то есть, после команды Mytrain=World.CreateTrain(sostav,mark,true); можно прописать примерно так: for (is=2; is<14; ++is) if (Math.Rand(0,10)>5) Mytrain.GetVehicles()[is].Reverse();
Intel Core i5 11400; B560M Pro4; IRDM Pro 4000 МГц/16 Гб; GeForce RTX 3060 OC
|
|
| |
РыцарьРР | Дата: Воскресенье, 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 |
Чеширский кот
Группа: администраторы
Сообщений: 3524
Статус: Offline
| РыцарьРР, в строке 4136, там создаётся любой выбранный состав. Чтобы можно было разворачивать вагоны в любом составе, лушьче написать так: for (is=2; is<sostav.size(); ++is) if (Math.Rand(0,10)>5) Mytrain.GetVehicles()[is].Reverse();
Intel Core i5 11400; B560M Pro4; IRDM Pro 4000 МГц/16 Гб; GeForce RTX 3060 OC
|
|
| |
РыцарьРР | Дата: Понедельник, 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 |
Чеширский кот
Группа: администраторы
Сообщений: 3524
Статус: 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, в других поездах скрипт будет вылетать с ошибкой.
Intel Core i5 11400; B560M Pro4; IRDM Pro 4000 МГц/16 Гб; GeForce RTX 3060 OC
|
|
| |
РыцарьРР | Дата: Понедельник, 15.10.2018, 17:31 | Сообщение # 178 |
Группа: проверенные
Сообщений: 290
Статус: Offline
| Но это же вроде только для 870 поезда...
Ну вроде всё заработало... 2 вагона развернулись...
Сообщение отредактировал РыцарьРР - Понедельник, 15.10.2018, 17:38 |
|
| |
Добрый | Дата: Понедельник, 15.10.2018, 17:39 | Сообщение # 179 |
Чеширский кот
Группа: администраторы
Сообщений: 3524
Статус: Offline
| РыцарьРР, нет, это для всех, кроме 870: "!=" - знак "не равно".
Intel Core i5 11400; B560M Pro4; IRDM Pro 4000 МГц/16 Гб; GeForce RTX 3060 OC
|
|
| |
РыцарьРР | Дата: Понедельник, 15.10.2018, 17:47 | Сообщение # 180 |
Группа: проверенные
Сообщений: 290
Статус: Offline
| Цитата "!=" - знак "не равно". Тоже урок!
PS Ковыряясь в скрипте, я будто учусь говорить, а буква "Р" не поддаётся...
|
|
| |