Это популярное сообщение. Dennis_Chikin 3 658 Опубликовано 16 Мая 2014 Это популярное сообщение. Поделиться Опубликовано 16 Мая 2014 Ковыряемся в файлах ТЧ Прежде чем писать в тему - внимательно читаем первый пост, и пользуемся поиском. Возможно, ответ на Ваш вопрос уже есть. Касательно телепатии: если Вы передаете Ваши файлы телепатическим путем - ответы будут передаваться тоже телепатически. Если Вы предлагаете угадать, отчего у Вас в подвале происходит странный стук - ответ будет передан стуком. 4 8 6 12 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Карлан 1 049 Опубликовано 8 Октября 2016 Поделиться Опубликовано 8 Октября 2016 @AndrewMor, давай начнем с простого. Как созданы циклические задания в оригинале? Далее проецируй реализацию оригинала на свою, какие отличия? Задание можно создать полностью в скрипте, иными словами доступно создание полноценного генератора, и как выдавать в таком случае квесты - решать только тебе. Рандомный квест выдать очень просто, делаешь несколько инфо, подшиваешь к каждому таск и рандомно выдаешь, если предполагается цикличность, то выключаешь инфопоршни либо создаешь какие-то флаги, на этом все. В CRandomTask, несмотря на его название, квесты не рандомны, для каждого существует однозначный прекондишн, таких моментов чтобы тебе на голову свалилось какое-попало задание нет и быть не может (без дополнительных правок, разумеется). @UnLoaded, @HellRatz, блокировка перехода достаточно однозначная операция, что тут не понятного? Блокировка предполагает оставить активность режект пути чтобы юзер, в случае чего, не убежал и не свалился с локации, для такого случая ваши варианты не годятся, нужно переделывать интерфейс, просто забить еще один месадж бокс и пинать актора по режект пути если переход заблокирован, я предлагаю пойти таким путем. вывести несколько функций, написать биндер и подшить обработку кастом даты чтобы было удобно управлять активностью с помощью кондлиста, это не лучший вариант, но определенно неплохой и достаточно простой и быстрый. Ссылка на комментарий
AndrewMor 529 Опубликовано 8 Октября 2016 Поделиться Опубликовано 8 Октября 2016 Рандомный квест выдать очень просто, Может, я не совсем правильно объяснил: циклический квест есть и работает. Просто нужно выдать не из диалога, а скриптом. Во всяком случае, я пока не въехал, как. Был бы благодарен за пример. Сталкер - наше всё! Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 8 Октября 2016 Поделиться Опубликовано 8 Октября 2016 (изменено) [tm_eliminate_camp_5] type = eliminate_lager community = actor ;--init_condition = {=actor_on_level(l02_garbage) +agroprom_military_case_have} task_manager.script (переписанный): function CRandomTask:actor_update() -- Проверяем можем ли мы сейчас выдать какой либо самоинициализующийся таск local t = self.task_info for k, v in pairs( self.task_id_self_inited ) do if t[v].enabled and t[v].status == "normal" then if self:check_task_props( v ) and pick_section( actor, actor, t[v].init_condition ) then self:action_give_task( actor, nil, nil, t[v].yes_phrase_id ) end end end end блокировка перехода достаточно однозначная операция, что тут не понятного? Блокировка предполагает оставить активность режект пути чтобы юзер, в случае чего, не убежал и не свалился с локации, Вот это как раз тот случай, когда на месте, где должен быть level_changer, ставится просто рестриктор, который дергает actor:set_actor_position() Ну или невидимая стена чуть дальше области захвата level_changer'ом. Изменено 8 Октября 2016 пользователем Dennis_Chikin 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Карлан 1 049 Опубликовано 8 Октября 2016 Поделиться Опубликовано 8 Октября 2016 Вот это как раз тот случай, когда на месте, где должен быть level_changer, ставится просто рестриктор, который дергает actor:set_actor_position() Ну или невидимая стена чуть дальше области захвата level_changer'ом. Level changer и есть рестриктор, зачем еще один? В него же пишешь флажок "выключенности", если активен, выдаешь при заходе хоть в сферу хоть в бокс месадж бокс с одной кнопкой, при нажатии на которую получаешь пинка по режект пути, а он из себя может представлять все что угодно, хоть wp (что с моей точки зрения лучше), хоть set_actor_position. На оригинале, я уже писал, все эти ченжеры на скриптах эмулируются элементарно, и ничего выключать там или удалять, в оффлайн переводить и еще куда-нибудь отправлять не требуется. Но лучше уже в движке сделать, там это во-первых быстрее, во-вторых проще, в третьих правильнее. Ссылка на комментарий
AndrewMor 529 Опубликовано 8 Октября 2016 Поделиться Опубликовано 8 Октября 2016 task_manager.script (переписанный): А как квест-то выдать? Код local new_task = CGameTask() new_task:load("ecolog_eliminate_lager_1") db.actor:give_task(new_task, 3600*1000, true) не работает. Или как-то иначе выдавать надо? Сталкер - наше всё! Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 8 Октября 2016 Поделиться Опубликовано 8 Октября 2016 (изменено) Чего-то не хватает, да. function CRandomTask:action_give_task( a, npc, p1, p2 ) -- Выдача квеста игроку local task = CGameTask() local id = self.task_id_by_yes_phrase_id[p2] local nfo = self.task_info local t = nfo[id] local ct = t.complex_type task:load( ct ) local t_type = t.type task:set_title( t_type ) task:get_objective( 0 ):set_article_id( t.description ) local o = SGameTaskObjective( task, 1 ) o:set_description( t.name ) local tg = t.target_objects -- Выбираем текущую цель квеста if tg then tg = tg[ math_random( #tg ) ] t.selected_target = tg end -- log( "info", "action_give_task: %s, id: %s", t_type, tostring( tg ) ) if t_type == "eliminate_lager" then o:set_map_hint( t.text ) o:set_map_location( "eliminate_lager_location" ) o:set_object_id( tg ) elseif t_type == "defend_lager" then local g = sim:object( tg ) if g then o:set_map_hint( t.text ) o:set_map_location( "defend_lager_location" ) o:set_object_id( tg ) t.defend_target = ( ini and ini:section_exist( "random_task" ) and ini:line_exist( "random_task", "defend_target" ) and r_u32( "random_task", "defend_target" ) ) or abort( "CRandomTask:action_give_task, invalid custom data, (%s)", tg ) end elseif t_type == "kill_stalker" then o:set_map_hint( t.text ) o:set_map_location( "kill_stalker_location" ) o:set_object_id( tg ) storyline.check_kill_task( tg ) if t.target_dialog then -- Добавим id сталкера в список целей -- amk_add_target_id_to_kill_targets( tg, t.target_dialog, id ) table_insert( kill_targets, { ["id"] = tg, t.target_dialog, ["task_id"] = id } ) pstor.kill_targets = kill_targets end elseif t_type == "find_item" then o:set_map_hint( t.text ) o:set_map_location( "find_item_location" ) o:set_object_id( tg ) end o:add_complete_func( "task_manager.task_complete" ) task:add_objective( o ) if t.need_return then local parent = sid_by_npc[ t.parent ] parent = parent and sim:story_object( parent ) if parent then o = SGameTaskObjective( task, 2 ) local rt = return_task_by_type[ t_type ] o:set_description( rt ) o:set_map_hint( game.translate_string( rt ) .. "\\n%c[255,160,160,160]" .. game.translate_string( t.name ) ) o:set_map_location( "blue_location" ) o:set_object_id( parent.id ) task:add_objective( o ) else return -- Квестодателя прибили end end actor:give_task( task, ( t.time or 0 ) * 1000 * ( ( t.init_condition and autoquest_time_factor ) or quest_time_factor ), false ) -- дизаблим все остальные задания данного типа, так как игрок не может одновременно обладать двумя заданиями одного типа. t.status = "selected" self.active_task_by_type[ct] = id for k, v in pairs( nfo ) do if v.complex_type == ct then v.enabled = false end end end Изменено 8 Октября 2016 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
AndrewMor 529 Опубликовано 8 Октября 2016 Поделиться Опубликовано 8 Октября 2016 Чего-то не хватает, да. Спасибо, буду пробовать. Но изначально вопрос был в другом. Похоже, что квесты, описанные в таскс_имя_локации, повторно выдать вообще нельзя, так получается? Первично цель была выдавать многократно именно такой квест. Сталкер - наше всё! Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 8 Октября 2016 Поделиться Опубликовано 8 Октября 2016 Почему же нельзя ? Очень даже можно. Если предусмотреть отсутствие конфликтов по чему попало с чем попало. https://dl.dropboxusercontent.com/u/27871782/task_manager.script Читаем, изучаем, и проникаемся пониманием, что ЭТО вообще не надо использовать ни для чего и ни в каком виде. А нужно использовать что-нибудь другое. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
AndrewMor 529 Опубликовано 9 Октября 2016 Поделиться Опубликовано 9 Октября 2016 Читаем, изучаем, и проникаемся пониманием, что ЭТО вообще не надо использовать ни для чего и ни в каком виде. То, что находится по ссылке, я уж точно использовать не буду. А сие не из Солянки ли? Сталкер - наше всё! Ссылка на комментарий
AndrewMor 529 Опубликовано 10 Октября 2016 Поделиться Опубликовано 10 Октября 2016 (изменено) Камрады, прошу помощи. Есть торговец, прикручиваю к нему рандомные квесты. Квест на вынос лагеря не появляется в списке доступных, в чем тут дело? Квесты "Принести часть тела монстра", "Принести артефакт", "Найти предмет" в списке есть, а "Вынести лагерь" - нету?? ;---------------Gavaez--------------------- ;---------Eliminate lager-----------gavaez_eliminate_camp_1;---------Find Item-----------gavaez_find_item_1;---------Monster Part-----------gavaez_monster_part_1;--------Artefact---------------gavaez_find_artefact_1;--------------------Gavaez-----------------------------[gavaez_eliminate_camp_1]type = eliminate_lagercommunity = actortext = gavaez_eliminate_camp_1_textdescription = gavaez_eliminate_camp_1_descrparent = gavaeztarget = jup_st_stalker1reward_money = 30000reward_reputation = +20reward_rank = 4reward_item = medkit_scientic, medkit_scientic, medkit_scienticprior = 1[gavaez_find_item_1]type = find_itemcommunity = actortext = gavaez_eliminate_camp_1_textdescription = gavaez_eliminate_camp_1_descrparent = gavaeztarget = outfit_stalker_m1reward_reputation = +30reward_rank = 8reward_item = protection_outfitprior = 1[gavaez_monster_part_1]type = monster_partcommunity = actortext = gavaez_eliminate_camp_1_textdescription = gavaez_eliminate_camp_1_descrparent = gavaeztarget = mutant_snork_legreward_money = 8000reward_reputation = +20reward_rank = 2reward_item = medkit_scientic, medkit_scientic, medkit_scienticprior = 1[gavaez_find_artefact_1]type = artefactcommunity = actortext = gavaez_eliminate_camp_1_textdescription = gavaez_eliminate_camp_1_descrparent = gavaeztarget = af_fireballreward_money = 15000reward_reputation = +10reward_rank = 5prior = 1 Скрин: http://i-fotki.info/20/225eaffc77cefaab39540bfc2c8f2768504662258756689.jpg.html Кстати, квест на защиту лагеря тоже не появляется в списке. Почему? Изменено 10 Октября 2016 пользователем AndrewMor 1 Сталкер - наше всё! Ссылка на комментарий
naxac 2 447 Опубликовано 10 Октября 2016 Поделиться Опубликовано 10 Октября 2016 @AndrewMor, для того, чтобы квест eliminate_lager появился, в гулаге должно быть пришедшее население, занявшее работы. А для defend_lager - в кастом-дате обороняющегося смарта прописан нападающий смарт, [random_task] defend_target = story_id смарта и этот нападающий смарт должен быть в состоянии рейда (xr_gulag.getGulagState(defend_target) == 1) на обороняющийся. Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
AndrewMor 529 Опубликовано 10 Октября 2016 Поделиться Опубликовано 10 Октября 2016 (изменено) для того, чтобы квест eliminate_lager появился, в гулаге должно быть пришедшее население, занявшее работы. Ага, а ларчик просто открывался. буду знать, спасибо. Гулаг-то у меня еще не заполнен, был создан только смарт-террейн. Изменено 10 Октября 2016 пользователем AndrewMor Сталкер - наше всё! Ссылка на комментарий
AndrewMor 529 Опубликовано 11 Октября 2016 Поделиться Опубликовано 11 Октября 2016 Мои проблемы продолжаются, правда, немного в другом смысле. Создал смарт, гулаг, все заселил, все стоят/сидят/бродят под своей логикой. Квест на вынос лагеря тоже выдается и сдается. Но пробую респавнить сталкеров на тех же позициях (из секций в олл.спавне) - вот так: 1. В all.spawn в нужную секцию после логики пишу spawn_story_id = 60003 2. В game_spawn_story_ids.ltx прописываю jupiter_valet = 60003 3. Вызываю респавн конструкцией spawn_ids_object("jupiter_valet") function spawn_ids_object(name_object) local ini = ini_file("game_spawn_story_ids.ltx") local spawn_story = ini:r_string("spawn_story_ids",name_object) local section_number = alife():spawn_id(tonumber(spawn_story)) alife():create(section_number)end Респавн идет на ура, все НПС на своих местах, также стоят/сидят/бродят. Но квест на вынос лагеря по новой не выдается. Почему так? (Предполагаю, что численность населения гулага равна 0, но ведь спавн НПС идет из секций олл.спавна, с привязкой к смарту) Сталкер - наше всё! Ссылка на комментарий
Silver Raven 197 Опубликовано 11 Октября 2016 Поделиться Опубликовано 11 Октября 2016 Какого лешего это не работает?: [logic] active = {=get_state_render} ph_idle@check_power_status [ph_idle@check_power_status] on_info = {-lab_x7_power_on} %=turn_off_object% ph_idle@power_on [ph_idle@power_on] on_info = {+lab_x7_power_on} %=turn_on_object% aka Stalker_AleX333 Мои проекты - ЯндексДиск | Я на Gamer-Mods.ru Ссылка на комментарий
AndrewMor 529 Опубликовано 11 Октября 2016 Поделиться Опубликовано 11 Октября 2016 (изменено) Опытным путем выяснил. Для подсчета населения гулага использую конструкцию local pop = xr_gulag.getGulagPopulationComed("jup_kpp") news_manager.send_tip(db.actor, pop, nil, nil, 30000) 1. Стартую НИ, узнаю популяцию - выдает 10, как и должно быть. 2. Беру квест на вынос лагеря, выношу лагерь, сдаю квест, получаю награду. Узнаю популяцию - 0, как и должно быть. 3. Респавню НПС вышеописанным способом. Узнаю популяцию - 10, т.е. все НПС берутся под смарт и занимают свои работы. Квест на вынос того же лагеря по новой не выдается, собсно, почему? upd: Отбой, я просто дундук. Повторный квест выдается спустя игровые сутки Изменено 11 Октября 2016 пользователем AndrewMor 1 Сталкер - наше всё! Ссылка на комментарий
Hadzirim Hajad 5 Опубликовано 12 Октября 2016 Поделиться Опубликовано 12 Октября 2016 Я имел в виду, что означает этот вылет? Expression : m_pItemDataVector->end() == t_itFunction : CXML_IdToIndex::InitInternalFile : e:\stalker\sources\trunk\xr_3da\xrgame\xml_str_id_loader.hLine : 184Description : duplicate item idArguments : agrund_semionov Ссылка на комментарий
mzarkas 50 Опубликовано 12 Октября 2016 Поделиться Опубликовано 12 Октября 2016 (изменено) @Hadzirim Hajad, Id agrund_semionov дублирован в xml файле. Врубай поиск в конфигах и стирай "клонов". Изменено 12 Октября 2016 пользователем mzarkas 1 Мы по аномалиям зону разберём! Сидора повесим, а Бармена убьём! Ну а вояк мы смоем в унитаз! Пускай плывет в канализации спецназ! Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 13 Октября 2016 Поделиться Опубликовано 13 Октября 2016 (изменено) Нужна логика НПЦ, вот такая - НПЦ стоит на месте, никуда не ходит. Но стреляет по врагам. Пробовал множество вариаций кемпера, режим снайпера - мой подопытный либо просто игнорил врага, либо начинал движение и воевал, а требуеться ведь полная его статичность... Может есть у кого данный экземпляр... Изменено 13 Октября 2016 пользователем CRAZY_STALKER666 1 Не соответствует правилам. Ссылка на комментарий
HellRatz 2 893 Опубликовано 13 Октября 2016 Поделиться Опубликовано 13 Октября 2016 но там даже иммунитетов для него нет... veh_btr_u_01 не пробовал покопать? Там есть секция иммунитетов. 1 GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Раритетные моды на моем облаке — на память о былом. Ссылка на комментарий
SkyLoader 53 Опубликовано 13 Октября 2016 Поделиться Опубликовано 13 Октября 2016 (изменено) Как это исправить? Попробуй изменить в конфиге ножа hit_type_2 = wound_2 на hit_type_2 = wound. Этот способ быстрее, так как такие иммунитеты не только у бтра, но и у других машин. Чтобы не править иммунитеты каждой машины, можно изменить только конфиг ножа. Изменено 13 Октября 2016 пользователем SkyLoader 1 Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти