Ренсон 11 Опубликовано 2 Июля 2011 Поделиться Опубликовано 2 Июля 2011 Люди добрые, проблема возникла. (если важно, действие происходит на подключённом к ТЧ Затоне) Создаю спейс_рестриктор [8886] ; cse_abstract properties section_name = space_restrictor name = osvedomitel_space_restrictor position = -313.689331054688,9.79648113250732,413.422393798828 direction = 0,0,0 ; cse_alife_object properties game_vertex_id = 3665 distance = 0 level_vertex_id = 321903 object_flags = 0xffffff3e custom_data = <<END [logic] active = sr_idle1 [sr_idle1] on_info = %+osvedomitel_restrictor_info% END ; cse_shape properties shapes = shape0 shape0:type = box shape0:axis_x = -313.689331054688,9.79648113250732,413.422393798828 shape0:axis_y = -313.689331054688,0,0 shape0:axis_z = 0,9.79648113250732,0 shape0:offset = 0,0,413.422393798828 ; cse_alife_space_restrictor properties restrictor_type = 3 Но инфопоршен выдаётся при заходе на локацию, а не в установленном рестрикторе месте. ? Ссылка на комментарий
Clayman 104 Опубликовано 2 Июля 2011 Поделиться Опубликовано 2 Июля 2011 А какое имя смарткавера? Как в примере выше? Измени его на другое, т.к. имена смарткаверов типа смарттеррейн_animpoint_1 и.т.д используются как раз для автоматического "заполнения" нпс смарт-каверов в смарт-террейне. Ссылка на комментарий
Влад 9 Опубликовано 2 Июля 2011 Поделиться Опубликовано 2 Июля 2011 Ренсон, переделай логику: [logic] active = sr_idle [sr_idle] on_actor_inside = %+osvedomitel_restrictor_info% Мои работы Не бойтесь совершенства. Вам его не достичь. C. Дали Ссылка на комментарий
Gektor 0 Опубликовано 2 Июля 2011 Поделиться Опубликовано 2 Июля 2011 Смена имени смарт кавера результата не дало... Команда ReWrite Team. От сталкера отошли. Пересели за другую платформу. Ссылка на комментарий
Clayman 104 Опубликовано 2 Июля 2011 Поделиться Опубликовано 2 Июля 2011 Странно.. а ты в СДК ставишь смарт-каверы? Покажи скрин тогда настроек смарт-кавера. Ссылка на комментарий
Gektor 0 Опубликовано 2 Июля 2011 Поделиться Опубликовано 2 Июля 2011 (изменено) -------------------------------------------- Опытным путем выяснил что при use_camp = false всё срабатывает.... Но ведь при этом они будут молчать всё время.... Изменено 2 Июля 2011 пользователем Gektor Команда ReWrite Team. От сталкера отошли. Пересели за другую платформу. Ссылка на комментарий
Clayman 104 Опубликовано 2 Июля 2011 Поделиться Опубликовано 2 Июля 2011 Странно, вроде все ок, почему не работает - непонятно. Ну и последний вопрос - смарткавер на аи-сетке стоит? Попробуй простейшую логику для одного непися сделать, как я написал и посмотри. Но опять же, я повторю - для посиделок у костра никакой логики не нужно! Достаточно обзывать смарт-каверы смарт_animpoint_1 и накрыть их кампом с именем смарт_camp и настройками в кастом дате: [camp] cfg = scripts\camp.ltx Ссылка на комментарий
Gektor 0 Опубликовано 2 Июля 2011 Поделиться Опубликовано 2 Июля 2011 Смарт кавер стоит на аи сетке, накрыт камп зоной, всё работает нормально, но мне надо чтобы сталкеры сидели у костра как в тенях чернобыля, но анимация прописаная avail_animations = sit_ass срабатывает только при use_camp = false, но ведь при этом это уже не будут посиделки у костра. Команда ReWrite Team. От сталкера отошли. Пересели за другую платформу. Ссылка на комментарий
Clayman 104 Опубликовано 2 Июля 2011 Поделиться Опубликовано 2 Июля 2011 Ну это то, о чем я говорил, нужно менять скрипты для анимпоинтов. Короче, если решишься, делаешь так: Качаем вот это архив - http://depositfiles.com/files/4ijntt4ly, там скрипты. Заменяешь ими в папке gamedata/scripts в игре и обязательно в СДК-шной геймдате, иначе у тебя не появится в списке доступных анимаций для смарткавера sit_ass и sit_knee. Далее перезагружаешь сдк, ставишь смарт-каверы, называешь как положено смарт_animpoint_1 и.т.д. Выбираешь для них сидячие анимации sit_ass и sit_knee. На sit_ass СДК начнет матюкаться красным что дескать отсутствует loopholes, не обращай внимания. Сними галку loopholes, чтобы потом при загрузке уровня каждый раз эти логи красные не видеть, в игре все равно анимация будет работать. Обязательно снять галки с is combat caver и can fire, иначе при компиляции спавна с камп-зоной будут вылеты компилятора. Ну а дальше накрываешь это дело кампом, как грил выше, у кампа выберешь тип рестриктора NOT A restrictor (незнаю почему, но у пысов так), компилишь, спавн, наслаждаешься посиделками у костра, покупаешь мне и nuclia коньяк Да, еще, направление взгляда нпс в этих каверах будет куда флажок в сдк показывает. Удачи! Ссылка на комментарий
Gektor 0 Опубликовано 3 Июля 2011 Поделиться Опубликовано 3 Июля 2011 Clayman и nuclia спасибо огромнейшее. Теперь другой вопрос: Как заставить обозлится на ГГ НПЦ в нескольких смарт террайнах, когда гг атакует каго либо в одном из этих смартов? И ещё На sit_ass СДК начнет матюкаться красным что дескать отсутствует loopholes А как добавить эти loopholes? Или хотябы в каких файлах смотреть примеры? Зарание зпасибо. Добавлено через 240 мин.: И ещё, такая проблема: Многие НПЦ с логикой walker в смартах часто становятся спиной к пути look. Что может быть причиной? Как исправить? Заранее спасибо Команда ReWrite Team. От сталкера отошли. Пересели за другую платформу. Ссылка на комментарий
PavelSnork 3 Опубликовано 3 Июля 2011 Поделиться Опубликовано 3 Июля 2011 Поиск не помог, потому и спрашиваю: как отследить то, что мини-карта включена/выключена? Например, при прицеливании через оптику или при диалоге она отключается. (Сталкер ЗП) Жду ли я Сталкер 2? Хм... Ссылка на комментарий
Clayman 104 Опубликовано 3 Июля 2011 Поделиться Опубликовано 3 Июля 2011 Gektor, надо связывать флаги точек путей walk и look, т.е в режиме редактирования point mode кликаешь на точке и отмечаешь галочку на флаге 0 например и тоже самое на точке look пути. Вобщем опять же учим матчасть на сталкервики "Логика НПС", там все это есть. Ссылка на комментарий
Kirag 39 Опубликовано 5 Июля 2011 Поделиться Опубликовано 5 Июля 2011 PavelSnork Попробуй по косвенным признакам - как раз по прицеливанию с оптикой - по db.actor:accuracy(), и для проверки наличия оптики вроде какая-то функция в ЗП появилась - и всяким окнам - диалог, инвентарь и т.д. - они по идее все сводятся к (level.main_input_reciever() ~= nil) - значит, что-то включено. Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Ссылка на комментарий
*Shoker* 322 Опубликовано 6 Июля 2011 Поделиться Опубликовано 6 Июля 2011 (изменено) PavelSnork Для диалогов копай скрипт pda.script Для прицеливания можно по device().fov - возвращает ширину зрения игрока, но тока учти что потом могут быть проблемы с модами, которые fov меняют, в оригинале фоу кажись толе 65 толи 55 Но вообще лучше забить на это всё. > level.main_input_reciever() Вроде в ЗП как раз вырезали его. Изменено 6 Июля 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
PavelSnork 3 Опубликовано 6 Июля 2011 Поделиться Опубликовано 6 Июля 2011 *Shoker*, да, сначала я использовал device().fov, но миникарта исчезала раньше, чем начинает уменьшаться этот fov, и мой элемент не успевал вовремя убраться. А с помощью проверки db.actor:accuracy(), которую посоветовал товарищ Kirag и моего шаманства, текстура миникарты исчезает чуть позже (хотя и успевает убраться до появления текстуры прицельной сетки), но синхронно с моим новым элементом худа. А с проверкой на диалог гг с НПСом мне уже помогли. С инвентарем проблем тоже нет (в ЗП миникарта не убирается при открытом инвентаре). А окно торговли и ПДА открываются поверх миникарты. Жду ли я Сталкер 2? Хм... Ссылка на комментарий
antreg 178 Опубликовано 7 Июля 2011 Поделиться Опубликовано 7 Июля 2011 (изменено) Добрый день! Помогите разобраться в одной ситуации: Собрали пак локаций для ТЧ 1.0004 (для чистой игры). В паке убраны несколько оригинальных локаций и добавлены несколько новых. На чистом ТЧ 1.0004 всё работает, всё хорошо. Провели адаптацию под АМК 1.4.1 Игра загружается, но получаем вылет при любом сэйв/лоад (сохранки не грузятся) или при переходе на другую локацию (вылет на синхронизации). Лог вылета (с отладчиком ZAMET): * [x-ray]: economy: strings[6629 K], smem[28666 K] ! Unknown command: ZAMET:file____________:___system.ltx ! Unknown command: ZAMET:section___:___space_restrictor ! Unknown command: ZAMET:lines_________:___4 ! Unknown command: ZAMET:line___0___:___$spawn___=___"ai\space_restrictor" ! Unknown command: ZAMET:line___1___:___GroupControlSection___=___spawn_group_restrictor ! Unknown command: ZAMET:line___2___:___class___=___SPC_RS_S ! Unknown command: ZAMET:line___3___:___script_binding___=___bind_restrictor.bind ! Unknown command: ZAMET:actor_binder:load():___self.object:name()='single_player' ! Unknown command: ZAMET:actor_binder:object_binder.load():___self.object:name()='single_player' ! Unknown command: ZAMET:ERROR:___[bind_stalker.script]SAVE___FILE___IS___CORRUPT 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:20: bad argument #2 to 'format' (string expected, got no value) Путём "научного" тыка определили, что виной всему всего одна функция в файле amk.script, которая вызывается из bind_stalker.script из функции actor_binder:net_spawn(data) (в самом конце этой функции). Имя этой злополучной для нас функции: function on_game_load() . Как я уже сказал, она в файле amk.script Вот эта функция: --загружаем все переменные, которые нужно, вызывается загрузке игры, автоматически; вручную не вызывать function on_game_load() amk.mylog("on_game_load begin") amk.mylog("object 2972 is "..((alife():object(2972) and alife():object(2972):name()) or "") ) amk.mylog("object 2975 is "..((alife():object(2975) and alife():object(2975):name()) or "") ) if db.storage[db.actor:id()].pstor == nil then db.storage[db.actor:id()].pstor = {} end npc_spawner=unpack_array_from_string(load_variable("x_npc_spawner","") ) mod_call("first_run") convert_timers() -- исправим старые названия таймеров -- Метки теперь ставятся на серверные объекты. Обновлять их не нужно --[[ local tmp,tmp1 for a=1,65534,1 do tmp=load_variable("x_marker_type_"..a,nil) if tmp~=nil then tmp1=load_variable("x_marker_text_"..a,nil) level.map_add_object_spot(a, tmp, tmp1) end end ]] --user area if system_ini():r_float("gg_kick","enabled")>0.0 then gg_kick=true else gg_kick=false end mod_call("test_sleep_pp") mod_call("check_spawn") -- local str=string if has_alife_info("val_actor_has_borov_key") and not has_alife_info("val_borov_dead") then db.actor:give_info_portion("val_borov_dead") end amk_mod.on_repbox() ----------- amk.mylog("on_game_load end") gps_habar.on_game_load() --idler++-- end Комментируем эту функцию в bind_stalker.script и всё становится нормально. Игра запускается, сэйвы работают, переходы тоже. Но это, ясно, что не панацея. Вот тут и возникли вопросы: 1) Для чего эта функция? Что она делает? 2) Если её закомментировать, с чем столкнёмся в дальнейшем? (Предполагаю, что убирать её нельзя). 3) Что, на ваш взгляд, может не нравиться игре в этой функции? 4) Что за объекты: (2972) и (2975), которые присутствуют в самом начале этой функции? 5) Как можно адаптировать эту функцию под нашу сборку, на что обратить внимание? Заранее спасибо! Изменено 7 Июля 2011 пользователем antreg "Тайные Тропы 2" техподдержка "Ф.О.Т.О.Г.Р.А.Ф" техподдержка Ссылка на комментарий
Kirag 39 Опубликовано 7 Июля 2011 Поделиться Опубликовано 7 Июля 2011 Хм... На первый взгляд все безобидно... Из этой функции в основном вызываются все остальные. Чтобы прописывать в нее, а не в bind_stalker, скорее всего. На первый взгляд, ничего критичного, НО! Из этой функции много чего вызывается, возможно, дело в одной из тех функций. Просто так комментить - часть функций АМК не запустится или запустится с левыми параметрами, результат непредсказуемый. 4) Что за объекты: (2972) и (2975), которые присутствуют в самом начале этой функции? Я так понимаю, это объекты, когда-то вызывавшие вопросы у разработчиков. Собственно, кроме вывода в лог инфы, что это за объекты, если они есть, ничего с ними больше не делается. В общем, что могу посоветовать - продолжить поиски по Методу Научного Тыка, но уже комментируя отдельные блоки кода в этой функции. Точнее, сначала закомментировав все, раскомментировать их по очереди. Предполагаю, проблемы начнутся после раскомментирования одного из вызовов функций, с той функцией и надо разбираться... Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Ссылка на комментарий
Artos 99 Опубликовано 7 Июля 2011 Поделиться Опубликовано 7 Июля 2011 (изменено) antreg При запуске игры, в момент спавна актора в АМК вызывается 'on_game_load()' для первичных проверок/настроек и пр. alife():object(2972) - проверка наличия объекта в игре с номером секции из all.spawn'a. В АМК 1.41 секции 9272 и 9275 - аномалии в ТД. (можно выкинуть) Далее идет проверка и если требуется - предустановка pstor'аджа актора (хранилище сохраняемых в сэйвах переменных). npc_spawner= из сэйва считывается массив заспавненных , но еще не инициализированных объектов (если таковые были в момент сохранения игры). mod_call("first_run") - важный(!) вызов 'first_run()'первичных настроек в amk_mod.script ... convert_timers() -- исправим старые названия таймеров - Можно выкинуть, это конвертер для старого формата из старых сэйвов сохранений игры. gg_kick - флаг для алгоритма "шальная пуля" - можно выкинуть mod_call("test_sleep_pp") - вызов 'test_sleep_pp()' из amk_mod.script ... (спальник) mod_call("check_spawn") вызов 'check_spawn()' из amk_mod.script ... (ре)спавн объектов (npc_spawner, динамич.аномалии, ...) val_actor_has_borov_key - пробуждение Кочерги ... amk_mod.on_repbox() - это уже чье-то левое ... gps_habar.on_game_load() - ну а это мод GPS-маячков для тайничков с пометками на карте --- ERROR:___[bind_stalker.script]SAVE___FILE___IS___CORRUPT - говорит о том, что из пакет актора был некорректно считан из сэйва. У АМК есть свои нюансы работы чтения/записи пакета. Вполне вероятно проблема в упаковке в сэйв массива 'npc_spawner' ... Изменено 7 Июля 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
antreg 178 Опубликовано 7 Июля 2011 Поделиться Опубликовано 7 Июля 2011 (изменено) Kirag, Artos, Спасибо за ответы! "Глючными" оказались два колбэка функций из amk_mod.script: mod_call("first_run") mod_call("check_spawn") function first_run() if amk.load_variable("x_first_run",true) then amk.g_start_timer("gg_need_sleep",0,0,6) amk.g_start_timer("show_news",0,0,10) amk.spawn_item_in_inv("matras") amk.save_variable("x_first_run",false) end if amk.load_variable("amk_12",0)==0 then amk.spawn_item("amk_zapiska",vector():set(-126.96,-28.41,-379.12),27,125181) amk.spawn_item("amk_zapiska",vector():set(21.6,-3.94,-18.28),1140,5991) amk.spawn_item("amk_zapiska",vector():set(-126.92,23.27,-36.98),1543,7083) amk.save_variable("amk_12",1) end if amk.load_variable("amk_13",0)==0 then -- pri_space_restrictor_0011 local obj = alife():story_object(830) if obj then alife():release(obj) alife():create(7373) end amk.save_variable("amk_13",1) end if amk.load_variable("amk_13",0)==0 then -- pri_space_restrictor_0011 local obj = alife():story_object(830) if obj then alife():release(obj) alife():create(7373) end amk.save_variable("amk_13",1) end if amk.load_variable("amk_version",0)<1400 then tmp_intro=true amk.save_variable("amk_version",1400) amk_anoms.pre_blow_off() amk_anoms.after_blow_on() spawn_military_btr() spawn_fuel() end end Тут как бы ясно, что у нас в сборке не совпадали стори_айди удаляемого рестриктора на стадионе в Припяти, который пролёт камеры активировал в оригинале, и вместо которого спавнилась в АМК аномалия, и стори_айди этой аномалии. Но вот непонятно, это нормально, что два раза одно и тоже условие присутствует в функции? Имеется ввиду: if amk.load_variable("amk_13",0)==0 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 --спавним аномалии --initial_spawn() local obj = alife():story_object(6000) if not obj then alife():create(2) obj = alife():story_object(6000) 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 if not db.actor:has_info("val_chase_start") then local objt = alife():story_object(6002) if objt then alife():release(objt) end 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 lname=="l01_escape" and sname=="l04_darkvalley" then local obj = alife():story_object(6002) if not obj then alife():create(0) end end if sname=="l01_escape" and lname=="l04_darkvalley" then db.actor:set_actor_position(vector():set(-44.38, 0.43, -541.47)) end --spots section obj = alife():story_object(6001) if obj then level.map_add_object_spot(obj.id, "level_changer", "to_pripyat") end obj = alife():story_object(6002) if obj then level.map_add_object_spot(obj.id, "level_changer", "to_darkvalley") 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 А тут, по всей видимости, идёт мониторинг локаций, которые мы "выбросили": Кордон и Тёмная Долина, на которых спавнится левел_ченджер, по определённому условию появления перехода ЧАЭС-2 - Припять при выходе во Фриплей. Так? Изменено 7 Июля 2011 пользователем antreg "Тайные Тропы 2" техподдержка "Ф.О.Т.О.Г.Р.А.Ф" техподдержка Ссылка на комментарий
Kirag 39 Опубликовано 7 Июля 2011 Поделиться Опубликовано 7 Июля 2011 antreg Но вот непонятно, это нормально, что два раза одно и тоже условие присутствует в функции? Имеется ввиду: if amk.load_variable("amk_13",0)==0 Это не нормально, но и не критично. После того, как отработает первое по скрипту условие, второе не выполнится уже никогда и конфликта не будет. Что бросилось в глаза, что в обеих функциях упоминается конструкция alife():create(N), N - номер в алл.спавне. Но эти номера меняются при пересборке алл.спавна, тем более, что перебрали вы его серьезно. Вероятно, при попытке заспавнить что-то (но уже не то, что задумано) происходит конфликт... Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти