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 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/
AndrewMor 534 Опубликовано 27 Марта 2019 Поделиться Опубликовано 27 Марта 2019 @Баба ЯГА, А ларчик просто открывался. Как всегда, все гениальное лежит на самом виду, спасибо. 1 Сталкер - наше всё! Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/487/#findComment-1253950
Norman Eisenherz 354 Опубликовано 30 Марта 2019 Поделиться Опубликовано 30 Марта 2019 (изменено) Здрасьте. Возникла необходимость прочитать (сравнить) определенное значение из списка с записями вида ["k"]={v1, v2, v3}, то есть под каждым ключом список значений, но эти значения не "true", и не списки. Я пошел через размер таблицы-ключа и обращение по числовым индексам. Есть ли способ проще? В поиске "rep_inc[k]["i"], но без кавычек переменная считается тегом "курсив". Spoiler local rep_inc = { [0.25] = { "bandit_", "killer_", "novice_", "_beretta", "_colt", "_eagle", "_fort", "_pb", "_pm", "_sig220", "_walther", "_usp", "_ak74u", "_bm16", "_mp5" }, [0.1] = { "exo_", "military_", "_gauss", "_svu", "_svd", "_vintorez", "_rg", "_rpg7" } } function rep_grade(slot) local sect = slot:section() local value = 0.15 for k, v in pairs(rep_inc) do for i = 1, table.getn(rep_inc[k]) do if string.find(sect, rep_inc[k]) then value = k break end end end return valueend Изменено 30 Марта 2019 пользователем Norman Eisenherz Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/487/#findComment-1254572
ptichkin 0 Опубликовано 1 Апреля 2019 Поделиться Опубликовано 1 Апреля 2019 Всем привет! Делаю мод, в котором хочу восстановить гражданских зомби. С помощью скриптов добавил им радиационный фон и реакцию детектора при приближении к ним. Но я в скриптах - нуб, просто повезло, что под рукой оказались подходящие шаблоны. Ещё я хочу восстановить для зомби анимацию приема пищи. Просто вместо этого типа анимации проигрывается анимация "stand_idle_". На форуме по ковырянию в файлах "Теней Чернобыля" мне посоветовали вообще править движок, но этот вариант меня не устраивает, поскольку до доводки до ума зомби я вставил в мультиплеер дополнительное оружие, а игра с модифицированным движком не может при выборе сетевой игры распознать версии игр с немодифицированными движками. Остается только надежда восстановить не действующие анимации зомби через скрипт, но как я уже упоминал, в скриптах я - нуб. Кто-нибудь раньше пытался восстановить недействующие анимации монстров через скрипт? Был бы очень признателен за консультацию по этой теме. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/487/#findComment-1254985
Norman Eisenherz 354 Опубликовано 6 Апреля 2019 Поделиться Опубликовано 6 Апреля 2019 Здрасьте. Повесил в [bind_stalker.script] простую функцию с удалением предмета из инвентаря по имени секции. Взял для тестов пистолет ПБ и прицел ПСО-1: пистолет удаляется, прицел – нет. Оба предмета не квестовые, оба не находятся в слотах, конфиги предметов стандартные. В чем разница? local del = "wpn_pb" -- local del = "wpn_addon_scope" if act:object(del) then alife():release(alife():object(del), true) end Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/487/#findComment-1256325
AndreySol 215 Опубликовано 7 Апреля 2019 Поделиться Опубликовано 7 Апреля 2019 (изменено) 7 часов назад, Norman Eisenherz сказал: alife():object(del) Ф-ция object с строковым аргументом ищет объект по имени. А ты в ф-цию подсовываешь конфиговую секцию. В случае с удалением "wpn_pb" - просто совпадение, что существует обект с таким именем. Сделай правильно, примерно так: local obj = db.actor:object("wpn_addon_scope") if obj then alife():release(alife():object(obj:id()), true) end Изменено 7 Апреля 2019 пользователем AndreySol 2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/487/#findComment-1256355
Norman Eisenherz 354 Опубликовано 7 Апреля 2019 Поделиться Опубликовано 7 Апреля 2019 @AndreySol И вот тут я теряюсь: для ПБ есть название секции "wpn_pb" и инвентарное имя "wpn-pb". Какое имя используется в функции удаления, если она срабатывает с вариантом "wpn_pb"? Имя файла модели? Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/487/#findComment-1256404
AndreySol 215 Опубликовано 7 Апреля 2019 Поделиться Опубликовано 7 Апреля 2019 4 часа назад, Norman Eisenherz сказал: Имя файла модели? Ну при чем тут файл модели ? Вот несколько фрагментов из распакованного спавна: Скрытый текст ; cse_abstract properties section_name = wpn_bm16 <-- это конфиговая секцияname = esc_wpn_bm16 <-- это уникальное имя объекта position = 338.799987792969, 15.3627433776855, 242.199981689453 direction = -3.42261046171188e-008, -0.838799953460693, -1.56779897212982 ...... ; cse_abstract properties section_name = bandagename = esc_bandage_0005 position = 340.254608154297, 18.6207141876221, 239.889846801758 ...... Имя предмета может быть задано несколькими способами: разработчиком, при размещении объекта через СДК(или ACDC) или автогенерацией в движке или в СДК.. И ф-ция удаления не использует имен - она принимает аргументом указатель на серверный класс предмета... Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/487/#findComment-1256469
Norman Eisenherz 354 Опубликовано 7 Апреля 2019 Поделиться Опубликовано 7 Апреля 2019 В all.spawn прописаны объекты, которые заранее рождаются на карте локации, но не те, которые по ходу игры создаются через рандомный лут? Имена последних должны иметь какие-то случайные приставки к имени секции, так? Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/487/#findComment-1256475
Norman Eisenherz 354 Опубликовано 7 Апреля 2019 Поделиться Опубликовано 7 Апреля 2019 (изменено) Хочу создать коробку и сложить в нее определенные предметы. Для ссылки на коробки из списка story_ids есть функция level.object_by_sid(#). Как вычислить id коробки в инвентаре? Обращение через db.actor:object("box"):id() или alife():object(все то же самое) приводит к вылету с ошибкой "attempt to index a nil value". Коробка не обнаруживается даже через проверку if act:object("box"), хотя успешно спавнится в инвентарь по этому же имени. Изменено 7 Апреля 2019 пользователем Norman Eisenherz Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/487/#findComment-1256497
AndreySol 215 Опубликовано 7 Апреля 2019 Поделиться Опубликовано 7 Апреля 2019 1 час назад, Norman Eisenherz сказал: Хочу создать коробку и сложить в нее определенные предметы Это ты инвентарный ящик хочешь ГГ в рюкзак запихнуть ? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/487/#findComment-1256518
Norman Eisenherz 354 Опубликовано 7 Апреля 2019 Поделиться Опубликовано 7 Апреля 2019 @AndreySol Идея в том, чтобы временно скидывать вещи из слотов в ящик на время торговли и обыска. Пока привязался к коробке около арены (story_id = 573), но я не могу таскать ее за собой на другие карты. Можно спавнить ящик под ноги и обращаться к нему через level.object_by_id (почему-то он ловится только при повторном вызове функции), но хочется все-таки спавнить ящик прямо в инвентарь и отправлять предметы в него. Так можно вообще? Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/487/#findComment-1256527
AndreySol 215 Опубликовано 7 Апреля 2019 Поделиться Опубликовано 7 Апреля 2019 23 минуты назад, Norman Eisenherz сказал: но хочется все-таки спавнить ящик прямо в инвентарь и отправлять предметы в него. Так можно вообще? Нет, реализация подобного функционала для инвентарных предметов не предусмотрена. 26 минут назад, Norman Eisenherz сказал: Идея в том, чтобы временно скидывать вещи из слотов в ящик на время торговли и обыска. Идея - не фонтан... Тут однозначно лучше будет движковая правка. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/487/#findComment-1256533
Norman Eisenherz 354 Опубликовано 7 Апреля 2019 Поделиться Опубликовано 7 Апреля 2019 @AndreySol Лучше это будет для тех, кто знает ассемблер и структуру движка. В X-Ray Extensions какое-то обозначение для экипированных предметов есть, но у меня с пропатченым файлом движка (правки версии 230.15) игра начинает вылетать при каждом обращении к инвентарю, поэтому пытаюсь сделать костыль. Меня вполне устроит, если временный ящик будет рождаться за спиной и после торговли удаляться из игры. Все, последний вопрос: id коробки невозможно поймать сразу после ее создания (на секунду позже – пожалуйста, но два раза открывать диалог торговли не торт). Такое впечатление, что функция перебора id запускается слишком быстро – до того, как новая коробка успевает получить свой id. Как можно отложить выполнение перебора id, скажем, на 0,5 секунды? Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/487/#findComment-1256535
naxac 2 595 Опубликовано 8 Апреля 2019 Поделиться Опубликовано 8 Апреля 2019 (изменено) @Norman Eisenherz, тебе нужно получить онлайновый (клиентский) объект ящика? Иcпользуй каллбэк на выход в онлайн: function spawn_box() local se_obj = alife():create("box", position, lv, gv) level.client_spawn_manager():add(se_obj.id, -1, this.spawn_callback) end function spawn_callback(id, obj) -- тут делаешь что хочешь со своим ящиком: это obj end Изменено 8 Апреля 2019 пользователем naxac 3 Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/487/#findComment-1256569
AndreySol 215 Опубликовано 8 Апреля 2019 Поделиться Опубликовано 8 Апреля 2019 (изменено) 9 часов назад, naxac сказал: Иcпользуй каллбэк на выход в онлайн: @Norman Eisenherz, чтоб понятнее было - практически все в движке завязано на апдейте, соответственно, от момента создания объекта, до его выхода в он-лайн, проходит определенный промежуток времени(некое кол-во апдейтов (тиков системного таймера)). Именно для этой ситуации, разрабами был введен кэллбэк на выход объекта в он-лайн... Изменено 8 Апреля 2019 пользователем W.A.S.P. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/487/#findComment-1256627
Norman Eisenherz 354 Опубликовано 8 Апреля 2019 Поделиться Опубликовано 8 Апреля 2019 Какое сильное колдунство… В оригинальном коде всего одно упоминание такого callback'а, и то в качестве теста. Всем спасибо, противная недоработка наконец-то "подпернута" костылем. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/487/#findComment-1256681
_Sk8_AsTeR_ 122 Опубликовано 10 Апреля 2019 Поделиться Опубликовано 10 Апреля 2019 Господа, подскажите добрым советом, как проиграть звук? Задумка такая: в определенные часы будут от лица ГГ (типа по рации) проигрываться рандомные звуки, обрывки чьих-то фраз и тд, и всё это дело НПС будут комментировать в чат текстом, типа: "Что это было?" или "Вы тоже это слышали?" Так вот, помогите пожалуйста по возможности с построением ф-ции с проигрыванием рандомного ogg из папки? Нужно только проигрывание рандомного звука... Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/487/#findComment-1257092
Graff46 623 Опубликовано 10 Апреля 2019 Поделиться Опубликовано 10 Апреля 2019 (изменено) @_Sk8_AsTeR_, Скрытый текст do local lastIdx function name () local sndTblPath = ["", "", ""] -- список путей до файлов со свуками local idx = math.random(0, table.getn(sndTblName)) if idx ~= lastIdx then local sndPath = sndTblName[)] local snd = xr_sound.get_safe_sound_object(sndPath) -- путь до звукового файла snd:play_no_feedback(db.actor, sound_object.s2d, 1, vector(), 1.0) else for i=1,100 do 2+2*5 end return name () end end end Изменено 10 Апреля 2019 пользователем Graff46 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/487/#findComment-1257096
Norman Eisenherz 354 Опубликовано 10 Апреля 2019 Поделиться Опубликовано 10 Апреля 2019 Я опять встрял, и не могу понять, во что именно… Есть две функции: одна привязана к "info_callback" и спавнит предмет в момент начала торговли, другая запускается после спавна предмета и должна получить его id. Как только я пытаюсь добавить в аргументы второй функции "info_id" для дальнейших действий на основании инфо-поршней из основного колбэка, функция перестает видеть созданный объект, хотя вызывается строго после его создания. Может ли проблема быть в том. что в первой функции создаются два объекта, а колбэк только на одном? Код ниже, требуется передать (info_id) в функцию "transfer". Spoiler function box_id(sect) for i = 0, 65535 do local obj = level.object_by_id(i) if obj and obj:section() == sect then return obj:id() end end end function box_spawn(info_id) local act = db.actor if info_id == "ui_trade" then local act_pos = act:position() alife():create( "box_ex", vector():set( (act_pos.x + 1), (act_pos.y), (act_pos.z) ), act:level_vertex_id(), act:game_vertex_id() ) local spawn = alife():create( "box_eq", vector():set( (act_pos.x), (act_pos.y), (act_pos.z + 1) ), act:level_vertex_id(), act:game_vertex_id() ) level.client_spawn_manager():add(spawn.id, -1, transfer) end end function transfer() local act = db.actor local box_1 = box_id("box_eq") local box_2 = box_id("box_ex") if box_1 and box_2 then news_manager.send_tip(act, "spawned") else news_manager.send_tip(act, "missing") end end Переделал вызовы так, чтобы "info_id" читался непосредственно в "bind_stalker", а функция, зависящая от спавна, только перебрасывала предметы. С одной коробкой работает, с двумя – не переносятся предметы из второй коробки, хотя id второй коробки читается правильно и предметы _в_ эту коробку точно переносятся, если что-нибудь купить (коробки на время теста не удаляются). Посмотрите, пожалуйста, кто-нибудь, где я косячу: https://drive.google.com/open?id=1ak0_jspeRXxoTxxHIDLCe-J0-Psp41DS Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/487/#findComment-1257099
Kirgudu 1 340 Опубликовано 11 Апреля 2019 Поделиться Опубликовано 11 Апреля 2019 @Norman Eisenherz, у тебя id заспавненных предметов есть уже сразу после спавна. Зачем корячить ещё и какой-то поиск по десяткам тысяч объектов? local spawn1 = alife():create( "box_ex", vector():set( (act_pos.x + 1), (act_pos.y), (act_pos.z) ), act:level_vertex_id(), act:game_vertex_id() ) local spawn2 = alife():create( "box_eq", vector():set( (act_pos.x), (act_pos.y), (act_pos.z + 1) ), act:level_vertex_id(), act:game_vertex_id() ) local box_1_id = spawn1.id local box_2_id = spawn2.id Возможно, требуется сделать что-то другое, кроме как получить id предметов (например: заспавнить 2 предмета, дождаться выхода в онлайн обоих, после чего что-то сделать с их клиентскими объектами), но тогда опиши человеческим языком, что именно. Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/487/#findComment-1257152
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти