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

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


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

@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 минут назад, Купер сказал:

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

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

  • Согласен 1

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

Я понял что моя старая подпись что-то нарушает. Удалил все ссылки.

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

а какое железо если не секрет?

 

Процессор Intel Pentium G3250, 4 ГБ DDR, 1 ТБ HDD

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

Intel Pentium G3250, 4 ГБ DDR

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

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

 

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

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

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

Я понял что моя старая подпись что-то нарушает. Удалил все ссылки.

@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
  • Нравится 2

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

@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 это не сработает.
Изучать и экспериментировать.

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

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

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

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

 

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

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

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

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

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

  

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

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

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

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

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

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

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

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

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

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

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

Я понял что моя старая подпись что-то нарушает. Удалил все ссылки.

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

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

 

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

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

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

 

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

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

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

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

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

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

Я понял что моя старая подпись что-то нарушает. Удалил все ссылки.

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

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

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

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

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

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

Я понял что моя старая подпись что-то нарушает. Удалил все ссылки.

@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 не стоит, нужен искать способ, как заморозить это значение?

1 час назад, div сказал:

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

Для этого надо не только отключать привязку к AI-сетке, но и отключать для него физику, что делает другой флаг (не скажу какой, у меня это получалось манипуляциями в движке, но доступный скриптово флаг для этого вроде тоже существует). При включенной физике объект упадет. При выключенной - на пули и другие коллизии он реагировать не будет тоже.

 

1 час назад, div сказал:

self.cb_netpk(self, packet)

А что внутри этого метода? Он ведь добавленный. В оригинале игры нет такого.

  • Нравится 1

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

Я понял что моя старая подпись что-то нарушает. Удалил все ссылки.

1 час назад, Zander_driver сказал:

прокомментируй

Ну конечно. Иначе как раз переключение оффлайн-онлайн работать не будет.
А class_registrator в большинстве случаев нужен только затем, чтобы посмотреть, какой биндер и где искать.

1 час назад, div сказал:
data.object_flags = bit_xor(data.object_flags, 128)
data.object_flags = bit_or(data.object_flags, 128)

Потому что вызов данных команд в паре приводит к исходному положению дел. Ведь даже в комментарии поста

сказано, что первая - сброс флага, тогда как вторая - поднятие оного. В итоге флаг привязки к сетке после парного выполнения остаётся установленным.


Аптечки... честно говоря, не помню, есть ли у них биндер в принципе.

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

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

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

Иначе как раз переключение оффлайн-онлайн работать не будет.

Ээм, а почему?

Оно же делается методами-флагами самого sobj-объекта. Во всяком случае, так можно сделать и в серверном биндере оно нуждаться не будет.

 

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

Я понял что моя старая подпись что-то нарушает. Удалил все ссылки.

@Zander_driver, оговорился.
Не будет работать запись в абстрактную часть пакета, которая возможна только при выходе в онлайн. А это - STATE_Write.

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

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

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

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

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

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

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

Войти

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

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...