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

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


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

Логическая переменная в классических языках программирования занимает 1 бит

не бит а байт

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

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

переменных в других модах, ужаснулся бы :D кроме того она же у тебя не сохраняется при

сохранении игры а инициализируется заново при загрузке, или я ошибаюсь?

Gonarh, да блин заработался

если пиво мешает работе, ну её нахрен, эту работу :crazy:

Изменено пользователем Gonarh
118 101 110 105 44 32 118 105 100 105 44 32 118 105 99 105
Ссылка на комментарий
проще в ии-схеме выброса сделать на него исключение, чтобы ИИ схема выброса его не учитывала - будет стоять как миленький

 

А можно отсюда поподробнее, пожалуйста? Я вот тоже как раз столкнулся с этой проблемой при составлении скриптовой массовой перестрелки во время выброса, нужной мне по сюжету.

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

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

www.amk-zone.de

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

Wlad777,

В файле blowout_scheme.script функция function bind_scheme(npc,storage). В неё добавляются исключения по npc:name() или npc:character_community(). Имена НПС берутся из all.spawn.

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

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

 

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

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

Изменено пользователем Monnoroch
Ссылка на комментарий
вопрос в том сколько памяти тянет инфорпоршн.
выиграл то что не используешь инфопоршень, на скорости твоя локальная переменная не скажется

В традиционных языках булевская переменная может занимать от бита до 4-х байт в зависимости от способа хранения и оптимизации. В Lua скорее всего один байт, но во-первых - это опять же зависит от сборки, а во-вторых - есть ещё и накладные расходы на хранение переменной (в частности её имя - ключ в таблице текущего модуля). Инфороршн в движке хранится похожим образом - у каждого объекта есть коллекция - ассоциативный массив, в котором ключи - это строки имён, а значения - структуры с данными размером в несколько байт (среди которых и собственно логическое значение). Причём строки все существуют в единственном экземпляре, поскольку зарегистрированы заранее, и таким образом в коллекции занимают всего 4 байта - размер указателя. Т.е. о размере можете забыть как и о скорости обращения.

 

Сравнивать инфопоршены с булевскими переменными не вполне корректно. Разве что для упрощённого понимания. Да, в принципе это что-то вроде логической переменной. Но лучше воспринимать инфопоршены как движковый механизм памяти персонажей. Потому ведь и Info Portion - т.е. "порция информации". Это некие зарегистрированные игровые факты (не обязательно соответствующие сюжету), о которых персонаж знает или нет. Как использовать этот механизм - дело личное, но, как совершенно верно было сказано, стимулы к этому большие:

1. Автоматическое сохранение

2. Завязка на этот механизм диалогов и квестов

3. Использование инфопоршенов в скриптовых схемах управления персонажами

 

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

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

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

 

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

Подскажите, как убрать кружок от прицела. Поиск юзал по слову "кружок", как правильно называется не знаю.

4k2VS3tfE6.jpg

Сообщение от модератора n6260
В опциях сделать прицел невидимым. Больше никак.

 

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

Нашел другое решение.

Берем текстуру \gamedata\textures\ui\cursor.dds и убираем у нее альфа канал.

зы: предыдущий пост отредактировать не могу.

Не прошло и 2,5 года.
Ссылка на комментарий

boboz,

Из скрипта можно убрать курсор командой консоли

get_console():execute("hud_crosshair 0")

 

Вообще, все консольные команды доступны таким образом. Так что смотрите список команд и используйте.

 

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

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

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

 

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

Такая проблема! Вчера в Припяти после тормозов и многократных вылетов пропали из инвентаря бинокль и фонарь.Кроме того исчезли также различные боеприпасы,продукты,лекарства.Сегодня поставил ПНВ на экзу. а он не включается.Как вернуть бинокль и фонарь?

 

Сообщение от модератора n6260
1. Если играет в Народную солянку - по биноклю есть лекарство в старой теме вылетов Народной.

2. Фонарик - у меня как то было - исправить смог только новой игрой.

3. ПНВ включается кнопкой ;) И точно оно установлено?

З.Ы. И тут точно не тема для лечения багов.

«Ну и жесть!» Сказал асфальтовый каток, оглянувшись назад на бывшую "копейку".

Nevada47.gif

Ссылка на комментарий
Бандерос объяснил все просто и понятно

 

Блин, я тормоз. Мог бы и сам туда сначала заглянуть.

 

А вот specific_character id или class туда добавить получится? А то выходит, что спавненых скриптом неписей это не коснётся.

 

Не хочется что-то для одной единственной сценки 20 лишних уникальных неписей в аллспавн записывать.

 

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

www.amk-zone.de

Ссылка на комментарий
Не хочется что-то для одной единственной сценки 20 лишних уникальных неписей в аллспавн записывать.

и это не проблема, добавь их в gamedata\config\creatures\spawn_sections.ltx и спавни себе на здоровье скриптом ;)

 

 

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

Хотя... могешь воспользоваться функцией read_stalker_params из amk.script прочесть нет-пакет сталкера

и получить его профиль и класс и сделать проверку условия по нему

118 101 110 105 44 32 118 105 100 105 44 32 118 105 99 105
Ссылка на комментарий

Люди.

Как сделать спаут обьекта на определенном растоянии от точки?

 

Есть функция спавна на растоянии от ГГ:

function spawn_random()

local radius = 20

local ang = 0.5

local dir = vector_rotate_y(db.actor:direction(),ang)

local obj = alife():create("mehanik",db.actor:position():add( dir:mul(radius)),db.actor:level_vertex_id(),db.actor:game_vertex_id())

end

 

Подскажите как правельно заменить db.actor на точку не меняя сути функции?

 

Жду любых советов.

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

Возможно ли теоретически сделать в ТЧ захват (или уничтожение) смарта и войну группировок так, как это сделано в ЧН? Или хотя бы сделать так, чтобы можно было какому-нибудь отряду прописать нападение на смарт?

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

Monnoroch Спасибо. Я просто думал что есть какой-то другой метод кроме:

vector():set(-244.025,-20.16,-159.768188)

 

А есть ли возможность заспавнить что либо рядом с НПС? Т.е. db.actor переделать в любого НПС.

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

Зачем этой фигней портить такую прекрасную игру как тч?

Строгое предупреждение от модератора n6260
1. Не флудим.

2. Выражаемся вежливее.

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

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

Такая ж фигня и на агропроме возле входа в подземелье и ещё много где.

Изменено пользователем Полтергейст
Ссылка на комментарий
Как сделать спаут обьекта на определенном растоянии от точки?

Тебе ведь это динамически сделать надо, не так ли? Т.е. надо выбрать место спавна "на лету". Не важно, как ты выбираешь место спавна, есть одна проблема. Для спавна нужны не только координаты, но и номера game/level вертексов. game vertex вроде как можно указать достаточно произвольно, надо только, чтобы он был на нужном уровне (не полностью уверен, но вроде так). А вот level vertex важно указывать точно. Если ты его тупо возьмёшь скажем у актора, а спавнишь например в 10-и метрах от него, то скорее всего это не сработает. Часто предмет в таком случае проваливается вниз.

Узнать level vertex для произвольной точки пространства в ТЧ нельзя (по крайней мере тривиальных способов нет). Начиная с ЧН появилась функция level.vertex_id(pos), обратная функции level.vertex_position(lvid), которая была и раньше. С её помощью можно узнать номер вертекса по вектору положения. Но только для текущего уровня. На другом уровне по-прежнему невозможно.

Так что спавн в произвольном месте на произвольном уровне представляет собой пока нерешённую проблему.

 

 

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

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

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

 

Ссылка на комментарий
Так что спавн в произвольном месте на произвольном уровне представляет собой пока нерешённую проблему.

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

в функцию передаём имя левела, возвращает таблицу в которую передается позиция, левелвертекс, геймвертекс для спавна,

учтите что данные в таблицах для этой функции сняты с моего game.graph, который перекомпилен, и

координаты и количество геймвертексов и левелвертексов могут не совпадать с оригиналом игры ;)

level_vertexes = {

l01_escape = 595465, l02_garbage = 382655, l03_agroprom = 437418,

l03u_agr_underground=4921, l04_darkvalley=390121, l04u_labx18=7565,

l05_bar=99523, l06_rostok=67707, l07_military=418264,

l08_yantar=141442, l08u_brainlab=8002, l10_radar=227176, l10u_bunker=8801,

l11_pripyat=261218, l12_stancia=477876, l12_stancia_2=264570,

l12u_control_monolith=3971, l12u_sarcofag=10670

}

 

local game_vertexes = {

l01_escape={0,251}, l02_garbage={252,415}, l03_agroprom={416,702},

l03u_agr_underground={703,810}, l04_darkvalley={811,1108},

l04u_labx18={1109,1167}, l05_bar={1168,1307}, l06_rostok={1308,1437},

l08_yantar={1438,1528}, l08u_brainlab={1529,1544}, l07_military={1545,1861},

l10_radar={1862,2116}, l11_pripyat={2117,2272}, l12_stancia={2273,2401},

l12u_sarcofag={2402,2466}, l12u_control_monolith={2467,2516},

l12_stancia_2={2517,2660}, l10u_bunker={2661,2791}

}

 

function get_random_coordinates(lname)

local gvn, gvx, lvx = game_vertexes[lname][1], game_vertexes[lname][2], level_vertexes[lname]

local min_dist = 100000

local data = {}

data.lvid = math.random(1, lvx)

data.pos = level.vertex_position(data.lvid)

data.gvid = 0

for a = gvn, gvx do

g1 = game_graph():vertex(a):game_point()

if g1:distance_to(data.pos) < min_dist then

min_dist = g1:distance_to(data.pos)

data.gvid = a

end

end

return data

end

 

Изменено пользователем Gonarh
118 101 110 105 44 32 118 105 100 105 44 32 118 105 99 105
Ссылка на комментарий

Gonarh,

Но ведь функция level.vertex_position(lvid) работает только для текущего уровня. Я специально перепроверил - на разных уровнях эта функция выдаёт разные координаты для одинаковых значений lvid. Каким образом этот подход можно использовать для спавна на произвольном уровне?

 

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

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

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

 

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

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

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

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

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

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

Войти

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

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

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