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/
Старлей 88 Опубликовано 15 Мая 2014 Поделиться Опубликовано 15 Мая 2014 Всем привет . Все еще не нашел решение следующей проблемы: "при спавне предмета на каком-нибудь этаже здания на столе(или другом объекте) он оказывается на земле. Координаты взяты из all.spawn. Спавн произвожу скриптом. P.S. Объекты "physic_destroyable_object" и "physic_object" спавнятся тютелька в тютельку." Как мне подсказал Сталкер Лом: предмет начинает использовать позицию низ\верхлежащей АИ-ноды. В СДК это выключается галками use_ai_location иvisible_for_ai, а вот как в аллспавне это делается - что то не припомню...Хотя можно попробовать убрать строки начинающиеся со слова upd: , они, обычно, в конце блока спавна объекта располагаются. Однако повторюсь, я пытаюсь спавнить через скрипт. Как быть не знаю... В lua_help нашел такой метод: function use_ai_locations(boolean); Однако он не применим к классу game_object, то бишь к заспавненной вещице. Вроде бы и ситуация то простая совсем, но не знаю в каком напрвлении копать... Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/279/#findComment-846782
Dennis_Chikin 3 665 Опубликовано 15 Мая 2014 Поделиться Опубликовано 15 Мая 2014 Просто не спавнить в "дырявых" местах. Не лечится, кроме как правкой рельефа. Ну или только соответствующий класс использовать. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/279/#findComment-846788
Старлей 88 Опубликовано 15 Мая 2014 Поделиться Опубликовано 15 Мая 2014 "дырявых" местах Случайно не те места, где работает баг "лифт"? А по поводу не спавнить - не могу понять: сколько же уже модов было сделано на сталкер(причем людьми с разным опытом в модмейкерстве), так ведь спавнили скриптом все время и везде - никуда не проваливалось... Бред какой-то. Конечно на крайняк могу попробовать АИ-сетку пересобрать, но подставлять Node для каждой точки спавна - как-то примитивно. P.S. Спавню через скрипт, ибо мой спавн динамический, с постоянным обновлением и спавном по обстоятельствам. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/279/#findComment-846794
Dennis_Chikin 3 665 Опубликовано 15 Мая 2014 Поделиться Опубликовано 15 Мая 2014 По факту, в итоге выход нашли в том, что спавнится ящик/мешок, а предметы - уже туда. И, да, надо посмотреть, как именно проваливается. Если, классический пример - предметы на крыше элеватора на Кордоне - одно. Если это типа артов, уходящих под текстуры - другое. Кроме того вижу терминологическую путаницу: game_object - это который создался в онлайне. Серверный - это тот, который возвертает alife() Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/279/#findComment-846798
Старлей 88 Опубликовано 15 Мая 2014 Поделиться Опубликовано 15 Мая 2014 Dennis_Chikin,"game_object - это который создался в онлайне" - А это как?)) local obj = alife():create(item, pos_vector[1], pos_vector[2], pos_vector[3]) obj - будет серверный объект, так ведь? Еще знаю можно клиентский получить так: obj = level.object_by_id(k) А вот можешь подробнее пояснить свою фразу "game_object - это который создался в онлайне" , а то я что-то не догоняю) P.S. И где сейчас можно найти актуальную версию m_netpk? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/279/#findComment-846807
Карлан 1 050 Опубликовано 15 Мая 2014 Поделиться Опубликовано 15 Мая 2014 (изменено) P.S. И где сейчас можно найти актуальную версию m_netpk? У меня от 9 октября, вроде последнее. obj = level.object_by_id(k) Хрен ты угадал, в момент спавна нельзя его так получить. obj в твоем случае серверный - да, и править его тока нет пакетами, есть еще одна функция, с которой можно работать, глянь в справочнике. Если ты говоришь что дофига таких модов, то че тебе мешает их использовать в своих целях? У меня скриптом проваливаются тоже(книги всякие спавнил), в результате забил, спавнил через acdc. Тебе религия что-ли не позволяет ей пользоваться, или че, я не понимаю вас... Спавн скриптом хорош, но не в этих случаях. Изменено 15 Мая 2014 пользователем Карлан 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/279/#findComment-846831
*Shoker* 322 Опубликовано 15 Мая 2014 Поделиться Опубликовано 15 Мая 2014 (изменено) @Старлей, на ЗП перешёл? use_ai_locations() есть только там, и используется при спавне оружия в тайники. Пробил бы поиском по скриптам ЗП - нашёл бы пример использования. local sobj = alife():create(item, pos_vector[1], pos_vector[2], pos_vector[3]) sobj:use_ai_locations(false) Должно работать. Функция применяется к серверному объекту, желательно сразу после спавна. (как на примере выше) m_netpk от 19 Сентября 2013, новее хз где брать. Изменено 15 Мая 2014 пользователем *Shoker* 3 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/279/#findComment-846952
Kirgudu 1 323 Опубликовано 16 Мая 2014 Поделиться Опубликовано 16 Мая 2014 Artos в октябре выкладывал этот комплект: m_netpk Потом почему-то удалил (не исключено, что из-за ошибок, но об этом ничего не известно). Тем не менее, это самая свежая версия, которая есть в наличии. 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/279/#findComment-847031
Старлей 88 Опубликовано 16 Мая 2014 Поделиться Опубликовано 16 Мая 2014 (изменено) *Shoker* Да ЗП, точнее мультиплеер ЗП) local sobj = alife():create(item, pos_vector[1], pos_vector[2], pos_vector[3]) sobj:use_ai_locations(false) Вылет. О не применимости метода к объекту. (attempt to call method "use_ai_locations" (a nil value) Я решил прикольнуться и сделал так: local item = alife():create(k, pos_vector[1], pos_vector[2], pos_vector[3]) se_item = alife():object(item.id) se_item:use_ai_locations(not se_item:used_ai_locations()) И... работает!!! Один вопрос: а в чем вся соль?(вроде же оба серверных объекта) Изменено 16 Мая 2014 пользователем Старлей Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/279/#findComment-847126
Карлан 1 050 Опубликовано 16 Мая 2014 Поделиться Опубликовано 16 Мая 2014 (изменено) Нифига у меня нвоый гулаг создать не получается, 4 раза пересоздавал, вылетал все с той же ошибкой. Кому не лень сделайте гулаг на эскейпе для людей и поделитесь. Для монстров у меня все гулаги работают, как ни странно. Изменено 16 Мая 2014 пользователем Карлан 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/279/#findComment-847162
J.A.A. 2 Опубликовано 18 Мая 2014 Поделиться Опубликовано 18 Мая 2014 Ребята, добрый вечер! У меня такой вопрос: Как в ТЧ составить скрипт автозагрузки. Т.е., чтобы, например, при получении инфопоршня загружалось определённое сохранение. Заранее спасибо. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/279/#findComment-847837
FantomICW 678 Опубликовано 18 Мая 2014 Поделиться Опубликовано 18 Мая 2014 (изменено) @J.A.A., добавляй функцию в xr_effects.script: function load_savedgame(actor, npc, p) --Выставляем p-аргумент (он является названием сейва) local savedgame = p[1] --Устанавливаем локальную переменную для p[1] if savedgame ~= nil then --Проверка на наличие сейва get_console():execute("load "..savedgame) --Запускаем сейв через консольную команду end end Потом в рестрикторе делай проверку на инфу и запускай функцию: on_info = {+some_info -load_spec_save} %=load_savedgame(название_сейва) +load_spec_save% Изменено 18 Мая 2014 пользователем FantomICW Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/279/#findComment-847865
darklordveider 2 Опубликовано 20 Мая 2014 Поделиться Опубликовано 20 Мая 2014 Нужно по скрипту создать фейковый ящик. Ящик и его содержимое должны сохраниться после перехода. Куда копать, что почитать? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/279/#findComment-848610
J.A.A. 2 Опубликовано 21 Мая 2014 Поделиться Опубликовано 21 Мая 2014 Ппц, у меня экзамены на носу, а я в S.T.A.L.K.E.R. завис. Значит, такое дело: как можно по-другому использовать функцию? function terminator() local npc1 = level_object_by_sid(9904) if has_alife_info("поршень1") and not has_alife_info("поршень2") then npc1.health = 1 end end Что мне нужно конкретно: Желательно, чтобы "local npc1" вычислялась не через "sid", а через другие функции, например, через имя профиля или название в "character_desc_xxx". В общем, не хочу зависеть от ID, а то прописываю ID'ы группе из 10 человек и потом путаюсь. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/279/#findComment-849040
Dennis_Chikin 3 665 Опубликовано 21 Мая 2014 Поделиться Опубликовано 21 Мая 2014 Для поиска нужного как раз и существует получение объекта через SID и через имя. Все остальное - только перебором. Слово, которым называется такой код, здесь запрещено, к сожалению. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/279/#findComment-849083
Full Noob 1 Опубликовано 21 Мая 2014 Поделиться Опубликовано 21 Мая 2014 Зарегистрировал по туторы юз предмета: function actor_binder:use_obj(obj) if obj:section()=="repair_kit_weapon" thenalife():create("repair_kit_weapon",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())ineeded_condition = obj:condition()hm_repair.action_repair(ineeded_condition)endend создал скрипт: function action_repair(rcond)local repair_kit = db.actor:object("repair_kit_weapon")if repair_kit and (db.actor:active_slot()==1 or db.actor:active_slot()==2) and db.actor:item_in_slot(db.actor:active_slot()) thenrepair_kit:set_condition(rcond)local item = db.actor:item_in_slot(db.actor:active_slot())local need_for_repair = (1-item:condition())*(1/25)if item thenif repair_kit:condition()>=need_for_repair thenitem:set_condition(1)repair_kit:set_condition(repair_kit:condition()-need_for_repair)snd_obj = xr_sound.get_safe_sound_object([[hardcore_mod\repair\repair_weapon]])snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)endendendend Вылет. Пишет что не знает что condition() обращается к nil! Это что не успевает дойти до игры что у меня ремкомплект реснулся или как? И как решить? 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/279/#findComment-849154
Dennis_Chikin 3 665 Опубликовано 22 Мая 2014 Поделиться Опубликовано 22 Мая 2014 "Пишет что не знает что condition() обращается к nil" - какая хоть из строк-то ? (Ну лень все внимательно просматривать. ) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/279/#findComment-849465
Full Noob 1 Опубликовано 22 Мая 2014 Поделиться Опубликовано 22 Мая 2014 (изменено) Да сама проверка кондишна. Вот я переделал скрипт немного вроде function action_repair(newcondition) local repair_kit = alife():create("repair_kit_weapon",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id()) --,db.actor:id())--local repair_kit = db.actor:object("repair_kit_weapon")--repair_kit:set_condition(newcondition)if (db.actor:active_slot()==1 or db.actor:active_slot()==2) and db.actor:item_in_slot(db.actor:active_slot()) thenlocal item = db.actor:item_in_slot(db.actor:active_slot())local need_for_repair = (1-item:condition())*(1/2)if item thenif repair_kit:condition()>=need_for_repair thenitem:set_condition(1)repair_kit:set_condition(repair_kit:condition()-need_for_repair)snd_obj = xr_sound.get_safe_sound_object([[hardcore_mod\repair\repair_weapon]])snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)endendenddb.actor:transfer_item(repair_kit,db.actor)end по разному пробовал, в итоге трансфер не работает, походу не знает что такое repair_kit...не успевает обработать? Как быть! Изменено 22 Мая 2014 пользователем Full Noob Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/279/#findComment-849498
Dennis_Chikin 3 665 Опубликовано 22 Мая 2014 Поделиться Опубликовано 22 Мая 2014 Вот в этом варианте и не должен. :condition() есть только у клиентского. здесь - это - не он, во вторых, клиентский даже еще в онлайн перейти не успел. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/279/#findComment-849500
Full Noob 1 Опубликовано 22 Мая 2014 Поделиться Опубликовано 22 Мая 2014 Тогда как? Так тоже не канает: alife():create("repair_kit_weapon",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id()) local repair_kit = db.actor:object("repair_kit_weapon") Видимо из за того что клиентский даже еще в онлайн перейти не успел. Как быть то?) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/279/#findComment-849505
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти