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

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


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

Artos, Да вот пытаюсь адаптировать "собирательство" в LWToD. В modules.script, xr_logic.script, и xr_motivator.script ссылки на watcher_act.script вставил, но НПС не хотят ни чего поднимать. Поэтому я и подумал, что это от чего-то ещё зависит. Изменено пользователем zhrec

Народная солянка от 19.04.10

SGM 2.2

Тайные Тропы 2

Ссылка на комментарий

Чем открыть, распаковать или изменить файл section2.bin, который появляется при распаковке all.spawn?

И ещё вопрос: как добавить переход между уровнями, если у меня имеется только 1 точка, а 2ю нет возможности измерить?

Ссылка на комментарий
User_X.A.R26, ну так найди возможно измерить вторые координаты

S.T.A.L.K.E.R 1.004, Народная..Солянка от 19.04.10, дополнение 14.08.10, патч 3.09.10, DMX 1.3.5, Saruman addon 1.1

Vkontakte

Добавление нового транспорта в сталкер

Ссылка на комментарий
Saruman, я просто пытаюсь прикрутить одну карту к ТЧ, но не знаю как совместить game.graph и all.spawn этой карты. Карта называется dark_forest, взял в раритетах. В принципе карта уже есть в игре (отображается на глобальной карте), но вот как сделать переход не знаю Изменено пользователем User_X.A.R26
Ссылка на комментарий

Нужен рюкзак из AMK 1.4.1 для вставки его в OGSM - Arsenal Edition для ТЧ. Что откуда брать, куда перемещать? В наличии обе папки gamedata от 1 и 2 модов. Заранее благодарю за помощь.

Ссылка на комментарий

 

Делаю walker'a с переходом в meet.

Проблема в строке

 

use = true

 

Если ставлю use = true, то все работает нормально, если же ставлю use = {-info} self, true, то напрочь отключается управление.(с помощью demo_record'a увидел, что у НПС логика работает)

 

Вот полная логика моего персонажа:

 

[logic]
active = walker

[walker]
path_walk  = esc_gopnik_1_walk
path_look  = esc_gopnik_1_look
meet = 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            = true;use = {-info} self, true
use_wpn        = false

 

 

 

Писал логику с опорой на этот мануал:

Сталкер завидя нас просит убрать оружие. После этого подходит и заговаривает с нами. Если мы начинаем уходить от него или достаем оружие – начинает нас стрелять.

 

[meet]
meet_state        = 50| {+info} threat_fire %=killactor%, walk@ {+info} talk_abuse, wait | 10 | walk %+info%; wait | 2 | threat;state
meet_state_wpn     = 50| {+info} threat_fire %=killactor%, threat@ {+info} talk_abuse, wait
victim             = 50| actor
victim_wpn         = 50| actor
use            = {-info2} self, false
use_wpn        = false

 

Здесь: info – инфоропшн, который указывает что мы уже опустили оружие и были достаточно близко к НПС

Info2 – инфопоршн, который устанавливается в диалоге и говорит что персонаж уже сказал нам все, что хотел.

Killactor – функция в xr_effects которая обижает НПС на игрока.

 

 

 

Ссылка на комментарий

Struck

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

2. Акторы многих мануалов к игре - нередко допускают оЧепятки/ошибки, недомолвки и т.п. , поэтому следует перепроверять написанное, а не слепо копировать и вопрошать.

 

Ты уперся в упомянутую строку: use = {-info} self, true

Ответь попробуй себе и нам, а что за 'info' и что за 'self' именно в твоем случае?

Приведи коды для 'info' и 'self', которые после чтения твоего конфига логики должны функционировать в игре!

Если затррудняешься ответить - то это значит:

Ты просто скопировал из мануала шаблонные строки и не потрудился даже подумать, что нет такого у тебя инфопоршня 'info' при отсутствии которого должно быть выполнено нечто загадочное -> 'self'. Вот не понимая твое 'self' схема и впадает в ступор ...

 

Неясно, что в мануале подразумевалось автором под use = {-info2} self, false, и вероятно это опечатка ... Тут по смыслу должно быть 'true'.

Т.е. use = {-info2} true, false - и читаться так: Разговор возможен если нет инфопоршня.

 

В твоем же конкретном случае очевидно двойное true достаточно бессмысленно и или вообще не нужно разделять на условия или самостоятельно подумай как должно у тебя быть.

 

 

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

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

Ссылка на комментарий

Artos, 'info' у меня есть, я понимаю как это читается, синтаксис логики вроде потихоньку понимать начинаю.

 

Ответь попробуй себе и нам, а что за 'info' и что за 'self' именно в твоем случае?

use = {-info} self, true - я понимаю это так, что НПС подходит и юзает(в мануале это - 'self') актора, в диалоге выдается этот 'info', далее уже можно юзать его(НПС).

 

Но если убрать(заменить на true) 'self', то получается уже актор должен юзать НПС, а не наоборот...если это опечатка и 'self' в данном случае(или вообще) не работает.

Ссылка на комментарий

Struck, мда-а-а, как же все запущено ...

1. Если у тебя есть (создан тобою) инфопоршень 'info' - то советую его переименовать на нечто более семантически "читаемои и понимаемое".

- во-первых, если собираешься не только одну-две подобных логики делать, то запутаться в разных info1/info2/infoN - запросто и самому.

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

- ну и, самому более понятен будет типа: 'esc_gopnik_use_info'? т.к. название инфопоршня подсказыает и для кого и для чего.

2. Полностью неправильное понимание назначения и испльзование параметра 'use' для схемы.

{-info} - это условие, по которому параметр (use - возможен ли разговор) примет значение указанное за условием. В твоем случае это нечто 'self' - ну и какое булево значение (true или false) должен принять параметр 'use', прочтя твое 'self'?

Сорри, но выше уже разъяснил вроде как дальше некуда и какая строка должна быть и как она читается:

use = {-info2} true, false - и читаться так: Разговор возможен если нет инфопоршня.
Ну если тебе твои погадалки понятнее - то сорри, каков же ответ ты ждешь?

Нужно читат и понимать написанное, а не слепо копировать (в том числе и ошибку!) и не понимая что же написано, продолжать задаваться вопросом почему же не работает. Учись НЕ копипастить и разгребать свои и чужие ошибки, а учись писать именно логику, т.е. руководство скриптам что/когда/как делать. Метод тыка в таком деле не помощник, а напрасная трата времени.

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

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

Ссылка на комментарий

Artos, ладно, с этим разобрался, как тогда заставить его первого начать диалог?...именно не meet_dialog прописать, а чтобы он сам юзнул актора.

 

Сорри, но выше уже разъяснил вроде как дальше некуда и какая строка должна быть и как она читается:

 

Это я уже и из мануала понял, что если инфопоршня нет, то говорим, а мне надо именно чтобы НПС сам юзнул актора.

Ссылка на комментарий

Ну а при чем тут штатая логика? Штатная схема тебе устанавлявает/определяет условия для разговора, а не командует говорить иль нет.

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

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

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

Ссылка на комментарий

А какая схема командует говорить или нет?...это я в принципе и хотел узнать, т.к. в ТЧ подходящих примеров я не помню...а поскольку и мануалы 'криво' пишут как ты говоришь, то смотреть надо только по готовым рабочим(!) примерам.

Изменено пользователем Struck
Ссылка на комментарий

Struck, хотя я и коворю, что во многих мануалах имеются и ошибки и др.неточности, но никогда не говорил и не скажу, что их не нужно читать, особенно когда в голове на эту тему пусто! Но читая - нужно работать головою(!), но не долбить ею "стену", беря все огульно за истину.

С твоим же подходом "или все или ничего" - так и не наберешь готовых рабочих примеров, да и то, тебе их тоже похоже кто-то должен приподнести на блюдечке. ;-)

 

Что мешает, воспользовавшись ссылками из шапки заглядывать на вики-сайты и читать хотя бы общие материалы и их применять ксвоим текущим задачам?

Если бы не банальная лень, то на инсайде давно бы почитал хотя бы вот отсюда:

Описание класса game object. Часть V.. вот это:

function run_talk_dialog(game_object*)

void run_talk_dialog(game_object* pToWho)

 

запускает диалог между актором и объектом pToWho. Тот объект должен наследовать от класса CInventoryOwner. Разговор можно начать только если собеседник находится на расстоянии не больше трёх метров от актора. Если точнее, то можно попытаться вызвать её и на больших расстояниях. Что-то при этом происходит: появляется мышь, отключается движение актора и он начинает смотреть на "собеседника" даже при том, что окна разговора нет. Такое ощущение, что просто безбожно глючит. Проверка допустимого расстояния перед началом остаётся таким образом на совести скриптёра. Расстояние в 3 метра никакими настройками не изменить, похоже вшито прямо в код движка. Другой момент. Данная функция только открывает диалог разговора. Если не делать ничего дополнительно, то непись "разговаривая" пойдёт себе дальше, и как только выйдет за три метра - разговор прервётся. В игре непись удерживается от убегания специальной скриптовой схемой, которая заставляет его стоять на месте, смотреть на актора, может ещё анимации проигрывать, точно не знаю. Параметр need_osoznanie_mode в секции персонажа позволяет избежать ограничения в 3 метра на возможность начать разговор. Однако при этом окно разговора показывается не полностью. Отсутствуют окна с иконками собеседников и окно чата. Есть только нижняя часть - окно выбора варианта ответа или диалога. Фактически, это превращает окно общения в своеобразное диалоговое окно для выбора одного из нескольких вариантов. Это используется в игре для предоставления Меченому выбора - присоединяться к О-Сознанию или нет. В принципе ничто не мешает использовать это как-то иначе.

Написано K.D. 17:35, 19 декабря 2011 (UTC) по материалам malandrinus, материалам форума АМК и собственным изысканиям.

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

Ну а по большому - то и самостоятеьные поиски по кодам и проверки найденного - далеко не самое НЕ интересное в моддинге.

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

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

Ссылка на комментарий

А, теперь ясно почему у меня управление отключалось, значит надо оставить эту строку в виде use = boolean, и дописать условие на расстояние в метрах и там вызывать уже run_talk_dialog?

 

Тогда последний вопрос чтобы 'погадалками' не заниматься, поддерживает ли meet on_actor_dist_le.

Ссылка на комментарий

Struck, извини, но ... вспоминая диалоги на СП, опять понимаю, что ты предпочитаешь "думать и гадать" в топике, а не подумав и поняв делать иль переспрашивать.

Даже читая написанное, ты умудряешься трактовать так, что другой бы и не смог ... :shok:

Твоя блокировка управления происходила из-за ОШИБКИ значения для 'use' (т.е. из-за self, вместо true/false). А прочитанное тобою из процитированного - относится к отданной скриптом команде на начало разговора, чего у тебя не было(!) и чего следует избегать.

Дописывать же "условие на расстояние" нужно НЕ в схему (в ней и нет этого), а для отдачи тобою команды начала диалога из твоего скрипта.

И прекрашаю суфлерство, переадресуй свой вопрос о on_actor_dist_le для meet в статьи по логическим схемам. :rtfm:

Пока ты сам(!) не начитаешь знаний и не переваришь хотя бы часть их - наш диалог превращен в суфлерство.

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

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

Ссылка на комментарий
Artos, а кто сказал, что для параметра use, в схеме meet, допустимы только два параметра!? self прекрасно работает, при всём при этом действительно "принуждает" НПС открыть окно диалога с актором, без помощи игрока. Используется этот случай в чистом ТЧ лишь единожды, а именно в логике объекта mon_stalker (m_osoznanie). Правда лично я бы всё же не стал им злоупотреблять, поскольку при его использовании, в случае, когда актор находится от НПС на дистанции большей нежели возможен диалог, то управление для ГГ попросту отключается, не всё конечно, но сдвинуться с места не представляется возможным (функция level.enable_input() в данном случае, не поможет).
Ссылка на комментарий

Мои потуги привели к такому вылету:

 

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: ...g\s.t.a.l.k.e.r\gamedata\scripts\bind_stalker.script:170: C stack overflow

 

 

Происходит на расстоянии ~3-ёх метров как раз

 

Функция:

function run_gopnik_dlg()
local obj = alife():story_object(10003).id
if obj then
db.actor:run_talk_dialog(obj)
end
end

 

Строчка в логике:

use            = %=run_gopnik_dlg% false, true

Ссылка на комментарий

Struck, если тебе нужно смоделировать ситуацию, где НПС должен начать разговор, то можно воспользоваться значением self, для параметра use, но только очень осторожно! Последствия тебе уже известны, стоишь на месте и можешь только крутиться.

Так вот... Я использовал для теста, вот такую логику:

[logic]
active = walker@wolf_stande

[walker@wolf_stande]
path_walk = wolf_walk
path_look = wolf_look
meet = meet@wolf

[meet@wolf]
meet_state    = 5|hands_up
meet_state_wpn    = 5|hands_up
victim        = 20|actor
victim_wpn    = 20|actor
use        = {+info_test_self_use}self
use_wpn        = false

И действительно при наличии инфопорции info_test_self_use, Волк (опыт проходил на нём) начинал разговор первым. НО! Выдать эту инфопорцию необходимо в непосредственной близости, с оппонентом (методы разные: проверяй дистанцию, ставь перед ним рестриктор и т.д.), а уже в конце диалога удаляй данный инфопоршень при помощи тега:

<disable_info>info_test_self_use</disable_info>

И всё будет хорошо! :)

Изменено пользователем ColR_iT
Ссылка на комментарий

ColR_iT, все ясно, спасибо, инфопоршень можно и через remark выдать в принципе.

 

"Спасибо" пишем в личку. А метод выдачи инфопорции выбирать тебе, главное, чтобы не далеко от оппонента.

ColR_iT

Изменено пользователем ColR_iT
Ссылка на комментарий
ColR_iT: а кто сказал, что для параметра use, в схеме meet, допустимы только два параметра!?
Не ожидал от тебя подобного вопроса. Давай попробуем разобраться, может и я где-то ошибаюсь ...

(предваряя: о значениях true/false было сказано именнно в контексте вопроса, а не для всего и вся)

1. Как схема читает свои параметры? - смотрим в xr_meet.script:

st.[b]use[/b] = xr_logic.parse_condlist(npc, section, "[b]use[/b]", utils.cfg_get_string(ini, section, "[b]use[/b]", npc, false, "", def.use))

- т.е. вначале читается как стринг и он передается в xr_logic.parse_condlist.

2. Что нам выдаст parse_condlist?

Он выдаст таблицу, в которой могут быть условные инфопоршни, секции для переключения и т.п. Т.е. все то, что может применяться для переключения схем.

3. Смотрим в схеме, где же применяется полученный параметр st.use? Да всего в одном месте, в function cannot_talk_by_weapon(npc) ...

которая вернет булево значение, разрешающее разговор иль нет. В этой функции st.use отправляется в xr_logic.pick_section_from_condlist, откуда приходит только булево значение.

...

Т.о. мне совершенно не хочется искать конкретное место в parse_condlist или pick_section_from_condlist, которрые как-то по странному прочитают строчное 'self' и превратят во внутреннюю ссылку на собственно класс схемы(???), но в любом случае это НЕ может привести ни к чему чтобы напоминало принудительное открытие диалога неписем.

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

И, плз, не будь голословным и подтверди свои слова:

ColR_iT: self прекрасно работает
кодом или конкретным примером. Изменено пользователем ColR_iT

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

Ссылка на комментарий

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

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

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

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

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

Войти

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

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

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