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

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


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

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

И не нужно просить "дайте... дайте... дайте...". В шапке топика даны ссылки, используй их и поиск и читай-читай-читай. Никто тебе персонально не будет в очередной раз разжевывать то, что уже расписано и объяснено.

(и не нужно плакаться в очередной раз на телефон иль плохой инет... Раз тебе, как плохому танцору, кое-что мешает, то стОит ли вообще заморачиваться с "танцами"?)

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

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

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

Возможно ли сделать так, чтобы непись, бегущий по своему пути через пять точек, НЕ останавливался в каждом из пяти вэйпойнтов? У меня он останавливается, отыгрывается идле и он бежит дальше, к следующей точке. Мне вобще это ни к чему, хотелось бы только обозначить ему нужный маршрут и не более того. Можно, конечно, сослаться на то, что он останавливается, чтобы "вспомнить дорогу" :) , но выглядит в игре это не совсем эстетично, и я бы предпочел, чтобы непись вобще не фиксировал свое пребывание в точке "wp", а просто пробегал её, не останавливаясь.

[zat_romale_walk]
points = p0,p1,p2,p3,p4
p0:name = wp00|a=run
p0:flags = 0x1
p0:position = 22.796680,4.948723,704.976929
p0:game_vertex_id = 3676
p0:level_vertex_id = 991756
p0:links = p1(1)

p1:name = wp01|a=run
p1:flags = 0x2
p1:position = 163.208557,5.658113,513.889709
p1:game_vertex_id = 3687
p1:level_vertex_id = 1245995
p1:links = p2(1)

p2:name = wp02|a=run
p2:flags = 0x3
p2:position = 191.807541,-5.262722,386.180420
p2:game_vertex_id = 3687
p2:level_vertex_id = 1293301
p2:links = p3(1)

p3:name = wp03|a=assault_fire
p3:flags = 0x4
p3:position = -103.554604,23.513506,-446.497192
p3:game_vertex_id = 3678
p3:level_vertex_id = 732872
p3:links = p4(1)

p4:name = wp04|sig=romale_prishli
p4:flags = 0x5
p4:position = -99.976120,22.783346,-467.379425
p4:game_vertex_id = 3678
p4:level_vertex_id = 739969

[zat_romale_look]
points = p0,p1,p2,p3,p4
p0:name = wp00|t=1000
p0:flags = 0x1
p0:position = 191.807541,-5.262722,386.180420
p0:game_vertex_id = 3687
p0:level_vertex_id = 1293301

p1:name = wp01|t=1000
p1:flags = 0x2
p1:position = 191.807541,-5.262722,386.180420
p1:game_vertex_id = 3687
p1:level_vertex_id = 1293301

p2:name = wp02|t=1000
p2:flags = 0x3
p2:position = 187.128510,-4.324630,352.831482
p2:game_vertex_id = 3686
p2:level_vertex_id = 1285575

p3:name = wp03|t=1000
p3:flags = 0x4
p3:position = -83.829704,24.169998,-479.758636
p3:game_vertex_id = 3678
p3:level_vertex_id = 773111

p4:name = wp04
p4:flags = 0x5
p4:position = -83.829704,24.169998,-479.758636
p4:game_vertex_id = 3678
p4:level_vertex_id = 773111

 

[walker]

path_walk = zat_romale_walk

path_look = zat_romale_look

def_state_moving = run

on_signal = romale_prishli|%+zat_romale_have =buusty_dialog.zat_romale_sms1%

on_info = {+zat_romale_have} remark@wait

on_info2 = {+otkryt_ogon_pogg} walker2

danger = danger_ignore@zat_romale

meet = no_meet

 

Да, и еще, не смотря на то, что в схеме указан тип передвижения - "def_state_moving = run", он (мой НПС) добежав до первой же точки и, отыграв секундную idle, переходил на walk, то есть дальше (ко второй точке) шел уже пешком (ну и "задолбаешся, в таком случае, идти за ним через всю локу)))). Пришлось прописывать в каждой точке аниму "run", только в этом случае он стал передвигаться бегом со следущей точки. Поставил ему минимально допустимое значение при проигрывании анимы при остановке - 1 секунда. Но мне бы хотелось, повторюсь, чтобы он совсем не останавливался в этих точках. Это возможно?

====

P.S. И еще в догонку, просто интересно, каков максилальный промежуток времени можно задать в схеме логики по таймеру?

"on_timer = 120000|walker@first" через две минуты произойдет переход в схему "walker@first", а можно, скажем, задать... пол-часа, к примеру?

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

Buusty, советую обновить свои знания по логике, т.к. большинство твоих "непоняток" из-за твоих же ошибок.

 

Во-первых, схема walker'а не знает такого параметра def_state_moving, а считывает параметры def_state_moving1, def_state_moving2, def_state_moving3 - поэтому и переходит твой НПС на дефолтную хотьбу ("patrol").

Во вторых, для мувинга (передвижения) используется не "run", а "patrol","rush" или "sprint", так что не путай параметры для анимаций с параметрами для типов передвижений. Хочется чтобы бежал - ну так и задавай ему "sprint".

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

Ну и наконец, время можно задавать любое, т.к.скрипт обработки логики (xr_logic.script) в данном случае тупо сравнивает заданный интервал (on_timer) с глобальным временем, делая поправку на время активации. Т.е. следует учитывать, что сравнение идет от момента активации текущей секции схемы ... Т.о. если ты задашь полчаса и будешь делать сэйвы - то твои полчаса могут отсчитываться сколь угодно раз и так могут и не закончиться.

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

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

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

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

Точно! Стоило НЕ прописывать "луки", как непись стал пробегать мои точки без какой-либо задержки. То, что надо. :ok5:

Как вроде бы просто.... если знать.))

Хочется чтобы бежал - ну так и задавай ему "sprint".

Но все-таки "sprint", это перебор. Я просто, наверное, не правильно выразился. Нужен был спокойный бег (обычный), в умеренном темпе, иногда, с переходом на непродолжительную ходьбу. А при спринте НПС начал просто удирать от меня, а не сопровождать. :lol: Так что "run" вполне сгодился.

[walker]

path_walk = zat_romale_walk

;path_look = zat_romale_look

def_state_moving1 = run

def_state_moving2 = run

def_state_moving3 = run

;anim = sprint

on_signal = romale_prishli|%+zat_romale_have =buusty_dialog.zat_romale_sms1%

on_info = {+zat_romale_have} remark@wait

on_info2 = {+otkryt_ogon_pogg} walker2

danger = danger_ignore@zat_romale

meet = no_meet

 

И все "как по маслу"! Спасибо. В очередной раз выручил хорошим советом.)))

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

Возможно-ли без ковыряния движка вынести в инвентарь слот с ножом, чтобы его можно было убрать/заменить? А то врезал ножей, а вместо пистолета их не хочется)

  • Нравится 1
  • Не нравится 1

WurDalaK.gif

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

Вурдалак, в конце концов прочти и запомни шапку топика! Для кого в ней написано:

Если вы:

- изучили материалы по ссылкам ниже,

- воспользовались поиском на форуме,

...

но так и не нашли ответ на свой вопрос, задайте его здесь.

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

Если не требуется выносить в инвентарь именно слот - смену ножа (иль др.) можно реализовать правкой секции [inventory], о чем можно также прочитать, если поискать...

Изменено пользователем Artos
  • Нравится 1
  • Не нравится 1

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

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

Добрый вечер! Невозможно использовать предметы в инвентаре в нижней строке

http://i-fotki.info/11/542d537dd720cf1225a7ab0db22d8b49025e7a135153634.jpg.html

на строку выше-используется все нормально,подскажите как исправить нижнюю строку?

Изменено пользователем максгород
  • Нравится 1
  • Не нравится 1

maxgorod.gif

Ссылка на комментарий
P.S. И еще в догонку, просто интересно, каков максилальный промежуток времени можно задать в схеме логики по таймеру?

"on_timer = 120000|walker@first" через две минуты произойдет переход в схему "walker@first", а можно, скажем, задать... пол-часа, к примеру?

Ну и наконец, время можно задавать любое, т.к.скрипт обработки логики (xr_logic.script) в данном случае тупо сравнивает заданный интервал (on_timer) с глобальным временем, делая поправку на время активации. Т.е. следует учитывать, что сравнение идет от момента активации текущей секции схемы ... Т.о. если ты задашь полчаса и будешь делать сэйвы - то твои полчаса могут отсчитываться сколь угодно раз и так могут и не закончиться.

Вот у меня как раз проблемка и нарисовалась.))


[smart_terrains]
none = true

[logic]
active = walker
on_death = death
on_hit = hit@kostylnoga
combat_ignore = combat_ignore@kostylnoga
corpse_detection_enabled = false

[walker]
path_walk = esc_pantera_zadan_soldier_walk
path_look = esc_pantera_zadan_soldier_look
on_death = death
on_hit = hit@kostylnoga
combat_ignore_cond = {-kostylnoga_fire =fighting_actor}
meet = no_meet
on_timer = 10000 | walker1 %=arhara_dialog.dolbannn_sms%

[walker1]
path_walk = esc1_pantera1_zadan1_soldier1_walk
path_look = esc1_pantera1_zadan1_soldier1_look
on_death = death
on_hit = hit@kostylnoga
combat_ignore_cond = {-kostylnoga_fire =fighting_actor}
meet = no_meet
on_actor_dist_le = 5|remark@kostylnoga_wait
corpse_detection_enabled = false

[walker2]
path_walk = esc1_pantera1_zadan1_soldier1_walk
path_look = esc1_pantera1_zadan1_soldier1_look
on_death = death
on_hit = hit@kostylnoga
combat_ignore_cond = {-kostylnoga_fire =fighting_actor}
meet = no_meet

[remark@kostylnoga_wait]
anim = threat
combat_ignore_cond = {-kostylnoga_fire =fighting_actor}
on_hit = hit@kostylnoga
target = actor
snd = kostylnoga_see_actor
meet = meet
on_info = {+kostylnoga_start} remark@kostylnoga_wait2
on_info2 = {+nehochesh_kakhochesh} walker2
;on_actor_dist_ge = 10| walker1

[remark@kostylnoga_wait2]
anim = wait
combat_ignore_cond = {-kostylnoga_fire =fighting_actor}
on_hit = hit@kostylnoga
target = actor
;snd = agr_dont_shoot
meet = meet@kostylnoga
on_info = {+kostylnoga_done} walker2
on_timer = 300000|walker2 %=buusty_dialog.esc_kostylnoga_go_sms%

[combat_ignore@kostylnoga]
combat_ignore_cond = {-kostylnoga_fire =fighting_actor}

[death]
on_info = {=killed_by_actor} %+zadanie2_proval%

[hit@kostylnoga]
on_info = {=hit_by_actor} %+kostylnoga_fire%

[meet]
meet_state = 10| {+kostylnoga_not_enemy} threat
meet_state_wpn = 10| {+kostylnoga_not_enemy} threat
meet_talk_enabled = true
victim = 10| actor
victim_wpn = 10| actor
use = {=dist_to_actor_le(3)} self, true
use_wpn = {=dist_to_actor_le(3)} self, false
;meet_dialog = sak_military_stalker_dialog
precond = visibility

[meet@kostylnoga]
use = true
use_wpn = false
meet_talk_enabled = true

 

Проблема в том, что когда НПС переходит в схему - remark@kostylnoga_wait2, я убегаю от него в оффлайн (так получается, что нужно кое-чего найти и принести ему). Через пять минут он должен перейти в схему "walker2" -

on_timer = 300000|walker2 %=buusty_dialog.esc_kostylnoga_go_sms%

В этой схеме диалог с ним уже не возможен, считай, тоже самое, что и провал задания. Но дело в том, что в оффлайфе время для него останавливается, и игрок сколь угодно может искать нужный предмет (получается, что секундомер для него не работает/остановлен). Захожу в зону а-лайфа к НПС, логика у него переинициализируется, он опять в схеме walker1, снова от него приходит СМСка - walker1 %=arhara_dialog.dolbannn_sms%, потом опять встает в ремарку remark@kostylnoga_wait2, диалог есть, сдача квеста -

on_info = {+kostylnoga_done} walker2

и переход в "walker2", все нормально....

Есть какой-то простой способ (ну, или не очень простой :) ), чтобы "время тикало" для игры? Я бы с удовольствием эту ситуацию исправил.))

P.S. НПС спавнится через алл.спавн, в смарте (как видно из логики) не работает.

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

Buusty

Дык поставь обычный таймер на 5 минут. По окончании его времени выдай инфопорцию.

А уже по ней в логике можешь написать :

on_info = {+эта_самая_инфопорция} walker2

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

Buusty, поправлю, не ты (актор) убегаешь от НПС в оффлайн (актор всегда в онлайне!), а "убегая" от НПС, тем самым он уходит за радиус алайфа и попадает в оффлайн. Т.е. все же лошадь впереди телеги, а не наоборот. ;-)

Ну и очередная подсказка - у тебя линейная логика, которая каждый раз при net_spawn'е НПС тупо воспроизводит одну и ту же последовательность переключения секций.

Теперь у тебя появилось новое условие - "если задание выдано...", вот и усложняй свою логику, превращая ее в ветвистую. Т.е. если не выдано задание - то по "старому", а если уже выдано - то в самом начале (напримар в [walker]) добавь условие перехода на другую ветвь, которая проверит время и перейдет на walker2. .

Вот только тут уже без таймера, который не зависит от он-офф-лайнового состояния твоего НПС уже не обойтись. Т.е. выдав задание (иль что там у тебя в ремарке...) - запускай таймер, он и может служить флагом для ветвления логики и отсчитывать время, по которому добавленная ветвь логики уже будет принудительно переключаться на walker2 и т.д.

 

(вот и Gun12, тезисно успел подсказать :-) )

 

P.S. А может быть, если нет под рукою готового таймера и/или не устраивает перезапускаемый 'on_timer' - написать свой, на базе pstor'а.

При выдаче задания (по началу твоей временнОй паузы) - запоминать в pstor'е НПС текущее время и, написав свою функцию (my_on_time), в которой сравнивать запомненное с текущим, уже и переключаться по окончанию паузы.

Т.е. добавить в секцию ремарка что-то типа: on_info2 = {=my_on_time} walker2

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

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

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

В довесок совета Gun12 и Artos, я бы рекомендовал тебе переходить на walker2 непосредственно инициализируя её этим инфопоршнем, вот так:

[logic]
active = {+эта самая инфопорция} walker2, walker

так при выходе в онлайн, и наличии у игрока инфопорции, НПС сразу перейдёт на схему walker2. Если же инфопорции не будет, НПС преспокойно пойдёт на схему walker.

P.S. Рекомендую давать более внятное название для секции, например: walker@before, walker@after, это существенно облегчает "жизнь".

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

CoIR_iT

О подобном ветвлении и говорил Artos.

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

Поэтому я, например, не рискую прибавлять что-то своё, выходящее за рамки заданного вопроса.

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

Gun12, Artos, ColR_iT - Спасибо за отклик!

Artos

Ну, "запоминать в pstor'е НПС текущее время и, написав свою функцию (my_on_time)" - это для меня высший пилотаж. :) У меня пока все же стадия обучения идет. Собственные функции я еще не умею писать.

 

ColR_iT

"так, при выходе в онлайн, и наличии у игрока инфопорции, НПС сразу перейдёт на схему walker2" - дело в том, что у меня не будет никаких доп. поршней при выходе к НПС в онлайн, только лишь тот, что я выдал в ремарке "remark@kostylnoga_wait" ({+kostylnoga_start}), у меня будут лишь предметы для него, от наличия которых, будет зависить наличие разговора. Переводить его в walker2 нельзя, т.к. в этой схеме с ним не поговоришь (только пристрелить - провал задания).

Artos прав, у меня линейная логика, и при выходе в онлайн к моему объекту, он берет последнюю активную схему - walker1 (с приходом повторной смс-ки). он в ней и находится, и будет находиться, пока актор не приблизится на 5 метров к нему - on_actor_dist_le = 5|remark@kostylnoga_wait, но первую ремарку он не отыгрывает, т.к. есть наличие поршня - {+kostylnoga_start}, и непись сразу встает в эту ремарку, в которой и нужен мне, по идее.))) Нужно лишь дописать в волкере1 вот эту строку - on_info = {+kostylnoga_start} remark@kostylnoga_wait2.

 

===

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

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

Кстати, никто не пробовал вместо on_timer писать on_game_timer? Существенно упрощает жизнь при подсчете времени, ибо время вводится в секундах.

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

_Val_, если это вопрос - ответ достаточно очевидный, если совет - то неуместный.

Подобное не пробуют, а применяют осмысленно, т.е. когда требуется то или иное. Использовать абсолютное время или игровое - это далеко не одно и то же, и одно заменить на другое далеко не всегда можно или "проще". Какая уж тут "простота", если игровое время зависит от тайм-фактора, который в модах нередко 10-ти не кратен... Ну а про подсчет во время сна ГГ, или при "ускоренной перемотке", когда, например, погоду проверяют - хотелось бы посмотреть как ты это "простенько" делаешь. ;-)

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

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

Всё, логику доработал. При попадании моего НПС в зону а-лайф, он стоит в нужной мне ремарке (remark@kostylnoga_wait2), повторной СМС-ки нет, всй отлично.

По таймеру. Воспользовался функцией амк - "amk.start_timer" -

--спавним тайник для Костыльноги
function kostylnoga_nychka()
local obj = alife():create("m_kostylnoga_nychka_box",vector():set(-163.674023,-16.813709,-130.548016),72795,56)
amk.start_timer("esc_kostylnoga_go_sms", 300.0, "")
end

function esc_kostylnoga_go_sms()
news_manager.send_tip(db.actor, "%c[255,160,160,160]".."СЕРЖАНТ КОСТЫЛЬНОГА:".."\\n".."%c[255,255,128,128]Сталкер, можешь уже не торопиться. Больше ждать не могу, пошел на блокпост, лучше 2 наряда вне очереди, чем пойти под трибунал...Диски потом посмотришь на досуге, и ликер можешь сам выжрать!".."".."\n", nil, nil, 30000)
db.actor:give_info_portion("kostylnoga_done")
end

 

Если игрок не успевает за 5 минут найти тайник, то приходит СМС-ка и выдается поршень "kostylnoga_done", который переводит НПС в схему "walker2". И всё бы хорошо, но... смс-ка приходит в любом случае, даже если игрок и успевает отдать диски с ликёром... А это не красиво. Может кто-нибудь поможет написать код для проверки в инвентаре нужных предметов ("leker_beylis"), а также наличия у игрока поршня "kostylnoga_done" (чтобы смс НЕ приходила и после передачи предметов к нпс)? Ну не скриптер я.... :blush:

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

Buusty,

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

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

А уж по проверке наличия того иль иного инфопоршня - вообще глупо просить кого-то, у тебя самого самолюбия вообще что ли нет?

... (мда-а-а, разочарован... :negative: )

 

 

Попробуй пока кто-нибудь из сердобольных не "сжалился над убогим" и сделай желаемое сам, Для самого же будет гораздо полезнее считатьСя не нубом, а именно Модмейкером.

 

 

P.S. А вот по времени - тут как раз не очень удачный пост _Val_'а как раз уместен.

Давать игроку 5-минут реального времени или 50 минут игрового? Наверное тут как раз уместнее задавать именно игровое время (готовый таймер для этого amk.g_start_timer).

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

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

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

Artos, как проверить наличие поршня, а также предметов я, конечно, знаю, но как при этом в одном коде сделать проверку на предметы/поршни, а также заблокировать нужную мне функцию, при наличии оных - нет. Ладно, нет - так нет. Всё равно спасибо за участие в моей проблеме. :)

 

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

 

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

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

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

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

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

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

Войти

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

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

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