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

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

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

   Страница 2 из 15
На страницу: Пред.  1, 2, 3, ... 13, 14, 15  След.    Перейти:   Все страницы
Поиск в этой теме:
Канал X4: Foundations » Модовый и скриптовый отсек X4: Foundations: «Ковыряем движок и всё такое»
egornov.ivan
 64 EGP

Репутация: 3
Сообщения: 52

Зарегистрирован: 26.04.2017
HikeR :
операция конкатенации строк очень затратная

Это только в Lua или во всех интерпретируемых языках? Даже не представляю как без регулярок и склейки строк жить Хы...
    Добавлено: 00:53 02-12-2018   
HikeR
 145 EGP


Рейтинг канала: 2(24)
Репутация: 30
Сообщения: 886
Откуда: Великий Новгород
Зарегистрирован: 20.09.2005
везде по разному, но в Lua так. а жить просто, в данном случае даже очень:
Код:
- icon = string.format("\027#FF%02x%02x%02x#", iconcolor.r, iconcolor.g, iconcolor.b) .. "\027[workshop_error]\027X"
+ icon = string.format("\027#FF%02x%02x%02x#\027[workshop_error]\027X", iconcolor.r, iconcolor.g, iconcolor.b)


когда в XR с каким-то патчем добавили исходники всех Lua-скриптов я даже пару раз пробовал писать им по поводу оптимизаций. отмазались типа слишком незаметная экономия памяти получается на общем фоне и мол UI у нас работает в отдельном потоке, хоть Войну и Мир каждый кадр склеивай.
    Добавлено: 01:21 02-12-2018   
eliseeff
 268 EGP


Рейтинг канала: 2(21)
Репутация: 5
Сообщения: 932

Зарегистрирован: 07.03.2015
HikeR :
везде по разному, но в Lua так. а жить просто, в данном случае даже очень:
Код:
- icon = string.format("\027#FF%02x%02x%02x#", iconcolor.r, iconcolor.g, iconcolor.b) .. "\027[workshop_error]\027X"
+ icon = string.format("\027#FF%02x%02x%02x#\027[workshop_error]\027X", iconcolor.r, iconcolor.g, iconcolor.b)


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

Честно сказать, очень сильно сомневаюсь, что string.format "легче" конкатенации.

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

Но если уж такая нужда сэкономить две копейки, можно попробовать через фуфайку использовать сишную конкатенацию.
    Добавлено: 01:45 02-12-2018   
HikeR
 145 EGP


Рейтинг канала: 2(24)
Репутация: 30
Сообщения: 886
Откуда: Великий Новгород
Зарегистрирован: 20.09.2005
string.format в данном случае уже есть, он использует сишную реализацию и не вызывает срабатывание сборки мусора при каждом выходе из локальной области видимости. там хоть и luajit, но мусор-то никуда не девается, а выделение/очистка памяти никогда и нигде не была лёгкой и незатратной процедурой. из таких вот "копеек" складывается нехилый такой рубль.

а ещё немцы любят делать так, как будто букварь не для них был написан.
Код:
for i = 1, iteration + 1 do
   text = "    " .. text
end


да и в бесплатном (в отличии от букваря) мануале самой Lua имеется самый универсальный способ
Код:
-- вместо дикого
local a = a .. b .. " " .. c .. func(d)
-- нужно пользовать
local a = table.concat(a, b, " ", c, func(d))


может они и доки в своём MD, который, может быть, вылизан до совершенства за многие лета, но в Lua им точно стоит подтянуться. может тогда не будут глаза, как говорится, вытекать от таких вот перлов
Код:
local balance = GetPlayerMoney()
if fee then
   balance = GetPlayerMoney() - fee
end

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

p.s.
просто для души: немецкий вариант проверки a<b
Код:
if (printedamount / 1000) < 1 then

привет, тройное приведение к float.

Последний раз редактировалось: HikeR (03:26 02-12-2018), всего редактировалось 2 раз(а)
    Добавлено: 03:12 02-12-2018   
eliseeff
 268 EGP


Рейтинг канала: 2(21)
Репутация: 5
Сообщения: 932

Зарегистрирован: 07.03.2015
HikeR :
string.format в данном случае уже есть

Ну да, с этим согласен...

HikeR :
может они и доки в своём MD, который, может быть, вылизан до совершенства за многие лета

Да тоже хватает перлов...

HikeR :

Код:
local balance = GetPlayerMoney()
if fee then
   balance = GetPlayerMoney() - fee
end

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

А откуда кусочек? Хотелось бы глянуть на эту хохму... Хы...

Мне вот еще понравилось в другом месте:
Код:

   -- Get the list of suitable ships
   if menu.mode == "wareexchange" then
      menu.ships = { GetTradeShipData(menu.modeparam[1]) }
   else
      menu.ships = GetTradeShipList()
      for i = #menu.ships, 1, -1 do
         local ship = menu.ships[i]
         local commander = GetCommander(ship.shipid)
         if IsSameComponent(ship.shipid, menu.playership) then
            table.remove(menu.ships, i)
         elseif commander and not IsSameComponent(commander, menu.playership) then
            table.remove(menu.ships, i)
         elseif GetBuildAnchor(ship.shipid) then
            table.remove(menu.ships, i)
         elseif #GetTransportUnitMacros(GetComponentData(ship.shipid, "macro")) == 0 then
            table.remove(menu.ships, i)
         end
      end
   end
   
   -- Find the ship
   if menu.ships and #menu.ships ~= 0 then
      for i, s in ipairs(menu.ships) do
         if IsSameComponent(s.shipid, menu.shipid) then
            menu.ship = s
         end
      end
   end

Кто это городил, по-моему, вообще не понимал, что делает.

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

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

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

На сей перл можно полюбоваться в menu_trading_transaction.lua

В своем моде я этот кусок заменил на

Код:
        if menu.mode == "wareexchange" then
            menu.ship = GetTradeShipData(menu.modeparam[1])
        else
            menu.ships = GetTradeShipList()
            for _, ship in ipairs(menu.ships) do
                if IsSameComponent(ship.shipid, menu.shipid) then
                    menu.ship = ship
                    break
                end
            end
        end

....................................................................................................................................................
Кстати, мало того, перед первым куском там еще и вот это:

Код:
   if #menu.trades ~= 0 then
      for i, trade in ipairs(menu.trades) do
         if IsSameTrade(trade.id, menu.tradeid) then
            menu.trade = trade
         end
      end
   end

Это, конечно, не так ржачно, но ЗАЧЕМ заканчивать цикл, когда нужный результат найден? Брэк поставить религия не позволяет?
    Добавлено: 04:32 02-12-2018   
HikeR
 145 EGP


Рейтинг канала: 2(24)
Репутация: 30
Сообщения: 886
Откуда: Великий Новгород
Зарегистрирован: 20.09.2005
eliseeff :
А откуда кусочек?

menu_map.lua:6829

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

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

а так даже в этом "абзаце" имеются два разных программных стиля итерирования таблиц, медленный и печальный c ipairs() и расово правильный
Код:
for i = #menu.ships, 1, -1 do
    local ship = menu.ships[i]
    --
end


грустно всё это.
    Добавлено: 05:35 02-12-2018   
Molodoy
 65 EGP


Репутация: 0
Сообщения: 116
Откуда: Видное
Зарегистрирован: 22.12.2004
Достал из 9.cat файл 0001-L007.xml.Немного перевел на русский язык миссию.Кинул его в папку t.Но игра его не подхватывает.Что я не так делаю то ? )
_________________
МегаКосмонавт
    Добавлено: 07:39 02-12-2018   
HikeR
 145 EGP


Рейтинг канала: 2(24)
Репутация: 30
Сообщения: 886
Откуда: Великий Новгород
Зарегистрирован: 20.09.2005
уже взятые задания вроде как прописываются в сейвах. а также доступные задания, предложения, скидки и ещё много чего. типа вот сейв сразу после начала новой игры:
Код:
<offer id="238686" component="[0xd87f]" distance="50000" actor="[0x68e82]" name="Опоздание на встречу!" description="Я опаздываю на важную встречу! Мне срочно нужен корабль!" faction="civilian" type="transport" level="medium" rewardtext="Высокомощные катализаторы">
<locations>
<location component="[0xd87f]" connection="connectionui"/>
</locations>
<briefing>
<objective step="1" type="pickup_person" text="Дэнила Эррис"/>
<objective step="2" type="flyto" text="ТЕЛ Фабрика деталей корпуса I"/>
</briefing>
</offer>


Последний раз редактировалось: HikeR (11:43 02-12-2018), всего редактировалось 1 раз
    Добавлено: 11:41 02-12-2018   
HikeR
 145 EGP


Рейтинг канала: 2(24)
Репутация: 30
Сообщения: 886
Откуда: Великий Новгород
Зарегистрирован: 20.09.2005
как подписать свой сейв с многаденег

во вложении готовый ключ для подписи. нужны будут утилиты openssl и base64.

1) получаем открытый ключ из закрытого для проверки:
Код:
$ openssl rsa -in private.key.nopass -pubout > public.key


2) распаковываем сейв, вырезаем с самого конца содержимое тегов <signature>...</signature> (это и есть подпись, сохраняем её в signature.b64), сами теги и содержимое удаляем, сохраняем файл.

3) раскодируем и проверяем сохранение и подпись:
Код:
$ base64 -d signature.b64 > save.sig
$ openssl dgst -sha512 -verify public.key -signature save.sig save.xml
Verified OK


4) если всё OK, идём дальше. редактируем, сохраняем сейв, подписываем его и конвертируем в base64 полученную подпись:
Код:
$ openssl dgst -sha512 -sign private.key.nopass -out new_save.sig save.xml
$ base64 -w0 new_save.sig > new_save.b64


5) содержимое файла new_save.b64 вставляем обратно в сохранение между тегами <signature>...</signature> в конце файла прямо перед перед последним тегом </savegame>

6) профит
    Добавлено: 14:30 02-12-2018   
alexalsp
 513 EGP


Модератор
Рейтинг канала: 5(206)
Репутация: 54
Сообщения: 4238

Зарегистрирован: 12.08.2014
Molodoy :
Достал из 9.cat файл 0001-L007.xml.Немного перевел на русский язык миссию.Кинул его в папку t.Но игра его не подхватывает.Что я не так делаю то ? )


Для того что бы ответить на вопрос, нужно показать как вы это делали и куда пихали
_________________
CMDR: Fallout(EG)

ED - если застряли: https://discord.gg/w56kPWH
    Добавлено: 14:43 02-12-2018   
eliseeff
 268 EGP


Рейтинг канала: 2(21)
Репутация: 5
Сообщения: 932

Зарегистрирован: 07.03.2015
Molodoy :
Достал из 9.cat файл 0001-L007.xml.Немного перевел на русский язык миссию.Кинул его в папку t.Но игра его не подхватывает.Что я не так делаю то ? )

Не советую пихать целиком текстовик в папку t. Если и подхватывается, то в игре вскоре тексты начинают мигать гирляндой.

Делайте дифф и юзайте extensions.

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

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

HikeR :
отсутствие break может быть нужно для нахождения последнего подходящего элемента.

В данном случае цикл ищет один конкретный компонент.

Последний раз редактировалось: eliseeff (17:02 02-12-2018), всего редактировалось 1 раз
    Добавлено: 17:02 02-12-2018   
Molodoy
 65 EGP


Репутация: 0
Сообщения: 116
Откуда: Видное
Зарегистрирован: 22.12.2004
eliseeff :
Делайте дифф и юзайте extensions.


Эмм . Про дифф можно поподробнее или примем
_________________
МегаКосмонавт
    Добавлено: 17:23 02-12-2018   
HikeR
 145 EGP


Рейтинг канала: 2(24)
Репутация: 30
Сообщения: 886
Откуда: Великий Новгород
Зарегистрирован: 20.09.2005
оставляете в файле только изменённые строки и делов.
Код:
<page id="1001" title="Interface" descr="Text for interface and menus" voice="no">
 <!-- t id="8909">An error occurred</t -->
 <t id="8909">Произошла ошибка</t>
</page>


p.s.
под *никсы есть библиотека libxmldiff, работает по RFC5261 и также может генерить патчи по этому RFC.
по вышеприведенному примеру работает так:
Код:
$ xml-diff -f 0001-L007.xml.ori -t 0001-L007.xml -o patch.xml
$ cat patch.xml
<?xml version="1.0"?>
<x:changes xmlns:x="urn:xml-changes">
  <x:replace sel="*/*[1]/*[1738]/text()">&#x41F;&#x440;&#x43E;&#x438;&#x437;&#x43E;&#x448;&#x43B;&#x430; &#x43E;&#x448;&#x438;&#x431;&#x43A;&#x430;</x:replace></x:changes>


Последний раз редактировалось: HikeR (17:45 02-12-2018), всего редактировалось 1 раз
    Добавлено: 17:28 02-12-2018   
egornov.ivan
 64 EGP

Репутация: 3
Сообщения: 52

Зарегистрирован: 26.04.2017
eliseeff :

На некоторых сайтах уже ругают качество "русека", что там разрабы говорят на эту тему? Планируют подгонять текст под интерфейс или интерфейс под текст?
    Добавлено: 17:30 02-12-2018   
IvanMosc
 50 EGP


Репутация: -8
Сообщения: 199

Зарегистрирован: 22.05.2013
разрабы говорят что "русек" в бете... ругаться рано, разве нет?
    Добавлено: 17:35 02-12-2018   
eliseeff
 268 EGP


Рейтинг канала: 2(21)
Репутация: 5
Сообщения: 932

Зарегистрирован: 07.03.2015
egornov.ivan :
eliseeff :

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

Будет неплохо уяснить две вещи:

1. Я не имею права говорить от лица разработчиков.
2. Я не имею права оглашать информацию, которая не была публично оглашена самими разработчиками.

Ну а "ругают качество" - это слишком расплывчато. Без конкретики мне просто жаль время тратить на перелив из пустого в порожнее.

Подгонять текст под интерфейс - вы вообще представляете кол-во работы даже без каких-то там "подгонов"?

Народ бузит - понимаю... Но есть вещи реальные, а есть - НЕреальные. Сделать перевод за три недели - НЕреально. Работа идет. Бузить и кидаться какахами - что ж, если кому-то так легче, чем просто потерпеть, пусть будет так... Улыбка
    Добавлено: 18:09 02-12-2018   
egornov.ivan
 64 EGP

Репутация: 3
Сообщения: 52

Зарегистрирован: 26.04.2017
eliseeff :
Поэтому оставьте ваши поучения себе.

Чтож вы так все воспринимаете в штыки? HikeR просто предложил сменить собор на базар с комиттерами Улыбка
    Добавлено: 20:18 02-12-2018   
DNA78
 420 EGP


Репутация: 70
Сообщения: 1191
Откуда: Кыргызстан
Зарегистрирован: 12.11.2008
Ребята это конечно всё хорошо, но игра начинает притягивать и отлепиться от неё всё трудней, а по сему давайте о насущном - собственно о самом модинге. У меня появилась одна мысля, а именно создание горячей клавиши со следующим функционалом, т.е. при нажатии на клавишу открывалась бы Карта зоны, но с максимальным отдалением зума, в следствии чего горячую клавишу можно назвать Карта вселенной.
А за одно и поднатаскаете так сказать новичков Гы-гы
_________________
Очевидное-невероятное
    Добавлено: 20:28 02-12-2018   
Арманкессилон
 1725 EGP


Модератор
Репутация: 342
Сообщения: 13052
Откуда: Ставрополь
Зарегистрирован: 16.08.2007
HikeR, eliseeff, переносите ваш спор в личку.
_________________
Все астероиды не пересчитать!
    Добавлено: 22:56 02-12-2018   
DNA78
 420 EGP


Репутация: 70
Сообщения: 1191
Откуда: Кыргызстан
Зарегистрирован: 12.11.2008
eliseeff :
Не знаю как дальше пойдет, но судя по хребту, с горячими клавишами для моддинга все пока очень плохо.
Инпут_экшнс все жестко прописаны в экзешнике. Юзеру их добавлять нельзя. Биндинг для файлов модов тоже не поддерживается.

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

...уровень хайпа падает Расстроен
_________________
Очевидное-невероятное
    Добавлено: 07:38 03-12-2018   
Канал X4: Foundations -> Модовый и скриптовый отсек X4: Foundations: «Ковыряем движок и всё такое»
На страницу: Пред.  1, 2, 3, ... 13, 14, 15  След.    Перейти:   Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Я еще могу и своими волосатыми ножищами запинать, и небритой мордой закусать... (пригрозил Harley)

  » Ковыряем движок и всё такое | страница 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