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

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

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

   Страница 1 из 5
На страницу: 1, 2, 3, 4, 5  След. | Все страницы
Поиск в этой теме:
Канал X3: Reunion » Модовый и скриптовый отсек X3: Reunion: «мысли вслух»
4o
 64 EGP


Рейтинг канала: 1(6)
Репутация: 8
Сообщения: 111

Зарегистрирован: 16.01.2011
модернизация темы) будем считать, что я здесь поселился.

"краткая" предыстория в txt файле) ее готов обсуждать здесь, если кому хочется.


Здесь буду выкладывать свои скрипты.

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

интерфейса не прикручено - запускается из редактора скриптов. вся остальная инфа в архиве.


скрипт номер два. автоматизация абордажника. также без интерфейса, отладка для одного состояния. инфа в архиве. пока за работоспособность ручиться не могу)


текущие задачи:
1. написать скрипт, организующий взаимодействие разных скриптов (умные люди сказали, что оно похоже на openMP:)
+. написать скрипт, который переключает корабля между состояниями "боевой готовности" и "не боевой готовности". если появляются враги - идет звуковая команда (выключающая СУВ, турели начинают судорожно искать врагов. как враги кончились - звуковая команда и перевод в "небоевой режим". )
2. прикрутить через этот обработчик друг к другу скрипт поиска кораблей и автоматического захвата. попутно отладить оба скрипта, дописать интерфейс.
3. дописать скрипты пиратской станции
4. добавить возможность захвата станций стандартной командой обработчика
5. реализовать 3 закона ньютона в иксах
6. на базе него написать скрипт движения кораблей
7. на базе наго реализовать скрипт, управляющий формацией (чтобы не рассыпалась, а летела всегда строем)
8. решить задачу бомбометания по движущейся цели
9. изменить поведение мины сквош
10. написать скрипт для бомбометания крылом бомбардировщиков во главе с игроком

идеи на обдумывании:
1. парковочная стоянка для кораблей


люблю помидоры "в аффтора". хотя больше нравятся корректно оформленные.

HCF.zip
 Описание:
автоматизация абордажника
 Имя файла:  HCF.zip
 Размер файла:  20.76 KB
 Скачано:  920 раз(а)
preambula.txt.zip
 Описание:
"краткая" история "всего"
 Имя файла:  preambula.txt.zip
 Размер файла:  8.3 KB
 Скачано:  870 раз(а)
4o SearchEngine.zip
 Описание:
скрипт поиска кораблей
 Имя файла:  4o SearchEngine.zip
 Размер файла:  13.63 KB
 Скачано:  890 раз(а)


Последний раз редактировалось: 4o (21:13 03-05-2012), всего редактировалось 7 раз(а)
    Добавлено: 22:44 11-01-2012   
SergejU
 72 EGP


Рейтинг канала: 3(36)
Репутация: 2
Сообщения: 241
Откуда: DONETSK
Зарегистрирован: 11.08.2009
4o :
Скучно в условиях отсутствия боевых действий.


Видимо вы новичёк и еще не научились ставить скрипты? Улыбка

4o :
Отсутствие вменяемого ТЛ
Захват транспортами


Как по мне захват транспортами полный бред - всегда медленные неповоротливые плохо защищенные корыта будут сразу уничтожены.
Я сделал доступным захват на ММ6 кораблях(ММ6 улучшил-удорожил немного).
Получился из ненужного очень хороший класс кораблей.При этом возможность захвата становиться доступной после накопления определенной суммы стоимости ММ6 и обьем увеличенного трюма значительно ограничевает возможности по захвату и HCF остается актуальным.
Соотвественно собираюсь добавить у пиратов захват на ММ6 и даже думаю на М6 (если не покажется читерным - на то они и пираты).
Покупка пиратского ТЛ мне кажется нонсенсом(конечно только захват).

4o :
Захват чисто теоретически возможен с помощью рабов. Но надо крайне долго и упорно руками пинать транспорты, чтобы набрать требуемое кол-во (при том, что ситуация усугубляется «к-том» силы рабов).
Существующая альтернатива – покупка пассажиров через бартер в анархическом порту. Проблемы: редко встречается.
Возможные решения:
Продажа сил захвата через BBS на станциях
Продажа рабов с мобильной тюрьмы пиратов (аналог training ship мамонта у аргона)
Добавление сил захвата как товаров на (все/некоторые) пиратские станции
Генерация станций, производящих силы захвата на территории пиратов (через аналог maintain скриптов – или тупо влоб, или через заказываемую ТЛку)


Это да больной вопрос сам думал что то делать но руки пока не дошли.
В предыдущей пиратской игре захватил станции по их выпуску но грузить их нельзя пришлось оттаскивать за пределы секторов и то иногда секторная охрана нападала.А для снабжения пришлось строить мега комплексы.Морочно это... Расстроен

4o :
захват станций.
Насколько я понял, нет вообще никаких проблем с адоптацией существующего скрипта абордажа под захват станций. Единственная проблема – для станций не существует массива, описывающего их защитные системы (читай кол-во защитников = 0) и станции (если просто изменить тип вводимой переменной с /корабль на /станция или корабль) захватываются моментально и нисколько не сопростивляются. После захвата станции пакуются на ТЛку уже существующими скриптами и ставятся там, где надо.


Эта идея мне понравилась - стандартно захватывать станции добавив для них защитников.

И как прогресс есть?
    Добавлено: 12:09 20-01-2012   
4o
 64 EGP


Рейтинг канала: 1(6)
Репутация: 8
Сообщения: 111

Зарегистрирован: 16.01.2011
прогресс) написал скрипт, который бьет фрицев в секторе попутно спрашивая. не хотят ли они сдаться. пиратство для кораблей, управляемых скриптом. к нему осталось припаять убивание начинки корабля при его сдаче и катапультирование пилота. + потом еще если сильно кому захочется ( подумать над балансом.

написал скрипт, высчитывающий вектор перехвата цели при ее прямолинейном движении. теоретически можно дописать проверку - успеет ли перехватить, пока цель не уйдет из сектора/не сядет на станцию. есть косяки, но они ...такк скажем... принципиальные.

1. если в текущий момент на цели нет destination, то вылезают косяки. понятное дело это лечится. другое дело, что есть подозрения. что есть еще и другие проблемы.
2. скрипт осталось покрасить и выбросить на помойку))) в иксах в действии релятивистская физика, причем завязанная далеко не на скорость света) ни разу корабли не встретились, хотя проверял алгоритм в экселе))

3. делаю пиратскую станцию. которая управляет пиратствующими пиратами (первым сриптом). умеет:
3.1. строить корабли и спутники из ship parts, лома и мусора
3.2. умеет разбирать корабли на означенные детали
3.3. смотрит за целями в секторе, которые может видеть сама станция, приписанные к ней спутники и корабли. для цели выбирает ближайшего пирата, который более подходит для уничтожения цели.
3.4. (бред сивой кобылы, но самому весело до одурения)))) итак) на станции работают рабы) больше рабов - быстрее процесс.
3.4.1. рабы едят 5 типов еды 2 уровня и почти все типы еды 1 уровня (но предпочитают бифштексы естественно)
3.4.2. когда еды не хватает, рандомная часть недокормленных рабов дохнет сразу, остальная часть превращается в больных)
3.5.3. больные не ускоряют процесс работы станции. но все равно едят и тоже предпочитают коров)) самое смешное, что рабов на станции 4000 (станция - склад XL), а больных аж 200000)
3.5.4. все работы строятся в очередь. в данный момент выполняется только одна.
3.5.5. для контроля рабов на станции должны находиться... в общем все, чем можно захватывать абордажем корабли) и они тоже едят, а еще и получают зарплату. куча голодных рабов при отсутствии надзирателей начинает бастовать и прощай станция)
3.5.6. рабы умеют не только разбирать и строить корабли) они еще как истинная бесплатная рабочая сила умеют шить кроссовки, транспаранты. пылесосы, и прочий неиспользуемый бред из существующих объектов)))) единственное полезное может быть здесь - делать лекарства для излечения больных и сборочное оборудование для ускорения процесса работы)

4. потом думаю на станции оставить только производство пылесосов и разбор на винтики кораблей) все остальное реализовать на штаб квартире, которая будет управлять отдельными станциями. дальше для прикола вбить какую-нибудь логику построения управляемой сети из станций и отдать на тестирование расе пиратов)))

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

фактически оно появилось после написания (додумался наконец)))) конструкции типа
while time
time = wait time ms
end

помогает переустановка xtended и убивание некоторых скриптов. каких именно - не понял и лень стало перебирать. хотя конкретно на скрипт с этим циклом не реагирует.

есть дурацкая идея помаяться еще несколько дней и реализовать решение транспортной задачи:

есть n пиратов и m целей. надо выбрать порядок перехвата, чтобы было перехвачено максимальное число целей) судя по всему процу должно понравиться)))

пробовал реализовать физику безвоздушного пространства) тупо, смешно, бредово))вешает или проц или глаза)

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

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

Последний раз редактировалось: 4o (19:29 28-02-2012), всего редактировалось 1 раз
    Добавлено: 19:21 28-02-2012   
4o
 64 EGP


Рейтинг канала: 1(6)
Репутация: 8
Сообщения: 111

Зарегистрирован: 16.01.2011
а - относительно захвата станций существующим скриптом. я добавлял защитников для станции. насколько я помню - скрипт пересылки десанта и сам "захват" выполняется скриптом на цели.
проблема была в том, что этот скрипт стартовал - имея сменилась на "станция 10000 - 0". но вот десант туда залезать не хотел) возможно в базовом скрипте используется трюм корабля. ну или скрипт-уоманды, которые для станций не работают. доберусь до компа с иксами - гляну еще раз.

если хочется сохранить оставшийся после захвата десант в целостности - можно:

1. насильно его перебросить обратно на десантный корабль
2. добавить в виде ресурса или промежуточного товара. при этом вырубить производство на станции.

также еще была мысль при успешном захвате станции превращать весь эфимерный персонал станции в рабов) штук 1000-2000)

запускать скрипт - проверять кол-во десанта и рабов на станции, и как оттуда все вывезено - удалять ресурс и запускать производство

Последний раз редактировалось: 4o (14:54 29-02-2012), всего редактировалось 1 раз
    Добавлено: 14:50 29-02-2012   
4o
 64 EGP


Рейтинг канала: 1(6)
Репутация: 8
Сообщения: 111

Зарегистрирован: 16.01.2011
итак. написал пару скриптов) дебют)

1. ищет корабли заданной рассы, заданного класса (+без проблем сделать даже по серийнику корабля
2. автоматизация абордажника: указал цель и он сам все сделал)

пока все не так все безоблачно, но функционал реализован)

куда вы, товарищи, кидаете свои скрипты?))
    Добавлено: 14:43 08-03-2012   
SergejU
 72 EGP


Рейтинг канала: 3(36)
Репутация: 2
Сообщения: 241
Откуда: DONETSK
Зарегистрирован: 11.08.2009
Начал новую игру за пирата.
Поставил пиратских секторов 36 а яки - 24(конечно за счет основных рас).
На пиратские верфи добавил соединительный узел а то прям вообще никак комплекс не собрать Расстроен без основных рас.Также добавил шахты чтоб потом их не тырить у компа.Пшеницу для бухла.
Уменьшил требования к торговому рейтингу для доступности и добавил на все пиратские верфи.
Все фабрики штурмовой техники теперь дружественны к игроку(хоть пират, хоть яки или еще кто).Пиратам добавил фабрики сплитских наемников а Яки - дроидов, но снабжать их придется самому.
Тренировочному кораблю поставил расу пират и направил в пиратские сектора(вышло или нет пока не знаю).Менять на рабов не стал уж очень они никакие.
Собираюсь продающуюся на пиратской верфи немезиду рейдер переделать в ММ3 с возможностью захвата кораблей.
    Добавлено: 15:16 08-03-2012   
4o
 64 EGP


Рейтинг канала: 1(6)
Репутация: 8
Сообщения: 111

Зарегистрирован: 16.01.2011
собственно файлы)

HCF.zip
 Описание:
основной функционал скрипта, автоматизирующего абордажник средней степени отладки) комментарии в архиве
 Имя файла:  HCF.zip
 Размер файла:  20.76 KB
 Скачано:  912 раз(а)
4o SearchEngine.zip
 Описание:
Кучка скриптов по "не сильно читерскому" поиску кораблей
 Имя файла:  4o SearchEngine.zip
 Размер файла:  13.63 KB
 Скачано:  928 раз(а)
    Добавлено: 16:56 08-03-2012   
4o
 64 EGP


Рейтинг канала: 1(6)
Репутация: 8
Сообщения: 111

Зарегистрирован: 16.01.2011
общие комментарии внутри. интерфейса нет - полная совместимость по командам. относительная совместимость по локальным/глобальным переменным (нет проверки я один такой красивый или кто-то эти имена до меня умудрился использовать).

скрипт поиска работает часов 20. в настоящее время пререканий не вызывает. лишних скриптов не вешает (была такая проблемаУлыбка.

единственная вменяемая рекомендация - не искать малые корабли ввиду их большой распростроненности) я ищу так ТЛки для захвата


скрипт абордажника. пока кроме нереализованного функционала погу придумать только одну ошибку:

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

оставим это на совести хтм-щиков. исключение обрабатывается без проблем

еще одна проблема: вложить циклы проверки расстояния и щитов друг в друга) мой косяк)

но даже сейчас если смотреть в сектор и начальное состояние правильное - мне не встретилось пока ни одного случая некорректной работы (хотя дописывать естечвенно будуУлыбка

хотел бы получить фидбэк))

добавлено спустя 36 минут:
да. просьба)))) кто хечет сделать модельку бомбардировщика и бомбы?)) я (надеюсь) в течение месяца начну бомбить капшипы)))

Последний раз редактировалось: 4o (20:11 08-03-2012), всего редактировалось 2 раз(а)
    Добавлено: 20:11 08-03-2012   
4o
 64 EGP


Рейтинг канала: 1(6)
Репутация: 8
Сообщения: 111

Зарегистрирован: 16.01.2011
я задолбался. ну какого хрена долбаный скрипт дижок не хочешь пропускать код:

if char == '=='
else if char == '!='
else if char == '>'
else if char == '<'
else
end

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

мое единственное предположение - в "алфавите" символов для типа string у них нет значений =, !, >, <.

у кого-нибудь есть какие-нибудь соображения? кто-нибудь хочет протестить это на своем скрипт-движке?

добавлено спустя 42 минуты:
долбаная хрень. решение найдено и тривиально.

так как код преобразуется в xml, то <text>'>'</text> (как должно быть) на самом деле пишется <text>'&gt;'</text>. скрипт косячный, при загрузке при проверке скриптов игра выдает ошибку

добавлено спустя 51 минуту:
Ура! ура! ура! это свершилось! я допинал валяющуюся в ногах дохлую тушку задачи.

вот оно! вот оно! ВОТ ОНО:%**! зараза гребаная)

итак. чего это.

начну с предыстории.

в процессе писанины столкнулся с проблемами:

1. мусор глобальных переменных. если забыть имя переменной и забыть ее удалить - она поселится в среде навечно. неприятно.

2. асинхронное взаимодействие разных скриптов. один скрипт может запустить скрипт при условии a == b. если условие не выполняется - се ля ви - в следующий раз проверишь, или входи в цикл ожидания.

3. парили циклы ожидания типа

a = get global var 'string'
while a != b
=wait nnn ms
a = get global var 'string'
end

занимают время, вешают проц и вообще херня собачья.

итак. сабж.
неотлаженная, незаконченная, говнокод, но

библиотека многопоточности для х3 reunion.

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

пока выкладываю код в некой смеси си и недоперебейсика х3 и в xml из скрипт-редактора.

отладной не занимался. только сделал))) выкладываю - чисто для тех, кто захочет покопаться пока я не отладил и не сделал код нечитаемым.

нет скрипта, обеспечивающего интерфейс. неот обработчика ошибок.

в общем все. я иду н*х. с этим долбаным xml-ем все мозги сломал)

добавлено спустя 22 минуты:
todo tist
- скрипт интерфейса
- обработчик ошибок
- скрипт-тестер
- ревизия формата переменной
- добавление типов переменных
- поддержка нескольких нэймлистов
- прямая и косвенная адресация
- возможность запуска нескольких обработчиков/прикрутить обработчик очереди
- полная поддержка блокировки переменных
- написание вызова скрипта в xml
- подумать над прозрачной реализаций
- еще чего-то?
- собственно да. мусоросборщик
- дописывание ненаписанных команд
- почитать про openMP
- разобраться как отлавливать скрипты, висящие на null
- ну и еще всякая херня


разбудите меня через 3 часа)

GH script.zip
 Описание:
недоперебиблиотека многопоточности v.0.0.0.0
 Имя файла:  GH script.zip
 Размер файла:  25.65 KB
 Скачано:  894 раз(а)


Последний раз редактировалось: 4o (14:58 12-03-2012), всего редактировалось 4 раз(а)
    Добавлено: 14:54 12-03-2012   
Xenon J
 946 EGP


Модератор
Рейтинг канала: 11(1674)
Репутация: 161
Сообщения: 3249
Откуда: Ксенонский сектор 472
Зарегистрирован: 30.03.2007
4o, я всё-таки толком и не понял, что за скрипт ты хочешь в конце концов написать.

4o :
1. мусор глобальных переменных. если забыть имя переменной и забыть ее удалить - она поселится в среде навечно. неприятно.
Поставь одну переменную-массив и сливай всё туда. Улыбка
4o :
2. асинхронное взаимодействие разных скриптов. один скрипт может запустить скрипт при условии a == b. если условие не выполняется - се ля ви - в следующий раз проверишь, или входи в цикл ожидания.
А в чем проблема? Как надо?
4o :
3. парили циклы ожидания типа

a = get global var 'string'
while a != b
=wait nnn ms
a = get global var 'string'
end

занимают время, вешают проц и вообще херня собачья.
Время ожидания поставь минут на 10 - и не будет вешать. Ну или вообще обойтись, если это возможно.

4o :
в общем все. я иду н*х. с этим долбаным xml-ем все мозги сломал)
Ничего, когда всё это в обж пихать будешь, станет легче. Гы-гы
4o :
разбудите меня через 3 часа)
Вставай. Гы-гы
_________________
Последний раз редактировалось: Xenon J (23:23 23-03-2023), всего редактировалось 16 раз
    Добавлено: 19:27 12-03-2012   
4o
 64 EGP


Рейтинг канала: 1(6)
Репутация: 8
Сообщения: 111

Зарегистрирован: 16.01.2011
>>> Поставь одну переменную-массив и сливай всё туда.

ну, их разворачивать каждый раз, потом сворачивать. ну нафиг геморой) тут обращение идет "полупрозрачно". да - скрипт запрашивает переменную не из системы, а через вызов скрипта (CMD.getvalue.iName или что-то типа того). Но тем не менее он "прозрачно" не догадыватся, что она на самом деле в системе валяется за именем 4o.[number], где по номеру можно элементарно поставить лимит. и в итоге завпросив руками первые несколько тысяч значений с фильтрацией по типу данных (не null) - получим все висящие в системе глобальные переменные (правда только только от скриптов, работающих через этот обработчикУлыбка. можно и не использовать подмену имени глобалки, а просто вести их список, но это помоему менее надежно. любой сбой обработчика, вызванный шаловливыми руками *меня например* писателей скриптов при недостаточности "защиты от дураков" обработчика - и такой список может повредится.

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

>>>А в чем проблема? Как надо?

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

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


>>>Время ожидания поставь минут на 10 - и не будет вешать. Ну или вообще обойтись, если это возможно.

я совершенно не против ожидания в 10 минут. а вот если тебе надо среагировать с точностью меньше секунды? тогда тебе (относительно времени wait) придется ждать охрененно долгое время (в циклах ожидания) попутно как раз и вешая проц, особенно если таких скриптов несколько.


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

добавлено спустя 18 минут:
сейчас сегодня и завтра херней помаюсь и опишу как оно (предполагается) будет работать)

Последний раз редактировалось: 4o (20:08 12-03-2012), всего редактировалось 1 раз
    Добавлено: 20:08 12-03-2012   
Xenon J
 946 EGP


Модератор
Рейтинг канала: 11(1674)
Репутация: 161
Сообщения: 3249
Откуда: Ксенонский сектор 472
Зарегистрирован: 30.03.2007
4o :
ну, их разворачивать каждый раз, потом сворачивать. ну нафиг геморой)
Какой геморрой? Там две строчки всего. Улыбка
4o :
Но тем не менее он "прозрачно" не догадыватся, что она на самом деле в системе валяется за именем 4o.[number],
Так это от тебя зависит, будет она догаываться или нет. Улыбка
4o :
и в итоге завпросив руками первые несколько тысяч значений с фильтрацией по типу данных (не null)
Не понял, зачем запрашивать все, если можно запросить одну или скока там тебе надо.
4o :
я совершенно не против ожидания в 10 минут. а вот если тебе надо среагировать с точностью меньше секунды?
Тогда запускай скрипт напрямую из скрипта/функции обжа, который устанавливает эту глобальную переменную. Хотя в этой переменной скорее всего не будет необходимости вообще. Улыбка
4o :
так вот суть этой херни в том, чтобы было такое "место", которому поток может сказать "слушай. как вот эта переменная изменится и будет удовлетворять такому-то условию - запусти ка вот такой то скрипт с такими-то параметрами"
Скрипт запускается либо другим скриптом, либо при старте игры, либо игроком через консоль, либо по сигналу. А по переменной - не вижу смысла. Вместо установки переменной в скрипте сделай вызов нужного тебе напрямую. А если срочно не надо - жди 10 мин. и не парься.

4o :
и вообще. про жизнь. я тут слышу, что "иксы не оптимизированы о памяти" и т.д. вот хз) у меня стабильно жрут 300-400 метров при 1700 с копейками на борту. то ли окна не дают больше, то ли "не оптимизированы" значит большое кол-во обращений к памяти (собственно откуда и могут быть тормазы). по кайней мере по памяти иксы совсем не требовательны (мне кажется).
Главная там проблема - это нагрузка на проц из-за неоптимизированных процессов, например функций поиска (кораблей, фабрик, товаров по лучшей цене и т. п.). По десять раз приходится перебирать одни и те же значения. Улыбка

ЗЫЖ А какое практическое применение планируется для этих скриптов? А то какая-то многопоточность (хотя в иксах вроде один поток типа невытесняющей многозадачности), глобальные переменные... Совсем запутался...
_________________
Последний раз редактировалось: Xenon J (23:23 23-03-2023), всего редактировалось 16 раз
    Добавлено: 18:40 13-03-2012   
4o
 64 EGP


Рейтинг канала: 1(6)
Репутация: 8
Сообщения: 111

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

итак. берем синхронное взаимодействие

[img] https://docs.google.com/open?id=0B8mfpw_AqIUELTRyS0d2UHJRRFNLOHFqRjlPYmw1QQ [/img]

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


переходим к асинхронному взаимодействию. имеем те же самые скрипт 1, скрипт 2 (справа - забыл подписать).

есть еще скрипт 3, который выступает связующим звеном.

скрипт 2 доходит до своего тупика из прошлого примера и , вместо того, чтобы ждать, говорит скрипту 3: "мне лень тут неизвестно чего ждать, и чтобы проц не занимать лишний раз, ты меня запусти с лейбла 'resume' как переменная станет 1". скрипт 3 все понял и добавил себе правило, в то время как скрипт 2 вообще вырубился и нет его больше в системе.

потом наступает момент, когда к скрипту 3 обращается скрипт 1 и говорит: "слышал новость? я тут переменную меняю - теперь она будет равна 1". скрипт 3 так обрадовался, что полез и выполнил правило один, которое вернуло к жизни скрипт 2 с лейбла 'resume' - и скрипт снова работает как ни в чем ни бывало.


[img] https://docs.google.com/open?id=0B8mfpw_AqIUEaktiOGJjSkpTYWl3eGd2SXVram5KQQ [/img]

это как раз взаимодействие по сигналам, которое в иксах реализовано очень слабо (точнее по очень ограниченному числу поводов).

