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 Ссылка на комментарий
Nazgool 250 Опубликовано 18 Марта 2015 Поделиться Опубликовано 18 Марта 2015 (изменено) @Simonov50, При первом обращении к нему он сам зарегистрируется. @Капитан Кузьмичёв, Насколько я понял это нужно делать в пределах локации? db.actor:set_actor_position(vector():set(X,X,X)) не подойдет? Поставить space_restrictor и при заходе в него вызывать метод выше. Изменено 18 Марта 2015 пользователем Nazgool 1 Ссылка на комментарий
Михаил Мега черьв 1 Опубликовано 18 Марта 2015 Поделиться Опубликовано 18 Марта 2015 Можете подсказать? Нужен запуск скриптов и выдача инфо при использовании итемов в ЛА. Сами колбэки на использование и всё прочее уже есть, но сама функция выглядит так function actor_binder:on_use_item(oItem) local sSection = oItem:section() if not sSection:match("fake") then event("item_use"):trigger({item=oItem,item_id=oItem:id(),section=sSection}) --/#!#> end end Как мне его модернизировать чтобы при использовании из этой функции запускался ещё и мой скрипт? Хочу сделать звуки при употреблении пищи Ссылка на комментарий
Сталкер-Стрелок 12 Опубликовано 18 Марта 2015 Поделиться Опубликовано 18 Марта 2015 (изменено) @Михаил Мега черьв, тут система ивентов-сигналов, если не хочешь использовать ее - читай тутор, если с ней, то смотри как интятся скрипты и подключай свой, на мотив:event('item_use'):register(func) и далее function func(e) -- action end где е - вышеуказанная тобою таблица. Изменено 18 Марта 2015 пользователем Сталкер-Стрелок Ссылка на комментарий
boryan67 38 Опубликовано 20 Марта 2015 Поделиться Опубликовано 20 Марта 2015 @stalker8509, возможно. Подобная схема боя для БТР уже реализована и включена в мод "Terra Incognita". Удалось довольно просто реализовать этот режим, не внося глобальных изменений в исходную схему логики БТР. Но простота реализации схемы достигнута благодаря ее взаимодействию с другими компонентами мода. Поэтому, рассматривать ее в отрыве от остальных компонентов мода нельзя. Ссылка на комментарий
Михаил Мега черьв 1 Опубликовано 20 Марта 2015 Поделиться Опубликовано 20 Марта 2015 Подскажите как повесить на поднятие предмета выдачу инфопоршня без квеста. Вроде знаю что какой то апдейт надо создавать, но что это такое и как вообще это сделать не знаю. если есть где то такая статья - скиньте Ссылка на комментарий
Dennis_Chikin 3 662 Опубликовано 21 Марта 2015 Поделиться Опубликовано 21 Марта 2015 Не надо ничего создавать. bind_stalker: function actor_binder:on_item_take() - добавить свою проверку и добавить db.actor:give_info_portion(), тоже с проверкой на то, что уже выдано. И, да, целая отдельная тема есть, где все расписано. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Капитан Кузьмичёв 124 Опубликовано 25 Марта 2015 Поделиться Опубликовано 25 Марта 2015 (изменено) Подскажите, пожалуйста, как сделать так, чтобы определённый НПС не использовал фонарик даже ночью? Заранее спасибо! sr_light.script внезапно занимается включением/выключением фонариков. dc Поиском пользовался, но так и не нашёл ответа. Скрипт глядел, но мне для конкретного НПС нужен запрет на использование фонарика, а не всея Зоны. Ну и менять схему поведения НПСу из-за фонарика не очень то хочется. Изменено 25 Марта 2015 пользователем Капитан Кузьмичёв Ссылка на комментарий
Nazgool 250 Опубликовано 25 Марта 2015 Поделиться Опубликовано 25 Марта 2015 (изменено) а не всея Зоны Да там по идее достаточно просто для конкретного сделать, только нужно знать : но мне для конкретного НПС нужен запрет А насколько он конкретный? Чем отличается от других? У него своя секция? Или sid? Изменено 25 Марта 2015 пользователем Nazgool Ссылка на комментарий
Dennis_Chikin 3 662 Опубликовано 25 Марта 2015 Поделиться Опубликовано 25 Марта 2015 "У него своя секция? Или sid?" Да как-бы и obj:name() в таком случае должно быть вполне достаточно. А скрит, кстати, откомментирован вполне подробно. Если уж ЭТОГО недостаточно, то вопрос называется "а вот сделайте мне сам не знаю что, но чтобы было". Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Nazgool 250 Опубликовано 25 Марта 2015 Поделиться Опубликовано 25 Марта 2015 (изменено) @Dennis_Chikin, С obj:name() не так всё просто, как с section или sid. Хорошо если НПС в all.spawn-е. Можно имя глянуть как с sid-ом. А если он скриптовый? В общем... Полагаю что человек ещё не очень в скриптах, поэтому сразу и исключил этот вариант из списка. Изменено 25 Марта 2015 пользователем Nazgool Ссылка на комментарий
UnLoaded 313 Опубликовано 26 Марта 2015 Поделиться Опубликовано 26 Марта 2015 как сделать так, чтобы определённый НПС не использовал фонарик даже ночью?Может лучше глянуть в сторону enable_attachable_item - правда будет запрет и на батоны, гитары, водку. Но я думаю что навряд-ли непись, которому запрещено пользоваться фонариком, будет сидеть у костра в кампе. Ссылка на комментарий
Nazgool 250 Опубликовано 26 Марта 2015 Поделиться Опубликовано 26 Марта 2015 (изменено) @UnLoaded, Это понятно что enable_attachable_item. Тут все проще. Батоны, гитары, водка не при чем. В sr_light.script есть функция check_light, которая стоит на апдейте из xr_motivator.script. И в самом конце : if light ~= nil and torch then torch:enable_attachable_item(light) end добавить проверку на нужного НПС : if light ~= nil and torch then if "тот_сталкер_который_нужен" then light = false end torch:enable_attachable_item(light) end Вот собственно и был вопрос, - что у этого сталкера есть такого, чтобы сказать, что это "тот_сталкер_который_нужен". Т.е. что использовать вместо "тот_сталкер_который_нужен"? stalker:section() == "секция_того_сталкера" stalker:name() == "имя_того_сталкера" stalker:story_id() == "sid_того_сталкера" stalker:profile_name() == "может_такое_имя_есть" или ещё что-то, чем его можно отличить от других Изменено 26 Марта 2015 пользователем Nazgool 1 Ссылка на комментарий
Капитан Кузьмичёв 124 Опубликовано 26 Марта 2015 Поделиться Опубликовано 26 Марта 2015 (изменено) Ещё вопрос. Если я декомпилирую аллспавн, а потом все alife и way и прочее засуну просто в папку all, предварительно удалив аллспавн, то работать будет? Просто у меня мистическим образом работает (игра). Изменено 26 Марта 2015 пользователем Капитан Кузьмичёв Ссылка на комментарий
HellRatz 2 896 Опубликовано 26 Марта 2015 Поделиться Опубликовано 26 Марта 2015 Просто у меня мистическим образом работает (игра). Ну если делаешь изменения на чистой игре, то не мудрено, all.spawn же вшит в 1 из игровых архивов, по этому его удаление из папки gamedata никак не влияет (пока там нет капитальных изменений). 1 1 GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Раритетные моды на моем облаке — на память о былом. Ссылка на комментарий
Simonov50 2 Опубликовано 26 Марта 2015 Поделиться Опубликовано 26 Марта 2015 (изменено) @Nazgool, При обычной загрузке лист сразу транслируется, и если присутствует текст обращения к несуществующей функции будет вылет. То есть, вариант проверки "если есть лист, тогда обратиться к функции не срабатывает". Если "спрятать" текст (mu_call="Имя_скрипта"..".".."имя_функции".."()"), то вылета не будет, но команда dostring(mu_call) не проходит. Видимо в игре недоступна? Пытаюсь найти вариант загрузки в два этапа. Обычным образом загрузить мой 1_й лист, мой второй лист (с обращением к функции) спрятать в другом каталоге, если присутствует некий третий лист,(наличие функции в котором и проверяется), то подключить мой второй лист. Но как это сделать не представляю. Изменено 26 Марта 2015 пользователем Simonov50 Ссылка на комментарий
Dennis_Chikin 3 662 Опубликовано 26 Марта 2015 Поделиться Опубликовано 26 Марта 2015 (изменено) Э-эээ... Может, сначала попробовать расшифровать ? Что за "лист" такой, зачем делать mu_call="Имя_скрипта"..".".."имя_функции".."()", и т.д. Ибо, во-первых, есть классическое local func local module, fname = string_match( infop.func, "(.+)[.](.+)" ) if not fname then func = xr_effects[infop.func] elseif _G[module] and _G[module][fname] then func=_G[module][fname] endиз xr_logic.script, во-вторых: t = { ["fn"] = module.fn } ... t["fn"]()Или надо что-то еще ? Изменено 26 Марта 2015 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Nazgool 250 Опубликовано 26 Марта 2015 Поделиться Опубликовано 26 Марта 2015 (изменено) Может, сначала попробовать расшифровать ? +1 Раз 5 перечитал, но так и не смог определить для себя круг задач. @Simonov50, Ты хочешь защититься от вылета при вызове не существующей функции в файле? Правда возникает вопрос - зачем вызывать функцию, которой нет? Распиши подробнее, что ты хочешь сделать. А если вдруг я правильно понял, то можешь сделать хотя бы так. В _g.script добавить функцию : function safe_call(script, func, ...) local module = _G[script] if module then local f = module[func] if type(f) == 'function' then return f(...) end end end И вызывать где-то в защищенном режиме : -- вызов x = safe_call('my_script','my_func', arg1, ... , argN) -- проверка if safe_call('my_script','my_func', arg1, ... , argN) then ... end Изменено 26 Марта 2015 пользователем Nazgool Ссылка на комментарий
Simonov50 2 Опубликовано 28 Марта 2015 Поделиться Опубликовано 28 Марта 2015 @Dennis_Chikin, Спасибо !!! Всё в тему, но кому классика, а кому откровение. Если я верно понял, то нужно засовывать в инфопоршень, а вытаскивать с помощью xr_effects. Ни когда с инфопоршнями не работал. Пойду читать xr_effects. Ещё раз спасибо. @Nazgool, Круг задач определён уровнем моих незнаний и для понимания нормальным человеком слишком обширен. Пока есть только цель - сделать "переносной" скрипт (из мода в мод). Воткнул его, он сам быстренько посмотрел ресурсы и "сказал" что (и где) надо доделывать руками. Скрипт чисто модерский - простенький инструментарий (будет когда-нибудь?). Про _G всё понял, а вот про защищённый режим (на уровне игры) услышал впервые! Где читать? Спасибо за помощь - иду учить мат.часть. Ссылка на комментарий
Dennis_Chikin 3 662 Опубликовано 28 Марта 2015 Поделиться Опубликовано 28 Марта 2015 (изменено) xr_logic - это не работа с info как таковыми, а разбор условий и какие-то действия по этим условиям. Здесь нам интересно конкретно реализация действия %=miscript.myfunc% Если оно находит точку, то func=_G["miscript"]["myfunc"] если точки нет - то есть, в логике написано %=myfunc% - то пытается найти функцию "myfunc" в xr_effects.script. Ну а дальше там идет банально func() - то есть, вызов найденного. Ну а если идет речь о скрипте, который хочет определить, есть ли нужная функция в каком-то другом месте, так здесь все еще проще: if another_script.myfunc then another_script.myfunc() -- функция есть, вызываем else ... -- оппаньки ! end Изменено 28 Марта 2015 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Хек 20 Опубликовано 28 Марта 2015 Поделиться Опубликовано 28 Марта 2015 В общем такое дело, делал по этой схеме. Всё работает как часы, но проблема в следующем.. Как только стартует таймер, мне нельзя сейв/лоад жать, использовать спальник, и локации переходить(в противном случае таймер останавливается/не срабатывает) Как это победить можно? Мы типа сталкеры, мы крутые Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти