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

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

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

   Страница 14 из 17
На страницу: Пред.  1, 2, 3 ... 13, 14, 15, 16, 17  След.    Перейти:   Все страницы
Поиск в этой теме:
Канал X2: The Threat: «Добавляем новые команды в скрипт редактор»
Darth Revan
 345 EGP


Рейтинг канала: 5(153)
Репутация: 42
Сообщения: 349
Откуда: Belarus Prime
Зарегистрирован: 01.02.2006
1. Погрешность будет велика.
2. Надо делать при каждом попадании, иначе смысла нет.
3. Сначала попробую скриптом, потом, если понадобится, сделаю на внутреннем коде, если не лень будет (длинно может оказаться, плюс синхронизация может понадобиться).
4. Насчёт тормозов - поэкспериментировать надо. Игра и так очень много рассчётов делает, может и вообще разницы почти не будет.
    Добавлено: 13:40 24-07-2006   
Boron Friend
 830 EGP


Рейтинг канала: 5(203)
Репутация: 263
Сообщения: 1222
Откуда: Kingdom End
Зарегистрирован: 24.12.2004
А что если сделать анимацию сдвига камеры в файл сцены, а скриптом запустить этот cut при попадании в корабль плазмы?
    Добавлено: 14:55 24-07-2006   
AlexYar
 1849 EGP


Рейтинг канала: 6(436)
Репутация: 328
Сообщения: 31561

Зарегистрирован: 26.10.2003
akm :
А если не каждый, то вызов скрипта движком в игре уже имеется - это SIGNAL_ATTACKED.


...который не работает на кораблях, на которых не запущены скрипты в нулевом стеке, насколько я помню... Т.о. на корабле игрока сигнал этот никогда не сработает, а именно для корабля игрока вся эта петрушка и нужна Улыбка

Кстати, считать направление плазмы совсем не нужно. Нужно всего-лишь тряхануть корабль несколькими колебаниями по направлению, перепендикулярному направлению корабля, т.е. по его оси-Х.
Три быстрых затухающих колебания от каждой пули, плюс жуткий звук удара по железной бочке (как во фриле попадания при отключенных щитах) - и этого вполне достаточно для полной жопы радости Гы-гы

А вот с отдачей от выстрелов сложнее. Тут тоже нужно ловить момент выстрела каждой пушки и запускать скрипт тряски (а в х3 сделали несинхронные пушки, тогда как в х2 все пушки синхронные), либо скрипт тряски и попадания запускать глобально, чтобы они постоянно следили за плаершипом (чтоб игру не заставлять скрипты каждый раз читать и запускать).

Применительно к всего одному кораблю в игре - плаершипу, данные процедуры не должны оказывать существенного снижения производительности. Я так думаю Гы-гы

А в том, что за переключение звука двигателя собственного корабля отвечает движок игры, а не обж - в этом я очень сильно сомневаюсь. Возможно не в х3стори, а в х3конфиге, но явно не в экзешнике (в х3 звуковые настройки и эффекты даже вынесли в отдельный конфиг, вот только про кокпиты плаершипа забыли).
В экзешнике, имхо, кроме стартовой менюшки с настройками (одна задняя картинка менюхи весит пол экзешника) и старфорсы ничего больше нет, всё в обжах зашито, имхо.

BORON FRIEND :
А что если сделать анимацию сдвига камеры в файл сцены, а скриптом запустить этот cut при попадании в корабль плазмы?


Сложно это. Кстати в х2 камера и так в кабине двигается при перегрузках (ускорение, повороты, торможение). В х3 такого не заметил, правда там и кокпитов-то нету Улыбка
    Добавлено: 14:57 24-07-2006   
akm
 470 EGP


Рейтинг канала: 1(4)
Репутация: 173
Сообщения: 1638
Откуда: Паразит Прайм
Зарегистрирован: 23.10.2002
AlexYar :
...который не работает на кораблях, на которых не запущены скрипты в нулевом стеке, насколько я помню... Т.о. на корабле игрока сигнал этот никогда не сработает

Проверил. Так и есть, этот сигнал не срабатывает на корабле игрока, похоже обработка прерываний вообще отключена на playership.
Кстати, корабль игрока заметно трясет в Х2 при попадании снарядов. Только амплитуда маленькая. Может можно найти как ее увеличить в obj?

AlexYar :
Кстати, считать направление плазмы совсем не нужно. Нужно всего-лишь тряхануть корабль несколькими колебаниями по направлению, перепендикулярному направлению корабля, т.е. по его оси-Х.

Таки приятней, когда по направлению встряски можно почувствовать откуда плазма прилетела Улыбка Поэтому я и говорил, что точность там +/- пол слона сгодится, т.е. погрешность в 45 градусов не смертельна.

AlexYar :
либо скрипт тряски и попадания запускать глобально, чтобы они постоянно следили за плаершипом (чтоб игру не заставлять скрипты каждый раз читать и запускать).

Ну если самым оптимальным образом делать скрипт, чтобы минимально тормозил, то в идеале это глобальный скрипт с @-командой движку, типа команды @fly to... Т.е. в бесконечном цикле в данном глобальном скрипте запускается новоиспеченная команда, которая запускает процедурку OBJ, но выход из этой процедурки (т.е. передача управления обратно в глоб.скрипт) происходит только при попадении плазмы по Playership. В остальное время эта процедурка в OBJ болтается запущенной и делает циклическую проверку на попадение плазмы, аналогично работе команд @fly to...
Если конечно такие фокусы можно программить в OBJ...
    Добавлено: 22:48 24-07-2006   
Darth Revan
 345 EGP


Рейтинг канала: 5(153)
Репутация: 42
Сообщения: 349
Откуда: Belarus Prime
Зарегистрирован: 01.02.2006
Глобальным скриптом конечно идеально. И нет проблем с корректной обработкой нескольких попаданий за короткий промежуток времени, только проверять надо с нехилой частотой. Плюс всё равно при попадании запускать нужно скрипт запускать через START, ибо синхронизация с глобальным скпиптом обязятельна. Поэтому, для начала, упрощу себе жизнь и сделаю просто по старту обработку попаданий независимо друг от друга (и плевать, что при нескольких крутых попаданиях может некорректно потрясти). А SIGNAL_ATTACKED мне на фиг не нужен - я могу врезаться в место, где он вызывается, обойдя ненужные проверки и т.п. Могу вообще его обработку улучшить.
    Добавлено: 02:42 25-07-2006   
AlexYar
 1849 EGP


Рейтинг канала: 6(436)
Репутация: 328
Сообщения: 31561

Зарегистрирован: 26.10.2003
akm :
Проверил. Так и есть, этот сигнал не срабатывает на корабле игрока, похоже обработка прерываний вообще отключена на playership.


Врать не буду, чтоб не обмануть, но вроде она отключена на всех кораблях, на которых не запущены скрипты ("нет команд" в консоли). Т.е. без разницы, кто в корабле, и чей он.
Или от раслоджика обработка сигналов зависит.... не помню уже. Совсем запутался...

Darth Revan :
Плюс всё равно при попадании запускать нужно скрипт запускать через START, ибо синхронизация с глобальным скпиптом обязятельна.


А сделать, как akm предложил, можно? Т.е. тряска от попаданий есть и так, но она слабая, и нужно только увеличить её амплитуду.
А с тряской при выстрелах нужно копать хт-шный обж и искать там кусок нужного кода, имхо, чтобы включить стандартную процедуру.
Просто в х2 орудия стали откатными, поэтому тряску отключили (и игра сразу потеряла половину адреналина). В х3 же орудия опять стали статичными (зато съемными, т.е. если пушки в слоте нет, то ствол не отображается на корабле Улыбка ), а вот тряску вернуть забыли Расстроен
    Добавлено: 19:35 25-07-2006   
sergej4341
 460 EGP


Репутация: 148
Сообщения: 1593
Откуда: Химки/Брест
Зарегистрирован: 16.01.2004
Мурзилка :
2) А в X3 что - нету кокпитов? А что же там вместо них - вид от 3-го лица только? Или кокпиты "голые" - то есть видно только стекло и раму и никаких кнопочек мигающих, дисплеев с надписями, пультов, кресел, и.т.д, - т.е. все "голое" как во фриле?

вид от первого лица, просто экран с космосом, из индикаторов только слоты с оружием и инфа по ракетам, все
_________________
нажал клав. и затаил дыхание
    Добавлено: 10:43 26-07-2006   
Darth Revan
 345 EGP


Рейтинг канала: 5(153)
Репутация: 42
Сообщения: 349
Откуда: Belarus Prime
Зарегистрирован: 01.02.2006
Сделал возможным добавлять свои посты в BBS и сделал новую версию команды send incoming question to player Shaddie. В частности, теперь возможно изменение текста сообщения (читай, создание нового меню) в одном и том же окне, т.е мгновенно. И в окнах сообщений, и в меню BBS.

Расскажу поподробнее. Я добавил несколько команд, рассмотрим их по порядку.

Код:
471: offer = create BBS offer: params= parameters array

Эта команда создает объект offer (предложение), предназначенный для хранения сообщения BBS. Это сообщение может быть запостено на станцию или отравлено игроку. Кто смотрел quesе289.inc Shaddie, то там для реализации команды send incoming question to player создан объект миссии BBS. Объект offer, формально, также представляет из себя миссию BBS, но он никак не связан с механизмами игры по управлению миссиями BBS. (я решил обойти стандартную обработку, поскольку она заточена под их компилятор и c ScE нормально не связывается - хотя бы потому, что требует создание внутреннего класса на каждый тип миссии).

Как видно из вида команды, у сообщения есть ряд параметров. Внутри команд их используется их восемь штук.
0: offer text. Текст сообщения.
1: script name. Имя скрипта, выполняющегося при нажатии кнопки в сообщении.
2: tIme.Время отправки сообщения игроку или поста в BBS.
3: display it. Открывать ли сообщение, когда оно будет отправлено игроку (т.е. аналог display it TRUE/FALSE у Shaddie).
4: start it. Запускать ли скрипт по нажатию кнопрки через START.
5: write to logbook. Записывать ли в лог полученное сообщение после выхода из обработчика script name.
6: close menu. Закрывать ли меню после выхода из обработчика script name.
7: reserved. Зарезервировано.

Код:
472: parameters array = offer->get BBS offer params


Возвращает по сообщению массив параметров (не забываем, что все массивы в иксах передаются по ссылке, а точнее, передаётся ссылка на объект exeшника массив).

Код:
473: update active menu


Обновляет активное BBS меню или меню сообщений.

Код:
474: offer->make offer


Собственно посылает сообщение игроку. Когда игрок нажимает кнопку, вызывается скрипт
script name (answer, offer).
Answer - строка, содержащая ответ (задается [select value='строка']), offer - объект сообщения.

Сразу отмечу, что я сделал так, что меню, созданное командой make offer, не закрывается автоматически. Чтобы оно закрылось после обработчика script name, нужно сделать offer->params[6]=1.

Допустим, мы хотим сделать последовательные меню. Для этого просто изменяем offer->params[0], а также, по желанию, остальные параметры сообщения, но выставляем offer->params[6]=0. Затем выполняем команду update active menu и выходим из обработчика script name. После выполнения update active menu происходит обновление сообщения и новое сообщение отображается в том же окне. Опять по нажатию кнопки вызывается script name (возможно, уже другой) и т.д.

Теперь перейдём к BBS меню. Реализовано событие event.bbs.getoffers(station), которое вызывается при каждом обновлении окна BBS меню (т.е. вызывается, если сидим на станции station, через каждые random (15, 45) секунд), которое возвращает массив сообщений offer, которые мы хотим разместить на станции station. Обработчик script name в случае BBS сообщения отличается лишь тем, что для него не обрабатываются флаги display it, write to logbook, close menu.

Как правило, сообщения offer должны генерироваться и удаляться вне зависимости от скрипта event.bbs.getoffers(station) и храниться в каком-нибудь массиве (глобальном или локальном для сектора). Тогда, Чтобы удалить сообщение из BBS меню, надо просто удалить его из этого массива и выполнить команду update active menu (если мы вызываем её, находясь в BBS меню). Опять же, сообщение можно не только удалить, но и изменить eсли мы хотим, чтобы оно осталось открытым перед игроком, то при изменении не надо менять время отправки, т.е. сообщения в BBS меню отсортированы по времени; однако даже в этом случае сообщение может сместиться, если при обновлении из BBS меню будет удалено сообщение с более ранним временем отправления).

Есть ещё команда

Код:
475: object->destroy object


Удаляет объект object. Может быть использована для удаления объекта Offer.

Примеры в архиве.

Ещё добавил отлов выстрела из пушек. Ну и сделал пробную версию отдачи. Я попытался сделать её разной в зависимости от типа корабля и пушек. Правда параметры настроил пока во многом от балды. firelaser.rar

А это, собственно, сам патч. ux2story13_dr1_11b.rar.

------------------------------------------------------------------------

2 Мурзилка
Мыслится мне, это было специально сделано, чтобы не надо было скриптом обратно всё выгружыть после стандартной загрузки.
    Добавлено: 03:45 29-07-2006   
AlexYar
 1849 EGP


Рейтинг канала: 6(436)
Репутация: 328
Сообщения: 31561

Зарегистрирован: 26.10.2003
Darth Revan :
473: update active menu

Обновляет активное BBS меню или меню сообщений.


А блокировка нажатия Esc есть? Улыбка Или по прежнему можно закрыть это меню нестандартным способом без нажатий кнопки ответа?
    Добавлено: 10:48 29-07-2006   
Darth Revan
 345 EGP


Рейтинг канала: 5(153)
Репутация: 42
Сообщения: 349
Откуда: Belarus Prime
Зарегистрирован: 01.02.2006
2 AlexYAr
Эачем тебе блокировка нажатия? Больше не надо глобального скрипта с wait. Всё что душе угодно, можно передавать через params. Смотри примеры. Теперь принцип работы с последовательными меню изменился.
2 Мурзилка
Если я не вру, то чтобы не было этой фишки, нужно первой строкой в !ship.rebuild.action добавить THIS->add default items. Чтобы открыть этот скрипт в ScE, можно откомпилировать мой патч, установив ShowAllScriptsInEditor = TRUE. Затем открыть скрипт, изменить, и сохранить изменения. Изменение сохраниться с расширением xml. Если у тебя был нераспакованный скрипт !ship.rebuild.action.pck, просто удали его.
    Добавлено: 12:06 29-07-2006   
AlexYar
 1849 EGP


Рейтинг канала: 6(436)
Репутация: 328
Сообщения: 31561

Зарегистрирован: 26.10.2003
Darth Revan :
Эачем тебе блокировка нажатия? Больше не надо глобального скрипта с wait. Всё что душе угодно, можно передавать через params. Смотри примеры. Теперь принцип работы с последовательными меню изменился.


Ничего не понял Совсем запутался...

Вот пример - игрок запускает меню, затем жмет клавише Esc, меню уходит с экрана без ответа. Затем игрок опять запускает меню - получается две копии меню?

Сейчас пока ситуация именно такая. Блокировка нажатия Esc нужна обязательно, чтобы игрок не смог убрать меню с экрана не нажав одной из клавиш ответа (если параметр display it стоит TRUE).
    Добавлено: 13:19 29-07-2006   
Darth Revan
 345 EGP


Рейтинг канала: 5(153)
Репутация: 42
Сообщения: 349
Откуда: Belarus Prime
Зарегистрирован: 01.02.2006
Никаких копий не возникает и возникнуть им неоткуда. Если ты, конечно,сам не создаёшь повторно. Я прошу прощения, я забыл выложить файл-описатель для примера.

<page id="1112" title="" descr="">
<t id="0">[author]Author question[/author][title]Title question %s[/title]
[text colwidth='500'][center]Text question\n\n
[select value="A0"]Do some actions and reject quest[/select]\n\n
[select value='A1']Do some actions and accept quest[/select]\n\n
[select value='A2']Change message text and post time[/select]\n\n
[select value='A3']Change message text[/select]\n\n[/center][/text]</t>
</page>

Может непонятка ещё в следующем. Я команду send incoming question to player не менял. Смотри example.bbs.makeoffer.xml для примера запуска по новому.

P.S. А понял, с send incoming question to player начались проблемы. Замените мой quest289.inc на оригинальный Shaddie (или просто в тексте изменить IncomingMessage2 на IncomingMessage).

Когда глюки на nm.ru закончатся, заменю архив.
    Добавлено: 16:13 29-07-2006   
Darth Revan
 345 EGP


Рейтинг канала: 5(153)
Репутация: 42
Сообщения: 349
Откуда: Belarus Prime
Зарегистрирован: 01.02.2006
Ещё один момент. Можно ведь для разных меню использовать один и тот же объект offer. Для того, чтобы меню закрылось по кнопке, всё равно надо установить offer->params[6]=1. Перед тем, как запускать новое, можно проверить, чтобы offer->params[6] было равным 1. Если нет, то меню не закрыто. Если да, то обнуляем, и запускаем. Закрыть по ESC - святое право игрока. Это быстрый способ закрытия меню, если, например, ситуация стала опасной. Замочил непися, а потом можно вернуться. Я проблем не вижу. Можно создавать на разные типы меню разные offer. Например, меню корабля - один, меню на станции - другой и т.п. Тогда у игрока может осесть не более одного меню каждого типа. И это абсолютно нормально.
    Добавлено: 18:23 29-07-2006   
AlexYar
 1849 EGP


Рейтинг канала: 6(436)
Репутация: 328
Сообщения: 31561

Зарегистрирован: 26.10.2003
Darth Revan :
Если ты, конечно,сам не создаёшь повторно.


Дык именно об этом и речь! Именно я, или другой игрок, и запустят воторую, третью, десятую копию меню, а потом будут мучаться с поиском активного окна, не имея доступа к меню вообще.

Делать блокировку дублей в скриптах - крайняя степень мазохизма (сложность отладки отбивает всё желание делать интерактивные меню вообще, а единственная ошибка заблокирует сразу всё дерево навсегда, т.е. до следующего патча для мода).

Вот именно поэтому активное окно, которое уже перед глазами игрока, обязательно должно блокировать нажатие клавиши Esc игроком. Тогда сразу море проблем будут решены.

Теперь понятно объяснил? Улыбка Я уже с этими меню исплевался с год назад (когда еще её шадди сделал), и эта одна из причин, почему так и не вышел И-2 (задолбался отлаживать консоль и сотни скриптов блокировок писать).

Darth Revan :
Закрыть по ESC - святое право игрока. Это быстрый способ закрытия меню, если, например, ситуация стала опасной.


Ни в коем случае! Если ситуация стала опасной - игрок сам виноват. Нефиг лезть в меню в опасных ситуациях Улыбка Это раз.
А во-вторых - сделать кнопку отбоя (возврата в начало) - это обязанность скриптописателя, который делает меню.
Уж кнопку добавить - проблем не составит Улыбка
    Добавлено: 18:36 29-07-2006   
