|
|
|
Канал X2: The Threat: «Скриптовые миссии» |
|
|
Гиперионыч
|
|
Цитата: |
Титаник, Гигантик и Атлантик
|
Поправка: братьев-близнецов печально знаменитого лайнера звали "Олимпик" и "Британник".
|
|
|
RAider
405 EGP
    Рейтинг канала: 2(21) Репутация: 133 Сообщения: 1294 Откуда: Таганрог Зарегистрирован: 08.07.2003
 |
|
http://www.elite-games.ru/conference/viewtopic.php?t=21512
вот тама скриншоты.
это их потом звали так...после гибели титаника их переименовали...чтоб не было похоже... ...
правда, насчет атлантика не уверен, а гигантик точно был...его в британник переименовали...
_________________ Smart is the new Sexy. |
|
|
akm
470 EGP
    Рейтинг канала: 1(4) Репутация: 173 Сообщения: 1638 Откуда: Паразит Прайм Зарегистрирован: 23.10.2002
 |
|
Цитата: |
имеется ввиду Superliner class Galaxy....это такой ТЛ (заменяет ксенский) размером с М0....
|
А ну тогда все ясно Я твой мод еще не успел заценить
Ну таких жлобов должны М6 охранять имхо. М5-М3 - слишком дешево, а М2 слишком круто, они же не на войну летят.
Для лайнера "Титаник" у меня есть идея миссии
"Титаник сталкивается с астероидом, несколько тысяч пассажиров выкидываются в космос в скафандрах и их нужно быстро подобрать и отвезти на станцию. Кислород то ограничен. Да и каки не спят"
|
|
|
RAider
405 EGP
    Рейтинг канала: 2(21) Репутация: 133 Сообщения: 1294 Откуда: Таганрог Зарегистрирован: 08.07.2003
 |
|
...рулез)....тока не с астероидом натуральным, а такой сценарий:
1)нужно чтоб игрок или нанялся охранником или грузовозом на лайнер, потом
2)лайнер отклоняется гденить от маршрута, чтобы осмотреть какунить красивую туманность, а там -
3)сигнал тревоги, в лайнер врезается микрометеоритный поток,пропущенный изза халатной настройки щита, протаранивает мостик и двигательный отсек, корабль без управления летит в сторону ближ планеты, пассажиры в панике прыгают за борт в скафандрах, скафандров на всех не хватает...
4)а тут ищщо и пираты решили воспользоваться моментом.
игрок должен - а)если охранник - то сопроводить TP\TS с пассажирами до станции....б)если сам на ТP\TS, то как можно быстрее отвезти пассажиров....и хорошо, что М3 меньше по скорости, чем, например игуана ...быстро повезешь - оторвешься от эскорта, повезешь медленно - не успеешь всех спасти ...
_________________ Smart is the new Sexy. |
|
|
RAider
405 EGP
    Рейтинг канала: 2(21) Репутация: 133 Сообщения: 1294 Откуда: Таганрог Зарегистрирован: 08.07.2003
 |
|
можно завязать вариант с крушением на предыдущие миссии игрока....сколько раз он лайнер сопроводил нормально, а на какойто раз случайно - крушение
_________________ Smart is the new Sexy. |
|
|
Dimaxx
1016 EGP
      Рейтинг канала: 1(5) Репутация: 204 Сообщения: 5812 Откуда: Северодвинск Зарегистрирован: 26.06.2002
 |
|
Мля, вы там чё затеваете, братцы-фантасты?! Я такую миссию хачу!! Даешь Титаник!
_________________ "Если мы не покончим с войной, война покончит с нами." Г. Г. Уэллс |
|
|
Dimaxx
1016 EGP
      Рейтинг канала: 1(5) Репутация: 204 Сообщения: 5812 Откуда: Северодвинск Зарегистрирован: 26.06.2002
 |
|
Можно давать новую экспериментальную станцию (кристальницу или трубочницу, но необязательно только эти), которая работает только на батареях и кремнии. Типа, автоматика. И никакой жратвы! Пробовал скриптом - работает.
_________________ "Если мы не покончим с войной, война покончит с нами." Г. Г. Уэллс |
|
|
akm
470 EGP
    Рейтинг канала: 1(4) Репутация: 173 Сообщения: 1638 Откуда: Паразит Прайм Зарегистрирован: 23.10.2002
 |
|
Итак, вопреки тому что я назвал построение открытой системы для добавления новых custom-миссий почти невозможным, вот попытка создания такой системы (страсть у меня браться за все невозможное ) Конечно, многое придется делать через
Алгоритм генерации событий/миссий
Тут и алгоритмы, и правила - пока все в одной куче, но на то она и предварительная версия для обсуждения. То, что я лично возьмусь за ее реализацию, я пока не подписываюсь. Времени пока что совсем нет Просто выкладываю свои мысли и наброски, дабы не пропали. Вам они наверняка пригодятся
Глобальный скрипт "setup.plugin.MissionLauncher". Содержит бесконечный цикл, в котором производится:
1. Поиск Advanced Satellite определенной расы в радиусе 8км от [PLAYERSHIP].
2. Если спутник не найден, то goto п.11.
3. Чтение Уровня Cложности DifficLvl и боевого(торгового) рейтинга Rating из глоб переменных. (DifficLvl=1 для Easy, 2 для Normal, 4 для Hard и 8 для X-Treame)
4. Вычисление типа задания MissionType (убийство/эскорт/захват/разведка/торговая миссия и т.д.)
5. Вычисление модификатора сложности DifficMod в интервале 5 - 20.
6. Вычисляем сложность миссии: MissionDiffic = DifficMod * DifficLvl * Rating / k
7. Запуск скрипта поиска миссии "Find.Suitable.Mission" (MissionType, MissionDiffic)
8. Если ничего не найдено, goto п.4.
9. Запуск миссии с параметром MissionDiffic. Имя главного скрипта миссии должно быть в формате "mission.ХХХ", где ХХХ - три цифры. В этом скрипте должна быть только проверка доп. условий для миссии и запуск очередного скрипта собственно миссии с префиксом START и немедленный возврат с результатом, отражающим пошла ли миссия на выполнение.
10. Если миссия не пошла на выполнение (не удовлетворяют доп. условия), goto п.4.
11. Wait 10 sec
Замечание. Вычисления в п.4 и 5 подразумевают либо генератор случайных чисел, либо вычисления на основании местоположения спутника (как я писал выше, в пограничных секторах сделать задания по-сложнее), либо ... предлагайте
Таким образом, авторы миссий предоставляют следующие файлы:
1) setup.plugin.missionXXX
2) mission.ХХХ
3) любые другие файлы с произвольным именем, но начинающимся на "mXXX.",
где ХХХ - три цифры, т.е. уникальный идентификатор миссии.
Скрипт "setup.plugin.missionXXX":
1. Если глоб. переменная "MissionXXX.Version" существует и ее значение равно текущей версии скрипта, то Return.
2. Если глоб. переменная "MissionXXX.Version" = null, то прочитать глоб. переменную "Missions.Total" и увеличить ее значение на 1, предварительно присвоив ее CurMission. Иначе найти ХХХ в глоб. массиве "Mission.Array.MissionID" и установить CurMission = индексу найденного элемента.
3. Установить глоб. переменную "MissionXXX.Version" = версии данного скрипта. (Внимание, версия должна быть > 0)
4. Установить "Mission.Array.MissionID"[CurMission] = ХХХ. Здесь и далее, если речь идет о глобальной переменной, то я ее буду выделять в кавычки.
5. Установить тип миссии "Mission.Array.Type"[CurMission] (убийство/эскорт/захват/разведка/торговая миссия и т.д.)
6. Установить минимальный необходимый расовый рейтинг у каждой расы, необходимый для активации данной миссии "Mission.Array.ArgonRating"[CurMission], "Mission.Array.BoronRating"[CurMission] и т.д. Рейтинг > 2000 000 000 означает, что миссия не доступна у данной расы.
7. Установить минимальный и максимальный возможный уровень сложности для данной миссии "Mission.Array.MinDiffic"[CurMission] и "Mission.Array.MaxDiffic"[CurMission]
Скрипт "mission.ХХХ" (Difficulty):
1. Проверка доп. условий для данной миссии и, если хотя бы одно из условий не выполняется, то Return null.
2. START @ null-> call script 'mXXX....' difficulty = Difficulty
3. Return 1.
Скрипт "Find.Suitable.Mission" (MissionType, MissionDiffic):
1. CurSector = [PLAYERSHIP]-> get sector
2. MissionRace = CurSector-> get race
3. MaxIndex = get global variable 'Missions.Total' - 1
3. Случайная выборка миссии из массива "Mission.Array.MissionID" [0..MaxIndex], на основании параметров MissionType, MissionDiffic, CurSector, текущего расового рейтинга у MissionRace, и др.
для поиска используются все данные, зарегестрированные в скриптах "setup.plugin.missionXXX":
Mission.Array.Type
Mission.Array.MinDiffic
Mission.Array.MaxDiffic
Mission.Array.ArgonRating
Mission.Array.BoronRating
...
4. Return MissionID
P.S. Чего еще не хватает.
1) В "setup.plugin.MissionLauncher" нужно заложить некоторую задержку, после того как игроку отправлено задание миссии. Либо дождаться пока игрок не покинет зону 8км от спутника. Т.е. если задание ему не понравилось, то следующее он получит либо просто подождав, либо вылетев/влетев в зону 8км от спутника.
2) В "setup.plugin.missionXXX" заложить механизм удаления миссии из массива, т.е. на случай если сам игрок захочет деинсталировать миссию. Либо сделать спец. скрипт "setup.plugin.DELmissionXXX" для этой же цели.
|
|
|
Grey Wolf
500 EGP
    Рейтинг канала: 2(17) Репутация: 115 Сообщения: 1677 Откуда: Ростов-на-Дону Зарегистрирован: 31.03.2003
 |
|
2 АКМ: Респект! Классная мысль
|
|
|
XenonTomb
250 EGP
   Рейтинг канала: 2(16) Репутация: 66 Сообщения: 867 Откуда: Николаев, Украина Зарегистрирован: 17.03.2004
 |
|
Grey Wolf : |
2 АКМ: Респект! Классная мысль
|
 
_________________ Будут предложения - присылайте на расчетный счет :) |
|
|
Grey Wolf
500 EGP
    Рейтинг канала: 2(17) Репутация: 115 Сообщения: 1677 Откуда: Ростов-на-Дону Зарегистрирован: 31.03.2003
 |
|
Однако у меня все таки есть сомнения в возможности создать полностью открытую систему. Я пока не пробовал, времени не было, но сомнения гложут вот по какому поводу:
глобальный скрипт, который в конечном итоге запускает скрипт миссии, должен иметь команду
START [THIS]->сall script: missionxxx
Откуда однако, в случае открытой системы, эта команда с именем скрипта missionxxx попадет в текст глобального скрипта?
Если бы эту команду можно было записать в виде
START [THIS]->сall script: $missionxxx
где $missionxxx имеет значение имени скрипта missionxxx, вопросов нет. Но вряд ли такая команда будет работать. Вполне вероятно, что ее в таком виде даже не удасться записать.
_________________ Быстро выпитая рюмка не считается налитой |
|
|
Grey Wolf
500 EGP
    Рейтинг канала: 2(17) Репутация: 115 Сообщения: 1677 Откуда: Ростов-на-Дону Зарегистрирован: 31.03.2003
 |
