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

Скриптование


Svoboда

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

@"StreloK", вот полностью рабочая логика для гражданского зомбаря:

[smart_terrains]

none = true

 

[logic]

active = mob_fake_death

 

[mob_fake_death]

;on_info = {!is_day} mob_home

on_info = {=is_day =dist_to_enemy_le(8)} mob_home, {!is_day} mob_home

 

[mob_home]

path_home = sleep_zombie_home

home_min_radius = 20

home_max_radius = 25

;on_info = {=is_day} mob_fake_death

on_info = {=is_day =dist_to_enemy_ge(8)} mob_fake_death

 

on_signal = sig_attacked | mob_combat

[mob_combat]

on_timer = 10000 | mob_home

Здесь днём зомби будет загорать в травке на солнышке, пока к нему не приблизится враг (игрок) на расстояние, менее 8 метров. В этом случае он подскочит, и очень сильно постарается замочить того, кто мешает ему отдыхать. Но если отойти от потревоженного зомби более, чем на 8 метров, он снова мирно уляжется баю-бай :)... Ночью зомби будет активен (по умолчанию в xr_conditions.script - от 21 вечера до 6 часов утра). Если нужно, чтобы зомби валялся днём, ни на кого не реагируя, просто зарэмь "длинные схемы" и раскомментируй "короткие".

Поделиться этим сообщением


Ссылка на сообщение

Видимо, у тебя на схеме mob_walker или на mob_camp логика построена, а меня на mob_home. Mob_home тем и выгоден, что неписи автоматически подыскивают для себя каверы, а не ходят тупо по путям, определённым разработчиками. Конечно, не всегда это удобно - в частности, не подходит для скриптовых сцен. А вот для симуляции "free alife" самое то ;)...

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

Поделиться этим сообщением


Ссылка на сообщение

Как и предполагал, mob_walker наличествует ;). Задержку я имел в виду, чтобы зомби не сразу падал, а через некоторое время после окончания "тревоги" - тут можно после окончания действия условий тревоги переключиться, например, на схему mob_remark, а в ней задать условие on_timer = 10000 | mob_fake_death. А как сделать, чтобы не сразу падал, а "медленно"... даже не знаю :).

И ещё у тебя есть условие (on_actor_dist_le = 5 | nil), по нему, если игрок приблизится к зомби менее, чем на 5 м., монстр уйдёт из-под логики, и обратно его под управление уже не взять. К тому же, по этому условию зомби будет реагировать только на игрока - рекомендую всё же использовать dist_to_enemy_le, и переключаться не на nil (выход монстра из-под логики), а на какую-нибудь существующую схему. Вдруг к "отдыхающему" зомби подберётся какой-нибудь "природный" враг (или сталкер), а не игрок, тогда on_actor_dist_le не сработает.

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

@"StreloK", по поводу активации точки респона. Сама точка респона у тебя настроена работать безо всяких условий. То есть, она будет спонить неписей через положенные промежутки времени, независимо от рестриктора-"активатора".

Для того, чтобы респоновая точка (я так понимаю, функция, которая у тебя прописана в кустодате рестриктора должна была активировать не только респон, но и включить смарт впридачу?) действительно начала работать только после вхождения игрока в рестриктор, в кустодате точки респона, как уже было упомянуто, нужно добавить вот такое условие:

conditions = {+infoportion} 100, 0

А для активации смарта (в кустодате смарттеррейна) вот такое:

cond = {+infoportion}

Функция, указанная у тебя в кустодате рестриктора (=cit_gulag_1_restavn), действительно не нужна, нужен только "эффект" с получением инфопоршна:

on_actor_inside = nil %+infoportion%

Тогда, как только игрок войдёт в рестриктор, будет получен инфопоршн, который автоматически активирует точку респона и смарт (если нужно). Смарт включится, а респоновая точка начнёт плодить неписей в соответствии с глобальными настройками респона. А сам рестриктор "уйдёт в nil", чтобы не обрабатывать в дальнейшем условия этого рестриктора. Кстати, правильно условия указываются перед именем новой схемы, а эффекты - после:

on_actor_inside = {условия +(-)инфопоршны и (или) =(!)функции} новая схема %эффекты +(-)инфопоршны и (или) =функции%

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

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

Поделиться этим сообщением


Ссылка на сообщение
TRAMP14, по крайней мере гейм- и левелвертексы в норме (для подземелья Агропрома). Непись вообще не спонится (то есть при запуске игры сам игрок уже находится в подземке Агропрома) или когда игрок через некоторое время добирается до подземки, непися там нет? Что у него в логике?

Поделиться этим сообщением


Ссылка на сообщение

Jurok, для того, чтобы непись подошёл к игроку в "олспон" лезть ни к чему. Это исключительно настройка логики. Подскажу - юзайте схему follower, а для

@"StreloK" - схема и соответствующая модификация xr_attendant практически готова - только отшлифую ещё пару функций, и в ЛС отбарабаню ;).

Поделиться этим сообщением


Ссылка на сообщение

Нет, это для сценок нападения на игрока - онлайн. Схема follower всё обсчитывает автоматически, её нужно только чуть-чуть подрихтовать. Поэтому непись пойдёт не туда, где игрок "должен быть", а прямо к игроку, даже если пытаться уйти от непися. Ну, а дельше всё зависит от фантазии разработчика :)...

Поделиться этим сообщением


Ссылка на сообщение
Куфзук, (тоже оффтоп, но общедоступное пояснение необходимо) я отработал по конкретному заказу (поэтому заказчику в ЛС), который подразумевал под собой вполне конкретную сценку. Для полностью универсальной схемы просто не хватает окончательной "огранки" (и... лень немного), плюс требуется составление дополнительной техдокументации по модифицированной схеме follower (я специально не стал создавать отдельный клон схемы - просто нужно будет использовать дополнительные параметры существующей). Это необходимо, т.к. для скриптера, ясное дело, всё будет понятно, но ведь настройщик логики (режиссёр скриптовых сценок) вовсе не обязан быть таковым - и я с этим фактом полностью согласен. Если всё это действительно кому-то интересно - доделаю "универсалку" и выложу :).

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

Вот модифицированный xr_attendant (схема follower), для использования в скриптовых сценках, а также для организации примитивных отрядов, возглавляемых игроком. Инструкция внутри.

 

Я не знаком с этой схемой, но, в принципе, в любую схему можно добавить кучу самых разнообразных органичений, и настроить её соответственно :)...

 

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

Внимание! В выложенном мной скрипте обнаружена ошибка, которая может приводить к "вылету" без лога при безусловном переключении на другую схему логики. В функцию action_follow:free () в самом начале нужно добавить строку:

local section = self.object:section()

Приношу извинения за причинённые неудобства :)...

Изменено пользователем Куфзук

Поделиться этим сообщением


Ссылка на сообщение

Вот так :):

function some_spawn(first_speaker, second_speaker)

local shit =
{"wpn_ak74",
"wpn_abakan",
"kolbasa", "bread",
"vodka",
"medkit",
"bandage"}

local item = shit[math.random(table.getn(shit))]

alife():create(item,db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())
end

Капрал Хикс, в amk/anoms/anoms.ltx прописываются "противоаномальные" зоны - то есть места, где динамические аномалии спониться не будут.

Поделиться этим сообщением


Ссылка на сообщение

А у меня вот какой вопрос: возможно ли как-то изменить отношение непися к игроку в оффлайне?

Поделиться этим сообщением


Ссылка на сообщение
Полтергейст, кто ищет, тот найдёт :). Для одной локации я уже всё решил и написал. А вот если непись находится на другой - тут по-моему уже ничего не поделать. Дело не в стрельбе, а в изменении отношений по условию, в другом месте. Именно для того, чтобы не париться с нетспоном - переходом в онлайн и обратно. Зачем весь этот геморрой? Вот есть же очень удобные функции для изменения отношений группировок, хоть онлайн, хоть оффлайн - без разницы... А с отдельными неписями, независимо от того, в какой он группировке, вот так мудрить приходится :(...

Поделиться этим сообщением


Ссылка на сообщение

Создал - это хорошо. А под какой схемой логики они "не встают"? Они walker'ы? Camper'ы? Или сидят вокруг костра? Что прописано у них в путях в all.spawn (анимации)?

Поделиться этим сообщением


Ссылка на сообщение

strelok200, в секции [logic] указывают обычно:

inv_max_weight = 10000

trade = <путь к конфигурационному ltx-файлу настроек торговли NPC>

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

Поделиться этим сообщением


Ссылка на сообщение

Например, вот так:

local distance = obj:position():distance_to(db.actor:position())

Поделиться этим сообщением


Ссылка на сообщение

Disord,

1. для организации "неподвижности" игрока можно использовать функцию set_inactivate_input_time(xxx), в которой xxx это время, в течение которого отключается ввод команд для ГГ. Эта функция используется, например, в ситуации, когда ГГ получает удар в физиономию за слишком настойчивые приставания к сталкерам. Либо напрямую использовать level.disable_input()/level.enable_input().

2. Вот такая конструкция подойдёт ;)?

function clear_player_inventory()
    db.actor:iterate_inventory(
        function(dummy,item)
            local nameid = item:section()
            if nameid ~= "bolt" then
                alife():release(alife():object(item:id()), true)
            end
        end, nil)
    db.actor:give_money(-db.actor:money())
end

Поделиться этим сообщением


Ссылка на сообщение

korshyn-3, укажи в логике, в конкретной секции NPC (walker или кто он у тебя) параметр meet = no_meet.

strelok200, в диалоге получай инфопоршн, который будет условием переключения логики NPC на другую секцию, например:

on_info = {+infoportion} walker@go_to_new_location.

Поделиться этим сообщением


Ссылка на сообщение

Disord, сам инфопоршн на "последней" точке пути NPC выдать не сможет. Но. В путях на последней точке можно установить так называемый сигнал:

[walk]
points = p0
p0:name = wp01|a=walk|sig=arrif
...

а в логической схеме NPC прописать реакцию на этот сигнал, в том числе и получение инфопоршна, примерно так:

[walker@tra_la_la]
...
on_signal = arrif | walker@tro_lo_lo %+infoportion%
...

По второму вопросу - менять нужно у ГГ не только direction, но и параметр upd:o_torso.

Поделиться этим сообщением


Ссылка на сообщение

В АМК главная функция тянет за собой сервисную. Вот готовая, удаляет предмет из инвентаря ГГ по имени. Только не пытайтесь удалять болт ;):

function del_from_player_inventory(item_name)
local obj = db.actor:object(item_name)
  if obj then
   alife():release(alife():object(obj:id()), true)
  end
end

Поделиться этим сообщением


Ссылка на сообщение

А сам инфопоршн зарегистрировал в каком-нибудь файле с инфопоршнами? Если нет, то вот это и причина для вылета. Вторая возможная причина - отсутствие path_look в секции [walker@walker1].

Поделиться этим сообщением


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

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

AMK-Team.ru

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