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

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


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

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

df6xsrTK75.png

  Полезный утиль (Показать)
Ссылка на комментарий

wolkolak

 

  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

 

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

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

RvP,

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

Мои работы:

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

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

Soul Cube

 

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

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

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

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

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

Monnoroch

 

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

 

  Раскрывающийся текст (Показать)

Мои работы:

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

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

 

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

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

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

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

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

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

 

  Здесь дополнительное разъяснение, если кому интересно (Показать)
  Полезный утиль (Показать)
Ссылка на комментарий

Извините, спрашивал ужо, но не получил ответа... Не хочу навязываться, но все же хочу опять попросить о помощи. Ситуация следующая: уже в который раз прихожу в ТД и мне всё снова и снова предлагают купить "ствол за 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
Ссылка на комментарий
  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 и где-то там-же происходит их переключение по эвалуаторам. Не думаю, что правильно будет пытаться переключать универсальные схемы вручную, но наверное можно дописать дополнительные условия в эвалуатор.

  Полезный утиль (Показать)
Ссылка на комментарий

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.Что это значит?И чем может грозить в дальнейшем?

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

Ссылка на комментарий
  IQDDD писал(а):
Как получить ближайший к точке 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)

 

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

  Полезный утиль (Показать)
Ссылка на комментарий

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

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 пользователей

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