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

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


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

@ZeeK, в этой теме можно найти все необходимые ресурсы.

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

Как определить у локации все левел вертексы и гейм вертексы? Вернее, их диапазон...

Как известно, в ванильном ЗП и в многих сборках CoC неписи довольно плохо воюют между собой и с мутантами, т.к. долго наводят оружие на врагов и в целом неповоротливы.

В Readme от Ai Tweaks на ЗП от Alundaio написано, что:
 

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

- Опционально: Можно вбить эти команды в консоль. (Внимание! Делает игру более сложной!) 
        ai_aim_max_angle     25.0
        ai_aim_min_angle     20.0
        ai_aim_min_speed     2.50
        ai_aim_predict_time     0.28

И действительно, в Gunslinger mod это улучшило реакцию ИИ.
Однако в чистом ЗП эти значения(ai_aim_max_angle и т.д.) сразу сбрасываются при вводе в консоли, т.е. изменить нельзя.
Может кто подсказать, в каких конфигах/скриптах ЗП "зашиты" значения этих параметров ИИ(надеюсь, это не "зашито" в сам движок ЗП)?

22 минуты назад, otani-san сказал:

Может кто подсказать, в каких конфигах/скриптах ЗП "зашиты" значения этих параметров ИИ

Посмотри этот пост - https://www.amk-team.ru/forum/topic/12839-kovyryaem-op-2/?do=findComment&comment=979427

Там всё просто. Будешь находить даже самую мелочёвку :grin2:

 

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

@otani-san могу еще предложить альтернативу с Notepad ++. Нужно выполнить поиск по файлам (Поиск>Найти в файлах), указать папку (например корневую с игрой) и что искать (значение ai_aim_max_angle, или другое) и выполнить поиск. Найденные документы можно тут же открыть в данном текстовом редакторе и поправить.

  • Согласен 1
  • Полезно 3
6 часов назад, otani-san сказал:

 

6 часов назад, otani-san сказал:

значения(ai_aim_max_angle и т.д.) сразу сбрасываются при вводе в консоли, т.е. изменить нельзя.

Значит, надо править движок.

  • Спасибо 1

@shahvkit @HellRatz 
Ничего не нашлось этими методами, похоже AI-параметры и впрямь "вшиты" в сам движок, как пишет aromatizer :russian_ru:
"Спасибо", дядя Грига, за тормозных дефолтных неписей в ЗП и невозможность это исправить без "пердоленья" движка :dash2:

7 минут назад, otani-san сказал:

невозможность это исправить без "пердоленья" движка

Движок давным давно можно редактировать, если кто-то не в курсе.

  • Нравится 1
  • Согласен 2
8 минут назад, otani-san сказал:

Ничего не нашлось

Эти параметры используются в AI Additions. Кто-то в 2021 году играет без него? 

  • Нравится 1

@Zander_driver 
Я сейчас прохожу ЗП с STCoP Weapon Pack 3.3 от Ga2z, там свой движок на основе чистого ЗП, не знаю, есть ли исходники от него в открытом доступе.
Опять же, редактирование движка - это не просто что-то вбить в консоль/конфиг, а устанавливать всякие "визуал студии", причём строго нужной версии и прочие доппрограммы, иметь исходники движка(для чистого ЗП они есть, я в курсе), нужно понять, где именно нужный параметр находится, потом компилировать всё это...
Для человека, никогда не занимавшимся подобным, выглядит всё это довольно заморочно :pardon: 

@Space.Marine 
Давно пробовал проходить ЗП с вышеназванным оружейным паком и с адаптированным к этому паку Ai Additions, но сия конструкция оказалась довольно глючной, т.е. случались регулярные вылеты. Пригорело тогда знатно, и АИ-пак был благополучно удалён.
Правда это случилось на старом компе с Core2Quad 14-летней давности и с 4 гигабайтами оперативки, нынешний комп куда лучше предыдущего, хоть тоже старьё.
Буду пробовать снова вышеописанную смесь модов, может будет приемлимая стабильность при хорошей боёвке :az1000106:
 

Изменено пользователем otani-san
25.10.2021 в 17:01, otani-san сказал:

в чистом ЗП эти значения (ai_aim_max_angle и т.д.) сразу сбрасываются при вводе в консоли, т.е. изменить нельзя.

У меня на чистом ЗП эти параметры легко меняются и сохраняются.

Не знаю, в чем может быть проблема при вводе в консоль, но точно уверен, что эти параметры можно принудительно прописать в "user.ltx", присвоив им необходимые значения.

  • Согласен 1
  • Полезно 2

где находятся строки в конфигах, которые отвечают за то, чтобы можно было с детектором использовать болты и пистолеты. Давно ещё качал оружейный пак, в котором была убрана возможность таскать детектор и пистолет одновременно, и вот она походу до сих пор осталась, хотя оружейка давно изменена. Даже с болтом нельзя доставать детектор. После пары прокликиваний "6-О-6-О" вылет идёт без лога.
P.S. в движке для детекторов всё по стандарту, поэтому эта строчка точно должна быть в конфигах.

@ARTLantist лови готовый код по левел вертексам (с гейм вертексами уже подсказали):

Скрытый текст
local In_Path = "D:\\Program Files\\S.T.A.L.K.E.R. - Lost World Origin\\gamedata\\levels\\"

function vector(x,y,z)
	return {x = x or 0, y = y or 0, z = z or 0}
end

local to_byte, to_sub, to_char, to_floor, to_abs = string.byte, string.sub, string.char, math.floor, math.abs

-- функции перевода двоичного кода представленного символами в бинарную строку (для побитовых операций)
function Bin_to_u32( Bin , start_seek )
    start_seek = start_seek or 1
	local byte1, byte2 = to_byte( Bin, start_seek, start_seek + 1)
	local byte3, byte4 = to_byte( Bin, start_seek + 2, start_seek + 3)
	return byte4 * 16777216 + ( byte3 * 65536 + ( byte2 * 256 + byte1 ) )
end

-- преобразование строки символов в десятичное дробное число 4 байта (32 бита)
function Bin_to_float( Bin, start_seek )
    start_seek = start_seek or 1
	local byte1, byte2 = to_byte( Bin, start_seek, start_seek + 1)
	local byte3, byte4 = to_byte( Bin, start_seek + 2, start_seek + 3)
    local sBin = (
	    to_sBin[ byte4 ]
	 .. to_sBin[ byte3 ]
	 .. to_sBin[ byte2 ]
	 .. to_sBin[ byte1 ]
	)
	return ( --return s * (m * 2 ^ -23) * (2 ^(e-127))
	    ( byte4 < 128 and 1 or -1 )  --( to_sub(sBin , 1 , 1 ) == "0" and 1 or -1 )
	  * ( ( tonumber( "1".. to_sub(sBin , 10, 32 ), 2 ) ) * 0.00000011920928955078125)
	  * (2 ^( ( tonumber( to_sub(sBin , 2, 9 ), 2 ) ) -127) )
	)
end

-- для чтения хедера уровня
function read_level_header_info ( sFile )
    local level_header = {}
    if sFile then
		-----------------------------------------------------------------------------------------------------------------------
		-- вырез нужных строк, перевод в десятичное число и запись значений
		level_header.vertex_count = Bin_to_u32( sFile , 5, 8 )
		level_header.cell_size =    Bin_to_float( sFile, 9 , 12 )
		level_header.factor_y =     Bin_to_float( sFile, 13, 16 )
		level_header.Box_vector_p1 = vector()
		level_header.Box_vector_p2 = vector()
		level_header.Box_vector_p1.x = Bin_to_float( sFile, 17, 20 )
		level_header.Box_vector_p1.y = Bin_to_float( sFile, 21, 24 )
		level_header.Box_vector_p1.z = Bin_to_float( sFile, 25, 28 )
		level_header.Box_vector_p2.x = Bin_to_float( sFile, 29, 32 )
		level_header.Box_vector_p2.y = Bin_to_float( sFile, 33, 36 )
		level_header.Box_vector_p2.z = Bin_to_float( sFile, 37, 40 )
		-----------------------------------------------------------------------------------------------------------------------
		-- расчёт остальных данных
		level_header.cx = to_floor ( ( level_header.Box_vector_p2.x - level_header.Box_vector_p1.x ) / level_header.cell_size + 1.501 )
		level_header.cz = to_floor ( ( level_header.Box_vector_p2.z - level_header.Box_vector_p1.z ) / level_header.cell_size + 1.501 )
		-----------------------------------------------------------------------------------------------------------------------
	end
	return level_header
end
-- вывод в лог хедера (отладочный)
function print_level_header( level_header )
    print("")
	print( "level_header.vertex_count = ".. level_header.vertex_count )
	print( "level_header.cell_size = ".. level_header.cell_size )
	print( "level_header.factor_y = ".. level_header.factor_y )
	print( "level_header.Box_vector_p1 = vector("
		.. level_header.Box_vector_p1.x .. " , "
		.. level_header.Box_vector_p1.y .. " , "
		.. level_header.Box_vector_p1.z .. ")" )
	print( "level_header.Box_vector_p2 = vector("
		.. level_header.Box_vector_p2.x .. " , "
		.. level_header.Box_vector_p2.y .. " , "
		.. level_header.Box_vector_p2.z .. ")" )
	print( "level_header.cx = ".. level_header.cx )
	print( "level_header.cz = ".. level_header.cz )
    print("")
end
	
function main()
    ----------------------------------------------
	-- подготовка файла
    local Path = In_Path .. sLevel .. "\\level.ai"
	--print("In = " .. Path)
    local levelai = io.open( Path , "rb" )
	----------------------------------------------
	
	----------------------------------------------
	-- чтение хедера
	local sHeader = levelai:read(56)
	local level_header =  read_level_header_info( sHeader )
	print_level_header( level_header )
    ----------------------------------------------
end

 

....

 

 

Словил проблему в CoC. Играю себе никого не трогаю и тут внезапно на ТЧ Припяти отключились все диалоговые окна от левел ченджеров. Просто не спрашивает переходить ли на другую локацию. Рестрикторы которые отвечают за них вроде впорядке, стоят себе. Это от того что я мог накосячить с нет-пакетами или что это? Сталкивался кто с таким?

Изменено пользователем Max_Raf
26.10.2021 в 15:17, WinCap сказал:

в чем может быть проблема при вводе в консоль

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

  • Согласен 1

@Купер вроде оно, но чёт оно не работает. И при 0 и при 1 детектор не достаётся, а болт убирается. С пистолетами ещё "печальнее" - детектор тупо не достаётся, а пистолет и не убирается, как будто запрещено вообще использовать.

@ARTLantist, совместимость детектора с оружием и болтом задается в движке, функция "CheckCompatibilityInt" в файле "CustomDetector.cpp".

  • Полезно 1

@WinCap да, я уже просмотрел это всё в движке, там всё норм, по стандарту. Детектор может активироваться только при отсутствии в руках оружия, или при активном слоте болта/ножа, ну или идёт активация слота с доступным оружием (болта, ножа, ствола с базовым слотом пистолетным). Но чёт нифига не пашет.

@WinCap сталкер не перестаёт удивлять :)

Болт достаётся с детектором только если положить что-то в любой слот. Неважно, до того, как положишь детектор в его слот, или после. А без этого ГГ не может научиться доставать их совместно.

причём только при первом заходе в игру и первой НИ. Если закинул что-то в слот, то потом всегда всё будет нормально работать, и при перезаходе в игру и запуске сохранения, и при новой игре не перезаходя в игру.

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

Вопрос из разряда "сам не умею, но хочу". 
Как перенести выбор окончания игры или фриплея (sr_idle@freeplay_dialog) на момент, скажем, начала эвакуации, когда все НПС ещё на базе? Дабы не проходить этот глючный путь эвакуации, когда из-за сбитых таймеров, пятен на солнце или ещё чего вертолёты просто не прилетают или весь отряд зависает в бассейне. Нашёл в pri_a28_sr_evac.ltx вызов окна выбора [sr_idle@freeplay_dialog], но ни черта не понимаю в логике и прошу помощи.

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

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

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

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

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

Войти

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

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

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