хорошо. берем конкретный пример. у меня есть скрипт поиска, который говорит, что ТЛка появилась в "видимой" области сектора.

у меня есть второй скрипт - абордажника, которому надо указать только цель - он сам все сделает.

я и до этого мог их прикрутить один к другому напрямую. но опять же:

1. на скрипте абордажника будет цикл ожидания и среагировать он сможет с точностью времени ожидания. может опаздать например и ТЛка уйдет в дружеский сектор. а отношения портить не хочется.

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

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

добавлено спустя 26 минут:
ладно) по ссылкам пройдете) не дают мне на здесь свой альбом заводить.


так вот. идем дальше.

в данный момент у нас есть 3 команды скрипту 3 (буду звать его просто "обработчиком"):

1. создать правило на переменную
2. изменить переменную
3. запросить значение переменной (этого не было на картинке, но так как имена подменяются - надо).

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

идем дальше. мусоросборка.

вводим еще 4 команды обработчику:

1. register changer for variable 'name'
2. register listener for variable 'name'
3. unreg changer for var
4. unreg listener for var

мне лень рисовать новые картинки в ppt) так что на пальцах.

имеем предыдущую схему взаимодействия. без вырождения ее в синхронную она имеет фиксированый фид:

1. абордажник создал сбе правило в обработчике
2. поиск нашел цель и сообщил ее обработчику
3. обработчик пнул абордажника

теперь дорабатываем:


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


//и даже не важно в какой последовательности это случилось. обработчик для их взаимодействия создал реальную глобальную переменную 'a1'

//дальше уже как и в прошлый раз:

2. абордажник создал правило
3. посик нашел и пнул обработчик
4. обработчик пнул абордажника.

//допустим теперь, что оба скрипта не в бесконечном цикле маринуются, а вырубаются после первого успешного прохода. ну и как приличные люди - оповещают об этом обработчик

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

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

в итоге получаем:

в скрипте поиска:

001. register changer for var 'name'
...

nnn run script [обработчик] to change var 'name' value '1'

eee unregister changer for var 'name'


абордажник:


001. register listener for var 'name'

...

... run script [обработчик] and set rule for var 'name'

... return null

... label 'resume'

...
...
... unreg listener for var 'name'
... return null (full stop)

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



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

добавлено спустя 43 минуты:
ну все. сейчас вы меня совсем записанете.

идем дальше.

наглядное пособие:

https://docs.google.com/open?id=0B8mfpw_AqIUES1ZPTVlnSWRRRGFaSE41LXYtNktiQQ


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

тогда естественный выход создать очередь.

скрипт абордажника не уйдет в ожидание цели (оповестив об этом обработчик) пока не обработает все цели из очереди. потом он вырубается и оставляет обработчику записку "запусти меня "если что"".

конкретная ситуация:

1. поиск нашел цель. пнул обработчика
2. обработчик:
а) добавил цель в очередь (правило 1)
б) пнул абордажник, тот как еж из анекдота сразу полетел захватывать (правило 2)

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

3. пока абордажник еще не вернулися - поиск нашел еще одну цель и сказал об этом обработчику
4. обработчик в отсутствии правил на запуск абордажников просто добавляет цель в очередь. (правило 1)

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

усложняем картинку.

спускаемся до уровня кода:


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

но возможна другая ситуация:

1. абордажник считал очередь из переменной.
2. абордажник полетел ее захватывать

2.1 в это время обработчик обновил очередь в глобальной переменной

3. абордажник захватил цель, убрал ее из очереди (своей приватной переменной)
4. абордажник обновил очередь в глобальной переменной (при этом переписав изменения обработчика)

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

поэтому берем здравую мысль, до которой люди уже давно додумались:

1. абордажник считал очередь
2. полетел захватывать

2.1 обработчик заблокировал очередь от записи
2.2 добавил в очередь новую цель
2.3 разблокировал очередь от записи

3. абордажник захватил цель
4. заблокировал от записи очередь (он писать в нее возможно будет)
5. считал очередь
6. нашел в ней свою цель
7. убил цель в очереди
8. скинул свою приватную очередь в глобальную переменную
9. разблокировал очередь от записи


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

здесь как раз циклы ожидания (пока не разблокируется переменная) - нормально, так как время рассчитывается в сотнях циклов процессора.

это хорошо еще если цель просто пройдет мимо. а если есть 2 абордажника?

1. аб1 считал очередь
2. аб2 считал очередь
3. аб1 обновил очередь
4. аб2 абновил очередь

в итоге цель 1го абордажника осталась в очереди, так как она была в очереди, которую считал 2й абордажник. и он не в курсе, что там был еще первый, который до него эту цель обработал.

в итоге в очереди появляется "неизвестный объект".

добавлено спустя 13 минут:
думали все?))) нееет) идем еще дальше.


а как первый скрипт (поиск) будет запускать обработчик?


1. поиск нашел цель
2. пнул обработчик
3. поиск через 1 мс нашел другую цель (обработчик еще обрабатывает 1ю цель - например ждет разблокировки какой-нибудь переменной)
4. поиск пнул обработчика еще раз.

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

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

обработчик запускается и обрабатывает все события очереди, потом вырубается.

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

причем эта проверка не будет проводится скриптом поиска. она будет включена в скрипт-интерфейс самого обработчика.

в итоге получаем:

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

на выходе:
1. нет циклов ожидания
2. скрипты запускаются точно вовремя - тогда, когда меняется переменная
3. нет мусора глобальных переменных - он убирается автоматически


пошли помидоры....

Последний раз редактировалось: 4o (01:39 14-03-2012), всего редактировалось 7 раз(а)
    Добавлено: 01:21 14-03-2012   
Xenon J
 946 EGP


Модератор
Рейтинг канала: 11(1674)
Репутация: 161
Сообщения: 3249
Откуда: Ксенонский сектор 472
Зарегистрирован: 30.03.2007
4o :
итак. я возможно буду местами нести бред, потому, что буду вставлять себе мозг)
А мне выносить. Ой, не могу!.. Чего-то пошла уже совсем высшая программистская математика, какие-то производные и интегралы... Ой, не могу!..
4o :
1. на скрипте абордажника будет цикл ожидания и среагировать он сможет с точностью времени ожидания. может опаздать например и ТЛка уйдет в дружеский сектор. а отношения портить не хочется.
Да ну? Далеко ли улетит ТЛ-ка за 1 минуту? Улыбка
4o :
это как раз взаимодействие по сигналам, которое в иксах реализовано очень слабо (точнее по очень ограниченному числу поводов).
А каких поводов тебе не хватает? Если присвоение глобальной переменной - то всё равно придётся все скрипты перебирать, чтобы послать им этот сигнал. Улыбка
4o :
2. вопрос философский - скрипт поиска - удобная вещь. и если я захочу к нему прикрутить еще что-нибудь, то мне его придется переписывать.
А чем соответствующая команда поиска не устраивает? Она работает быстрее, чем скрипт.
4o :
каким скриптом убивать глобалку,
Никаким. Глобалка не убивается, можно только значение в нулл выставить.

4o :
итак. в предыдущем примере есть один косяк. если поиск нашел цель для абордажника, а в настоящий момент нет свободных абордажников (все улетели на предыдущие цели), то цель пройдет мимо и никто ее не заметит.
Короче, я так понимаю, практическая задача состоит в том, чтобы дать пиратам абордажники, на которых они будут хапать корабли. Улыбка В таком случае, как я понимаю, корабли ищутся в зоне видимости, след-но, поиск надо осуществлять каждый раз для каждого корабля. Поэтому один хрен, где их поставить - на глобальном скрипте или скрипте абордажника. Список целей как глобальную переменную можно корректировать самим скриптом абордажника.
Т. е. алгоритм примерно такой: сперва в скрипте ставим команду Захват (её сам сделаешь Гы-гы ), затем переходишь к обычному бесконечному циклу. Первым делом - поиск жертвы, с флагами Вражебный-Видимый-Рандомный например. Нашёл - ищешь все абордажники с такой же целью команды. Для ускорения их можешь записать в глоб. переменную. Если нет, значит жертва свободна, ставишь её в качестве цели команды и переходишь к захвату. Ну и попутные стандартные проверочки типа там существует ли она и т. п.
Захватил - начинай сначала. Ну или послоняйся по сектору, проверь там оборудование, щиты и т. п. Вот хоть убей не пойму, чем тебя такой вариант не устраивает.
Цитата:
я вообще удивляюсь как при дикой многопоточности в иксах
Нет в иксах никакой многопоточности. Всё идет одним махом, по очереди между промежутками в скриптах и командах. Прежде всего это те, которые отмечены буквой @, типа ожидать, лететь куда-то, бездействовать и т. п. Когда один скрипт ждёт, работает второй, потом третий и т. д.
_________________
Последний раз редактировалось: Xenon J (23:23 23-03-2023), всего редактировалось 16 раз
    Добавлено: 16:12 14-03-2012   
4o
 64 EGP


Рейтинг канала: 1(6)
Репутация: 8
Сообщения: 111

Зарегистрирован: 16.01.2011
в общем) я о фоме, ты о ереме.

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

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

про то, что глобалка не убивается - вопрос опять философский. с точки зрения скриптера - нет команды на убийство переменной. она как раз и убивается когда ей присваиваешь значение нуль. говорим об одном и том же, только кто-то в профиль)
    Добавлено: 08:01 15-03-2012   
Xenon J
 946 EGP


Модератор
Рейтинг канала: 11(1674)
Репутация: 161
Сообщения: 3249
Откуда: Ксенонский сектор 472
Зарегистрирован: 30.03.2007
4o :
про то, что глобалка не убивается - вопрос опять философский.
Вопрос сугубо практический и ответ на него подтверждён профессионалами по анализу кода обжа. Улыбка
4o :
она как раз и убивается когда ей присваиваешь значение нуль.
Имя-то переменной остаётся. Полностью стереть означает убрать имя из списка, и значение соот-но тоже.
_________________
Последний раз редактировалось: Xenon J (23:23 23-03-2023), всего редактировалось 16 раз
    Добавлено: 10:55 15-03-2012   
4o
 64 EGP


Рейтинг канала: 1(6)
Репутация: 8
Сообщения: 111

Зарегистрирован: 16.01.2011
ээээ. тобеж однажды присвоив переменной какое-то значение, сама переменная так и так навсегда будет висеть в системе даже с нулелевым значением? бред. я думал ее убийство просто скрыто за скрипт-движком.

Последний раз редактировалось: 4o (12:39 15-03-2012), всего редактировалось 1 раз
    Добавлено: 12:36 15-03-2012   
Xenon J
 946 EGP


Модератор
Рейтинг канала: 11(1674)
Репутация: 161
Сообщения: 3249
Откуда: Ксенонский сектор 472
Зарегистрирован: 30.03.2007
4o :
ээээ. тобеж однажды присвоив переменной какое-то значение, сама переменная так и так навсегда будет висеть в системе даже с нулелевым значением? бред.
Полный. Но это уже вопрос к Егософту.
_________________
Последний раз редактировалось: Xenon J (23:23 23-03-2023), всего редактировалось 16 раз
    Добавлено: 15:37 15-03-2012   
4o
 64 EGP


Рейтинг канала: 1(6)
Репутация: 8
Сообщения: 111

Зарегистрирован: 16.01.2011
в общем) меня засосала опасная трясина. потихоньку допинываю скрипты прицепления MFC к шкафу.

знающие люди, просвятите. какими неприятностями сулит висение корабля в секторе null? есть идея туда повешать по 1 кажого типа MFC чтобы в любой момент можно было выбрать что и из чего производить даже если этого не валяется на корабле.
    Добавлено: 09:27 29-03-2012   
4o
 64 EGP


Рейтинг канала: 1(6)
Репутация: 8
Сообщения: 111

Зарегистрирован: 16.01.2011
кому там надо было захват станций стандартными средствами?)

1. plugin.чего-то\ там.cap:
изменить аргумент target с перем/корабль на перем/корабль/станция

2. plugin.XTM.lib.чего-нибудь\ еще.GetShipVariables:
в список
Код:
if target is of class ..
else if target is of class


добавляем:
Код:
esle if target is of class 'station'
    $Class = 'TS' /*или любое,что можно захватывать - чтобы ошибка не вылезла*/
    $Combat.Size = /*если я правильно помню комменты в скрипте - изначально хотелось им сделать кол-во захватчиков сделать функцией от размера корабля. не помню точно, используется ли в захвате. может еще в каких скриптах используется. я поставил 25 - если чего)*/
    $Defence.Level = /*кол-во защитников, которое вы хотите видеть на станции. потом еще оно будет скорректировано на силу расы.*/


главное зарихать в то место) там идет проверка на общий класс (малый корабль, малый транспорт, и т.д. именно в этот список надо запихивать), а потом внутри общего класса идет проверка на конкретный класс (для истребителей например - на м5/м4/м3. сюда пихать соответственно не надо).

усе - у меня после этого пошел захват как и для всего остального

приятного аппетита. надо кинуть файлы?

добавлено спустя 11 минут:
да - если кому поможет)) то, с чем не помню уже кто сталкивался (да простит меня форумУлыбка когда писал запуск захвата с горячей клавиши:

скрипт plugin.XTM.чего-нибудь.cap
жрет параметр "корабль и товар". тип этой переменной отнюдь не DATATYPE WARE, а DATATYPE ARRAY: [DATATYPE WARE, DATATYPE SHIP]. т.е. тупо взять массив и сначала в него запихать товар, а потом корабль (если через append). ... или наоборот?)) не суть)

да) совсем забыл))))
когда кто будет перепиливать скрипт захвата - пилите так же скрипт клонирования))) то у вас станция превратится в тыкву, причем не дожидаясь полночи)))) по хорошему его там серьезно надо пилить, но его можно поставить заплатку - в одном из скриптов (на помять - plugin.чего-нибудь.Task) в точке где происходит вызов скрипта клонирования поставить:
Код:
 skif if target ( или THIS в зависимости от контекста) is of class 'station'


чтобы тупо не клонировалась. то если все-таки пилить - надо запоминать со станции продукты и ресурсы и добавлять их на клонированную станцию)

Последний раз редактировалось: 4o (23:09 29-03-2012), всего редактировалось 6 раз(а)
    Добавлено: 18:07 29-03-2012   
Канал X3: Reunion -> Модовый и скриптовый отсек X3: Reunion: «мысли вслух»
На страницу: 1, 2, 3, 4, 5  След. | Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Мы не мазохисты. Мы романтики. (объяснила Helga)

  » мысли вслух | страница 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