Elite Games - Свобода среди звезд!
.
ВНИМАНИЕ!
Наша конференция посвящена космической тематике и компьютерным играм.
Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!

  » Скрипт-школа (Задачи для начинающих скриптописателей) | страница 1
Конференция предназначена для общения пилотов. Для удобства она разделена на каналы, каждый из которых посвящен определенной игре. Пожалуйста, открывайте темы только в соответствующих каналах и после того, как убедитесь, что данный вопрос не обсуждался ранее.

Поиск | Правила конференции | Фотоальбом | Регистрация | Список пилотов | Профиль | Войти и проверить личные сообщения | Вход

   Страница 1 из 10
На страницу: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10  След. | Все страницы
Поиск в этой теме:
Канал X3: Reunion » Модовый и скриптовый отсек X3: Reunion: «Скрипт-школа (Задачи для начинающих скриптописателей)»
Нужна ли школа скриптописателей
Да. чем нас больше, тем игра веселее
95%
 95%  [ 65 ]
Нет, развелось вас.
4%
 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 раз(а)
    Добавлено: 14:38 22-11-2007   
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 раз
    Добавлено: 17:18 22-11-2007   
Else
 140 EGP


Рейтинг канала: 3(26)
Репутация: 29
Сообщения: 313
Откуда: Тверская обл.
Зарегистрирован: 08.11.2007
Void, ваши замечания правильны, но никто не заставляет писать вас полноценный скрипт, поэтому эти команды на ваши усмотрения, они только улучшат скрипт скрипт
по пункту 4) после подбора контейнера, типа монстрик должен очухатся.
Да никто не мешает выкладывать свои примеры и вам, я и возможно другие чайники с удовольствием попробуем их выполнить. Улыбка
_________________
Интересно, а пить водку в полночь, считается после работы или до?
    Добавлено: 08:19 23-11-2007   
AlexYar
 1848 EGP


Рейтинг канала: 13(2096)
Репутация: 328
Сообщения: 31541

Зарегистрирован: 26.10.2003
Сложность данного примера явно не 1, а где-то около 3-4 Улыбка
Предлагаю немного упростить задачу и упорядочить.

Игрок подлетает к Аргонской Торговой Станции в Доме Света на дистанцию ближе 1000 метров, в его трюме оказывается чужой, который постепенно ломает корабль.

Пояснения: чужой - это не товар, а "виртуальное понятие", т.е. о том, что он есть на корабле, можно судить только по ломающемуся корпусу.

Скрипт должен:

1) Послать сообщение игроку "Подлетите к Аргонской ТС в секторе Дом Света ближе 1 км".
2) Установить локальную переменную корабля 'test001.AlienExist' в 1.
3) Запустить процесс "поедания" корпуса. При значении корпуса равном нулу - уничтожить корабль.
4) Прислать сообщение игроку, что для дезинфекции корабля ему необходимо пристыковаться к ШК Терракорп.
5) В момент стыковки игрока к станции остановить процесс "поедания" и установить лок.переменную в 0.
6) Через 5 секунд прислать сообшение игроку "Дезинфекция проведена успешно".

Сложность около 2-ух, дерзайте Улыбка
    Добавлено: 12:03 23-11-2007   
DizzY
 60 EGP


Репутация: 4
Сообщения: 103

Зарегистрирован: 09.07.2007
Цитата:
«Скрипт-школа (Задачи для начинающих скриптописателей)»

Ээээээ... а для совсем начинающих - чего курить начинать? Ткните, плз в самые начала Улыбка
А то мысли кой-какие есть, алгоритм тож дело знакомое, а вот момент реализации пока...
    Добавлено: 18:05 23-11-2007   
Lars
 440 EGP


Суровый помор
Рейтинг канала: 1(5)
Репутация: 77
Сообщения: 2450
Откуда: Архангельск
Зарегистрирован: 28.03.2007
DizzY :
А то мысли кой-какие есть, алгоритм тож дело знакомое, а вот момент реализации пока...
А ты попробуй реализовать часть скрипта, например "поедание" корпуса.
_________________
"Мозги... нам нужны мозги!"(с) "Живые мертвецы"
    Добавлено: 19:03 23-11-2007   
Proteus
 88 EGP


Рейтинг канала: 5(113)
Репутация: 35
Сообщения: 443
Откуда: Латвия
Зарегистрирован: 17.03.2007
Lars :
А ты попробуй реализовать часть скрипта, например "поедание" корпуса.

