Случайная подборка модов
Первые Дни Зоны:Создание в тумане
2.8
Альтернатива 1.2
3.0
AMK 1.4.1
4.2
Последний день
3.5
Новое Время. Судьба наемника
2.3
SZA: The Second Project
3.9
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
Модератор форума: 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
    Российская Федерация  makdm
    Вторник, 07.07.2020, 11:37 | Сообщение # 7696
    Время Альянса
    Статус:
    Опытный:
    Сообщений: 1787
    Награды: 19
    Регистрация: 22.11.2012

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

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

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

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

    Кстати да, тоже об этом думал, но так и не нашел способ как узнать значение параметра из секции.
    Сообщение отредактировал molodoy_chelovek - Вторник, 07.07.2020, 15:35
      Злобная реклама
    Вторник, 07.07.2020, 15:34
    Статус:
    Сообщений: 666
    Регистрация: 14.07.2019
    Российская Федерация  Pavel_Loktev
    Вторник, 07.07.2020, 16:36 | Сообщение # 7701
    Статус:
    Зевака:
    Сообщений: 10
    Награды: 0
    Регистрация: 02.09.2019

    Подскажите пожалуйста, а как сделать скрипт на смену имени и фото гг?
      Злобная реклама
    Вторник, 07.07.2020, 16:36
    Статус:
    Сообщений: 666
    Регистрация: 02.09.2019
    Российская Федерация  denis2000
    Вторник, 07.07.2020, 16:48 | Сообщение # 7702
    Время Альянса
    Статус:
    Ветеран:
    Сообщений: 4070
    Награды: 16
    Регистрация: 19.07.2013

    molodoy_chelovek, Это несложно
    Код
    local ini = system_ini()
    if ini and ini:section_exist("section_name") then
       local parametr_name = ini:r_string("section_name", "parametr_name") -- строковый параметр
       local parametr_name = ini:r_u32("section_name", "parametr_name") -- числовой параметр
       local parametr_name = ini:r_bool("section_name", "parametr_name") -- двоичный параметр
    end



    Pavel_Loktev, Или правки движка или костыли, вам какой?
    Сообщение отредактировал denis2000 - Вторник, 07.07.2020, 18:49
      Злобная реклама
    Вторник, 07.07.2020, 16:48
    Статус:
    Сообщений: 666
    Регистрация: 19.07.2013
    Российская Федерация  Pavel_Loktev
    Вторник, 07.07.2020, 19:10 | Сообщение # 7703
    Статус:
    Зевака:
    Сообщений: 10
    Награды: 0
    Регистрация: 02.09.2019

    Denis2000, желательно,что проще
      Злобная реклама
    Вторник, 07.07.2020, 19:10
    Статус:
    Сообщений: 666
    Регистрация: 02.09.2019
    Российская Федерация  sergej5500
    Вторник, 07.07.2020, 19:46 | Сообщение # 7704
    Статус:
    Новичок:
    Сообщений: 290
    Награды: 4
    Регистрация: 09.01.2017

    Цитата makdm ()
    Начни с биндеров сталкера и монстра. Метод death_callback


    Попробовал провести эксперимент.

    Исходная функция:

    if who:id() == db.actor:id() then
    xr_statistic.inc_killed_stalkers_counter()
    xr_statistic.set_best_monster(npc)
    end

    Попробовал написать так:

    if (who:id() == db.actor:id() or who:id() == get_story_object("remote_explosive_bomb_1")) then
    xr_statistic.inc_killed_stalkers_counter()
    xr_statistic.set_best_monster(npc)
    end

    Не вылетело. Но и не сработало. Как вместо db.actor:id() передать в функцию объект со стори ид remote_explosive_bomb_1? Объект - это бомба.
      Злобная реклама
    Вторник, 07.07.2020, 19:46
    Статус:
    Сообщений: 666
    Регистрация: 09.01.2017
    Российская Федерация  denis2000
    Вторник, 07.07.2020, 21:59 | Сообщение # 7705
    Время Альянса
    Статус:
    Ветеран:
    Сообщений: 4070
    Награды: 16
    Регистрация: 19.07.2013

    sergej5500, Естественно не сработает ведь who:id() - это число, а get_story_object возвращает объект, они никогда идентичны не будут. Для того чтобы получить id объекта по его стори_ид нужна функция get_story_object_id или получать ид объекта полученного при помощи get_story_object.
    Пробуйте так:
    Код
    if (who:id() == db.actor:id() or who:id() == get_story_object_id("remote_explosive_bomb_1")) then


    PS: И я что-то не уверен, что если НПС падет от взрывчатки, то колбек вернет в параметре who именно взрывчатку как объект.


    Pavel_Loktev, Например такое реализовано на движке SGM3.0

    Возможно аналог есть на других кастомных движках. Поищите.
    Сообщение отредактировал denis2000 - Среда, 08.07.2020, 00:40
      Злобная реклама
    Вторник, 07.07.2020, 21:59
    Статус:
    Сообщений: 666
    Регистрация: 19.07.2013
    Российская Федерация  Pavel_Loktev
    Среда, 08.07.2020, 01:07 | Сообщение # 7706
    Статус:
    Зевака:
    Сообщений: 10
    Награды: 0
    Регистрация: 02.09.2019

    Denis2000, спасибо
      Злобная реклама
    Среда, 08.07.2020, 01:07
    Статус:
    Сообщений: 666
    Регистрация: 02.09.2019
    Российская Федерация  sergej5500
    Среда, 08.07.2020, 08:03 | Сообщение # 7707
    Статус:
    Новичок:
    Сообщений: 290
    Награды: 4
    Регистрация: 09.01.2017

    Цитата denis2000 ()
    if (who:id() == db.actor:id() or who:id() == get_story_object_id("remote_explosive_bomb_1")) then


    В таком варианте статистика сработала.
      Злобная реклама
    Среда, 08.07.2020, 08:03
    Статус:
    Сообщений: 666
    Регистрация: 09.01.2017
    Российская Федерация  Winsor
    Среда, 08.07.2020, 10:02 | Сообщение # 7708
    Статус:
    Отмычка:
    Сообщений: 163
    Награды: 0
    Регистрация: 22.04.2020

    Цитата denis2000 ()
    Например такое реализовано на движке SGM3.0

    Как такое сделать на чистом движке ЗП (смена иконки по вызову)?
    Какие правки нужны? Есть ли костыль?
      Злобная реклама
    Среда, 08.07.2020, 10:02
    Статус:
    Сообщений: 666
    Регистрация: 22.04.2020
    Российская Федерация  denis2000
    Среда, 08.07.2020, 10:18 | Сообщение # 7709
    Время Альянса
    Статус:
    Ветеран:
    Сообщений: 4070
    Награды: 16
    Регистрация: 19.07.2013

    Winsor, Костыль заключается в том:
    1. Поправить конфиги элементов интерфейсных окон так, чтобы убрать надписи и иконку за пределы экрана (или сделать их нулевого размера). Файлы actor_menu.xml и actor_menu_16.xml.
    2. Отслеживать скриптом появление этих интерфейсных окон и вставлять в нужные поля свою информацию. Скрипт биндера актора метод update.
    3. Убрать подпись из диалоговых окон не возможно, поэтому нужно вместо имени ГГ в тег st_actor_name (файл st_characters.xml) что-то нейтральное.

    Полностью код не приведу, но знаю точно, что в моде "Путь во мгле" в это поле добавлялась динамически иконка ранга ГГ, а это на 90% то что вам и нужно.
    Сообщение отредактировал denis2000 - Среда, 08.07.2020, 10:21
      Злобная реклама
    Среда, 08.07.2020, 10:18
    Статус:
    Сообщений: 666
    Регистрация: 19.07.2013
    Российская Федерация  Pavel_Loktev
    Среда, 08.07.2020, 12:07 | Сообщение # 7710
    Статус:
    Зевака:
    Сообщений: 10
    Награды: 0
    Регистрация: 02.09.2019

    denis2000, а есть ли такой костыль на имя и фото, но для чистого зп?
      Злобная реклама
    Среда, 08.07.2020, 12:07
    Статус:
    Сообщений: 666
    Регистрация: 02.09.2019
    Поиск: