antreg 178 Опубликовано 7 Июля 2011 Поделиться Опубликовано 7 Июля 2011 (изменено) Kirag, Да, всё так. Ещё раз спасибо за участие в нашей проблеме! Но, вроде бы, такой конструкции там нет: alife():create(N). Там конструкции строго на стори_айди - alife():story_object(N) или я чего то пропустил? А стори_айди у нас как раз и не совпадали. Вот и спавнился "воздух". Изменено 7 Июля 2011 пользователем antreg "Тайные Тропы 2" техподдержка "Ф.О.Т.О.Г.Р.А.Ф" техподдержка Ссылка на комментарий
Kirag 39 Опубликовано 7 Июля 2011 Поделиться Опубликовано 7 Июля 2011 antreg Ну, вот например, из 2-й функции: --спавним аномалии --initial_spawn() local obj = alife():story_object(6000) if not obj then alife():create(2) obj = alife():story_object(6000) end Функция проверяет наличие объекта со стори ИД = 6000, если не находит - создает из алл.спавна. Что там получилось в алл.спавне за номером 2 после перекомпиляции - кто ж его знает. Но врядли это остался тот самый объект, у которого 6000-й СИД. И таких моментов несколько... Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Ссылка на комментарий
antreg 178 Опубликовано 8 Июля 2011 Поделиться Опубликовано 8 Июля 2011 (изменено) Kirag, Artos, После "чистки" от неиспользуемых у нас условий и функций, с функцией first_run() теперь всё в норме. Сложнее оказалось с функцией check_spawn() После того, как убрали все неиспользуемые в нашей сборке условия и прочее, остался вот такой массив: function check_spawn() amk_anoms.init() spawn_unspawned_respawners() if (news_main) then news_main.init() end if (amk_offline_alife) then amk_offline_alife.init() end if (amk_corpses) then amk_corpses.init() end if (amk_objects) then amk_objects.init() end if amk.load_variable("freeplay",0)==1 then amk.save_variable("freeplay",2) elseif amk.load_variable("freeplay",0)==2 and (not has_alife_info("cit_fail_first_task")) then db.actor:give_info_portion("cit_fail_first_task") end --level_changers section local lname = level.name() local sname = amk.load_variable("level_on_save","") if (amk_offline_alife) then amk_offline_alife.update_npc_tables() end if (amk_corpses) then amk_corpses.update_all_corpses() end if lname ~= sname and amk_objects then amk_objects.update() end -- Выдадим сообщения при переходе на уровень. if news_main then if (lname ~= sname and sname ~= "") then if (news_main.isIsolatedLevel(lname)== true and news_main.isIsolatedLevel(sname) == false) then -- Спустились под землю. news_main.on_disconnect() elseif (news_main.isIsolatedLevel(lname) == false and news_main.isIsolatedLevel(sname) == true) then -- Выбрались из-под земли. news_main.on_connect() end if (amk_offline_alife) then amk_offline_alife.update_trade() end end end if weather_types[lname]==0 then w=amk.load_variable("dynweather",nil) or level.get_weather() else w=level.get_weather() end if amk.load_variable("blowout",0)>0 then amk.save_variable("weather",level.get_weather()) end level.set_weather("amk_for_blow",true) game.start_tutorial("restore_sun") if amk.load_variable("blowout",0)>0 and amk.load_variable("blowout",0)<4 then local bt=blowout_type() level.add_cam_effector("camera_effects\\earthquake.anm", 2002, true, "") if bt<1 then level.set_weather("amk_for_blow",true) level.add_pp_effector("vibros.ppe", 2001, true) blowout_psy_sound("start") end end if db.actor and not has_alife_info("game_over") then local flame = db.actor:object("wpn_flame") if flame then db.actor:iterate_inventory( function(dummy,item) if item:section()=="wpn_flame" then alife():release(alife():object(item:id())) end end ,db.actor) end end end Комментирование оставшихся составляющих массива функции check_spawn() для того, чтобы отловить проблемную функцию, приводит к вылету при сэйв/лоад с логом: ! Unknown command: ZAMET:start_game_callback___called FATAL ERROR [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: d:\st\008_tt2_final\gamedata\scripts\_g.script:1245: attempt to index global 'amk' (a nil value) Получается, что тут, как бы, вторая ступень коллбэков. И непонятно, куда дальше "копать", откуда идёт вызов тех функций и условий, что остались. Возможно, эта задача, что мы хотим решить, не имеет решения, а возможно и имеет. К сожалению, я не имею навыков в прочтении таких функций. 1) Можно ли расшифровать оставшиеся составляющие функции check_spawn() для дальнейшей работы по отлову проблемного в нашем случае места? И второй вопрос: комментирование коллбэка на всю функцию check_spawn() целиком, в файле бинд_сталкер.скрипт к каким последствиям приведёт в дальнейшем? Чего мы лишаемся в этом случае? Изменено 8 Июля 2011 пользователем antreg "Тайные Тропы 2" техподдержка "Ф.О.Т.О.Г.Р.А.Ф" техподдержка Ссылка на комментарий
_Призрак_ 11 Опубликовано 8 Июля 2011 Поделиться Опубликовано 8 Июля 2011 [error]Arguments : LUA error: d:\st\008_tt2_final\gamedata\scripts\_g.script:1245: attempt to index global 'amk' (a nil value) Указывает на то что синтаксическая ошибка в файле амк.скрипт. Скачай lua_cheker или скрипт_синтаксис_чекер и проверь скрипт на наличие ошибок Freedom Ссылка на комментарий
antreg 178 Опубликовано 8 Июля 2011 Поделиться Опубликовано 8 Июля 2011 _Призрак_, Если ты внимательно прочитал сообщения выше, то там написано, что данный вылет с таким логом происходит после комментирования одной из функций. И ключевой, в логе вылета, является строка: start_game_callback___called, указывающая на то, что мы искусственно создали условие для вылета, закомментировав одну из функций массива, нарушив стартовый вызов (колбэк), т.е. специально создали ошибку. В этом и есть вопрос, как теперь расшифровать те функции и условия, которые невозможно закомментировать для отлова проблемы. "Тайные Тропы 2" техподдержка "Ф.О.Т.О.Г.Р.А.Ф" техподдержка Ссылка на комментарий
KD87 718 Опубликовано 8 Июля 2011 Поделиться Опубликовано 8 Июля 2011 (изменено) antreg, этот вылет всегда означает ровно одно - синтаксическая ошибка в amk.script, в результате которой скрипт не может корректно подгрузиться. Применительно к твоим условиям - закомментил лишний end или, наоборот, чего-то недокомментил. Что толку искать функции и условия, если испортили синтаксис? Изменено 8 Июля 2011 пользователем KD87 Ссылка на комментарий
antreg 178 Опубликовано 8 Июля 2011 Поделиться Опубликовано 8 Июля 2011 KD87, Конечно, но вопрос то совсем в другом был. То, что я искусственно создал такой вылет - это и так понятно. Комментирование функции с вызовом через колбэк конечно вызовет синтаксическую ошибку. Вопрос то совсем не в этом. Это только последствия последовательных действий поиска проблемы, с целью найти причину, мешающую нам адаптировать то, что задумано. Поиск проблемы адаптации пока зашёл в тупик, так как пропала возможность путём "тыка" (комментирования) найти некорректный контент, мешающий адаптации. Если кто-то может реально помочь, прошу поучаствовать в решении. Только прошу, вникните вначале в суть вопроса. "Тайные Тропы 2" техподдержка "Ф.О.Т.О.Г.Р.А.Ф" техподдержка Ссылка на комментарий
Kirag 39 Опубликовано 8 Июля 2011 Поделиться Опубликовано 8 Июля 2011 antreg Попробуй МНТ, план Б. Если не полчается комментировать, добавь тестовый вывод после... Ну, для начала, после каждого законченного фрагмента кода. У меня для этого в _g.script есть функция: function qqq(n,o) local scr = true local con = true if o then if o == 1 or o == 0 then scr = false end if o == 2 or o == 0 then con = false end end local k = "debug data QQQ "..tostring(n) if scr then if db.actor then news_manager.send_tip(db.actor, k, nil, nil, 5000) end end if con then get_console():execute ("load "..k) get_console():execute ("flush") end end Выкидывает сообщение на экран и в лог, второй параметр необязателен, он позволяет указать явно, куда нужен вывод инфы. Расставь qqq("mark 1")...qqq("mark N") в функции check_spawn(), и после вылета посмотри, какое сообщение прошло последним. Проблема должна быть между последним сработавшим qqq и следующим за ним. Так ты хотя бы область поиска сузишь. Потом можешь в этом фрагменте поставить qqq почаще, может, с точностью до строки найдешь проблему... Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Ссылка на комментарий
KD87 718 Опубликовано 8 Июля 2011 Поделиться Опубликовано 8 Июля 2011 antreg, не понял. Как ты комментируешь? Если закоментировать строчку mod_call("check_spawn") такого вылета не будет. check_spawn же в amk_mod.script, а вылет у тебя по amk.script. Давай тогда и amk.script выкладывай. Ссылка на комментарий
Buusty 386 Опубликовано 9 Июля 2011 Поделиться Опубликовано 9 Июля 2011 Кто-нибудь выкладывал логику неписей, чтобы ходили по Зоне сквадом/группой, т.е. чтобы не разбредались по одиночке - "кто куда". В принципе, не важно куда они пойдут и зачем, пусть шарохаются по Зоне, но вместе. Просто задумал сделать несколько таких спец.групп, гуляющих по Зоне. По задумке, они являются некими "карателями" для ГГ, и очень бы хотелось сделать встречу с ними случайной/рандомной, а, соответственно, внезапной для ГГ - можно нарваться на них, а можно и разминуться. Мод - "Народная Солянка". Если можно, то желательно без редактированния all.spawn. Знаю только, чтобы их не засосал какой-нибудь гулаг, нужно прописать - [smart_terrains] none = true ---------------- По большому счету, на этом мои познания в логике неписей и заканчиваются )). Если кто-то сможет помочь с этим вопросом, буду весьма благодарен! Можно в личку. Ссылка на комментарий
PavelSnork 3 Опубликовано 9 Июля 2011 Поделиться Опубликовано 9 Июля 2011 Как проверить, используется широкоформатное или обычное разрешение экрана? Жду ли я Сталкер 2? Хм... Ссылка на комментарий
Kirag 39 Опубликовано 9 Июля 2011 Поделиться Опубликовано 9 Июля 2011 PavelSnork Вот так: local ar = device().aspect_ratio if ar <= 0.75 then -- WIDE SCREEN else -- NORMAL SCREEN end Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Ссылка на комментарий
Miller 10 Опубликовано 10 Июля 2011 Поделиться Опубликовано 10 Июля 2011 (изменено) Ребят,а возможно ли заспавнить НПС,который спавнится через all.spawn, в другом месте без разбора спавна? Изменено 10 Июля 2011 пользователем Miller Ссылка на комментарий
Disord 1 Опубликовано 10 Июля 2011 Поделиться Опубликовано 10 Июля 2011 Miller, xrSpawner только. Ссылка на комментарий
Miller 10 Опубликовано 10 Июля 2011 Поделиться Опубликовано 10 Июля 2011 (изменено) Таак.Ок. Другой вопрос:насколько я знаю,ACDC для НарСоли нет в общем доступе (или есть?).Существует ли другой ACDC,которым можно распаковать all.spawn Соли?Универсальный какой-нибудь,чтоли. --- И можно ли удалить гулаг с локации?Или отключить его? Изменено 10 Июля 2011 пользователем Miller Ссылка на комментарий
Disord 1 Опубликовано 10 Июля 2011 Поделиться Опубликовано 10 Июля 2011 Miller, тоже удаляй смарттеррейн из спавна и, если у неписей в логике прописан этот гулаг - просто убери им его с логики, поставь другой или вообще запрети быть в гулагах. Ещё можно отредактировать скрипт с гулагом, чтобы возвращало неписям всегда состояние другое, которое не прописано в работах, которого вообще нет, должны тоже разбежаться. Ну это у меня так сделали. Ссылка на комментарий
Miller 10 Опубликовано 10 Июля 2011 Поделиться Опубликовано 10 Июля 2011 А если не удается найти секцию НПС через xrSpawner (Звездочет,например),значит его спавн идет через скрипт? Ссылка на комментарий
Disord 1 Опубликовано 10 Июля 2011 Поделиться Опубликовано 10 Июля 2011 Miller, если его там точно нет, значит да, через скрипт. Ссылка на комментарий
KD87 718 Опубликовано 10 Июля 2011 Поделиться Опубликовано 10 Июля 2011 Miller, есть такой ACDC, так и называется - universal_acdc В последней редакции умеет разбирать/собирать спавны от модов. Ссылка на комментарий
*Shoker* 322 Опубликовано 10 Июля 2011 Поделиться Опубликовано 10 Июля 2011 Разбирает по готовым базам или автоматом определяет новые секции? Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти