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

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

TREWKO,

level_name(level_id) - системное имя уровня по его номеру

level_id() - номер текущего уровня

switch_distance(<радиус>) - по идее установка радиуса переключения алайфа, но у меня не сработало, работало только изменение из конфига

 

Внятное имя уровня (не системное, а то, которое изображается на карте):

game.translate_string(string.lower(alife():level_name(level_id)))

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

Mechanic.92,

Как в ТЧ проверить, есть ли у актора кровотечение?

Читать сюда.

 

Я для кого тему делал?! :ny_z_9:

 

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

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

Привет всем. Скажите пожалуйста, почему неверна эта функция неверна:

function set_my_npc()
local soNPC = alife():story_object(006) --\берем волка
if soNPC then
local tT =  amk.read_stalker_params(soNPC)
if string.find(tT.custom,"esc_stone_lager") then  --\проверяем, есть ли непись на этом гулаге?
return 
end
tT.custom = "[smart_terrains]\nesc_stone_lager=true\n"
amk.write_stalker_params(tT,soNPC) --/ записываем
amk.add_spot_on_map(soNPC.id,"red_location", tT.custom) --\ставим метку на пда
local oNPC = level.object_by_id(soNPC.id)
if oNPC then
xr_gulag.resetJob(oNPC)
end
end
end

Я хотел, чтобы Волк пошел на гулаг esc_stone_lager. Вылета нету, но это действие гарантированно выносит непися в оффлайн. Как мне вернуть его в онлайн? Я пробовал switch_online(soNPC) - не выходит. Помогите пожалуйста.

 

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

Можно например назначить Волку иммунитеты от Сахарова. Или скриптом всё время биндить ему параметр health на 1.

Изменено пользователем кровоSTALKER
Ссылка на комментарий

Как их ему назначить?

Строгое предупреждение от модератора n6260
Через алл_спавн. В разделе даже есть статья о бесмертных НПС. Юзай поиск.

VODKA connected people...

aa074e181fba.jpg

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

подскажите пожалуйста, есть сталкер. У него вообще нет оружия.

Как это можно проверить для оффлайн-обьектов? или только если сталкер - gameobject (через итерацию инвентаря? или можно сразу проверить оружие в слотах 1 и 2 и если нет, то другого и не будет?) ?

 

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

(Неписи стреляют непрерывно, и у них вроде как не заканчивается, но подозреваю что есть какой-то ньюанс, который я упустил)

 

спасибо за внимание.

 

Сообщение от модератора n6260
Патронов у нпс должно быть больше чем на одну обойму. Хотя бы на один патрон. Иначе отстреляет обойму и все.

Строгое предупреждение от модератора n6260
Юзай заглавные буквы.
Ссылка на комментарий

Подскажите пожалуйста следующее: в теме "Справочник по функциям и классам" указано, что можно работать со слотами НПС,

но код вида

local PistolSlot = obj:item_in_slot(1)

local AutomaticSlot = obj:item_in_slot(2)

не срабатывает, ругается на item_in_slot:

[error]Expression : !m_error_code

[error]Function : raii_guard::~raii_guard

[error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp

[error]Line : 748

[error]Description : l:\stalker-cop\gamedata\scripts\ts_mod_cop.script:230: attempt to call method 'item_in_slot' (a nil value)

 

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

    for a=1,65534,1 do    -- полный перебор
        local obj = alife():object(a)
        if obj then
            
            if  IsStalker(obj) and obj ~= db.actor and obj:alive()  and is_object_online(obj) then    --только сталкеры, живые и с gamedata
                
                local PistolSlot = obj:item_in_slot(1)        --ругается :(
                local AutomaticSlot = obj:item_in_slot(2)
                
                if (PistolSlot and PistolSlot:id() == nil) and (AutomaticSlot and AutomaticSlot:id() == nil) then 
            
                -- тут спавним оружие и патроны
                end
            end
        end
    end

Спасибо за внимание.

PS: забыл указать версию: Зов Припяти, 1.6.02

Изменено пользователем Tonny
Ссылка на комментарий

Tonny, вот, как проверить, есть ли оружие в 1 и во 2-ом слоте:

local weapon_1 = db.actor:item_in_slot(1)
local weapon_2 = db.actor:item_in_slot(2)
if (db.actor:active_slot()==1 and weapon_1) and (db.actor:active_slot()==2 and weapon_2) then
--\тут спавним оружие и патроны
end

Теперь под себя подгоняй.

Изменено пользователем SkyLoader
Ссылка на комментарий

Tonny,

[error]Description : l:\stalker-cop\gamedata\scripts\ts_mod_cop.script:230: attempt to call method 'item_in_slot' (a nil value

local obj = alife():object(a)
...
local PistolSlot = obj:item_in_slot(1)        --ругается :(

Правильно ругается. Объект у тебя серверный, а пытаешься для него вызвать метод клиентского.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

SkyLoader

Как раз была проблема в адаптпции под другого сталкера :)

 

malandrinus

Спасибо, понял, помогло.

 

Вопрос N3: Для серверных обьектов можно получить информацию о том, есть ли у них оружие?

Вопрос N4: Насколько понимаю, для функции alife():create всё равно - серверный обьект или клиентский, так как передаётся его id, которое одинаковое, так?

Вопрос N5: Можно ли перебрать клиентские обьекты менее ресурсоёмко, чем через перебор всех 65534 серверных? Т.е. не через for i = 1,65534 do ....

 

Спасибо за внимание.

Изменено пользователем Tonny
Ссылка на комментарий

Tonny,перебираешь серверные объекты. Если объект существует и является оружием и его parent_id равно id твоего npc,то значит у этого npc имеется оружие.

4.Так.

5.Обычно клиентские объекты перебирают так - for k,v in pairs(db.storage) do...

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

Tonny,

Вопрос N3: Для серверных обьектов можно получить информацию о том, есть ли у них оружие?

Вопрос N5: Можно ли перебрать клиентские обьекты менее ресурсоёмко, чем через перебор всех 65534 серверных? Т.е. не через for i = 1,65534 do ....

3) перебор с поиском по родительскому id, как выше подсказали. Можно и по-другому. К примеру, при переходе в оффлайн запоминать ствол в нетпакете серверного объекта. Или вообще сохранять там весь инвентарь. Однако зачем это надо? В оффлайне неписи воевать не могут. Для того, чтобы в оффлайне что-то происходило, надо писать это самому, как это сделано в АМК.

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

 

Charsi,

5.Обычно клиентские объекты перебирают так - for k,v in pairs(db.storage) do...

Так можно перебрать не все, а только те, у которых есть логика.

 

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

Возможно это обсуждалось, но я не нашёл.

по какой причине возникает этот лог:

LUA error: ....r. - shadow of chernobyl\gamedata\scripts\_g.script:1196: bad argument #2 to 'format' (string expected, got nil)

87728-stalker.gif
Ссылка на комментарий

ФеНиКс, возможно, что ошибка в грамматике конфигов, ну и бывает в скриптах.

antreg, откуда ты знаешь, что только из за этого? Такой вылет может произойти везде.

Изменено пользователем SkyLoader
Ссылка на комментарий

ФеНиКс,

Вылет из-за допустимо возможного веса инвентаря нового торговца (создавал нового торговца, признавайся?). Переводится как: --невозможно ходить из-за веса. Не установлены должным образом значения допустимого веса для торговца или не назначен ему класс trader.

 

Если укажешь при каких обстоятельствах вылет и на какой версии ТЧ делаешь эксперименты, то будет более ясно. Предположительно, работаешь на чистом ТЧ без АМК. Очень характерный, в этом случае, вылет, если назначить торговцем простого НПС без присвоения ему класса трейдера и "нагрузить под завязку" хабаром и оружием.

Изменено пользователем antreg
Ссылка на комментарий

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

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

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

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

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

Войти

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

Войти
×
×
  • Создать...