Случайная подборка модов
Парадокс: Начало
3.6
Призраки Прошлого 2
3.0
Тёмное Братство – Проклятые Зоной
3.1
Плохая компания
4.0
Priboi story
4.1
Игра Душ: Начало
3.6
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
Модератор форума: 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
    Поиск: