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

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

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

   Страница 1 из 1
 
Поиск в этой теме:
Канал X3: Reunion » Модовый и скриптовый отсек X3: Reunion: «Как пользоваться внешними переменными: пособие для детей»
4o
 64 EGP


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

Зарегистрирован: 16.01.2011
-Редистка! Гадость! А! А! Тьфу!
-Спокойствие, только спокойствие. малыш, так и было задуманно.

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

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

Если я правильно понял, то в реюнионе нет глобальных переменных) есть глобальные ссылки, которые (надеюсь) изредка превращаются в переменные.

Суть.
Внешние переменные по идее используются для взаимодействия скриптов (другого применения я пока не придумал)). тоесть есть 2 скрипта, полтьзующие 1 переменную.

Ситуация.
Есть скрипт1
Код:
...
a=value
object1->set local var name 'name' value $a
...
start script2 with arg 'name'


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

есть скрипт2
Код:
...arg1 = 'name' //вот так скрипт2 узнал про то, где халява валяется
...
PrettyGirls = object1-> get local var 'name' //и он как только смог - сразу полез на размерность массива смотреть.
SIZE = size of PrettyGirls //никакой смысловой нагрузки на строчку. просто захотелось ему посмотреть размер)

...

onePrettyGirl = girl //а у второго скрипта, пока он работал, тоже завелась одна красивая девушка.

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

append onePrettyGirl to array PrettyGirls //вот он это делает.

//потом навалилась на него работа, дела. пришлось заниматься какой-то фигней, которую его припахали делать.

=wait 60000 ms //и наконец у него нашлась свободная минутка

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

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

indexOnePrettyGirl = get index of element 'prettiestGirl' in array PrettyGirls

//вернули ему адрес той самой. а он смотрит

write to player logbook printf 'prettiest girl index is %s, 'indexOnePrettyGirl'

сообщение от: Неизвестно

prettiest girl index is -1

//а девушки то нет... кто? когда? как? это же моя личная истинно локальная переменная! какого хрена кто туда и вообще как смог залезть и спереть?!


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

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

Код:
array = object->get local var name 'name'
or
array = get global var name 'name'
// прочитал внешние данные

size = get size array 'array'
localАrray = array alloc size $size
//создай свою переменную

size = size-1
copy array array index 0 ... size to array localArray index 0...size
//и копируй чужую переменную в свою переменную. чтоб никто не уволок)


добавлено спустя 33 минуты:
сказка вторая: про фокусников.

[code]пошел скрипт3 на тусовку скриптов. и видит:два фокусника (скрипт1 и скрипт2) чудеса творят неведомые. решил подойти посмотреть, что за хрень там у них происходит.

//скрипт3: чего делаете, коллеги?
//скрипт2 и скрипт1: фокусы показываем. вот смотри - магическая шляпа magic_hat. заглянив в нее.

скрипт3:
whatIsInside = get global var name 'magic_hat'
write to player logbook value 'whatIsInside'

сообщение от: Неизвестно

null

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

//скрипт3:херня. не верю. давай показывай.

скрипт1:
object = bunny
set global var name 'magic_hat' value $object

//скрипт1: на, смотри)) раз не веришь

скрипт3:
whatIsInside = get global var name 'magic_hat'
write to player logbook value 'whatIsInside'

сообщение от: Неизвестно

bunny

//скрипт3: круто. как это ты так. а еще слабо?

скрипт2:
object = playBoyBunny
set global var name 'magic_hat' value $object

//скрипт2: да пожалуйста

скрипт3:
whatIsInside = get global var name 'magic_hat'
write to player logbook value 'whatIsInside'

сообщение от: Неизвестно

playBoyBunny

//скрипт3: не, не, не. знаю я вас всякую порнографию из шляп вытаскивать. а без колдовства слабо? руки на стол и рукава засучить!

//скрипт2 и скрипт1:да без проблем. проверь шляпу.


скрипт3:
whatIsInside = get global var name 'magic_hat'
write to player logbook value 'whatIsInside'

сообщение от: Неизвестно

null

//скрипт3: пусто

//скрипт2 и скрипт1:а вот теперь ты два раза из нее достанешь зайшев, а мы ничего делать не будем. нука давай

скрипт3:
whatIsInside = get global var name 'magic_hat'
write to player logbook value 'whatIsInside'

сообщение от: Неизвестно

bunny

whatIsInside = get global var name 'magic_hat'
write to player logbook value 'whatIsInside'

сообщение от: Неизвестно

playBoyBunny

//скрипт стоит и не может ничего понять - как же там из ничего зайцы плодятся. и не заметил он как десятком строк раньше скрипты 1 и 2 свалили нафиг

//скрипт1: return 'скрипт3 - лопух'
//скрипт2: return 'еще какой'

добавлено спустя 17 минут:
сказка 3. короткая. про то, как радио читали

[code]скрипт1: a = radioTransaction
set global var 'radio' value a

скрипт2:readRadio = get global var 'radio'

скрипт1: a = 'позавчера вечером в Аргон Прайм на торговой станции произошло самопроизвольное возгорание кислородных балонов в стыковочном отсеке номер 666. по словам пострадавших работников стыковочного отсека - тех немногих, которых удалось привести в себя к настоящему моменту - по всей видемости в стыковочном отсеке находился транпорт с космотравой. этот случай стал бесперецендентным провалом для спасательных бригад всего сектора, так как пожар до сих пор не потушен. население станции живым щитом заслонило все остальные стыковочные отсеки и всеми силами препятствует любым попыткам потушить огонь. для рашения сложной ситуации было принято решение привлечь специалистов расы Сплит, так как согласно последней радиопередаче со станции, ее население возомнило себя космомухами и завтра, если правда не будет шквального ветра с градом, собирается выйти в открытый космос и поиграть со своими собратьями. '

скрипт2:write to player logbook value $readRadio

сообщение от: Неизвестно

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

скрипт2:везет же людям...

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

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

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

добавлено спустя 33 минуты:
а вот посленего даже я от себя не ожидал.

впринципе, если закрыть глаза на неэффективность, то...

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

или реализовать TCI/IP)

Последний раз редактировалось: 4o (09:37 30-03-2012), всего редактировалось 9 раз(а)
    Добавлено: 09:37 30-03-2012   
SergejU
 72 EGP


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

Внешние переменные по идее используются для взаимодействия скриптов (другого применения я пока не придумал)). тоесть есть 2 скрипта, полтьзующие 1 переменную.


Похоже что и для хранения в сейве данных о наличии объекта во вселенной.
Используется одним и тем же скриптом.
    Добавлено: 07:38 31-03-2012   
4o
 64 EGP


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

Зарегистрирован: 16.01.2011
не допер. можно еще раз?)
    Добавлено: 08:33 31-03-2012   
SergejU
 72 EGP


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


Скрипт создания тренировочного корабля создает корабль,присваивает его глобальной переменной и затем по ней проверяет наличие корабля если он уничтожен создает заново и снова присваивает глобальной переменной.
    Добавлено: 08:33 01-04-2012   
4o
 64 EGP


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

Зарегистрирован: 16.01.2011
а - ну типа того. только почему бы не прицепить SIGNAL_KILLED тренировочного корабля к скрипту (пусть будет пресловутый script1) создания нового тренировочного корабля)

ну если хочется все-таки запустить дефолтный скрипт сигнала, то из script1 можно его руками вызвать после вызова скрипта на создание нового тренировочного корабля.
    Добавлено: 08:41 01-04-2012   
4o
 64 EGP


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

Зарегистрирован: 16.01.2011
продолжаем тему для тех, кто "если вдруг такие же".

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

входные данные:

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

-goods.dev.source
-goods.dev.destination
-goods.dev.product
-goods.dev.product.price

(кстати, там есть переменная для полки по доставке (дефолт 5% и интерфейса к ней я не нашел)

решение первое.

берем все переменные со снабженца, пакуем в массив и кинаем в локалку на станции приписки.

конкретно:

скрипт 1 - скинуть переменные на станцию
скрипт 2 - загрузить конфиг со станции

косяк

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

и получаем на выходе:

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

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

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

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

результативное решение, не пренетдующее на оптмальность

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

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

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

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

как доберусь до компа - выкину скрипты.
    Добавлено: 15:44 07-04-2012   
4o
 64 EGP


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

Зарегистрирован: 16.01.2011
все это чтобы обойти логику внутреннего снабжения по поределению типа (производитель/потребитель) станции.

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

a.task.goods.dev.add.dest.xml - добавить потребителя
a.task.goods.dev.add.product.xml - добавить продукт с ценой 0. насколько я понимаю, можно пользовать и стандартное добавление товаров
a.task.goods.dev.add.source.xml - добавить производителя
a.task.goods.dev.download.conf.xml - считать со станции конфиг
a.task.goods.dev.ship.upd.conf.xml
a.task.goods.dev.st.upd.conf.xml
a.task.goods.dev.upd.config.xml
a.task.goods.dev.upload.config.xml - загрузить на станцию конфиг

приятного аппетита

3.zip
 Описание:
скрипты к внутреннему снабженцу
 Имя файла:  3.zip
 Размер файла:  9.79 KB
 Скачано:  551 раз(а)
    Добавлено: 09:13 12-04-2012   
Канал X3: Reunion -> Модовый и скриптовый отсек X3: Reunion: «Как пользоваться внешними переменными: пособие для детей»
 
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: День открытий: два года думала, что Рыб - это негр из Африки, которого французское посольство отправило учиться в Россию... (MeLeK)

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