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 143 Опубликовано 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 316 Опубликовано 6 Мая 2017 Поделиться Опубликовано 6 Мая 2017 (изменено) @TIGER_VLAD, Я тоже пытался реализовать функцию полета через db.actor:set_actor_position() и получил такой же результат как у Вас. Скорее всего, это происходит из-за того что функция set_actor_position() корректирует передаваемые ей координаты на коллизию с объектами, что при малых значениях delta и дает наблюдаемый нами эффект. В итоге, чтобы добиться малой скорости полета независимой от FPS пришлось перенести функцию полета в движок. Изменено 6 Мая 2017 пользователем WinCap 1 S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Ссылка на комментарий
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 3 824 Опубликовано 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 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
hi_flyer 75 Опубликовано 15 Мая 2017 Поделиться Опубликовано 15 Мая 2017 @dsh, Исходники (не x-ray extensions). Спасибо, то что нужно. Ссылка на комментарий
Dennis_Chikin 3 660 Опубликовано 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 755 Опубликовано 19 Мая 2017 Поделиться Опубликовано 19 Мая 2017 В планировщике не предусмотрена возможность замены экшна во время выполнения, соответственно эти твои хаки на него впечатления не производят. Вызов finalize initialize происходит только при переключении на другой экшн, а для этого нет оснований.(идентифицируется он, ясное дело, по id) p.s. Ну и конечно это вот колдунство с планировщиком для решения банальной задачи реинициализации схемы выглядит, мягко говоря, странно. Ссылка на комментарий
Dennis_Chikin 3 660 Опубликовано 19 Мая 2017 Поделиться Опубликовано 19 Мая 2017 Адекватное решение - это вообще не плодить экшены, которые можно не плодить, да. Раз уж оно именно так сделано. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Dennis_Chikin 3 660 Опубликовано 22 Мая 2017 Поделиться Опубликовано 22 Мая 2017 Тэкс, граждане... А кто ТОЧНО знает, в чем смысл *:net_save_relevant() ? Это, часом, не средство сказать, что объект МОЖНО сохранять, а иначе - НИ-НИ ? Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
dsh 3 824 Опубликовано 22 Мая 2017 Поделиться Опубликовано 22 Мая 2017 @Dennis_Chikin, если я ничего не путаю, то true из этого метода говорит движку, что бы он сохранял клиентский объект при его переходе в оффлайн. Иначе, только при сейве в онлайне. Могу напутать, т.к. давно это смотрел. 1 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Dennis_Chikin 3 660 Опубликовано 22 Мая 2017 Поделиться Опубликовано 22 Мая 2017 (изменено) При переходе в офлайн он его не сохраняет совершенно точно В ПРИНЦИПЕ. В смысле, хоть true, хоть false, хоть эпическая поэма. А вот будет ли объект сохраняться при false при сэйве - если да, то смысл этой шняги как раз в том, чтобы не сохранять в сэйв что-нибудь странное типа имени "" для ltx. Изменено 22 Мая 2017 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
dsh 3 824 Опубликовано 22 Мая 2017 Поделиться Опубликовано 22 Мая 2017 @Dennis_Chikin, у меня осталось в памяти впечатление, что оно делалось для того, что бы сохранять/не сохранять при переходе в оффлайн. Ну а то, как оно работает - это уже второй вопрос. Оно не только в этом вопросе работает совсем не так, как задумывалось и декларировалось. 1 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
7.9 174 Опубликовано 24 Мая 2017 Поделиться Опубликовано 24 Мая 2017 (изменено) Что это может быть, если:делаю 1: get_hud():AddCustomStatic()делаю 2: wnd():AttachChild()здесь ГГ получает хит от собаки ("разрыв")делаю 3: wnd():DetachChild()Но "3" уже не работает, скрипт виснет. Нет хита -- работает. При других хитах -- работает. Чем рисование "разрыва" отличается от рисования других хитов? Изменено 24 Мая 2017 пользователем 7.9 всё легко Ссылка на комментарий
HellRatz 2 895 Опубликовано 27 Мая 2017 Поделиться Опубликовано 27 Мая 2017 Господа, никто не поделится функцией перетаскивания всех имеющихся у ГГ предметов в именной ящик с уникальным стори айди? GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Раритетные моды на моем облаке — на память о былом. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти