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

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

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

   Страница 2 из 3
На страницу: Пред.  1, 2, 3  След. | Все страницы
Поиск в этой теме:
Канал X2: The Threat: «Торговля скриптами»
akm
 470 EGP


Рейтинг канала: 1(4)
Репутация: 173
Сообщения: 1638
Откуда: Паразит Прайм
Зарегистрирован: 23.10.2002
Dusk :
55. Если не нашли, опять ищем станцию, но уже по умному(наверное).

Нет. В строке 53 поиск среди фабрик, в строке 55 - среди торговых станций.

Цитата:
Летим к станции

Никуда мы не летим, т.к. "16 [THIS] -> set destination to $station" просто устанавливает переменную destination = переданному в функцию параметру $station. А летим в строке 41.


Цитата:
49. Если мы ни фига не получили и есть команда "ни шагу назад",
мы опять идем в "!trade.loop.getwarebest"
(* nothing bought, then return if requested and do not fly home)
...
Летим домой

Нет Т.к. скрипт "trade.getwareandreturnhome" вызван с параметром "stay if unable to buy = TRUE", то возврат (49.return -1) и ищем другую станцию для закупки. Если нашли - летим туда (опять же после 10-20сек тупого ожидания на "пустой" станции). Т.е. я в п.7 был в корне не прав. Приношу извинения - время было позднее, голова к концу рабочего дня плохо варит Улыбка

akm :
3. То количество ресурса, за которым он полетит, определяется в момент, когда он еще дома.

Дополнение: если транспорту не удалось закупиться с первой попытки, то идет перерасчет необходимого объема ресурса для закупки, т.е. п. 3 и 4 согласно текущему состоянию фабрики (но только в моменты непосредственно после "обломов" - потом опять летим на след. ф-ку и покупаем столько, сколько решили покупать еще перед вылетом. Если опять обламываемся - опять запоминаем новое значение $amount)

"Писателей" скриптов я тоже рано похвалил. Там можно треть команд выкинуть и еще треть вынести из цикла (чтобы не проверять всякую х-ню которая и не меняется с каждым новым циклом). Вот примеры. Скрипт "trade.getwareandreturnhome" :
1) Нахрена строки 7-14, если мы уже разгрузились в "!trade.loop.getwarebest"? Разозлен

2) Вот еще вам задачка. Каков будет результат выполнения кода что ниже? Примечание: $amount - это параметр, переданный скрипту и он не модифицируется абсолютно ни в одной из строк, кроме приведенных ниже, и он всегда >0.
Код:
001   [THIS] -> set wanted ware count to $amount
........
031   if $amount > 0
032      $wantedamount = [THIS] -> get wanted ware count
033      skip if $amount >= $wantedamount
034         $amount = $wantedamount
035   else
036      $amount = [THIS] -> get free amount of ware $ware in cargo bay
037   end

Правильный ответ: ничего эти строки не делают вообще!!! Разозлен Т.к. строки 34 и 36 попросту никогда не выполняются.

Цитата:
А теперь момент: Летают 2 транспорта за батарейками.
Один тарнспорт привозит товар на свою базу. Второй летит за товаром,
прилетает, ОПА, товара нет. Е. Смотрит, а на 21,22 - так ведь уже не надо
нихрена. И что делает - переходит на 006. И так пока беза снова не нужен
будет товар. Т.е. остается на левой базе.

Да. Вот и ответ автору топика. А что делать - писать самим нормальные скрипты. Вот только ничего особо продвинутого не напишешь (и без того игра тормозит). Хотя, одно Эгософт сделал прально: разделил пользовательские и неписевские скрипты. Т.е. на данный момент они одинаковы, но можно, скажем модифицировать пользовательский скрипт и не трогать std-скрипт, а еще лучше значительно упростить и оптимизировать последний - гарантирую: тормозов в игре убавится!

Еще огорчает то, что доступа к самой Script Engine у нас нет. Т.е. к примеру имеем проблему оптимального выбора маршрута, которую изложил AFor. И вот как ее пофиксить, если команду
get next sector on route from sector [SECTOR] to sector $targetsector
мы модифицировать не можем? Расстроен Мы конечно ее можем заменить на свой скрипт, но для поиска маршрута придется создать массив всех секторов и гейтов в этом скрипте(!) и сделать свой алгоритм поиска (он не слишком сложен, но все же будет довольно ресурсоемок учитывая размерчик массива-карты).

Dimaxx :
Короче, работы непочатый край...

Это уж точно! Но работать пока возможности толком и нет (не охота каждый раз начинать новую игру, строить по-новой фабрику, тестить очередную редакцию скрипта, и т.д.). Ждем патча. Есть маленькая надежда, что они сделают загрузку скриптов именно из папки Scripts, иначе те фичи, что они обещали, работать попросту не будут.
    Добавлено: 07:42 17-12-2003   
Dusk
 200 EGP


Репутация: 61
Сообщения: 412
Откуда: SPB
Зарегистрирован: 30.11.2003
--------------------------------------
Скрипт "trade.getwareandreturnhome" :
1) Нахрена строки 7-14, если мы уже разгрузились в "!trade.loop.getwarebest"?
--------------------------------------

Скрипт "trade.getwareandreturnhome" вызывается не только из "!trade.loop.getwarebest", это только для кораблей игрока, NPC же работают со скриптом "!ship.cmd.getware.std.xml", а там больше ничего нет, акромя вызова "trade.getwareandreturnhome". Для игрока эти строчки действительно нафиг не нужны, а вот NPC пригодятся Хы...

-----------------------------------------------------
2) Вот еще вам задачка. Каков будет результат выполнения кода что ниже? Примечание: $amount - это параметр, переданный скрипту и он не модифицируется абсолютно ни в одной из строк, кроме приведенных ниже, и он всегда >0.

Код:
001 [THIS] -> set wanted ware count to $amount
........
031 if $amount > 0
032 $wantedamount = [THIS] -> get wanted ware count
033 skip if $amount >= $wantedamount
034 $amount = $wantedamount
035 else
036 $amount = [THIS] -> get free amount of ware $ware in cargo bay
037 end

Правильный ответ: ничего эти строки не делают вообще!!!Т.к. строки 34 и 36 попросту никогда не выполняются.
-----------------------------------------------------

По моему так:
001.Задаем целью для переменной $amount содержать значение желаемого товара, т.е. как бы задаем и тип, и присваиваем ей значение,
которое извлекается из переданного в качестве параметра данному скрипты значения..
...
031. Если мы вообще что-то хотим купить, то
032. $wantedamount = конкретно, сколько(количество) товара мы вообще хотим купить на текущий момент.
033. Если то количество, которое мы хотели купить раньше, больше, того, что мы хотим купить сейчас, то пропускаем строчку 34. (Т.е. если пока мы летели на станцию, товара на homebase никто на привез, а он там выработался, то мы обновляем счетчик $amount в строке 34)
34. Обновляем счетчик 34 в связи с текущим значением. И переходим на 37.
35. Если мы вообще ничего не хотим купить, то
36. $amount = загружаемся по самые помидоры. Т.е. сколько товара в каргобее свободно. Вау!
37. end.
Я так думаю что команда Buy работает с типизированными переменными, типа "count" или "ware".

А вообще если у кого есть какие соображения по этому поводу, или какая критика, будет здорово.
Ибо полной документации все равно нет Расстроен

-----------------------------------------------
Нет. В строке 53 поиск среди фабрик, в строке 55 - среди торговых станций.
----------------------------------------------

Сенькс Улыбка

----------------------------------------------
Никуда мы не летим, т.к. "16 [THIS] -> set destination to $station" просто устанавливает переменную destination = переданному в функцию параметру $station. А летим в строке 41.
-----------------------------------------------

Да я знаю это. Поскольку летим мы в цикле, то под словом "летим" я подразумевал весь цикл. А т.к. покупаем мы в том же цикле, я не стал посреди слова "летим" вставлять "покупаем" Хы..., а написал его после. Думал догадаешься, что я имел в виду, хотя я наверно несовсем правильно написал с точки зрения алгоритма, но я имел в виду смысл.
    Добавлено: 13:14 17-12-2003   
Grebomet
 1469 EGP


Модератор
Рейтинг канала: 2(22)
Репутация: 261
Сообщения: 4790
Откуда: Питербурх
Зарегистрирован: 06.01.2003
Dusk :
36. $amount = загружаемся по самые помидоры. Т.е. сколько товара в каргобее свободно.

Я так понимаю, $amount - это сколько товара корабль должен ПРИВЕЗТИ на станцию. Посему строка 36 должна звучать так:

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

Кстати, очень даже мудрая мысль, т.к. не дает транспорту "зависнуть" на чужой фабрике, если его трюм вдруг чудесным образом пополнился нужным товаром.
_________________
Классическая ошибка, которую совершают проектировщики абсолютно надежных систем, – недооценка изобретательности клинических идиотов.
    Добавлено: 15:59 17-12-2003   
ZViruS
 150 EGP


Репутация: 20
Сообщения: 492
Откуда: Украина, Херсон
Зарегистрирован: 10.11.2003
в патчике 1.1. лежат скрипты
!trade.loop.getwarebest.pck
!trade.loop.sellwarebest.pck
!trade.sellwareandreturnhome.pck
!trade.getwareandreturnhome.pck
!init.ship.globalscriptmap.pl.pck
!fight.attack.object.pck
!fight.invasion.pck
!init.ship.commandupgrade.pck
!ship.signal.attacked.ts.pck
!ship.signal.followerneedshelp.pck

Чет они тама поисправляли. И еще куча всякой лабуды. Включая новые загрузочные заставки Улыбка

Если нуна могу привести перечень.
_________________
Горят над нами, горят,
Помрачая рассудок.
Бриллиантовые дороги
В темное время суток.
    Добавлено: 16:36 17-12-2003   
ASKirilL
 1220 EGP


Собака Павлова
Репутация: 302
Сообщения: 8209
Откуда: Москва
Зарегистрирован: 21.03.2003
akm :
Есть маленькая надежда, что они сделают загрузку скриптов именно из папки Scripts, иначе те фичи, что они обещали, работать попросту не будут.

Гы.... А он навернож неспроста будить с сейвом что-то мутить...
Хорошо, если будет удалять из него скрипты, и начинать после этого грузать из папки скриптов...
А если он просто в сайве заменит старые скрипты на новые??....
_________________
Павлов - собака.
    Добавлено: 16:55 17-12-2003   
Keynol
 130 EGP


Репутация: 11
Сообщения: 358

Зарегистрирован: 05.07.2001
AFor
Ага Улыбка Приведи
    Добавлено: 17:04 17-12-2003   
akm
 470 EGP


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

"wanted ware count" - это просто имя переменной, одной переменной из трех слов! Пробелы в имени допустимы. Декларировать тип переменной в скриптах Х2 вообще не нужно!

Т.е. после строки 32 имеем фактически $wantedamount = $amount и строка 34 никогда не выполняется, а проверка в 33 - бесполезна.

Насчет 36 правильно Grebomet заметил:
Цитата:
036 Установить количество товара, который нужно привезти на станцию, равным имеющемуся на данный момент количеству этого товара в трюме.

Почти верно, только видимо опечатка: не имеющемуся а отсутствующему (свободному).

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

Нет Неа. Строка 036 выполнится только если скрипт "trade.getwareandreturnhome" был вызван с параметром $amount <= 0. И как такое вообще возможно - непонятно. Очередная защита от глюксов. В общем то, в приведенных мной примерах кода есть смысл, но только если $amount = 0.

В общем ИМХО надо сначала отделить мух от котлет. Т.е. пользовательские pl-скрипты - отдельно, неписевские std - отдельно. Тогда можно будет их здорово оптимизнуть и функционально улучшить.
    Добавлено: 17:30 17-12-2003   
akm
 470 EGP


Рейтинг канала: 1(4)
Репутация: 173
Сообщения: 1638
Откуда: Паразит Прайм
Зарегистрирован: 23.10.2002
2 AFor
Давай в этой темке только про скрипты, причем только торговые?

Привожу отличия новых скриптов (патч 1.1) от старых 1.0.

Script !trade.loop.getwarebest
Код:
006   while 1
007 @  = wait randomly from 7000 to 15000 ms

заменили на

006   $waittime = 1
007   while 1
008 @  = wait $waittime ms
009    $waittime = random value from 7000 to 15000 - 1

Код:
014   * before doing amount calculation, try to unload already loaded ware
015    if $homebase == [DOCKEDAT]
016     $amount = [THIS] -> get true amount of ware $ware in cargo bay
017     skip if not $amount
018      = [THIS] -> unload $amount units of $ware
019    end

заменили на

016   * before doing amount calculation, try to unload already loaded ware
017    $amount = [THIS] -> get true amount of ware $ware in cargo bay
018    if $amount
019     if $homebase == [DOCKEDAT]
020      = [THIS] -> unload $amount units of $ware
021     else
022   * fly home and unload
023 @    = [THIS] -> call script '!trade.getwareandreturnhome' :  ware=$ware  destination station=null  amount=$amount  max.price=null  stay if unable to buy=null
024      continue
025     end
026    end

Других изменений нет. Поехали дальше (буду добавлять потихоньку, анализ - потом)

Script !trade.getwareandreturnhome
Код:
007   if [DOCKEDAT] == [HOMEBASE]
008    $wantedamount = [THIS] -> get true amount of ware $ware in cargo bay
009    skip if not $wantedamount
010     = [THIS] -> unload $wantedamount units of $ware
011   end
012   
013   skip if [THIS] -> get free amount of ware $ware in cargo bay
014    return 1

заменили на

007   $wantedamount = [THIS] -> get true amount of ware $ware in cargo bay
008   if [DOCKEDAT] == [HOMEBASE] AND $wantedamount
009    = [THIS] -> unload $wantedamount units of $ware
010    $wantedamount = 0
011   end
012   
013   $gotamount = 0
014   if not [THIS] -> get free amount of ware $ware in cargo bay
015    if $wantedamount
016   * fly home and unload
017     $station = null
018     $gotamount = $wantedamount
019    else
020     return 1
021    end
022   end

удалили строку
018   $gotamount = 0

Больше ничего в скриптах закупки не менялось!
    Добавлено: 19:00 17-12-2003   
Aggtaa
 120 EGP


Репутация: 8
Сообщения: 93
Откуда: Питер
Зарегистрирован: 08.12.2003
ты кидай с расцветкой, как diff выдает. так читать проще.
_________________
Aggtaa
    Добавлено: 19:13 17-12-2003   
akm
 470 EGP


Рейтинг канала: 1(4)
Репутация: 173
Сообщения: 1638
Откуда: Паразит Прайм
Зарегистрирован: 23.10.2002
Т.е. по сути в алгоритм закупки патч вносит лишь две вещи:
1) Новый механизм задержек wait. Как он работает - не совсем понятно.
2) Где бы не был наш транспорт, если у него на борту есть хоть единица груза (за покупкой которого он полетел), он вернется на базу и разгрузится.

Т.е. те проблемы, что обсуждались выше в этой теме, патч 1.1 не решает!
    Добавлено: 19:35 17-12-2003   
Aggtaa
 120 EGP


Репутация: 8
Сообщения: 93
Откуда: Питер
Зарегистрирован: 08.12.2003
akm :
006 $waittime = 1
007 while 1
008 @ = wait $waittime ms
009 $waittime = random value from 7000 to 15000 - 1


Работает так же, за исключением того, что корабль теперь реагирует на приказ сразу, без задержки.
_________________
Aggtaa
    Добавлено: 19:45 17-12-2003   
akm
 470 EGP


Рейтинг канала: 1(4)
Репутация: 173
Сообщения: 1638
Откуда: Паразит Прайм
Зарегистрирован: 23.10.2002
Да, так оно и есть. Фикшу свой пред. пост.
    Добавлено: 19:53 17-12-2003   
Пассажир
 

Пассажир




2 akm
2 dusk

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

[edit]
Тю... все нашел Улыбка
    Добавлено: 04:32 18-12-2003   
GTD RAI.D
 100 EGP


Репутация: -10
Сообщения: 319
Откуда: Earth
Зарегистрирован: 07.04.2003
2AKM:
Где эти скрипты менятьть можо?, я в программировании нигугу а вы я смотрю, уже скриптами швыряетесь?.>>
    Добавлено: 05:13 18-12-2003   
akm
 470 EGP


Рейтинг канала: 1(4)
Репутация: 173
Сообщения: 1638
Откуда: Паразит Прайм
Зарегистрирован: 23.10.2002
Мы пока только анализ делали того, что имеем от Эгософт. Редактировать их можно просто в ноутпаде, но геморно. А главная трабла: чтобы отредактированный скрипт заработал, нужно начать игру сначала Разозлен Т.е. в Х2 версии 1.0 скрипты грузятся из папочки Scripts только однократно, когда New Game. Затем они берутся из сейвов Задница (чего там только не берется из сейвов)
Вот я например жду патча 1.1. А вдруг там эту хрень пофиксили и будет возможность заниматься хоть какой-то отладкой. Надежда умирает последней...
    Добавлено: 11:51 18-12-2003   
Aggtaa
 120 EGP


Репутация: 8
Сообщения: 93
Откуда: Питер
Зарегистрирован: 08.12.2003
2акм: нет.
_________________
Aggtaa
    Добавлено: 13:24 18-12-2003   
BabyWolf
 294 EGP


Рейтинг канала: 1(3)
Репутация: 72
Сообщения: 579
Откуда: Новосибирск
Зарегистрирован: 03.12.2003
akm :
Чтобы отредактированный скрипт заработал, нужно начать игру сначала Разозлен Т.е. в Х2 версии 1.0 скрипты грузятся из папочки Scripts только однократно, когда New Game. Затем они берутся из сейвов Задница (чего там только не берется из сейвов)


Вариант отладки - это патч! Который при загрузке конвертирует сэйвы и меняет в них скрипты. Подправить скрипт, подсунуть сэйв 1.0, проверить.
    Добавлено: 13:29 18-12-2003   
akm
 470 EGP


Рейтинг канала: 1(4)
Репутация: 173
Сообщения: 1638
Откуда: Паразит Прайм
Зарегистрирован: 23.10.2002
Вот и у меня такая же идея Подмигиваю Только конвертацию делает не патч, а сам Х2.ехе, т.е. ждем nocd-версию...
Т.е. на худой конец так и будем делать, однако в этом случае скорее всего будем ограничены теми скриптами, что были изменены этим патчем.
    Добавлено: 13:57 18-12-2003   
Пассажир
 

Пассажир




ASKirilL :
akm :
Есть маленькая надежда, что они сделают загрузку скриптов именно из папки Scripts, иначе те фичи, что они обещали, работать попросту не будут.

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

Насколько я понимаю, в сейве должны сохраняться не только скрипты, но и какие-то состояния интерпретатора (скомпилированный исполняемый код, локальные переменные..., если конечно в момент сохранения какие-то скрипты не завершили свое исполнение). Если это так, то нельзя просто взять и поменять скрипты в сейвах, т.к. нужно будет сконвертировать и состояния интерпретатора, иначе не понятно с какого места продолжить исполнение нового скрипта...
Видимо поэтому скрипты хранятся прямо в сейвах, а не в папках.
Другое дело, что подобных неприятностей можно избежать хранением предыдущих версий скриптов. Т.е. после загрузки сейва обновлять базу скриптов из папок, доисполнять старые скрипты с того места, где они были прерваны, а в остальном - использовать новые.
P.S. Я не знаю, каким образом реализовано сохранение сейчас, но уверен, что не от хорошей жизни разработчики запихнули скрипты в сейвы.
    Добавлено: 20:40 18-12-2003   
Keynol
 130 EGP


Репутация: 11
Сообщения: 358

Зарегистрирован: 05.07.2001
а от какой ? ну нафига это было делать ?
    Добавлено: 01:37 19-12-2003   
Канал X2: The Threat: «Торговля скриптами»
На страницу: Пред.  1, 2, 3  След. | Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Самогон, будешь хамить, за тебя замуж выйду! (грозится -=J=-)

  » Торговля скриптами | страница 2
Каналы: Новости | 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