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

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

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

Rezonance, Вас не затруднит объяснить, в чём смысл Вашей подписи?

df6xsrTK75.png

 

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

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

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

 

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

wolkolak

 

...

как поправить что бы небыло респавна бандосов на кордоне на Атп и на переходе свалка - агропром

тоесть один раз завалил и все больше не появляются именно там ...

 

На АТП после выноса бандитов по квесту Шустрого выдается инфопоршень, кажется, "esc_kill_bandits_quest_kill". В алл.спавне надо в настройках самрт террейна esc_fabrika_bandit прописать условие существования: cond = {-esc_kill_bandits_quest_kill -esc_kill_bandits_quest_done}

Та-ак, оно и так прописано, ЭТОТ гулаг по завершении квеста отключается, зато включается другой гулаг esc2_st_fabric на логике general lager. Удаляем его совсем или ставим заведомо невыполнимое условие типа "еще не говорили с Сидоровичем в самом начале игры".

 

Аналогично разбираемся и с бандитами на свалке.

 

===============================

 

Всем

 

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

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

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

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

Ссылка на комментарий
Kirag, в етом направлении вроде пока ноль. таже ситуация с мастерами в екзе и вістрелом в голову с ПМ(((

Vita sine libertate, nihil

Vita sine litteris - mors est

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

RvP,

Смертельный выстрел из ПМ против экзы в голову как раз лечится, посмотри в теме "рассчет повреждений при стрельбе по неписям ТЧ" Блокируются (в моих конфигах оружия, в оригинале с ними каша, не знаю, что получится) все пистолетные и обычные промежуточные патроны.

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

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

а вот есть ли у вертолета кости - сомневаюсь.он вообще по-моему пустой внутри.

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

Monnoroch

 

По идее, должны быть, модель-то анимированая. Да и файл config\models\vehicles\veh_mi24_u_01.ltx наводит на те же мысли:

 

[helicopter_definition]

default_hit_factor = 0.0 ; default hit factor (0..1)

hit_section = hit_bones ; hit section name

wpn_rotate_x_bone = front_gun ; rotate X-axis(pitch) bone name

wpn_rotate_y_bone = front_gun_tower ; rotate Y-axis(head) bone name

wpn_fire_bone = front_gun_fire ; weapon axis (fire) bone name

left_rocket_bone = left_gun ;

left_rocket2_bone = left_gun2 ;

right_rocket_bone = right_gun ;

right_rocket2_bone = right_gun2 ;

smoke_bone = front_propeller

light_bone = front_propeller

 

[hit_bones] ; per bones hit factor

pilot1 = 0.0

pilot2 = 0.0

back_propeller = 0.0

 

 

Вот только это, похоже, далеко не полный перечень. И как с ним обходиться - непонятно...

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

В том то и дело,что это все кости прибамбасов,а сам корпус похоже пустой: в него актор может голову засунуть и изнутни он прозрачный=)

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

Monnoroch

любой динамический объект содержит кости, вот для примета всё тот же Ми24 с его скелетом:

4287054_636x363.JPG

И сидели бы сейчас вышеозначенные любители больших подписей в маленьких файлах, в байт-коде ковырялись, если не в машинном...

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

Monnoroch

 

function 111(table, id)
    for k,v in pairs (table) do
        if v == id then return true end
    end
    return false
end

Если в таблице table есть число, равное id, возвращает true, иначе false

 

Jesh

 

А можешь список костей вертолета выложить? И для БТР, если не сложно?

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

back_propeller

back_propeller2

bone_lopast1

bone_lopast2

bone_lopast3

bone_lopast4

bone_lopast5

front_gun

front_gun_fire

front_gun_tower

front_propeller

front_propeller2

kabina

korpus1

korpus2

korpus3

left_gun

left_gun2

left_krilo

other

pilot1

pilot2

right_gun1

right_gun2

right_krilo

root

root_0

shassi

skaner

 

 

 

antena

back_axle

back_axle2

back_left_wheel

back_left_wheel2

back_right_wheel

back_right_wheel2

exhausts

front_axle

front_axle2

front_left_door

front_left_wheel

front_left_wheel2

front_right_door

front_right_wheel

front_right_wheel2

kabina

left_door

left_light

mashine_gun

mashine_gun_fire_point

mashine_gun_tower

right_door

right_light

root

seat_left

seat_right

stearing_wheel

 

 

Изменено пользователем Министр
Ссылка на комментарий
Есть таблица с кучей id.

Надо проверить,есть ли номер в таблице и вернуть тру\фолс.

Если надо определить принадлежность значения id к некоторому множеству (id1, id2, id3, ...), то наиболее эффективно это можно сделать так:

arr = {
id1 = true,
id2 = true,
id3 = true,
...
}
if arr[id] then

конструкция arr[id] возвращает true если такой ключ есть, и nil в противном случае. А nil в условных конструкциях интерпретируется как false.

 

Таблицы Lua - это на самом деле ассоциативные массивы. Это значит, что они представляют собой список пар (ключ, значение). Таким образом выражение

arr[k] означает "найти в таблице arr значение, соответствующее ключу k"

В частном лучае, если я создаю массив таким образом:

arr = {12, 34, 56, 78}

то ключ задаётся неявно в виде последовательности 1, 2, 3, 4, ...

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

Однако в общем случае таблица задаётся так:

arr = {
key1 = val1,
key2 = val2,
...
}

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

 

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

 

 

 

А можешь список костей вертолета выложить? И для БТР, если не сложно?

Окончательное решение вопроса с костями =)

Есть замечательная прога OGF Master. Живёт здесь. Автор DesweR. Последняя версия там не в шапке, а в одном из комментов.

Эта программа позволяет открыть ogf файл и конвертировать его в формат smd. Это текстовый формат, в начале там идёт список костей.

 

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

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

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

 

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

Извините, спрашивал ужо, но не получил ответа... Не хочу навязываться, но все же хочу опять попросить о помощи. Ситуация следующая: уже в который раз прихожу в ТД и мне всё снова и снова предлагают купить "ствол за 800 рэ". После благополучного тихого отстрела "РобинГуда" через некоторое время на его место приходит другой. Можно ли как-нить сделать, чтобы неписи "учились на своих ошибках" и предложив один раз такую бяку и увидев результат больше не пытались меня "развести"?

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

malandrinus

Попробовал сделать "Тестирование скриптов ЧН без обрушения" так, как написано у вас в спойлере. Результат: вылет с пустым логом. Вот конец лога:

! Unknown command: err=file_is_already_closed

! Unknown command: Succesfull!

stack trace:

 

001B:0086AB22 d3dx9_37.dll

001B:038A9DC6 luabind.beta7-devel.rc4.dll, luabind::detail::pcall()

 

В main_menu сделал так:

        if dik == DIK_keys.DIK_S then
            local res, err = pcall(my_proxy.start_chunk_from_file)
            get_console():execute(res and "Succesfull!" or string.gsub(err, " ", "_"))
        end

Вроде ошибок нет...

Теперь вопросы:

1. Как исправить, чтобы работало?

2. Как получить ближайший к точке, координаты который получены:

local a = vector()
a = db.actor:position()

level_vertex?

3. По по известному level_vertex'у определить его координаты.

4. Как перевести свободного НПС в данжер с опасностью в точке a.

5. Как перевести НПС, который находится в данжере, в свободное состояние так, чтобы он не переходил потом в данжер.

 

ЗЫ: как я понимаю, данжер - это универсальный комбат, так?

 

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

Garrett, технологию не пробовал (да и ТЧ у меня нет), но известно, что диалоги при встрече прописываются в character_desc_darkvalley.xml. Ищем диалог, отвечающий за "Гаусс".Ставим туда:

<dont_has_info>stalker_once_has_been_killed</dont_has_info>

Дальше. Мне кажется, что при выборе ветки, в которой ГГ отдаёт 800 руб. включается инфопоршень. Внутри самой фермы есть спейсрестриктор. Так вот, если мы в него задохидим с инфопоршнем, то сталкеры становятся врагами. Добавляем туда выдачу нашего инфопоршня.

+stalker_once_has_been_killed

Теперь предложения со стороны сталкеров гупить гаусс за 800 руб. не будет.

 

Если вы поняли, то сделаете, если не поняли, то вам на вики.

Изменено пользователем IQDDD
Ссылка на комментарий
Попробовал сделать "Тестирование скриптов ЧН без обрушения" так, как написано у вас в спойлере. Результат: вылет с пустым логом.
Я попробовал ещё раз. К сожалению должен констатировать: для ЧН методика работает плохо. Такое ощущение, что проблема в самом вызове pcall. Т.е. чанк из файла загружается, компилируется, а вот его выполнение с помощью защищённого вызова с pcall вызывает у игры тихую панику с непредсказуемыми последствиями. Вызов pcall заменить нечем - в нём сама суть методики.

Проблема также в том, что реакция на один и тот же код бывает разная. Ведёт себя как капризная невеста: иногда срабатывает, иногда тихо не срабатывает, иногда сразу после выполнения чанка идёт вылет без лога. Всё это весьма огорчительно. То, что в ТЧ работало как часы и экономило мне кучу времени, здесь не работает.

 

 

2. Как получить ближайший к точке, координаты который получены:

local a = vector()
a = db.actor:position()

level_vertex?

3. По по известному level_vertex'у определить его координаты.

level.vertex_position(id)

Но по идее, вертекс актора - это и должен быть ближайший к нему. Впрочем. ничто не мешает просто перебрать все вертексы на одном уровне с актором и проверить их расстояние до ГГ. Загляни в комментарии к этой программе

LVID Viewer (автор IG-2007)

 

4. Как перевести свободного НПС в данжер с опасностью в точке a.

5. Как перевести НПС, который находится в данжере, в свободное состояние так, чтобы он не переходил потом в данжер.

ЗЫ: как я понимаю, данжер - это универсальный комбат, так?

Да вроде универсальный комбат так и называется combat. Откровенно говоря, не до конца я разобрался с логикой. Но по моему разумению универсальные схемы срабатывают автоматом. Их там регистрируют в xr_logic.script и где-то там-же происходит их переключение по эвалуаторам. Не думаю, что правильно будет пытаться переключать универсальные схемы вручную, но наверное можно дописать дополнительные условия в эвалуатор.

 

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

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

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

 

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

malandrinus, спасибо!!! НО:

Пусть будет так:

local a = vector ()
a.x = a.x + 10
a.z = a.z + 15

 

Как получить ближайший к точке a level_vertex? Перебирание вертексов исключено, так как очень налягает на производительность.

 

зы: нужно для того, чтобы спавнить неписей вокруг ГГ. НО: вдруг НПС стоит в какой-нибудь канаве! Тогда неписи заспавняться подземлёй! Конечно, они рано-или поздно выйдут из-под земли к ближайшему узлу в АИ сетке, но всё равно не есть айс.

 

зы2: можно дать строго определения: класс, метод, свойство, объект?

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

Народ,подскажите,поставил допу к НС вот эту http://www.amk-team.ru/forum/index.php?s=&...st&p=231044 Прописал Бармену в продажу вихрь,выкупил пострелял походил,умер с ним.Вроде все в норме,но решил заглянуть в консоль а там,вот красным ! Cannot find saved game ~~~ unknown_weapon_type_[wpn_vihr]_wpn_vihr.Что это значит?И чем может грозить в дальнейшем?

Честь – это такое богатство, за которое не жаль умереть. Нельзя ее ни подарить, ни отнять, можно лишь потерять или обрести самому…

Ссылка на комментарий
Как получить ближайший к точке a level_vertex? Перебирание вертексов исключено, так как очень налягает на производительность.

 

зы: нужно для того, чтобы спавнить неписей вокруг ГГ. НО: вдруг НПС стоит в какой-нибудь канаве! Тогда неписи заспавняться подземлёй! Конечно, они рано-или поздно выйдут из-под земли к ближайшему узлу в АИ сетке, но всё равно не есть айс.

Для этого есть специальные функции. Вот например:

level.vertex_in_direction(lvid, dir, rad)

game_object:vertex_in_direction(lvid, dir, rad)

lvid - вертекс, от которого ищем

dir - вектор направления

rad - радиус поиска

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

 

зы2: можно дать строго определения: класс, метод, свойство, объект?

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

Ну может здесь можно посмотреть некое краткое изложение.

 

Если по-простому:

Класс - это сложный (составной) тип данных. Наподобие сишной структуры или паскалевской записи, только содержащий не только переменные, но и функции.

Объект - это переменная типа класс.

Свойство - это переменная, содержащаяся в объекте

Метод - это функция, содержащаяся в объекте

Классы являются основной строительной конструкцией многих современных языков программирования. В Lua поддержки классов на уровне языка нет, но они там неплохо имитируются благодаря невероятной гибкости Lua. Если кому интересно, то в сталкере для этого используется технология Luabind

 

Хороший пример - класс vector.

Имя класса - vector

Чтобы завести объект типа vector, надо выполнить конструкцию:

vec = vector()

здесь vec - это объект

теперь можно обращаться к свойствам объекта

x_coord = vec.x

vec.y = 4

или к его методам

vec:set_length(3.5)

 

Это с точки зрения использования уже готовых классов. С точки зрения создания классов всё немного сложнее и вообще говоря сильно привязано к конкретной реализации в конкретном языке.

 

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

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

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

 

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

Народ, ЧТО я не правильно сделал:

if dik == DIK_keys.DIK_S then
            local mindist,i,obj,npc = 1000000
            for i = 1,65500 do
                obj = level.object_by_id(i)
                if obj == nil then
                    obj = alife():object(i)
                end
                if obj then
                    if news_manager.is_npc_stalker(obj:clsid()) and obj:alive() then
                        if distance_between(db.actor,obj) < mindist then
                            mindist = distance_between(db.actor,obj)
                            npc = obj
                        end
                    end
                end
            end
            if npc then
                local hit = hit()
                local b = vector()
                b = db.actor:direction()
                b.x = -b.x
                b.z = -b.z
                b.y = -b.y
                hit.direction = b
                hit.draftsman = npc
                hit.impulse = 10000
                hit.power = 1.5
                hit.type = 2
                hit:bone("bip01_head")
                npc:hit(hit)
            end
        end

 

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

Вот ещё тележка:

1. Как делать свои коллбеки.

2. Как использовать self в своих скриптах? Что это мне даёт?

3. У серверной аномалии класс cse_anomalous_zone. Какой класс у клиентской аномалии?

4. Как проигрывать партикл, если известна точка, в которой должен проигрываться партикл?

 

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

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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