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

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


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

Гномик

Да именно так я уже разабрался спс.

 

Так что-же это такое и счем это едят?

 

; State = 7

; 0 - бежать прямо на врага

; 1 - бежать на врага петляя

; 2 - бежать на врага по укрытиям

; 3 - бежать от врага по укрытиям

; 4 - паника

; 5 - прятаться от врага

; 6 - обходить врага

 

Гномик

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

 

Сообщение от модератора Cyclone
disp_walk_stand ;-->> точность на медленном ходу во весь рост

disp_walk_crouch ;-->> точность ползком в полном приясяде

disp_run_stand ;-->> точность на ходу(трусцой)

disp_run_crouch ;-->> точность ползком

disp_stand_stand ;-->> точность стоя во весь рост

disp_stand_crouch ;-->> точность сидя

disp_stand_stand_zoom ;-->> точность прицелившись стоя во весь рост

disp_stand_crouch_zoom ;-->> точность прицелившись сидя

Чем меньше значение - тем выше меткость.

 

совсем не важно от чего ты умрёшь - гораздо важнее для чего ты родился
Ссылка на комментарий

Scarabay, спасибо, конечно! Но миникарта как не менялась от уровня, так и не меняется! :huh: А где ты в ТЧ видел такую штуку-дрюку?

Ладно, не об этом. Все, что я нашел по этому рестриктору floor_3_space_restrictor, так это запись у зомби в all.spawn следующего вида: base_out_restrictors = floor_3_space_restrictor. Вот на всякий случай он весь:

[4567]
; cse_abstract properties
section_name = stalker_zombied
name = x16_zombied_0007
position = -40.9127502441406,11.5656766891479,-18.7846279144287
direction = 3.96806353819557e-005,4.32763913593703e-009,-0.000109061744296923

; cse_alife_trader_abstract properties
money = 5000
character_profile = yan_zombied

; cse_alife_object properties
game_vertex_id = 1530
distance = 69.2999954223633
level_vertex_id = 2714
object_flags = 0xffffffff
custom_data = <<END
[smart_terrains]
none = true

[logic]
active = walker

[walker]
path_walk = x16_zombied_5_walk
sound_idle = state
END

; cse_visual properties
visual_name = actors\stalker_zombi\stalker_zombie2

; cse_alife_creature_abstract properties
g_team = 0
g_squad = 0
g_group = 0
health = 1
dynamic_out_restrictions = 
dynamic_in_restrictions = 

upd:health = 1
upd:timestamp = 0
upd:creature_flags = 0
upd:position = -40.9127502441406,11.5656766891479,-18.7846279144287
upd:o_model = 0
upd:o_torso = 4.32763913593703e-009,3.96806353819557e-005,0
upd:g_team = 0
upd:g_squad = 0
upd:g_group = 0

; cse_alife_monster_abstract properties
base_out_restrictors = floor_3_space_restrictor

upd:next_game_vertex_id = 65535
upd:prev_game_vertex_id = 65535
upd:distance_from_point = 0
upd:distance_to_point = 0

; cse_alife_human_abstract properties
predicate5 = 1,0,2,2,0
predicate4 = 2,2,2,0

; cse_ph_skeleton properties

upd:start_dialog = 

; se_stalker properties

Вообще не понятно, для чего эти пустые рестрикторы. По совету Kiragа поиск в скриптах так же ничего не дал.

Еще обратил внимание, что для костров, те которые в all.spawn, также существует "пустой" рестриктор, вот один для примера:

[584]
; cse_abstract properties
section_name = space_restrictor
name = camp_fire_0001
position = 115.827072143555,-6.96181488037109,9.30737209320068
direction = -2.27373675443232e-013,0,0

; cse_alife_object properties
game_vertex_id = 0
distance = 0
level_vertex_id = 594270
object_flags = 0xffffff3e

; cse_shape properties
shapes = shape0
shape0:type = box
shape0:axis_x = 1.7837952375412,0,0
shape0:axis_y = 0,1.93420171737671,0
shape0:axis_z = 0,0,1.7837952375412
shape0:offset = 0,0,0

; cse_alife_space_restrictor properties
restrictor_type = 2

И если можно ответе на мой предыдущий вопрос: для чего нужны два параметра in_rest и out_rest в гулагах, и как отследить попадание ГГ в рестриктор, который без логики и не помеченый стори_айди?

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

Куфзук

 

Давай по порядку

 

1.

для чего нужны два параметра in_rest и out_rest в гулагах

in_rest запрешенно входить в данный рестриктор(зону) out_rest запрешенно выходить из данного рестриктора(зоны) .

 

пример попробуй любого сталкера из лагеря новичков отправить допустим к АТП или вагончику получиш (вылет)

типа any vertex в не досягаемости для обьекта (имя того кого попытался туда заслать).

 

 

Да И движку совсем не важно какой размер шейпа у смарт терайна в алл спавне .

Главное чтоб от 0 отличался :ny_thumbsup: хоть 123.56678989 хоть 0.00000000000000001

 

 

 

 

 

 

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

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

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

PGU_tk,

посмотри в теме справочник. Там про alife_simulator

 

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

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

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

 

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

malandrinus, если честно, смотрел неоднократно

cse_abstract* create(string <имя секции объекта>, vector* position, int level_vertex_id, int game_vertex_id, int parent_id) // создание объектов в инвентаре --- стандартная, создаст только один объект по имени секции

cse_abstract* create_ammo(string <имя секции патронов>, vector* position, int level_vertex_id, int game_vertex_id, int parent_id, int amount) // создание пачек с патронами --- создаст все равно одну пачку, но с варьируемым кол-вом патронов.

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

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

Министр, там неправильно написано - создание пачек. На самом деле создается только одна пачка. Если в последнем параметре написать патронов больше, чем прописано в box_size для данного типа, то они просто проигнорируются. Таким образом, если у меня пачки по 30 патронов, то придется в цикле это все плодить, чтобы до 1000... А это странно - странно, что нет функции, генерирующей эн однотипных объектов или у которой первый параметр массив секций. Впрочем, что есть, то есть.

 

_Призрак_, спасиб за ответ, я так и понял. Цикл я и сам могу написать, просто хотелось услышать чье-нибудь подтверждение..

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

PGU_tk,

там неправильно написано - создание пачек. На самом деле создается только одна пачка.

Вот ведь буквоед, юрист что-ли? =) Ты вероятно первый, кто понял это таким образом.

 

Руки дойдут - подправлю.

 

это странно - странно, что нет функции, генерирующей эн однотипных объектов или у которой первый параметр массив секций.

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

 

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

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

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

 

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

PGU_tk

Я на инсайд-вики еще год назад выложил функцию для спавна любого набора объектов с указанием нужного кол-ва каждого объекта.

Причем она спавнит как в инвентарь - ГГ или NPC (оффлайн\онлайн), так и по координатам. В качестве аргумента передается именно массив секций и прочие данные.

ссылка

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

Добрый вечер! Прошу помощи у коммьюнити! Подскажите, пожалуйста, как сделать, чтобы в автомобиль нельзя было сесть без наличия у актора определённого предмета (ключей)?

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

Хантер, привет! Wiki тебе в помощь: >>Click Me<<

 

Хантер, а наличие инфопоршня проверял? Просто тут только в этом загвоздка может быть.

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

function proceed()

local actor = db.actor

if has_alife_info("tutorial_artefact_start") and

not has_alife_info("tutorial_artefact_gain") and

actor:object("af_blood_tutorial") ~= nil

then

actor:give_info_portion("tutorial_artefact_gain")

end

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

if not has_alife_info("actor_has_niva_key") and

actor:object("niva_keys") ~= nil

then

actor:give_info_portion("actor_has_niva_key")

--news_manager.send_tip(db.actor, "find_keys_info")

end

 

if actor:object("niva_keys")== nil then

actor:disable_info_portion("actor_has_niva_key")

end

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

Это вставил в escape_tasks.script

Прикол в том, что мой тестер говорит, якобы в тёмной долине сесть в автомобиль без ключа он не смог. 0_0

В тёмной долине автомобили заспаунены через all.spawn , а на кордоне через скрипт.

Может, в скрипте нужно прописывать логику автомобиля?

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

Хантер, вероятно - да! Делаеться это через нет_пакеты, сказать как, наверняка не скажу, углубленно не ковырял, но где-то видел, как скриптами добавляли space_restrictor, можно посмотреть и сделать по аналогии, правда, где видел, чего-то запамятовал...

---------

Вот нашел! Статья с СП:

Первое обновление. Теперь можно выбирать, какой формы будет рестриктор, Шар или Куб.

Для Куба устанавливаются размеры по x,y,z.

 

Второе обновление. Теперь, в качестве кастом даты, можно указывать ltx файлы, из папки config. Путь указывается таким образом:

 

local ltx = "scripts\имя_файла.ltx"

 

Итак. Создаём файл _new_create.script, если такового ещё нет, и добавляем в него нашу функцию:

 

function create_restr(storid, pos_restr, lvid_restr, gvid_restr, custom_restr, radius_restr, ax_x, ax_y, ax_z)

local obj = alife():create("space_restrictor", pos_restr, lvid_restr, gvid_restr)

 

local packet = net_packet()

obj:STATE_Write(packet)

----------------------- load ------------------------------

local game_vertex_id = packet:r_u16()

local cse_alife_object__unk1_f32 = packet:r_float()

local cse_alife_object__unk2_u32 = packet:r_u32()

local level_vertex_id = packet:r_u32()

local object_flags = packet:r_u32()

local custom_data = packet:r_stringZ()

local story_id = packet:r_u32()

local spawn_story_id = packet:r_u32()

local shape_count = packet:r_u8()

for i=1,shape_count do

local shape_type = packet:r_u8()

if shape_type == 0 then

local center = packet:r_vec3()

local radius = packet:r_float()

else

local axis_x = packet:r_vec3()

local axis_y = packet:r_vec3()

local axis_z = packet:r_vec3()

local offset = packet:r_vec3()

end

end

 

local restrictor_type = packet:r_u8()

-------------------------- save -----------------------------

packet:w_begin(game_vertex_id)

packet:w_float(cse_alife_object__unk1_f32)

packet:w_u32(cse_alife_object__unk2_u32)

packet:w_u32(level_vertex_id)

packet:w_u32( bit_not(193) )

 

if custom_restr ~= nil then

if string.find (custom_restr, '.ltx') ~= nil then

custom_restr = '[logic]\n cfg = '..custom_restr..'\n'

end

packet:w_stringZ(custom_restr)

else

packet:w_stringZ(custom_data)

end

 

if storid ~= nil then

packet:w_u32(storid)

else

packet:w_u32(story_id)

end

 

packet:w_u32(spawn_story_id)

 

packet:w_u8(1)

if radius_restr ~= nil then

packet:w_u8(0)

packet:w_vec3(vector():set(0, 0, 0))

packet:w_float(radius_restr)

elseif radius_restr == nil and ax_x == nil then

packet:w_u8(0)

packet:w_vec3(vector():set(0, 0, 0))

packet:w_float(2.5)

else

packet:w_u8(1)

packet:w_vec3(vector():set(ax_x, 0, 0))

packet:w_vec3(vector():set(0, ax_y, 0))

packet:w_vec3(vector():set(0, 0, ax_z))

packet:w_vec3(vector():set(0, 0, 0))

end

 

packet:w_u8(restrictor_type)

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

packet:r_seek(0)

obj:STATE_Read(packet, packet:w_tell())

end

 

Вызов спавна будет производиться из других функций, других файлов, таким образом:

 

для формы Шар:

_new_create.create_restr(sid, pos, lv, gv, ltx, radius)

 

для Формы Куб:

_new_create.create_restr(sid, pos, lv, gv, ltx, nil, x, y, z)

 

Где:

sid --стори айди рестриктора (или nil, если не используется)

pos --позиция спавна рестриктора vector():set(x,y,z)

lv --левел вертекс позиции спавна

gv --гейм вертекс позиции спавна

ltx --кастом дата рестриктора

radius --радиус зоны рестриктора (в метрах) (или nil, если используется форма куба)

x,y,z --размеры куба, по x,y,z соответственно.

 

Теперь разберём такие настройки как, ltx и sid.

 

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

ltx

 

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

Чтобы указать логику из статитеского файла ltx, находящегося в папке config, нужно прописать так:

 

local ltx = "scripts\\имя_файла.ltx"

 

или

 

local ltx = "misc\\имя_файла.ltx"

 

или

 

local ltx = "имя_файла.ltx"

 

В зависимости от того, где лежит требуемый файл, относительно папки config.

 

Если нас статический ltx не устраивает. То можно прописать логику динамически.

Тобишь, в той же функции, от куда и будет вызываться спавн рестриктора.

Итак, пред вызовом спавна создаём локальную переменную ltx, и в значении данной переменной прописываем всю логику нашего рестриктора.

Например, установим эффект активации слота "ножь", при входе ГГ в рестриктор:

 

local ltx = "[logic]\n"..

"active = sr_idle@in\n"..

 

"[sr_idle@in]\n"..

"on_actor_inside = %=activate_knife% sr_idle@out\n"..

 

"[sr_idle@out]\n"..

"on_actor_outside = sr_idle@in\n"

 

 

Разберём особенности динамического ltx:

 

\n -прописать в новой строке, динамического файла ltx.

.. -привязать следующую строку к общей схеме динамического ltx.

Каждая строка, обязательно заключается в кавычки, кроме двоеточия.

В последней строке, двоеточие запрещается ставить категорически.

 

Если логика рестриктора, не предусмотрена, то вместо неё ставить nil.

 

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

sid

 

Стори айди рестриктора. Используется при отслеживании попадания неписей под рестриктор. Если не используется, то ставить значение nil.

 

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

 

Есть возможность использовать значения по умолчанию:

 

_new_create.create_restr(sid, pos, lv, gv, ltx)

 

или

 

_new_create.create_restr(sid, pos, lv, gv)

если custom_data не предусматривается.

 

По умолчанию рестриктор имеет форму Шара, с радиусом 2.5 метра.

 

 

Да, нет! Пример со спейс рестриктором я тебе привел, для того, чтобы показать (приблизительно), как объекту заспавненому через скрипт приписать, туже кустом_дату или стори_айди.

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

Что-то я не пойму... Спаун_рестриктор будет привязан к точке на местности или к машине, если его заспаунить туда же, куда и машину?

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

Кастом_дату привязать к машине в скрипте не получается. :( Просто ничего не меняется: подхожу к машине без ключей и сажусь в неё. :(

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

Хантер

Во-первых, почему бы тебе не заспавнить и вторую машину через алл.спавн?

А во-вторых, попробуй зарегистрировать твою машинку в spawn_section. Не уверен что чтото получится, но все же:

[meganiva]:niva

custom_data = scripts\hanter\meganiva.ltx ;путь до файла с логикой

Только вот я не помню какое имя секции у нивы, поэтому вместо niva напиши имя секции. И спавнить потом уже нужно будет не niva, а meganiva

Freedom

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

Ничего не дало. :( А машину нельзя заспаунить через алл.спаун, потому что она должна появляться после определённой реплики в диалоге.

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

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

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

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

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

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

Войти

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

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

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