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/
Norman Eisenherz 355 Опубликовано 27 Марта 2025 Поделиться Опубликовано 27 Марта 2025 Я с этого начал и пришел к [state_mgr.script]: в waypoint_callback сначала обсчитывается звук, просто привязанный к анимации, потом, с проверкой if pt_chosen_idx, звуки, привязанные к определенным точкам пути с присвоением self.sound_after_anim_start. Дальше update_standing_state(look_pos, snd) и state_mgr.set_state(…, snd). Не могу найти, в какой момент завершается анимация разворота NPC на точке и выполняется запуск назначенного звука, а не просто вычитывание его из памяти. К чему был абзац про глобальные переменные? Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/634/#findComment-1503474
Kirgudu 1 370 Опубликовано 27 Марта 2025 Поделиться Опубликовано 27 Марта 2025 @Norman Eisenherz посмотри свойство self.mgr.synsound в state_mgr_animation.animation:play_rnd(). Это единственное место использования данного свойства и запуска звука после присвоения его в state_mgr.state_manager:set_state(). Если это действительно оно, тогда, возможно, надо будет подумать над передачей в модуль обработки анимации переменной switched как нового свойства менеджера. 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/634/#findComment-1503492
RayTwitty 587 Опубликовано 27 Марта 2025 Поделиться Опубликовано 27 Марта 2025 15 часов назад, h0N0r сказал: Правильно понимаю, если в любом скрипте (в его начале, не в теле функции) объявить переменную, типа local my_var = 0 - то она локальна только для данного скрипта и функций в нём, и чтобы сделать её глобальной, нужно убрать local, или ещё перенести в _g.script? my.script local var_A = 5 -- область видимости: только внутри скрипта var_B = 5 -- область видимости: по имени модуля my.var_B (если нужна пустота по умолчанию, явно указываем var_B = nil, иначе не пройдет по синтаксису) _G.var_C = 5 -- область видимости: везде 4 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/634/#findComment-1503497
Norman Eisenherz 355 Опубликовано 27 Марта 2025 Поделиться Опубликовано 27 Марта 2025 @Kirgudu Привязка в play_rnd срабатывает почти правильно – заметное отставание есть только в том случае, когда прибывшего на точку NPC выталкивает с этой точки кто-то другой, и анимация "дойти + развернуться" отыгрывается повторно, но это уже мелочи. 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/634/#findComment-1503498
Капрал Хикс 567 Опубликовано 27 Марта 2025 Поделиться Опубликовано 27 Марта 2025 Столкнулся с весьма мерзким явлением. При сохранении (неважно каком - квиксейве или ручном) и попытке загрузиться с него происходит безлоговый вылет. При повторном заходе в игру сохранение исправно загружается. То же самое происходит даже с автосейвами при заходе на новую локацию (в т.ч. через чит-телепорт). Загрузка автосейва - безлоговый вылет. При перезаходе в игру автосейв грузится. Куда хоть копать? Уже попутно пару косяков отловил в попытке понять, в чём соль, а толку ноль. Платформа ТЧ + x-ray extensions. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/634/#findComment-1503499
h0N0r 416 Опубликовано 27 Марта 2025 Поделиться Опубликовано 27 Марта 2025 Вариант субтитров на ТЧ: в xr_sound.script, function play_sound Добавить две строки: local sub_text = "%c[255, 238, 153, 23]"..game.translate_string(tostring(npc:character_name())).."\\n".."%c[255, 255, 255, 255]"..game.translate_string("st_"..snd.theme) db.actor:give_game_news(sub_text, "ui\\ui_iconsTotal", Frect():set(84,236,81,45), 0, 10000) В данный блок: -- играем входные if db.sound[npc_id].last_snd[snd.into_id] == nil then db.sound[npc_id].last_snd[snd.into_id] = -1 end --printf("* SND: play seq [%s] for [%s]", db.sound[npc_id].last_snd[snd.into_id]+1, npc:name()) process_tutor_on_sound(snd.theme) npc:play_sound(snd.into_id, 1, 0, 1, 0, db.sound[npc_id].last_snd[snd.into_id]+1) db.sound[npc_id].last_snd[snd.into_id] = db.sound[npc_id].last_snd[snd.into_id] + 1 --printf("* SND: play seq [%s] for [%s]", db.sound[npc_id].last_snd[snd.into_id], npc:name()) -- Вывести сабы -- ещё можно проверку на включение кон.команды. типа g_subtitles --local enable_subs = get_console():get_integer("g_subtitles") --if enable_subs == 1 then local sub_text = "%c[255, 238, 153, 23]"..game.translate_string(tostring(npc:character_name())).."\\n".."%c[255, 255, 255, 255]"..game.translate_string("st_"..snd.theme) db.actor:give_game_news(sub_text, "ui\\ui_iconsTotal", Frect():set(84,236,81,45), 0, 10000) --end return Ещё нужно сделать локаль, типа st_название_темы из script_sound.ltx: <string id="st_esc_wolf_radio"> <text>Мужики, я к вам посылаю человека. Действуйте по обстоятельствам. Если сочтёте нужным, атакуйте. Приём...</text> </string> Работает, как с флагом s=sound_theme в точки пути, так и snd = esc_wolf_radio в схеме ремарк: 1 https://sites.google.com/view/xray-sdk-0-4-smg Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/634/#findComment-1503501
Norman Eisenherz 355 Опубликовано 28 Марта 2025 Поделиться Опубликовано 28 Марта 2025 Часть методов вывода звука указана в самих обработчиках: [xr_effects.script] ответ по рации "пусть не мельтешит здесь" / Круглов / КПК Призрака [ph_sound.script] пульты в X-16 / арена [sr_sound2d.script] война на складах Часть звуков выводится в голове ГГ. В db.sound[0] записей не появляется. Значительная часть звуков ссылается на конфиг [script_sound.ltx], из которого еще надо вынуть определенную ссылку для получения номера фразы и времени отображения субтитров. Иногда надо делать поправку на номер ранее выведенной фразы с тем же заголовком (диалоги в ТД). Я расставил ссылки в имеющихся скриптах и собрал пути/обертки в своем обработчике. Так получается значительно меньше мусорных звуков, вроде "привет / пока / убери ствол / анекдот / погода", чем при привязке ко всем звукам в [xr_sound.script] – из этого скрипта беру только номер звука при случайном выборе фразы (пленный Шустрый, например). Выборочно потестил прямую привязку к [xr_sound.script]: ловятся, в основном, одинаковые типовые звуки, тогда как на фразы NPC по ходу квестов почти никакой реакции. - АТП с Петрухой - Бес на Свалке - "деловое предложение" за 800 (есть только фразы охранников) - вопли и бубнеж Круглова - "мы не можем его так бросить" - война Долга и Свободы В общем, не все так просто в этой каше – это в ЧН уже есть почти готовый обработчик субтитров, и большая часть правок сводится к добавлению аргумента "отправитель". 3 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/634/#findComment-1503544
RayTwitty 587 Опубликовано 28 Марта 2025 Поделиться Опубликовано 28 Марта 2025 8 часов назад, Norman Eisenherz сказал: [ph_sound.script] пульты в X-16 / арена [sr_sound2d.script] война на складах Просто для понимания - префиксы - сокращение от типа объекта, для которого работает схема. ph - physic object, sr - space restrictor (не исключены другие типы). Разница в том, что у физ. объекта есть кости, от которых можно играть звук + объект может двигаться. Рестрикторы не имеют шейпа (модели) и они статичны, поэтому звук играет просто на точке спавна. То есть, к субтитрам оно вряд ли имеет отношение. Нужно смотреть то, что играет в голове ГГ. 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/634/#findComment-1503564
Norman Eisenherz 355 Опубликовано 29 Марта 2025 Поделиться Опубликовано 29 Марта 2025 Похоже, недопонимание: для задачи вывода субтитров требуется выловить названия реплик от разных источников. То, что каждой секции логики соответствует (почти) одноименный скрипт-обработчик, уже пройдено. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/634/#findComment-1503606
Баба ЯГА 12 Опубликовано 30 Марта 2025 Поделиться Опубликовано 30 Марта 2025 Математики есть? Имеем: db.actor:position() db.actor:direction() db.actor:set_actor_position( vector():set( x, y, z ) ) Как высчитать координаты для перемещения ГГ от текущей позиции - на три метра вперёд по направлению взгляда? Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/634/#findComment-1503679
Это популярное сообщение. Kirgudu 1 370 Опубликовано 31 Марта 2025 Это популярное сообщение. Поделиться Опубликовано 31 Марта 2025 10 часов назад, Баба ЯГА сказал: на три метра вперёд по направлению взгляда local position, direction, distance = db.actor:position(), db.actor:direction(), 3 local new_position = position:add(direction:normalize():mul(distance)) Вместо db.actor:direction() можно использовать device().cam_dir - тогда будет учитываться не только направление взгляда вправо-влево, но ещё и его наклон. 1 5 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/634/#findComment-1503696
Norman Eisenherz 355 Опубликовано 8 Апреля 2025 Поделиться Опубликовано 8 Апреля 2025 [ТЧ 1.0006] Скриптовое деление текста на фразы по меткам "•" (Alt+7, даже простой Блокнот такие понимает). Результат: деление по меткам и почему-то по буквам "в" (код 162). Сменил метку на "#" – деление строго по меткам. Предположил, что проблема в кодовых страницах Win10: например, вместо знака диаметра (код 0216) теперь просто буква "Ш". Проверил аналогичный скрипт, написанный для ЧН еще под Win7, и деление работает без ошибок даже по меткам "•". Чем вызвано такое пересечение знаков при поиске, и почему именно в ТЧ? Spoiler -- текст <string id="val_desant_1"> <text> – База, я 034-й, мы над точкой. •– Понял, начинайте работать. •– 032-й, выбрасывай своих на крыше. Как понял? •– 032-й принял. На крыше так на крыше. </text> </string> -- деление local text = game.translate_string("val_desant_1") local t = {} for x in text:gmatch("[^•]+") do -- всё, кроме меток t[#t +1] = x end -- результат – База, я 034-й, мы над точкой. – Понял, начинайте работать. – 032-й, ыбрасы ай с оих на крыше. Как понял? – 032-й принял. На крыше так на крыше. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/634/#findComment-1504102
Norman Eisenherz 355 Опубликовано 10 Апреля 2025 Поделиться Опубликовано 10 Апреля 2025 Нашел – все-таки кодировка: некоторые спецзнаки, не требующие сохранения в TXT-файл с расширенной поддержкой Unicode, не указаны в дефолтной кодировке UTF-8 – скрипт с шаблоном поиска необходимо сохранять если не в Windows-1251 как XML-файлы с текстом, то хотя бы в ANSI. "Безопасными" являются знаки с кодами 33–126 (от !"#$%&@ до ^_|~, включая цифры и пунктуацию), меняются знаки в начале кодовой таблицы (• ¶ §) и после алфавита (° … ‰ — « » ±). Аналогично с соединением строк: game.translate_string(str_id) .. "…" – крокозябры на выходе, если не задать кодировку для многоточия. 1 2 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/634/#findComment-1504196
boneset-hq 4 Опубликовано 27 Мая 2025 Поделиться Опубликовано 27 Мая 2025 (изменено) Кто сможет помочь? На ТЧ чтобы при помещении брони в слот, выполнялась функция. Также с оружием. Особо ничего дельного в интернете не нашёл по этой теме, сам сообразить что-то пытался, вышло не очень. Рылся в файлах игры, в модах для CoC со звуками одевания противогаза, пытался что-то там адаптировать, не получилось. Коллбек use_object я так понял не реагирует на броню и оружие, только на расходники. Изменено 27 Мая 2025 пользователем boneset-hq "Do you like what you see?" © Billy Herrington Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/634/#findComment-1506048
Chypakabra 1 002 Опубликовано 27 Мая 2025 Поделиться Опубликовано 27 Мая 2025 @boneset-hq, закатать в файл или отдельную функцию и на апдейт. Скрытый текст local item_in_slot_1 = db.actor:item_in_slot(1) local item_in_slot_2 = db.actor:item_in_slot(2) local item_in_slot_6 = db.actor:item_in_slot(6) if item_in_slot_1 ~= nil then -- функция для первого слота (пистоль) end if item_in_slot_2 ~= nil then -- функция для второго слота (ружжо) end if item_in_slot_6 ~= nil then -- функция для брони end Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/634/#findComment-1506053
boneset-hq 4 Опубликовано 27 Мая 2025 Поделиться Опубликовано 27 Мая 2025 @Chypakabra Не, я скорее всего неправильно вопрос поставил, или Вы его не правильно поняли. Нужен момент именно когда происходит помещение оружия\брони в её слот. Тоесть не просто проверка, а что-то вроде одиночной функции, чтобы например при одевании брони, проигрывался звук, и всё замолкало. Я конечно могу что-то сообразить из того что Вы скинули, но было бы признательно если бы Вы скинули свою версию скрипта. "Do you like what you see?" © Billy Herrington Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/634/#findComment-1506059
_g.script 3 670 Опубликовано 27 Мая 2025 Поделиться Опубликовано 27 Мая 2025 6 часов назад, boneset-hq сказал: Коллбек На модифицированных движках есть коллбек on_slot, на оригинале же, наверное, надо что-то городить на обновлениях, но я бы уже перестал противиться переходу на что-то более продвинутое. Здесь могла быть ваша реклама. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/634/#findComment-1506070
boneset-hq 4 Опубликовано 28 Мая 2025 Поделиться Опубликовано 28 Мая 2025 (изменено) @Chypakabra Всё, поковырялся и получилось. Не хотел прибегать к апдейту но похоже в ТЧ без этого никак. Скрытый текст local currentWeapon1 = 0 local currentWeapon2 = 0 local currentArmor = 0 function check_slots() local arm = db.actor:item_in_slot(6) local weap1 = db.actor:item_in_slot(1) local weap2 = db.actor:item_in_slot(2) if arm then if arm:id() ~= currentArmor then currentArmor = arm:id() -- функция при одевании костюма end else currentArmor = 0 end if weap1 then if weap1:id() ~= currentWeapon1 then currentWeapon1 = weap1:id() -- функция при одевании пистолета end else currentWeapon1 = 0 end if weap2 then if weap2:id() ~= currentWeapon2 then currentWeapon2 = weap2:id() -- функция при одевании автомата end else currentWeapon2 = 0 end end Изменено 28 Мая 2025 пользователем boneset-hq 1 "Do you like what you see?" © Billy Herrington Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/634/#findComment-1506079
RayTwitty 587 Опубликовано 29 Мая 2025 Поделиться Опубликовано 29 Мая 2025 Требуется мнение. Навело на мысль обсуждение из соседней темы по Enhanced Edition. В нем также как и в кастомных движках обновили библиотеку lua, из-за чего кое-какие места в скриптах перестали нормально работать (ТЧ). В частности task_manager.script, функция CRandomTask:load. Если я все правильно помню, то local selected_target = p:r_u32() в оригинальном движке при передаче туда u32(-1) возвращал 0, а теперь возвращает 4294967295, из-за чего ломалась вся дальнейшая логика. И я, и новоПЫС придумали затычку, на скрине (мое снизу). По своей затычке могу объяснить логику - коль уж в оригинальном движке у нас selected_target получал 0 при передаче туда u32(-1), тогда если случается local defend_object = alife():object(4294967295), что результате всегда дает nil, то мы просто присваиваем переменной серверный объект актора. То есть, поведение оригинала 1.0006 не меняется. А вот у новоПЫС получается так - self.task_info[id].selected_target и self.task_info[id].defend_target просто не заполняются. Какие от этого могут быть последствия я даже не знаю. Так в чем вопрос - кто тут прав? И почему вообще r_u32() стало по-другому работать? Из-за обновленного lua ли? Или может из-за другого компилятора и пр.? 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/634/#findComment-1506161
Norman Eisenherz 355 Опубликовано 4 Июня 2025 Поделиться Опубликовано 4 Июня 2025 [ТЧ 1.0006] Хочу сделать принудительный перевод артефактов в оффлайн до выполнения определенных условий, примерно как в ЧН. Добавляю в [se_artefact.script] показанный ниже код, скидываю пару артов (не электрической природы), отхожу, перезагружаюсь вблизи и вдали – никакого эффекта. Как правильно оформить код? Spoiler function se_artefact:can_switch_online () if self.is_day_night == false then (+) перед обычным выходом if level.vertex_position (self.m_level_vertex_id):distance_to (db.actor:position ()) > 10 then return false end Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/634/#findComment-1506407
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти