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

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


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

Monnoroch,

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

Но такие случаи я точно встречал. К примеру вызов level.object_by_id(nil), как и без аргумента возвращает объект с нулевым идентификатором, т.е. актора.

А вызов alife():object(nil) приводит к вылету. А вызов db.actor:object(nil), который вроде как должен вернуть объект по индексу, возвращает вместо этого число 0.

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

Так что мой предыдущий спич полностью остаётся в силе =)

 

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

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

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

 

malandrinus, это значит всего лишь,что в функции level.object_by_id(id)

в начале код

if not id then id = 0 end

 

с другими аналогично.посему это зависит от функции - и nil-у никогда не присвоится 0 автоматически.

но твой спич в силе - тут я поспорить не могу.

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

malandrinus, ну ПЫСы предусмотрели "тупого юзера" - и оградили все карты непробиваемой колючей проволокой и полным отсутствием чего-либо интересного - но вот от "бешеного скриптера", который все раскопает они не предусмотрели защиты

 

в скриптах АМК встречал ответ на твой вопрос - при проверки аргументов функции не введенные аргументы считались за nil и проверялись исходя из этого

 

но скрипты скриптами а С++ и С# таких обращений с аргументами не воспринимают, потому функции, которые напрямую вызывают движковые функции и передают им аргументы, естественно приводят в вылетам.

i-igroman.ru - Мой, принципиально новый сайт о компьютерных играх

Доброго времени суток. Уважаемые Знатоки, помогите с одним вопросиком: Где и что нужно прописать, что бы завести машину. И можноли сделать так, чтоб она не фонила?

Мои работы ТЫЦ

Фонила? Смысле? Радиация?! О том как нэв опцию добавить читай вики, об этом не раз писалось...

 

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

А вообще чтобы без гемороя - в консоли введи bind turn_engine kB. Ну может _ в другом месте, а так, в игре жмешь В и машина заводицо. Передачи переключаюцо шифтом и ктрлом.

malandrinus

Спич в силе. :ny_ph34r_1:

Раз уж речь зашла об ошибках - то вот мне интересно было бы узнать как скриптовый парсер игры обрабатывает ошибки.

Вот например вчера получил полный неадекват этого парсера по отношению к моему файлу со скриптами.

Каждая функция в этом файле - доселе рабочая и проверенная объявлялась nil value - в порядке очередности вызовов.

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

 

Ошибку (которая и была причиной всех nil value) я нашел - просто в добавленной в файл таблице отсутствовали кавычки у строковых индексов заключенных в [] ну и тож самое было в функции которая данные из таблицы получала

то есть было local verb = word[verb][math.random(#word[verb])] вместо

local verb = word["verb"][math.random(#word["verb"])]

 

И все. Почему бы парсеру было просто на это не указать? :ny_dry: Ну по крайне мере споткнуться на чтении(вызове) именно этой функции, а не объявлять nil value рабочие.

 

Monnoroch

может я не так выразился но логи были такие:

: attempt to call field 'gratva' (a nil value)

attempt to call field 'uny_spawn_1' (a nil value)

attempt to call field 'on_actor_update' (a nil value)

: attempt to call field 'get_object' (a nil value)

 

все это имена функций из этого файла которые при их вызове давали крэш игры.

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

Garry_Galler, он нилом обьявляет не функцию,а скрипт.

ни разу не видел,чтобы конкретную функцию.

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

можно ли изменить цвет СМС с заданиями и как?

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

Всем СПАСИБО ЗА СОВЕТЫ И ОТВЕТЫ!!! Особенно кровоSTALKERу! Извините что потратил ваше время но я всё-таки справился сам. единственное что помогло это совет насчёт партикла, но всё равно спасибо за помощь!!! НО ТЕПЕРЬ ДРУГОЙ ВОПРОС: а тут может модер сделать тему типа моды ковыряния наработки для сетевой игры ТЧ? Просто у мня много чего именно для сетевой и желаю поделиться, ну а если кому не лень то милости просим на наш сайтик buhalker.narod.ru конешно сайт полная фигня но он для того чтобы зырить наши моды))) ВСЕМ СПАСИБО!!!

Строгое предупреждение от модератора n6260
"Капсом" не пишите.

 

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

n6260 былин...забыл. Всё больше не буду.

ЯДиск папка с крутым схроном!

Starter, такую бы энергию да в трезвое русло))

 

ЗЫ: на будущее - пожалуйста, пишите, какие моды вы юзаете при создании собственных - авторам иначе обидно

i-igroman.ru - Мой, принципиально новый сайт о компьютерных играх

калаши скачал из темы AAza автора Weapon packs от Jackal файл Автоматы АК74 и АКМС.

 

 

"Starter, такую бы энергию да в трезвое русло))" - это куда например?

ЯДиск папка с крутым схроном!

люди прошу помочь. хочу заспавнить рюкза по шаблону жеки из темы Уроки по модостроению. Первый пункт там такой:

Создаём файл ваше_название_скрипта.script в папке gamedata/scripts и пишем в него:

 

Код

function ваше_название_функции() $$$НАЗВАНИЕ ФУНКЦИИ$$$

alife():create(section,position,levelvertex,gamevertex) $$$ЭТО ТОЧКА ГДЕ СПАВНИТСЯ ПРЕДМЕТ$$$

end

Так вот что означает section,position,levelvertex,gamevertex? И какие там должны быть цыфры что-бы рюкзак появился на этой точке

Строгое предупреждение от модератора n6260
Полноразмерное изображение размещать в сообщении запрещено. Заливаем картинку на любой фотохостинг и копируем в текст код "превью по клику".
Изменено пользователем n6260

Freedom

Garry_Galler, Чесслово, 1 раз такое вижу О_о

Всегда если уж ругалось,то на ВЕСЬ скрипт...

Подскажите пожалуйста! Я знаю, что в ЧН в сетевой игре если изменяешь текстуры, то игра идёт спокойно и заходит на любой сервер. Что нужно сделать, чтобы и ТЧ тоже так заходил свободно с текстурами? (Замечание: ТЧ со звуком входит без всяких проблем на любой сервер без перестоновки папок gamedata, как это делают читерв). Заранее Спасибо за ответ!

 

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

Подскажите пожалуйста! Я знаю, что в ЧН в сетевой игре если изменяешь текстуры, то игра идёт спокойно и заходит на любой сервер. Что нужно сделать, чтобы и ТЧ тоже так заходил свободно с текстурами? (Замечание: ТЧ со звуком входит без всяких проблем на любой сервер без перестоновки папок gamedata, как это делают читерв). Заранее Спасибо за ответ!

ЯДиск папка с крутым схроном!

люди ну помагите! Что означают section,position,levelvertex,gamevertex? Или предложите другой вариант спавна тайника

Freedom

Что означают section,position,levelvertex,gamevertex?

section - название секции объекта как оно задано в лтх

position - вектор состоящий из 3-х координат (x,y,z) определяющий местоположение объекта на карте

levelvertex - идентификатор левелвертекса необходим для уточнения местоположения объекта на текущей карте

gamevertex - идентификатор геймвертекса необходим для уточнения местоположения объекта в игре в целом

118 101 110 105 44 32 118 105 100 105 44 32 118 105 99 105

А кстати,кто нибудь знает в чем природа этих левел и гейм вертексов?

По мне так достаточно знать имя уровня+координаты,чтобы однозначно определить точку спавна.

 

Зачем они нужны,эти вертексы?

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

Monnoroch, скорее всего когда-то в сталкере хотели ввести систему глобального позиционирования

и изначально координаты писались под нее - вот вам и отголосок того "бесшовного мира" которого никто так и не увидел

i-igroman.ru - Мой, принципиально новый сайт о компьютерных играх

А кстати,кто нибудь знает в чем природа этих левел и гейм вертексов?

По мне так достаточно знать имя уровня+координаты,чтобы однозначно определить точку спавна.

Другое название этой сетки - сетка навигации. Ещё название - AI-сетка, что по сути одно и тоже, поскольку весь AI так или иначе связан с перемещениями.

Проще всего понять, на что похожа сетка уровня (граф навигации уровня), если эту сетку как-то визуализировать. Есть для этого тулза, созданная IG-2007.

Но я попробую словами...

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

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

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

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

 

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

 

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

 

 

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

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

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

 

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

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

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

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

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

Войти

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

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

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