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

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

ColR_iT,

За инфу спасибо, но когда из нее будут "вылезать" НПС?

 

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

Ой, тоесть через сколько?

 

Почитай вот эту статью: Respawn ColR_iT

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

А зачем в коде выбрасывания предмета создавать дубликат, чтобы "задержку" сделать что ле?

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

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

 

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

И извиняюсь, забыл дописать, мой вопрос по ТЧ.

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

*Shoker*

Чтобы предмет не вернулся в слот.

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

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

Ulman

В каждой из этих схем (их две), в скрипте нужно где нить прописать своего НПС. Где и как именно - нужно смотреть сам скрипт, как его сделал автор.

 

Kirag

Понятно, спасибо :)

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

Ulman, если для "лечения" NPC используется т.н АИ-пак xStream'a (а скорее всего, так оно и есть), то в самом начале файла xrs_medic.script можно обнаружить табличку по имени excluded_npcs. Вот в неё и нужно заносить имена NPC, которых будут игнорировать NPC-"медики" - там, кстати, уже указаны несколько "беспомощных товарищей", так что разберёшься.

Что касается исключений для обыска, тут сложнее, т.к. автор (кто забыл - Red75, файл watcher_act.script) отчего-то не предусмотрел такой возможности (зато изначально есть возможность определить тех, кто мародёрствовать не станет ;)), но добавить условие по "отсеиваию" имён (или по story_id, например, или по названию группировки и т.д. и т.п.) совсем несложно.

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

=VENOM=, спасибо большое, а то как то мимо пропустил таблицу.

Disord, я тоже разбирался с этой переменной, туда вроде бы группировку вписывать надо?

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

Как сделать, чтоб при попадании гг в определенную точку, активирывалась функция?(и чтоб при следуйщих попаданиях функция не вызывалась, т.е. куда писать инфпоршень)

И еще , как вызвать функцию при получение гг какого-нибудь предмета?

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

Prozone97,

первое - через спейс рестриктор в оллспавне. С логикой вида (примерно):

[logic]

active = ph_idle

 

[ph_idle]

on_actor_inside = give_info

...

END

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

Всем привет. Нужен ваш совет. Вот, например, у меня есть условие в функции:

if db.actor:health > 0.1 and db.actor:health < 0.2 or db.actor:health > 0.5 and db.actor:health < 0.6 then .......

Я правильно понимаю, функция будет выполнятся при условии, если у гг здоровье будет, к примеру, 0.15 или 0.55, так?

Просто мне надо, чтоб выполнялось или это db.actor:health > 0.1 and db.actor:health < 0.2 условие, или это db.actor:health > 0.5 and db.actor:health < 0.6.

Ведь можно посчитать, что должно выполняться 3 условия: db.actor:health > 0.1, db.actor:health < 0.2 or db.actor:health > 0.5, и db.actor:health < 0.6...

Жду ли я Сталкер 2? Хм...
Ссылка на комментарий

Prozone97

А без него скриптами ещё лучше:D

 

PavelSnork

Почти так, тока ещё будут учитываться и 0.11, 0.12, 0.13 ...

А вообще подробней опиши, как тебе надо.

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

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

Для Prozone97

Капрал Хикс, позволь тебя поправить, хотя даже не поправить, а дополнить.

Чтобы рестриктор больше не проверял наличие в нем актора, нужно поставить перед выдачей инфопоршна nil, вот так:

[logic]
active = sr_idle
[sr_idle]
on_actor_inside = nil %+if_actor_inside%

вместо выдачи инфопоршна (%+if_actor_inside%), можно выполнить функцию:

[sr_idle]
on_actor_inside = nil %=if_actor_inside%

функция if_actor_inside должна находиться в файле xr_effects.script.

Можно конечно произвести проверку и скриптово, но это сложнее и проверка будет выполняться всегда (хотя действие выполнится один раз), поскольку вызов функции придется вешать на апдейт актора.

 

Что касаеться выполнения функции при получении какого либо предмета. Приблизительно так:

В файле bind_stalker.script найти вот такую функцию function actor_binder:on_item_take (obj) и дописать в нее проверку, по такому типу:

if obj:section() == "obj_section" and db.actor:dont_has_info("condition_info") then
    -- action
    db.actor:give_info_portion("condition_info")
end

где:

obj_section - имя секции проверяемого предмета (например для АК-74 это wpn_ak74. Имя секции смотрим в конфиге предмета).

action - вызов твоей функции.

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

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

Оговорочка: это будет происходить, если актор подберет предмет сам (с земли, с ящика и т.д.), при трансфере, другими словами, при передачи предмета от кого-то к актору - это не сработает.

Чтобы впринципе проверить наличие предмета в инвенторе, можно сделать так:

function check_actor_inventory ()
    actor = db.actor
    if actor and actor:object("item_section")  ~= nil then
        -- action
    end
end

здесь:

item_section - имя секции проверяемого предмета

action - действия если предмет есть.

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

PavelSnork

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

if (db.actor:health > 0.1 and db.actor:health < 0.2) or (db.actor:health > 0.5 and db.actor:health) < 0.6 then

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

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

Disord, я уже отписал, что изначально в схеме можно указывать тех, кто не будет работать под схемой "мародёры" (то есть не будет обшаривать трупы). Это и есть пресловутая переменная "zombi". Не веришь - обрати внимание, там прописаны как раз зомбированные, а они, в свою очередь, как раз мародёрством не занимаются :). Ну, это, конечно, исправить можно, если только у всех моделек зомбированных сталкеров имеется полный набор "сталкеровских" анимаций, иначе, как водится, будет стопудовый вылет.

А Ulman'u надо, чтобы указанных персонажей именно не обшаривали после смерти. Ulman, если уж совсем просто, то сделай так - добавь в самое начало функции checkCorpse(obj) (файл watcher_act.script) вот такую строчку:

if IsStalker(obj) and obj:name() == "stalker_name" then return false end

"stalker_name" следует заменить на имя того сталкера, труп которого не должны обшаривать мародёры - но только не на "Вася" или "Петя", а на такое же, как и в файле xrs_medic.script для раненого, которому "не требуется" помощь.

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

Как я понял в эти 2 файла надо писать имя, которое прописано в all.spawn то есть например name = esc_vagon_wounded, то в скрипт надо писать esc_vagon_wounded. Сделал так, но его продолжают лечить. Чего я ещё неправильно делаю?

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

Prozone97, да и всем кому интересно.

Вот скриптовая функция для проверки нахождения ГГ в определенной области:

function distance_to_point (lname, pos_x, pos_y, pos_z, dist)
    local actor = db.actor
-- определим текущую локацию, дабы не определять гейм и левел вертексы, хотя можно и их
    local lev_name = level.name()
-- зададим точке наши координаты
    local point = vector:set(pos_x, pos_y, pos_z)
-- проверим существует ли актор и находится ли он на нужной локации
    if actor and lev_name == lname then
    -- определим координаты актора
        local actor_pos = actor:position()
    -- чтобы сэконимить ресурсы ПК проверим квадрат расстояния между ГГ и точкой 
        if point:distance_to_sqr(actor_pos) <= dist*dist then
            return true
        end
        return false
    end
end

Вызов функции следующий

if distance_to_point ("l01_escape", -210.632614135742, -20.050708770752, -142.461120605469, 10) then

l01_escape - имя уровня на котором нужно проверить вхождение ГГ в область

координаты ставим свои, я поставил координаты места спавна Волка

10 - расстояние до нужной точки. Поскольку вероятность того, что ГГ пройдет именно через точку - очень низкая, то используем область, радиус которой и определяет параметр dist

P.S. Если где-то ошибся поправьте пожалуйста.

Спасибо Charsi за указаные ошибки.

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

Всем добрый вечер. Вопрос по редактированию death_manager'а: искал в этой теме и ковырялке 2 момента, насчет разрядки оружия мертвых НПС и состояния стволов, которые роняют раненые, падающие на землю. На первый нашел ответ, а на второй так и нет. Так вот, спрашиваю, как (и возможно ли) сделать, что бы оружие, которое выронил НПС, имело степень износа, а не было новым? Показалось, что это есть в моде LWR, поэтому это наверное возможно :)

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

×
×
  • Создать...