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 Ссылка на комментарий
Ulman 5 Опубликовано 12 Мая 2011 Поделиться Опубликовано 12 Мая 2011 Ребята, а можно как то отдельному НПС прописать логику, что бы он допустим в 23.00 шел спать, а в 5.00 вставал? Ссылка на комментарий
_Призрак_ 11 Опубликовано 12 Мая 2011 Поделиться Опубликовано 12 Мая 2011 Да, гугал_**.script или поставить на on_info проверку на время Freedom Ссылка на комментарий
Ulman 5 Опубликовано 12 Мая 2011 Поделиться Опубликовано 12 Мая 2011 _Призрак_, а можно, пожалуйсто, точнее с проверкой на время, а то самому не получается написать. Ссылка на комментарий
_Призрак_ 11 Опубликовано 12 Мая 2011 Поделиться Опубликовано 12 Мая 2011 Ставишь на проверку функцию: if level.get_time_hours() >= 6 and level.get_time_hours() <= 22 then return true -- день и на оборот Freedom Ссылка на комментарий
KD87 720 Опубликовано 12 Мая 2011 Поделиться Опубликовано 12 Мая 2011 TASTAN, чтобы появилась пища для раздумий, поставь в data_packet.pm после строчки 62 (foreach my $p (@_) {) вот такое: print "$p->{name}\n"; Ну а потом выложить текст из консоли, на котором стопорится распаковка. Ссылка на комментарий
TASTAN 1 Опубликовано 13 Мая 2011 Поделиться Опубликовано 13 Мая 2011 KD87, Вот что получилось: E:\game\S.T.A.L.K.E.R\gamedata\spawns>acdc.pl -d all.spawn dummy16 section_name name s_gameid s_rp position direction respawn_time unknown_id parent_id phantom_id s_flags version script_version game_vertex_id distance direct_control level_vertex_id object_flags custom_data story_id spawn_story_id visual_name visual_flags g_team g_squad g_group health dynamic_out_restrictions dynamic_in_restrictions killer_id game_death_time money specific_character trader_flags character_profile community_index rank reputation character_name skeleton_name skeleton_flags source_id holder_id upd:health upd:timestamp upd:creature_flags upd:position upd:o_model upd:o_torso upd:g_team upd:g_squad upd:g_group upd:actor_state upd:actor_accel_header upd:actor_accel_data upd:actor_velocity_header upd:actor_velocity_data upd:actor_radiation upd:actor_weapon upd:num_items Died at stkutils/data_packet.pm line 21. E:\game\S.T.A.L.K.E.R\gamedata\spawns>pause Для продолжения нажмите любую клавишу . . . Ссылка на комментарий
strelok200 0 Опубликовано 13 Мая 2011 Поделиться Опубликовано 13 Мая 2011 Какую логику нужно прописать НПСу чтобы он все игнорировал и мутантов и вообще ВСЁ! Создаю глобальный мод с новыми локациямЭ Ссылка на комментарий
Disord 1 Опубликовано 13 Мая 2011 Поделиться Опубликовано 13 Мая 2011 strelok200, combat_ignore = combat_ignore [combat_ignore] combat_ignore_cond = always Вроде так... Ссылка на комментарий
KD87 720 Опубликовано 13 Мая 2011 Поделиться Опубликовано 13 Мая 2011 TASTAN, ACDC по версии к спавну не подходит. Можешь залить куда-нибудь спавн - я посмотрю, какой он версии. Или попробуй Universal ACDC. Вообще странный вылет. Ссылка на комментарий
PavelSnork 3 Опубликовано 13 Мая 2011 Поделиться Опубликовано 13 Мая 2011 Срочно нужна помощь! Совместил АМК ЗП 0.4 с АРС 0.5.2. Затон работает нормально, но при переходе на любую другую локацию происходит вот такой вылет (также при начале игры на другой локации). ! Cannot find saved game ~~~dbg:_bp:_init():_name='device_pda9929' ! Cannot find saved game ~~~dbg:adding_object_%s ! Cannot find saved game ~~~dbg:adding_object_jup_hiding_place_45 ! Cannot find saved game ~~~dbg:motivator_binder:net_spawn():_self.object:name()='%s' ! Cannot find saved game ~~~dbg:motivator_binder:net_spawn():_self.object:name()='jup_belov9938' ! Cannot find saved game ~~~dbg:adding_object_%s ! Cannot find saved game ~~~dbg:adding_object_jup_belov9938 ! Cannot find saved game ~~~dbg:filename_is_[%s] ! Cannot find saved game ~~~dbg:filename_is_[nil] ! Cannot find saved game ~~~dbg:xr_info_loaded!!! ! Cannot find saved game ~~~dbg:xr_info_loaded!!! ! Cannot find saved game ~~~dbg:setup_gulag_and_logic_on_spawn_obj=%s,_strn_id=%s,_loaded=%s ! Cannot find saved game ~~~dbg:setup_gulag_and_logic_on_spawn_obj=jup_belov9938,_strn_id=2787,_loaded=fa lse ! Cannot find saved game ~~~dbg:disable_invulnerability._npc[%s]_=_[false] ! Cannot find saved game ~~~dbg:disable_invulnerability._npc[jup_belov9938]_=_[false] ! Cannot find saved game ~~~dbg:reset_invulnerability._npc[%s]_=_[%s] ! Cannot find saved game ~~~dbg:reset_invulnerability._npc[jup_belov9938]_=_[false] FATAL ERROR [error]Expression : !m_error_code [error]Function : raii_guard::~raii_guard [error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp [error]Line : 748 [error]Description : ....e.r. - Зов Припяти\gamedata\scripts\xr_logic.script:955: bad argument #1 to 'gfind' (string expected, got nil) stack trace: Нашел в xr_logic.script функцию с 955 строкой: function parse_condlist(npc, section, field, src) local lst = {} -- 1) Разбиваем на разделенные запятыми части: local at, to, infop_check_lst, remainings, infop_set_lst, newsect --printf("_bp: src = %s", src) local n = 1 for fld in string.gfind(src, "%s*([^,]+)%s*") do -- вот строка 955. -- Здесь fld это набор infoportions в {} и имя секции, на которую переключиться. lst[n] = {} --printf("_bp: iter %d: fld = %s", n, fld) -- Выделяем список infoportions для проверки: at, to, infop_check_lst = string.find(fld, "{%s*(.*)%s*}") if infop_check_lst then --printf("_bp: infop_check_lst: [%s]", infop_check_lst) -- Выделяем оставшуюся часть поля, т.е. имя секции плюс список infoportions для установки: remainings = string.sub(fld, 1, at - 1) .. string.sub(fld, to + 1) else -- Список infoportions для проверки не был задан, следовательно, ничего не удаляем: remainings = fld end --printf("_bp: remainings: %s", remainings) -- Выделяем список infoportions для установки из remainings: at, to, infop_set_lst = string.find(remainings, "%%%s*(.*)%s*%%") if infop_set_lst then -- Выделяем оставшуюся часть поля, т.е. имя секции: newsect = string.sub(remainings, 1, at - 1) .. string.sub(remainings, to + 1) else -- Список infoportions для установки не был задан, следовательно, remainings и есть имя секции. newsect = remainings end --printf("_bp: newsect: %s", newsect) -- И сразу trim имя секции: at, to, newsect = string.find(newsect, "%s*(.*)%s*") if not newsect then abort_syntax_error_in_cond(npc, section, field) end -- Имя секции теперь можно сохранить: lst[n].section = newsect -- Теперь нужно распарсить infoportions в строке infop_check_lst и -- заполнить массив infop_check: { "infop_name" = true/false }. -- На входе имеем строку вида " +infop1 -infop2 +infop3 ... " lst[n].infop_check = {} parse_infop(lst[n].infop_check, infop_check_lst) -- То же самое для устанавливаемых infoportions: lst[n].infop_set = {} parse_infop(lst[n].infop_set, infop_set_lst) n = n + 1 end return lst end Вот сижу и думаю, что это может означать... Жду ли я Сталкер 2? Хм... Ссылка на комментарий
TASTAN 1 Опубликовано 13 Мая 2011 Поделиться Опубликовано 13 Мая 2011 KD87, Вот залил посмотри чё там с ним... И кстати universal ACDC я тоже пробывал всеравно неработает. Ссылка на комментарий
Disord 1 Опубликовано 14 Мая 2011 Поделиться Опубликовано 14 Мая 2011 (изменено) Здравствуйте! 1. Как можно заставить актора определённое время замереть на месте? Чтобы вообще не двигался? И желательно в присяди... 2. Не подскажете функцию очистки инвентаря актора? Полной очистки - с деньгами и прочим. Изменено 14 Мая 2011 пользователем Disord Ссылка на комментарий
Полтергейст 38 Опубликовано 14 Мая 2011 Поделиться Опубликовано 14 Мая 2011 PavelSnork, надо в самом начале функции дописать вот так: function parse_condlist(npc, section, field, src) if npc == nil or src == nil then return end Ссылка на комментарий
=VENOM= 51 Опубликовано 14 Мая 2011 Поделиться Опубликовано 14 Мая 2011 Disord, 1. для организации "неподвижности" игрока можно использовать функцию set_inactivate_input_time(xxx), в которой xxx это время, в течение которого отключается ввод команд для ГГ. Эта функция используется, например, в ситуации, когда ГГ получает удар в физиономию за слишком настойчивые приставания к сталкерам. Либо напрямую использовать level.disable_input()/level.enable_input(). 2. Вот такая конструкция подойдёт ? function clear_player_inventory() db.actor:iterate_inventory( function(dummy,item) local nameid = item:section() if nameid ~= "bolt" then alife():release(alife():object(item:id()), true) end end, nil) db.actor:give_money(-db.actor:money()) end Ссылка на комментарий
PavelSnork 3 Опубликовано 14 Мая 2011 Поделиться Опубликовано 14 Мая 2011 Полтергейст, после твоей правки я даже не Затон не могу зайти. Вылетает с таким логом: * [prefetch] time: 21356 ms * [prefetch] memory: 110656Kb ! Player name in registry is empty! (InstallUserName) ! Cannot find saved game ~~~dbg:start_game_callback_called ! Cannot find saved game ~~~dbg:start_game_callback_called ! Cannot find saved game ~~~dbg:fill_phrase_table ! Cannot find saved game ~~~dbg:fill_phrase_table * phase time: 21557 ms * phase cmem: 232193 K * phase time: 10 ms * phase cmem: 232193 K * Creating new game... * Loading spawn registry... ! Cannot find saved game ~~~dbg:_se_smart_terrain:_set_load_marker:_%s ! Cannot find saved game ~~~dbg:_se_smart_terrain:_set_load_marker:_171 FATAL ERROR [error]Expression : !m_error_code [error]Function : raii_guard::~raii_guard [error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp [error]Line : 748 [error]Description : ....e.r. - Зов Припяти\gamedata\scripts\xr_logic.script:589: bad argument #1 to 'pairs' (table expected, got nil) stack trace: Помогите разобраться с проблемой... Жду ли я Сталкер 2? Хм... Ссылка на комментарий
TRAMP14 1 Опубликовано 14 Мая 2011 Поделиться Опубликовано 14 Мая 2011 А можно как-либо отследить выстрел из оружия в активном слоте? Ссылка на комментарий
Garry_Galler 7 Опубликовано 14 Мая 2011 Поделиться Опубликовано 14 Мая 2011 (изменено) TRAMP14 Можно. Скрипт гравипушки, в частности, основан на отслеживании выстрела (нажатии ЛКМ). Алгоритм прост - сравниваем на апдейте кол-во патронов в стволе и размер магазина. Либо считаем каждый выстрел и опять сравниваем. В скриптах гравипушки используется ствол с магазином на один патрон - так проще отслеживать выстрел. Если же писать скрипт для ствола с реальным магазином - то все несколько сложнее. Изменено 14 Мая 2011 пользователем Garry_Galler Ссылка на комментарий
*Shoker* 322 Опубликовано 14 Мая 2011 Поделиться Опубликовано 14 Мая 2011 У кого есть идеи, как скриптом заставить ГГ выйти из машины? Или может кто то решил движковый вылет на ЧН при смерти игрока в машине? Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
strelok200 0 Опубликовано 15 Мая 2011 Поделиться Опубликовано 15 Мая 2011 Спасибо!А что нужно прописать неписям чтобы во время боя они атаковали с места, а не ходили куда не надо? Создаю глобальный мод с новыми локациямЭ Ссылка на комментарий
gruber 2481 Опубликовано 15 Мая 2011 Поделиться Опубликовано 15 Мая 2011 strelok200, Посмотри логику всех сюжетных снайперов (соят на месте никуда не дергаясь)и еще там есть тонкость пути у них из одной точки и в месте с отсутствуещей АИ сеткой (не у всех ,но есть такие,к примеру монолитовцы на крыше на радаре и ЧАЭС) Можно и не снайперов заставить ,но не помню какой командой(пример -засада "долга" на патруль "свободы") Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти