Перейти к содержанию

Рекомендуемые сообщения

 
 
3 часа назад, Emmis сказал:

а почему нет?

Ну ОК.


SWEAW Симулянтам можно прописать эксклюзивную логику, но поступать так сомнительно, по причине того, что такие сквады имеют рандомный состав НПС, как по количеству так и по составу. Для таких целей (тем более НПС игнорирующих атаки) лучше использовать специально сделанные для этого сквады.
Логика НПС требует наличия либо путей либо смартковеров, поэтому разбираться с all.spawn вам придется - это база (исключение составляет мод SGM 2.2, там логику НПС можно построить на использовании индексов левел-графов).

Изменено пользователем denis2000
  • Спасибо 1

Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Emmis что-то странное, киньте полный лог. Тут явно ошибка с симуляцией, но конкретнее я не понимаю. Как я понимаю, слетает функция проверки достижения актора симуляционным отрядом. А почему слетает? Причин, я думаю, может быть много. Можно попробовать постепенно удалять из спавна симуляционные объекты, пока не пройдет, чтобы найти примерную причину хотя бы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Всем еще раз привет.

Вот с таким логом вылетает SDK при попытке открыть параметры или переместить смарт после его создания на уже существующем графпоинте:

Спойлер

[error]Expression    : b
[error]Function      : X:\stalker_addon\sources\trunk\xrCore\Xr_ini.cpp
[error]File          : X:\stalker_addon\sources\trunk\xrCore\Xr_ini.cpp
[error]Line          : 703
[error]Description   : name[zaton_smart_terrain] already exist in section[d:\stcopsdk\sdk0.7fullwin64\x-ray_cop_sdk\editors\rawdata\levels\zaton.level]

Почти такой же лог при попытке зарегать в новом графпоинте новый смарт для создания, только вместо [zaton_smart_terrain] просто [zaton_terrain].

Имя регистрируемого смарта отличается от всех существующих в game_graphs.ltx.

Изменено пользователем SWEAW
Дополнение описания проблемы

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

SWEAW 

Можно проверить на дубли, открыв в текст. редакторе: rawdata\levels\level_name\spawn.part,
    имена объектов в строке:
        name                             = zat_b30_sr_control

ищешь нужное, исправляешь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Yara не помогло. Никаких дубликатов не нашел, как-то получилось создать новый графпоинт (при чем пару раз абсолютно рандомно вылетало на этапе самого размещения), бахнуть на нем смарт террейн (тоже несколько вылетов при попытке открыть параметры или переместить/повернуть) и даже открыть настройки последнего, но на этом все, потому что после нажатия на закрытие окна настройки стабильный вылет с тем же самым логом.

3 часа назад, SWEAW сказал:

 

  Лог (Скрыть контент)

[error]Expression    : b
[error]Function      : X:\stalker_addon\sources\trunk\xrCore\Xr_ini.cpp
[error]File          : X:\stalker_addon\sources\trunk\xrCore\Xr_ini.cpp
[error]Line          : 703
[error]Description   : name[zaton_smart_terrain] already exist in section[d:\stcopsdk\sdk0.7fullwin64\x-ray_cop_sdk\editors\rawdata\levels\zaton.level]

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

SWEAW покажи путь к сдк.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

AfterGlow проводник: "D:\STCoP SDK\SDK 0.7 Full Win64\X-Ray_CoP_SDK\editors"

На всякий случай еще то, что прописывал в параметрах конвертера для декомпила локаций, мало ли, может там накосячил где-то:

converter.ini:
[3870_config]:3456_config
$game_data$            = D:\STCoP SDK\SDK 0.7 Full Win64\X-Ray_CoP_SDK\editors\gamedata\
$game_levels$            = D:\STCoP SDK\SDK 0.7 Full Win64\X-Ray_CoP_SDK\editors\gamedata\levels\
spawn_version = cop

fsconverter.ltx:
$sdk_root$                    = false| false| D:\STCoP SDK\SDK 0.7 Full Win64\X-Ray_CoP_SDK\editors\

Но как бы никакой киррилицы, системных дисков и папок Program Files

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

SWEAW убери пробелы в пути

  • Хабар 1
  • Спасибо 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

AfterGlow поверить не могу, что дело было именно в такой банальщине.. убрал пробелы, СДК наконец-таки съел настроенный смарт без вылета. Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Доброго времени суток! 
Как добавить возможность поговорить со всеми сталкерами из отряда?
Чтобы игрока не отправляли со всеми вопросами к главному:u1F601:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Stalker Tom Измените дефотные настройки схем в gulag_general.script.


Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Господа, подскажите гайд / инструкцию, который можно почитать, как добавить в игру, в данном случае в ЗП, новые боеприпасы? Ну, как новые, 12х76 "Дротик" вырезанный хочу в игру добавить, для начала. И улучшенный 7,62х54 7Н14 из ТЧ/ЧН. Для обучения, я думаю, пойдёт.

ЗЫ. от А до Я, начиная от модели, иконки и описания, до настройки в конфиге, прописке этого патрона в нужных файлах, чтобы игра его читала и не вылетала, прописке торговцам, в тайники и т.д.

Изменено пользователем D4sh4

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Всем доброго времени суток. Подскажите, помню, есть какой-то параметр, влияющий как бы на "размер" актора. С его помощью можно настроить, например, возможность обходить нпс стоящих в проходах (и вообще подходить к ним вплотную). Также по всей видимости этот параметр помогает актору лазать по некоторым неудобным fake-лестницам.
Напомните, пожалуйста, что за параметр и где его менять.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Gerbys actor.ltx

ph_box0_center                                                 = 0.0,  0.9,  0.0
ph_box0_size                                                 = 0.35, 0.9,  0.35
ph_box1_center                                                 = 0.0,  0.75,  0.0
ph_box1_size                                                 = 0.35, 0.75,  0.35
ph_box2_center                                                 = 0.0,  0.6,  0.0
ph_box2_size                                                 = 0.35, 0.6,  0.35

0 - полный рост, 1 - присяд, 2 - полный присяд

Изменено пользователем denis2000
  • Мастер! 1

Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

И снова всем привет.

Каким образом можно в ЗП прописать обновление ассортимента у торговцев, привязанное не к каждой загрузке сохранения (ибо это очевидно абузится), а к периоду времени, к примеру, раз в несколько игровых часов или дней. Пытался гуглить, какие-то отголоски упоминания подобной системы вроде как есть в разных обсуждениях Дед Эир, Аномали и даже где-то есть тема про ОП-2.2, однако ничего существенного там найти не удалось. А скачивать десятки гигабайт ради поиска нескольких условно текстовых файлов крайне накладно по множеству причин. Ну и ограничивается ли дело только скриптами да конфигами, или для этого нужно еще и в исходниках движка ковыряться?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

SWEAW Мне кажется это делается в файле trade_manager.script в функции update.


Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

denis2000 насколько я понял, в update основную роль здесь играет этот кусок:

Спойлер

function update(npc)
    local tt = trade_manager[npc:id()]

    if tt == nil then
        printf("TRADE [%s]:  tt is nil", npc:name())
        return
    end

    if tt.update_time ~= nil and tt.update_time < time_global() then
        return
    end
    tt.update_time = time_global() + 3600000

    local str = xr_logic.pick_section_from_condlist(db.actor, npc, tt.buy_condition)
    if(str=="" or str==nil) then
        abort("Wrong section in buy_condition condlist for npc [%s]!", npc:name())
    end
    if tt.current_buy_condition ~= str then
        --'printf("TRADE [%s]: buy condition = %s", npc:name(), str)
        npc:buy_condition(tt.config, str)
        tt.current_buy_condition = str
    end

    str = xr_logic.pick_section_from_condlist(db.actor, npc, tt.sell_condition)
    if(str=="" or str==nil) then
        abort("Wrong section in buy_condition condlist for npc [%s]!", npc:name())
    end
    if tt.current_sell_condition ~= str then
        printf("TRADE [%s]: sell condition = %s", npc:name(), str)
        npc:sell_condition(tt.config, str)
        tt.current_sell_condition = str
    else
        printf("TRADE [%s]: current = %s   sell = %s", npc:name(), tostring(tt.current_sell_condition), tostring(str))
    end

    str = tonumber(xr_logic.pick_section_from_condlist(db.actor, npc, tt.buy_item_condition_factor))
    if tt.current_buy_item_condition_factor ~= str then
        npc:buy_item_condition_factor(str)
        tt.current_buy_item_condition_factor = str
    end

    if tt.buy_supplies == nil then
        return
    end

    str = xr_logic.pick_section_from_condlist(db.actor, npc, tt.buy_supplies)
    if(str=="" or str==nil) then
        abort("Wrong section in buy_condition condlist for npc [%s]!", npc:name())
    end
    if tt.current_buy_supplies ~= str then
        if tt.resuply_time ~= nil and tt.resuply_time < time_global() then
            return
        end
        --'printf("TRADE [%s]: buy_supplies = %s", npc:name(), str)
        npc:buy_supplies(tt.config, str)
        tt.current_buy_supplies = str
        tt.resuply_time = time_global() + 24*3600000
    end
end

Мол, обновлять (что-то?) каждый игровой час, а ассортимент каждые игровые сутки. Но еще там присутствует две секции save и load, где участвуют уже resuply_time и update_time:

Спойлер

function save(obj, packet)
    local tt = trade_manager[obj:id()]
    set_save_marker(packet, "save", false, "trade_manager")
    --' Сохраняем присутствует ли инициализированная торговля в принципе.
    if tt == nil then
        printf("TRADE SAVE [%s]: ignored", obj:name())
        packet:w_bool(false)
        return
    else
        packet:w_bool(true)
    end

    packet:w_stringZ(tt.cfg_ltx)

    printf("TRADE SAVE [%s]: current_buy_condition = %s", obj:name(), tostring(tt.current_buy_condition))
    if tt.current_buy_condition == nil then
        packet:w_stringZ("")
    else
        packet:w_stringZ(tt.current_buy_condition)
    end

    printf("TRADE SAVE [%s]: current_sell_condition = %s", obj:name(), tostring(tt.current_sell_condition))
    if tt.current_sell_condition == nil then
        packet:w_stringZ("")
    else
        packet:w_stringZ(tt.current_sell_condition)
    end

    printf("TRADE SAVE [%s]: current_buy_supplies = %s", obj:name(), tostring(tt.current_buy_supplies))
    if tt.current_buy_supplies == nil then
        packet:w_stringZ("")
    else
        packet:w_stringZ(tt.current_buy_supplies)
    end

    local cur_tm = time_global()

    if tt.update_time == nil then
        packet:w_s32(-1)
    else
         packet:w_s32(tt.update_time - cur_tm)
    end

    if tt.resuply_time == nil then
        packet:w_s32(-1)
    else
         packet:w_s32(tt.resuply_time - cur_tm)
    end
    set_save_marker(packet, "save", true, "trade_manager")
end

function load(obj, packet)
    set_save_marker(packet, "load", false, "trade_manager")
    local a = packet:r_bool()
    if a == false then
        printf("TRADE LOAD [%s]: ignored", obj:name())
        return
    end

    trade_manager[obj:id()] = {}

    local tt = trade_manager[obj:id()]

    tt.cfg_ltx = packet:r_stringZ()
    printf("TRADE LOAD [%s]: cfg_ltx = %s", obj:name(), tostring(tt.cfg_ltx))

    tt.config = ini_file(tt.cfg_ltx)

    a = packet:r_stringZ()
    printf("TRADE LOAD [%s]: current_buy_condition = %s", obj:name(), tostring(a))
    if a ~= "" then
        tt.current_buy_condition = a
        obj:buy_condition(tt.config, a)
    end

    a = packet:r_stringZ()
    printf("TRADE LOAD [%s]: current_sell_condition = %s", obj:name(), tostring(a))
    if a ~= "" then
        tt.current_sell_condition = a
        obj:sell_condition(tt.config, a)
    end

    a = packet:r_stringZ()
    printf("TRADE LOAD [%s]: current_buy_supplies = %s", obj:name(), tostring(a))
    if a ~= "" then
        tt.current_buy_supplies = a
    end

    local cur_tm = time_global()

    a = packet:r_s32()
    if a ~= -1 then
        tt.update_time = cur_tm + a
    end

    a = packet:r_s32()
    if a ~= -1 then
        tt.resuply_time = cur_tm + a
    end
    set_save_marker(packet, "load", true, "trade_manager")
end

И вот что в них происходит, у меня вообще, честно говоря, не выходит переварить, понимание скриптов пока очень сложно дается. Если разбираешься, можешь пожалуйста пояснить, где подвох?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
45 минут назад, SWEAW сказал:

там присутствует две секции save и load, где участвуют уже resuply_time и update_time

Это функции записи/восстановления переменных скрипта в файл/из файла сохранения. В частности сохраняется и загружается время следующего апдейта resuply_time и update_time, а также текущая секция снабжения торговца current_buy_supplies.

47 минут назад, SWEAW сказал:

обновлять (что-то?) каждый игровой час,

Не игровой, а час реального времени. Обновляются коэффициенты продажи/покупки, а также фактор состояния товара покупаемого торговцем (если они отличаются от параметров которые хранятся в самом скрипте).
А вот снабжение торговца проверяется иначе:
Если секция снабжения торговца изменилась, то проверяется превышает ли текущее реальное время resuply_time (сутки реального времени после последнего апдейта снабжения) и только в этом случае происходит снабжение и обновление времени resuply_time.


Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
1 час назад, denis2000 сказал:

Если секция снабжения торговца изменилась, то проверяется превышает ли текущее реальное время resuply_time (сутки реального времени после последнего апдейта снабжения) и только в этом случае происходит снабжение и обновление времени resuply_time.

То есть, если, условно, поменять global_time на CTime (она же вроде отвечает за игровое время?), будет зависимость именно от времени в игре?
И еще остается проблема с полным игнором игрой этих самых зависимостей в реальных часах, а вместо этого обновлением после каждой загрузки сейва. Пробовал глядеть файлы xr_s и bind_trader, потому что в первом есть функция on_game_load, а во втором, очевидно, слово trader, но дальше этих совпадений цепочку зависимостей продлить к сожалению не удалось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
4 часа назад, SWEAW сказал:

То есть, если, условно, поменять global_time на CTime (она же вроде отвечает за игровое время?), будет зависимость именно от времени в игре?

Да, только game.CTime() и формат времени сам совершенно иной! Просто заменить не получиться.

4 часа назад, SWEAW сказал:

И еще остается проблема с полным игнором игрой этих самых зависимостей в реальных часах, а вместо этого обновлением после каждой загрузки сейва.

Не знаю есть ли такая проблема в принципе и чем она вам мешает, ведь в любом случае, для начала должна секция снабжения переключиться, а уж потом время проверяется.


Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Здравствуйте. Пока пол года не занимался модом, вышла новая версия open xray и интересный мне оружейный пак. Старый оружейный пак и старую версию open xray удалил. При переносе мода на новое вылетает с таким логом в конце загрузки:

[error] Expression    : <no expression>
[error] Function      : handler_base
[error] File          : D:\a\xray-16\xray-16\src\xrCore\xrDebug.cpp
[error] Line          : 860
[error] Description   : segmentation fault

Изменено пользователем Skala

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
5 часов назад, denis2000 сказал:

Да, только game.CTime() и формат времени сам совершенно иной! Просто заменить не получиться.

Попробовал заменить time_global() на game.time(), ибо вычитал на АМК-форуме, что оно тоже возвращает время с начала игры в миллисекундах, то есть размерность и тип величины одинаковые, только время уже именно игровое, что, по идее, должно было сработать, но по итогу не сработало и ассортимент перестал обновляться вообще, хотя вылетов тоже не было.

5 часов назад, denis2000 сказал:

Не знаю есть ли такая проблема в принципе и чем она вам мешает

Это огромная проблема и мешает она очень сильно, потому что, как я в исходном посте объяснял, это оставляет возможность абузить торговцев через сейв-лоад, а абузы, даже потенциальные, это, как минимум, не очень хорошо.

5 часов назад, denis2000 сказал:

для начала должна секция снабжения переключиться, а уж потом время проверяется.

Как тогда можно поменять порядок проверки на обратный? Ведь получается смысла в проверке времени нет, когда на любом ф5-ф9 первой обновляется секция снабжения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

SWEAW Вам не порядок проверки или систему отсчета нужно менять, вам нужно искать причину того, что проверка не работает.


Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

 


Дополнено 30 минуты спустя

Как сменить цвет иконки перехода на другую локацию?

 

Изменено пользователем Kisel_s_Molinkou

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
В 31.05.2024 в 12:32, Kisel_s_Molinkou сказал:

Как сменить цвет иконки перехода на другую локацию?

В файле map_spots_***.xml изменить параметры RGB у требуемой метки.


Путь во мгле. Связь времен.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   1 пользователь онлайн