Перейти к контенту
Halford

[SoC] Ковыряемся в файлах

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

15 часов назад, mole venomous сказал:

Теоретически, может ли моб, заспауненный вот так:

Для того, чтобы моб никуда не мог рвануть со своей локации  - ему в его кастомдате ( именно в файле кастомдаты при создании моба, а не в файле логики) должна быть прописана секция

[smart_terrains]

имя_смарта  = {кондлист условий, по которым непись находится в этом смарте}
Тогда логику непися определит логика смарта.
Конечно же, чтобы нпс "никуда не ушел", тоже есть условия -  смарт должен при создании непися существовать на локации спавна непися , быть открытым и не быть заполнен одними эксклюзивами. 
Так же в нем должно хватать работ для всех нпс, кому этот смарт "назначен" , и если этому уникальному нпс нужна какая-то уникальная работа - она должна существовать в списке работ смарта.

Или же

[smart_terrains]

none  = true 
Тогда непись должен выполнять персональную логику. Она тоже, конечно же, должна существовать - со всеми путями, определенными в логике.

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

Да - все вышеперечисленное верно,  если скрипты, обрабатывающие логику неписей, не были модифицированы специальным образом, чтоб учитывать всякие нюансы. 

  • Согласен 1
  • Полезно 1

След от кругов на воде - это тоже след (с)

Ссылка на комментарий
4 часа назад, dsh сказал:

это никак не зависит от движка. Эту секцию только скрипты используют. Т.ч. все зависит от этих скриптов. 

Я имел в виду не сам движок, конечно, а набор скриптов к нему в комплекте. Может там нечтение секции смарта из файла логики пофиксили...

Сталкер - наше всё!

Ссылка на комментарий
4 часа назад, dsh сказал:

непись выполнял логику из custom_data, а потом его посылали в смарт

Похоже на мой случай...

Здесь могла быть ваша реклама.

Ссылка на комментарий
7 часов назад, dsh сказал:

Я сталкивался с чудными схемами, когда непись выполнял логику из custom_data, а потом его посылали в смарт

А вот вопрос тогда: получается, что "посылали в смарт" - это хотелка мододела, не? Если НПС не приписан к смарту и есть логика Волкера, не должен он никуда идти, разве нет?

Сталкер - наше всё!

Ссылка на комментарий
39 minutes ago, AndrewMor said:

это хотелка мододела, не?

Это кривые руки мододела. 

 

39 minutes ago, AndrewMor said:

Если НПС не приписан к смарту и есть логика Волкера, не должен он никуда идти, разве нет?

Кому должен? Одно с другим никак не связано. Не, если у тебя в скриптах сделано, что бы волкеров в смарт не принимали, тогда не должен. А если нет, то что должно этому помешать? 

Ссылка на комментарий
8 минут назад, dsh сказал:

в скриптах сделано, что бы волкеров в смарт не принимали, тогда не должен. А если нет, то что должно этому помешать?

 

8 минут назад, dsh сказал:

Это кривые руки мододела.

Вот здесь до меня доходит по тихой грусти. Заодно вопросик. Если гулагу потребовалось население, он дёргает непися. Если подходящих на этой локации нет, придут с другой. И вот вопрос - НПС выберет ближайший к себе переход из возможных, что бы добраться на локу с гулагом?

Здесь могла быть ваша реклама.

Ссылка на комментарий
11 минут назад, dsh сказал:

Кому должен?

Я может неправильно объяснил. Есть непись, у него в кастом-дате смарт_террейн = ноне, и логика - стоять на точке ( или идти по пути, если конечно, нет на этом пути рестров, в которые заходить нельзя). В таком разе он должен тупо выполнять свою работу и никуда от нее не убегать (тем более, на другую локацию). Или я что-то не так понимаю?. Коль так, проясни тонкости, плз.

  • Согласен 1

Сталкер - наше всё!

Ссылка на комментарий
29 минут назад, AndrewMor сказал:

в кастом-дате смарт_террейн = ноне

Я уже склоняюсь к тому, что это не желательный, а обязательный пар-тр для чела с персональной логикой при работе с двиглом ОГСР. На ванили этот параметр работает, только если указан в оллспаун и в то же время я не замечал, что бы мобы, заспавненые скриптом с записью в кастомдату, дислоцировались в гулаги

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

Здесь могла быть ваша реклама.

Ссылка на комментарий
38 minutes ago, mole venomous said:

Если гулагу потребовалось население, он дёргает непися.

Гулаг ничего не дергает. Движок периодически предлается каждого моба со smart_terrain_id == 65535 каждому смарту. Если смарт ответил согласием, движок меняет у этого моба smart_terrain_id на id этого смарта. На этом работа движка закончена. А дальше уже смарт и гулаг работаются с тем, что им предложено.

 

40 minutes ago, mole venomous said:

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

НПС ничего не выбирает. Как движок ему путь построит, так и пойдет. Эмпирически у меня сложилось мнение, что движок строит максимально короткий путь.

 

40 minutes ago, AndrewMor said:

у него в кастом-дате смарт_террейн = ноне

В этом случае смарты таких не принимают, поэтому и убегать ему некуда. Правда наличие в кастомной дате


[smart_terrain]

none = true

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

 

29 minutes ago, mole venomous said:

а обязательный пар-тр для чела с персональной логикой при работе с двиглом ОГСР

Двигатель не имеет значение. Оригинальный движок работает точно так же.

 

30 minutes ago, mole venomous said:

На ванили этот параметр работает, только если указан в оллспаун

Это не так. Работает всегда. Но см. мое замечание выше. Никаких отличий между оригинальным движком и OGSR в этом плане нет.

 

  • Нравится 2
  • Полезно 2
Ссылка на комментарий

@dsh, Благодарю, всё понятно расписал и три вопроса разом закрылись. А то часто много противоречивой инфы или размазано всё на сорок страниц...

Изменено пользователем mole venomous
  • Согласен 1

Здесь могла быть ваша реклама.

Ссылка на комментарий
Скрытый текст

---Скрипт---

local kits = {
    [1] = "sewing_weaplinght_",
    [2] = "sewing_weapweight_",
    [4] = "sewing_weapnew_",
    [6] = "sewing_outfit_"
}

function patch_repair(obj)
    if obj then
    local sect = obj:section()
    local num
    for k,v in pairs(kits) do
    if string.find(sect,v) then
    num = k
    break
end
end
    if num then
    local cond = math.ceil(obj:condition()*10)
    start_repair_out(cond,num)
end
end
end

function start_repair_out(cond,num)
    local itm = db.actor:item_in_slot(num)
    local kit = kits[num]
    if itm ~= nil then --// проверта что в слоте есть ITEM
    alife():release(alife():object(slot:num()), true) --/ удаляем обьект
    libery_mod.actor_random_devices()    --// тут спавним (Ран.кол.запчастей)
end
    local snd_obj = xr_sound.get_safe_sound_object([[interface\inv_repair_kit]])
    snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)    
    local s = cond-2
    local tex_s = ""
    if s > 0 then
    tex_s = "Осталось использований: "..s/2
    create_repkit(kit..s)
    else
    tex_s = "Комплект использован полностью."
end
    local text = "[d_cyan]Разбор окончен!\\n%c[default]"..tex_s
    send_tip(text)
    else
    send_tip("[d_red]Разбор невозможен!\\nОтсутствует объект для разбора!")
    create_repkit(kit..cond)
end
end

--// ----------------------------------------------
function send_tip(news_text)
    local snd = xr_sound.get_safe_sound_object([[device\pda\pda_news]])
    snd:play(db.actor, 0, sound_object.s2d)
    local msg = "%c[white]Разбор\\n".."%c"..news_text
    db.actor:give_game_news(msg, "ui\\ui_iconsTotal", Frect():set(249,940,83,47), 0, 4000)
end

function create_repkit(section)
    if system_ini():section_exist(section) then
    alife():create(section,db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())
end
end

 

----LTX----

[sewing_outfit_10]:conserva
visual                = new\repair\item_repair.ogf
description            = 1
inv_name            = 1
inv_name_short            = 1
inv_weight            = 0
cost                = 0
inv_grid_width            = 1
inv_grid_height            = 1
inv_grid_x            = 25
inv_grid_y            = 39
eat_health            = 0
eat_satiety            = 0
eat_power            = 0
eat_radiation            = 0
wounds_heal_perc        = 0
eat_portions_num        = 1
animation_slot            = 4
hud                = wpn_vodka_hud
[sewing_outfit_8]:sewing_outfit_10
condition            = 0.8
inv_name            = 2
inv_name_short            = 2
[sewing_outfit_6]:sewing_outfit_10
condition            = 0.6
inv_name            = 3
inv_name_short            = 3
[sewing_outfit_4]:sewing_outfit_10
condition            = 0.4
inv_name            = 4
inv_name_short            = 4
[sewing_outfit_2]:sewing_outfit_10
condition            = 0.2
inv_name            = 5
inv_name_short            = 5

 

----Вылет----

Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: ...ü ×åðíîáûëÿ\gamedata\scripts\bind_stalker_ext.script:32: attempt to index global 'axr_repair_out' (a nil value)

Парни СОС помогите кто-нибудь. В чем ошибка?

Пытаюсь реализовать разбор каждого слота по отдельности на запчасти.

Ссылка на комментарий
34 минуты назад, Colder сказал:

attempt to index global 'axr_repair_out' (a nil value)

Синтаксическая ошибка в скрипте. Проверь синтакс-чекером или луа-плагином в notepad++.

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

Ссылка на комментарий

@naxac, да уже сделал. Все работает. Спасибо!

@naxac,  Хотя нет все равно не то. Теперь анимация перестала проигрываться и не приходит смс о том сколько применений осталось!

Скрытый текст

local kits = {
    [1] = "sewing_weaplinght_",
    [2] = "sewing_weapweight_",
    [4] = "sewing_weapsuper_",
    [6] = "sewing_outfit_"
}

function patch_repair(obj)
    if obj then
    local sect = obj:section()
    local num
    for k,v in pairs(kits) do
    if string.find(sect,v) then
    num = k
    break
end
end
    if num then
    local cond = math.ceil(obj:condition()*10)
    start_repair_out(cond,num)
end
end
end

function start_repair_out(cond,num)
    local itm = db.actor:item_in_slot(num)
    local kit = kits[num]
    if itm ~= nil then
    libery_mod.actor_random_devices()
    alife():release(alife():object(itm:id()), true)
    local snd_obj = xr_sound.get_safe_sound_object([[item_sounds\inv_repair_sewing]])
    snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)    
    local s = cond-2
    local tex_s = ""
    if s > 0 then
    tex_s = "Осталось использований: "..s/2
    create_repkit(kit..s)
    else
    tex_s = "Комплект использован полностью."
end
    else
    send_tip("[d_red]Разбор невозможен!\\nОтсутствует объект для разбора!")
    create_repkit(kit..cond)
end
end

--// ----------------------------------------------
function send_tip(news_text)
    local snd = xr_sound.get_safe_sound_object([[device\pda\pda_news]])
    snd:play(db.actor, 0, sound_object.s2d)
     local msg = "%c[white]Разбор\\n".."%c"..news_text
    db.actor:give_game_news(msg, "ui\\ui_iconstotal", Frect():set(332,423,83,47), 0, 4000)
end

 

А ческер пишет что все нормально

Ссылка на комментарий
11 часов назад, mole venomous сказал:

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

Да-да-да, именно так. Выходит, и в ОГСР также скриптовая обвязка работает?

 

11 часов назад, dsh сказал:

Если позже определенного момента, то не сработает.

Позже какого момента? Если НПС уже назначена работа в гулаге?

Сталкер - наше всё!

Ссылка на комментарий

@dsh, Круто!!! Гран мерси за столь подобное разъяснение!

 

Резюмируя: alife():create() создает НПС, и до выполнения следующей строчки скрипта (например, привязка к смарту), НПС уже может быть назначена работа в свободном смарте. Так?

 

Выходит, чтобы спавнить НПС с привязкой к смарту, нужно модифицировать скрипт, так? Это, так понимаю, единственное правильное решение. Или все-таки правка движка разумнее?

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

Сталкер - наше всё!

Ссылка на комментарий

@AndrewMor
1) да, только не работа - а может быть назначен любой смарт, согласившийся непися принять. И непись туда пойдет - а вот работу там он получит только тогда, когда дойдет.
2) не обязательно ничего модифицировать - можно просто создать для этого НПС отдельную секцию, там прописать путь к файлу кастомдаты ( именно она будет в таком случае использоваться в alife():create()), и уже в этой кастомдате указать либо конкретный смарт для НПС, либо none = true
Именно это хотел донести @dsh,  - чтобы уже в момент работы alife():create() была задана правильная ( нужная разработчику ) кастомдата
3) тем, про что написал ДиШ - движок не занимается. Это в скриптах.

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

След от кругов на воде - это тоже след (с)

Ссылка на комментарий
22 минуты назад, Okichi сказал:

да, только не работа - а может быть назначен любой смарт, согласившийся непися принять.

Согласен. Я и имел в виду не саму работу, а смарт, который берет НПС к себе.

 

22 минуты назад, Okichi сказал:

не обязательно ничего модифицировать - можно просто создать для этого НПС отдельную секцию, там прописать путь к файлу кастомдаты ( именно она будет в таком случае использоваться в alife():create()), и уже в этой кастомдате указать либо конкретный смарт для НПС, либо none = true

Из-за того и весь этот разговор. Есть к примеру в АМК такой скрипт. Назначение логики скриптом, но присобачить принадлежность НПС к конкретному смарту не выходит. Вокруг этого не раз дискуссии велись на страницах форума, и многие спрашивали: как скриптом привязать НПС к конкретному смарту (или не привязывать вообще). Вот теперь dsh подробно расписал механизм, а именно этого и не хватало многим для понимания процесса. А в ванили, и похоже, в более продвинутых движках (типа ОГСР), скриптовая обвязка не менялась. Ведь человек-то не просто так спрашивал.

 

В любом случае, теперь понятен механизм!!!

Изменено пользователем AndrewMor
  • Согласен 1

Сталкер - наше всё!

Ссылка на комментарий

Скажите, а может быть у НПС несколько секций meet? По типу для walker1 - meet1, walker2 - meet2. Пару дней уже мучаюсь с этим конструктором. Не хочет НПС отрабатывать свою логику и все тут...

Ссылка на комментарий

@Muzafir, ничего не понятно, но жутко интересно :biggrin:

Скрытый текст

 

Условно:

[walker@1]

meet = meet@1

....

[walker@2]

meet = meet@2

 

[meet@1]

...

[meet@2]

...

 

Посмотри как Крот на Агропроме сделан, например.

  • Спасибо 1
Ссылка на комментарий

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

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.

AMK-Team.ru

×
×
  • Создать...