ВНИМАНИЕ! Наша конференция посвящена космической тематике и компьютерным играм. Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!
|
» Новые скриптовые команды. Угадайка. | страница 2 |
|
|
|
Канал X3: Reunion »
Модовый и скриптовый отсек X3: Reunion: «Новые скриптовые команды. Угадайка.» |
|
|
GrayCardinal
77 EGP
 Репутация: 16 Сообщения: 93 Откуда: Смоленск Зарегистрирован: 03.04.2006
 |
|
<RetVar> = get ship array: of race <Var/Race> class/type=<Value>
Возвращает массив всех кораблей класса <Value> пренадлежащей рассе <Var/Race> по всей вселенной, не зависит от того известен был корабль игроку или нет.
<RetVar> = get station array: of race <Var/Race> class/type=<Value>
Тоже самое что и с кораблями только для станций.
_________________ CPU not found ! Run the software emulation. |
|
|
Andrei [<>Ace]
303 EGP
   Рейтинг канала: 6(416) Репутация: 108 Сообщения: 766 Откуда: Беларусь, Салiгорск Зарегистрирован: 29.03.2006
 |
|
General : |
В отличие от FIND, указанные команды работают очень быстро
|
FIND ищут объекты подходящие под определенные параметры; к примеру "ближайший" или "массив ближайших определенной рассы".
А команды представленные в посте GrayCardinal все попорядку с минимум сортировок.
Естественно будут выполняться быстрее. Сравнивать их не нужно, каждая выполняет свои функции и одинаково полезна.
|
|
|
Andrei [<>Ace]
303 EGP
   Рейтинг канала: 6(416) Репутация: 108 Сообщения: 766 Откуда: Беларусь, Салiгорск Зарегистрирован: 29.03.2006
 |
|
Торговые команды :
Вернусь еще раз к этим командам.
Действительно все комманды типа:
find station: product ...
find station: resource ...
find station sells: resource ...
Ищут станции среди известных рассе объекта указанного в trader=<Var/Ship/Station>, при этом команды типа
find station: product ...
учитывают возможна ли продажа товара объекту ввиду низкого рассового рейтинга у рассы к которой принадлежит искомая станция.
Данная группа команд:
<RetVar/IF> find station: product <Var/Ware> with best price depend on jumps: max.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>
<RetVar/IF> find station: resource <Var/Ware> with best price depend on jumps: min.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>
<RetVar/IF> find station sells: resource <Var/Ware> with best price depend on jumps: max.price=<Var/Number>, amount=<Var/Number>, max.jumps=<Var/Number>, startsector=<Var/Sector>, trader=<Var/Ship/Station>
Осуществляет поиск станций принимая в расчет затраты на прыжок (количество батареек * на их стоимость).
|
|
|
AlexV
555 EGP
       Рейтинг канала: 7(561) Репутация: 182 Сообщения: 1157 Откуда: нискажу Зарегистрирован: 10.01.2006
 |
|
register quest script <Script Name> instance multiple = <Var/Number>
instance multiple = <Var/Number> - вообще, как я понял - это должно быть значение True/False, определяет количество допустимых одновременных отображений в BBS новостях. Но при маленьком числе по моим наблюдениям сильно снижается вероятность показа в новостях вообще.
<Script Name> - передаётся имя скрипта с BBS квестом.
к скрипту предъявляются определённые требования, собственно скрипт должен иметь такую структуру
Цитата: |
Аргументы
1: Object , Value , 'сам объект квеста'
2: Event , Var/String , 'строка события (в каком состоянии находится квест)'
3: Array.Data , Value , 'массив пользовательских данных'
4: Answer , Var/String , 'ответ игрока (какую кнопку выберет)'
|
тело скрипта, ес-но должно разруливать события... выглядит это примерно так:
Код: |
005 * Первый вызов скрипта (инициализация) - вызывается при загрузке
* сохранения или старте новой игры
006 if $Event == 'init'
007
008 * вызывается, когда начинается формирования списка новостей на BBS
*нужно возвращать приоритет квеста (от 0 до 100, чем больше - тем выше вероятность показа, но даже при 100 нет полной гарантии показа)
009 else if $Event == 'prio'
010 return 100
011
012 * собственно, тут радуемся, что нам повезло :) - новость надо показывать
013 else if $Event == 'offer'
014 $Message = sprintf: pageid=$Page.ID textid=1, 'Test', null, null, null, null
*обязательно тут готовим сообщение и устанавливаем состояние нашего квеста в "показывается"
015 set quest state with message: quest=$Object state=[Quest.Offered] msg=$Message
016
017 * тут можем убедиться, что игрок долистал до нашей новости :gigi:
018 else if $Event == 'display'
019
020 * Вызывается, когда игрок выбрал какую-нибудь кнопку в нашем квесте.
* что именно - в аргументе 4: Answer , Var/String
021 else if $Event == 'select'
022 $Message = sprintf: pageid=$Page.ID textid=3, 'Test', null, null, null, null
* собственно мы тут должны проверить всё, что нам может не понравиться в игроке,
* и либо послать ему send incoming message, либо установить состояние квеста в "принят на исполнение"
023 set quest state with message: quest=$Object state=[Quest.Accepted] msg=$Message
024
025 * Вызывается сразу после принятия квеста
026 else if $Event == 'accept'
* так мы можем установить дополнительный таймер нашего квеста...
* Тут начинаются проблемы:
* почему-то событие 'timer' срабатывает всего один раз, повторная установка таймера не даёт эффекта.
027 set quest/event $Object timer to 1000ms
* Аналогично таймеру, но устанавливается общий таймаут на весь квест,
* по завершению следует вызов с событием 'timeout' и сразу следом вызов с событием 'destruct'
* время таймаута задаётся в секундах
028 set quest $Object timeout to 60
*обрабатываемся в таймере (можно без проблем задерживать возврат
* управления из скрипта, но желательно укладываться в общий таймаут.
030 else if $Event == 'timer'
031 $TestTime = 60
032 while $TestTime > 0
033 $TestTime = $TestTime - 10
034 @ = wait 10000 ms
035 $Message = sprintf: pageid=$Page.ID textid=4, $TestTime, null, null, null, null
036 send incoming message $Message to player: display it=[TRUE]
037 end
038 set quest state with message: quest=$Object state=[Quest.Finished] msg=null
* сам таймаут, после этого события объект квеста будет уничтожен движком.
039 else if $Event == 'timeout'
* на всякий случай устанавливаем состояние квеста в "завершён"
040 set quest state with message: quest=$Object state=[Quest.Finished] msg=null
041
* собственно вот это событие должно само каким-то макаром вызываться, у меня оно вообще ни разу не вызвалось... :(
042 else if $Event == 'check'
044 end
046 return null
|
Немного про состояния
Quest.Question - передается фоновое входящее сообщение игроку без автоматического открытия.
Quest.Aborted - отмена квеста, сообщение игроку передаётся
самое интересное
Quest.Continued - эффект остался неизвестным пока, сообщение не передается игроку.
пока предполагаю, что должно быть связано с событием 'check'
Заставить работать не получилось, мож у вас получится?
во вложении лежит шаблон, который делал для экспериментов
желающие могут продолжить мучить движок BBS на предмет оживления события 'check'
там же приложен языковый файл с форматированием сообщения и примером оформления кнопки.
PS
давайте делать свои BBS квесты, а то чего только буржуйские есть?
QuestTemplate.rar |
Описание: |
шаблон квеста с языковым файлом |
|
Имя файла: |
QuestTemplate.rar |
Размер файла: |
2.66 KB |
Скачано: |
600 раз(а) |
_________________ а хуже всего приходится программистам из Microsoft. Им в случае чего и обругать-то некого |
|
|
|
|
|
Канал X3: Reunion ->
Модовый и скриптовый отсек X3: Reunion: «Новые скриптовые команды. Угадайка.» |
|
К списку каналов | Наверх страницы |
Цитата не в тему: А вообще воткой торговать опасно - мы тут как-то все разом на мостике напились, а наутро оказалось, что у меня кто-то шершень из трюма спер! (Саня-Галя о беспределе в СтарВинде)
|
» Новые скриптовые команды. Угадайка. | страница 2 |
|