Перейти к контенту
Halford

[SoC] Ковыряемся в файлах

Рекомендуемые сообщения

Только что, div сказал:

другие версии

До версии 2.1.386 включительно ещё есть рендеры на выбор. Более новые уже только Dx11 и, соответственно, минимальные требования по железу выше.

  • Нравится 1
  • Полезно 1

Здесь могла быть ваша реклама.

Ссылка на комментарий
Только что, div сказал:

у меня перезагрузка системного сразу после запуска...

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

1) Может быть ЦП в перегрев уходит - проверь температуру проца при запуске, и если это оно, то надо кулер получше и/или термопасту обновить.

2) Может быть под нагрузкой не вывозит блок питания. Если с температурами ЦП все нормально, то это оно, и его надо менять на более хороший.

Кулер и Блок питания денег конечно стоят, но мне кажется это не такой уж страшно дорогой апгрейд, и его можно осилить.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

И ключевое здесь: работало, ровно до тех самых пор (а это было уже давненько), пока разработчиков не понесло в ультимативные красивости.

4 минуты назад, mole venomous сказал:

включительно ещё есть рендеры на выбор

Беда только в том, что в каждом последующем билде, помимо прочего, исправлялись и внутренние ошибки и недоработки движка. И разобрать по diff-ам сейчас что, где и когда правилось - та ещё задачка.
Ох, уж эти адепты ЩПЫКа.

  • Согласен 1
  • Полезно 1
Ссылка на комментарий
1 минуту назад, Купер сказал:

работало, ровно до тех самых пор (а это было уже давненько), пока разработчиков не понесло в ультимативные красивости

Ну, при желании можно же и старый OGSR откопать.

@div а какое железо если не секрет? Мне кажется, OGSR таки должен быть к железу в том числе старому, достаточно демократичен. О таких проблемах на нем первый раз слышу.

ЗЫ. У меня если что, старый OGSR-Original где-то на старом ПК должен валяться... хотя вряд ли это кому-то понадобится.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

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


Скажите, пожалуйста, в чем может быть причина, что после вызова test_abstract(), код которого приведен в readme:

Скрытый текст


function test_abstract()
	--/ Переносим вентилятор из каморки Сидоровича на тумбочку в подвальчике деревни новичков (на Кордоне)
	local sobj = alife():object("trader_ventilyator_0000") --/ находим в игре серверный объект вентилятора
	if sobj then --/ нашли?
		local pk = get_netpk(sobj,0) --/ или m_netpk.net_cse_abstract(sobj)
		if pk:isOk() then
			local vPos = vector():set(-212.8,-22.28,-127.20) --/ координаты 'на тумбочке в подвальчике'
			local vDir = vector():set(0,3.14,0) --/ направление: 'лопастями от стены'
			--/ var-1: установка колбэка с таблицей
			local status = pk:setCallback( { position = vPos, direction = vDir } )
			--[[ --/ var-2: установка колбэка с функцией
			local status = pk:setCallback( function(data)
				data.position  = vPos --/ change property 'position' in 'cse_abstract'
				data.direction = vDir --/ change property 'direction' in 'cse_abstract'
			end )
			--]]
		end
	end
end


 

вентилятор не меняет своего положения?

 

 

Ссылка на комментарий
5 минут назад, Купер сказал:

Ох, уж эти адепты ЩПЫКа.

Движок удобен для отладки ЛЮБЫХ вылетов - с этим спорить невозможно.

  • Согласен 2

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий
10 минут назад, div сказал:

Intel Pentium G3250, 4 ГБ DDR

Вообще-то, не так уж и плохо. У меня в команде тестеров были ребята с железом послабее, и у них мод на базе OGSR работал.

Хотя это около минимальной для него планки... но запускаться и работать он должен.

 

По нетпакету к сожалению не подскажу. Я эту версию модуля Артоса уже не использовал. Сидел на более ранних-древних, а потом уже на OGSR пересел.

Изменено пользователем Zander_driver

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

@Zander_driver возможно, если на чистой системе будет работать... У меня почему ТЧ стабильно работает только с патчем 1.0004, хотя пробовал разные по очереди ставить с переустановкой самой ТЧ...

@Zander_driver, @Kirgudu,

 

2 часа назад, Kirgudu сказал:
5 часов назад, Zander_driver сказал:

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

Тоже не знаю. Убирал флаги перехода в оффлайн у БТР, сбрасывал какие-то флаги у физ. объектов - проблем не было. НПС спавнить в воздухе в голову не приходило.

 

У меня не как :(

В se_stalker.script я дописал: if self.cb_netpk then self.cb_netpk(self, packet) end в нужное место...

 

Скрытый текст
function clear_useful_for_ai(sobj)
  local pk = get_netpk(sobj, 1)				-- [m_netpk] прочитать нетпакет
  local data = pk:get()							-- [m_netpk] вывести данные в таблицу
  data.object_flags = bit_xor(data.object_flags, 8)		-- двоичное сравнение и сброс флага "интерактивно" на 0 (позиция 8 или 2^3 справа налево: …1xxx или …0xxx –> …0xxx)
 
  data.object_flags = bit_or(data.object_flags, 8)			-- то же для поднятия флага при любых исходных значениях
  pk:set(data)									-- [m_netpk] записать данные в нетпакет по измененной таблице
end
 
function test_abstract_npc()
  local sobj = alife():create("esc_unik_npc", vector():set(-218.20, -20.2, -145.63), 35362, 47)
 
  clear_useful_for_ai(sobj)
 
  if sobj then --/ нашли?
    local pk = get_netpk(sobj, 0) --/ или m_netpk.net_cse_abstract(sobj)
    if pk:isOk() then
      local vPos = vector():set(-218.20, -20.2 + 10, -145.63)
      local vDir = vector():set(0, 3.14, 0)
      --/ var-1: установка колбэка с таблицей
      local status = pk:setCallback( { position = vPos, direction = vDir } )
    end
  end
end

 

 

Ссылка на комментарий

@div готовый тестовый пример с вентилятором:
https://disk.yandex.ru/d/T2v4KZ0WfBOp4g
Внутри сейвы у Сидоровича и в подвале деревни после переноса (сделаны на Steam версии ТЧ, поэтому скорее всего не загрузятся), скриншоты для визуального подтверждения.

Для лёгкости понимания вставок упаковал 2 папки: оригинальную из Steam-версии и уже с изменениями. WinMerge или аналог покажет разницу между изменёнными файлами.

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

  • Спасибо 1
  • Нравится 3
Ссылка на комментарий

@Kirgudu, @Zander_driver, какие еще есть "подводные камни"? Условие 1) и 2) тоже выполнено, код вроде полный...

P. S. @Kirgudu, спасибо Вам за код, изучаю...

28 минут назад, Kirgudu сказал:

Имхо, технических сведений вполне достаточно, может просто не хватило внимательности при реализации.

 

@Kirgudu, да, Вы правы, я se_physic не додумался правильно отредактировать в тот момент, сейчас поправил, работает...

С npc правда пока код не работает, хотя se_stalker.script соответствует требованиям пунктов 1), 2) и 3)

 

1 час назад, div сказал:
  код (Скрыть)

function clear_useful_for_ai(sobj) local pk = get_netpk(sobj, 1) -- [m_netpk] прочитать нетпакет local data = pk:get() -- [m_netpk] вывести данные в таблицу data.object_flags = bit_xor(data.object_flags, 8) -- двоичное сравнение и сброс флага "интерактивно" на 0 (позиция 8 или 2^3 справа налево: …1xxx или …0xxx –> …0xxx) data.object_flags = bit_or(data.object_flags, 8) -- то же для поднятия флага при любых исходных значениях pk:set(data) -- [m_netpk] записать данные в нетпакет по измененной таблице end function test_abstract_npc() local sobj = alife():create("esc_unik_npc", vector():set(-218.20, -20.2, -145.63), 35362, 47) clear_useful_for_ai(sobj) if sobj then --/ нашли? local pk = get_netpk(sobj, 0) --/ или m_netpk.net_cse_abstract(sobj) if pk:isOk() then local vPos = vector():set(-218.20, -20.2 + 10, -145.63) local vDir = vector():set(0, 3.14, 0) --/ var-1: установка колбэка с таблицей local status = pk:setCallback( { position = vPos, direction = vDir } ) end end end

function clear_useful_for_ai(sobj)
  local pk = get_netpk(sobj, 1)				-- [m_netpk] прочитать нетпакет
  local data = pk:get()							-- [m_netpk] вывести данные в таблицу
  data.object_flags = bit_xor(data.object_flags, 8)		-- двоичное сравнение и сброс флага "интерактивно" на 0 (позиция 8 или 2^3 справа налево: …1xxx или …0xxx –> …0xxx)
 
  data.object_flags = bit_or(data.object_flags, 8)			-- то же для поднятия флага при любых исходных значениях
  pk:set(data)									-- [m_netpk] записать данные в нетпакет по измененной таблице
end
 
function test_abstract_npc()
  local sobj = alife():create("esc_unik_npc", vector():set(-218.20, -20.2, -145.63), 35362, 47)
 
  clear_useful_for_ai(sobj)
 
  if sobj then --/ нашли?
    local pk = get_netpk(sobj, 0) --/ или m_netpk.net_cse_abstract(sobj)
    if pk:isOk() then
      local vPos = vector():set(-218.20, -20.2 + 10, -145.63)
      local vDir = vector():set(0, 3.14, 0)
      --/ var-1: установка колбэка с таблицей
      local status = pk:setCallback( { position = vPos, direction = vDir } )
    end
  end
end

 

 

 

Ссылка на комментарий

@div, ну тут одно из двух: либо дьявол в неучтённых мелочах, либо, как мы раньше писали, для NPC это не сработает.
Изучать и экспериментировать.

Ссылка на комментарий
10 минут назад, div сказал:

я наверно не тот флаг снимаю :facepalm:

data.object_flags = bit_and(data.object_flags, bit_not(128)) -- сброс UsedAI_Locations

Полный список флагов можно посмотреть в том же m_netpk в конце файла, где "_G.object_flags = ..." и далее.

  

10 минут назад, div сказал:

так же должно быть?

Или так, наверное. Только что-то одно.

Изменено пользователем Kirgudu
Ссылка на комментарий
10 минут назад, Kirgudu сказал:

либо, как мы раньше писали, для NPC это не сработает

Вообще я бы предложил. Для начала попробовать на совершенно простейшем объекте. Аптечке там или пачке патронов.

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

Подозрения что живого NPC оторвать малой кровью от AI-сетки, нельзя - очень сильны.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий
7 минут назад, Kirgudu сказал:

Или так, наверное. Только что-то одно.

 

Пробовал через bit_xor с bit_or и  bit_and как Вы написали, но пока не дало результата... Копаю дальше...

6 минут назад, Zander_driver сказал:

Для начала попробовать на совершенно простейшем объекте. Аптечке там

 

Аптечки (II_MEDKI) в class_registrator.script у себя не нашел, и честно, не знаю как их там прописывать (знаний маловато для этого)

Ссылка на комментарий
18 минут назад, div сказал:

не знаю как их там прописывать

А зачем прописывать новый класс? Аптечка в игре и так уже есть. И пачка патронов есть. Можно и любой другой простой тип объекта.

В class_registrator ничего прописывать для этого не надо, классы объектов указаны в их конфиге.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

@Zander_driver, класс есть, но в se_item.script нужно к чему обращаться? se_... Не к identity_immunities же? se_medkit?

Изменено пользователем div
Ссылка на комментарий

Так, стоп. А разве Артос-модуль обязательно требует скриптового биндера серверного класса? se_...что-то там, для него обязательны?

Насколько помню, древние версии работали и без этого. Но возможно Артос уже после такое требование накрутил...

@Kirgudu прокомментируй?

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

@Zander_driver, он требует минимум if self.cb_netpk then self.cb_netpk(self, packet) end в методе STATE_Write... Просто я не знаю, что для аптечек нужно использовать в se_... Пробовал на костюме, там понятно что писать нужно в se_outfit:STATE_Write(packet)

Подводя промежуточный итог, я заметил, что если использовать код:

data.object_flags = bit_and(data.object_flags, bit_not(128)) -- сброс UsedAI_Locations 

 

вместо:
 

data.object_flags = bit_xor(data.object_flags, 128)

data.object_flags = bit_or(data.object_flags, 128)

 

экзоскелет (exo_outfit) реально падает, в то время как вариант с xor + or он практически сразу же лежит на поверхности карты....

 

@Zander_driver, @Kirgudu,можно ли сказать в таком случае, что если каким-то образом зафиксировать data.object_flags, то костюм будет висеть в воздухе? Я так понимаю, смотреть в сторону update не стоит, нужен искать способ, как заморозить это значение?

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти

AMK-Team.ru

×
×
  • Создать...