Лично для меня это "поедание" самое сложное все остальные пункты я вроде решил.
А обсуждение заданий в этой теме вести можно или только задание-ответ?
То что AlexYar предложил это для меня вообще пушной зверёк(в смысле писец). Улыбка
_________________
На пыльных тропинках далёких планет останутся наши мозги.

Последний раз редактировалось: Proteus (19:36 23-11-2007), всего редактировалось 1 раз
    Добавлено: 19:35 23-11-2007   
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 раз
    Добавлено: 21:37 23-11-2007   
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 раз(а)
    Добавлено: 21:59 23-11-2007   
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 раз
    Добавлено: 22:52 23-11-2007   
Мечтатель
 75 EGP


Рейтинг канала: 5(188)
Репутация: 39
Сообщения: 357
Откуда: Киев
Зарегистрирован: 08.06.2007
Proteus :
Вы только не смейтесь


Никто не над кем не смееться все такими были. Я думаю меня простят если намекну.

<RefObj> set hull to <Var/Number> Подмигиваю
_________________
Наука движется настолько быстро, что самые оптимистические прогнозы могут оказаться устаревшими!
    Добавлено: 23:00 23-11-2007   
Andrei [<>Ace]
 303 EGP


Рейтинг канала: 6(416)
Репутация: 108
Сообщения: 766
Откуда: Беларусь, Салiгорск
Зарегистрирован: 29.03.2006
Позвольте поучаствовать Улыбка
Expert :
Кстати, одна единица хулла для бигшипа вообще почти ничего не значит.

Ну бигшип к ШК Терракорп не пристыкуется Улыбка

Expert :
Предлагаю снимать по 1% в секунду!

Здесь нужно пояснить, что 1% с первоначального значения хулла, либо конца не будет. Улыбка

И уже если ближе к реальности (если так можно выразиться) Чужой рушит корпус процентами Улыбка . Пусть будет всетаки рандомно!

Lars :
Для меня все ноборот, возможно из-за того что обычным программированием часто занимаюсь.
Код "поедания" корпуса:

Однозначно неправильно!
    Добавлено: 02:06 24-11-2007   
AlexYar
 1848 EGP


Рейтинг канала: 13(2096)
Репутация: 328
Сообщения: 31541

Зарегистрирован: 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. Нет учёта действий игрока, т.е. с точки зрения скрипта - игрок бросил корабль и пошел пить чай Хы...
А ведь в это время игрок может с кем-нить биццо, и его корпус будет повреждаться вражескими снарядами. Что тогда сделает скрипт поедания корпуса? Правильно - будет действовать наоборот, постоянно ремонтируя игроку корпус Улыбка
Так же не учитывается возможный ремонт игроком корабля на верфи, при этом поедание должно начинаться заново, а не с той позиции, на которой оно было шаг назад, иначе деньги с игрока на верфи возьмут, а корпус останется прежним.

Кто напишет исправленую версию этого куска кода с учётом поправок? Улыбка
    Добавлено: 02:38 24-11-2007   
Lars
 440 EGP


Суровый помор
Рейтинг канала: 1(5)
Репутация: 77
Сообщения: 2450
Откуда: Архангельск
Зарегистрирован: 28.03.2007
Есть функция получить значения хула в процентах, не помню как называется, она находится тамже где и функция получить значение хула
_________________
"Мозги... нам нужны мозги!"(с) "Живые мертвецы"
    Добавлено: 10:06 24-11-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
    Добавлено: 11:32 24-11-2007   
Proteus
 88 EGP


Рейтинг канала: 5(113)
Репутация: 35
Сообщения: 443
Откуда: Латвия
Зарегистрирован: 17.03.2007
Expert :

008 skip if not $Hull < 0
009 $Hull = 0


Если на словах "невыполнять, если не hull < 0 или hull = 0 " я правильно понимаю?
_________________
На пыльных тропинках далёких планет останутся наши мозги.
    Добавлено: 12:15 24-11-2007   
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
Это чтобы хулл не стал отрицательным Улыбка
    Добавлено: 12:29 24-11-2007   
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 раз(а)
    Добавлено: 12:29 24-11-2007   
AlexYar
 1848 EGP


Рейтинг канала: 13(2096)
Репутация: 328
Сообщения: 31541

Зарегистрирован: 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 раз(а)
    Добавлено: 14:41 24-11-2007   
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
    Добавлено: 15:22 24-11-2007   
Канал X3: Reunion -> Модовый и скриптовый отсек X3: Reunion: «Скрипт-школа (Задачи для начинающих скриптописателей)»
На страницу: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10  След. | Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Не задолбало клавиатурной мастурбацией занимацца? (NRG)

  » Скрипт-школа (Задачи для начинающих скриптописателей) | страница 1
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18