|
Похоже, придумал я, как вышеописанные трудности преодолеть
Каждый скрипт миссии должен запускаться сразу в глобальном режиме и висеть в режиме ожидания (практически не нагружая процессор), пока мастер скрипт не разрешит миссии стартовать.
Файл setup.plugin.missionxxx первым делом должен проверить, запущен скрипт миссии, или еще нет. Если уже запущен, return null, иначе при каждой загрузке с сэйва скрипт миссии будет запускаться по новой вдобавок к уже запущенному. То же самое относится и к мастерскрипту, управляющему стартом миссий.
Если скрипт миссии еще не запущен (первая загрузка игры, после копирования скриптов с миссией в папку scripts), то добавить ячейку в массив глобальной переменной с миссиями и запустить скрипт миссии с префиксом START, передав ему в качестве аргумента персональный номер в указанном массиве.
Скрипт миссии периодически проверяет свой номер в массиве, если там null, ждет например секунд 20, если там число, миссия стартует с аргументом это число. Данное число будет определять сложность миссии. После завершения миссии скрипт переписывает это число на null и опять переходит в режим ожидания.
Мастер скрипт, который определяет, какой миссии и когда стартовать, после проверки разных условий, в том числе, запущены уже какие-то миссии или нет, принимает решение: стартовать миссии с таким-то номером и таким-то уровнем сложности. Тогда он записывает в ячейку массива этот уровень сложности.
Возможно, кроме уровня сложности потребуется, чтобы мастерскрипт передавал скриптам миссий еще какие-то аргументы. Для этого надо будет предусмотреть еще несколько глобальных переменных в виде массивов, в каждом массиве миссия будет иметь один и тот же номер.
Для того, чтобы все это работало, надо будет написать рыбу скрипта setup.plugin.missionxxx а также рыбу с началом и окончанием скрипта миссии. Дальше каждый желающий дописывает в скрипт миссии все свои фантазии, исполненные на этом весьма неудобном языке
_________________ Быстро выпитая рюмка не считается налитой |
|
|
akm
470 EGP
    Рейтинг канала: 1(4) Репутация: 173 Сообщения: 1638 Откуда: Паразит Прайм Зарегистрирован: 23.10.2002
 |
|
А я же не просто так писал
Цитата: |
Конечно, многое придется делать через
|
В данном случае проблемку с сall script: $missionХХХ я собирался решить тупо в лоб:
if MissionID==0 call script: 'mission.000'
else if MissionID==1 call script: 'mission.001'
else if MissionID==2 call script: 'mission.002'
...
И набирать несколько сотен строк (сколько там у нас миссий будет?) я вручную не собираюсь. Я элементарно могу сгенерировать codearray на основании того факта, что все строки в этом массиве одинаковые "else if...".
ИМХО такой вариант будет нагружать проц меньше предложенного тобой выше. И можно пойти еще дальше в плане минимизации количества исполняемых команд:
Код: |
if MissionID < 500
if MissionID < 250
...
else
if MissionID < 750
...
end |
|
|
|
Romoro
90 EGP
 Репутация: 8 Сообщения: 156 Откуда: Ижевск Зарегистрирован: 24.03.2004
 |
|
Есть предложение для мода с новыми кораблями. В финальной версии корабли будут давать за выполнение миссий, так вот возможный вариант для пиратского Драккара.
Залетаете к пиратам на станцию, в доске объяв видите, что у них передохли все рабы, и надо срочно новых , да побольше.Миссия для ТР, надо найти пассажиров, но отвезти не в нужное место, а к пиратам. Причем например за 50-100 человек-дают Драккар-S,за 100-200 Драккар-M, за 200<Драккар-L.
Вот такая миссия, подлого заманивания пассажиров.
Увы из меня никакой скриптописец, так что если интересно, то пусть пишут спецы.
_________________ Ваше слово товарищ GHEPT , ваш вылет товарищ HORNET...... |
|
|
Romoro
90 EGP
 Репутация: 8 Сообщения: 156 Откуда: Ижевск Зарегистрирован: 24.03.2004
 |
|
Да еще, все это надо успеть за время.В этой миссии прийдется взять другую миссию-по перевозке, вот в этом и прикол, успеешь найти предложение на перевозку, или нет.
_________________ Ваше слово товарищ GHEPT , ваш вылет товарищ HORNET...... |
|
|
Romoro
90 EGP
 Репутация: 8 Сообщения: 156 Откуда: Ижевск Зарегистрирован: 24.03.2004
 |
|
Блин ,забыл. Надо же наказать за то, что продал в рабство пассажиров. Предлагаю либо просто понижение рейтинга у рассы, на чьей станции ты взял пассажиров, либо вообще чтобы станция обиделась и покраснела. Во теперь все.
_________________ Ваше слово товарищ GHEPT , ваш вылет товарищ HORNET...... |
|
|
akm
470 EGP
    Рейтинг канала: 1(4) Репутация: 173 Сообщения: 1638 Откуда: Паразит Прайм Зарегистрирован: 23.10.2002
 |
|
2 Romoro
Научись редактировать сообщения! Все это можно было 1 постом написать.
2 RAider
Забыл сказать, что надо все твои идеи брать на воороужение. Неплохие миссии получаться Сам я про Титаник скорее ради прикола написал Но теперь вполне тянет на миссию. Кстати, можно на такие супер-лайнеры спец-скрипт вешать на SIGNAL_KILLED. Ведь вполне может случиться что такая громадина все же погибнет по естественным причинам, например автопилот не впишется в ворота или попадет в какую чудовищную битву. Т.е. вместо мгновенной смерти, лайнер еще посылает SOS и производит ряд эвакуационных действий по спасению жизни пассажиров.
А вот еще идейка миссии, навеенная событиями в игре:
Летит значит наш Юлиан в поисках очередных приключений к Advanced Satellite, и вдруг обнаруживает, что спутничек то какам принадлежит "Миссия от каков?" Подлетает он значит ближе и получает такое сообщеньице:
"SOS. SOS. SOS. Мы в безвыходном положении, наша раса на гране вымирания...
В ходе межгалактических исследований наша раса столкнулась с субъектом, противстоять которому не в состоянии никакое оружие во Вселенной. Этот марадер беспрерывно прочесывает сектор за сектором в поисках наших кораблей и безжалостно их истребляет, а иногда даже захватывает(!). А вот теперь он уже добрался и до наших секретных секторов, беспощадно уничтожая там все живое.
За голову этого марадера мы готовы заплатить любые деньги, и даже подарим вам абсолютно любой сектор, предварительно его зачистив от любого, кто не согласиться принять Вас своим губернатором.
К сожалению, нам очень мало известно об этом марадере, т.к. все наши разведчики поплатились своей жизнью... Достоверно известно лишь то, что он постоянно меняет свои корабли, не гнушаясь ни одним из классов, кидается как бык на все красное в секторе, а при попытке связи с ним всегда почему-то упоминает чью-то мать. А иногда посылает в открытый космос какие-то загадочные сообщения: Thereshallbewings"
Это скорее прикол, но сорри, не стерпел
|
|
|
akm
470 EGP
    Рейтинг канала: 1(4) Репутация: 173 Сообщения: 1638 Откуда: Паразит Прайм Зарегистрирован: 23.10.2002
 |
|
Grey Wolf : |
Если бы эту команду можно было записать в виде
START [THIS]->сall script: $missionxxx
где $missionxxx имеет значение имени скрипта missionxxx, вопросов нет. Но вряд ли такая команда будет работать. Вполне вероятно, что ее в таком виде даже не удасться записать.
|
Даже не удастся записать. Специально расковырял Codearray всех команд что предназначены для запуска скриптов, ни в одной нет возможности указания типа для поля <Имя скрипта>, т.е. переменную туда не всунуть. Еще проверил GOTO на предмет косвенной адресации - тоже обломс
Так что придется либо генерить огромный файл if MissionID==XXX call 'Mission.XXX' (не проблема для меня, я Codearray уже неплохо знаю),
либо делать как ты предложил.
|
|
|
RAider
405 EGP
    Рейтинг канала: 2(21) Репутация: 133 Сообщения: 1294 Откуда: Таганрог Зарегистрирован: 08.07.2003
 |
|
akm : |
Это скорее прикол, но сорри, не стерпел
|
..... имхо - надо приколами такими разнообразить мод ....получится вполне неплохо...
да насчет лайнера - а, что если игрок сам хозяин такого лайнера?...нужно ему команду нанять (в комплекте вместе с мэнэджером-софтом )...и проложить маршрутец....можно такую дуру самому пилотировать, а можно охранять рядом....пассажиры вредоносные должны периодически третировать всякого рода просьбами ...пираты не дадут спокойно спать за штурвалом ...плюс еще, например, полицейские патрули начнут останавливать и проводить обыски на борту ...
такая вот мысля есть ....да, и количество пассажиров должно определятся временем, проведенным пристыкованным на станции (верфи)...
_________________ Smart is the new Sexy. |
|
|
Tnax
270 EGP
    Рейтинг канала: 1(3) Репутация: 52 Сообщения: 930 Откуда: Russia, Voronezh Зарегистрирован: 20.01.2004
 |
|
Прикол приколом, но и в новости пойдёт.
В продолжение, есь в тексте в разделе про такси текст про ксеноновское такси....
_________________ Люблю когда прицел... вдруг синевеет! :) |
|
|
|
|
|
Канал X2: The Threat: «Скриптовые миссии» |
|