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

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

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

методом :release() можно удалять только неживые объекты

Живые можно удалять так

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

Насколько этот кусочек стабилен и не вызовет ли он в дальнейшем проблем (вроде боя сейвов)?

mob:kill(mob)
alife():release(alife():object(mob:id()),true)

Весь Сталкер построен на апдейтах(обновление по таймеру с определенным интервалом), соответственно движку, что бы выполнить какое-то сложное действие над объектом, требуется один\несколько апдейтов. А твой код будет выполнен в один апдейт, соответственно метод kill не будет полноценно обработан для объекта, и он будет сразу удален. Если у тебя этот моб будет под гулаговой логикой или в моде используется какая-то схема, которая прописывает рестрикторы мобам - будет вылет или зависание в скриптах(= битый сейв).

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

Живые можно удалять так

Прошу прощения, может я некорректно задал вопрос, что-то перепутав.

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

 

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

соответственно метод kill не будет полноценно обработан для объекта, и он будет сразу удален

Такой код исправит положение?

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

if mob then

    local sim = alife()

    local sobj = sim:object(mob:id())

if sobj then

    sim:release(sobj.id, true)

end

end

 

New Anomalies 1.1 ☢☢☢ "Смерть-лампа" ☢☢☢ Дисраптор

Русификатор для игры Vendetta: Curse of Raven's Cry

Ссылка на комментарий
Только что, Jekyll сказал:

автор статьи утверждает обратное

Я тоже наслышан об этом, но с проблемами при удалении НПС не сталкивался, уменя в хр_эффектс такое есть:

function del (actor, npc) 
    alife():release(alife():object(npc:id()), true) 
end

Пока еще не вылетало.

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

@Jekyll не исправит. Нужно, как минимум, разрегистрировать его в смарт террейне, если он там зарегистрирован. Ещё хорошо бы отрегистрировать его в респаунере, который его создал, если если мод был респаунером создан. Ну и в остальных местах отрегистрировать, если он ещё где-то зарегистрирован.

  • Спасибо 1
Ссылка на комментарий
7 часов назад, Jekyll сказал:

Такой код исправит положение?

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

mob:kill(db.actor)
level.add_call(mob, function() return mob:alive() ~= false end, function() alife():release(alife():object(mob:id()),true) end))

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

Изменено пользователем AndreySol
  • Спасибо 1
Ссылка на комментарий
9 часов назад, Graff46 сказал:

Пока еще не вылетало.

Да и у меня, в общем-то, не вылетало, разве что несколько раз при использовании именно этого своего скрипта ловил такое:

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

Expression    : assertion failed
Function      : CALifeSimulator__release
File          : deep deep in space
Line          : 666
Description   : Object to release is a zero pointer

Стремно как-то.

 

1 час назад, AndreySol сказал:

Надо знать, что за монстров Вы будете удалять

По задумке - всех подряд, кто под "горячую руку" попадет: и НПС, и монстры... Короче, оружие "на каждый день". Не знаю, как к такому подходу отнесется движок - подозреваю, что у него может случится серьезное "несварение".

 

Кстати, появилось еще несколько вопросов, возможно нубских, но уж как есть:

1) в alife():release(alife():object(mob:id()),true) для чего это самое "true"?

2) в логе могут проскакивать записи вроде "! Invalid ogg-comment version, file:" или "- Critical: SMapLocation binded to non-existent object id". Первая отмечается в консоли красным цветом, вторая - зеленым. О чем в таких случаях говорит цвет записи?

3) насколько серьезны "- Critical: SMapLocation binded to non-existent object id" и "- Critical: CMapLocation::UpdateSpot binded to non-existent object id"? Возникает каждый раз, когда удаляется НПС (вторая изредка). Понимаю, что дело в метках, но как от этого избавиться - не знаю.

New Anomalies 1.1 ☢☢☢ "Смерть-лампа" ☢☢☢ Дисраптор

Русификатор для игры Vendetta: Curse of Raven's Cry

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

записи вроде "! Invalid ogg-comment version, file:"

Это в каком то звуковом файле не прописаны тэги.

 

1 час назад, Jekyll сказал:

Description   : Object to release is a zero pointer

Пока не встречал...

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

Народ, всем хай, как мне узнать ID своего (новосозданного через скрипт) НПСиса и дать ему денег?
У меня вылетает при выдачи денег. PS ЗП 1.6.02

Ссылка на комментарий
В 25.10.2017 в 20:37, Jekyll сказал:

Invalid ogg-comment version

 

В 25.10.2017 в 20:37, Jekyll сказал:

отмечается в консоли красным цветом

 

В 25.10.2017 в 20:37, Jekyll сказал:

О чем в таких случаях говорит

Комментарии в *.ogg файле отсутствуют или они неправильные. Как исправлять, смотри тут: https://modfaq.ru/Импорт_звука

Изменено пользователем aka_sektor
  • Спасибо 1
Ссылка на комментарий

Добрый день.

Скрипты совершенно не моя стихия, поэтому прошу вашей помощи.

В моде NLC7 столкнулся с проблемой спавна нужного НПС под текстурами.

Решение данного вопроса предлагается такое:

Прописать диалоги этого НПС кому нибудь другому и сделать следующее

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

Если случаются такие косяки с уходящими под текстуры НПС, то я применяю на этот случай простое решение:
В логе найти его название как он заспавнен, например в данном случае это rad_tramplin_glavn.
Ну и просто удалить его из игры, чтобы не мучался сам и не мучал игрока.

Прописать в любом скрипте функцию с произвольным названием. Например test в mike.script
Имя НПС вставить того, который глючит. В нашем случае это rad_tramplin_glavn

function test()
    misc.release_by_name("rad_tramplin_glavn")
end

Загрузить игру на нужной локации и ввести команду исполнения скрипта
В нашем случае это
flush !mike.test

НПС исчезнет навсегда, без убийства и падения репы ГГ.

Вот скрипт в который нужно это вставить - http://rgho.st/6ZlCvRDgL

Пожалуйста вставьте правильно предложенное выше.

И ещё одно:

Как ввести команду исполнения скрипта - где то напечатать её ?

 

Просьба снимается.

Сделал как написано, и в консоли прописал flush !mike.test

Вроде сработало.

Изменено пользователем shahvkit
Ссылка на комментарий
20 часов назад, PBAX сказал:

А как мне переменную вызвать? Просто в коде указать ее имя?

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

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

@Kirgudu 
С этим способом у меня вылетает.
attempt to index local 'npc' (a number value)

 

Ладно не хочу через скрипт спавнить вопрос изменяется, но суть остается.
Как мне заспавнить НПС через конфики т.е. заспавню его через сквад (не знаю можно-ли одного спавнить), как мне узнать его ИД и дать ему денег?

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

Всем привет. Есть какие-то способы спрятать оружие актору не считая bind_stalker.hide_weapon() ? bind_stalker.hide_weapon()  - прячет оружие слишком резко, отключается худ модели и анимация holster не наблюдается, слышен только звук. А вот restore_weapon() работает нормально.

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

Снимаю флаг  flUsedAI_Locations (в данном примере для предметов из ящиков, чтоб не проваливались)

local sobj_item     = alife():object( obj_itm.id )
local pk            = m_netpk.get( sobj_item )
local data          = pk:get()
data.object_flags   = bit_and( data.object_flags, bit_not( 128 ) ) -- снять флаг flUsedAI_Locations
pk:set( data )

Как выставить флаг обратно, так же скриптом?  (В побитовой математике не шарю.)

 

@TIGER_VLAD Можно попробовать, через имитацию нажатия клавиши (если есть такой функционал).

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

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

Только этот вариант и был на уме. Думал может есть попроще вариант.

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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