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 Ссылка на комментарий
nikita_nz1986 130 Опубликовано 28 Июня 2014 Поделиться Опубликовано 28 Июня 2014 (изменено) @J.A.A., Может function effect_for_jaa(actor, npc) --Может быть любое название функции, пример: function zaza level.add_cam_effector("punch_effector.anm", 999, false, "")local snd_obj = xr_sound.get_safe_sound_object([[actor\pain_3]]) --Может быть любой звук отнасительно папки soundssnd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)end В диалог: <action>Название скрипта.Название функции(effect_for_jaa)</action> Проверял на Space restrictor, вроде работает, на диалоге тоже должно работать. Изменено 1 Июля 2014 пользователем Kirgudu Ссылка на комментарий
J.A.A. 2 Опубликовано 29 Июня 2014 Поделиться Опубликовано 29 Июня 2014 @nikita_nz1986, такую функцию я и сам знаю. Просто кажется немного странным, если прилетает хит, а НПС стоит в анимации "wait". Меня интересует, как скриптово вызвать анимацию punch у НПС. Пишу мод с неповторимым сюжетом. Нужны "модельеры" Заинтересованным писать в ЛС Ссылка на комментарий
FantomICW 678 Опубликовано 29 Июня 2014 Поделиться Опубликовано 29 Июня 2014 @J.A.A., в логике ему пропиши по инфопорции анимку punch в ремарке. P.S. Какая платформа? Ссылка на комментарий
Старлей 88 Опубликовано 29 Июня 2014 Поделиться Опубликовано 29 Июня 2014 Вот такой вопрос: в ТЧ у [actor] class = O_ACTOR, и у [mp_actor] class = O_ACTOR. А вот в ЗП [actor] class = S_ACTOR, а у [mp_actor] class = O_ACTOR. Так вот, может-быть, кто-нибудь знает в чем отличия S_ACTOR от O_ACTOR. И вообще где можно почитать информацию о классах, их регистрации в class_registator.script? Ray Of Hope - кооператив сталкера OldStory Ссылка на комментарий
Zander_driver 10 343 Опубликовано 30 Июня 2014 Поделиться Опубликовано 30 Июня 2014 Подскажите кто знает, существуют ли какие то особенности в поведении объектов при спавне их в инвентарь актора? Почему спрашиваю: Спавню в инвентарь актора оружие. Получаю его нет-пакет с помощью модуля Артоса. вношу изменения, записываю нет-пакет объекту - здесь же в той же скриптовой точке где был спавн. Конкретно мне надо менять параметры ammo_type, condition, ammo_elapsed, addon_flags. Пробовал сначала в state-часть пакета это записывать, но ствол появляется в инвентаре - с дефолтным пакетом, мои изменения в силу не вступили. записал то же самое и в update-часть - тоже безрезультатно. В других ситуациях, когда спавн происходит не в инвентарь актора, а куда то еще, модуль Артоса работает без нареканий, я его достаточно широко использую в своем моде, пишу шейпы аномалий, правлю свойства объектов при спавне - в общем много всего. Все работает, а тут такой затык. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Dennis_Chikin 3 662 Опубликовано 30 Июня 2014 Поделиться Опубликовано 30 Июня 2014 Я как-то слабо представляю, как можно инвентарный объект запихнуть в оффлайн. А обновление происходит при переключении туда/сюда. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
AndreySol 215 Опубликовано 30 Июня 2014 Поделиться Опубликовано 30 Июня 2014 (изменено) особенности в поведении объектов при спавне их в инвентарь актора Я то-же с этим дрюкался, и выход похоже только один: спавнить куда-нить не в инвентарь, устанавливать через нет-пакет нужные параметры, вешать на выход объекта в он-лайн кэллбэк, и по факту появления объекта в он-лайне - трансферить в инвентарь ГГ. Выявил такой факт - если спавним в инв.ГГ, через нет-пакет меняем что-то, то в инвентаре видим предмет без этих изменений, но стоит сделать сэйв\лоад - и предмет уже с измененными параметрами. И вообще где можно почитать информацию о классах, их регистрации в class_registator.script? Как обычно - в Справочнике по функциям и классам..... Изменено 30 Июня 2014 пользователем AndreySol Ссылка на комментарий
abramcumner 1 179 Опубликовано 30 Июня 2014 Поделиться Опубликовано 30 Июня 2014 Спавн в инвентарь онлайнового объекта в движке обрабатывается отдельным "ускоренным" образом. Итем выводится сразу же в онлайн. Поэтому запись нет-пакетов и не срабатывает. По идее после строчки alife():create уже можно запросить клиентский объект. Ссылка на комментарий
Zander_driver 10 343 Опубликовано 30 Июня 2014 Поделиться Опубликовано 30 Июня 2014 Спавн в инвентарь онлайнового объекта в движке обрабатывается отдельным "ускоренным" образом. Видимо, не все классы? при спавне в инвентарь патронов например, переписать им кастом-дату удается. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
AndreySol 215 Опубликовано 30 Июня 2014 Поделиться Опубликовано 30 Июня 2014 при спавне в инвентарь патронов например, переписать им кастом-дату удается Если не секрет - что именно ? Ссылка на комментарий
Zander_driver 10 343 Опубликовано 2 Июля 2014 Поделиться Опубликовано 2 Июля 2014 packet.custom_data. что тут еще сказать то.А если вы о том, что же за сведения я туда пишу, то извините это пока секрет. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Dennis_Chikin 3 662 Опубликовано 2 Июля 2014 Поделиться Опубликовано 2 Июля 2014 Хех, ну я вот, например, в соли аккумуляторы в патроны переделал, и пишу им заряд в custom data. Просто по тому, что самый мальнький пакет из всего, что вообще под рукой. Нет, все, сдаюсь. Я не представляю - просто воображения не хватает представить, как ЭТО должно работать: if job.begin == nil or game.time() - job.begin > job.idle then if job.idle_after_death_end == nil or job.idle_after_death_end < game.time() then if job.fill_idle ~= nil then if job.fill_idle == idle_none then return false elseif job.fill_idle ~= idle_once and job.fill_idle < game.time() - job.begin then return false end end return true end end конкретно часть, которая job.fill_idle < game.time() - job.begin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Музафир 1 Опубликовано 8 Июля 2014 Поделиться Опубликовано 8 Июля 2014 (изменено) Подскажите, а как можно "ограбить" ГГ, т.е. удалить все содержимое инвентаря, включая оружие, которое держит в руках, и нож? Изменено 8 Июля 2014 пользователем Музафир 1 Ссылка на комментарий
AndreySol 215 Опубликовано 9 Июля 2014 Поделиться Опубликовано 9 Июля 2014 @Музафир Скриптом. Ф-ция iterate_invertory и иже с ней... 1 Ссылка на комментарий
Painter 3 476 Опубликовано 9 Июля 2014 Поделиться Опубликовано 9 Июля 2014 (изменено) @Музафир, для указанной цели применима следующая функция: function test_index() local cnt = db.actor:object_count() for i=0, cnt-1 do local item = db.actor:object(i) local sobj = alife():object(item:id()) if sobj then alife():release(sobj,true) end end end Изменено 26 Ноября 2019 пользователем Jurok Портфолио Ссылка на комментарий
Музафир 1 Опубликовано 9 Июля 2014 Поделиться Опубликовано 9 Июля 2014 Jurok, спасибо. Я тоже нашел эту функцию, но там удаляется вообще все: и ПДА, и бинокль, и болт. Их потом нужно будет как-то вернуть. Я думаю модифицировать ее примерно так: function clear_inv() local cnt = db.actor:object_count()for i=0, cnt-1 dolocal item = db.actor:object(i)local sobj = alife():object(item:id())if sobj ~= ПДА Меченого or Бинокль or Болт thenalife():release(sobj,true)endendend Только не знаю, как правильно указать предметы, которые хочу исключить. P.S. Сильно не бейте. Со скриптами не дружу, а квест доделать хочется. Очень надеюсь на ответ Ссылка на комментарий
h0N0r 367 Опубликовано 9 Июля 2014 Поделиться Опубликовано 9 Июля 2014 Музафир, function erase_actor_inv() local function keep_list_itm(item) if (item:section() ~= "wpn_binoc" or item:section() ~= "device_torch" or item:section() ~= "device_pda" or item:section() ~= "bolt") then alife():release(alife():object(item:id()), true) end end db.actor:inventory_for_each(keep_list_itm)end 1 https://sites.google.com/view/xray-sdk-0-4-smg Ссылка на комментарий
Painter 3 476 Опубликовано 9 Июля 2014 Поделиться Опубликовано 9 Июля 2014 (изменено) Только не знаю, как правильно указать предметы, которые хочу исключить. function clear_inv() local cnt=db.actor:object_count() for i=0, cnt-1 do local item=db.actor:object(i) local obj=alife():object(item:id()) if (obj and item:section()~="wpn_binoc" and item:section()~="bolt" and item:section()~="device_torch" and item:section()~="device_pda") then alife():release(obj,true) end end end Изменено 9 Июля 2014 пользователем Jurok 1 Портфолио Ссылка на комментарий
Музафир 1 Опубликовано 10 Июля 2014 Поделиться Опубликовано 10 Июля 2014 (изменено) Всем спасибо, парни, помогите еще разок. Понимаю, что вопрос нубский, но для меня это пока сложно Задача: организовать проверку количества убитых кровососов. При убийстве выдается соответствующий инфопоршень, я решил сделать так: function sosyci_proverka()local k = 0if has_alife_info ("sosyci_stroika_1_killed") thenk = k + 1endif has_alife_info ("sosyci_stroika_2_killed") thenk = k + 1endif has_alife_info ("sosyci_stroika_3_killed") thenk = k + 1endif has_alife_info ("sosyci_stroika_4_killed") thenk = k + 1endreturn kendfunction sosyci_jivyif sosyci_proverka() = 0 thenreturn trueendreturn falseend sosyci_jivy - это прекондишен в диалоге. По идее, он сработает, если все живы или убит хотя бы один. На первый раз сойдет. Но далее мне понадобится еще раз обратиться к проверке и узнать точное кол-во убитых кровососов (возможно их на тот момент останется только 2 или 3), чтобы вычислить, сколько щупалец ГГ может сдать по завершении задания. И вот здесь меня мучат сомнения: допустим, кровососы убиты в порядке 4,2,1,3, будет ли в таком случае k = 4? Изменено 10 Июля 2014 пользователем Музафир Ссылка на комментарий
Призрачный 125 Опубликовано 10 Июля 2014 Поделиться Опубликовано 10 Июля 2014 Здравствуйте, можно ли сделать так, чтобы когда гг дадут какой-нибудь предмет на нём заспавнится ppe эффект и этот эффект будет всегда пока гг не выбросит этот предмет? 1 Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти