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

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

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

_zero_cool_ сейчас попробовал, но возникла проблема-оба уровня имеют одинаковый номер 22 -

323344.jpg

и соответственно не хотят подключаться.

Можешь подсказать как это исправить?

 

_zero_cool_ ай, протупил. Он из левого окна в правое переносит, а я наоборот пытался.

Изменено пользователем @"StreloK"

Prefiero morir de pie, que vivir siempre arrodillado.
 

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

_zero_cool_

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

Freedom

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

_zero_cool_ От куда ты такое взял?

@"StreloK" Эта прога для сборки лок к ЗП. Когда-то давно тоже пробовал ей подключить к ТЧ пару локаций (не помню в чем изюм, не создается какой-то файл)...короче думаю понятно..

Мой архив

Сталкером не занимаюсь.

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

Призрак

Можно ли узнать попал ли актор в какой нибудь спейс?

А в чём проблема? Пишем:

local actor_v_zone = npc_in_zone(db.actor, zone)

где zone - это restrictor, который надо проверить.

Если надо узнать, входит ли actor вообще хоть в какой-нибудь restrictor, то для этого надо перешивать class_registrator.script и возиться с биндерами, если надо - напишу готовый вариант, сам только что сделал такое у себя.

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

_Призрак_

У разных категорий зон во первых отличаются названия:

вот например список зон из стораджа одного NPC

bar_arena_restrictor,bar_dolg_bunker_restrictor,camp_fire_0000,camp_fire_0001,ca
mp_fire_0002,camp_fire_0003,camp_fire_0004,camp_fire_0005,mil_camp_fire_res_0002

Как видишь тут не так уж сложно отделить парсингом строки рестрикторы от аномалий.

Во вторых, никто не отменял возможность применить к юзердате зоны метод section() (или section_name()) и узнать что это - smart_terrain, space_restrictor или zone_xxx (аномалия).

----------------------------------------------

Полтергейст

Не npc_in_zone(db.actor, zone), а

utils.npc_in_zone(db.actor, db.zone_by_name[sZoneName])

Изменено пользователем Garry_Galler
Ссылка на комментарий
Не npc_in_zone(db.actor, zone), а

utils.npc_in_zone(db.actor, db.zone_by_name[sZoneName])

Это одно и то же. При вызове npc_in_zone(db.actor, zone) zone - клиентский объект restrictor'а, а не его имя. При таком обращении

db.zone_by_name[sZoneName]

мы как раз получим этот объект из таблицы.

Если "слепить", то получится так:

local zone = db.zone_by_name[sZoneName]
local actor_v_zone = npc_in_zone(db.actor, zone)

А если нам нужно имя restrictor'а, в котором находится actor, то

local inside_zones = {}
for name, zone in pairs(db.zone_by_name) do
  if npc_in_zone(db.actor, zone) == true then
    inside_zones[name] = true
  else
    inside_zones[name] = false
end

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

Полтергейст

Мое уточнение было сугубо практическим: если нужно узнать находится ли ГГ в определенном рестрикторе, то обратиться к его имени (которое имеется в allspawn), куда проще, чем получить его объект.(разработчики сталкера, - если глянуть скрипты, - делали именно так). При переборе таблицы db.zone_by_name уже не имеет значения данный нюанс, так как по любому в переменных-итераторах key, value будут и имя и юзердата зоны.

ЗЫ:npc_in_zone() это же не глобальная функция из _g.script , а ты уже вторично забываешь указать модуля, в котором она находится.

Это тоже было причиной моего уточнения.

--------------------------------

Кстати забыл добавить: смарт терейны находятся в табличке db.smart_terrain_by_id - отдельно от рестрикторов.

Изменено пользователем Garry_Galler
Ссылка на комментарий
ЗЫ:npc_in_zone() это же не глобальная функция из _g.script , а ты уже вторично забываешь указать модуля, в котором она находится.

:) У меня эта функция как раз глобальная из _g.script (перенёс для удобства), вот и написал по привычке.

 

смарт терейны находятся в табличке db.smart_terrain_by_id - отдельно от рестрикторов

В таблице рестрикторов они тоже есть - в биндере смарта есть вызов db.add_zone()

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

А вот еще какой у меня есть вопрос. Почему иногда игра вылетает вот с таким логом?: [error]Description : ...:\stalker Зов Припяти\gamedata\scripts\_sdata.script:99: attempt to index field '?' (a nil value)

99 строка скрипта _сдата:

local test = db.storage[zone:id()].active_scheme

Притом я не могу понять с какого ляда это происходит.

Объект всегда в онлайне

Изменено пользователем _Призрак_

Freedom

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

_Призрак_

Тут все предельно просто- ты к обратился к полю db.storage[zone:id()], которого в таблице нет. Поэтому перед тем как обратиться к какому нибудь табличному полю объекта всегда проверяй и существование объекта и поля:

if zone and db.storage[zone:id()] and db.storage[zone:id()].active_scheme then

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

Хех, только что нашёл решение проблемы обхода аномалий. Просто им нужно присваивать restrictor_type = 2 с помощью net_packet'ов при спавне. Тогда они автоматически добавляются движком в рестрикторы ко всем npc.

 

_Призрак_

Перед этой строкой напишите так:

if db.storage[zone:id()] == nil then
  db.storage[zone:id()] = {}
end

Вылет должен исчезнуть.

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

Можно узнать Сколько патрон в Стволе

Узнать их секцию

И так ,по мелочи

Не более

Вот у меня вопрос - как узнать секцию?

Ссылка на комментарий
1)Тип патронов в стволе:

Аргумент на входе - номер слота оружия

function GetAmmoType(iSlot)

local gItem = db.actor:item_in_slot(iSlot)

if gItem then

local seObj = alife():object(gItem:id())

local packet = net_packet()

seObj:STATE_Write(packet)

local iSize = packet:w_tell()

packet:r_seek(iSize - 1)

local iAmmoType = packet:r_u8()

return iAmmoType --/> (0|1|2|...)

end

end

добавить это:

Код:

--/ определяем имя секции патронов (ammo_name) по типу (ammo_type) для конкретного оружия (sSection)

function Get_AmmoSection(sSection, iAmmoType) --/< ammo_type (0|1|2|...)

local tAmmoList = fReadFromIni(system_ini(), sSection, "ammo_class", {}, "table", ",")

local iAmmo = 1 + (iAmmoType or 0)

return tAmmoList[iAmmo] --/> "ammo_section"

end

- то получим имя/название патрона в стволе.

  • Спасибо 1

Freedom

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

А может кто подсказать-можно-ли заставить НПС стрелять в определённую цель (БТР) ?

Prefiero morir de pie, que vivir siempre arrodillado.
 

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

В общем, вопрос. :)

Хочу повесить на нового НПС типовые задания (Мне нужна работа. Есть что на примете? и т.д.). Зашёл в task_manager.script, внёс своего НПС в две таблицы:

parent_by_story:

    [642] = "stariy",

story_by_parent:

    stariy                        = 642,

Далее, прописал НПС диалоги:

tm_stariy_dialog:

    <dialog id="tm_stariy_dialog" priority="-1">
        <init_func>task_manager.init_stariy_task_dialog</init_func>
    </dialog>

tm_stariy_reward:

<dialog id="tm_stariy_reward" priority="0">
        <init_func>task_manager.init_stariy_reward_dialog</init_func>
        <precondition>task_manager.has_active_vendor_task</precondition>
    </dialog>

К этим диалогам функции:

function init_stariy_task_dialog(dlg)
    get_random_task():init_task_dialog(dlg, "stariy")
end
function init_stariy_reward_dialog(dlg)
    get_random_task():init_reward_dialog(dlg, "stariy")
end

Далее, прописал квест "уничтожить лагерь" в task_manager.ltx:

В list:

stariy_eliminate_lager_1

Ниже:

[stariy_eliminate_lager_1]
type = eliminate_lager
community = actor
text = wolf_eliminate_lager_1_text
description = wolf_eliminate_lager_1_descr
parent = stariy
target = gar_old_boars
reward_money = 1000
reward_reputation = +20
reward_rank = 3
time = 86400
prior = 1

В общем, сделал всё, но вот результат:

70588d4aee919fd9be41969c58016ab1d9764082150211.jpg

 

Почему так? Почему нет работы? Нет же никаких условий там, ничего. Подскажите, пожалуйста, в чём причина?

 

Добавлено через 79 мин.:

И вот почему-то игра не видит именно квеста на работу, будто он вообще не прописан в task_manager.ltx...

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

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

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

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

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

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

Войти

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

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

AMK-Team.ru

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