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 Ссылка на комментарий
dsh 3824 Опубликовано 27 Мая 2017 Поделиться Опубликовано 27 Мая 2017 @HellRatz, в смысле? Что-то типа такого? local s_box = alife():story_object( my_super_uniq_story_id ) local box = level.object_by_id( s_box.id ) db.actor:iterate_inventory( function( npc, item ) db.actor:trasfer_item( item, box ) end, db.actor ) По памяти писал. Никаких проверок, типа у нашли-ли мы этот ящик и т.п., нет, а стоит добавить. 1 Ссылка на комментарий
HellRatz 2913 Опубликовано 27 Мая 2017 Поделиться Опубликовано 27 Мая 2017 Что-то типа такого? Возможно. Надо проверять. Если при выполнении этой функции все предметы из рюкзака просто перелетают в именной ящик который точно есть, то да, оно самое. Ссылка на комментарий
Fagot. 400 Опубликовано 28 Мая 2017 Поделиться Опубликовано 28 Мая 2017 @HellRatz, function nah_shmotki(actor, npc) -- news_manager.send_tip(db.actor, "Определили схрон", nil, nil, 10000) inv_box_1 = level_object_by_sid (99984) out_object = actor in_object = inv_box_1 if in_object then -- news_manager.send_tip(db.actor, "Кидаем барахло", nil, nil, 20000) end actor:inventory_for_each(transfer_object_item) end 1 Ссылка на комментарий
276951438 31 Опубликовано 28 Мая 2017 Поделиться Опубликовано 28 Мая 2017 (изменено) Здравствуйте. ТЧ. НС 2016Есть ли возможность заспавнить именной ПДА Меченого из скрытой секции(который был у него на старте), если он был удален или выброшен ? Допустим, вернуть его невозможно, тогда вот что: можно как-то скриптом в нет-пакет заспавненного актеру левого скрытого ПДА любого непися записать характер ГГ ? Изменено 28 Мая 2017 пользователем 276951438 Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 31 Мая 2017 Поделиться Опубликовано 31 Мая 2017 Забежал на форум спустя пол года - вдруг интересно стало.Один и тот же НПЦ, при неизменяемых параметрах спавна (т.е прописал спавн непися и больше файлы игры не трогал) появляется то в одном месте, то в другом. Причем такая "аномальщина" замечена только для тех, у кого точки walk\look находятся на территории бара(именно подвал). Быть может, у кого догадки есть? Просто спустя пол года от релиза Эпилога мне вдруг интересно стало, где я накосячил( Ссылка на комментарий
Fagot. 400 Опубликовано 31 Мая 2017 Поделиться Опубликовано 31 Мая 2017 @CRAZY_STALKER666, возможно, проблема в аи-сетке. Попробуй поменять координаты walk и look, перенеси их наверх и посмотри, что получится. Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 31 Мая 2017 Поделиться Опубликовано 31 Мая 2017 Попробуй поменять координаты walk и look, Менял, переносил. Толку нет) Ссылка на комментарий
Graff46 619 Опубликовано 31 Мая 2017 Поделиться Опубликовано 31 Мая 2017 Заспавненый в ящик предмет пропадает после перезагрузки игры, респавнер ящика удалён, в чём может быть дело? Ссылка на комментарий
dsh 3824 Опубликовано 31 Мая 2017 Поделиться Опубликовано 31 Мая 2017 @Graff46, в момент спауна ящик в онлайне был? Ссылка на комментарий
Graff46 619 Опубликовано 31 Мая 2017 Поделиться Опубликовано 31 Мая 2017 в момент спауна ящик в онлайне был? Нет, но если придти к ящику сразу, то предмет в нём будет, а если после разговора, из которого вызывается спавн в ящик предмета, сохраниться и выйти из игры, а потом загрузится, то предмета в ящике не будет. Ссылка на комментарий
naxac 2571 Опубликовано 1 Июня 2017 Поделиться Опубликовано 1 Июня 2017 (изменено) @Graff46, ящики, которые находятся в спавне, всегда в онлайне, т.к. у них нет флагов перехода в оффлайн в object_flags. Чтобы пофиксить - после спавна предмета и выхода его в онлайн сделай трансфер этого предмета из ящика в тот же ящик. Типа box:transfer_item(item, box). Не так давно, где-то в этой теме или в ковырялке ТЧ, это уже обсуждалось. И даже специальную функцию для спавнa в онлайновые ящики приводили. Изменено 1 Июня 2017 пользователем naxac 1 Ссылка на комментарий
Graff46 619 Опубликовано 1 Июня 2017 Поделиться Опубликовано 1 Июня 2017 (изменено) сделай трансфер этого предмета из ящика в тот же ящик. Типа box:transfer_item(item, box)Не помогло, но потратив 2 дня на парсинг тематических форумов я нашёл, то что нужно ящик перевести в оффлайн, а потом в онлайн, для перезаписи его нэт-пакетов. Вот рабочий код: function spawn_in(box, item) -- Заспавнить НПСу в инвентарь, rewrite = true если спавним в ящикalife():create(item ,box:position(),box:level_vertex_id(),box:game_vertex_id(),box:id()) alife():create(item ,box:position(),box:level_vertex_id(),box:game_vertex_id(),box:id()) switch_offline(box) switch_autoline(box:id()) end function switch_offline (npc) if npc == nil then return end local sim = alife () if sim ~= nil then sim:set_switch_online (npc:id (), false) sim:set_switch_offline (npc:id (), true) end end ------------------------------------------------------------------------------------------- function switch_autoline (id) -- Это моё by Graff46 22.05.14, переводим НПС в нормальный режим local sim = alife () --если мы рядом - НПС онлайн, далеко - НПС оффлайн if sim ~= nil and sim:object(id) then sim:set_switch_online (id, true) sim:set_switch_offline (id, true) end end Изменено 1 Июня 2017 пользователем Graff46 3 Ссылка на комментарий
Dennis_Chikin 3664 Опубликовано 4 Июня 2017 Поделиться Опубликовано 4 Июня 2017 (изменено) Забавный эффект наблюдаю: При входе актора в онлайн удаляется пачка объектов. Через некоторое время срабатывает function my_obj_binder:net_spawn( data ) if not object_binder.net_spawn( self, data ) then return false end local obj = sim:object( data.id ) if obj then ... else error() -- разумеется, это и срабатываетэто так должно быть ? Изменено 4 Июня 2017 пользователем Dennis_Chikin Ссылка на комментарий
abramcumner 1229 Опубликовано 4 Июня 2017 Поделиться Опубликовано 4 Июня 2017 @Dennis_Chikin, 2017, отладчик и исходники, исходники и отладчик Такое может быть, например, если вызвать аборт не из акторных скриптов. Движок его отловит, объект удалит, но игру не покрашит. В результате появляются биндеры без объектов. В логе ничего похожего нет? Ссылка на комментарий
Dennis_Chikin 3664 Опубликовано 5 Июня 2017 Поделиться Опубликовано 5 Июня 2017 Не, тупо, for i = 1, 65535 do if ... then alife():release( obj, true )end end а потом начинает отрабатывать net_spawn() всего удаленного. Ссылка на комментарий
dsh 3824 Опубликовано 5 Июня 2017 Поделиться Опубликовано 5 Июня 2017 @Dennis_Chikin, я в некоторых случаях замечал, что движок как бы запланировал вывод в онлайн какие-то объекты и будет пытаться это делать, даже если их удалить после этого и до их net_spawn-а. Вот такое у меня ощущение осталось. Подробно не разбирался. Просто принял к сведению, что возможны чудеса. 1 Ссылка на комментарий
aka_sektor 1478 Опубликовано 11 Июня 2017 Поделиться Опубликовано 11 Июня 2017 (изменено) Кто шарит в логике, подскажите, как тут дописать правильно, чтобы в сообщении указывалось имя NPC, а не писалось "Сообщение". [sr_idle@20] on_game_timer = 10000 | sr_idle@30 %+sad_artefuck_ready =send_tip(sad_artefact_upgr_ready:sad_atr_trader) -sad_atr_trader_go_kitchen% send_tip - понятно, что это функция в xr_effects.script Есть даже такой комментарий: --[[ send_tip(news_id:sender:sender_id) 1. news_id 2. sender* 3. sender_id* * - not necessary --]] news_id - это текст сообщения, т.е. string id. В моей логике имя sad_artefact_upgr_readysender - это иконка в секции tips_icons news_manager.script. В моей логике имя sad_atr_trader sender_id - а это заголовок сообщения, story_id NPC. story_id моего персонажа прописан в файле по пути: gamedata\configs\creatures\spawn_sections_sad.ltx И выглядит так: [sad_atr_trader]:stalker $spawn = "respawn\sad_atr_trader" character_profile = sad_atr_trader story_id = sad_atr_trader Т.е. в логике я указал как: [sr_idle@20] on_game_timer = 10000 | sr_idle@30 %+sad_artefuck_ready =send_tip(sad_artefact_upgr_ready:sad_atr_trader:sad_atr_trader) -sad_atr_trader_go_kitchen% Дело в том, что хоть story_id и указан, заголовок все также остается как "Сообщение". UPD: Я все-таки думаю, что story_id читается, но не отображается. Потому что, если указать другое имя, не являющееся story_id - игра вылетит. Думаю, дело в функции send_tip в news_manager.script. Там не прописано отображение имени. Возможно, что-то со времен прошлых игр удалили из скриптов, т.к. я действительно не помню чтобы в ЗП игрок получал сообщения с подписанным именем NPC. UPD2: Проблема решена на форуме ap-pro: http://ap-pro.ru/forum/114-90122-1 Изменено 12 Июня 2017 пользователем aka_sektor Ссылка на комментарий
Demosfen 142 Опубликовано 12 Июня 2017 Поделиться Опубликовано 12 Июня 2017 Как мне начать понимать в скриптах? С какой литературой нужно ознакомиться? Ссылка на комментарий
Kober(BRUC) 99 Опубликовано 12 Июня 2017 Поделиться Опубликовано 12 Июня 2017 Как мне начать понимать в скриптах? С какой литературой нужно ознакомиться? Официальная "литература". Ну и конечно желание, и терпение. Без него далеко не уедешь. Ссылка на комментарий
TIGER_VLAD 361 Опубликовано 13 Июня 2017 Поделиться Опубликовано 13 Июня 2017 Всем привет. Пытаюсь заставить актора зависнуть в воздухе. По нажатию клавиши получаю координаты позиции и телепортирую на апдейте в это тучку с помощью db.actor:set_actor_position. Актора начинает трясти, как в воздухе так и на земле. Пробовал вместо апдейта использовать fastcall, но его еще больше начинает трясти и даже раздваивает. Видео . Почему так происходит ? Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти