Случайная подборка модов
Возвращение Шрама
3.9
Legend Returns 0.9.2
4.0
Hibernation Evil - Эпизод I
2.8
Krovosos mod v. 3.8
4.0
Новый Арсенал 5.0
3.6
Апокалипсис
4.0
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
Модератор форума: FanG, Аdmin, FantomICW, Overfirst  
[CoP] Модострой: вопросница
Российская Федерация  Overfirst
Воскресенье, 31.12.2017, 13:17 | Сообщение # 1
Статус:
Бывалый:
Сообщений: 1081
Награды: 19
Регистрация: 11.06.2015

[CoP] Модострой: вопросница

Тема посвящена моддингу на платформе Зов Припяти.

Соседние темы: Тень Чернобыля / Чистое небо.


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

  • Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода.

  • Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа).

  • Благодарность выражаем в личке или же ставим плюсик в историю репутации. Подобные посты будут удаляться.
  •   Злобная реклама
    Воскресенье, 31.12.2017, 13:17
    Статус:
    Сообщений: 666
    Регистрация: 11.06.2015
    Российская Федерация  Lektorrr
    Пятница, 07.02.2020, 16:01 | Сообщение # 6076
    Статус:
    Новичок:
    Сообщений: 266
    Награды: 5
    Регистрация: 09.01.2013

    Пытаюсь тут сделать новую схему для НПС. Хочу сделать так, чтобы она срабатывала в том случае, если рядом с НПС находится какой-либо объект или мутант. В моде "Связь Времён" подсмотрел следующий код, проверяющий наличие рядом с неписем артефакта:



    Однако чуть позже меня предупредили, что парсинг всех 65535 объектов нагружает игру. Так ли это на самом деле? Есть ли альтернативные пути создания такой проверки?
    Сообщение отредактировал Lektorrr - Пятница, 07.02.2020, 16:03
      Злобная реклама
    Пятница, 07.02.2020, 16:01
    Статус:
    Сообщений: 666
    Регистрация: 09.01.2013
    Российская Федерация  denis2000
    Пятница, 07.02.2020, 20:47 | Сообщение # 6077
    Время Альянса
    Статус:
    Ветеран:
    Сообщений: 4070
    Награды: 16
    Регистрация: 19.07.2013

    Lektorrr,
    1. В данном коде нет проверки всего диапазона идентификаторов объектов, в этом коде объект передается в функцию из другой функции этого же скрипта, а точнее evaluator_look_for_art:evaluate проверяются объекты находившиеся в поле зрения НПС и о которых он еще "помнит":
    Код
    for o in self.object:memory_visible_objects() do
       if self:check_item( o ) then
        return true
       end
      end

    Как видно использован движковый метод memory_visible_objects, возвращающий список таких объектов.

    2. Да если заниматься проверкой всего диапазона идентификаторов объектов, тем более постоянно, то движек только этот и будет делать - нагрузка нереальная.
    Сообщение отредактировал denis2000 - Пятница, 07.02.2020, 21:06
      Злобная реклама
    Пятница, 07.02.2020, 20:47
    Статус:
    Сообщений: 666
    Регистрация: 19.07.2013
    Российская Федерация  Ferveks
    Пятница, 07.02.2020, 20:54 | Сообщение # 6078
    Игра Душ: Начало
    Статус:
    Бывалый:
    Сообщений: 646
    Награды: 5
    Регистрация: 29.06.2017

    Lektorrr, можно один раз при старте отобрать объекты, которые следует проверять в update - это нормальная нагрузка, без перегруза
      Злобная реклама
    Пятница, 07.02.2020, 20:54
    Статус:
    Сообщений: 666
    Регистрация: 29.06.2017
    Российская Федерация  makdm
    Суббота, 08.02.2020, 01:32 | Сообщение # 6079
    Время Альянса
    Статус:
    Опытный:
    Сообщений: 1787
    Награды: 19
    Регистрация: 22.11.2012

    Цитата Ferveks ()
    можно один раз при старте отобрать объекты, которые следует проверять в update

    В оригинале разрабами специально для таких целей предусмотрен файл DB.script.
    Нужно внести в него свои необходимые таблицы и помещать в них ссылку на объекты при переходе объекта в онлайн. Тогда у вас всегда будет доступ как к серверной так и к клиентской части объекта.
    Сами ссылки на объекты помещать в таблицы из биндеров этих объектов. И удалять их оттуда же.
    В различных ситуациях ( а они в основном связаны с онлайновыми объектами, так как видеть игроку что творится за кадром не интересно ) достаточно будет перебрать нужную таблицу объектов.
    Никаких тормозов при этом в игре не будет.
    Например, когда я писал скрипт атаки турели, то в логику турели, можно было вписать в качестве цели не только actor или all, но и monster и stalker. В этом случае объекты брались из соответствующих таблиц из файла db.script и турель точно "валила" онлайновые объекты. Никаких переборов 65535 объектов, чтобы выбрать сталкеров или монстров, не было.
      Злобная реклама
    Суббота, 08.02.2020, 01:32
    Статус:
    Сообщений: 666
    Регистрация: 22.11.2012
    Российская Федерация  Paradox27kms
    Суббота, 08.02.2020, 03:32 | Сообщение # 6080
    Статус:
    Новичок:
    Сообщений: 312
    Награды: 2
    Регистрация: 11.02.2019

    Nesquik, Разумеется... ведь это логично.
    Сообщение отредактировал Paradox27kms - Суббота, 08.02.2020, 03:45
      Злобная реклама
    Суббота, 08.02.2020, 03:32
    Статус:
    Сообщений: 666
    Регистрация: 11.02.2019
    Российская Федерация  Lektorrr
    Суббота, 08.02.2020, 14:41 | Сообщение # 6081
    Статус:
    Новичок:
    Сообщений: 266
    Награды: 5
    Регистрация: 09.01.2013

    Если обозначить смарт как укрытие, то будут ли НПС задействовать в нём уже имеющиеся работы и анимпоинты во время выброса, или нужно расставлять отдельные для этого пути (_surge_1_walk...)?
      Злобная реклама
    Суббота, 08.02.2020, 14:41
    Статус:
    Сообщений: 666
    Регистрация: 09.01.2013
    Российская Федерация  Policai
    Суббота, 08.02.2020, 15:25 | Сообщение # 6082
    Dead City Breakthrough
    Статус:
    Опытный:
    Сообщений: 2244
    Награды: 11
    Регистрация: 08.11.2011

    Lektorrr,

    Расставлять отдельные... _surge_1_walk и _surge_1_look
    Сообщение отредактировал Policai - Суббота, 08.02.2020, 15:27
      Злобная реклама
    Суббота, 08.02.2020, 15:25
    Статус:
    Сообщений: 666
    Регистрация: 08.11.2011
    Российская Федерация  yobakun
    Суббота, 08.02.2020, 15:29 | Сообщение # 6083
    Статус:
    Новичок:
    Сообщений: 270
    Награды: 5
    Регистрация: 30.07.2016

    Как узнать кого в данный момент лутает ГГ? Нашел только проверку на открытое окно без указания цели.
    Код

    function dead_body_search_wnd_opened()
        --printf("---:>DeadBodySearch opened")
        dead_body_searching = true
    end
      Злобная реклама
    Суббота, 08.02.2020, 15:29
    Статус:
    Сообщений: 666
    Регистрация: 30.07.2016
    Российская Федерация  makdm
    Суббота, 08.02.2020, 16:53 | Сообщение # 6084
    Время Альянса
    Статус:
    Опытный:
    Сообщений: 1787
    Награды: 19
    Регистрация: 22.11.2012

    yobakun, под словом КОГО вы что имеете ввиду?
    Без уточнения, ответ очевиден - труп НПС лутает ГГ.
      Злобная реклама
    Суббота, 08.02.2020, 16:53
    Статус:
    Сообщений: 666
    Регистрация: 22.11.2012
    Российская Федерация  yobakun
    Суббота, 08.02.2020, 18:05 | Сообщение # 6085
    Статус:
    Новичок:
    Сообщений: 270
    Награды: 5
    Регистрация: 30.07.2016

    makdm, в общем, хочу запретить лутать труп игроком, если в это время его обыскивает другой нпс. Надо получить труп как объект.
      Злобная реклама
    Суббота, 08.02.2020, 18:05
    Статус:
    Сообщений: 666
    Регистрация: 30.07.2016
    Российская Федерация  makdm
    Суббота, 08.02.2020, 23:22 | Сообщение # 6086
    Время Альянса
    Статус:
    Опытный:
    Сообщений: 1787
    Награды: 19
    Регистрация: 22.11.2012

    Цитата yobakun ()
    в общем, хочу запретить лутать труп игроком

    Даже интересно стало.
    Цитата yobakun ()
    Надо получить труп как объект.

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

    З.Ы. Я знаю как это сделать и мне не нужно получать объект-труп, мне просто интересна ваша реализация этой хотелки через объект-труп.
    Сообщение отредактировал makdm - Воскресенье, 09.02.2020, 00:15
      Злобная реклама
    Суббота, 08.02.2020, 23:22
    Статус:
    Сообщений: 666
    Регистрация: 22.11.2012
    Российская Федерация  Policai
    Воскресенье, 09.02.2020, 09:01 | Сообщение # 6087
    Dead City Breakthrough
    Статус:
    Опытный:
    Сообщений: 2244
    Награды: 11
    Регистрация: 08.11.2011

    Народ! Существует ли вариант заменить эмбиент по спейсу?
    Локация обьеденённая с подземкой, в подземке звук с поверхности. Задача накрыть подземку спейсом и когда ГГ в спейсе проигрывается указанный эмбиент, при выходе из спейса возвращается родной с локации...
      Злобная реклама
    Воскресенье, 09.02.2020, 09:01
    Статус:
    Сообщений: 666
    Регистрация: 08.11.2011
    Российская Федерация  denis2000
    Воскресенье, 09.02.2020, 10:25 | Сообщение # 6088
    Время Альянса
    Статус:
    Ветеран:
    Сообщений: 4070
    Награды: 16
    Регистрация: 19.07.2013

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

    Сообщение отредактировал denis2000 - Воскресенье, 09.02.2020, 10:42
      Злобная реклама
    Воскресенье, 09.02.2020, 10:25
    Статус:
    Сообщений: 666
    Регистрация: 19.07.2013
    Российская Федерация  Policai
    Воскресенье, 09.02.2020, 11:22 | Сообщение # 6089
    Dead City Breakthrough
    Статус:
    Опытный:
    Сообщений: 2244
    Награды: 11
    Регистрация: 08.11.2011

    denis2000,

    Спасибо. Сейчас буду пробовать.
      Злобная реклама
    Воскресенье, 09.02.2020, 11:22
    Статус:
    Сообщений: 666
    Регистрация: 08.11.2011
    Российская Федерация  yobakun
    Воскресенье, 09.02.2020, 12:35 | Сообщение # 6090
    Статус:
    Новичок:
    Сообщений: 270
    Награды: 5
    Регистрация: 30.07.2016

    makdm, ну например так:
    Код

    -- xr_corpse_detection.script
    -- в моменте когда непись начинает лутать труп дописываем
    utils.save_var(corpse,"corpse_loot_begin",true)
    -- непись залутал труп и забрал вещи
    utils.save_var(corpse,"corpse_loot_begin",nil)

    -- actor_menu.script
    --если бы dead_body_search_wnd_opened() возвращал объект в виде трупа
    function dead_body_search_wnd_opened(obj)
    if obj and utils.load_var(obj,"corpse_loot_begin") then
        SetHudMsg(game.translate_string("st_already_looting"),8)
        local hud = get_hud()
          if (hud) then
          hud:HideActorMenu()
         end
        end
    end
      Злобная реклама
    Воскресенье, 09.02.2020, 12:35
    Статус:
    Сообщений: 666
    Регистрация: 30.07.2016
    Поиск: