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 Ссылка на комментарий
Charsi 441 Опубликовано 19 Июля 2016 Поделиться Опубликовано 19 Июля 2016 (изменено) @CRAZY_STALKER666, dvl_killer_sold_2_w_l? У тебя только dvl_killer_sold_2_w_w и dvl_killer_sold_2_l_l. Изменено 19 Июля 2016 пользователем Charsi 1 1 Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
mortan 144 Опубликовано 19 Июля 2016 Поделиться Опубликовано 19 Июля 2016 можно как-то вывести значение fov'a в виде текста в настройках? Я прикрутил туда для него настройку,хотелось бы видеть текущее значение когда двигаешь ползунок. Ссылка на комментарий
naxac 2 502 Опубликовано 20 Июля 2016 Поделиться Опубликовано 20 Июля 2016 (изменено) @mortan, сделай через CUISpinFloat(). Изменено 20 Июля 2016 пользователем naxac Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Sla-Sla 43 Опубликовано 20 Июля 2016 Поделиться Опубликовано 20 Июля 2016 Такой вопрос: как в ЗП скриптом спрятать оружие допустим, после юза предмета? Ссылка на комментарий
Gray Hawk 0 Опубликовано 20 Июля 2016 Поделиться Опубликовано 20 Июля 2016 (изменено) Всем здравствуйте! Хотелось бы поинтересоваться, как сделать скрипт книги? Например: у меня есть предмет, я его использую, срабатывает скрипт, передо мной вылезает окно с сообщением, чтобы его закрыть нужно нажать отдельную кнопку тоже в этом окне. Я знаю, что это сложно, я видел подобные скрипты, но я не знал, как их использовать и там, скорее всего не было кнопки и многоразового использования читабельного предмета. Очень хочется заполучить данный скрипт. Спасибо большое Изменено 20 Июля 2016 пользователем Gray Hawk Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 20 Июля 2016 Поделиться Опубликовано 20 Июля 2016 @Gray Hawk, на форуме есть мод, подобие просмотра книги или фотографии( на деле текстурки ). Поискать надо, название не помню. Народ! Помогите найти ошибку.Вот сам код, вызываеться из bind_stalker.update() Цитата local s_obj = { "[[ep\military\ml1]]", "[[ep\military\ml2]]", "[[ep\military\ml3]]" } local snd_flag = false Цитата function mil_sound_update() local level_gg = level.name() if snd_flag == false and level_gg == "l07_military" then local s_obj=s_obj[math.random(table.getn(s_obj))] local snd_obj = xr_sound.get_safe_sound_object(s_obj) snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) snd_flag = true end end Лог вылета - Показать [error]Line : 73[error]Description : [error]Arguments : LUA error: ...ow of chernobyl\gamedata\scripts\bind_stalker.script:324: attempt to call field 'mil_sound_update' (a nil value) Изначально грешил на таблицу(мол получение звука неверно), но и без неё вылетает... Не соответствует правилам. Ссылка на комментарий
Romann 623 Опубликовано 20 Июля 2016 Поделиться Опубликовано 20 Июля 2016 (изменено) CRAZY_STALKER666 писал(а): Изначально грешил на таблицу(мол получение звука неверно), но и без неё вылетает... Я бы сделал так: local s_obj = { [[ep\military\ml1]], [[ep\military\ml2]], [[ep\military\ml3]], } local snd_flag = false function mil_sound_update() local s_obj=s_obj[ math.random(#s_obj) ] local snd_obj = sound_object(s_obj) local level_gg = level.name() if snd_flag == false and level_gg == "l07_military" then snd_flag = true end if snd_flag then snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) end end local s_obj = { [[ep\military\ml1]], [[ep\military\ml2]], [[ep\military\ml3]], } local snd_flag = false function mil_sound_update() local s_obj=s_obj[ math.random(#s_obj) ] local snd_obj = sound_object(s_obj) local level_gg = level.name() if snd_flag == false and level_gg == "l07_military" then snd_flag = true end if snd_flag then snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) end end Изменено 20 Июля 2016 пользователем Romann 1 железо (Показать) Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz). Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб). Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge. Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор Ссылка на комментарий
Serge! 127 Опубликовано 20 Июля 2016 Поделиться Опубликовано 20 Июля 2016 CRAZY_STALKER666 писал(а): ocal s_obj = {"[[ep\military\ml1]]","[[ep\military\ml2]]","[[ep\military\ml3]]"} Длинные строки в Lua, на сколько мне помнится, имеют несколько другой синтаксис. Может стоит попробовать написать так:ocal s_obj = {[[ep\military\ml1]],[[ep\military\ml2]],[[ep\military\ml3]]}ocal s_obj = {[[ep\military\ml1]],[[ep\military\ml2]],[[ep\military\ml3]]} 1 Ссылка на комментарий
Dennis_Chikin 3 663 Опубликовано 20 Июля 2016 Поделиться Опубликовано 20 Июля 2016 "Изначально грешил на таблицу" и таки да. Либо крестик снять, либо трусы надеть. "ep\\military\\ml1" или [[ep\military\ml1]] - что-нибудь одно. Неплохо еще проверять, что объект получен, прежде чем пытаться с ним что-нибудь делать. 1 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Kondr48 314 Опубликовано 20 Июля 2016 Поделиться Опубликовано 20 Июля 2016 20.07.2016 в 16:32, Gray Hawk сказал: Хотелось бы поинтересоваться, как сделать скрипт книги? Можно посмотреть огсе, там есть. А так все просто: 1) В колбеке на использование предмета ловим нашу книгу, тут же спавним её и открываем страницу. 2) Страница - gui окно с фоном, на котором текст, а также кнопки смены страниц. Скорее всего шрифт придется добавлять, честно скажу - не в курсе делается ли это без ковыряния движка. Ну а если все страницы делать текстурами - слишком большой вес будет. Конечно, если речь не идет об одной-двух страницах) Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 20 Июля 2016 Поделиться Опубликовано 20 Июля 2016 @Romann, @Serge!, @Dennis_Chikin, никто из вас не прав, в данной проблеме... Упрастил функцию( нет, ну а что? Никто не запрещает каждую итерацию цикла делать что захочу...) Цитата function mil_sound_update() local level_gg = level.name() if level_gg == "l07_military" then local snd_obj = xr_sound.get_safe_sound_object([[ep\hurt]]) snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) end end Вылет... WAT!&! Перенес в другой скрипт, функцию не менял - НЕТ вылета... Все файлы проверяю постоянно чекером ошибок синтаксиса... но видимо он не все знает... У кого какие идеи? Не соответствует правилам. Ссылка на комментарий
Romann 623 Опубликовано 20 Июля 2016 Поделиться Опубликовано 20 Июля 2016 (изменено) CRAZY_STALKER666 писал(а): Проблема была в самом файле скрипта... И не понятно, какого она вообще рода... Ну это уже надо смотреть сам скрипт, мало ли, может те же переменные пересекаются в скрипте - названия надо давать оригинальные. А вообще у тебя в коде с таблицей получается две разные переменные с одинаковым названием: local s_obj = { ... } и local s_obj=s_obj[ math.random(#s_obj) ]local s_obj = { ... } и local s_obj=s_obj[ math.random(#s_obj) ] Надо так: local snd_tbl = { [[ep\military\ml1]], [[ep\military\ml2]], [[ep\military\ml3]], } local snd_flag = false function mil_sound_update() local s_obj=snd_tbl[ math.random(#snd_tbl) ] local snd_obj = sound_object(s_obj) local level_gg = level.name() if snd_flag == false and level_gg == "l07_military" then snd_flag = true end if snd_flag then snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) end end local snd_tbl = { [[ep\military\ml1]], [[ep\military\ml2]], [[ep\military\ml3]], } local snd_flag = false function mil_sound_update() local s_obj=snd_tbl[ math.random(#snd_tbl) ] local snd_obj = sound_object(s_obj) local level_gg = level.name() if snd_flag == false and level_gg == "l07_military" then snd_flag = true end if snd_flag then snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) end end Изменено 20 Июля 2016 пользователем Romann 1 железо (Показать) Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz). Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб). Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge. Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 20 Июля 2016 Поделиться Опубликовано 20 Июля 2016 @Romann, даже ваш старый вариант прекрасно работает! Проблема была в самом файле скрипта... И не понятно, какого она вообще рода... Не соответствует правилам. Ссылка на комментарий
Serge! 127 Опубликовано 20 Июля 2016 Поделиться Опубликовано 20 Июля 2016 (изменено) CRAZY_STALKER666 писал(а): Romann, Serge!, Dennis_Chikin, никто из вас не прав, в данной проблеме... Да уж нет "уважаемый". В данной проблеме не правы Вы и только Вы. Указанный вам факт не являлся единственным ляпом представленного кода. Вот, пожалуйста, второй. local s_obj=s_obj[ math.random(#s_obj) ] local s_obj=s_obj[ math.random(#s_obj) ] Если Вы немного освежите в памяти описание Lua (или изучите его), то узнаете, что после описания local s_obj = ... доступ к разделу памяти таблицы звуков s_obj полностью будет потерян и все потуги в последующими буковками - просто ничто. А получилось в конечном примере потому, что там было изменено само имя таблицы звуков, но если даже и в ней написать длинные строки, как было написано раньше - гарантировано будет вылет. Таки кто не прав? Изменено 20 Июля 2016 пользователем Serge! Ссылка на комментарий
Dennis_Chikin 3 663 Опубликовано 20 Июля 2016 Поделиться Опубликовано 20 Июля 2016 (изменено) local s_obj=s_obj[ math.random(#s_obj) ] Вполне законная операция. Хотя без предупреждения так делать не стоит, если не хотим затруднить кому-нибудь вносить свои изменения, и вообще разбираться, как наш код работает. P.S. Ну не правы - так не правы. Успехов. Изменено 20 Июля 2016 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Serge! 127 Опубликовано 20 Июля 2016 Поделиться Опубликовано 20 Июля 2016 Dennis_Chikin писал(а): Вполне законная операция. В данном контексте соглашусь, т.к. эти две локальные переменные имеют разные области видимости. Но, в общем такая практика весьма порочна. Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 20 Июля 2016 Поделиться Опубликовано 20 Июля 2016 @Dennis_Chikin, @Serge!, я не про то.... Вот смотрите. Если я вызову из того скрипта, пусть даже это: get_console():execute("1") или это if db.actor:has_info then give_info бла бла бла Или любую другую функцию - получу вылет... Вот я к чему... А звуки прекрасно работают, за это отдельное спасибо! Не соответствует правилам. Ссылка на комментарий
Kirgudu 1 280 Опубликовано 21 Июля 2016 Поделиться Опубликовано 21 Июля 2016 Коллеги, вы все не обратили внимание на один момент. Оставив в стороне то, как написана сама функция, видим это: CRAZY_STALKER666 писал(а): [error]Arguments : LUA error: ...ow of chernobyl\gamedata\scripts\bind_stalker.script:324: attempt to call field 'mil_sound_update' (a nil value) CRAZY_STALKER666 писал(а): Перенес в другой скрипт, функцию не менял - НЕТ вылета... ИМХО, ошибка где-то в другом месте того модуля, где функция располагалась первоначально. И несмотря на то, что чекер ошибок не даёт, что-то мешает движку прочесть все элементы этого модуля.UPD: Если только функция сначала была не в bind_stalker.script. 1 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий
Kondr48 314 Опубликовано 21 Июля 2016 Поделиться Опубликовано 21 Июля 2016 Я, мб, чего-то не понял об оконных классах? level.start_stop_menu(this.gui_mechanic_wnd(),true) mechanic_info["npc_name"] = first_speaker:character_name() mechanic_info["npc_icon"] = ini:r_string(first_speaker:profile_name().."_cfg","texture") news_manager.send_tip(actor, tostring(mechanic_info["npc_name"])) level.start_stop_menu(this.gui_mechanic_wnd(),true) mechanic_info["npc_name"] = first_speaker:character_name() mechanic_info["npc_icon"] = ini:r_string(first_speaker:profile_name().."_cfg","texture") news_manager.send_tip(actor, tostring(mechanic_info["npc_name"])) Здесь сообщение выводится как надо.Но когда мне нужно воспользоваться этими данными, а именно внутри кода скриптового окна уже. Мне приходит в сообщениях "nil". news_manager.send_tip(actor, tostring(mechanic_info["npc_name"])) news_manager.send_tip(actor, tostring(mechanic_info["npc_name"])) Ссылка на комментарий
Карлан 1 050 Опубликовано 21 Июля 2016 Поделиться Опубликовано 21 Июля 2016 @Kondr48, вопрос совершенно некорректный. Никто по этим обрывкам не сможет понять что ты делаешь, можно только гадать. Моя кофейная гуща говорит о том, что твоя таблица к моменту вызова типса уже вне зоны видимости, если вообще не уничтожена. Объяви ее в самом начале модуля вот так: local mechanic_info = {}local mechanic_info = {} Если вызов типса в этом же модуле, и вот так: mechanic_info = {}mechanic_info = {} Если в ином, но в таком случае вызывать ее нужно module.mechanic_info, почему? Недавно я как-раз рассказывал про видимость переменных, рекомендую прочесть, там же я давал ссылки на главы по окружению из официального мануала. 1 Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти