Перейти к контенту

[SoC] Ковыряемся в файлах


Рекомендуемые сообщения

Struck, схема meet используется, чтобы задать реакцию ГГ на НПС, по "русски" она так и называется "схема приветствия". И задать её в качестве активной схемы нельзя! По сути - это движковая схема, используемая НПС автоматически, но разработчики предоставили нам возможность задавать её параметры по нашему усмотрению, что есть очень удобно.

Например, можно сделать, что НПС в одной схеме будет с нами разговаривать, в другой нет, просто изменив параметр use с true на false.

Вот здесь достаточно подробно описано как пользоваться данной схемой: Meet_manager.

Изменено пользователем ColR_iT

ColR_iT, хех ... взглянул в указанную статью "Meet_manager" и вижу рекомендованное:

[meet]

...

victim = 30| nil| 20| actor

use = self

...

Вопрос - к чему приведет это сочетание? :shok:

 

(вопрос риторический и скорее опять возвращает к "читаем мануалы с головою!") :crazy:

 

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 как раз и приводил цитату именно из этой статьи (не указав источника), и которая ввела им написанную логику в ступор ...

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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
      --/

 

  • Неравнодушный сталкер

З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т.

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, если по условиям квеста игрок должен освободить АТП от бандитов, а ты взял и заменил их на наемников (не используй жаргонарий, плз) - то неотключенным квестом и считается - "нет бандитов - квест выполнен". Или меняй все условия квеста под свои изменения или отключай его.

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Прошу помочь обьяснить назначение in и out рестрикторов у нпс.С out вроде бы понятно.При назначении base_out нпс за него не выходит.Нужно для того,что бы нпс удержать в определенной зоне.При назначении dinamic_out при определенных условиях держать\отпустить нпс.А назначение in рестрикторов немного не понимаю.Это наверно в такие типы рестрикторов нпс бегут, как бы цель, и что бы им нельзя было зайти в этот рестриктор или как?Просто немного запуталься.Прошу помочь разобраться в вопросе.

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'а в игре является та же территория арены, за пределы которой ни одна зверушка или поединщик (кроме ГГ) не выходят.

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Доброго времени суток.

У меня такой вопрос - при убийстве одного сталкера ГГ получает инфопоршень. К инфопоршню привязан скрипт по вызову сообщения на экран. А можно ли сделать, чтобы оно приходило с задержкой, например, в минуту времени, а то очень некрасиво выглядит.

Такие дела. - Курт Воннегут.

Дак у меня чистая 1.0004, без каких-либо модов сверху.

Такие дела. - Курт Воннегут.

Принцип поймешь именно там, а чтобы не изобретать велосипед, лучше прямо под него писать используя наработки и учась у авторов - там много инструментария.

Не помню, может спрашивал уже, как вывести отметки сталкеров(желтые, зеленые и красные точки) с миникарты, в ПДА..? Хотя бы подскажите это через скрипт или нет..?

 

Не момню, может и отвечали уже ... Почитай топик и ФАКи, в частности про map_spots_relations.xml. --/Artos

Изменено пользователем ColR_iT

FANAT.gif

Мой канал на ютабчике... / Недельки из жизни фаната STALKER'a / Клуб 'Фанат Отчуждения'

Я нет-нет, а думаю, может я неправильно жил, надо ж брать деньги у богатых и давать их бедным, а таким как ты давать по морде, шоб у мире была красота и гармония.(с)Ликвидация

Всё в порядке, всё нормально, я беру тебя с собой, я беру тебя с собой. В тёмный омут головой.(с)Смысловые Галлюцинации

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, возвращает группировку и ранг НПС, в общем ничего сложного.

Загляни, думаю, тебе станет всё понятно.

Изменено пользователем ColR_iT

ColR_iT, мною где-то сказано про "... файл отвечает за отображение отметок НПС на карте в ПДА"? ...

Основа моей реплики (а не ответа) - отсылка к чтению топика и обращение внимания на файл, который и выводит на миникарту разноцветные точки.

И в любом случае за вывод/отображение любых отметок отвечает движек, xml-ки в данном случае только средство, обечпечивающее эту возможность.

Перенести в КПК отметки друг/враг/нейтрал/труп невозможно без написания собственноо скрипта. Упомянутое тобою - это статичное отображение неписей с учетом их группировок, а не данамическое (видим/невидим/изменил отношение) и т.п. ... Т.о. взяв за основу коды для разноцветных точек и используя самописный скпипт - что-то можно получить и для КПК.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

FANAT Посмотри вот это - http://www.playground.ru/files/s_t_a_l_k_e...obie_chn-56464/

 

Во-первых, принцип абсолютно тот же, что написан выше;

Во-вторых, то что ты предложил, для ЗП и в ТЧ нет того файла, что используется там.

ColR_iT

Изменено пользователем ColR_iT
ЗОНА ДОЛЖНА БЫТЬ НЕПРЕДСКАЗУЕМОЙ !!! НЕТ ТАМ ЛОГИКИ И НЕ НУЖНА ОНА ТАМ !!!

Камрады, наверно уже где-то сделано такое в каком-нибудь моде - если берешь "общественную" собственность лежащую по ящикам и контейнерам на чужих базах и стоянках, то падает репутация.

 

Где бы посмотреть - как?

 

 

Поменял шейдеры на те, которые есть в моде АМК, пересчитал траекторию солнца в погоде (и стандартной и динамической), в результате получается такое:

1323d25bccfct.jpg

e597ace3f4a5t.jpg

 

 

На скринах отчётливо видно неправильное отображение теней. Солнца на небе ещё нет, а тени падают так, как будто солнце расположено как в Сахаре.

 

В чём заключается такая проблема - в шейдерах или это проблема движка?

 

И ещё вопрос - возможно ли при "поворачивании" скайбокса в настройках погоды, повернуть за одно и маленький скайбокс, отвечающий за цветовое отражение объектов под текстуру неба?

извиняюсь если не по теме но боюсь мне больше ни где не помогут вопрос вот в чём-в OGSE для ТЧ есть отличная система сохранений из главного меню хотел адаптировать её для ТТ2 в ui_main_menu.script для OGSE нашёл секцию отвечающую за эти сейвы и заменил ей анолагичную секцию в ui_main_menu.script для ТТ2 при нажатии f8-вылет с таким логом


* Game Администратор_quicksave.sav is successfully saved to file 'c:\documents and settings\all users\documents\stalker-shoc\savedgames\Администратор_quicksave.sav'

FATAL ERROR

[error]Expression : fatal error
[error]Function : CScriptEngine::lua_error
[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
[error]Line : 73
[error]Description : <no expression>
[error]Arguments : LUA error: ...ow of chernobyl\gamedata\scripts\ui_main_menu.script:329: attempt to call global 'AddTextDigit' (a nil value)

может подскажите как правильно воплотить мной задуманное?

 

Рекомендую писать грамотно, используя и заглавные буквы и знаки препинания (о чем говорят правила форума). --/Artos

Изменено пользователем Artos

всё идёт по плану...

DrDen, вылет из-за отсутствия функции AddTextDigit.

function AddTextDigit(str, dig)
    if (dig > 9) then
        str = str .. dig
    else
        str = str .. "0" .. dig
    end
    return str    
end

Добавь её в свой файл главного меню.

Подскажите пожалуйста, в каком файле править начисление очков репутации за различные действия.

Ищу потерянные главы...

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...