Случайная подборка модов
Золотой обоз. Часть первая
3.5
Old Episodes. Epilogue
3.2
История Конвона. Часть первая
3.1
Путь Бандита
2.0
Зона обр.2010г.
3.1
Shoker Weapon Mod 2.1
4.1
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
Модератор форума: 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
    Поиск: