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 Ссылка на комментарий
mortan 144 Опубликовано 4 Мая 2017 Поделиться Опубликовано 4 Мая 2017 @trantat, ну если гнаться за "универсальным" приёмом то далеко не уедешь если ты не скриптовый гуру. В любом случае я думаю это ещё кому-нибудь да пригодится. В скриптах увы ничем не могу помочь. Ссылка на комментарий
TIGER_VLAD 361 Опубликовано 5 Мая 2017 Поделиться Опубликовано 5 Мая 2017 (изменено) @Shkiper2012, Только что попробовал твой код, нажимаю T - cкорость уменьшается, но все равно большая. Я бы хотел добиться скорости приблизительную к скорости ходьбы. Пробовал изменять значение переменной на local distant_step = 0.1 и получаю , когда ГГ летит не по направлению взгляда. Видать не получится у меня ничего, ну и на том всем спасибо. Изменено 5 Мая 2017 пользователем TIGER_VLAD Ссылка на комментарий
WinCap 323 Опубликовано 6 Мая 2017 Поделиться Опубликовано 6 Мая 2017 (изменено) @TIGER_VLAD, Я тоже пытался реализовать функцию полета через db.actor:set_actor_position() и получил такой же результат как у Вас. Скорее всего, это происходит из-за того что функция set_actor_position() корректирует передаваемые ей координаты на коллизию с объектами, что при малых значениях delta и дает наблюдаемый нами эффект. В итоге, чтобы добиться малой скорости полета независимой от FPS пришлось перенести функцию полета в движок. Изменено 6 Мая 2017 пользователем WinCap 1 Ссылка на комментарий
Stalkeruga_238 2 Опубликовано 7 Мая 2017 Поделиться Опубликовано 7 Мая 2017 Подскажите, почему когда я пишу верные координаты при спавне нпс через allspawn он появляется в другом месте... пс: упд коорды и просто коорды указаны верно, проверял раз 5... Ссылка на комментарий
Serge! 127 Опубликовано 7 Мая 2017 Поделиться Опубликовано 7 Мая 2017 пишу верные координаты Может дело в том, откуда Вы получили/взяли эти самые верные координаты? Вдруг они и не такае уж и верные? Других причин вроде быть не должно. Ссылка на комментарий
UnLoaded 313 Опубликовано 7 Мая 2017 Поделиться Опубликовано 7 Мая 2017 почему когда я пишу верные координаты при спавне нпс через allspawn он появляется в другом местеОткуда уверенность, что спавн происходит не по координатам ? И насколько это - в другом месте ? Из вариантов: непись может просто успевает свалить с точки спавна(такое возможно в зависимости от прописанной неписю логики\ее отсутствия), для непися выставлены флаги спавна с привязкой к AI-сетке - движок его подвинет к ближайшей ноде, если точка задана не на сетке. 1 Ссылка на комментарий
Stalkeruga_238 2 Опубликовано 8 Мая 2017 Поделиться Опубликовано 8 Мая 2017 @UnLoaded, Коорды ставил около перехода на свалку а непись появляется за жд насыпью со стороны сидора... @UnLoaded, Забыл сказать что непись мертвый. Ссылка на комментарий
UnLoaded 313 Опубликовано 8 Мая 2017 Поделиться Опубликовано 8 Мая 2017 @Stalkeruga_238Попробуй на него метку поставить, и после начала НИ по наблюдай за меткой... Ссылка на комментарий
hi_flyer 75 Опубликовано 15 Мая 2017 Поделиться Опубликовано 15 Мая 2017 (изменено) Подскажите для ТЧ скриптовый аналог функции use_ai_locations. Если не ошибаюсь, через нет-пакеты этот флаг можно править. Изменено 15 Мая 2017 пользователем hi_flyer Ссылка на комментарий
dsh 3824 Опубликовано 15 Мая 2017 Поделиться Опубликовано 15 Мая 2017 @hi_flyer, под ТЧ что ты понимаешь? В x-ray extensions есть этот метод. Если тебе нужно именно через нетпакет, то вот код, который я некоторое время использовал function clear_used_ai_locations( sobj ) local pk = get_netpk( sobj, 1 ) if pk and pk:isOk() then local data = pk:get() data.object_flags = bit_and( data.object_flags, bit_not( object_flags.UsedAI_Locations ) ) pk:set( data ) end end Ссылка на комментарий
hi_flyer 75 Опубликовано 15 Мая 2017 Поделиться Опубликовано 15 Мая 2017 @dsh, Исходники (не x-ray extensions). Спасибо, то что нужно. Ссылка на комментарий
Dennis_Chikin 3664 Опубликовано 18 Мая 2017 Поделиться Опубликовано 18 Мая 2017 (изменено) Так, что-то я туплю совсем. Есть два костра, с разными путями. Пути прописаны в секциях логики kamp1 и kamp2. Между ними гоняется непись. Инициализация непися выглядит так: function add_to_binder( npc, ini, scheme, sect, st ) local nm = npc:name() -- log( "info", "add_to_binder, %s...", nm ) local kamp_end = xr_evaluators_id.stohe_kamp_base + 1 local on_pos = xr_evaluators_id.stohe_kamp_base + 2 local mgr = npc:motivation_action_manager() mgr:add_evaluator( kamp_end, evaluator_kamp_end( "kamp_end", st, sect ) ) mgr:add_evaluator( on_pos, evaluator_on_position( "kamp_on_position", st, sect ) ) local a = action_wait( nm, "action_kamp_wait", st ) a:add_precondition( world_property( stalker_ids.property_alive, true ) ) a:add_precondition( world_property( stalker_ids.property_danger, false ) ) a:add_precondition( world_property( stalker_ids.property_enemy, false ) ) -- a:add_precondition( world_property( stalker_ids.property_anomaly, false ) ) xr_motivator.addCommonPrecondition( a ) a:add_precondition( world_property( on_pos, true ) ) a:add_effect( world_property( kamp_end, true ) ) mgr:add_action( xr_actions_id.stohe_kamp_base + 3, a ) subscribe_action( npc, st, a ) a = action_go_position( nm, "action_go_kamp", st ) a:add_precondition( world_property( stalker_ids.property_alive, true ) ) a:add_precondition( world_property( stalker_ids.property_danger, false ) ) a:add_precondition( world_property( stalker_ids.property_enemy, false ) ) -- a:add_precondition( world_property( stalker_ids.property_anomaly, false ) ) xr_motivator.addCommonPrecondition( a ) a:add_precondition( world_property( on_pos, false ) ) a:add_effect( world_property( on_pos, true ) ) mgr:add_action( xr_actions_id.stohe_kamp_base + 1, a ) a = mgr:action( xr_actions_id.alife ) a:add_precondition( world_property( kamp_end, true ) ) end Если случается ивент "disable", неписю делается следующее: local kamp_end = xr_evaluators_id.stohe_kamp_base + 1 local on_pos = xr_evaluators_id.stohe_kamp_base + 2 local mgr = npc:motivation_action_manager() -- todo: слишком сложно. ПРОСТО оторвать лишние эвалюаторы СОВСЕМ. Оставить все в одном. local a = mgr and mgr:action( xr_actions_id.alife ) if a then a:remove_precondition( kamp_end ) else log( "warning", "(%s):removeNpc, no action (alife) (%s)", self.center_point, npc:name() ) end a = mgr:action( xr_actions_id.stohe_kamp_base + 3 ) if a then xr_logic.unsubscribe_action_from_events( npc, st, a ) mgr:remove_action( xr_actions_id.stohe_kamp_base + 3 ) -- log( "info", "(%s):removeNpc, %s, 2", self.center_point, npc:name() ) else log( "warning", "(%s):removeNpc, no action (action_kamp_wait) (%s)", self.center_point, npc:name() ) end mgr:remove_action( xr_actions_id.stohe_kamp_base + 1 ) -- log( "info", "(%s):removeNpc, %s, 3", self.center_point, npc:name() ) mgr:remove_evaluator( kamp_end ) -- mgr:add_evaluator( kamp_end, property_evaluator_const( true ) ) mgr:remove_evaluator( on_pos ) -- mgr:add_evaluator( on_pos, property_evaluator_const( true ) ) И, с новым сторейжем, опять дергается function add_to_binder() Вот какого он продолжает выполнять action_go_position:execute(), благополучно пропустив action_go_position:initialize() ? И как ему все-таки сказать, что вообще-то надо бы action_go_position:initialize() все-таки сделать ? p.s. Зачем такие сложности ? По тому что без этого в какой-то момент начинается вообще адова каша: какая схема по какому эвалюатору дергается, и с чьим сторэйжем - черт ногу сломит. Изменено 18 Мая 2017 пользователем Dennis_Chikin Ссылка на комментарий
Bak 757 Опубликовано 19 Мая 2017 Поделиться Опубликовано 19 Мая 2017 В планировщике не предусмотрена возможность замены экшна во время выполнения, соответственно эти твои хаки на него впечатления не производят. Вызов finalize initialize происходит только при переключении на другой экшн, а для этого нет оснований.(идентифицируется он, ясное дело, по id) p.s. Ну и конечно это вот колдунство с планировщиком для решения банальной задачи реинициализации схемы выглядит, мягко говоря, странно. Ссылка на комментарий
Dennis_Chikin 3664 Опубликовано 19 Мая 2017 Поделиться Опубликовано 19 Мая 2017 Адекватное решение - это вообще не плодить экшены, которые можно не плодить, да. Раз уж оно именно так сделано. Ссылка на комментарий
Dennis_Chikin 3664 Опубликовано 22 Мая 2017 Поделиться Опубликовано 22 Мая 2017 Тэкс, граждане... А кто ТОЧНО знает, в чем смысл *:net_save_relevant() ? Это, часом, не средство сказать, что объект МОЖНО сохранять, а иначе - НИ-НИ ? Ссылка на комментарий
dsh 3824 Опубликовано 22 Мая 2017 Поделиться Опубликовано 22 Мая 2017 @Dennis_Chikin, если я ничего не путаю, то true из этого метода говорит движку, что бы он сохранял клиентский объект при его переходе в оффлайн. Иначе, только при сейве в онлайне. Могу напутать, т.к. давно это смотрел. 1 Ссылка на комментарий
Dennis_Chikin 3664 Опубликовано 22 Мая 2017 Поделиться Опубликовано 22 Мая 2017 (изменено) При переходе в офлайн он его не сохраняет совершенно точно В ПРИНЦИПЕ. В смысле, хоть true, хоть false, хоть эпическая поэма. А вот будет ли объект сохраняться при false при сэйве - если да, то смысл этой шняги как раз в том, чтобы не сохранять в сэйв что-нибудь странное типа имени "" для ltx. Изменено 22 Мая 2017 пользователем Dennis_Chikin Ссылка на комментарий
dsh 3824 Опубликовано 22 Мая 2017 Поделиться Опубликовано 22 Мая 2017 @Dennis_Chikin, у меня осталось в памяти впечатление, что оно делалось для того, что бы сохранять/не сохранять при переходе в оффлайн. Ну а то, как оно работает - это уже второй вопрос. Оно не только в этом вопросе работает совсем не так, как задумывалось и декларировалось. 1 Ссылка на комментарий
7.9 174 Опубликовано 24 Мая 2017 Поделиться Опубликовано 24 Мая 2017 (изменено) Что это может быть, если:делаю 1: get_hud():AddCustomStatic()делаю 2: wnd():AttachChild()здесь ГГ получает хит от собаки ("разрыв")делаю 3: wnd():DetachChild()Но "3" уже не работает, скрипт виснет. Нет хита -- работает. При других хитах -- работает. Чем рисование "разрыва" отличается от рисования других хитов? Изменено 24 Мая 2017 пользователем 7.9 Ссылка на комментарий
HellRatz 2913 Опубликовано 27 Мая 2017 Поделиться Опубликовано 27 Мая 2017 Господа, никто не поделится функцией перетаскивания всех имеющихся у ГГ предметов в именной ящик с уникальным стори айди? Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти