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 Ссылка на комментарий
h0N0r 367 Опубликовано 23 Июня 2018 Поделиться Опубликовано 23 Июня 2018 В 22.06.2018 в 06:15, Egor4ikModMaker сказал: А можно полную ф-цию , я в скриптах не шарю , так что прошу помощи у вас. Просто хочу сделать что бы адекватно как у всех , работали квесты с указанием на карте. где же стоит этот нпс. Скрытый текст Вот такую функцию добавь в конец xr_effects.script, function add_spot_to_npc(actor, npc, p) if p[1] == nil then abort("Invalid parameter in function 'add_spot_to_npc', enter the profile_name!") end if p[2] == nil then abort("Invalid parameter in function 'add_spot_to_npc', enter the mapspot from map_spots.xml!") end if p[3] == nil then abort("Invalid parameter in function 'add_spot_to_npc', enter the hint!") end for a=1,65535,1 do local obj = alife():object(a) if obj and IsStalker(obj) and obj:profile_name() == p[1] then level.map_add_object_spot(obj.id, p[2], tostring(p[3])) end end end Потом её можно будет вызвать из любого другого скрипта: function my() ... xr_effects.add_spot_to_npc(nil, nil, {"bar_ecolog_professor", "blue_location", "ros_kruglov_name"}) ... end bar_ecolog_professor - профиль из \gameplay\character_desc_.xml blue_location - вид метки из \ui\map_spots.xml ros_kruglov_name - имя (если есть, но не используем при GENERATE_NAME_) из \gameplay\character_desc_.xml. Можно свой текст (типа kruglov_4udila_pret_v_anomaluu), но так игнорируются пробелы, так что, если длинная подсказка, то делаем в \text\rus\string_table_mapspots_.xml свою и используем её ид. Также можно вызвать из любого файла логики (нпс, объекты): логика рестриктора, [logic] active = sr_idle@start [sr_idle@start] on_info = {+bar_rescue_research_start} sr_idle@end %=add_spot_to_npc(bar_ecolog_professor:blue_location:ros_kruglov_name)% [sr_idle@end] Но всё это фигня, лучше скачай себе acdc (поставишь сид), сможешь нормально ставить метки. Ещё и сдк установи, а то сегодня метки, завтра локи править понадобиться. https://sites.google.com/view/xray-sdk-0-4-smg Ссылка на комментарий
Dennis_Chikin 3 662 Опубликовано 23 Июня 2018 Поделиться Опубликовано 23 Июня 2018 58 минут назад, h0N0r сказал: for a=1,65535,1 do local obj = alife():object(a) if obj and IsStalker(obj) and obj:profile_name() == p[1] И получаем метки на ВСЕХ неписях с таким профилем. Кстати, как раз случай, где ссылку на alife() можно получить до for ... И, кстати, 65535 - это земля. Второе - если мы получили что-то для какого-то i. и это то, что нам нужно, то level.map_add_object_spot( i, ...) И, наконец, if obj and obj:profile_name and obj:profile_name() == p[1] then Но я все равно не понимаю, как можно знать сид и профиль, не зная просто имя. Какая-то странная телепатия... Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Egor4ikModMaker 8 Опубликовано 23 Июня 2018 Поделиться Опубликовано 23 Июня 2018 (изменено) 2 часа назад, WinCap сказал: function andrew_at_map() local obj = alife():object("es_andrew") if obj then level.map_add_object_spot(obj.id, "green_location", "Андрюха") end end Попробую это. Добавляю в свой скриптовый файл, и вызываю через диалог <action>название файла.название функции</action> , игра хотя бы запускается. Добавлю эту ф-цию , в level_tasks.script , как указано в уроке хикса, ловлю вылет на загрузке такого характера Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...- Èñòèííûé ïóòü\gamedata\scripts\bind_stalker.script:194: attempt to index global 'level_tasks' (a nil value) Теперь убрав даже строку вызова ф-ции из диалога, при попытке разговора с нпс ловлю безлогий вылет. обидно. Изменено 23 Июня 2018 пользователем Egor4ikModMaker дополнение [Eger.Overkill] // Ⓐ // Eкьюалити / Uнити // ☮ "Burn the rich // eat the rich" О себе : Какой-то Ноунэйм с олд форума , заядлый нарушитель общественного порядка и правил , рецидивист. Ссылка на комментарий
Dennis_Chikin 3 662 Опубликовано 23 Июня 2018 Поделиться Опубликовано 23 Июня 2018 Осталось выяснить, зачем добавлять ее в level_tasks. И какая конечная цель всех манипуляций. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Egor4ikModMaker 8 Опубликовано 23 Июня 2018 Поделиться Опубликовано 23 Июня 2018 Только что, Dennis_Chikin сказал: Осталось выяснить, зачем добавлять ее в level_tasks. И какая конечная цель всех манипуляций. 1)Добавление этой ф-ции собственно было описано в вышеуказанном уроке от Хикса 2)Конечная цель этих манипуляций , что бы нпс отображался на карте у гг ( при взятии квестов принеси-подай ) как с торговцем. [Eger.Overkill] // Ⓐ // Eкьюалити / Uнити // ☮ "Burn the rich // eat the rich" О себе : Какой-то Ноунэйм с олд форума , заядлый нарушитель общественного порядка и правил , рецидивист. Ссылка на комментарий
AndreySol 215 Опубликовано 23 Июня 2018 Поделиться Опубликовано 23 Июня 2018 1 час назад, Dennis_Chikin сказал: Но я все равно не понимаю, как можно знать сид и профиль, не зная просто имя. Какая-то странная телепатия... "как можно знать сид" - ну к примеру, через сет в game_story_ids.ltx. Или не реально ? 45 минут назад, Egor4ikModMaker сказал: attempt to index global 'level_tasks' (a nil value) Это явно простая синтаксическая ошибка. Проверь синтаксис добавленного кода. Ссылка на комментарий
Egor4ikModMaker 8 Опубликовано 23 Июня 2018 Поделиться Опубликовано 23 Июня 2018 (изменено) 10 минут назад, AndreySol сказал: "как можно знать сид" - ну к примеру, через сет в game_story_ids.ltx. Или не реально ? Это явно простая синтаксическая ошибка. Проверь синтаксис добавленного кода. Собственно это странно, потому что bind_stalker я не трогал вообще! Т.е файл оригинальный, и до этого все работало без подобного вылета. upd: Не понимаю ничего , т.е если я в game_story_ids напишу например 12000 = esc_vova(имя перса из профиля) он типа вообще это игнорирует? Потому что я до этого пытался поставить на него метку. Т.е по аналогии как и с сидором , при выдаче квеста , там следущим образом построен квест <objective> <text>Принести Артефакт Андрею</text> <infoportion_complete>ses_done</infoportion_complete> <map_location_type hint="esc_andrew">blue_location</map_location_type> <object_story_id>esc_andrew</object_story_id> </objective> Изменено 23 Июня 2018 пользователем Egor4ikModMaker 1 [Eger.Overkill] // Ⓐ // Eкьюалити / Uнити // ☮ "Burn the rich // eat the rich" О себе : Какой-то Ноунэйм с олд форума , заядлый нарушитель общественного порядка и правил , рецидивист. Ссылка на комментарий
Dennis_Chikin 3 662 Опубликовано 23 Июня 2018 Поделиться Опубликовано 23 Июня 2018 13 минут назад, Egor4ikModMaker сказал: принеси-подай Как вообще берутся ? В диалоге с этим неписем ? Через редактирование task_manager.ltx + task_manager.script ? Через local task = CGameTask(); task:load( ... ) и т.д. ? @AndreySol, а в game_story_ids они щучьим велением прописываются ? Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Egor4ikModMaker 8 Опубликовано 23 Июня 2018 Поделиться Опубликовано 23 Июня 2018 1 минуту назад, Dennis_Chikin сказал: Как вообще берутся ? В диалоге с этим неписем ? Спокойно. Через диалог с нпс + game_tasks.xml 2 минуты назад, Dennis_Chikin сказал: game_story_ids они щучьим велением прописываются ? Нет , в ручную прописал 12.000 = "esc_andrew" ( из профиля нпс ) как было ранее указано в уроках . [Eger.Overkill] // Ⓐ // Eкьюалити / Uнити // ☮ "Burn the rich // eat the rich" О себе : Какой-то Ноунэйм с олд форума , заядлый нарушитель общественного порядка и правил , рецидивист. Ссылка на комментарий
Dennis_Chikin 3 662 Опубликовано 23 Июня 2018 Поделиться Опубликовано 23 Июня 2018 Непись с диалогом тот же самый, на которого надо метку ? <<в ручную прописал 12.000 = "esc_andrew" >> - поздравляю. Удивительно, что запускается. P.S. представляю, как сейчас Хикс ржет улыбается. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Egor4ikModMaker 8 Опубликовано 23 Июня 2018 Поделиться Опубликовано 23 Июня 2018 Только что, Dennis_Chikin сказал: Непись с диалогом тот же самый, на которого надо метку ? <<в ручную прописал 12.000 = "esc_andrew" >> - поздравляю. Удивительно, что запускается. Да [Eger.Overkill] // Ⓐ // Eкьюалити / Uнити // ☮ "Burn the rich // eat the rich" О себе : Какой-то Ноунэйм с олд форума , заядлый нарушитель общественного порядка и правил , рецидивист. Ссылка на комментарий
Dennis_Chikin 3 662 Опубликовано 23 Июня 2018 Поделиться Опубликовано 23 Июня 2018 Прописываем в диалоге <action>куда.надо</action> (если уже есть, то не прописываем, а добавляем) куда.script: function надо( n1, n2 ) if n1:id() == 0 then n1 = n2 end level.map_add_object_spot_ser( n1:id(), "кракозябра", "надпись" ) что-там еще было end Об чем и говорилось с самого начала. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Egor4ikModMaker 8 Опубликовано 23 Июня 2018 Поделиться Опубликовано 23 Июня 2018 (изменено) 8 минут назад, Dennis_Chikin сказал: level.map_add_object_spot_ser( n1:id(), "кракозябра", "надпись" ) Вызывает вопрос только что должно быть под "кракозяброй"? Upd: Поставил одно из ранее указанных значений вместо кракозябры - green_location , ловлю безлогий вылет. Такой же результат если поставить "primary_object". Изменено 23 Июня 2018 пользователем Egor4ikModMaker [Eger.Overkill] // Ⓐ // Eкьюалити / Uнити // ☮ "Burn the rich // eat the rich" О себе : Какой-то Ноунэйм с олд форума , заядлый нарушитель общественного порядка и правил , рецидивист. Ссылка на комментарий
Dennis_Chikin 3 662 Опубликовано 23 Июня 2018 Поделиться Опубликовано 23 Июня 2018 "green_location" или green_location ? В ui\map_spots.xml вообще есть такая ? Скрипт через lua.exe вообще собирается ? Диалог правильно написан ? Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Egor4ikModMaker 8 Опубликовано 23 Июня 2018 Поделиться Опубликовано 23 Июня 2018 2 минуты назад, Dennis_Chikin сказал: "green_location" или green_location ? В ui\map_spots.xml вообще есть такая ? Да есть . специально проверил , и primary_object Скрипт через lua.exe вообще собирается ? Диалог правильно написан ? - не мне судить насколько правильно он собирается, но до этого работал. Не знаю , может я дурной и на последнюю фразу диалога лепить нельзя .но вот диалог <dialog id="find_art1"> <dont_has_info>ses_done</dont_has_info> <dont_has_info>ses_have</dont_has_info> <phrase_list> <phrase id="0"> <text>Привет, есть работенка какая?</text> <next>1</next> </phrase> <phrase id="1"> <text>Здрав буди, да имеются для тебя, мелкие поручения, извини но пока я тебе серьезную не доверю, ты уж не обижайся.</text> <next>2</next> </phrase> <phrase id="2"> <text>Все нормально , так что у тебя там за поручения?</text> <next>3</next> </phrase> <phrase id="3"> <text>Тебе нужно поискать артефакт "Медуза", как найдешь приходи, в замен получишь хороший ствол и пару пачек патронов. Искать его стоит севернее бункера сидора. Там есть небольшой участок с аномалиями, будь осторожен. Удачи.</text> <next>4</next> </phrase> <phrase id="4"> <text>Спасибо за наводку. Сейчас схожу посмотрю.</text> <action>sesok.mapspot</action> -- вот именно это и вызывает функцию проблемную. <give_info>ses_have</give_info> </phrase> </phrase_list> </dialog> [Eger.Overkill] // Ⓐ // Eкьюалити / Uнити // ☮ "Burn the rich // eat the rich" О себе : Какой-то Ноунэйм с олд форума , заядлый нарушитель общественного порядка и правил , рецидивист. Ссылка на комментарий
Dennis_Chikin 3 662 Опубликовано 23 Июня 2018 Поделиться Опубликовано 23 Июня 2018 sesok.script на обменник, и ссылку в студию. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Egor4ikModMaker 8 Опубликовано 23 Июня 2018 Поделиться Опубликовано 23 Июня 2018 3 минуты назад, Dennis_Chikin сказал: sesok.script на обменник, и ссылку в студию. Держи http://rgho.st/8p5J5cXqs [Eger.Overkill] // Ⓐ // Eкьюалити / Uнити // ☮ "Burn the rich // eat the rich" О себе : Какой-то Ноунэйм с олд форума , заядлый нарушитель общественного порядка и правил , рецидивист. Ссылка на комментарий
Dennis_Chikin 3 662 Опубликовано 23 Июня 2018 Поделиться Опубликовано 23 Июня 2018 в map_spots.xml слово primary_object вообще существует ? Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Egor4ikModMaker 8 Опубликовано 23 Июня 2018 Поделиться Опубликовано 23 Июня 2018 Только что, Dennis_Chikin сказал: в map_spots.xml слово primary_object вообще существует ? существует и существует вот так <primary_object> <level_map spot="primary_object_spot" pointer="quest_pointer"/> </primary_object> <primary_object_spot x="0" y="0" width="15" height="15" alignment="c" scale="1" scale_min="1" scale_max="6" stretch="1"> <texture x="858" y="392" width="62" height="62">ui\ui_common</texture> </primary_object_spot> [Eger.Overkill] // Ⓐ // Eкьюалити / Uнити // ☮ "Burn the rich // eat the rich" О себе : Какой-то Ноунэйм с олд форума , заядлый нарушитель общественного порядка и правил , рецидивист. Ссылка на комментарий
Kirgudu 1 264 Опубликовано 23 Июня 2018 Поделиться Опубликовано 23 Июня 2018 1 час назад, Egor4ikModMaker сказал: 1 час назад, AndreySol сказал: "как можно знать сид" - ну к примеру, через сет в game_story_ids.ltx. Или не реально ? Это явно простая синтаксическая ошибка. Проверь синтаксис добавленного кода. Собственно это странно, потому что bind_stalker я не трогал вообще! Т.е файл оригинальный, и до этого все работало без подобного вылета. Да не в bind_stalker ошибка, а в level_tasks. Попробуй перевести на русский: Цитата attempt to index global 'level_tasks' (a nil value) это означает "попытка проиндексировать глобальный объект 'level_tasks' (значение nil)". То есть ты из bind_stalker пытаешься вызвать какую-то функцию в level_tasks, но так как level_tasks имеет значение nil - получаешь ошибку. А быть равным nil какой-то скрипт может в том случае, если внутри имеется какая-то синтаксическая ошибка, и движок просто не может скрипт загрузить. Проверяй, что делал не так в level_tasks. Инструмент Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти