Svoboда 3 Опубликовано 23 Апреля 2009 Поделиться Опубликовано 23 Апреля 2009 Тема для обсуждения скриптов всего и всех в серии игр STALKER. Задавая вопрос (!): 1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего; 2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме); 3. Изучите информацию которая может вам помочь: Stalkerin. Там есть много хороших статей касательно данной темы.Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения. Справочное руководство по языку Lua 5.1https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ruСправочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены. Логика со вступлением и четырьмя частями: ВступлениеЧасть перваяЧасть втораяЧасть третьяЧасть четвертая. Smart_terrain (в простонароде - гулаг)Интересный способ настроики логики для гулаговСкриптовая часть игровой логики 4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос; 5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе; 6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода; 7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины. 8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ. 9. И помните: «Правильно заданный вопрос – половина ответа». Какие вопросы следует задавать, а какие нет... Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу. Вопросы которые будут удалятся, следовательно их задавать не нужно:-- Где находится та или иная функция? Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;-- Как сделать что-то/то-то? С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов? В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос. И последнее: очень рекомендовано к прочтению Правила форума 1 2 Ссылка на комментарий
antreg 179 Опубликовано 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 179 Опубликовано 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 179 Опубликовано 8 Июля 2011 Поделиться Опубликовано 8 Июля 2011 _Призрак_, Если ты внимательно прочитал сообщения выше, то там написано, что данный вылет с таким логом происходит после комментирования одной из функций. И ключевой, в логе вылета, является строка: start_game_callback___called, указывающая на то, что мы искусственно создали условие для вылета, закомментировав одну из функций массива, нарушив стартовый вызов (колбэк), т.е. специально создали ошибку. В этом и есть вопрос, как теперь расшифровать те функции и условия, которые невозможно закомментировать для отлова проблемы. "Тайные Тропы 2" техподдержка "Ф.О.Т.О.Г.Р.А.Ф" техподдержка Ссылка на комментарий
KD87 718 Опубликовано 8 Июля 2011 Поделиться Опубликовано 8 Июля 2011 (изменено) antreg, этот вылет всегда означает ровно одно - синтаксическая ошибка в amk.script, в результате которой скрипт не может корректно подгрузиться. Применительно к твоим условиям - закомментил лишний end или, наоборот, чего-то недокомментил. Что толку искать функции и условия, если испортили синтаксис? Изменено 8 Июля 2011 пользователем KD87 Ссылка на комментарий
antreg 179 Опубликовано 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, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти