ВНИМАНИЕ! Наша конференция посвящена космической тематике и компьютерным играм. Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!
|
» Скрипт-школа (Задачи для начинающих скриптописателей) | страница 1 |
|
|
|
Канал X3: Reunion »
Модовый и скриптовый отсек X3: Reunion: «Скрипт-школа (Задачи для начинающих скриптописателей)» |
|
Нужна ли школа скриптописателей |
Да. чем нас больше, тем игра веселее |
|
95% |
[ 65 ] |
Нет, развелось вас. |
|
4% |
[ 3 ] |
|
Всего проголосовало : 68 |
|
|
|
Else
140 EGP
  Рейтинг канала: 3(26) Репутация: 29 Сообщения: 313 Откуда: Тверская обл. Зарегистрирован: 08.11.2007
 |
|
В данной теме предлагаю опытным скриптописателям давать задания начинающим. В настоящий момент предлагаю два типа заданий:
1) Есть ситуация с конкретными условиями, надо написать скрипт (или фрагмент скрипта) отрабатывающий эту ситуацию. Первое задание этого типа см ниже. Срок выполнения задания неделя (многие не могут сразу сесть за Х3, а только в выходные)
2) Скриптописатель вылаживает кусок кода до 100 строк. Вопрос: что делается в скрипте? Что должно получится? Срок ответа два дня.
Возможны други типы заданий на усмотрение скриптописателей.
Сложность заданий оценивается в 5-бальной системе.
Ситуация №1. Сложность 1
Корабль подбирает в космосе контейнер с космотопливом, в нем оказывается чужой, который постепенно ломает корабль.
Скрипт должен
1) Создать на ваш выбор любой корабль класса TS
2) Создать контейнер с топливом в космосе рядом с кораблем.
3) Поместить контейнер в трюм корабля
4) Через 20 сек хул корабля должен уменьшатся на одну единицу за 1 сек.
5) В конце концов хул станет равным 10 единицам
6) Небольшие добавления, но неизменения условий скрипта приветствуются.
Выкладываю задания которые уже были заданны в данной теме, для тех кто присоеденился к теме позже
1)AlexVar, "Чужой", сложность 3-4, страница 1
Cкрытый текст (кликните здесь для просмотра)
1) Послать сообщение игроку "Подлетите к Аргонской ТС в секторе Дом Света ближе 1 км".
2) Установить локальную переменную корабля 'test001.AlienExist' в 1.
3) Запустить процесс "поедания" корпуса. При значении корпуса равном нулу - уничтожить корабль.
4) Прислать сообщение игроку, что для дезинфекции корабля ему необходимо пристыковаться к ШК Терракорп.
5) В момент стыковки игрока к станции остановить процесс "поедания" и установить лок.переменную в 0.
6) Через 5 секунд прислать сообшение игроку "Дезинфекция проведена успешно".
Сложность около 2-ух, дерзайте
|
2)Andrei(<>Ace), "Термиты", сложность 3-4, страница 3
Cкрытый текст (кликните здесь для просмотра)
История: Использование Сплитами в промышленности мух Маркуса, а также увеличивающиеся разработки астероидов, непосредственных мест обитания мух, привело к сокращению популяции этих прекрасных созданий, живущих в пустоте глубокого космоса. Ученые Гильдии, основанной для защиты мух Маркуса, обеспокоенные возможностью исчезновения ценного вида космической фауны, оберегаемого всеми расами, стали искать и исследовать места обитания мух. Пробовали создавать новые места обитания и переселять туда целые рои мух. Влеченные благими намерениями, сами того не подозревая, они стали распространителями нового вида существ, обитавшем по соседству с мухами. Биомеханические термиты быстро извлекли свою выгоду и распространились по вселенной на кораблях ученых и вездесущих пиратов. В отличие от мух, термиты оказались совсем не дружелюбными. В поиске и пополнении энергетических запасов своей колонии, они проникали на корабли и начинали разрушать корпус и оборудование. Обнаружив и исследовав новую угрозу, ученые установили, что термитами движут законы колонии. На корабли, которые оказались в непосредственной близости от астероида, или скопления астероидов, заселенных колонией термитов, нападают рабочие термиты, движимые основным инстинктом – добыть необходимый ресурс. Термиты могут покидать астероид и перемещаться в космосе на некоторое, незначительное, по космическим меркам, расстояние. Атакованный термитами корабль получает повреждения корпуса и оборудования. Даже не имея возможности переправить добытое, термиты будут следовать инстинкту, продолжая разрушать.
Страшно? Не пугайтесь – реализовать элементарно .
Если не испугались – обговорим задание.
Задание: пока только для корабля игрока. Это будет наглядно. Делаем по частям. Где какие части думаю уже определитесь.
Условие: Никаких процентов и установленных жестко временных, дистанционных параметров.
1. Определяем расстояния корабля относительно любого астероида или обломков астероида (учитывайте размер астероида или дебриса). Пеленгуем раз в 5000-60000мс. Меньше 5000 не будем, нагружать движок не нужно.
2. При расстоянии 0м и не более 2000м. (чем ближе тем вероятность заражения больше) начинаем заражать корабль.
3. Интенсивность заражения (количество термитов попавших на корабль – сколько угодно) зависит от времени пребывания корабля в опасной близости от астероида.
4. Количество повреждений одним термитом 0-5единиц корпуса. Оборудования по желанию.
5. Время полного уничтожения корабля – по желанию.
6. Заражение заканчивается после стыковки корабля с верфью или доком оборудования (если пожелаете - торговой станцией).
7. За время полета корабля к станции можно учесть уменьшение интенсивности заражения (погиб при КЗ, выпал и т.д.).
8. Приветствуются скрипты с минимальным количеством строк.
|
3)Andrei(<>Ace), "Миноукладчик", сложность 4-5, страница 7
Cкрытый текст (кликните здесь для просмотра)
История:
. Жил один Телади, звали его Винтопопус V. Как и все Телади, он не ощущал всей полноты жизни, если не совершал грандиозной сделки. А как его убивала, морально, потеря какого-нибудь корабля или контейнера с бесценным товаром при пиратском нападении, трудно даже представить.
. Но Винтопопус V не обделен был умом и создал небольшое, но дорогое устройство - миносбрасыватель. Миносбрасыватель встраивается в турель и использует ее устройство в своей работе. В качестве боеприпаса применяется мина Сквош. В мине заменяется система инициирования: с сенсорной на таймерную. На время установки миносбрасывателя, другое вооружение из турели удаляется.
. Винтопопус V настолько приноровился к своему устройству, что на своем немного тюненгованном корабле «Shishvamdam» (Falconе Sentinel, форсирование двигателя – 20, оптимизация рулевого управления – 15) и небольшой группе поддержки, проводил свои конвои через пиратские секторы, а по неподтвержденным слухам и ксенонские) без потерь.
Но пираты, просто возмущенные такой дерзостью, а еще больше – потерями, устроили засаду. Чем закончился бой, толком никто не знает, но и Винтопопус V исчез вместе со своим конвоем. Некоторые пилоты рассказывали, что в секторе «Убежище Ми Тона», в восточной его части, среди мин Сквош, покоится полуразрушенный Falconе.
Задание:
1. В качестве устройства (Кто воображением не обделен – придумайте название) используем шаблон товара SS_WARE_SW_NEW15.
2. Для настройки таймера и активизации устройства - COMMAND_TYPE_SPECIAL_20
3. Пример и имя языкового файла - xx4000.xml
xx4000.xml (кликните здесь для просмотра)
4. Зарезервировать клавишу для выброса мин.
5. Реализовать и приукрасить задание .
|
Последний раз редактировалось: Else (08:47 13-12-2007), всего редактировалось 3 раз(а) |
|
|
void_main(){}
77 EGP
 Репутация: 15 Сообщения: 165 Откуда: Планета Земля Зарегистрирован: 04.12.2006
 |
|
Поддерживаю. Начинающим скриптоцарапателям, к коим отношусь и я, будет полезно повыполнять такие примеры, не очень сложные, но достаточно хорошо иллюстрирущие принципы работы скриптов.
Теперче небольшой вопрос по собственно вопросу Вот этот вот момент меня смущает:
Else : |
2) Создать контейнер с топливом в космосе рядом с кораблем.
3) Поместить контейнер в трюм корабля
|
это нада два разных скрипта написать или вставить таймер между двумя коммандами, ибо выполняться они практически сразу и никто топливо не увидит в космосе.
Else : |
4) Через 20 сек хул корабля должен уменьшатся на одну единицу за 1 сек.
5) В конце концов хул станет равным 10 единицам
|
Это после запуска скрипта через двадцать секунд? или после того как топливо в трюм подберется? Можно сделать условие.
Могу добавить пункт, между 3 и 4: игроку отсылается сообщение, что подобран не космотопливо, а чужой
_________________ Последний раз редактировалось: void_main(){} (14:20 07-05-2011), всего редактировалось 5376209 раз
Последний раз редактировалось: void_main(){} (17:23 22-11-2007), всего редактировалось 1 раз |
|
|
Else
140 EGP
  Рейтинг канала: 3(26) Репутация: 29 Сообщения: 313 Откуда: Тверская обл. Зарегистрирован: 08.11.2007
 |
|
Void, ваши замечания правильны, но никто не заставляет писать вас полноценный скрипт, поэтому эти команды на ваши усмотрения, они только улучшат скрипт скрипт
по пункту 4) после подбора контейнера, типа монстрик должен очухатся.
Да никто не мешает выкладывать свои примеры и вам, я и возможно другие чайники с удовольствием попробуем их выполнить.
_________________ Интересно, а пить водку в полночь, считается после работы или до? |
|
|
AlexYar
1916 EGP
               Рейтинг канала: 13(2096) Репутация: 325 Сообщения: 32763
Зарегистрирован: 26.10.2003
 |
|
Сложность данного примера явно не 1, а где-то около 3-4
Предлагаю немного упростить задачу и упорядочить.
Игрок подлетает к Аргонской Торговой Станции в Доме Света на дистанцию ближе 1000 метров, в его трюме оказывается чужой, который постепенно ломает корабль.
Пояснения: чужой - это не товар, а "виртуальное понятие", т.е. о том, что он есть на корабле, можно судить только по ломающемуся корпусу.
Скрипт должен:
1) Послать сообщение игроку "Подлетите к Аргонской ТС в секторе Дом Света ближе 1 км".
2) Установить локальную переменную корабля 'test001.AlienExist' в 1.
3) Запустить процесс "поедания" корпуса. При значении корпуса равном нулу - уничтожить корабль.
4) Прислать сообщение игроку, что для дезинфекции корабля ему необходимо пристыковаться к ШК Терракорп.
5) В момент стыковки игрока к станции остановить процесс "поедания" и установить лок.переменную в 0.
6) Через 5 секунд прислать сообшение игроку "Дезинфекция проведена успешно".
Сложность около 2-ух, дерзайте
|
|
|
DizzY
60 EGP
 Репутация: 4 Сообщения: 103
Зарегистрирован: 09.07.2007
 |
|
Цитата: |
«Скрипт-школа (Задачи для начинающих скриптописателей)»
|
Ээээээ... а для совсем начинающих - чего курить начинать? Ткните, плз в самые начала
А то мысли кой-какие есть, алгоритм тож дело знакомое, а вот момент реализации пока...
|
|
|
Lars
440 EGP
    Рейтинг канала: 1(5) Репутация: 77 Сообщения: 2450 Откуда: Архангельск Зарегистрирован: 28.03.2007
 |
|
DizzY : |
А то мысли кой-какие есть, алгоритм тож дело знакомое, а вот момент реализации пока...
|
А ты попробуй реализовать часть скрипта, например "поедание" корпуса.
_________________ "Мозги... нам нужны мозги!"(с) "Живые мертвецы" |
|
|
Proteus
88 EGP
  Рейтинг канала: 5(113) Репутация: 35 Сообщения: 443 Откуда: Латвия Зарегистрирован: 17.03.2007
 |
|
Lars : |
А ты попробуй реализовать часть скрипта, например "поедание" корпуса.
|
Лично для меня это "поедание" самое сложное все остальные пункты я вроде решил.
А обсуждение заданий в этой теме вести можно или только задание-ответ?
То что AlexYar предложил это для меня вообще пушной зверёк(в смысле писец).
_________________ На пыльных тропинках далёких планет останутся наши мозги.
Последний раз редактировалось: Proteus (19:36 23-11-2007), всего редактировалось 1 раз |
|
|
Lars
440 EGP
    Рейтинг канала: 1(5) Репутация: 77 Сообщения: 2450 Откуда: Архангельск Зарегистрирован: 28.03.2007
 |
|
Proteus : |
Лично для меня это "поедание" самое сложное все остальные пункты я вроде решил.
|
Для меня все ноборот, возможно из-за того что обычным программированием часто занимаюсь.
Код "поедания" корпуса:
Код: |
001 $ship= get player ship
002 $hull=$ship -> get hull
003 while$hull > 0
004 inc $hull=
005 @ =wait 1000 ms
006 end
007 $ship -> destruct: show no explosion=[TRUE]
008 return null
|
Вместо $ship= get player ship можно использовать константу [PLAYERSHIP]
И еще почему-то графически убывание худа ни где не отображается, просто через некоторое время, когда хулл кончается, корабль взлетает на воздух, почему так происходит?
_________________ "Мозги... нам нужны мозги!"(с) "Живые мертвецы"
Последний раз редактировалось: Lars (21:38 23-11-2007), всего редактировалось 1 раз |
|
|
Expert
423 EGP
     Рейтинг канала: 9(1073) Репутация: 154 Сообщения: 533 Откуда: Златоуст, Южный Урал Зарегистрирован: 15.08.2004
 |
|
Lars : |
Код "поедания" корпуса:
Код: |
001 $ship= get player ship
002 $hull=$ship -> get hull
003 while$hull > 0
004 inc $hull=
005 @ =wait 1000 ms
006 end
007 $ship -> destruct: show no explosion=[TRUE]
008 return null
|
Вместо $ship= get player ship можно использовать константу [PLAYERSHIP]
И еще почему-то графически убывание худа ни где не отображается, просто через некоторое время, когда хулл кончается, корабль взлетает на воздух, почему так происходит?
|
А где реальное разрушение кузова?
Я вижу только "неправильный" счётчик $hull.
Добавлено:
Кстати, одна единица хулла для бигшипа вообще почти ничего не значит.
Такой корпус будет разрушаться оооочень долго
Предлагаю снимать по 1% в секунду!
Получается, что игрок должен успеть состыковаться с ШК Терракорп за 100 секунд, иначе "The End"
Прикольная темка получается.
Жаль будет, если закроют.
Последний раз редактировалось: Expert (23:21 23-11-2007), всего редактировалось 2 раз(а) |
|
|
Proteus
88 EGP
  Рейтинг канала: 5(113) Репутация: 35 Сообщения: 443 Откуда: Латвия Зарегистрирован: 17.03.2007
 |
|
Вы только не смейтесь я в програмировании вообше мало что понимаю,все мой познания ограничиваются копанием в "Скрипты- это легко", "Справочнике по скриптовым командам" от Chema. я проблему "поедания" пытался решить так:
while $hull > 10
dec $hull =
@ = wait 1000 ms
end
но неполучилось. А правильный ответ знать очень хочется.
_________________ На пыльных тропинках далёких планет останутся наши мозги.
Последний раз редактировалось: Proteus (22:53 23-11-2007), всего редактировалось 1 раз |
|
|
Мечтатель
75 EGP
 Рейтинг канала: 5(188) Репутация: 39 Сообщения: 357 Откуда: Киев Зарегистрирован: 08.06.2007
 |
|
Proteus : |
Вы только не смейтесь
|
Никто не над кем не смееться все такими были. Я думаю меня простят если намекну.
<RefObj> set hull to <Var/Number>
_________________ Наука движется настолько быстро, что самые оптимистические прогнозы могут оказаться устаревшими! |
|
|
Andrei [<>Ace]
303 EGP
   Рейтинг канала: 6(416) Репутация: 108 Сообщения: 766 Откуда: Беларусь, Салiгорск Зарегистрирован: 29.03.2006
 |
|
Позвольте поучаствовать
Expert : |
Кстати, одна единица хулла для бигшипа вообще почти ничего не значит.
|
Ну бигшип к ШК Терракорп не пристыкуется
Expert : |
Предлагаю снимать по 1% в секунду!
|
Здесь нужно пояснить, что 1% с первоначального значения хулла, либо конца не будет.
И уже если ближе к реальности (если так можно выразиться) Чужой рушит корпус процентами . Пусть будет всетаки рандомно!
Lars : |
Для меня все ноборот, возможно из-за того что обычным программированием часто занимаюсь.
Код "поедания" корпуса:
|
Однозначно неправильно!
|
|
|
AlexYar
1916 EGP
               Рейтинг канала: 13(2096) Репутация: 325 Сообщения: 32763
Зарегистрирован: 26.10.2003
 |
|
Код: |
001 $ship= get player ship
002 $hull=$ship -> get hull
003 while$hull > 0
004 inc $hull=
005 @ =wait 1000 ms
006 end
007 $ship -> destruct: show no explosion=[TRUE]
008 return null
|
Тут сразу три ошибки
1. INC - это инкремент, т.е. прибавление на 1. Для уменьшения на 1 нужно применять DEC.
2. Нет применения изменений к самому корпусу. Как тут правильно намекнули - это делает команда set hull.
3. Нет учёта действий игрока, т.е. с точки зрения скрипта - игрок бросил корабль и пошел пить чай
А ведь в это время игрок может с кем-нить биццо, и его корпус будет повреждаться вражескими снарядами. Что тогда сделает скрипт поедания корпуса? Правильно - будет действовать наоборот, постоянно ремонтируя игроку корпус
Так же не учитывается возможный ремонт игроком корабля на верфи, при этом поедание должно начинаться заново, а не с той позиции, на которой оно было шаг назад, иначе деньги с игрока на верфи возьмут, а корпус останется прежним.
Кто напишет исправленую версию этого куска кода с учётом поправок?
|
|
|
Lars
440 EGP
    Рейтинг канала: 1(5) Репутация: 77 Сообщения: 2450 Откуда: Архангельск Зарегистрирован: 28.03.2007
 |
|
Есть функция получить значения хула в процентах, не помню как называется, она находится тамже где и функция получить значение хула
_________________ "Мозги... нам нужны мозги!"(с) "Живые мертвецы" |
|
|
Expert
423 EGP
     Рейтинг канала: 9(1073) Репутация: 154 Сообщения: 533 Откуда: Златоуст, Южный Урал Зарегистрирован: 15.08.2004
 |
|
Andrei [<>Ace] : |
Ну бигшип к ШК Терракорп не пристыкуется
|
Ага, щаззз
Это же обычный док оборудования!
Andrei [<>Ace] : |
Expert : |
Предлагаю снимать по 1% в секунду!
|
Здесь нужно пояснить, что 1% с первоначального значения хулла, либо конца не будет.
|
Думал, что это и так понятно
AlexYar : |
Кто напишет исправленую версию этого куска кода с учётом поправок?
|
А можно мне тоже поучаствовать?
Код: |
001 $Ship = get player ship
002 $Hull = $Ship -> get hull
003 $HullMax = $Ship -> get max hull
004 $Hull1Perc = $HullMax / 100
005 while $Hull
006 $Hull = $Ship -> get hull
007 $Hull = $Hull - $Hull1Perc
008 skip if not $Hull < 0
009 $Hull = 0
010 $Ship -> set hull to $Hull
011 @ = wait 1000 ms
012 end
013 play sample 985
014 $Ship -> set hull to $HullMax
015 return null
|
|
|
|
Proteus
88 EGP
  Рейтинг канала: 5(113) Репутация: 35 Сообщения: 443 Откуда: Латвия Зарегистрирован: 17.03.2007
 |
|
Expert : |
008 skip if not $Hull < 0
009 $Hull = 0
|
Если на словах "невыполнять, если не hull < 0 или hull = 0 " я правильно понимаю?
_________________ На пыльных тропинках далёких планет останутся наши мозги. |
|
|
Expert
423 EGP
     Рейтинг канала: 9(1073) Репутация: 154 Сообщения: 533 Откуда: Златоуст, Южный Урал Зарегистрирован: 15.08.2004
 |
|
Proteus : |
Expert : |
008 skip if not $Hull < 0
009 $Hull = 0
|
Если на словах "невыполнять, если не hull < 0 или hull = 0 " я правильно понимаю?
|
Пропустить если не выполняется условие $Hull < 0
Это чтобы хулл не стал отрицательным
|
|
|
Andrei [<>Ace]
303 EGP
   Рейтинг канала: 6(416) Репутация: 108 Сообщения: 766 Откуда: Беларусь, Салiгорск Зарегистрирован: 29.03.2006
 |
|
Expert : |
Это же обычный док оборудования!
|
Действительно . Бывает
а терь по коду:
1. Строка 002 лишняя, не в твоем варианте но можно и без нее.
2. wait лучше ставить сразу за while (просто лучше )
3. Урезаем пару строк .
Код: |
001 $Ship = get player ship
002 while 1
003 @ = wait 1000 ms
004 $damage = Random value from 10 to 100 -1
005 $Hull = $Ship -> get hull
006 $Hull = $Hull - $damage
007 skip if $Hull > 0
008 break
009 $Ship -> set hull to $Hull
010 end
011 play sample (какое кому нравится)
012 $Ship -> destruct: show no explosion =[FALSE]
013 return null |
Proteus : |
Цитата: |
Expert :
Код: |
008 skip if not $Hull < 0
009 $Hull = 0 |
|
Если на словах "невыполнять, если не hull < 0 или hull = 0 " я правильно понимаю?
|
Так!!! зачем Chem справочник под Х3 переделывал! Школьники! Читайте справочник, подробнее чем там уже не объяснишь.
Строка 008 переводиться так: пропустить следующую строку если значении $Hull не меньше 0. т.е. $Hull=0 или $Hull>0
Последний раз редактировалось: Andrei [<>Ace] (13:30 24-11-2007), всего редактировалось 2 раз(а) |
|
|
AlexYar
1916 EGP
               Рейтинг канала: 13(2096) Репутация: 325 Сообщения: 32763
Зарегистрирован: 26.10.2003
 |
|
Айс, дай новичкам-то немного подумать, а то взял и всё сам сделал
Andrei [<>Ace] : |
wait лучше ставить сразу за while (просто лучше )
|
Лучше с точки зрения - не забыть потом его поставить Однако есть и обратные случаи, когда нужно задержку ставить в самом конце цикла. В основном это зависит от типа счетчика (инкремент/декремент) и использования в циклах пропусков (команды continue).
К данном примере задержку в начале цикла лучше не ставить:
Код: |
while a > b
e = f
skif if c > d
break
.... (дальнейшие операции)
@ wait 100 ms
end
|
Т.е. использование задержки в начале цикла создаст ненужную паузу и возможность прерывания задачи другим скриптом, что иногда бывает недопустимо.
2all: По предложенному мною варианту осталось всё скомпоновать в цельный вид, сделав законченный скрипт
Вот предложенный путь:
1. Создать глобальный скрипт, который даст сообщение игроку (подлететь к ТС), проверит дистанцию, запустит второй процесс (изменения корпуса) и даст второе сообщение - лететь лечиться на ШК Терракорп.
2. Создать второй глобальный скрипт, который и будет являться процессом изменения корпуса.
3. Создать установочный setup-скрипт, который установит данную скрипт-фичу в игру.
4. Создать файл-описатель для хранения текстов.
Задача посложнее предыдущей, но зато составит полную картину создания скриптов в игре
Немного поясню, почему именно глобальные скрипты лучше подходят для данной задачи. С точки зрения ООП (объектно-ориентированного программирования) логично было бы всё повесить на какой-либо объект, учавствующий в событиях, например - Аргонскую ТС или ШК Терракорп...
Но есть одно "но" - это особенность движка иксов в "экстренных" случаях перезапускать все задачи на объектах (кораблях и станциях), в этом случае все нестандартные скрипты будут просто выкинуты из стеков. Единственно надёжное место, где скрипт может выполняться всегда, не будучи выкинутым - это глобальный стек.
А еще есть возможность, что объекты, в случае выполнения на них задач, могут быть уничтожены, и тогда вся работа накроется медным тазом
Последний раз редактировалось: AlexYar (15:06 24-11-2007), всего редактировалось 2 раз(а) |
|
|
Andrei [<>Ace]
303 EGP
   Рейтинг канала: 6(416) Репутация: 108 Сообщения: 766 Откуда: Беларусь, Салiгорск Зарегистрирован: 29.03.2006
 |
|
AlexYar : |
Айс, дай новичкам-то немного подумать, а то взял и всё сам сделал
|
Эт не я сделал . Уже два предложения решения задачи выше моего написано! Я только подъитожил. Кстати одно оставили без внимания!
AlexYar : |
Лучше с точки зрения - не забыть потом его поставить Однако есть и обратные случаи, когда нужно задержку ставить в самом конце цикла. В основном это зависит от типа счетчика (инкремент/декремент) и использования в циклах пропусков (команды continue).
К данном примере задержку в начале цикла лучше не ставить:
Код:
while a > b
e = f
skif if c > d
break
.... (дальнейшие операции)
@ wait 100 ms
end
Т.е. использование задержки в начале цикла создаст ненужную паузу и возможность прерывания задачи другим скриптом, что иногда бывает недопустимо.
|
Я имел ввиду для конкретного случая и только. Задержки должны стоять с учетом конкретной ситуации.
AlexYar если развить тему можно неплохой скрипт сделать в рамках ШКОЛЫ
Допустим история:
В скоплениях и на отдельных астероидах завелись некие биомеханические существа, целые колонии. Замечено нападение данных существ на корабли приближающиеся к астероидам менее чем на 1000 м или 2000 м. Атакованный ими корабль получает повреждения корпуса и оборудования до прохождения корантина на Верфи или Доке оборудования.
Этапы создания скрипта AlexYar набросал.
И об оставленном без внимания примере Proteus
1. Создавать одним скриптфайлом корабль и тут же выполнять алгоритм задания - просто неправильно.
2.
Proteus : |
$Ware -> destruct: show no explosion= [TRUE]
= $Ship -> add 20 units of Space Fuel S_2
|
А если применить нормальные команды:
<RetVar/IF><RefObj> move to ware object <Value> for collecting: timeout=<Var/Number> ms
RetVar/IF><RefObj> catch ware object <Value>
3.
Proteus : |
$hull1 = $hull / 100
while $hull > $hull1 * 10
|
С процентами разбирайся в одной строке и учти, что В Х3 прежде выполняют умножение потом деление
$hull.percent = $hull * 10 / 100
|
|
|
|
|
|
Канал X3: Reunion ->
Модовый и скриптовый отсек X3: Reunion: «Скрипт-школа (Задачи для начинающих скриптописателей)» |
|
К списку каналов | Наверх страницы |
Цитата не в тему: Архимед? Как же - помню. В него ещё Ньютон яблоками бросался. (Alone)
|
» Скрипт-школа (Задачи для начинающих скриптописателей) | страница 1 |
|