AndrewMor 527 Опубликовано 5 Мая 2019 Поделиться Опубликовано 5 Мая 2019 (изменено) 14 часов назад, _Sk8_AsTeR_ сказал: Так вот, там многих, так сказать, бочек с кострами нету. Каким образом можно получить название лагеря? Надеюсь правильно вопрос задал. Думаю, надо изменить код так, чтобы название смарт-террейна вообще не фигурировало в скрипте. Указывать только flame = "zone_flame_small_0001", light = "lights_camp_fire_omni_r1_r2_0001", а их названия взять из распакованного спавна. Изменено 5 Мая 2019 пользователем AndrewMor Сталкер - наше всё! Ссылка на комментарий
naxac 2 445 Опубликовано 5 Мая 2019 Поделиться Опубликовано 5 Мая 2019 @Norman Eisenherz, @Fenrir02 верно говорит - исключи из цикла актера, начинай перебирать с 1 for i = 1, 65534 do... 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Norman Eisenherz 309 Опубликовано 5 Мая 2019 Поделиться Опубликовано 5 Мая 2019 @naxac Просмотрел, что кроме шага еще и отсчет с 1 начинается. В таком виде работает даже без задержки запуска. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Norman Eisenherz 309 Опубликовано 10 Мая 2019 Поделиться Опубликовано 10 Мая 2019 Здрасьте. Сделал иконку состояния брони (набор статиков) с вызовом из function actor_binder:update(delta): на двух старых сейвах статик загружается и успешно работает, еще примерно на 10 старых сейвах и в новой игре не загружается, а при попытке сохранения и перезагрузки игры приводит к вылету с одним из двух приведенных ниже сообщений. Методом исключения удалось выяснить, что статикам мешает работать уборщик – мешает даже не перебором объектов на сервере, а конкретно той частью, которая удаляет бесхозное оружие. Добавил к запуску уборщика условие if device().precache_frame <= 1 – проблема разрешилась, но все-таки хочется знать, что вызывало эту проблему. ТЧ 1.0006, без глобальных модов. https://drive.google.com/open?id=1Yp4s8CvySYUsv0j2EolZYWdAan0JHsfN Spoiler Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...ow of chernobyl\gamedata\scripts\bind_stalker.script:411: attempt to concatenate field '?' (a nil value) для справки – указанная строка [bind_stalker.script] (с модами): get_console():execute("g_game_difficulty "..game_difficulty_by_num[game_difficulty]) Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...alker shadow of chernobyl\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value) Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
naxac 2 445 Опубликовано 10 Мая 2019 Поделиться Опубликовано 10 Мая 2019 @Norman Eisenherz, это у тебя где-то что-то виснет в биндере актера, и потом бьётся сохранение. Загружая его, получаешь этот вылет. Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
mole venomous 3 386 Опубликовано 10 Мая 2019 Поделиться Опубликовано 10 Мая 2019 6 часов назад, Norman Eisenherz сказал: attempt to concatenate field '?' naxac дело говорит, я ловил такую дрянь, в другой ситуации. Тогда у меня нет-пакет портился из-за негодной адаптации, а я то думал, что там с загрузкой моего difficulty... Здесь могла быть ваша реклама. Ссылка на комментарий
Norman Eisenherz 309 Опубликовано 10 Мая 2019 Поделиться Опубликовано 10 Мая 2019 @naxac Можно ли подробнее? Куда копать? Потестил еще: условие precache_frame привело к тому, что теперь уборщик не срабатывает на текущей локации. @mole venomous Нет-пакеты я точно не трогал. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
naxac 2 445 Опубликовано 11 Мая 2019 Поделиться Опубликовано 11 Мая 2019 (изменено) @Norman Eisenherz, вот в этом цикле for j = 1, #bodies do if del.position:distance_to(bodies[j].position) > 5 then alife():release(del) end end добавь break при успешном удалении, иначе попытается удалить несколько раз подряд. Возможно, из-за этого и зависает иногда. Изменено 11 Мая 2019 пользователем naxac Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
AndreySol 215 Опубликовано 11 Мая 2019 Поделиться Опубликовано 11 Мая 2019 (изменено) @Norman Eisenherz Вот этоl local act = db.actor стоит перенести из глобальной области скрипта в функцию, где объект актера используется. Изменено 11 Мая 2019 пользователем AndreySol 1 Ссылка на комментарий
Norman Eisenherz 309 Опубликовано 12 Мая 2019 Поделиться Опубликовано 12 Мая 2019 @naxac Проверил еще раз уборщик – старая логика действительно должна была сбоить: проверяется расстояние до 1-го трупа из списка, объект (возможно) удаляется, потом проверяется расстояние от этого же объекта до 2-го, 3-го трупа и т. д., и тот же объект снова удаляется (по крайней мере, делается такая попытка). Оператор break можно поставить только на негативное условие: если при переборе расстояний найдено значение меньше 5 , то закончить перебор для данного объекта и перейти к следующему, в противном случае удалить объект и перейти к следующему. Не до конца понимаю, как это правильно оформить, чтобы проверка не стопорилась на первом же значении > 5. Пошел другим путем: создать таблицу расстояний от текущего объекта до всех трупов, взять минимум, сравнить его с заданной величиной (5) и удалить, если этот минимум больше. Spoiler if next(wpn_near) ~= 0 then for i = 1, #wpn_near do local del = wpn_near[i] if del.position:distance_to(act:position()) > 10 then if next(bodies) ~= 0 then local distance = {} for j = 1, #bodies do local dist = del.position:distance_to(bodies[j].position) table.insert(distance, dist) end table.sort(distance) if distance[1] > 5 then alife():release(del) end else alife():release(del) end end end end @AndreySol Если функций несколько, лучше обозначать такие переменные в каждой из них или в общей области? Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
WinCap 316 Опубликовано 12 Мая 2019 Поделиться Опубликовано 12 Мая 2019 @Norman Eisenherz, на мой взгляд - сильно "замудрил". Попробуй так: for k, wpn in pairs(wpn_near)do if wpn.position:distance_to(act:position()) > 10 then if #bodies ~= 0 then for k, bod in pairs(bodies) do if wpn.position:distance_to(bod.position) > 5 then alife():release(wpn) break end end else alife():release(wpn) end end end S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Ссылка на комментарий
Norman Eisenherz 309 Опубликовано 12 Мая 2019 Поделиться Опубликовано 12 Мая 2019 @WinCap Кроме способа перебора (ну и еще остановки), это опять старая логика: "если до первого трупа в списке > 5 метров, то удалить оружие". Должно быть "если до всех трупов на локации > 5 метров, тогда удалять". Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
WinCap 316 Опубликовано 12 Мая 2019 Поделиться Опубликовано 12 Мая 2019 @Norman Eisenherz, тогда так: if #bodies ~= 0 then local del = true for k, bod in pairs(bodies) do if wpn.position:distance_to(bod.position) < 5 then del = false break end end if del then alife():release(wpn) end else 1 S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Ссылка на комментарий
Norman Eisenherz 309 Опубликовано 20 Мая 2019 Поделиться Опубликовано 20 Мая 2019 Здрасьте. Можно ли без правок движка изменить формат счетчика оставшегося времени для заданий? Единственный подходящий файл – [scripts\ask_manager.script], но сообщения в явном виде или его фрагментов (ui_st_time_remains, ui_st_days и ui_st_hours) в нем нет, как и ссылки на блок rem_time из файла [config\ui\job_item.xml]. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Полтергейст 37 Опубликовано 21 Мая 2019 Поделиться Опубликовано 21 Мая 2019 А никто ещё не переписывал скрипт class_registrator так, чтобы в нем хранились все таблицы с данными для регистрации классов и классификации объектов? В оригинале данные просто используются один раз при старте игры и не хранятся нигде, что неудобно. Ссылка на комментарий
AndreySol 215 Опубликовано 22 Мая 2019 Поделиться Опубликовано 22 Мая 2019 @Полтергейст А что ты в этих таблицах собираешься хранить, полезного для исп. в скриптах ? Ссылка на комментарий
Полтергейст 37 Опубликовано 22 Мая 2019 Поделиться Опубликовано 22 Мая 2019 @AndreySol, данные, необходимые для любых функций классификации (IsMonster и тому подобных). Туда же можно сохранить значение stype (modules.stype_чтонибудь). Да много всего можно там хранить, чтобы каждый раз не делать свою табличку для классификации. Ссылка на комментарий
AndreySol 215 Опубликовано 22 Мая 2019 Поделиться Опубликовано 22 Мая 2019 6 часов назад, Полтергейст сказал: IsMonster Ну так эта ф-ция объявлена в _G.script, тебе очень хочется иметь ее в класс_регистратор ? И какой с этого профит ? Ссылка на комментарий
Полтергейст 37 Опубликовано 22 Мая 2019 Поделиться Опубликовано 22 Мая 2019 @AndreySol, я про таблицы значений clsid, на которых эти функции работают. Неудобно, когда они разбросаны по куче разных файлов. Лучше иметь одну большую таблицу, где всё это собрано. Ссылка на комментарий
Norman Eisenherz 309 Опубликовано 28 Мая 2019 Поделиться Опубликовано 28 Мая 2019 Здрасьте. Делаю счетчик хилок на HUD: создал группу скриптовых статиков, вывел через get_hud():AddDialogToRender(…) и записал в таблицу, чтобы статики не потерялись при уборке. Проблема: если добавлять статики в таблицу через table.insert, то индексы получаются просто числами, и найти среди них нужный статик (для привязки текста или для удаления статика, если каких-то предметов 0) невозможно. Если добавлять статики в таблицу по секции предмета list[sect] = static, то случается безлоговый вылет через секунду после загрузки – так же, как при отсутствии хранения ссылок на статики. Что я упускаю? Мой мод и оригинал счетчика: https://drive.google.com/open?id=16gX0BYqim6zB6aZnGLqSV-kMPMB3QjQC Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти