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

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

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

Real Wolf, получаешь содержимое через нет_пакет, распарсиваешь табличку, и сверяешь с секционным именем. И если не изменяет память через скрипт, и тоже сравниваешь с именем секции.

А вот если нужен оригинальный именной по иду, то тогда только по сравнению с идом.

 

P.S. Так как вопрос был задан "как?", предвижу рецидив, и отвечу. Иди читай статьи, а по лс не отвечу, далее здесь можно продолжить обществу задавать вопросы. Но с вопросами как и зачем не очень рекомендую, здесь ведуют один не очень адекватный и нормальный модер n6260, так что... Забанить может в раз.

Ой ну надо-же я наверно нарушил какой-то пункт плавающего правила.

 

Сообщение от модератора n6260
Ой, меня получается несколько за раз? :lol:
Ссылка на комментарий
А конкретней?

Это вопрос к моему ответу про ящики? Если так, то не знаю, что добавить. Мой ответ и так конкретней некуда. Или о чём другом речь?

 

получаешь содержимое через нет_пакет, распарсиваешь табличку, и сверяешь с секционным именем. И если не изменяет память через скрипт, и тоже сравниваешь с именем секции.

Чтобы определить, что предмет в ящике? А чем по parent_id не устраивает? Вообще, нетпакеты - это последний аргумент. По возможности лучше избегать.

 

здесь ведуют один не очень адекватный и нормальный модер ... Забанить может в раз.
Какое самодостаточное наблюдение =)
 

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

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

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

 

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

Real Wolf

передаешь в функцию юзердату объекта

function get_parent_id(obj)

if obj then

local sobj = alife():object(obj.id)

if sobj and sobj.parent_id then

return sobj.parent_id

end

end

end

на выходе получаешь его парент ид.

далее сравниваешь этот ид с идом конкретного ящика. Если совпадает - значит предмет в ящике.

в общем это дело не совсем для новичков - тут надо все нужные данные в таблички писать - если умеешь работать с таблицами Lua то поймешь как и что.

 

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

кровоSTALKER огромное спасибо за поучение, но только я чтот не видел папки dynamics и в конфигах калаша item_visual, может ты имел ввиду это всё для ЧН или ЗП, в тч такого нету просто. в принцепе я итак понял что ты имел ввиду, мировая модель и модель в руках, а вот про последее, чёт не дошло "И в той же секции с худом пишешь

 

anm_reload = ak74_reload_right

и

anm_reload_g = или ak74_reload_right_w_gl или ak74_reload_right_w_gl_rot или ak74_reload_right_w_rot"

 

Поясни, по конкретней что за?

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

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

Garry_Galler,

избыточный код. Зачем так сложно? У тебя по коду на входе функции и так подразумевается серверный объект. Зачем по нему получать серверный ещё раз? Ничего другого не получишь, уж точно =)

Этого достаточно:

function get_parent_id(obj)
    if obj then
        return sobj.parent_id
    end
end

И потом, с точки зрения безопасности и надёжности проверка if obj then ... на самом деле ничего не даёт. Ну проверил, что объекта на самом деле нет, а дальше что? Функция в этом случае возвращает nil. Хуже всего, что этот nil в последствие приводит к непредсказуемым результатам (и не обязательно сразу к вылету). И в итоге ты получаешь отложенную ошибку, которая естественно приведёт к сбою, но совсем не там, где надо, не там где можно понять её источник.

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

if obj then
    --делать что-то с obj.parent_id
else
    --обрабатывать ошибку
end

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

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

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

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

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

 

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

malandrinus, вот кстати чисто на практике nil как 0 не интерпритируется обычно...

(то есть постоянно идут ошибки типа compare with nil и подобное)

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

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

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

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

 

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

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

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

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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