Это популярное сообщение. Dennis_Chikin 3 658 Опубликовано 16 Мая 2014 Это популярное сообщение. Поделиться Опубликовано 16 Мая 2014 Ковыряемся в файлах ТЧ Прежде чем писать в тему - внимательно читаем первый пост, и пользуемся поиском. Возможно, ответ на Ваш вопрос уже есть. Касательно телепатии: если Вы передаете Ваши файлы телепатическим путем - ответы будут передаваться тоже телепатически. Если Вы предлагаете угадать, отчего у Вас в подвале происходит странный стук - ответ будет передан стуком. 4 8 6 12 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Struck 61 Опубликовано 18 Марта 2012 Поделиться Опубликовано 18 Марта 2012 ColR_iT, либо я чего-то напортачил, либо self не работает, вылетаю с таким логом: Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...shing\s.t.a.l.k.e.r\gamedata\scripts\xr_logic.script:371: attempt to call field 'set_scheme' (a nil value) [logic] active = walker [walker] path_walk = esc_gopnik_1_walk path_look = esc_gopnik_1_look on_actor_dist_le = 20| remark@infogop [remark@infogop] anim = claim on_info = {-esc_gopnik_talk} %=run_gopnik_dlg% meet [meet] meet_state = 10| {+esc_gopnik_info} threat_fire %=killactor%, claim@ {+esc_gopnik_info} talk_abuse, wait | 5 | claim %+esc_gopnik_info%; wait | 2 | claim;state meet_state_wpn = 10| {+esc_gopnik_info} threat_fire %=killactor%, claim@ {+esc_gopnik_info} talk_abuse, wait victim = 10| actor victim_wpn = 10| actor use = {+esc_gopnik_talk} self, true use_wpn = false function run_gopnik_dlg() if not has_alife_info("esc_gopnik_talk") then db.actor:give_info_portion("esc_gopnik_talk") end end Ссылка на комментарий
ColR_iT 171 Опубликовано 18 Марта 2012 Поделиться Опубликовано 18 Марта 2012 (изменено) Artos, привёл двумя постами выше, вместе с оговоркой. И обрати внимание на вот эту проверку в указанном тобою файле: elseif t == "self" then if not is_talking then db.actor:run_talk_dialog(self.npc) end end А с твоей стороны я не ожидал увидеть в качестве "парирования" по сути колбек на юзание именно игроком НПС, а не сам метод process_use, который определяет параметры use и use_wpn. Я в замешательстве . Изменено 18 Марта 2012 пользователем ColR_iT Ссылка на комментарий
Artos 99 Опубликовано 18 Марта 2012 Поделиться Опубликовано 18 Марта 2012 (изменено) P.S. Теперь вижу. Пока писал и тправлял ответ - этого не было. Однако(!) извини, но в оригинальной схеме ТЧ (SHoC) в патчах 1.0004...1.0006 указанные в твоей оговорке стороки про 'self' ОТСУТСТВУЮТ. Вот полная функция о которой идет речь: -- Функция проверяет не мешает ли персонажу говорить с нами оружие function cannot_talk_by_weapon(npc) local st = db.storage[npc:id()].meet if st then if not isWeapon(db.actor:active_item()) then return false end if st.use then local t = xr_logic.pick_section_from_condlist(db.actor, npc, st.use) if t == "false" then return false end end if st.use_wpn then local t = xr_logic.pick_section_from_condlist(db.actor, npc, st.use_wpn) if t == "false" then return true end end end return false end Ну и само собою разумеется, что добавив в коды нечто свое - можно добиться самых неожиданных результатов, но НЕ нужно их ожидать от исходных кодов! P.P.S. Убедительная просьба, давая кусок кода - уточнять место, откуда код взят и где на него можно взглянуть в контексте. После уточнению тобою поста нашел о чем речь ... и сейчас проанализирую. Изменено 18 Марта 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
ColR_iT 171 Опубликовано 18 Марта 2012 Поделиться Опубликовано 18 Марта 2012 (изменено) Artos, а при чём здесь функция cannot_talk_by_weapon? Загляни в метод process_use, самого класса Cmeet_manager. P.S. Так, а ты точно тот кусочек нашёл? Потому как строчка: elseif t == "self" then в файле встречается единожды... Изменено 18 Марта 2012 пользователем ColR_iT Ссылка на комментарий
Struck 61 Опубликовано 18 Марта 2012 Поделиться Опубликовано 18 Марта 2012 (изменено) так, self значит существует, тогда пошел дальше ковыряться... Изменено 18 Марта 2012 пользователем Struck Ссылка на комментарий
Artos 99 Опубликовано 18 Марта 2012 Поделиться Опубликовано 18 Марта 2012 (изменено) ColR_iT, заглянул. С самого начала и нужно было дать конкретное место ... Да, я не прав, и это ('self') еще одно возможное строковое значение для параметра 'use' и действительно именно это значение открывает диалог с НПС. К сожалению, в исходной схеме, разработчики применили двойное именование стораджа (st.use и a.use), что при проверке на вскидку и привело к пропуску этой возможности. Мда-а-а, и тут разрабы дали возможность для потенциальной дырки, т.к. хотя дефолтно дистанция ограничена 2-мя метрами до актора, но как в случае Struck - он дал victim = 10| actor и попал в ловушку движка ... Собственно инфопоршень то и не обязателен, более важен именно victim = 3| actor который и дает общее разрешение для разговора с актором не дальше чем в 3 метра. Изменено 18 Марта 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
ColR_iT 171 Опубликовано 18 Марта 2012 Поделиться Опубликовано 18 Марта 2012 (изменено) Struck, схема meet используется, чтобы задать реакцию ГГ на НПС, по "русски" она так и называется "схема приветствия". И задать её в качестве активной схемы нельзя! По сути - это движковая схема, используемая НПС автоматически, но разработчики предоставили нам возможность задавать её параметры по нашему усмотрению, что есть очень удобно. Например, можно сделать, что НПС в одной схеме будет с нами разговаривать, в другой нет, просто изменив параметр use с true на false. Вот здесь достаточно подробно описано как пользоваться данной схемой: Meet_manager. Изменено 18 Марта 2012 пользователем ColR_iT Ссылка на комментарий
Artos 99 Опубликовано 18 Марта 2012 Поделиться Опубликовано 18 Марта 2012 (изменено) ColR_iT, хех ... взглянул в указанную статью "Meet_manager" и вижу рекомендованное: [meet] ... victim = 30| nil| 20| actor use = self ... Вопрос - к чему приведет это сочетание? (вопрос риторический и скорее опять возвращает к "читаем мануалы с головою!") P.S. По-хорошему, для использующих 'self' в данную схему стОит внести правку: elseif t == "self" then if not is_talking then -- printf("MM3 %s start talk", self.npc:name()) --/#+# ограничение на принуждение к диалогу: if self.npc:name() == "mon_stalker" then --/ с О-Сознанием разговор 'особый' db.actor:run_talk_dialog(self.npc) elseif self.npc:position():distance_to_sqr(db.actor:position()) < 6 then --/ для остальных не далее ~2.4-x метра. db.actor:run_talk_dialog(self.npc) end --/ end end - это даст и с О-Сознанием побеседовать как ранее, и для остальных окна принудительного диалога будут открываться НЕ далее чем за 2.4 метра до собеседника, исключив подвисания управления актором. И, кстати, Struck как раз и приводил цитату именно из этой статьи (не указав источника), и которая ввела им написанную логику в ступор ... Изменено 19 Марта 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Struck 61 Опубликовано 19 Марта 2012 Поделиться Опубликовано 19 Марта 2012 Artos, в твоем варианте диалог всегда будет начинаться если НПС находится на расстоянии ~3 метров, а не единожды, я вот такую поправку внес, на мой взгляд оптимально, потому что 'эскейпом' такой диалог завершить нельзя. --/#+# ограничение на принуждение к диалогу: if self.npc:name() == "mon_stalker" then --/ с О-Сознанием разговор 'особый' db.actor:run_talk_dialog(self.npc) elseif self.npc:position():distance_to_sqr(db.actor:position()) < 6 then --/ для остальных не далее ~2.4-x метра. if not has_alife_info("run_talk_info") then db.actor:give_info_portion("run_talk_info") db.actor:run_talk_dialog(self.npc) end elseif self.npc:position():distance_to_sqr(db.actor:position()) >6 then db.actor:disable_info_portion("run_talk_info") end --/ Ссылка на комментарий
Priboj37 324 Опубликовано 19 Марта 2012 Поделиться Опубликовано 19 Марта 2012 Зaмeнил нa AТП бaндюков нa нeймов. При стaртовом диaлогe, срaбaтываeт квeст нa зaчистку- выполнeн. Подскaжитe что я пропустил? Дa eщe, иногдa уходят к мосту < Кузю вaлят >. -- Спaсибо зa отвeт. Ссылка на комментарий
Artos 99 Опубликовано 19 Марта 2012 Поделиться Опубликовано 19 Марта 2012 (изменено) Struck, у себя ты можешь городить что угодно, мною же дана правка "для всех", вполне достаточна, и не требует никаких сторонних инфопоршней. И, к твоему сведению, проверка if not is_talking then, имеющаяся в оригинальном коде как раз и занимается "однократностью", т.е. пока диалог не начат - будет проводиться проверка на дальность расстояния, как только диалог начнется - is_talking как раз и исключит излишние проверки. Так что ты у себя "масло масляное" нагородил. Вот еще для закрытия уже открытого окна диалога для случая 'self' и, если НПС уходит от актора по какой-то причине, можно добавить аналогично остальным диалогам: -- проверка по дистанции -- printf("MM2 %s %s", self.npc:name(), tostring(t)) if (is_talking and self.npc:position():distance_to_sqr(db.actor:position()) > 9) and (t ~= "self" or self.npc:name() ~= "mon_stalker") --/#+# добавим проверку для всех 'обычных' НПС then -- printf("MM3 %s stop talk", self.npc:name()) self.npc:stop_talk() end И не мешай разную логику в одну кучу. Если сам даешь для НПС возможность принудительно к актору открыть диалог, то с какого такого условия актор может эскейпом его закрыть? Или вводи в свой диалог такое условие или дай договорить начавшему диалог НПС. Добавлено через 17 мин.: Priboj37, если по условиям квеста игрок должен освободить АТП от бандитов, а ты взял и заменил их на наемников (не используй жаргонарий, плз) - то неотключенным квестом и считается - "нет бандитов - квест выполнен". Или меняй все условия квеста под свои изменения или отключай его. Изменено 19 Марта 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
panzyuza 41 Опубликовано 19 Марта 2012 Поделиться Опубликовано 19 Марта 2012 Прошу помочь обьяснить назначение in и out рестрикторов у нпс.С out вроде бы понятно.При назначении base_out нпс за него не выходит.Нужно для того,что бы нпс удержать в определенной зоне.При назначении dinamic_out при определенных условиях держать\отпустить нпс.А назначение in рестрикторов немного не понимаю.Это наверно в такие типы рестрикторов нпс бегут, как бы цель, и что бы им нельзя было зайти в этот рестриктор или как?Просто немного запуталься.Прошу помочь разобраться в вопросе. AVS_LOCATION_MOD Ссылка на комментарий
Artos 99 Опубликовано 20 Марта 2012 Поделиться Опубликовано 20 Марта 2012 (изменено) panzyuza Во-первых, стОит несколько различать рестриктор (restrictor) от ограничения (restriction). Во-вторых, чем отличается включатель от выключателя? Зачастую, это одно и то же, но для первого основной функцией является включение чего-либо, для второго - выключение, хотя конечно же бывают и только вкл или выкл или без разницы ... Собственно название 'restrictor' => ограничитель - достаточно размытое. В купе с уточнением space_restrictor в игре обозначает некую область/пространство, ограниченное некоторой границей/объемом/площадью. Имеется также понятие/термин restriction - ограничение, и если ограничитель - это некая сущность, то ограничение - это уже действие/свойство. Ну и если принять, например, за space_restrictor комнату в доме, то к этому ограниченному пространству можно применять два типа дополнительных (помимо границ коматы) ограничения - например в нее НЕльзя входить (in) или наоборот - из нее НЕльзя выходить (out). Так что, взяв какой-то рестриктор, тем самым ограничив в пространстве некую зону, и применив к нему некое ограничение - получаем IN- или OUT- зоны, куда или нельзя попадать или нельзя покидать. В итоге (упрощенно): in_restriction - ограничение на вхождение во что-то ... ; in_restrictor - ограниченная в пространстве область с ограничением на вход в эту область; out_restriction - ограничение на выход из чего-то ... ; out_restrictor - ограниченная в пространстве область с ограничением на вЫход из этой области. В игре, in_restrictor'ами являются, например, аномалии и в исходной игре мостры и сталкеры не заходят в них (без причин). Так же можно считать те же костры, куда им заходить не следовало бы, но косяки в кодах не выставляют это ограничение и порою кто-то жариться на угольках ... Ну а ярким примером out_restrictor'а в игре является та же территория арены, за пределы которой ни одна зверушка или поединщик (кроме ГГ) не выходят. Изменено 20 Марта 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
irish_rebel 2 Опубликовано 20 Марта 2012 Поделиться Опубликовано 20 Марта 2012 Доброго времени суток. У меня такой вопрос - при убийстве одного сталкера ГГ получает инфопоршень. К инфопоршню привязан скрипт по вызову сообщения на экран. А можно ли сделать, чтобы оно приходило с задержкой, например, в минуту времени, а то очень некрасиво выглядит. Такие дела. - Курт Воннегут. Ссылка на комментарий
Whisper 29 Опубликовано 20 Марта 2012 Поделиться Опубликовано 20 Марта 2012 В амк есть timer'ы как раз для этой цели, смотри соответствующий скрипт. Ссылка на комментарий
irish_rebel 2 Опубликовано 21 Марта 2012 Поделиться Опубликовано 21 Марта 2012 Дак у меня чистая 1.0004, без каких-либо модов сверху. Такие дела. - Курт Воннегут. Ссылка на комментарий
Whisper 29 Опубликовано 21 Марта 2012 Поделиться Опубликовано 21 Марта 2012 Принцип поймешь именно там, а чтобы не изобретать велосипед, лучше прямо под него писать используя наработки и учась у авторов - там много инструментария. Ссылка на комментарий
FANAT 117 Опубликовано 22 Марта 2012 Поделиться Опубликовано 22 Марта 2012 (изменено) Не помню, может спрашивал уже, как вывести отметки сталкеров(желтые, зеленые и красные точки) с миникарты, в ПДА..? Хотя бы подскажите это через скрипт или нет..? Не момню, может и отвечали уже ... Почитай топик и ФАКи, в частности про map_spots_relations.xml. --/Artos Изменено 22 Марта 2012 пользователем ColR_iT Мой канал на ютабчике... / Недельки из жизни фаната STALKER'a / Клуб 'Фанат Отчуждения' Я нет-нет, а думаю, может я неправильно жил, надо ж брать деньги у богатых и давать их бедным, а таким как ты давать по морде, шоб у мире была красота и гармония.(с)Ликвидация Всё в порядке, всё нормально, я беру тебя с собой, я беру тебя с собой. В тёмный омут головой.(с)Смысловые Галлюцинации Ссылка на комментарий
ColR_iT 171 Опубликовано 22 Марта 2012 Поделиться Опубликовано 22 Марта 2012 (изменено) Artos, этот файл не отвечает за отображение отметок НПС на карте в ПДА, лишь за видимость на миникарте. Возможно ты не до понял.... FANAT, за отображение меток на миникарте отвечает движок. Но! Можно повесить метки на всех НПС разом и метки эти будут видны на карте в ПДА. Есть такая-себе мод-утилита EyeOfChernobyl, за авторством XiaNi. Там отображаются всё население, аномалии, зоны, респавнеры. А сделано всё очень просто: в файле se_stalker.script, в методе on_register, в конце есть вот такие строки: local community, rank = sim_statistic.getNpcType(self) level.map_add_object_spot_ser(self.id, "alife_presentation_"..community, self:name().." "..community) Функция getNpcType из файла sim_statistic, возвращает группировку и ранг НПС, в общем ничего сложного. Загляни, думаю, тебе станет всё понятно. Изменено 22 Марта 2012 пользователем ColR_iT Ссылка на комментарий
Artos 99 Опубликовано 22 Марта 2012 Поделиться Опубликовано 22 Марта 2012 ColR_iT, мною где-то сказано про "... файл отвечает за отображение отметок НПС на карте в ПДА"? ... Основа моей реплики (а не ответа) - отсылка к чтению топика и обращение внимания на файл, который и выводит на миникарту разноцветные точки. И в любом случае за вывод/отображение любых отметок отвечает движек, xml-ки в данном случае только средство, обечпечивающее эту возможность. Перенести в КПК отметки друг/враг/нейтрал/труп невозможно без написания собственноо скрипта. Упомянутое тобою - это статичное отображение неписей с учетом их группировок, а не данамическое (видим/невидим/изменил отношение) и т.п. ... Т.о. взяв за основу коды для разноцветных точек и используя самописный скпипт - что-то можно получить и для КПК. "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти