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

Max_Raf

Проверенные
  • Число публикаций

    154
  • Регистрация

  • Последнее посещение

  • AMKoin

    100 [Подарить AMKoin]

Баланс оценок

35

Недавние посетители профиля

1 158 просмотров профиля
  1. @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. Играю себе никого не трогаю и тут внезапно на ТЧ Припяти отключились все диалоговые окна от левел ченджеров. Просто не спрашивает переходить ли на другую локацию. Рестрикторы которые отвечают за них вроде впорядке, стоят себе. Это от того что я мог накосячить с нет-пакетами или что это? Сталкивался кто с таким?
  2. Муха - это маленькая птичка.

  3. Ребят, нужна гадалка. А то у меня кофейной гущи чёт маловато. Платформа СОС 1.4.22 Проблема такая: ловлю почти рандомные просадки по фпс. Не просто фриз, а именно просадка. Это как то связано с переходом отрядов в онлайн/оффлайн, то есть лаг возникает когда отряд только собирается перейти в онлайн или даже когда уходит в оффлайн (про уход в оффлайн не уверен). По моему эта штука зависит от свитч дистанс, но я так и не просёк как. Не похоже что дело в can_switch_online, я ставил всё как в ЗП, оно всё равно висит. К примеру для наглядности. Янтарь ЧН. Стоим у выверта на северо-западе. Свитч дистанс = 250. Частично в онлайне смарт бункера учёных. Начинается долгий лаг с просадкой по фпс. Открываю карту: вижу как какой то отряд вот-вот перейдёт в онлайн именно в смарт бункера. Как только отряд переходит в онлайн в геймграф смарта - лаг проходит. По наблюдениям лаг происходит порой и после перехода отряда в онлайн. Во время лага висит весь скриптовой поток, нпс тупят в этот момент и так далее. Как эту дрянь поймать? Буду рад даже абсурдным идеям.
  4. Пишу со своей колокольни: форум стал неудобным и перегруженным всяким хламом. Ну это визуально. А по части функционала: было проблематично и геморно ставить свой код в сообщение в теме, тем более если давно такого не делал сдесь. Работа спойлеров в сообщении вгоняло в ступор. Я без понятия как вы так умудрились сделать его таким.
  5. @naxac , неа, не помогло. Всё так же в онлайне. Я ранее делал немного иначе: Скрытый текст sw_sim = nil sw_actor = nil sw_max_dis = nil function can_switch( self, f_online, f_offline ) -- чтоб не дёргать по 100 раз sw_sim = sw_sim or alife() sw_actor = sw_actor or sw_sim and sw_sim:actor() sw_max_dist = sw_max_dist or sw_sim and sw_sim:switch_distance() -- если всё есть if self and sw_sim and sw_actor and sw_max_dist then if f_online then return self.position:distance_to(sw_actor.position) <= sw_max_dist or false elseif f_offline then return self.position:distance_to(sw_actor.position) > (sw_max_dist + 20) or false end end return true end function se_stalker:can_switch_offline() if self.group_id ~= 65535 then return true end if self.online then return can_switch( self, false, true ) end return cse_alife_human_stalker.can_switch_offline(self) end function se_stalker:can_switch_online() if self.group_id ~= 65535 then return true end if not self.online then return can_switch( self, true, false ) end return cse_alife_human_stalker.can_switch_online(self) end Мой велосипед вроде был работающим, но иногда ловил вылет в таком стиле: ERROR: CGameObject:net_spawn() Object with ID already exists! ID=61719 self=sim_default_bandit_061719 other=sim_default_bandit_061719 То есть такое впечатление что объект переходил в онлайн и биндился дважды. Как пофиксить - не знаю.
  6. Балуясь с COC 1.4.22 заметил что все трупы всегда лежат в онлайне. Есть ли какой человеческий способ без придумывания велосипедов заставить их переходить в оффлайн как и должны? cse_alife_human_stalker.can_switch_online(self) как я понял всегда возвращает true. Как это исправить?
  7. Проблема всё ещё актуальна. в тот раз посчитал что заработало, но я ошибался: работал эвейдер на логике. Сейчас вырубил всё левое: логический эвейдер (схема обхода аномалий) и движковую схему обхода. Что я делаю на этот раз: 1. спавню аномалию, задаю ей restrictor_type = 2 через stpk_utils.script 2. прикручиваю неписям в онлайне рестриктор пользуясь этими двумя способами (по одиночке отдельно, методом тыка и тд): .... npc:add_restrictions( "", se_anom:name() ) alife():add_in_restriction(se_npc , anom_id) .... вроде бы в списке ин рестрикторов у нпс данные аномалии появляются, но они их всё равно не обходят. Вопрос всё тот же. Что я делаю не так?
  8. Ребят, я столкнулся с такой проблемой, что не секу почему не выходит. Платформа: COC 1.4.22 Вопрос такой: как правильно добавлять/удалять/читать рестрикторы у нпс? Думаю всё сделать нормальный эвэйдер аномалий. пытаюсь добавлять гаврикам такой строкой: npc:add_restrictions(se_anom:name(), "") (к онлайновому объекту нпс закидываю через метод добавления рестриктора по имени вида СекцияИд) но им чёт фиолетово - всё так же лезут в аномалию и дохнут. Что я делаю не так?
  9. Max_Raf

    Prosectors Project

    Ребят, как можно скачать по человечески?)
  10. Уже вижу, как будет на форуме тема X-Ray Extensions 2 в 2021 году :D

    1. Mathematic_

      Mathematic_

      Будет и НС 2021 : D

       

    2. SK0RPY0N_O89O

      SK0RPY0N_O89O

      Игра будет на UE4.

  11. Столкнулся с одним приколом наиэпичнейшим образом. Получил неверное число при умножении 1939993 * 21. Должно быть 40739853, но получил 40739852. Это как вообще? Встречался кто с таким фокусом движка/скриптов игры?
  12. Мне вот интересно, а статья будет допиливаться? Или тыкните пожалуйста носом, где можно почитать хорошенько и вникнуть во всю эту логику чтобы стало всё ясно как днём, даже такому как я. =\
  13. Max_Raf

    Lost World: Origin Beta

    @GROM_27, это метры в квадрате. Есть 2 функции проверки по расстоянию: distance_to ( в метрах ) и distance_to_sqr (в метрах в квадрате). Используется функция для расчёта расстояния в квадратных метрах для оптимизации, чтобы не возводилось в степень, прежде чем будет сама проверка по расстоянию. (не указал ссылку на методы и функции сталкера, думал сам найдёшь... вот) П.С. Мне кажется это уже оффтоп, хотя с другой стороны, вроде относится к этой теме...
  14. Max_Raf

    Lost World: Origin Beta

    @GROM_27, тебе в ковырялку и ещё можно смотреть inside wiki.
  15. Max_Raf

    Lost World: Origin Beta

    @GROM_27, 1) звук розжига мб лучше сделать функцией внутри цикла, после выставления флага " bFlag = false". 2) без понятия, ищи константу максимальной дальности и увеличь, как вариант.

AMK-Team.ru

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