S.T.A.L.K.E.R.: Global War <<<>>> Инструмент - теперь и для ТЧ! <<<>>> NS OGSR: Сборка от 30.12.2023
-
Число публикаций
255 -
Регистрация
-
Последнее посещение
-
Дней в топе
2 -
AMKoin
150 [Подарить AMKoin]
Сообщения опубликованы Winsor
-
-
Хм... Приношу свои извинения за введение в заблуждение. "Почитал" более внимательно движок ТЧ - все что я писал ранее не относится к вызовам, которые добавляются из скриптов, а именно CPHScriptAction и CPHScriptCondition. Для других condition и action которые добавляются в движке - алгоритм работает немного иначе...
Действительно, CPHScriptCondition (условие проверки) выполняется всегда и постоянно, при возврате true из данной функции выполняется запуск CPHScriptAction. если CPHScriptCondition или CPHScriptAction перешел в состояние obsolete ("устаревший"), менеджер вызовов удаляет этот call. Тонкость в том что именно скриптовый CPHScriptAction сразу после первого вызова переводит свое состояние в obsolete
void CPHScriptAction::run() { (*m_lua_function)(); b_obsolete=true; }
что и приводит в удалению всего вызова после единственного срабатывания. Еще раз - прошу прощения за неточность...
- 2
- 1
-
3 часа назад, Kirgudu сказал:
Ты же возвращаешь db.actor... Поведение коллбэка предсказать в таких условиях не возьмусь; хорошо ещё, что вылета не было.
1) Вылета не должно быть, так как в движке происходит
return (*m_lua_function)();
а при вызове
info_callback объект актора уже создан, т.е. функция возвращает указатель на существующий объект, движок преобразует это значение в true, так как оно не nullptr. т.е. в результате результат функции всегда true.2) функция проверяется всегда, до тех пор пока не вызван remove_call. если у тебя не вызывается каждый раз msg() - скорее всего проблема в логике. возможно ты делаешь где то remove_call, либо у тебя повис скриптовый биндер, что очень плохо. Единственное что меня немного смущает - то что ты для глобального колбека используешь local function={} - вот это уже может приводить к "непонятному" поведению.
- 1
-
19 часов назад, Minya сказал:
demo_record тут называется blinker.
Не вводите людей в заблуждение demo_record - вырезан, blinker - это ошметки моего неудачного эксперимента, который был удален из-за кривизны и недоделанности
- 1
- 1
-
4 минуты назад, blanc8 сказал:
Как увеличить дальность отрисовки травы.
пока никак.
- 2
-
- Это популярное сообщение.
- Это популярное сообщение.
В 25.11.2019 в 09:06, Sindikat сказал:спавн документов Воронина (с вертолёта которые) в рюкзак ГГ под версию 8к.2 ?
Дожились... Надо кнопку придумать в главном меню - "Пройти мод".
В 25.11.2019 в 09:06, Sindikat сказал:сделались исходными
Правки нарушили структуру как минимум system.ltx в котором пропали инклюды на текстовые файлы.
В 25.11.2019 в 21:29, joo-jarak сказал:ам внутри барахло иконками отображается как в Старых Рюкзаках
иконками, иконками.
В 26.11.2019 в 09:10, слава70 сказал:вопрос по вместимости (объему) скриптовых рюкзаков.
ВНИМАНИЕ!!!! Данная правка приводит к нарушению структуры сейвов! А именно - установка размера скриптового рюкзака более 8000 (8192, если точнее) байт приведет к превышению допустимого размера нетпакета движка и при сохранении такой игры Вы испортите сейв. Далее, отключение кода в GetDataSize приводит к неправильной работе проверки на превышение данного размера, что тоже может приводить к битью сейвов. Причем такой сейв невозможно восстановить.
Ребята, выкладывая правки - ну Вы хоть думайте, почему именно стоит такое ограничение. Ладно 4к - это было в оригинале, может кому и мало. Но делать больше 8к , еще и приводить в реадми пример с цифрой в 50к - ну это уже как то безнравственно что ли.
По поводу default_container_size - все на ответственности игрока, хотя и тут значение в 50к как то уж слишком... 50000 id отдать только на хабар - ну,ну...Это уже не плюшкин
- 1
- 7
- 2
- 2
-
- Это популярное сообщение.
- Это популярное сообщение.
15 часов назад, Александр Емельяненко сказал:Мне нужно полностью зачистить навсегда аномалии с локации.
ну это точно не получиться, есть еще мод "Динамические аномалии". т.е. они все равно будут. Ну я по поводу удаления более чем одной аномалии - в коде прямо комментарий есть по этому поводу... Ну я даже не знаю как еще подробнее указать.
19 часов назад, joo-jarak сказал:ковырнуть Новый Рюкзак для нычек так
Я уже писал про это. В моде есть как минимум 2-а объекта (заряжатель и контейнер), которые используют сетку для отображения в скриптовых UI объектах иконки предметов. Т.е. на их идее можно сделать хотя бы примерно похожее отображение и в новых рюкзаках. Но вот чего то никто не хочет писать (никто не показал даже попыток, экспериментов с таким отображением) - все хотят чтобы им сделали. А раз только хотят - то придется ждать, может в 2.2 я наконец то успею их доделать.
- 2
- 2
- 1
-
В 19.11.2019 в 08:06, Vasya Glotov сказал:
Ты не понял, я хочу опешные слоты перенести в другой мод.
Вот ты упорный и недоверчивый. Я тебе как создатель мода говорю - не получится! Поддержка слота для дробовика добавлена в движок, и если ты и перенесешь файлы для нового слота в другой мод, не на основе движка ОП2.1 - работать не будет!!! Ну как еще объяснить?
Например за рисование нового слота в инвентаре отвечает файл inventory_new.xml в папке config\ui. Попробуй, перенеси и убедись...
- 1
- 2
- 1
-
- Это популярное сообщение.
- Это популярное сообщение.
41 минуту назад, Александр Емельяненко сказал:Вот про слот
Выложите пожалуйста это все не на яндекс, я посмотрю. и посоветую что-нибудь.
===
Ну как по мне - вешанье на биндер объекта контроль нахождения в слоте и управление UI - это сильно. Да и вообще - у себя я так и не смог его запустить - у меня уже нету 2.1, а ставить облом. Как это переделать, примерно:
1) заменить конфиг итема на такой
Скрытый текст[mobile]:II_ANTIR
GroupControlSection = spawn_group
$spawn = "devices\detector_elite"
$prefetch = 32
cform = skeleton
visual = dynamics\devices\item_pda.ogf
radius = 1
inv_name = "mobile"
inv_name_short = "mobile short"
description = "mobile description"
inv_weight = 0
inv_grid_width = 1
inv_grid_height = 1
inv_grid_x = 5
inv_grid_y = 14
cost = 1500
script_binding = _bind_mobile.bind2) в скрипте callback_use в таблицу добавить примерно такую секцию
Скрытый текст["mobile"]={ func=function(object) local binder=object:binded_object() if binder then binder:OpenMenuManager() return true end return false end },
3) в скрипте _bind_mobile.script в функции mobile_binder:OpenMenuManager() повыбрасывать проверки на положение в слоте и оставить только
open_menu = _mobile.Mobile(self) level.start_stop_menu(open_menu,true)
4) в этом же скрипте убрать с апдейта mobile_binder:update вызов
self:OpenMenuManager()
5) повыбрасывать из этого же скрипта self.back_item_id,self.back_active_slot,self.save_back_active_slot
6) ну и очень внимательно посмотреть по коду - где еще по логике идет использование в биндере таких странных штук.
после этого заспавнить итем себе в инвентарь. интерфейс должен активироваться двойным щелчком.
после этого заспавнить себе в инвентарь
- 1
- 3
- 3
-
3 часа назад, joo-jarak сказал:
слегка допилить этот замечательнейший девайс
Скачать с яндекса и подсказать на конкретном конфиге не могу, но сделать это очень просто. Необходимо в конфигурации итема, который спавниться в инвентарь изменить ему класс с оружия на обычный "съедаемый" предмет и добавить в конфигурацию параметр item_use_only = true
и все. он будет активироваться из инвентаря и не пропадать при активации...
p.s. зачем его в оружейный слот? О_О Автор, если есть желание - пишите в личку.
- 3
- 1
- 1
-
- Это популярное сообщение.
- Это популярное сообщение.
Внимание! Мне не жалко - но как разработчик - НЕ РЕКОМЕНДУЮ!!!! использовать запакованный all.spawn утилитами не с набора ОП2.1! В ОП2.1 изменились некоторые движковые классы и соответственно их нетпакеты, работоспособность такой сборки не гарантирую от слова совсем!!!! это чревато очень интересными глюками! Опять таки как разработчик - не понимаю, что именно Вам надо от перепакованного all.spawn... Тем более если Вы не знаете что такое нетпакет и серверные классы...
- 1
- 3
- 1
- 4
-
6 часов назад, BFG сказал:
не взяли нормальный файл коллизий для Лиманска из НС16.
а что делать с теми квестами которые завязаны на этих "кустах"? Причем эти квесты уже кучу лет на этом основаны.
3 часа назад, vsk94 сказал:Батник для запуска игры на двух и более ядрах, используется встроенный виндовый affinity.exe
16 минут назад, pc-2 сказал:Задействует все ядра процессора, проверено.
игра физически не может запуститься на двух и более ядрах. Нет в движке такой возможности. affinity.exe позволяет запускать игру на процессоре, отличном от того который система выделяет запускаемому процессу/приложению по умолчанию - чаще всего это 0-й. На данный момент такая возможность встроена в игру, без каких либо сторонних утилит и батников. Делается это с помощью консольной команды g_affinity.
- 1
- 3
-
- Это популярное сообщение.
- Это популярное сообщение.
40 минут назад, Vega сказал:изменить место расположения папки c сохранениями
в файле fsgame.ltx изменить строчку, которая начинается с $game_saves$.вместо
$game_saves$ = true| false| $app_data_root$| savedgames\
указать
$game_saves$ = true| false| полный_путь_к_новой_папке_сохранений
желательно без кириллических символов в пути.
- 1
- 2
- 5
-
- Это популярное сообщение.
- Это популярное сообщение.
16 минут назад, Minya сказал:деморекорд планируется вернуть в игру?
в 2.2 скорее всего да.
- 1
- 4
-
- Это популярное сообщение.
- Это популярное сообщение.
10 часов назад, vsk94 сказал:патч финальный.
Все патчи, которые будут исправлять какие то критические ошибки - будут выпускаться с индексом 8.х. Если критических проблем не будет найдено - 8.1 будет через пару недель - я планирую закончить "борьбу" с некоторыми АИ схемами и их производительностью. Глобально он ничего привносить не будет - только исправления скриптов схем. На этом работа над 2.1 скорее всего будет завершена.
Но мод продолжает разрабатываться. Следующее обновление планируется через несколько месяцев и будет требовать НИ, так как накопилось много изменений, которые патчами не ввести (ну или муторно переспавнивать/переделывать). Над этой веткой (назовем ее, пусть, 2.2) - работа уже ведется, будет несколько "вкусностей" в игровом процессе, очень много изменений в внутренностях игры.
- 1
- 5
-
- Это популярное сообщение.
- Это популярное сообщение.
По поводу Бармена - в патче 7.3 был убран постоянный переспавн Бармена при каждом посещении Бара, вместо этого логикой (конфигами) был поставлен запрет на использование той комнаты, в которую уходит Бармен. Если у Вас он все таки туда ушел - значит что-то из правок перекрывает логику патча. такой вывод сделан на основании того что на офсайт жалоб игроков (ну и сейвов с таким событием) на чистом патче 7.3 о том что Бармен ушел - не было. Что можно сделать (варианты решения):
1) найти все правки, которые замещают логику Бармена и адаптировать их.
2) вернуть постоянный переспавн Бармена (как было в ОП2 и ранних патчах), что не очень хорошо для "самого" Бармена - сбрасываются некоторые квесты, сбрасывается содержимое торговли, еще подобные вещи. Для этого необходимо в файле bind_actor.script убрать комментарии со строк 370 и 371, номера строк даны для патча а не для правленого биндера актора.
3) в патче в движок была добавлена функция teleport_object(id.pos,lv,gv), которая позволяет принудительно телепортировать, например, Бармена в определенную точку за стойкой бара. можно в тот же bind_actor.script вместо строк 370 и 371 написать такой код
ai:teleport_object(server_object("bar_barman").id,xyz(132.294921875,-4.74485778808594,20.3684597015381),36323,1238)
так как функция новая - требует тестирования. Но как минимум в онлайне - она работает.
- 1
- 2
- 4
-
1 час назад, V92 сказал:
если ты не меняешь сеществующие сетки и количество графпоинтов на них
1 час назад, V92 сказал:новые локи подключал
А то я не исправлял вертексы для рюкзаков, которые на землю падали, и на некоторых локациях скриптовый спавн (Юпитер, Затон). Получается что не должно изменяться - но изменяется. Ну да ладно - я не специалист в данном вопросе. Может те кто после меня придут - смогут реализовать. Всем спасибо.
-
19 часов назад, V92 сказал:
просто не хочет НИ.
Я не хочу вот этого:
В 25.05.2019 в 17:00, V92 сказал:Если ты ничего не подключаешь - значения вертексов никогда не изменятся.
А НИ - это уже побочный эффект, который не так уж и страшен.
- 1
-
3 часа назад, BFG сказал:
АИ-связи между локами как будешь делать
У меня есть специфическая идея, которая не требует наличия "перемещения" между этой локацией и другими для ботов. Так сказать - сама в себе локация. Все что от нее надо - поспавнить свои предметы на себе родной, при загрузке в онлайн. Можно попробовать обойтись координатами. Пока у меня мало опыта в этом направлении - это все предположения.
3 часа назад, BFG сказал:game_vertex
Из существующей загруженной кросс таблицы последний максимальный, далее по нарастающей. Не подойдет?
3 часа назад, BFG сказал:Проще нормально подключить локу.
Нет, к сожалению - не проще. Перекомпиляция геймграфа без добавления локации уже может приводить к изменению значения вертексов, как показала практика.
3 часа назад, BFG сказал:когда ты объявишь НИ.
Оно будет, но не по этой причине. Если задумка не получиться - проще отказаться.
-
18 часов назад, BFG сказал:
невозможно от слова "никогда".
Думаю что можно. Причем если level.spawn я представляю как заставить работать, то с графом труднее - а именно с нумерацией индексов, тут уже с компилятором надо что-то думать. Правда это уже в другую тему - тему движка. Спасибо!
-
Хочется странного - подключить подземную локацию к игре, но при этом не перекомпиливать all.spawn и game.graph основной игры. Это возможно? возможно ли использовать только level.game и level.spawn?
-
- Это популярное сообщение.
- Это популярное сообщение.
Так как на офф. сайт много пишут про несчастного ученого из лаборатории и абсолютно не слушают доводов и аргументов - напишу здесь:
Скрытый текстПосле установки офф.патча 7.3к труп ученого переспавнивается через скрипт all_spawn_fix.script. в связи с тем что Вы играете с распакованной геймдатой, в которой есть скорее всего и этот скрипт - тот который в патче - не выполняется никогда. И следовательно - труп не появиться. Так же на работу данного скрипта будет влиять распакованный файл конфигов, в котором содержаться инфопоршни на которые опирается данный скрипт - само собой - нет поршня (старый конфиг) - нет и запуска скрипта. Данный вывод сделан на основе сейвов игроков, в котором присутствует метка о патче 7.3 но нет, например, поршня для патча 7.3, или наоборот - поршень есть, но метки о том что скрипт выполнялся - нет. и не надо мне говорить о злом умысле разработчиков, ибо переспавн струпа происходит всего лишь при трех условиях:
1) нет поршня патча 7.3
2) нет трупа (причем не важно - на одной локации Вы с ним или нет)
3) нет поршня dar_password_info2 - этот поршень выдается когда труп этого ученого уже обыскивается.
local sobj=story_object(451) if not sobj and not has_info("dar_password_info2") then create(ai:spawn_id(451)) log("~ FIX lost corpse") end
Как видно - ну очень тяжело сломать, если нет каких либо посторонних добавок.
Так же очень сильно влияет на то как в принципе будет работать игра (и в частности данный скрипт) количество предметов в рюкзаке ГГ и в нычках которые лежат на данной локации - наверное многим попадался момент когда сейв вроде загрузился а все НПС "замерзли" и отмораживаются спустя минут 5-ть после загрузки. Движок банально не успевает обновить состояние этой тонны хабара, которая всегда в онлайне. Так что продолжайте ставить правки на перенос 10000 кг и снятие ограничений с стандартных нычек. Хорошо лишь только в начале, когда мало предметов в них - но потом, когда начинает вылетать с ошибкой о нехватке ID или грузить сейвы по 15-ть минут (КАРЛ! 15-ТЬ МИНУТ с ССД у меня грузился сейв одного из игроков, 15-ТЬ КАРЛ!) - тут уж виноваты разработчики.
p.s.
В 09.05.2019 в 16:37, DoberBull сказал:с 10 фпс
Предлагаю переписать (ну или на крайний случай перенести с ЗП) основу ui_abstract - и тогда возможно это будет не 10 (а зачем больше в статическом то объекте на экране?) а 25 ФПС.В 09.05.2019 в 16:37, DoberBull сказал:"типо для оптимизации"
Вы не поверите - но действительно для этого. Почему - могу детально объяснить в личке.
В 09.05.2019 в 16:37, DoberBull сказал:При открытии движок рисует сетку, dragdrop, иконки предметов и т.д.
примерно этак с релиза в скрипты экспортированы все необходимые элементы для построения аналогичного интерфейса (для пример зарядник и контейнер артефактов сделаны на сетке, такой же как и инвентарь, единственное - dragdrop отключен ибо уж совсем нехорошая реализация в ТЧ) - но чето как то за полгода нет ни одного желающего переделать рюкзаки под этот интерфейс. Вот только почему?
- 4
- 8
- 1
- 6
-
17 минут назад, abramcumner сказал:
Это присваивание новой таблицы, у которой нет метатаблицы.
т.е. без какого то лишнего шага не обойтись?
например, псевдокод:
rawdata={["dsdsd"]=true}
setmetatable(data,{__index,__newindex})
copy(data,rawdata)
-
Вопрос по метатаблицам
local data=setmetatable({},{ __tostring = function() return "data_table_name" end, }) log("1 "..tostring(data)) data={["dsdsd"]=true} log("2 "..tostring(data))
Вывод
1 data_table_name
2 0A0EC4C8
т.е. при инициализации таблицы новыми данными ее метатаблица затирается.
если делать setmetatable после инициализации - не вызываются _index,__newindex. каким образом можно избежать такого эффекта? очень не хочется писать отдельные циклы заполнения таблицы с метаданными...
p.s. все это вызывается из под движка ТЧ 1.0007
p.s.s. само собой, можно написать и так:
local data=setmetatable({["dsdsd"]=true},{ __tostring = function() return "data_table_name" end, })
но все равно не вызываются события _index,__newindex у таблицы data.
-
В 05.02.2018 в 02:01, Dennis_Chikin сказал:
level.add_call( my_func, another_func )
level.add_call добавляет на каждом апдейте вызов Ваших функций, указанных как параметры таким образом
первый параметр - это функция которая должна в обязательном порядке вернуть значение булевого типа. если функция вернула true - это условие для вызова функции во втором параметре. результат второй функции - не важен. так как данная проверка происходит на каждом OnFrame - для ускорения работы движок не проверяет валидность результата функции my_func вообще. Если функция возвращает , например, userdata, либо не возвращает ничего - будет вылет.
По поводу однократного вызова - проверка my_func будет вызываться до тех пор пока не будет сделан level.remove-call( my_func, another_func ) - ну и само собой - если my_func вернула true на каждом вызове - то и постоянно будет вызываться another_func.
[SoC] Вопросы по SDK
в SDK и маппинг
Опубликовано · Изменено пользователем Winsor
Меня больше интересует вопрос - правятся они ладно, а вот как быть с тем что индексы на старых локациях смещаются при компиляции? в этом варианте подключения как происходит?
p.s. и мне не надо чтобы мобы ходили в данную локацию.