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

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


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

Monnoroch

Я думаю, твой первый вариант почти правильный. Если я правильно понимаю все допущения, то достаточно вернуть первое попавшееся значение. В этом случае твой код лишь немного изменится:

function set()
    for k,v in pairs(tbl) do
        if db.actor:object(k) then
            return v -- нет смысла ждать до конца таблицы, возвращаем первое попадание
        end
    end
    return nil -- точно не помню, по дефолту кажется и так nil вернёт. Может и не надо явно return ставить.
end

Альтернативой было бы перебрать предметы в инвентаре до первого попадания по ключу в таблице. Но не думаю, что это будет эффективнее, поскольку предметов в инвентаре будет почти наверняка больше, чем строк в этой таблице.

 

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

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

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

 

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

Monnoroch, Надо: получить 2е значение из таблицы при наличии у ГГ обьекта с секцией = 1му значению из таблицы.

 

зы: не очень понятно выразились: как секция может быть равна значению?

 

function SearchMax (tbl)
    if tbl ~= nil then
        local fMax
        for k,v in pairs (tbl) do
            if fMax == nil then
                fMax = v
            else
                if v > fMax then 
                    fMax = v
                end
            end
        end
        return fMax
    else
        return false
    end
end

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

типа такого

function set()
    local res = 0
    for k,v in pairs(tbl) do
        if db.actor:object(k) then
            res = math.max(res, v)
        end
    end
    return res -- вернёт 0, если попадания не было
end

 

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

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

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

 

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

malandrinus, "k" - это счётчик, а "v" - это значения таблицы по индексу из счётчика. Так? Или наоборот?

 

function what_for_this_function (tbl)
    if tbl ~= nil then
        for k,v in pairs (tbl) do
            if db.actor:object(tbl[k]) then     --tbl[k] равно v? Это вопрос такой
                return tbl[2]
            end
        end
        return false
    else
        return false
    end
end

 

А где здесь ошибка?

зы: вот так привык делать так:

local tbl = {

[1] = value1

[2] = value2

}

Изменено пользователем IQDDD
Ссылка на комментарий
Monnoroch, k - это ключ, v - это значение. Так? Просто привык работать не с таблицами, а с массивами, потому никак не могу перестроиться. ИМХО: хоть структурирование данных в таблицы прибавляет lua гибкости, но и ещё тем, кто привык к массивами, прибавляет непонятности. и всё же я против того, чтобы значения (в вашем случае string) писать в ключи, а индексы в значения. структурирование кода в целом нарушается.
Ссылка на комментарий
"k" - это счётчик, а "v" - это значения таблицы по индексу из счётчика. Так? Или наоборот?

for k,v in pairs (tbl) do

if db.actor:object(tbl[k]) then --tbl[k] равно v? Это вопрос такой

В конструкции

for k,v in pairs ...

k - это текущий ключ в таблице (собственно, потому эту переменную и называют обычно k, от key)

v - это соответствующее ему значение (опять же v - от value)

Там выше tbl[k] на самом деле равно v, но v у тебя и так есть. Зачем же получать его ещё раз?

 

Monnoroch

только что обратил внимание. В раннем посте у тебя было

local tbl = {
"a" = 1,
"b" = 2,
"c" = 3
}

Так работать не будет. Надо:

local tbl = {
["a"] = 1,
["b"] = 2,
["c"] = 3
}

С квадратными скобками. Это принципиально.

 

дополнил:

 

Если кто не знает. Конструкция вида:

t = {v1, v2, v3, и т.д.}

на самом деле эквивалентна конструкции:

t = {

[1] = v1,

[2] = v2,

[3] = v3,

и т.д.

}

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

Но ничто не мешает позже добавить в эту же таблицу значение, которое эту последовательность ключей нарушит.

 

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

Мне думается, что здесь как раз такой случай, когда надо таблицу использовать именно как ассоциативный массив в чистом виде. Так что имя секции - совершенно нормальный ключ.

 

 

А как сделать бессмертие квестовым NPC, наприер Дэну?

 

Все квестовые неписи прописаны в all.spawn. Его надо разобрать, прописать им в соответствующие секции неуязвимость, собрать заново. Придётся начинать новую игру.

Можно найту тулзу, которая редактирует all.spawn без его разборки. Поищи сам на эту тему, или может кто подскажет. Опять же, придётся начать новую игру.

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

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

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

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

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

 

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

malandrinus, можешь еще раз уточнить что делает функция math.max?

Разве она не выбирает из 2х значений большее?

 

В моем случае функция вполне может выбрать все 3 значения в таблице.(они все подойдут) и максимальное из них ТОЧНО будет как ты написал выбираться?

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

Monnoroch

 

Все правильно, math.max выбирает наибольшее число. Но она стоит в цикле, поэтому каждый раз сравниваются предыдущее наибольшее и вновь полученное числа, и из них выбирается максимальное. Которое на следующей итерации снова сравниается с очередным полученным числом.

Мои работы:

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

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

Soul Cube

 

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

Ссылка на комментарий
malandrinus, можешь еще раз уточнить что делает функция math.max?

Разве она не выбирает из 2х значений большее?

 

В моем случае функция вполне может выбрать все 3 значения в таблице.(они все подойдут) и максимальное из них ТОЧНО будет как ты написал выбираться?

math.max на самом деле позволяет выбрать максимальное из нескольких значений. Типа такого:

local max_value = math.max(1,3,6,9)

Но ведь у тебя список значений, из которых выбирается максимальное, заранее не известен. Поэтому и стоит цикл с перебором всех строк таблицы и отбором нужных. Или я опять тебя не понял?

 

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

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

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

 

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

Ребята, кому я в личку писал несколько месяцев назад инструкцию по кастом статикам - запостите здесь, а? Многие спрашивают, а переписывать всё с нуля - долго, там много было. Сообщение не сохранил, а кому писал - забыл напрочь :)

ANViL & Rusya Conception, или просто
-=[ARC Team]=-


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

Воот, оффтопик. Тебе рид-онли полагается .

Но я сегодня добрый.

http://www.sendspace.com/file/d2ksus от бардака, converter.exe -unpack -2215 D:\1\gamedata.xp0 .

от 2215 http://stalkerin.gameru.net/downloads/stutils/xrcompress.rar

В .bat файле прописать:

xrcompress.exe -diff D:\games\stalker D:\games\stalker\gamedata -out D:\games\stalker\uncompressed
pause

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

Вот коллбэк на хит в классе "motivator_binder":

function motivator_binder:hit_callback(obj, amount, local_direction, who, bone_index)

 

Как я понимаю, то:

obj - по кому стреляли.

amount - сколько нанесли урона (если промахнулись, то 0)

local_direction - дирекция урона

who - кто стрелял по obj

bone_index - кость, которая повреждена

 

Но тогда почему каждый раз, когда актор попадает по неписю (в голову, руку, ногу, спину, торс, пальцы, стопы и пр.), то amount = 50?

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

А кто может поподробней расписать библиотечные функции типа math.?

 

З.Ы. А у меня 6666 пост в "школе"... :D

Изменено пользователем Monnoroch
Ссылка на комментарий
Но тогда почему каждый раз, когда актор попадает по неписю (в голову, руку, ногу, спину, торс, пальцы, стопы и пр.), то amount = 50?

Из разного оружия стрелял? А если попробовать методом hit?

 

А кто может поподробней расписать библиотечные функции типа math.?

Ну для них то есть расподробная документация. Это же стандартные функции Lua.

http://www.lua.ru/doc/5.html

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

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

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

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

 

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

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

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

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

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

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

Войти

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

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

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