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

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

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

   Страница 36 из 136
На страницу: Пред.  1, 2, 3 ... 35, 36, 37 ... 134, 135, 136  След.    Перейти:   Все страницы
Поиск в этой теме:
Канал X3: Reunion » Модовый и скриптовый отсек X3: Reunion: «Скриптописание - делимся опытом, задаем вопросы»
l0m
 340 EGP


Репутация: 87
Сообщения: 1062

Зарегистрирован: 18.03.2006
sergej4341 :
как текст конечно писать сложнее

именно для этого есть возможность самому длинному и самому уникальному имени во вселенной Х придать самое удобное и самое легкоусваиваемое имя в конкретном модуле скрипта. В самом верху, в шапке можно написать что-то типа name='супер.пупер.сложное.имя.глобальной.переменной.используемой.пару.раз.за.весь.скрипт'

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

а о чём говорим-то? Вроде как вопрос решён.
    Добавлено: 01:31 06-01-2007   
void_main(){}
 77 EGP


Репутация: 15
Сообщения: 165
Откуда: Планета Земля
Зарегистрирован: 04.12.2006
Привет. У меня есть очень хороший вопрос по реализации диалоговых окон. Т.е. к примеру, пользователь(правильнее наверно игрок) выбрал команду в меню корабля. Ему приходит сообщение с запросом. Как мне узнать, кокой ответ из предложенных выбрал пользователь? В учебники скриптов по этому поводу ниче не написано...
_________________
Последний раз редактировалось: void_main(){} (14:20 07-05-2011), всего редактировалось 5376209 раз
    Добавлено: 09:48 11-01-2007   
Andrei [<>Ace]
 303 EGP


Рейтинг канала: 6(416)
Репутация: 108
Сообщения: 766
Откуда: Беларусь, Салiгорск
Зарегистрирован: 29.03.2006
void_main(){} :
Привет. У меня есть очень хороший вопрос по реализации диалоговых окон. Т.е. к примеру, пользователь(правильнее наверно игрок) выбрал команду в меню корабля. Ему приходит сообщение с запросом. Как мне узнать, кокой ответ из предложенных выбрал пользователь? В учебники скриптов по этому поводу ниче не написано...

Гы-гы Еще один человек задался подобным вопросом. Трейтим будешь Гы-гы .

Посмотри скрипт
дроида ULiX-а найдешь здесь

или мой Пакет скриптов V2 и UMC

или вот этот «Find Ships in Galaxy»
Будет нагляднее.

Есть команда:
send incoming question <Var\String> to player: callback= <Script>

<Var\String> диалоговое окно. Его нужно создать самому.
<Script> скрипт который обработает ответ из диалога.
Есть недостаток - весь диалог пишеться в журнал.
Как создать кнопки, описано в учебнике, там написано, что они не работают - уже работают.
    Добавлено: 12:04 11-01-2007   
Chem
 780 EGP


Скрипт-мастер
Рейтинг канала: 15(2610)
Репутация: 248
Сообщения: 4751
Откуда: Киев
Зарегистрирован: 08.01.2007
Вопрос, можно ли через
Код:

register hotkey  <Hot Key> to call script <Script Name>

использовать конструкцию
Код:

call script <Script Name>:<Parameter>
.
т.е. имеет место быть несколько скриптов, однотипных, не хочется их держать в отдельных файлах, а сделать один и вызывать с параметром.
_________________
Умножим энтропию на 0 :-)
    Добавлено: 14:47 11-01-2007   
Andrei [<>Ace]
 303 EGP


Рейтинг канала: 6(416)
Репутация: 108
Сообщения: 766
Откуда: Беларусь, Салiгорск
Зарегистрирован: 29.03.2006
Chem :
Вопрос, можно ли через
Код:

register hotkey <Hot Key> to call script <Script Name>


использовать конструкцию
Код:

call script <Script Name>:<Parameter>

.
т.е. имеет место быть несколько скриптов, однотипных, не хочется их держать в отдельных файлах, а сделать один и вызывать с параметром.
Напрямую нет. А через глобальные переменные много чего сделать можно.
    Добавлено: 14:51 11-01-2007   
Chem
 780 EGP


Скрипт-мастер
Рейтинг канала: 15(2610)
Репутация: 248
Сообщения: 4751
Откуда: Киев
Зарегистрирован: 08.01.2007
Andrei [<>Ace] :
Напрямую нет. А через глобальные переменные много чего сделать можно.

А можешь немного подробнее, или послать в какой-нибудь скрипт, где это используется?

И еще, такой вопрос.
Количество турелей, посадочных мест в них у корабля, определить в скрипте можно. Установленное оружие тоже. А вот как узнать из скрипта название турели ? Т.е. носовая, кормовая, и т.п. ?
_________________
Умножим энтропию на 0 :-)
    Добавлено: 15:44 11-01-2007   
Andrei [<>Ace]
 303 EGP


Рейтинг канала: 6(416)
Репутация: 108
Сообщения: 766
Откуда: Беларусь, Салiгорск
Зарегистрирован: 29.03.2006
Chem :
А можешь немного подробнее, или послать в какой-нибудь скрипт, где это используется?


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

Ну посмотри скрипт про "горячие клавиши" новый, из пакета v2. Там наверно небольшая ошибочка есть но смысл понять можно.

Chem :
Т.е. носовая, кормовая, и т.п. ?

Вот выдержка из учебника.
Код:
<RetVar/IF> <object> fire lasers on target <target> using turret <turretid>
Дать команду <object> «стрелять лазерами» по цели <target> используя орудийную башню <turretid> . Если номер турели установлен как 0, то выстрел будет сделан из носового орудия, независимо от того находится цель target в зоне поражения или нет орудия все равно выстрелят и команда вернет [TRUE]. Если команда дана для выстрела именно из турели (номера больше 0), то следует позаботиться чтобы цель была в зоне видимости данной турели (именно видимости, точнее турель должна быть лицом к объекту), расстояние значения не имеет, если направленность правильная то будет сделан выстрел и функция вернет [TRUE]. В случае если цель вне зоны видимости, выстрела не произойдет и возвращаемое значение будет [FALSE].

В таблице указаны соответствующие номерам турели

0 Центр (носовые)
1 Носовая
2 Кормовая 
3 Левая
4 Правая
5 Верхняя 
6 Нижняя

Возвращаемые значения: TRUE (1) или FALSE (null)

<RetVar>=<ship> get max. number of lasers in turret <turret>
Получить число лазеров в турели <turret> корабля <ship>. Также, если установить turret=0, то вернет количество носовых орудий.

<RetVar>=<ship> get laser type in turret <turret> at slot <slot>
Возвращает тип пушки установленной на корабле <ship>, на турели <turret>, в слоте <slot>. Нумерация слотов начинается с 0 и идет слева на право. Например, если turret=0 slot=0, то инструкция вернет тип пушки левого носового орудия.

Если не то читай учебник, что-нить подходящее найдешь. Подмигиваю
    Добавлено: 16:01 11-01-2007   
Chem
 780 EGP


Скрипт-мастер
Рейтинг канала: 15(2610)
Репутация: 248
Сообщения: 4751
Откуда: Киев
Зарегистрирован: 08.01.2007
Andrei [<>Ace] :
Chem :
А можешь немного подробнее, или послать в какой-нибудь скрипт, где это используется?


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

Ну посмотри скрипт про "горячие клавиши" новый, из пакета v2. Там наверно небольшая ошибочка есть но смысл понять можно.

Ок, спасибо, посмотрю.
Посмотрел, понял. Так собственно и думал Улыбка. Спасибо!
Andrei [<>Ace] :
Chem :
Т.е. носовая, кормовая, и т.п. ?

Вот выдержка из учебника.
Код:
<RetVar/IF> <object> fire lasers on target <target> using turret <turretid>
В таблице указаны соответствующие номерам турели

0 Центр (носовые)
1 Носовая
2 Кормовая 
3 Левая
4 Правая
5 Верхняя 
6 Нижняя

<RetVar>=<ship> get laser type in turret <turret> at slot <slot>
Возвращает тип пушки установленной на корабле <ship>, на турели <turret>, в слоте <slot>. Нумерация слотов начинается с 0 и идет слева на право. Например, если turret=0 slot=0, то инструкция вернет тип пушки левого носового орудия.

Если не то читай учебник, что-нить подходящее найдешь. Подмигиваю

Спасиб, это я нашел ,но понимаешь какая фишка получается,
вот тут в скрипте
Sten :
для работы с турелями (запоминание , сохранение, сброс состояния) используется цикл.
Код:

109   $i = 0
110   $turret = [PLAYERSHIP] -> get number of turrets
111   while $i < $turret
112    $j = 0
113    $laserbays = [PLAYERSHIP] -> get max. number of lasers in turret $i
114    while $j < $laserbays
115     $laser = [PLAYERSHIP] -> get laser type in turret $i at slot $j
116     append $laser to array $weapon
117     inc $j =
118    end
119    inc $i =
120   end

т.е. получается, если в корабле только "Основная" и "Кормовая", то число тарретов 2, и от просмотрит айдишки от 0 до 1.
А по учебнику - надо получается просмотреть все, от 0 до 6.
Да и с названиями получается странно, я например на Гиперионе летаю,
так там кроме основной 2 передних, две задних, и под учебник никак Расстройство
З.Ы. Это я просто рассуждаю, а не претензии предъявляю. (я просто разместил объяву Подмигиваю )
_________________
Умножим энтропию на 0 :-)
    Добавлено: 16:32 11-01-2007   
Andrei [<>Ace]
 303 EGP


Рейтинг канала: 6(416)
Репутация: 108
Сообщения: 766
Откуда: Беларусь, Салiгорск
Зарегистрирован: 29.03.2006
Chem :
т.е. получается, если в корабле только "Основная" и "Кормовая", то число тарретов 2, и от просмотрит айдишки от 0 до 1.
А по учебнику - надо получается просмотреть все, от 0 до 6.


$turret = [PLAYERSHIP] -> get number of turrets - вернуть количество турелей на корабле, если их две значит 2 если шесть значит 6.

$laserbays = [PLAYERSHIP] -> get max. number of lasers in turret $i - получить количество лазеров в турели.


Chem :
так там кроме основной 2 передних, две задних, и под учебник никак

Сдвоенная передняя, Сдвоенная задняя.

Код:
<RetVar>=<ship> get max. number of lasers in turret <turret>
Получить число лазеров в турели <turret> корабля <ship>. Также, если установить turret=0, то вернет количество носовых орудий.
    Добавлено: 16:58 11-01-2007   
Chem
 780 EGP


Скрипт-мастер
Рейтинг канала: 15(2610)
Репутация: 248
Сообщения: 4751
Откуда: Киев
Зарегистрирован: 08.01.2007
Andrei [<>Ace] :
Chem :
т.е. получается, если в корабле только "Основная" и "Кормовая", то число тарретов 2, и от просмотрит айдишки от 0 до 1.
А по учебнику - надо получается просмотреть все, от 0 до 6.


$turret = [PLAYERSHIP] -> get number of turrets - вернуть количество турелей на корабле, если их две значит 2 если шесть значит 6.

$laserbays = [PLAYERSHIP] -> get max. number of lasers in turret $i - получить количество лазеров в турели.


Chem :
так там кроме основной 2 передних, две задних, и под учебник никак

Сдвоенная передняя, Сдвоенная задняя.

Код:
<RetVar>=<ship> get max. number of lasers in turret <turret>
Получить число лазеров в турели <turret> корабля <ship>. Также, если установить turret=0, то вернет количество носовых орудий.

Ок. В общем не зная подробно всех моделей кораблей, определить как она у него называется получается нельзя. Ладно, фиг с ним Улыбка

З.Ы. ну они редиски, нет чтоб доку полную сделать на скрипты (это про ЕС).
_________________
Умножим энтропию на 0 :-)
    Добавлено: 17:06 11-01-2007   
Chem
 780 EGP


Скрипт-мастер
Рейтинг канала: 15(2610)
Репутация: 248
Сообщения: 4751
Откуда: Киев
Зарегистрирован: 08.01.2007
Новый вопрос Улыбка
Продолжаю копаться в скриптах как таковых Улыбка
И вот была идея в группы оружия дополнительно сохранять текущее состоянии команд Турелей.
Нашел как стартовать команду в стеке Турелей

Учебник ... :


Задачи 1-6 (Task 1-Task 6) на объектах-кораблях служат для запуска скриптов управления турелями больших кораблей. Номер задачи соответствует номеру турели в консоли управления турелями.


<RefObj> start task <Var/Number1> with script <Script Name> and prio <Var/Number2>: arg1=<Value1> arg2=<Value2> arg3=<Value3> arg4=<Value4> arg5=<Value5>

Запускает скрипт <Script Name> в стеке Task <Var/Number1> объекта <RefObj> с приоритетом <Var/Number2> и параметрами <Value1> ... <Value5>, при этом вытеснив (удалив) все остальные скрипты из этого же стека.

<RefObj> interrupt task <Var/Number1> with script <Script Name> and prio <Var/Number2>: arg1=<Value1> arg2=<Value2> arg3=<Value3> arg4=<Value4>

Формирует запрос на прерывание (см. IntReq в статистике объекта) скриптом <Script Name> в стеке Task <Var/Number1> объекта <RefObj> с приоритетом <Var/Number2> и параметрами <Value1> ... <Value4>, но только при условии, что в соответствующем стеке уже запущен хоть 1 скрипт и указанный приоритет <Var/Number2> выше приоритета активного в данном стеке скрипта.

<RetVar/IF>get task ID

Возвращает номер стека на объекте, в котором выполняется текущий скрипт. Когда вы пользуетесь командами из главного меню, «Торговые», «Навигационные», «Боевые» и т.д. то запускаемые скрипты имеют свой Task ID.


А вот как определить, какой скрипт сидит в данный момент в стеке данной Турели ?

Или тапки ?
_________________
Умножим энтропию на 0 :-)
    Добавлено: 20:35 12-01-2007   
Andrei [<>Ace]
 303 EGP


Рейтинг канала: 6(416)
Репутация: 108
Сообщения: 766
Откуда: Беларусь, Салiгорск
Зарегистрирован: 29.03.2006
Chem :
А вот как определить, какой скрипт сидит в данный момент в стеке данной Турели ?

Скриптовыми командами видно никак, ну или методом перебора с помощью команды Гы-гы :
Код:
<RetVar/IF> <RefObj> is script <Script Name> on stack of task <Var/Number>
Позволяет узнать, не выполняется ли скрипт <Script Name> (выбирается из списка имеющихся в папке scripts) в стеке <Var/Number> указанного объекта <RefObj>.

А визуально смотреть, где и все запущенные на объекте скрипты.
    Добавлено: 03:45 13-01-2007   
whirlwind
 77 EGP


Рейтинг канала: 4(57)
Репутация: 26
Сообщения: 338
Откуда: Spb
Зарегистрирован: 18.02.2005
get number of resources per cycle for ware работает правильно для фабрик, но для комплексов всегда возвращает null. Хочу рассчитать стоимость производственного цикла. Есть какая нибудь другая возможность получить кол-во ресурса на цикл? Может как то выдрать фабрики из комплекса или еще чего подобное?
    Добавлено: 03:57 13-01-2007   
sergej4341
 460 EGP


Рейтинг канала: 5(139)
Репутация: 148
Сообщения: 1593
Откуда: Химки/Брест
Зарегистрирован: 16.01.2004
хелпь
Код:
034   $flags = [Find.Enemy] | [Find.Multiple]
035   $enemy.array =  find ship: sector=$control.sector class or type=Мобильный корабль race=null flags=$flags refobj=null maxdist=null maxnum=99 refpos=null

$control.sector равна удаленному сектору (трасировка это подтверждает)
в этом секторе гарантированно есть пират, он в космосе
на выходе в $enemy.array всегда null
если
Код:
034   $flags = [Find.Multiple]

выдается весь массив кораблей, только не проверял его, есть ли в этом массиве этот пират
если
Код:
034   $flags = [Find.Enemy]


опять же результат поиска null
запускал скрипт на своем корабле с устанвками Пират Чужой

что не так? почему поиск с таким флагом не возвращает этого долбанного пирата?
зы пришлось городить цикл на перебор в команде поиска всех рас с явным указанием в $race = Пират и поочередно всех остальных ксенов, хааков и Джулиана Хы...
т.е. type=Мобильный корабль race=$race
_________________
нажал клав. и затаил дыхание
    Добавлено: 12:06 17-01-2007   
Krom
 455 EGP


Рейтинг канала: 1(3)
Репутация: 159
Сообщения: 1988
Откуда: Горы Урала
Зарегистрирован: 19.07.2005
Ответ: refobj=null. Enemy смотрится по настройкам этого самого refobj.
_________________
Не спешите меня.
    Добавлено: 12:11 17-01-2007   
Chem
 780 EGP


Скрипт-мастер
Рейтинг канала: 15(2610)
Репутация: 248
Сообщения: 4751
Откуда: Киев
Зарегистрирован: 08.01.2007
Еще вопрос:
Есть необходимость в скрипте выводить некую информацию в цикле, с одинаковым форматированием, например
Код:

$i = 0
while $i < $max
   ...
   $out= sprintf: pageid= $page.id textid= 20000, $text, null, ...
   ...
end

имеет ли смысл сделать так:
Код:

$i = 0
$fmt = read text: page= $page.id id= 20000
while $i < $max
   ...
   $out= sprintf: fmt=$fmt, $text, null, ...
   ...
end

Или лучше не плодить переменных ?

Что скажут скриптеры со стажем ?

----- upd -----
Спасибо всем!
Начал делать по привычке, подгружая данные, чтобы на диск не лазил. А потом задумался, почитал, понял что оно языковые файлы к тому моменту подгружает в оперативку. Потому и спросил.
Еще раз спасибо, пойду оптимизировать Улыбка
_________________
Умножим энтропию на 0 :-)
    Добавлено: 14:30 17-01-2007   
Andrei [<>Ace]
 303 EGP


Рейтинг канала: 6(416)
Репутация: 108
Сообщения: 766
Откуда: Беларусь, Салiгорск
Зарегистрирован: 29.03.2006
Chem :
Что скажут скриптеры со стажем ?

Вопервых малопонятен вопрос и вообще мало информации.
По мне второй вариант не рационален, если подходит первый. Гы-гы
    Добавлено: 15:31 17-01-2007   
Krom
 455 EGP


Рейтинг канала: 1(3)
Репутация: 159
Сообщения: 1988
Откуда: Горы Урала
Зарегистрирован: 19.07.2005
Andrei [<>Ace] :
Вопервых малопонятен вопрос и вообще мало информации.

Вопрос, видимо, в том, какой код будет исполняться быстрее. В первом случае каждую итерацию происходит чтение формата с языковой страницы, во втором случае формат берётся из локальной переменной. Имхо - одинаково, поскольку и то, и другое находится в оперативной памяти. Ну, может, немножко быстрее второе - там выборку из памяти по адресу делать не надо Подозрение.
_________________
Не спешите меня.
    Добавлено: 15:37 17-01-2007   
dim
 85 EGP


Рейтинг канала: 3(27)
Репутация: 16
Сообщения: 304
Откуда: Москва, Россия
Зарегистрирован: 31.08.2004
ИМХО, второй правильнее.
Конечно зависит от числа циклов и размера повторяемого текста. И на малом числе циклов выигрыша не увидишь.

Можно легко проверить: поставь MAX побольше (1 000 000) и возьми по окончании время Подмигиваю
Думаю, результат тебя потрясёт...
_________________
Слон космический, занесён в Красную и другие книги.
Добрый и ласковый, но "крыс" не люблю!
    Добавлено: 17:59 17-01-2007   
AlexYar
 1916 EGP


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

Зарегистрирован: 26.10.2003
dim :
ИМХО, второй правильнее.


Нет, правильнее первый, потому что:

1. Скорость выполнения одинаковая, потому что делаешь одно и то же (проверял на 5000 циклах, больше ждать надоело).
2. Экономия памяти и сейвов на размер одной переменной.
3. Меньше строк в скрипте.
4. Лучше читаемость скрипта.


2all: Кстати, при 140 фпс задержка в 1 мс в команде "wait 1 ms" равна на самом деле 7 мс Улыбка

1000 раз цикл перебирается за 7 секунд, а 5000 за 35. Это если без вышеприведенных примером операций (просто пустой цикл). А вместе с ними - за 36 секунд Гы-гы

Т.е. можно легко рассчитать примерное время выполнения скрипта с долгими циклами, типа поиска и перебора станций и т.д.
    Добавлено: 19:08 17-01-2007   
Канал X3: Reunion -> Модовый и скриптовый отсек X3: Reunion: «Скриптописание - делимся опытом, задаем вопросы»
На страницу: Пред.  1, 2, 3 ... 35, 36, 37 ... 134, 135, 136  След.    Перейти:   Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: У каждого человека есть одна маленькая, сморщенная вещь. Коричневого цвета. Блин, забыл, как она называется.......о, вспомнил! Изюминка! (fox68)

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