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

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

1. Перемещением в слот у меня занимается отдельная функция трансфера. Всё работает.

 

Т.о. заспавнив объект, ты никогда не получишь этот клиентский объект в той же самой функции и в том же самом вызове.

Artos, жаль... И это никак нельзя исправить?

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

Boofer, НИКАК.

Ты спавнишь на сервер и НЕВОЗМОЖНО в тот же миг заставить движек создав объект, инициировать его и единовременно создать его клиентский объект у тебя в игре, да еще чтобы другой гейм-объект в игре воспринял этот объект как "у себя в слоте".

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

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

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

Ссылка на комментарий
Им прописан рестриктор, который обязывает их находиться именно в нем.

Мне приходила в голову подобная мысль, но напрягает то, что в подобных местах они не разбегаются, а мне надо чтобы они туда не заходили.

 

Как вариант, по аналогии: прописать твоим монстрам рестрикторы, в которые они не должны заходить.

Вот как сделать это я и не знаю. Ну, не нашел "отпугивающей" команды.

 

ЗЫ. А ведь в Скадовск мобы тоже не заходят. Может это мой случай?

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

Artos, да нет не приспичило)

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

P.S. На ТЧ.

 

Таймеры уже заезженная тема. Посмотри как это сделано в АМК моде, там есть два таймера: по игровому и реальному времени.

ColR_iT

 

Добавлено через 21 мин.:

В АМК смотрел, по такому же принципу сделать не получилось, увы, поэтому и спрашиваю.

P.S. Вылетает игра и ругается на "pstor".

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

AK74, не ленись ;-) , почитай на "тему" и вместо куцых вопросов может возникнуть немало "идей" ...

Подкину немного "инфы для размышления":

1. В конфигах монстров/сталкеров имеется параметр SpaceRestrictionSection, куда прописаны классы/секции рестрикторов, которые будут "восприниматься" объектом/неписью.

2. Все рестрикторы делятся на несколько типов (см. топик "Справочник по классам и функциям"), нас интересуют с числами 2 и 3, т.е. те, в которых разрешено нахождение (in) и наоборот (out) - это условно.

3. Для всех монстров и сталкеров имеются в их нет-пакетах dynamic_out_restrictions и dynamic_in_restrictions ...

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

 

Есть еще более правильный вариант (но непростой) с заданием параметра terrain в конфиге монстра/сталкера, кторым как раз по всей Зоне иль каждой локации и по различным типам территорий можно разрешать ходить. Для монстров стоит обычно: 255,255,255,255 , т.е. бегать где угодно ... Вот и поэкспериментируй ...

 

 

Добавлено через 8 мин.:

Boofer, топиков/сообщений/статей не тему создания таймеров в сети великое множество.

В самой игре и тем более в модах их (таймеров) также великое множество ... Что мешает посмотреть и взять или написать по аналогии?

Если мод более-менее серьезный, то вероятно нет смысла плодить кучку локальных таймеров и озаботиться сделать нечто типа AMK-таймеров (о которых и упомянул ColR_iT), т.е. общих для различных скриптов таймеров.

Не очень понял все же твоего вопроса про "таймер использования" - если у тебя объект использован (а, как правило, использование однократно) - то он тут же будет удален из игры движком. О каком " чтобы по истечению некоторого времени после использования объект удалялся?" - может тогда идти речь?

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

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

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

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

Artos, нет, у меня объект с анимацией, что-то типа активация артефакта. Только она (активация артефакта) у меня идёт бесконечно, анимация каждый раз повтаряется и повторяется.

А можно ссылку хотя бы на одну статью по созданию таймера?

Извини ... я не справочное бюро и потрудить сам поискать. Ссылки на вики-сайты в шапке топика. --/Artos

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

Даже и не думал сбивать с толку!

Ведь он попросил ЛОГИКУ, я ее и описал, это kamp. НПС созданный скриптом или через all.spawn, без разницы будет при любой логике кроме ремарка иметь точку(точки) прописанные через all.spawn, way...название локации, как вы и показали в своем "код". Саму же логику мы как обычно пропишем в gamedata\config\scripts, -- файл логики название любое.ltx. Я сомневаюсь, что S.T.A.L.K.E.R-DOLG будет задавать логику через функцию\скрипт... хотя кто знает... :)

я делал НПС по статье SCRIPTа и логика была прописана в файле ltx

 

Добавлено через 5 мин.:

[logic]

active = remark1

danger = danger_ignore

 

[danger_ignore]

ignore_distance = 5

 

[remark1]

no_move = true

 

 

что эта за логика ?

Изменено пользователем S.T.A.L.K.E.R-DOLG

Пункт 3.

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

S.T.A.L.K.E.R-DOLG, при такой логике НПС будет действовать следующим образом: изначально его активная схема будет remark1, в которой он будет просто стоять и всё, причем будет игнорировать опасность далее чем 5 метров.

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

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

Вот скрипт старта таймера реального времени. Не мой.

function start_timer(name,delay,action)
    if not delay then
        return false
    end
    
    if not action then
        action = ""
    end

    local time = game.time() --time in seconds since 1970
    local a=1
    while db.storage[db.actor:id()].pstor["rt"..a] do
        a=a+1
        if a>100 then 
            return false 
        end
    end

    save_variable("rt"..a, name)
    save_variable("rt"..a.."d", time+delay*10000)
    save_variable("rt"..a.."p", action)
    
    return true
end

 

После вызова этой функции игра вылетает с логом:

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: ...ing\s.t.a.l.k.e.r\gamedata\scripts\new_script.script:32: attempt to index field 'pstor' (a nil value)

 

Строчку типа while db.storage[db.actor:id()].pstor["rt"..a] do я никогда раньше не видел и даже не представляю что в ней может быть не так.

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

Подскажите, как сделать так чтобы на ГГ при обыске тайника нападали враги.

(тесть чтобы спавн врагов происходил во время обыска тайника)

Заранее благодарен.

 

 

 

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

Boofer, смею сделать предположение о том, что 'свои' скрипты ты не создаешь, а пользуешься копипастами из игры/модов ...

Советую почитать мануал по Lua и собственно вообще: что такое переменная, аргументы, переменнные и пр.

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

 

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

Строка while db.storage[db.actor:id()].pstor["rt"..a] do как раз совершенно понятна и корректна, нужно всего лишь уметь читать, а не гадать ...

Задан цикл while, в условии которого проверяется наличие у гейм-объекта актора (db.actor) в его pstor'е поля с именем "rt"..a, где а = 1...100.

Если тебе непонятна эта строка, то ... или стОит под'учиь Lua, или не заморачиваться над написаниями своих скриптов/функций, а брать/просить кого-то писать тебе желаемое.

Тем более далее также и save_variable встречается тебе неведомое, да еще и с неба свалившиеся name,delay,action ...

 

P.S. И уж если у тебя ругается лог на отсутствие поля pstor в сторадже актора - то это говорит или о вызове функции ДО создания гейм-объекта актора (?) т.е. на самом старте игры, или о неправильном вообще функционировании кодов в игре.

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

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

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

S.T.A.L.K.E.R-DOLG

Не морочь голову, скачай программу ACDC menu2.2 для ТЧ и работай без батников и всего остального, проще будет, там менюшка есть ничего сложного...

Предвижу появление у тебя еще кучи вопросов, поэтому заранее скажу, схема ремарк не используется полноценно в игре во время боевых сценок например или нападения мутантов, и т. д. по сути она является переходным этапом между др. схемами например в квестах!!! Ну торговца можно на ее основе создать, не более того. Сама схема нужная и необходимая, но не основная!!! Чаще других используется walker и надо сказать оправданно.

 

walker
...
remark -- подошел ГГ поговорил послушал чего нибудь...
...
camper
... и т. д.

Не стоит рассматривать туторы как руководство к действию, раз уж ты захотел что то замутить, то почитай внимательно о том что ты хочешь сделать, например о тех же файлах логики!!!

 

 

Добавлено через 18 мин.:

Wik

А через рестриктор не подойдет???

[logic]
active = sr_idle

[sr_idle]
on_actor_inside = {+new_restriktor} sr_idle@gigi %=play_snd(characters_voice\путь к звуковому файлу)%

[sr_idle@gigi]
on_timer = 5000 | nil  %=название_файла%

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

Единственное замечание, функция спавна должна находиться в файле xr.effects.scripts. После всего этого рестриктор отключается, т. е. срабатывает одноразово!!! Можно и другое что нибудь придумать, например переключать секции по другим событиям, по необходимости...

Если совсем просто, то выглядеть будет так:

[logic]
active = sr_idle

[sr_idle]
on_actor_inside = nil %=название функции%

В этом случае, при входе в рестриктор сработает функция %=...%, а затем рестриктор отключится.

 

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

Жизнь следует измерять поступками, а не временем...

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

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

1. Если вопрос явно не по теме, то и не следует поддерживать оффтопик, даже из благих намерений.

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

Ведь не зря же мною был назван топик о универсальному ACDC, где и далее можно решать вопросы по рас(за)паковке спавна на 'сегодняшнем' уровне, а не позавчерашнем.

3. Отвечать не на "свой" вопрос, а на заданный! Wik, справшивает про ситуацию "при/во время обыска тайника", а ты ему про рестриктор грузишь ... Можно и пяткой чесать за ухом, но не советовать это делать другим. ;-)

4. Высказывая некую категоричность, не следует слишком обобщать, не оговаривая условия/исключения.

"функция спавна должна находиться в файле xr.effects.scripts" - справедливо только для оригинальной игры и ей аналогичных модов. И тут в топике совсем недавно говорилось о расширителе, и во многих модах давно такая обязательность исключена. Да и собственно не обязательно саму "частную/тяжелую" функцию совать в штатные скрипты - достаточно сделать редирект.

 

ТщательнЕе, плз, в ответах.

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

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

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

К сожаления я ничего не понял, а если прописать активацию НПС в логику тайника,

как например прописывается активация НПС в диалог.

 

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

Wik, фраза становится понятна только тогда, когда понятны слова из котрых складывается фраза.

А вот, употребляя слова, смысл которых тебе непонятен - твой вопрос вызывает улыбку. :-)

Не тайник или его логика должны "активировать" какого-то НПС. Актор, обыскивая тайник (юзая/используя его), может активировать логику использования тайника (схема ph_idle), которая и может выдавать коллбэк, по которому можно активировать в нужное время твою функцию спавна.

См. в схеме "ph_idle" коллбэк "use_callback" ...

 

А уж про активацию НПС в диалоге - это уже из-какой-то иной оперы, а не из игры.

Уже появление надписи с предложением вступить в диалог по <F> - является следствием активности НПС к диалогу, а уж само нажатие (F) - тем более является активизацией всех доступных диалогов для уже активного собеседника ...

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

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

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

Строгое предупреждение от модератора ColR_iT
Надоело! Трое суток чтения.

Может всё таки до тебя дойдёт, что ты не в ту тему вопросы задаешь! Тебе ясно написали, что тебе нужно сюда: "Universal ACDC и другие perl-скрипты" и вопросы нужно задавать там, а то и того лучше в теме нужного тебе мода.

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

Пункт 3.

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

Создал отряд военных, заспавнил их, прописал им логику:

[logic]
active = remark1
danger = danger_ignore

[danger_ignore]
ignore_distance = 5

[remark1]
no_move = true

По идеи он должен стоять на месте, но в игре он всё равно гуляет свободно по зоне. Как это исправить, помоги пожалуйста.

 

Покажи секцию спавна полностью (под спойлером).

ColR_iT

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

Не соответствует правилам.

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

[military_camp_npc_1]:stalker

$spawn = "respawn\military_camp_npc_1"

character_profile = military_camp_npc_1

spec_rank = master

community = army

custom_data = scripts\escape\esc_military_camp_npc_logic_1.ltx

 

 

 

С этим разобрался, спасибо losiara за помощь.

 

Такая беда еще, спавн осуществляю через скрипт

function start_add_spawn()--\\

--\\

--

spawn_military_camp_npc_1()

spawn_military_camp_npc_2()

spawn_military_camp_npc_3()

spawn_military_camp_npc_4()

end

 

function spawn_military_camp_npc_1()

local x= -158.419006

local y= -30.450201

local z= -348.824280

local level_vertex= 92764

local game_vertex_id= 1026

alife():create("military_camp_npc_1",vector():set(x,y,z),level_vertex,game_vertex_id)

end

 

function spawn_military_camp_npc_2()

local x= -151.983821

local y= -30.513784

local z= -348.483551

local level_vertex= 100292

local game_vertex_id= 1026

alife():create("military_camp_npc_1",vector():set(x,y,z),level_vertex,game_vertex_id)

end

 

function spawn_military_camp_npc_3()

local x= -168.470001

local y= -25.435743

local z= -354.477600

local level_vertex= 80827

local game_vertex_id= 1021

alife():create("military_camp_npc_1",vector():set(x,y,z),level_vertex,game_vertex_id)

end

 

function spawn_military_camp_npc_4()

local x= -156.043976

local y= -30.033550

local z= -360.914581

local level_vertex= 95263

local game_vertex_id= 1026

alife():create("military_camp_npc_1",vector():set(x,y,z),level_vertex,game_vertex_id)

end

 

function save_variable(variable_name, value)

xr_logic.pstor_store(db.actor, variable_name, value)

end

function load_variable(variable_name, value_if_not_found)

return xr_logic.pstor_retrieve(db.actor, variable_name, value_if_not_found)

end

 

 

 

Проблема вот в чем, три нпс на охране лагеря, четвертый снайпер на башне. Снайпер (spawn_military_camp_npc_3) да и сами нпс спавнятся, так сказать они меняются координатами что ли, вообщем снайпер появляется то на башне (там где он должен быть), то на месте нпс_1, то на месте нпс_2 или нпс_4. Вот так кто где, постоянно меняются местами при запуске игры.

Так вот, это проблема в скрипте?

Работаю на ЗП 1.6.02.

 

Добавлено через 17 мин.:

if spawn_escape.load_variable("spawn_military_camp_npc",false)==false then

spawn_escape.start_add_spawn()

spawn_escape.save_variable("spawn_military_camp_npc",true)

end

 

 

 

Также спавняться, то два снайпера и два рядовых, то так то сяк :huh: вообще непонятно :wacko:

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

Не соответствует правилам.

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

Всем добрый вечер!

Возник вопрос относительно логики гулагов

 

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

может занять данную работу. Например:

predicate = function(obj) 
         return obj:profile_name() == "soldier_commander”            
end

то есть данную работу сможет выполнять лишь персонаж с профилем soldier_commander.

 

Куда конкретно надо вставить данную функцию. Файл gulag_название_локации.scripts -... А в самом файле в какое место???

Заранее благодарю!!!

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

Жизнь следует измерять поступками, а не временем...

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

losiara.

Вот тебе на примере логики Волка из гулага esc_lager:

-- Волк, собственной персоной.
t = { section = "logic@esc_lager_volk",
    idle = 0,
    prior = 16, state = {0,1},
    in_rest = "", out_rest = "esc_lager_guard_kill_zone",
    predicate = function(obj_info)
                    return obj_info.profile_name == "esc_wolf"
                end
}

здесь видно, что в качестве предусловия на данную работу стоит проверка, что имя профиля esc_wolf. Обрати внимание, что предусловие происходит безымянной функцией, хотя правильно это называется функтор. obj_info - это объект класса game_object, таким образом можно сделать проверки различного рода, например кого-нибудь у кого денег будет больше какой-либо суммы, либо НПС с определенным рангом:

-- проверка на деньги
function(obj_info)
    return obj_info.money > 5000 
end
-- проверка на ранг
function(obj_info)
    return obj_info.character_rank > 600 -- если не ошибаюсь, то это ветеран, мастер > 900
end

В принципе всё зависит от фантазии. :)

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

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

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

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

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

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

Войти

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

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

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