Darth Revan
 345 EGP


Рейтинг канала: 5(153)
Репутация: 42
Сообщения: 349
Откуда: Belarus Prime
Зарегистрирован: 01.02.2006
То, что было раньше, было мазохизмом, согласен. И не стабильно. Я специально изменил способ навигации. И дерева вообще никакого нет. И блокировки как таковой специальной нет. Суть изменений:
1. Вызов нового меню происходит прямо в обработчике OnSelect.
2. Меню само по себе не закроется по нажатию, как было раньше, пока не установишь params[6]=1.

Раньше меню закрывалось по любому нажатию вне зависимости от того, что происходит в обработчике OnSelect. Сейчас ответственность за закрытие лежит на программере. Нажал ESC - меню ушло в Incoming messages. Одно.

Никаких десяти меню не может появиться и в помине, потому что новое меню ты запускаешь с тем же объектом offer, изменяя текст сообщения. Т.е. реально, это то же самое окно, и то же самое сообщение, но с другим текстом. Поэтому и отображается новое меню мгновенно. Ты хоть десять меню перебери, но иксовское сообщение одно и то же.

Это не иерархические, это последовательные меню. Открывая следующее, предыдущее пропадает. И кнопка возврата - это кнопка по созданию заново предыдущего меню. Конечно, при переходе из одного меню в другое, ты можешь запоминать состояния и т.п. Причём в параметрах offer->params - и не надо никаких глобальных переменных. В обработчике OnSelect offer всегда с тобой, и ты всегда сможешь определить, обработчик какого это меню (я не говорю уже о том, что скрипты обработчиков могут быть разными).

Проверяя offer->params[6] перед запуском (не из OnSelect, там меню всегда ещё открыто), ты обеспечиваешь, что одному объекту offer соответствует одно сообщение. И по значению offer->params[6] ты знаешь, не висит ли это одно сообщение в Incoming messages.

Это твоё дело, будешь ты делать один объект offer вообще на все меню, или несколько. Но только не по объекту offer на каждое новое меню. Тогда, действительно, ты получишь иерархию окон и траблы с увеличением числа иксовских сообщений со всеми вытекающими последствиями.
    Добавлено: 18:59 29-07-2006   
AlexYar
 1849 EGP


Рейтинг канала: 6(436)
Репутация: 328
Сообщения: 31561

Зарегистрирован: 26.10.2003
Darth Revan :
Но только не по объекту offer на каждое новое меню.


Напиши тогда пример скрипта по иерархическому меню.
Т.е. на первой странице меню четыре кнопки: "1", "2", "3" и "выход".
Каждая кнопка (1-3) открывает своё окно с одной кнопкой "назад".


На примере этой навигации уже будет гораздо понятнее. Оки? Улыбка


Просто таких вкладок может быть туева хуча (в зависимости от ситуации по игре окна могут меняться), поэтому максимальное упрощение создания такого меню будет способствовать развитию интерактивных меню.
    Добавлено: 20:00 29-07-2006   
Darth Revan
 345 EGP


Рейтинг канала: 5(153)
Репутация: 42
Сообщения: 349
Откуда: Belarus Prime
Зарегистрирован: 01.02.2006
Патч 1.12 бета.

Добавил команды

476: show incoming messages
Открывает меню входящих сообщений.
477: result = sqrt number
Возвращает квадратный корень числа (есть он всё-таки в игре).
478: number = str2int string
Преобразует строку, содержащую число, в число.
479: offer->remove all offers from incoming messages
Удаляет из списка входящих сообщений все сообщения, созданные при помощи объекта offer.

Также добавил в perform operation:
88: GetMass obj - объект
89: SetMass obj - объект, par1 - масса
90: SetMaxAvoidShield obj - объект, par1 - величина щита

Кому интересно, можно поэкспериментировать с GetMass, SetMass, SetMaxAvoidShield. По умолчанию, масса корабля равна его полному размеру (т.е. вместе с размерами составляющих его body). SetMaxAvoidShield устанавливается при активации корабля равным (макс. корпус + макс. щит) / 8.

Добавил ещё примеры работы с меню.

2 AlexYar. Сделал, даже не один уровень, а два. В целом, сделал схему для удобства реализации иерархического меню (см. пример в архиве).

Патч - ux2story13_dr1_12b.rar (выложил, наконец, нормально).
    Добавлено: 03:08 30-07-2006   
AlexYar
 1849 EGP


Рейтинг канала: 6(436)
Репутация: 328
Сообщения: 31561

Зарегистрирован: 26.10.2003
Darth Revan :
делал, даже не один уровень, а два. В целом, сделал схему для удобства реализации иерархического меню (см. пример в архиве).


Посмотрел - как-то чрезмерно усложненно всё Расстроен А если вкладок меню 1000, то сколько придется писать скриптов? Совсем запутался...
По-старинке (с командой Шадди) делается всё горааааздо проще и читабельней. Вот пример:

Скрипт обработчик нажатий кнопок один на все окна и всего две строки:
alexyar.add3.mybbs.a.xml


001 set global variable: name='ay.mybbs' value=$ValueAnswer
002 return null


Далее основное меню:

001 load text: id=5000
002 $null = null
003
004 if get global variable: name='ay.con.work'
005 $menu = read text: page=7000 id=2003
006 START speak text: page=13 id=135 priority=1000
007 return null
008 end
009
010 $menu = read text: page=7000 id=2003
011
012 set global variable: name='ay.mybbs' value=null
013 set global variable: name='ay.con.work' value=1
014
015 @ = wait 250 ms
016 send incoming question $menu to player: display it=[TRUE] callback='alexyar.add3.mybbs.a'
017
018 while 1
019 $answ = get global variable: name='ay.mybbs'
020 skip if $answ == null
021 break
022 @ = wait 100 ms
023 end
024
025 @ = wait 250 ms
026
027 if $answ == 'R'
028 set global variable: name='ay.con.work' value=null
029 @ START $null -> call script 'alexyar.add1.stat' : Sample=null Display=1
030 return null
031 end
032
033 if $answ == 'L'
034 @ START $null -> call script 'alexyar.add3.mybbs.license' :
035 return null
036 end
037
038 if $answ == 'B'
039 @ START $null -> call script 'alexyar.add3.mybbs.bus' :
040 return null
041 end
042
043 if $answ == 'E'
044 set global variable: name='ay.con.work' value=null
045 return null
046 end
047
048
049 return null


Вполне легко читается и понимается...
C 29-ой строки запускаются скрипты окон/вариантов ответов (на каждое окно свой скрипт для удобства, хотя иногда бывает достаточно в одном скрипте пару окон реализовать).

add: Кстати, вышеприведенный скрипт легко унифицируется, тогда он будет вообще один на все окна меню, т.е. не придется для каждого окна писать скрипты. Достаточно будет просто его запустить с нужными аргументами, и он будет открывать окно с другими вопросами и принимать другие ответы Улыбка Это я только что допёр Гы-гы

set global variable: name='ay.con.work' value=1

это блокировка повторного создания меню...


Возможно, что мне твой вариант просто кажется чрезвычайно сложным, так как нет возможности посмотреть в работе (не запустить х2), но имхо проще добавить команде Шадди блокировку нажатия Esc, да одну команду по очистке лога, и будет всё легко и четко Улыбка
    Добавлено: 12:07 30-07-2006   
Darth Revan
 345 EGP


Рейтинг канала: 5(153)
Репутация: 42
Сообщения: 349
Откуда: Belarus Prime
Зарегистрирован: 01.02.2006
Просто шапку я сделал большую. А сам код - по две строки на каждую вкладку. А шапка копируется. Ты заметил, что все обработчики - одинаковые. Т.е. совсем. Хочешь без шапки - просто заново вводи строку, которая будет выводится, и имя скрипта OnSelect. Это я сделал, чтобы автоматически сохранялись сообщения предыдущих уровней. Удали шапку: сама функциональность - десять строк на скрипт.

Каждый OnSelect - это меню. Вызов нового реально писать - две строки. Остальное - копируется из скрипта в скрипт без изменений.
Вот эти строки:

$offertext = sprintf: pageid=1113 textid=1, '1', '1', null, null, null
$onselect = 'example.bbs.onselect.1'


P.S. Я же сделал команду по очистке лога.

P.P.S. Можно и не писать шапку. Тогда чтобы вернуться назад в родительское окно, тебе придётся заново ввести его текст и callback. А так они сами запоминаются. Плюс - ты можешь запустить не с нулевого, а с любого уровня иерархии, и работать будт точно так же. Т.е. на нужном уровне back превратится в exit.

P.P.P.S. И эдесь ты можешь запустить один обработчик на все окна. В чём проблемы? Передавай хоть мегабайт параметров. Лучше всего прямо в offer->params.

Px4.S. Кстати, и блокировки не надо. Вызываешь
offer->remove all offers from incoming messages ,
а затем
offer->make offer.

С точки зрения объёма программирования, здесь тебе надо всего две вещи для создания новой вкладки: указать строку нового сообщения (читай, нового меню) и новый callback. При вызове родительского окна через offer->make offer кроме этого надо ещё занулить пару параметров. Всё.

Так что в сторону усложнения ничего не изменилось.
Мой пример проще простого реализовать именно на одном обработчике. Я специально для тебя их размножил. Их там столько не нужно.

Px5.S. A преимущества, между прочим, стоящие.
1. Нет проблем с блокировкой.
2. Мгновенное отображение нового окна меню (причём и в BBS ты можешь мгновенно сменить сообщение).
3. Возможность переброски сообщений из BBS в меню и обратно.
    Добавлено: 12:12 30-07-2006   
AlexYar
 1849 EGP


Рейтинг канала: 6(436)
Репутация: 328
Сообщения: 31561

Зарегистрирован: 26.10.2003
Darth Revan :
Я же сделал команду по очистке лога.


А блокировку Esc? Гы-гы

Я к чему про блокировку... Вот смотри. Скриптописатель ведь не зря ставит display it: TRUE, он делает это для того, чтобы окно было перед глазами игрока. А раз оно должно быть перед глазами игрока, то и иметь возможности его закрыть без ответа игрок не должен!

Если бы это было не критично - ставишь display it: FALSE , и никаких проблем. Но тут именно что критично, меню не должно иметь нестандартных способов отбоя, кроме как через кнопку меню "выход". Какая разница игроку нажать "выход" или "Esc"? А скриптописателю разница большая, состоящая в лишних строках, проверках и сотней часов отладки скриптов. Вот о чем речь.

Если сможешь сделать блокировку Esc для команды Шадди с параметром TRUE под х3 для тестов, то я тебе его последний патч на мыло скину сегодня. Можно туда и всё остальное добавить, но это наверное долго будет, пока блокировку хотелось-бы потестить (если не долго, то и свой способ туда добавь для посмотреть).
    Добавлено: 12:43 30-07-2006   
Канал X2: The Threat: «Добавляем новые команды в скрипт редактор»
На страницу: Пред.  1, 2, 3 ... 13, 14, 15, 16, 17  След.    Перейти:   Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Для модераторов - 1% вероятности критического фэйла бана, с баном самого себя, и 1% вероятности нанесения критического урона, с полным исключением пользователя из базы данных, баном авторов двух соседних сообщений, и вынесением предупреждений авторам 2-х сообщений с двух сторон от них! (игровые фантазии XArgon-а)

  » Добавляем новые команды в скрипт редактор | страница 14
Каналы: Новости | 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