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

Max_Raf

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

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

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

  • AMKoin

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

Весь контент пользователя Max_Raf

  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) без понятия, ищи константу максимальной дальности и увеличь, как вариант.
  16. Max_Raf

    Lost World: Origin Beta

    @GROM_27, возможно ошибка в функции использования спичек. А именно: function OnUse(oItem) local oActor = db.actor or level.object_by_id(0) if not oActor or not oItem or not Enabled then return end if oItem:section() == "firemaker_item" then local bFlag = true for iFireId, oFire in pairs(db.campfire_on_by_id) do -- напортачил скорее всего в этом цикле - флаг не выставляется в false local vFirePos = oFire:position() local vActorPos = oActor:position() if vActorPos:distance_to_xz(vFirePos) < 3 and not tCampFlags[iFireId] then -- добавил радиус (+2 метра ) local oSeAnom = db.anom_off_by_id[iFireId] if oSeAnom then oSeAnom.bActorsFire = true iTime = 0 -- Форсируем. bFlag = false break end end end -- доспавн спички после "сьедания" тут. Заметь, что спавн происходит если bFlag == true. if bFlag then add_obj_to_inv("firemaker_item") end end end
  17. @Zander_driver, сразу говорю - не призываю к действию: был бы новичкам интересен гайд, который описывал создание какого либо объекта от записей в конфиг, до его непосредственного лицезрения в игре. А точнее,последовательность того, что делает движок с этим конфигом и как он его понимает. К примеру как он понимает класс объекта, их экспортированность и "наследственность"; методы серверного класса, онлайнового; что такое биндер; как работает, строится и привязывается логика к этому объекту, и в конце - методы спавна. Вобщем весь путь от кофига, до сталкера, сидящего у костра, жующего хлебушек. п.с. Лично я застрял на логике. Там чёрт ногу сломит, какой то ещё псевдо-язык блин.
  18. Max_Raf

    Lost World: Origin Beta

    @GROM_27, lwc_dynamic_campfire.script . Копать там, Вроде бы туда прописывать координаты спавна костров. Там же вроде если почитать можно покрутить радиус, при котором можно их зажигать.
  19. Max_Raf

    X-Ray extensions

    @TIGER_VLAD, если я не забыл и не путаю, он привязывается в биндере самой аномалии. Прописывать на примере других коллбеков, ну скажем, как коллбеки актора. Срабатывает, когда аномалия наносит хит (относительно настроек конфигов). Внутри функции получаем онлайновый объект, по которому прошёл удар. К примеру: function CAnomalyBinder:hit_gameobj(gameobj) if gameobj:is_inventory_item() and not gameobj:is_artefact() then -- шо то делаем end end
  20. Max_Raf

    Prosectors Project

    На ап-про описание получше. Три мечталки-хотелки: 1) Было бы здорово прикрутить в это дело ещё наработки CHOC Redux , которые делаются на исходниках тоже. 2) специальный конфиг-настройщик фич как corrections_list в X-Ray Extensions. То есть чтобы сам проект делался более гибким для модмейкеров, которым движок сложен для собственных правок. К примеру включение\выключение работы артефактов с рюкзака и тому подобное. 3) wiki по новым (да лучше всего по всем, включая оригинальным) методам и функциям, чтобы знать для чего они и как применять. п.с. Еси чо, я закатал губу обратно.
  21. Как управлять передвижением нпс в оффлайне? Чтобы пошёл в определённый левел-вертекс на текущей или другой локации. Только с помощью вэйпоинтов?
  22. @КрокоСталкер, сталкивался с этим, вроде бы движком не предусмотрено что в пистолетном слоте лежит автомат и мы пытаемся приаттачить подствольник. Вроде бы ноги растут из-за отсутствия в контекстном меню функции на этот аттач в движке.
  23. Max_Raf

    Ищу файлы / моды / аддоны

    @Kober(BRUC), вроде оно: http://rgho.st/8KJJ26g7c
  24. Я вот начал изучать логику и всё такое и появился такой странный вопрос по этой теме. Как я понял тут обсуждается проблема, что надо как то обходить создание вэйпоинтов в алл.спавн. Видимо уже наверняка размышляли, что можно парсить значения из конфига или написать в каком либо скрипте аналог вэйпоинта и уже использовать его в схемах? Почему отказались от этой затеи? Я предупреждаю - я нуб по части логики гулагов и прочего.
  25. @AndrewMor, глянь скрипт "Гранаты на поясе" от Charsi, у него в профиле ссылка есть. Если я не ошибаюсь, то он написан для чистого тч и возможно там есть намёки как ловить предметы, попадающие на пояс.

AMK-Team.ru

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