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

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


Svoboда

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

10 часов назад, Капрал Хикс сказал:

вызывать функцию отображения меток отсюда...  motivator_binder:net_spawn

Не верно. motivator_binder это клиентский класс НПСов, а метод net_spawn вызывается при выходе неписей в он-лайн. Загрузка сэйва где нить возле бара - выход в он-лайн нескольких ДЕСЯТКОВ неписей. Соответственно, вызов твоей ф-ции - эти же несколько десятков раз. Сам понимаешь, что такое делать не гоже...

11 часов назад, Капрал Хикс сказал:

Нужно отображение оружия на текущей локации.

Ну вот теперь конкретное условие. Если действие одноразовое, то можно обойтись одноразовым вызовом ф-ции, которая расставит метки. Для этого неплохим местом будет метод net_spawn, но для актера - он в любом случае выходит в он-лайн один раз. В скрипте bind_stalker, function actor_binder:net_spawn(data), где-то после db.add_actor(self.object)(это запись актера в глобальную переменную в скрипте db) добавляй свою ф-цию расстановки меток.

  • Полезно 1

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


Ссылка на сообщение
41 минуту назад, Капрал Хикс сказал:

function mark_binder:__init(obj) super(obj)

 .... здесь че то делаем
end

Так должно быть.

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


Ссылка на сообщение
11 часов назад, Капрал Хикс сказал:

Наверное, стоит прописать исключения для оружия в инвентаре ГГ и у неписей, однако надо ещё придумать, как сделать это.

Пока на ум приходит только обработка для ГГ и НПСов кэллбэка on_item_take, который срабатывает при появлении в инвентаре последних какого либо предмета - проверять, стоит ли на появившемся объекте известная нам метка и снимать её.

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


Ссылка на сообщение
7 часов назад, Norman Eisenherz сказал:

при использовании оптического прицела.

Когда-то давно нашел такую ф-цию, что-то в ней правил, в общем так:

Скрытый текст

 

function Get_wpn_mode(wpn_id)

    local sobj = alife():object(wpn_id)

    local table_param = {}

    local clsid_sobj = sobj:clsid()

    local np = net_packet()

    np:w_begin(0)

    sobj:UPDATE_Write(np)

    np:r_seek(2)

 

    -- для стволов с ПГ --

    if clsid_sobj == clsid.wpn_ak74_s or clsid_sobj == clsid.wpn_groza_s then

        table_param["upd_grenade_mode"] = np:r_u8()

    end

    table_param["unknown1"] = np:r_u8()

    if table_param["unknown1"] and table_param["unknown1"] == 0 then         --/ читаем общие для всего оружия параметры

        table_param["upd_condition"] = np:r_u8()

        table_param["upd_weapon_flags"] = np:r_u8()

        table_param["upd_ammo_elapsed"] = np:r_u16()

        table_param["upd_addon_flags"] = np:r_u8()

        table_param["upd_ammo_type"] = np:r_u8()

        table_param["upd_weapon_state"] = np:r_u8()

        table_param["upd_weapon_zoom"] = np:r_u8()

        table_param["upd_current_fire_mode"] = np:r_u8()

        -- для шотганов --

        if clsid_sobj == clsid.wpn_shotgun_s or clsid_sobj == clsid.wpn_bm16_s or clsid_sobj == clsid.wpn_rg6_s then

            table_param["upd_ammo_ids"] = np:r_u8()

        end

    else

        --/ читать пакет нужно более продвинутым способом!

    end

 

    return table_param["upd_weapon_state"],table_param["upd_weapon_zoom"],table_param["upd_grenade_mode"]

end

 

использование:

local obj_in_sl = db.actor:item_in_slot(нужный слот оружия)

local weapon_state, weapon_zoom, grenade_mode = Get_wpn_mode(obj_in_sl:id())

 

Думаю, для твоих целей сгодится.

  • Полезно 1

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


Ссылка на сообщение
42 минуты назад, _Sk8_AsTeR_ сказал:

звуки эмбиента ... например, ночью - постоянный звук сверчков...

Может с таким вопросом лучше в тему СДК ?

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


Ссылка на сообщение
7 часов назад, _Sk8_AsTeR_ сказал:

может есть скриптовый метод...

Есть ф-ционал проигрывания звуков. Вот тока зачем озвучку окружения лепить скриптами?

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


Ссылка на сообщение
17 минут назад, _Sk8_AsTeR_ сказал:

Нет мыслей куда копать? 

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

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


Ссылка на сообщение
9 часов назад, _Sk8_AsTeR_ сказал:

таким образом имитируя в зоне бурную деятельность

В радиусе 150м от ГГ.

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


Ссылка на сообщение
1 час назад, Norman Eisenherz сказал:

Есть ли способ перебора только онлайн-объектов без перебора всех объектов на карте?

Чем перебор объектов плох ? Если вызывать разово, по необходимости, а не вешать на апдейт в биндере актера...

 

Если очень надо именно без перебора всех объектов, то надо смотреть в сторону регистрации он-лайновых объектов в глобальную таблицу(в том же db.script к примеру). Судя по "надо обнаружить противника" разговор идет за НПСов, значит надо доделать в xr_motivator.script, в классе биндера регистрацию неписей в нет-спавн и отрегистрацию в нет-дестрой. Там кастати есть попытка такой регистрации\отрегистрации:

function motivator_binder:net_spawn(sobject)
    if not object_binder.net_spawn(self, sobject) then
        return false
    end

    db.add_obj(self.object) <- тута добавляем в таблицу

....

function motivator_binder:net_destroy()
    local st = db.storage[self.object:id()]
    if st.active_scheme then
        xr_logic.issue_event(self.object, st[st.active_scheme], "net_destroy", self.object)
    end

    db.del_obj(self.object) <-- тута убираем из таблицы

...

Тока вышеуказанные ф-ции в db.script выглядят так:

function add_obj(obj) <-- пустышка
end

function del_obj(obj)
    storage[obj:id()] = nil
end

Надо подумать, что же в таблице хранить, и доделать ф-ции.

 

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

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


Ссылка на сообщение
1 час назад, Norman Eisenherz сказал:

сказано "база данных живых онлайновых объектов …"

Ты еще не привык, что в ПЫСовском творении много чего "сказано", да не так в действительности ? Привыкай, меньше непоняток будет.

  • Сочувствую 1

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


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

Такой вопросец. Вот имеем, к примеру, для некого объекта экспортированную ф-цию, допустим my_function(). Требуется такая штука: в каком то конфиге прописана эта ф-ция:

func_name    = my_function

Надо прочитать(это понятно как сделать) и затем вызвать эту ф-цию для объекта. Т.е. как то так:

local obj = npc:object("наш_объект")

if obj then

     obj:my_function()

end

Подскажите, как такое сделать, если вообще возможно.

 

  • Сомнительно 1

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


Ссылка на сообщение
6 часов назад, _Sk8_AsTeR_ сказал:

Экспериментировал я как-то с чем-то скриптовым

Что именно делал - никому не скажу, на какой части трилогии - Кашпировский вам подскажет... За твой глаз мы все очень переживаем:cray5:.

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


Ссылка на сообщение
12 часов назад, Full Noob сказал:

Методом тыка выяснил, что проблему вызывает колбэк на вход в онлайн комплекта:

Ну так выясняй дальше, у тебя в ф-ции кэллбэка всего 7 строк кода. Закомментил одну - проверил, и так пока не найдешь ошибку.

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


Ссылка на сообщение
6 часов назад, Full Noob сказал:

так как при попытке сделать set_condition происходит краш:

А ты уверен что имеется такая экспортирования ф-ция: "set_condition"? 

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


Ссылка на сообщение
3 часа назад, Norman Eisenherz сказал:

Требуется поймать начало/конец катсцены

Любая кат-сцена откуда-то запускается, из логики какого-то объекта. Там и добавь скрытие индикаторов.

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


Ссылка на сообщение
1 час назад, Баба ЯГА сказал:

Хотелось бы понимать, а не просто копировать...

А почитать соседнюю тему "Справочник по ф-циям и классам", на первой странице раздел "Создание и управление худом и пользовательским интерфейсом"?

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


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

@_Sk8_AsTeR_

local sobj = alife():object(i) - так ты получаешь серверный объект, а метод money() имеется только у клиентских. Вариантов у тебя два: или получать клиентский объект по ID(к примеру так - local obj = level.object_by_id(ID)) и для него вызывать obj:money(), или пытаться вытащить кол-во денег из нет-пакета(если оно там хранится).

  • Согласен 1

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


Ссылка на сообщение
3 часа назад, Kirgudu сказал:

pk:set(data)

Все так просто? А если непись в он-лайне?

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


Ссылка на сообщение
13 часов назад, Баба ЯГА сказал:

Как отправить скриптово НПС

Уточни, что ты под этим понимаешь?

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


Ссылка на сообщение
57 минут назад, _Sk8_AsTeR_ сказал:

Теперь все НПС платно отправляют СМСки в чат, ибо нефиг халявничать! 

Ты это о чем вообще? О ботах, которыми рулит ИИ движка?

1 час назад, _Sk8_AsTeR_ сказал:

Реализована ли в НС какая-нибудь схема, где НПС в оффлайне продают ненужный лут?

Ты бы спросил сначала: "А есть ли схема, где НПС в оффлайне этот лут добывают?".

2 минуты назад, Баба ЯГА сказал:

но, например, нпс сидит у костра

А ты подумал о том, что НПС не просто "сидит у костра", а что он находится под логикой некой работы в неком гулаге. И ты думаешь, что это нормальная идея - выдернуть скриптово его с работы из гулага?

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


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

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