|
|
|
Канал X Rebirth »
Модовый и скриптовый отсек X Rebirth: «Ковыряем новый движок (моддинг)» |
|
|
eliseeff 268 EGP
Рейтинг канала: 6(316) Репутация: 5 Сообщения: 932
Зарегистрирован: 07.03.2015 |
|
Andy_MB : |
eliseeff : |
Через некоторое время постараюсь сделать луа-код для пересчета.
|
Можешь не париться!
Я уже написал тот мод и забыл про него. Я свои задачи решил с его помощью и еще паре человек он понадобился.
Всех устраивает как там все работает.
Я уже давно решил этот вопрос без использования логарифмов.
|
Ну, может пригодится кому... Все равно уже накидал и проверил:
Пересчет uivalue (-30...+30) в relation (-1...+1):
Код: |
if uivalue > 5 or uivalue < -5 then
relation = 10^(math.abs (uivalue) / 10) / 1000
if uivalue < 0 then
relation = -relation
end
else
relation = (uivalue + 5) * 0.00064 - 0.0032
end |
Пересчет relation (-1...+1) в uivalue (-30...+30):
Код: |
if relation > 0.0032 or relation < -0.0032 then
uivalue = 10 * math.log10(math.abs(relation) * 1000)
if relation < 0 then
uivalue = -uivalue
end
else
uivalue = (relation + 0.0032) / 0.00064 - 5
end |
P.S. Кстати, если ты тогда все-таки ничего не напутал, а брал логарифм именно когда надо - ошибка могла возникать в том случае, если ты начинал пересчет с отрицательных значений. Логарифм отрицательного числа - это некорректная операция, вроде деления на ноль. Сам подумай: нет такого значения степени, чтобы возведенное в нее число было бы отрицательным.
Последний раз редактировалось: eliseeff (20:32 31-03-2018), всего редактировалось 1 раз |
|
|
Andy_MB 130 EGP
Рейтинг канала: 4(83) Репутация: 10 Сообщения: 572 Откуда: Край вселенной, Квазар-1 Зарегистрирован: 13.07.2015 |
|
eliseeff : |
P.S. Кстати, если ты тогда все-таки ничего не напутал, а брал логарифм именно когда надо - ошибка могла возникать в том случае, если ты начинал пересчет с отрицательных значений. Логарифм отрицательного числа - это некорректная операция, вроде деления на ноль. Сам подумай: нет такого значения степени, чтобы возведенное в нее число было бы отрицательным.
|
Ты пробовал подставлять реальные значения и выводить результат на экран или в файл?
помнишь я говорил:
Andy_MB : |
причем пробовал math.log10(3.2) = nan
|
мне просто показалось, что сама функция log10 не корректно работает! А что нужно сделать, чтобы она заработала я не накопал! (
|
|
|
Romz 111 EGP
Репутация: 11 Сообщения: 421 Откуда: Волоколамск Зарегистрирован: 11.03.2004 |
|
Andy_MB : |
Написал, но проверить не могу. Не нашел ни одного корабля у себя в игре, который заправляется или стоит в очереди. Попрыгал к разным заправкам - везде пусто!
Хотите попробуйте. Ток сохранитесь, перед подключением мода.
|
Круто! Проверю.
А, на всякий случай, как вот таке сделать?
Romz : |
две проверки - на принадлежность корабля игроку, и на наличие у него задания.
|
_________________ СисАадмин - Шаман |
|
|
Andy_MB 130 EGP
Рейтинг канала: 4(83) Репутация: 10 Сообщения: 572 Откуда: Край вселенной, Квазар-1 Зарегистрирован: 13.07.2015 |
|
Там готовый мод во вложении! просто скачать можно. )
Romz : |
А, на всякий случай, как вот таке сделать? две проверки - на принадлежность корабля игроку, и на наличие у него задания.
|
... <actions>
<create_group groupname="$fuelstations"/>
<find_station class="class.station" macro="struct_bt_alb_fuelstation_macro" groupname="$fuelstations" space="player.galaxy"/>
<do_all exact="$fuelstations.count" counter="$i">
<find_ship class="class.ship_xl,class.ship_l" space="$fuelstations.{$i}.zone" groupname="$ships" multiple="true"/>
<find_ship class="class.ship_xl,class.ship_l" space="$fuelstations.{$i}.zone" groupname="$ships" multiple="true">
<match owner="faction.player" negate="true"/>
</find_ship>
<!--тут будут исключены корабли игрока-->
<do_all exact="$ships.count" counter="$j">
<do_if value="$ships.{$i}.cargo.{ware.fuelcells}.max == 0 or this.ship.cargo.{ware.fuelcells}.free == 0">
<set_value name="$failreason" exact="'ERR_FUEL_STORAGE_MISSING'"/>
<destroy_object object="$ships.{$i}" explosion="false"/>
</do_if>
<do_else>
<set_value name="$wares_in_Cargo" exact="$ships.{$i}.cargo.list" />
<set_value name="$fuelcells" exact="$wares_in_Cargo.indexof.{ware.fuelcells}" />
<do_if value="$fuelcells != 0">
<do_if value="$ships.{$i}.cargo.{ware.fuelcells}.count lt $ships.{$i}.cargo.{ware.fuelcells}.max * 0.2f">
<!--set_value name="$amount" exact="$fuelcells.count"/-->
<set_value name="$ships.{$i}.cargo.{ware.fuelcells}.count" exact="5000" comment="10000"/>
<do_if value="$ships.{$i}.dockslot != 0" comment="пристыкован?">
<start_script object="$ships.{$i}" name="move.undock"/>
</do_if>
</do_if>
</do_if>
</do_else>
</do_all>
</do_all>
</actions>...
для проверки его команд можно использовать:
ships.{$i}.pilot.commandaction.value == 0 (надо в сэйве смотреть как именно выглядит комманда)
ships.{$i}.pilot.command.value == idle / wait / move.die и так далее, но это не требуется, если не собираетесь заправлять или убивать свои корабли.
Последний раз редактировалось: Andy_MB (22:38 31-03-2018), всего редактировалось 1 раз |
|
|
eliseeff 268 EGP
Рейтинг канала: 6(316) Репутация: 5 Сообщения: 932
Зарегистрирован: 07.03.2015 |
|
Andy_MB : |
Ты пробовал подставлять реальные значения и выводить результат на экран или в файл?
|
А как же! Я ж писал:
eliseeff : |
Ну, может пригодится кому... Все равно уже накидал и проверил.
|
Я не просто подсталял реальные значения, а прогнал циклом от -30 до +30 пересчет uivalue в relation и обратно, с выводом всех этих значений на экран.
Andy_MB : |
мне просто показалось, что сама функция log10 не корректно работает! А что нужно сделать, чтобы она заработала я не накопал! (
|
Работает она, работает...
Единственное, за что не могу ручаться, это за точность предоставленной Егософтом информации, т.к. есть моментец: корень из 10 не равен в точности 0,32, а 3,162277660168379. То ли они в инфе так округлили, то ли и в игре так же делают.
Т.е. то, что они пишут про значения рейтингов, заканчивающихся на "пятерку", не соответствует точному значению, высчитанному по предоставленной ими же формуле.
____________________________________________________________
Andy_MB : |
для проверки его команд можно использовать:
ships.{$i}.pilot.commandaction.value == 0 (надо в сэйве смотреть как именно выглядит комманда)
|
Сначала абсолютно точно проверяеть надо команду (ships.{$i}.pilot.command.value), а не действие (ships.{$i}.pilot.commandaction.value).
Команда - это основная работа корабля. command.freetrade - свободная торговля, command.freemining - свободная добыча ресурсов и т.д. Когда команд нет - ships.{$i}.pilot.command.value == 'null'
commandaction - это действие. commandaction.jump - прыгает, commandaction.searchingresources - ищет ресурсы. При этом команда тоже наличествует. А вот commandaction.wait - ожидание. По-моему, единственный камандэкшн, который может иметь место при command.value == 'null'
Однако на самом деле надо проверять еще блэкборд пилота на предмет всяческих ожиданий очереди на стыковку и прочей пежни, которая в командэкшнсах нифига не отображается, но символизирует, что корапь не просто так гайки пинает.
Последний раз редактировалось: eliseeff (23:20 31-03-2018), всего редактировалось 1 раз |
|
|
Gexon 70 EGP
Репутация: 9 Сообщения: 86
Зарегистрирован: 19.11.2013 |
|
Всем привет!
Скажите возможно ли получить данные с интернет ресурса используя возможности моддинга?
Например послать get запрос по адресу http://mycalcsite.ru/calc.php
|
|
|
Неон 70 EGP
Репутация: 4 Сообщения: 220 Откуда: Россия, Удмуртия, г. Ижевск Зарегистрирован: 22.08.2006 |
|
Имеется скриптовый модик "ignore locked relation drop" с содержимым:
<?xml version="1.0" encoding="utf-8"?>
<diff xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<add sel="//cue[@name='TempRelationDropped']//show_notification" type="@chance">([faction.sovereignsyndicate, faction.hereticvanguards, faction.xenon, faction.smuggler, faction.criminal, faction.enemy].indexof.{event.object.owner} == 0) * 100</add>
</diff>
Вот только Рейверов сюда вписать забыли.., кто знает как они здесь называются, очень прошу подсказать.
Жаль встроенного в игру скрипт редактора нет, иначе не стал бы задавать столь примитивный вопрос.
Последний раз редактировалось: Неон (19:30 08-10-2018), всего редактировалось 1 раз |
|
|
alexalsp 518 EGP
Рейтинг канала: 5(119) Репутация: 54 Сообщения: 4448
Зарегистрирован: 12.08.2014 |
|
Так и называются faction.reivers
_________________ CMDR: Fallout(EG)
ED - если застряли: https://discord.gg/w56kPWH |
|
|
Неон 70 EGP
Репутация: 4 Сообщения: 220 Откуда: Россия, Удмуртия, г. Ижевск Зарегистрирован: 22.08.2006 |
|
alexalsp : |
Так и называются faction.reivers
|
Спасибо, хотя этот вариант уже пробовал по наитию. На этот раз дополнительно запаковал в cat/dat и на удивление сработало, причём не сразу, а лишь через некоторое время.
|
|
|
Неон 70 EGP
Репутация: 4 Сообщения: 220 Откуда: Россия, Удмуртия, г. Ижевск Зарегистрирован: 22.08.2006 |
|
Имеется скриптовый мод "boardingtargetprotector"
Cкрытый текст (кликните здесь для просмотра)
Код: |
<?xml version="1.0" encoding="UTF-8" ?>
<mdscript name="BoardingTargetProtector" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<cues>
<cue name="BoardingStarted" instantiate="true" namespace="this" version="100">
<conditions>
<event_boarding_triggered/>
</conditions>
<actions>
<set_value name="$target" exact="event.param2" />
<set_value name="$flag" exact="false" />
</actions>
<cues>
<cue name="ChangeBordeeFaction" instantiate="true" version="100">
<conditions>
<event_conversation_started conversation="BoardingSupport_ProtectPods_Started_Conversation" />
</conditions>
<actions>
<debug_text text="'Setting boardee up for protection.'"/>
<set_object_min_hull object="$target" exact="1"/>
<set_value name="$flag" exact="true" /><!-- now its allowed to do cease fire magic-->
<debug_text text="'Bordee set up for protection.'"/>
</actions>
</cue>
<cue name="ProtectBoardee" instantiate="true" version="100">
<conditions>
<event_object_attacked object="$target"/>
</conditions>
<actions>
<do_if value="$flag == true and event.param != player.primaryship and event.param != @player.ship">
<cease_fire object="event.param"/>
<do_if value="event.param.defencenpc"><!--capships-->
<signal_objects object="event.param.defencenpc" param="'stop attack'"/>
</do_if>
<do_else><!-- fighters-->
</do_else>
<debug_text text="event.param + ' ceasing fire'"/>
</do_if>
</actions>
</cue>
<cue name="BoardingFailed" version="100">
<conditions>
<check_any>
<event_object_destroyed object="$target" />
<event_conversation_started conversation="BoardingSupport_ProtectPods_AllDestroyed_Conversation" />
<event_conversation_started conversation="BoardingResult_Failure_Conversation" />
</check_any>
</conditions>
<actions>
<do_if value="not $target.iswreck">
<set_object_min_hull object="$target" exact="0"/>
</do_if>
<cancel_cue cue="BoardingStarted"/>
<debug_text text="'Bordee reset.'"/>
</actions>
</cue>
<cue name="BoardingSuccess" version="100">
<conditions>
<event_conversation_started conversation="BoardingResult_Success_Conversation" />
</conditions>
<actions>
<set_object_min_hull object="$target" exact="0"/>
<cancel_cue cue="BoardingStarted"/>
<debug_text text="'Bording successful.'"/>
</actions>
</cue>
</cues>
</cue>
</cues>
</mdscript>
|
|
Разобрался откуда всё же остаётся атака - это наглый офицер со станции засылает вредителей - истребителей и дронов.
Сумеет кто поправить? Тут добавить-то надо всего пару строчек.
И оставлять 1% корпуса мне кажется маловато, на практике безопаснее 3-5%:
<set_object_min_hull object="$target" exact="3"/>
Последний раз редактировалось: Неон (16:46 14-10-2018), всего редактировалось 3 раз(а) |
|
|
alexalsp 518 EGP
Рейтинг канала: 5(119) Репутация: 54 Сообщения: 4448
Зарегистрирован: 12.08.2014 |
|
Лучше простынь в код и под спойлер поместить.
_________________ CMDR: Fallout(EG)
ED - если застряли: https://discord.gg/w56kPWH |
|
|
eliseeff 268 EGP
Рейтинг канала: 6(316) Репутация: 5 Сообщения: 932
Зарегистрирован: 07.03.2015 |
|
Неон : |
Имеется скриптовый мод "boardingtargetprotector"
Cкрытый текст (кликните здесь для просмотра)
Код: |
<?xml version="1.0" encoding="UTF-8" ?>
<mdscript name="BoardingTargetProtector" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<cues>
<cue name="BoardingStarted" instantiate="true" namespace="this" version="100">
<conditions>
<event_boarding_triggered/>
</conditions>
<actions>
<set_value name="$target" exact="event.param2" />
<set_value name="$flag" exact="false" />
</actions>
<cues>
<cue name="ChangeBordeeFaction" instantiate="true" version="100">
<conditions>
<event_conversation_started conversation="BoardingSupport_ProtectPods_Started_Conversation" />
</conditions>
<actions>
<debug_text text="'Setting boardee up for protection.'"/>
<set_object_min_hull object="$target" exact="1"/>
<set_value name="$flag" exact="true" /><!-- now its allowed to do cease fire magic-->
<debug_text text="'Bordee set up for protection.'"/>
</actions>
</cue>
<cue name="ProtectBoardee" instantiate="true" version="100">
<conditions>
<event_object_attacked object="$target"/>
</conditions>
<actions>
<do_if value="$flag == true and event.param != player.primaryship and event.param != @player.ship">
<cease_fire object="event.param"/>
<do_if value="event.param.defencenpc"><!--capships-->
<signal_objects object="event.param.defencenpc" param="'stop attack'"/>
</do_if>
<do_else><!-- fighters-->
</do_else>
<debug_text text="event.param + ' ceasing fire'"/>
</do_if>
</actions>
</cue>
<cue name="BoardingFailed" version="100">
<conditions>
<check_any>
<event_object_destroyed object="$target" />
<event_conversation_started conversation="BoardingSupport_ProtectPods_AllDestroyed_Conversation" />
<event_conversation_started conversation="BoardingResult_Failure_Conversation" />
</check_any>
</conditions>
<actions>
<do_if value="not $target.iswreck">
<set_object_min_hull object="$target" exact="0"/>
</do_if>
<cancel_cue cue="BoardingStarted"/>
<debug_text text="'Bordee reset.'"/>
</actions>
</cue>
<cue name="BoardingSuccess" version="100">
<conditions>
<event_conversation_started conversation="BoardingResult_Success_Conversation" />
</conditions>
<actions>
<set_object_min_hull object="$target" exact="0"/>
<cancel_cue cue="BoardingStarted"/>
<debug_text text="'Bording successful.'"/>
</actions>
</cue>
</cues>
</cue>
</cues>
</mdscript>
|
|
Разобрался откуда всё же остаётся атака - это наглый офицер со станции засылает вредителей - истребителей и дронов.
Сумеет кто поправить? Тут добавить-то надо всего пару строчек.
|
Скорее всего не пару, и уж точно не в этом файле.
Здесь офицеру обороны исправно отсигналено "прекратить огонь", а он исправно этот сигнал исполняет. Теперь надо искать, кто ему снова сигналит "атаковать гада" и сигнал этот пресекать. Точнее, не пресекать этот сигнал, а отсекать абордируемый корабль при поиске врагов различными аи-скриптами.
В моде "не стреляйте в мирных дронов" я как раз и делал нечто подобное, потому как врагов ищут многие аи-скрипты.
Последний раз редактировалось: eliseeff (02:06 31-10-2018), всего редактировалось 1 раз |
|
|
Неон 70 EGP
Репутация: 4 Сообщения: 220 Откуда: Россия, Удмуртия, г. Ижевск Зарегистрирован: 22.08.2006 |
|
Цитата: |
В моде "не стреляйте в мирных дронов" я как раз и делал нечто подобное, потому как врагов ищут многие аи-скрипты.
|
Хороший мод - хех, многих строительных дронов он мне спас от расправы.
Увы, я тоже я этом застрял - не понял как убедить подождать офицера обороны.
***
Сейчас маюсь с попыткой добавить ресурсы в "Де Фриз/Ослепительная истина" - по непонятной причине игнорит, хотя в "Пycтoe cepдцe" и "Oгнeнный влacтeлин" сработало как и задумывалось. А то неприятно - на карте написано, а реальных астероидов вообще нет.
Последний раз редактировалось: Неон (14:57 03-11-2018), всего редактировалось 1 раз |
|
|
anDron 553 EGP
Рейтинг канала: 4(50) Репутация: 54 Сообщения: 5718 Откуда: Новосибирск Зарегистрирован: 27.11.2013 |
|
В ООZ-режиме собирают ресурсы из этого "математического, но нереального обилия" вполне исправно. В IZ же собирает коряво и при наличии реального астеро-мусора. Пилоты в зоне сбора стараются не бывать совсем. Плюс мод сбора в IZ по схеме ООZ. Так зачем модить и создавать доп. мусор (и ухудшать производительность при "пролетании мимо")?
Последний раз редактировалось: anDron (15:31 03-11-2018), всего редактировалось 1 раз |
|
|
Неон 70 EGP
Репутация: 4 Сообщения: 220 Откуда: Россия, Удмуртия, г. Ижевск Зарегистрирован: 22.08.2006 |
|
anDron : |
В ООZ-режиме собирают ресурсы из этого "математического, но нереального обилия" вполне исправно. В IZ же собирает коряво и при наличии реального астеро-мусора. Пилоты в зоне сбора стараются не бывать совсем. Плюс мод сбора в IZ по схеме ООZ. Так зачем модить и создавать доп. мусор (и ухудшать производительность при "пролетании мимо")?
|
Для атмосферности понемногу, для меня гораздо важнее эффектность окружения, чем некая суть процесса, та же старенькая игра с переделкой Freelancer Rebirth до сих пор цепляет.
К тому же на моём достаточно мощном компьютере никаких корявостей не наблюдается, лишь в Омикроне Лиры возле мегакомплексов притормаживания всё же заметны.
Гораздо более неприятно, когда прилетаешь в зону и там добытчики начинают шарахаться в поиске эфемерных ресурсов.
***
Разобрался в проблеме - не распакованная игра игнорирует добавление ресурсов в файл region_definitions.xml, если его поместить в папку extensions.
Зато добавления в корневую папку игры вынуждена принять.
***
Удивительна и непостижима логика Егософта - нарисовал чуток "для атмосферности" ледяного крошева в "Де Фриз" зона "Жизнерадостные муки", так неписевый льдодоботчик повадился в 24 км. от пиратской станции шахтёрить.. доставив много веселья разбойной шайке. Наглядность образчика мазохизма изумила, пришлось сей ресурс из зоны убрать, но Онил так и продолжил шарахаться в поиске льда...
Последний раз редактировалось: Неон (09:28 14-11-2018), всего редактировалось 6 раз(а) |
|
|
Неон 70 EGP
Репутация: 4 Сообщения: 220 Откуда: Россия, Удмуртия, г. Ижевск Зарегистрирован: 22.08.2006 |
|
Теперь взялся за мод "w.e_mict". В скрипте engineer.ai.xml запоздало нашёл некритичную опечатку пунктуации, на которую ругается игра.
Возникла проблема совмещения этого мода с модом "carriers" стыковки истребителей к Арауну. Мало того, что в "carriers" опции по автоотступлению истребителей в авианосец при заданных % повреждения корпуса не работают, так теперь ещё и "w.e_mict" перехватывает веля просто удрать куда священный рандом повелит. Вот только после этого автостыковка с авианосцем для ремонта не срабатывает.
Сможет кто разобраться или уже все в X4 Foundations подались?
Последний раз редактировалось: Неон (17:02 01-12-2018), всего редактировалось 5 раз(а) |
|
|
|
|
|
Канал X Rebirth ->
Модовый и скриптовый отсек X Rebirth: «Ковыряем новый движок (моддинг)» |
|