Случайная подборка модов
Nature Winter v2.0 «Квантовый скачок»
4.0
Oblivion Lost 3.0
3.0
Darkest Time
3.5
Krovosos mod v. 3.8
4.0
День одиночки
1.6
OGSM 1.8 Community Edition
4.2
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
Модератор форума: 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
    Российская Федерация  Winsor
    Понедельник, 06.07.2020, 12:46 | Сообщение # 7786
    Статус:
    Отмычка:
    Сообщений: 163
    Награды: 0
    Регистрация: 22.04.2020

    Решил сделать проверку на то, что у актёра есть один предмет из всего списка. Для теста я в список добавил только 1 предмет.
    Я хотел сделать так, чтобы консервы юзалась только тогда, когда у ГГ есть нож, а если его нет, то возвращать консервы обратно.
    Вот функция:

    function send_tip()
    news_manager.send_tip(db.actor, "Нужно открыть консервную банку ножом.", nil, "none_info_pda", nil, nil)
    end

    local actor_has_knife = =actor_has_item("knife")
    local actor_has_not_knife = !actor_has_item("knife")

    if item_name=="conserva" and actor_has_knife then
    local t1d = {"energy_drink_used_1_0", "energy_drink_used_1_1", "energy_drink_used_1_2"}
    actor_got_item(t1d[math.random(3)])
    elseif item_name=="conserva" and actor_has_not_knife then
    send_tip
    actor_got_item("conserva")
    end

    Вылетает при юзании с таким логом:
    Expression : !m_error_code
    Function : raii_guard::~raii_guard
    File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
    Line : 748
    Description : ...call of pripyat\gamedata\scripts\bind_stalker.script:215: attempt to index global 'icomplex' (a nil value)
    Сообщение отредактировал Winsor - Понедельник, 06.07.2020, 12:47
      Злобная реклама
    Понедельник, 06.07.2020, 12:46
    Статус:
    Сообщений: 666
    Регистрация: 22.04.2020
    Российская Федерация  denis2000
    Понедельник, 06.07.2020, 13:28 | Сообщение # 7787
    Время Альянса
    Статус:
    Ветеран:
    Сообщений: 4070
    Награды: 16
    Регистрация: 19.07.2013

    Цитата _V_O_IN_ ()
    Какие строчки в actor_menu_16 отвечают за редактирование этой части?

    Тег actor_ch_info.
      Злобная реклама
    Понедельник, 06.07.2020, 13:28
    Статус:
    Сообщений: 666
    Регистрация: 19.07.2013
    Российская Федерация  Neptun
    Понедельник, 06.07.2020, 16:05 | Сообщение # 7788
    Связной
    Статус:
    Бывалый:
    Сообщений: 672
    Награды: 9
    Регистрация: 25.03.2012

    Winsor, какая-то муть... попробуй так:

    Код
    local actor = db.actor
    local item_name = sect:section()
    if item_name=="conserva" then
    if not xr_conditions.actor_has_item(actor, npc, {"wpn_knife"}) then
    give_object_to_actor("conserva")
    news_manager.send_tip(db.actor, "Нужно открыть консервную банку ножом.", nil, "none_info_pda", nil, nil)
    end
    if xr_conditions.actor_has_item(actor, npc, {"wpn_knife"}) then
    действие
    end
    end


    В _g добавить:
    Код
    function give_object_to_actor(obj,count)       
              if count==nil then count=1 end       
              for i=1, count do       
                  alife():create(obj,db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())       
              end       
    end
      Злобная реклама
    Понедельник, 06.07.2020, 16:05
    Статус:
    Сообщений: 666
    Регистрация: 25.03.2012
    Украина  molodoy_chelovek
    Понедельник, 06.07.2020, 16:19 | Сообщение # 7789
    Статус:
    Новичок:
    Сообщений: 316
    Награды: 2
    Регистрация: 14.07.2019

    Делаю таймер через level.add_call, после квиксейв->лоад он, судя по всему, останавливается, и спустя заданное время ничего не происходит. Как продолжить его выполнение после перезагрузки?
    Код
    function start_timer()  
        local iTimer = time_global() + items_table[used_item]    
        local function check_timer()
              return time_global() > iTimer
        end
        level.add_call(check_timer, action_timer)
    end
      Злобная реклама
    Понедельник, 06.07.2020, 16:19
    Статус:
    Сообщений: 666
    Регистрация: 14.07.2019
    Украина  _V_O_IN_
    Понедельник, 06.07.2020, 16:41 | Сообщение # 7790
    Статус:
    Гость:
    Сообщений: 36
    Награды: 1
    Регистрация: 28.07.2016

    denis2000, спасибо! Возник ещё вопрос, как исправить эти полоски по краям прицела? При разрешении экрана 1920Х1080 все ок, но при 1366Х768 вот такая беда.
    Прикрепления: 4306855.jpg (282.1 Kb)
    Сообщение отредактировал _V_O_IN_ - Понедельник, 06.07.2020, 16:42
      Злобная реклама
    Понедельник, 06.07.2020, 16:41
    Статус:
    Сообщений: 666
    Регистрация: 28.07.2016
    Российская Федерация  Hozar_2002
    Понедельник, 06.07.2020, 16:45 | Сообщение # 7791
    Статус:
    Новичок:
    Сообщений: 347
    Награды: 7
    Регистрация: 22.04.2017

    Цитата molodoy_chelovek ()
    Как продолжить его выполнение после перезагрузки?
    Самый простой вариант по моему - считать не через time_global() а через игровое время game.get_game_time() и для просчета разницы использовать game.get_game_time():diffSec(saved_time). Собственно само время хранить в pstor'e Главного Героя (например).

    Добавлено (06.07.2020, 16:50)
    ---------------------------------------------
    Цитата _V_O_IN_ ()
    но при 1366Х768 вот такая беда
    Можно в XML настройки данной текстуры обрезать все по 1 пикселю, получив что-то на подобие
    x = "1" y = "1" w = "1022" h = "766", также советую убедится, есть ли на текстуре mip-map уровни, и при наличии без них текстуру прогнать. Для GUI это важно.
    Сообщение отредактировал Hozar_2002 - Понедельник, 06.07.2020, 16:50
      Злобная реклама
    Понедельник, 06.07.2020, 16:45
    Статус:
    Сообщений: 666
    Регистрация: 22.04.2017
    Украина  _V_O_IN_
    Понедельник, 06.07.2020, 18:52 | Сообщение # 7792
    Статус:
    Гость:
    Сообщений: 36
    Награды: 1
    Регистрация: 28.07.2016

    Hozar_2002, спасибо, помогло!
      Злобная реклама
    Понедельник, 06.07.2020, 18:52
    Статус:
    Сообщений: 666
    Регистрация: 28.07.2016
    Российская Федерация  sergej5500
    Вторник, 07.07.2020, 00:03 | Сообщение # 7793
    Статус:
    Новичок:
    Сообщений: 290
    Награды: 4
    Регистрация: 09.01.2017

    Всем добрый вечер.

    Я сделал в чистом Зове Припяти закладываемые бомбы. Наподобие тех, что в СГМ. Они исправно взрываются. Убивают и калечат монстров и НПС.

    Как можно отследить, что сталкер или монстр погиб от взрыва бомбы. Бомба называется remote_explosive_bomb. Имеет СТОРИ-ИД. С чего начать?
      Злобная реклама
    Вторник, 07.07.2020, 00:03
    Статус:
    Сообщений: 666
    Регистрация: 09.01.2017
    Украина  _V_O_IN_
    Вторник, 07.07.2020, 01:31 | Сообщение # 7794
    Статус:
    Гость:
    Сообщений: 36
    Награды: 1
    Регистрация: 28.07.2016

    Кто знает как убрать это затенение? Во время торговли и обыска у НПС такого нету, только у актора.
    Прикрепления: 3949728.jpg (572.0 Kb)
      Злобная реклама
    Вторник, 07.07.2020, 01:31
    Статус:
    Сообщений: 666
    Регистрация: 28.07.2016
    Российская Федерация  Winsor
    Вторник, 07.07.2020, 10:56 | Сообщение # 7795
    Статус:
    Отмычка:
    Сообщений: 163
    Награды: 0
    Регистрация: 22.04.2020

    _V_O_IN_, текстура по пути: textures\ui\ui_actor_menu.dds
    Тебе нужно растянуть текстуру, или сделать полупрозрачный инвентарь как за выделенной областью.
    Сообщение отредактировал Winsor - Вторник, 07.07.2020, 10:56
      Злобная реклама
    Вторник, 07.07.2020, 10:56
    Статус:
    Сообщений: 666
    Регистрация: 22.04.2020
    Российская Федерация  makdm
    Вторник, 07.07.2020, 11:37 | Сообщение # 7796
    Время Альянса
    Статус:
    Опытный:
    Сообщений: 1787
    Награды: 19
    Регистрация: 22.11.2012

    Цитата sergej5500 ()
    С чего начать?

    Начни с биндеров сталкера и монстра. Метод death_callback
    Параметр who
      Злобная реклама
    Вторник, 07.07.2020, 11:37
    Статус:
    Сообщений: 666
    Регистрация: 22.11.2012
    Российская Федерация  Winsor
    Вторник, 07.07.2020, 13:25 | Сообщение # 7797
    Статус:
    Отмычка:
    Сообщений: 163
    Награды: 0
    Регистрация: 22.04.2020

    Как проверить наличие одного предмета из всего списка НЕ В ДИАЛОГЕ? А если у ГГ есть два (и более) предмета из списка, то функция не изменяется и продолжает работать.
      Злобная реклама
    Вторник, 07.07.2020, 13:25
    Статус:
    Сообщений: 666
    Регистрация: 22.04.2020
    Украина  molodoy_chelovek
    Вторник, 07.07.2020, 13:55 | Сообщение # 7798
    Статус:
    Новичок:
    Сообщений: 316
    Награды: 2
    Регистрация: 14.07.2019

    Winsor, может это не то что вам нужно, но вот пища для размышления:

    Код
    local items_table = {     
           ["medkit"] = 8000,
           ["medkit_army"] = 8000,
           ["medkit_scientic"] = 8000,
           ["antirad"] = 8500,       
          }

    Так я проверял, есть ли заюзанный предмет в таблице. Сама проверка:
    Код
    if items_table[obj] then -- Если предмет obj есть в таблице
    ...
    end


    Добавлено (07.07.2020, 14:02)
    ---------------------------------------------
    У меня есть таблица (см. выше) вида
    Код
    ["Название секции предмета"] = миллисекунды для таймера,
    время для таймера я указываю таким образом:
    Код
    local iTimer = time_global() + items_table[used_item]
    по истечению времени таймера мне нужно как-то пополнять здоровье/радиацию и т.д актору, но я не могу придумать, как это правильно реализовать. Нужно как-то переделать таблицу, чтобы я мог заносить ещё и эти значения(радиация/здоровье). У кого-то есть идеи?

    ----------------------------------------------------------------

    Цитата denis2000 ()
    Нет ничего проще, например так:

    Большое спасибо!
    Сообщение отредактировал molodoy_chelovek - Вторник, 07.07.2020, 15:10
      Злобная реклама
    Вторник, 07.07.2020, 13:55
    Статус:
    Сообщений: 666
    Регистрация: 14.07.2019
    Российская Федерация  denis2000
    Вторник, 07.07.2020, 14:53 | Сообщение # 7799
    Время Альянса
    Статус:
    Ветеран:
    Сообщений: 4070
    Награды: 16
    Регистрация: 19.07.2013

    Winsor, Код должен быть типа такого:
    Код
    local items_table = {"medkit", "medkit_army", "medkit_scientic", "antirad"}
    local two_and_more = false
    local one_item = false
    for k,v in pairs (items_table) do
       if db.actor:object(v) then
          if one_item then
             two_and_more = true
          else
             one_item = true
          end
       end
    return two_and_more



    molodoy_chelovek, Нет ничего проще, например так:
    Код
    local items_table = {     
           ["medkit"] = {время, здоровье, радиация},
          ...      
          }
    ...
    local iTimer = time_global() + items_table[used_item][1]
    local iHealth = items_table[used_item][2]
    local iRad = items_table[used_item][3]


    Добавлено (07.07.2020, 15:20)
    ---------------------------------------------
    А еще лучше внести соответствующие параметры в секции предметов и читать их напрямую оттуда, а не собирать отдельные таблицы в скрипте.
    Сообщение отредактировал denis2000 - Вторник, 07.07.2020, 15:21
      Злобная реклама
    Вторник, 07.07.2020, 14:53
    Статус:
    Сообщений: 666
    Регистрация: 19.07.2013
    Украина  molodoy_chelovek
    Вторник, 07.07.2020, 15:34 | Сообщение # 7800
    Статус:
    Новичок:
    Сообщений: 316
    Награды: 2
    Регистрация: 14.07.2019

    Цитата denis2000 ()
    А еще лучше внести соответствующие параметры в секции предметов

    Кстати да, тоже об этом думал, но так и не нашел способ как узнать значение параметра из секции.
    Сообщение отредактировал molodoy_chelovek - Вторник, 07.07.2020, 15:35
      Злобная реклама
    Вторник, 07.07.2020, 15:34
    Статус:
    Сообщений: 666
    Регистрация: 14.07.2019
    Поиск: