Это популярное сообщение. Dennis_Chikin 3 658 Опубликовано 16 Мая 2014 Это популярное сообщение. Поделиться Опубликовано 16 Мая 2014 Ковыряемся в файлах ТЧ Прежде чем писать в тему - внимательно читаем первый пост, и пользуемся поиском. Возможно, ответ на Ваш вопрос уже есть. Касательно телепатии: если Вы передаете Ваши файлы телепатическим путем - ответы будут передаваться тоже телепатически. Если Вы предлагаете угадать, отчего у Вас в подвале происходит странный стук - ответ будет передан стуком. 4 8 6 12 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
naxac 2 445 Опубликовано 5 Октября 2014 Поделиться Опубликовано 5 Октября 2014 (изменено) @Romann, вот это в кастом_дате, по-моему, лишнее: bar_kornet_camp = true esc_kornet_brigada = true road_kornet_brigada = true road_kornet_brigada_end = true Получается, нпс записан одновременно в четыре смарта)Да ещё и ниже по второму разу с условиями. Изменено 5 Октября 2014 пользователем naxac Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Wolkodav 0 Опубликовано 6 Октября 2014 Поделиться Опубликовано 6 Октября 2014 (изменено) Я так и не смог устранить ошибку... Expression : fatal error Function : CScriptEngine::lua_errorFile : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cppLine : 73Description :Arguments : LUA error: ...ives lost zone\gamedata\scripts\death_manager.script:139: attempt to index field '?' (a nil value) Вылетает после убийства любого нпс, группировки монолит, я все скрипты перерыл, думал может быть там где не правильно написано название группировки, все безрезультатно... помогите устранить ошибку... --' Ключем является группировка персонажа. Значением является таблица, содержашая имена секций предметов.local item_by_community = {}--' Зависимости в спауне предметов. Предмет спауниться только если есть хотя бы один из зависимых.local item_dependence = {}--' Множители и минимаксы для выпадения вещей в зависимости от уровняlocal mul_by_level = {}local count_by_level = {}--' Предметы, которые нельзя удалять (квестовые например)local always_keep_item = {}--' Предметы, относящиеся к патронам. Их надо спаунить другим методом.local ammo_sections = {}local death_ini = ini_file("misc\\death_generic.ltx")function init_drop_settings()local community_list = { "stalker", "monolith", "dolg", "freedom", "bandit", "military", "zombied", "ecolog", "killer", "arena_enemy", "actor_dolg", "military_layt", "nebo", "inkvizitor", "nato" }for k,v in pairs(community_list) do--' Необходимо заполнить таблицуitem_by_community[v] = {}if death_ini:section_exist(v) thenlocal n = death_ini:line_count(v)local id, value = "", ""for i=0,n-1 doresult, id, value = death_ini:r_line(v,i,"","")item_by_community[v][id] = 100*tonumber(value)endendend--' Заполняем таблицу зависимостейlocal n = death_ini:line_count("item_dependence")local id, value = "", ""for i=0,n-1 doresult, id, value = death_ini:r_line("item_dependence",i,"","")item_dependence[id] = {}local vvv = parse_names(value)for k,v in pairs(vvv) doitem_dependence[id][v] = trueendend--' Множители и минимаксы для выпадения вещей в зависимости от уровняlocal level_name = level.name()if not death_ini:section_exist(level_name) thenlevel_name = "default"endlocal n = death_ini:line_count(level_name)local id, value = "", ""for i=0,n-1 doresult, id, value = death_ini:r_line(level_name,i,"","")mul_by_level[id] = tonumber(value)endlocal item_count_section = "item_count_" .. level.get_game_difficulty()local n = death_ini:line_count(item_count_section)for i=0,n-1 doresult, id, value = death_ini:r_line(item_count_section,i,"","")--' Нужно распарсить value в два значенияlocal t = parse_nums(value)if t[1] == nil thenabort("Error on [death_ini] declaration. Section [%s], line [%s]", item_count_section, tostring(id))endlocal min = t[1]local max = t[2]if max == nil thenmax = minendif mul_by_level[id] == nil thenmul_by_level[id] = 0endmin = tonumber(min) * mul_by_level[id]max = tonumber(max) * mul_by_level[id]count_by_level[id] = {min = min, max = max}end--' Предметы, которые нельзя удалять (квестовые например)local n = death_ini:line_count("keep_items")for i=0,n-1 doresult, id, value = death_ini:r_line("keep_items",i,"","")if value == "true" thenalways_keep_item[id] = trueendend--' Предметы, относящиеся к патронам. Их надо спаунить другим методом.ammo_sections = {}local n = death_ini:line_count("ammo_sections")local id, value = "", ""for i=0,n-1 doresult, id, value = death_ini:r_line("ammo_sections",i,"","")ammo_sections[id] = trueendendclass "drop_manager"function drop_manager:__init(npc)self.npc = npcself.dropped = falseendfunction drop_manager:create_release_item()--' Спрашиваем у серверного объекта генерились ли предметыlocal se_obj = alife():object(self.npc:id())if se_obj.death_droped == true thenreturnendse_obj.death_droped = true--' Запускаем итератор на удаление предметовself.npc:iterate_inventory(keep_item, self.npc)--' Проверка на отсутствие спауна лутаlocal ini = self.npc:spawn_ini()if ini and ini:section_exist("dont_spawn_loot") thenreturnend--' Доспавниваем необходимое количество итемов:--' Необходимо составить список объектов которые могут быть заспавнены для персонажаlocal spawn_items = item_by_community[self.npc:character_community()]for k,v in pairs(spawn_items) do--' По каждому объекту необходимо получить зависимостиif check_item_dependence(self.npc, k) == true then--' По каждому объекту необходимо получить количествоlocal number = math.ceil(math.random(count_by_level[k].min, count_by_level[k].max))--' Необходимо заспавнить нужное количество.create_items(self.npc, k, number, v)endendend--' Функция вызывается для каждого предмета, если вернет false то предмет удалится.function keep_item(npc, item)if item==nil or alife():object(item:id())==nil then return endlocal section = item:section()if section == "bolt" thenreturn falseendif always_keep_item[section] == true thenreturn trueendlocal item_id = item:id()local item_in_slot = npc:item_in_slot(1)if item_in_slot ~= nil anditem_in_slot:id() == item_idthenitem:unload_magazine()--' Тут надо уменьшить кондишн оружияitem:set_condition((math.random(15)+75)/100)return trueenditem_in_slot = npc:item_in_slot(2)if item_in_slot ~= nil anditem_in_slot:id() == item_idthenitem:unload_magazine()--' Тут надо уменьшить кондишн оружияitem:set_condition((math.random(15)+75)/100)return trueendalife():release(alife():object(item:id()), true)endfunction set_weapon_drop_condition(item)local condition = (math.random(15)+75)/100--printf("condition [%s]", tostring(condition))item:set_condition(condition)end--' Функция спавнит необходимое число предметовfunction create_items(npc, section, number, rnd)--'printf("create %s of %s", tostring(number), tostring(section))if ammo_sections[section] == true thenif number > 0 thense_respawn.create_ammo(section,npc:position(),npc:level_vertex_id(),npc:game_vertex_id(),npc:id(),number)endelsefor i=1,number do--' Проверяем вероятность появить каждый объект в отдельностиif math.random(100) <= rnd thenalife():create(section,npc:position(),npc:level_vertex_id(),npc:game_vertex_id(),npc:id())endendendend--' Функция проверяет есть ли хоть один из зависимых объектов у персонажаfunction check_item_dependence(npc, section)if item_dependence[section] == nil thenreturn trueendlocal d_flag = truefor k,v in pairs(item_dependence[section]) dolocal obj = npc:object(k)if obj ~= nil and npc:marked_dropped(obj) ~= true thenreturn trueendd_flag = falseendreturn d_flagend С другими группировками все нормально...Если строка 139 - вот эта:local number = math.ceil(math.random(count_by_level[k].min, count_by_level[k].max))- то очевидно не существует какой-то count_by_level[k]добавить проверку и вывести в лог k, либо проверку непосредственно при загрузке. dc Изменено 6 Октября 2014 пользователем Dennis_Chikin Ссылка на комментарий
naxac 2 445 Опубликовано 6 Октября 2014 Поделиться Опубликовано 6 Октября 2014 (изменено) @AndrewMor, у меня нпс исправно забегают в вагончик. Аи-сетка оригинальная, ничего не правил, схема поведения при выбросе, думаю, та же (blowout_sheme.script). Файл с укрытиями в АМК (и в НС тоже): amk_hideouts.script И, по поводу аи-сетки: нпс без разницы, на каком ноды расстоянии друг от друга, главное, чтоб между ними связь была. На ЧАЭС-2 они, бывает, даже по воздуху "летают", чтоб до следующей ноды добраться XD Изменено 6 Октября 2014 пользователем naxac Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
AndrewMor 527 Опубликовано 6 Октября 2014 Поделиться Опубликовано 6 Октября 2014 у меня нпс исправно забегают в вагончик. Аи-сетка оригинальная, ничего не правил, схема поведения при выбросе, думаю, та же (blowout_sheme.script). Так в Солянке и у меня исправно бегут. У меня мод на базе ОГСМ ФАЕ с маппаком локаций от Кости. Так вот там - не бегут, хоть застрелись, на месте стоят. Хотя мне парни говорили, что и в ОГСМ, и в ФАЕ забегали в вагончик. пойдет один непись в вагончик нормально или нет ? Попробовал спавнить непися и посылал его в вагончик - не идет, однако. А если заспавнить его в вагончике и указать путь снаружи, он туда не идет а едет, игра его просто выпихивает к ближайшей АИ-клетке. А если родной файл level.gct прописать, вылетает с логом: FATAL ERROR[error]Expression : cross_table().header().game_guid() == game_graph().header().guid()[error]Function : CAI_Space::load[error]File : E:\stalker\sources\trunk\xr_3da\xrGame\ai_space.cpp[error]Line : 121[error]Description : graph doesn't correspond to the cross tablestack trace: Сталкер - наше всё! Ссылка на комментарий
AndreySol 215 Опубликовано 6 Октября 2014 Поделиться Опубликовано 6 Октября 2014 Ну так все понятно теперь - есть какой-то баг в AI-сетке. Тут SDK в помощь, загружаем уровень, смотрим что не так, правим. Ссылка на комментарий
Карлан 1 049 Опубликовано 10 Октября 2014 Поделиться Опубликовано 10 Октября 2014 (изменено) Возможно-ли как-то получить время анимации перезарядки оружия?запускаем анимацию, засекаем время, и проверяем npc:animation_count() dc Изменено 16 Октября 2014 пользователем Dennis_Chikin Ссылка на комментарий
AndrewMor 527 Опубликовано 11 Октября 2014 Поделиться Опубликовано 11 Октября 2014 Правильно ли я понимаю, что в секции Лиса в all.spawn: [spawner]cond = {+escape_stalker_help}[smart_terrains]esc_stalker_camp = true[known_info]escape_stalker_giveescape_stalker_doneENDstory_id = 5 1. условием спавна является выдача поршня escape_stalker_help? 2. а что после строки known_info - тоже поршни? И условие для онлайна - наличие обоих этих поршней? Сталкер - наше всё! Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 11 Октября 2014 Поделиться Опубликовано 11 Октября 2014 1. alife():object("esc_fox") 2. known_info - теоретически - выдается при разговоре/обшаривании трупа. На практике - "есть нюанс" © Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Struck 61 Опубликовано 11 Октября 2014 Поделиться Опубликовано 11 Октября 2014 (изменено) @AndrewMor, сверху указано где посмотреть для условий выхода в онлайн/оффлайн Проводника и Лиса: if type == "esc_stalker_camp" then return function(gulag) if has_alife_info("yan_provodnik_spawn") then return 1 else return 0 end end end @Wolkodav, статистика, все квесты желательно прогонять через task_manager. Ну или если хочется поизвращатся можно и вручную писать. Признайся как называется метод телепортации в ТЧ и как его прикрутить в логику, я нашел только телепортацию для ГГ по координатам. И есть ли необходимость присваивать SID??? Извиняюсь, попутал. Метод действительно работает только для актора, получается, что без нет-пакетов уже никак. Там тоже не все так гладко как хотелось бы, но нюансы быстрее увидеть на практике, нежели тут их расписывать. выдается при разговоре Моя практика показала, что выдается только при обшаривании трупа. Изменено 11 Октября 2014 пользователем Struck 1 Ссылка на комментарий
Struck 61 Опубликовано 11 Октября 2014 Поделиться Опубликовано 11 Октября 2014 (изменено) @AndrewMor, ты посмотреть не можешь что-ли? Скрипта нет? Да, не могут они вместе в онлайне быть, и в оффлайне тоже. @losiara, есть много модулей для работы с нет-пакетами. У разрабов подобного нет. Советую брать m_netpk от Artos'a. @AndrewMor, ты издеваешься? if type == "esc_stalker_camp" then t = { section = "logic@esc_stalker_camp_provodnik", idle = 0, prior = 10, state = {0}, online = false, in_rest = "", out_rest = "", predicate = function(obj_info) return obj_info.profile_name == "esc_provodnik" end } table.insert(sj, t) t = { section = "logic@esc_stalker_fox", idle = 0, prior = 10, state = {0}, in_rest = "", out_rest = "", predicate = function(obj_info) return obj_info.profile_name == "esc_fox" end } table.insert(sj, t) t = { section = "logic@esc_stalker_camp_provodnik", idle = 0, prior = 10, state = {1}, in_rest = "", out_rest = "", predicate = function(obj_info) return obj_info.profile_name == "esc_provodnik" end } table.insert(sj, t) t = { section = "logic@esc_stalker_camp1", idle = 0, prior = 8, state = {1}, online = false, in_rest = "", out_rest = "", predicate = function(obj_info) return obj_info.profile_name == "esc_fox" end } table.insert(sj, t) end Изменено 11 Октября 2014 пользователем Struck 1 Ссылка на комментарий
slesar6razriada 320 Опубликовано 11 Октября 2014 Поделиться Опубликовано 11 Октября 2014 Уважаемые аксакалы и всезнающие помогите разобраться, возможно не туда пишу. Но честное слово не знаю куда, и поиском не смог найти ответ, возможно не сообразил как сформулировать вопрос. Собственно сам вопрос как сместить позицию строчки координат на экране вниз? Монитор 1920х1080. Мой канал на Youtube Мои заглушки музыки для модов Ссылка на комментарий
Silver Raven 197 Опубликовано 11 Октября 2014 Поделиться Опубликовано 11 Октября 2014 (изменено) Кто-нибудь знает, из-за чего эта байда: Открытие потока... * phase time: 4 ms * phase cmem: 214575 K Загрузка формы объектов... * phase time: 233 ms * phase cmem: 224784 K Загрузка шейдеров... stack trace: 0023:0049FF36 XR_3DA.exe, CEffect_Rain::Render() 0023:00493DD0 XR_3DA.exe, CKinematicsAnimated::BoneChain_Calculate() Происходит после добавления новой локации в игру. Спавн ГГ на ней же. Может ли быть подобное как-то связано с не добавленной частью статичной модели к сектору, в котором та находится? Изменено 11 Октября 2014 пользователем Stalker_AleX333 aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Ссылка на комментарий
Struck 61 Опубликовано 11 Октября 2014 Поделиться Опубликовано 11 Октября 2014 (изменено) , вылет по шейдерам, возможно косяки по объектам, возможно геометрия, перекомпилировать нужно в любом случае, только сначала разберись в чем проблема, напрямую сказать тяжело. Помню, где-то попадалось что-то на тему: move_offline, но не могу найти. Очередной заумный вопрос Флаг no_move_in_offline выключи, и будет тебе счастье. Изменено 11 Октября 2014 пользователем Struck Ссылка на комментарий
AndreySol 215 Опубликовано 12 Октября 2014 Поделиться Опубликовано 12 Октября 2014 (изменено) Флаг no_move_in_offline выключи, и будет тебе счастье Данный флаг - это из SDK? А если непись спавнится скриптом, то надо править object_flags с помощью нет-пакета ? Попробовал так: local ser_obj = alife():create("gar_stalker_breakthrough", vector():set(-41.7293,2.1,8.4143), 146514, 295) if ser_obj then local pk = m_netpk.get(ser_obj) if pk and pk:isOk() then local data = pk:get() if data then data.object_flags = bit_not(64) pk:set(data) end end end 64 - это flOfflineNoMove 0000001000000 64 - по идее должен отвечать за отсутствие движения в оффлайне, но не используется Вот только не помогло - неписи все одно, пока в офф-лайне, не идут куда им прописано. то артефакт попросту не ставится в слот Тут, наверное, поможет только использование фейковых артефактов. Т.е. объект не на классе арта, но с его визуалом и описанием - соответственно в слот ставиться не будет. По выдаче инфо-порции подменять его на нормальный арт... Изменено 12 Октября 2014 пользователем AndreySol Ссылка на комментарий
Serge! 127 Опубликовано 12 Октября 2014 Поделиться Опубликовано 12 Октября 2014 Возможно ли реализовать "активацию артефактов" только после выдачи ИНФОпорции? Можно попробовать использовать метод объекта set_nonscript_usable(bool), который устанавливает для объекта возможность взаимодействия с актором. Например, при помещении объекта в инвентарь запрещать, а одновременно с выдачей инфопоршня - разрешать. Должно получиться. 1 Ссылка на комментарий
abramcumner 1 150 Опубликовано 12 Октября 2014 Поделиться Опубликовано 12 Октября 2014 Вот только не помогло - неписи все одно, пока в офф-лайне, не идут куда им прописано."Куда им прописано" указано в логике, а логика действует только в онлайне. Если ты не хочешь видеть, как они идут, заспавнь их сразу в точке назначения. 1 Ссылка на комментарий
AndreySol 215 Опубликовано 12 Октября 2014 Поделиться Опубликовано 12 Октября 2014 "Куда им прописано" указано в логике, а логика действует только в онлайне это не верное утверждение... Проблема в том, чтоб разрешить неписям движение в офф-лайне. Можно попробовать использовать метод объекта set_nonscript_usable(bool), Заинтересовало, решил проверить. В actor_binder:on_item_take добавил: if obj:section() == "af_vyvert" then obj:set_nonscript_usable(false) -- пробовал и false и true end результат отрицательный - после взятия в инвентарь, арт спокойно вешается на пояс и дает прописанные ему эффекты. Ссылка на комментарий
Serge! 127 Опубликовано 12 Октября 2014 Поделиться Опубликовано 12 Октября 2014 @AndreySol, Можно попробовать по другому. В actor_binder:on_use для данного объекта проверить инфопорщень. Если нет, то объет удалить и сразу заспавнить его обратно в инвентарь. Может так получиться. По поводу set_nonscript_usable(bool) - странно. Ссылка на комментарий
Struck 61 Опубликовано 12 Октября 2014 Поделиться Опубликовано 12 Октября 2014 это не верное утверждение... Да ладно? Поверь, ты их спавнишь, но на деле их нету. Они в оффлайне, т.е. теоретически говоря если ты туда переместишься в оффлайне, то там будет пусто и две твоих метки По поводу set_nonscript_usable(bool) - странно. Что тут странного? Смотрите тайники... Если нет, то объет удалить и сразу заспавнить его обратно в инвентарь. Может так получиться. Так получится, но это индусский способ. В принципе по другому никак не получится, при обретении артефакта нужно будет его менять на неюзаемый, либо хотя-бы на тот, который нельзя повесить на пояс или переместить в слот активации, но торговать там им вполне будет можно, но это все пляски с бубном. Заюзайте храй экстеншн, там есть удобные функции для этой задумки. Ссылка на комментарий
Хемуль36рус 1 789 Опубликовано 12 Октября 2014 Поделиться Опубликовано 12 Октября 2014 На АЭС2 есть вот такое место,мне нужно заспавнить нпс и мобов, они спанятся. но бегут к эстакаде. Что им мешает остаться на своем месте, может кто знает, что там мешает,? Intrel Core i5 9400F, msi gtx 1660 super ventus, RAM 16g-DDR4, HD 2000g, Win 10x64, SSD 256g, SSD m2 500g. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти