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

Скриптование


Svoboда

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

Доброго времени суток. Есть нескромный вопрос. Человек я в скриптовании и програмировании не слишком умный, часто беру чужие наработки и меняю под себя (конечно же с указанием авторства и огромной благодарностью). Нужна помощь. Взял из ОГСЕ на ТЧ скрипт на ограничение количества артефактов на поясе, немного переделал в силу своих скромных знаний, чтобы общее количество артефактов на поясе не превышало 5 (6 артефакт автоматически снимался). Так вот, скрипт снимает каждый 6 артефакт определенного вида (например, снимает шестую Душу, но общее количество артов может висеть и больше).

Собственно, сама функция:

function remove_arts()


    for key, value in pairs(belt) do
     if string.find(key, "af_") then
         local obj_sect = key
        if belt[key] and belt[key] > 5 then
            amk.remove_item(db.actor:object(key)) 
            amk.spawn_item_in_inv(key)
            belt[key] = belt[key] - 1
            if (not warning_last or warning_last ~= key) then                
                warning_last = key
            end
        end
     end
    end
    
end

Подскажите глупому, пожалуйста, как переделать, чтобы можно было вешать любых 5 артов, и любой 6 арт снимало.

Поделиться этим сообщением


Ссылка на сообщение

@Zander_driver 

12 часов назад, Zander_driver сказал(а):

Что такое здесь belt, и откуда оно берется?

Может, там (откуда оно берется), и надо было, вот это все делать?

belt, насколько я понял, это переменная, которая для пояса используется. В скрипте она вот так записана:

belt = {}

Если вместо belt использзовать например таблицу с артефактами, работать будет?

Поделиться этим сообщением


Ссылка на сообщение

@AndreySol Вот, нашел вроде добавление предмета в таблицу belt

 

function scan_inv(item)
    local section = item:section()
    if section == separator then
        flag = 1
        return
    end
    if flag == 1 then
        if slot_item(item) ~= nil then
            flag = 2
        else
            insert_to_table(belt, section)
            belt_id[item:id()] = true
        end
    end
end

 

-- ƒобавление в таблицу
function insert_to_table(tbl, section)
    if tbl[section] == nil then
        tbl[section] = 1
    else
        tbl[section] = tbl[section] + 1
    end
end

Поделиться этим сообщением


Ссылка на сообщение

@AndreySol движок OGSR, скрипт не трогает арты из рюкзака, тут ты не прав. Только из пояса. Только он считает не общее количество артов, а количество артов одного вида. В этом и загвоздка

 

Поделиться этим сообщением


Ссылка на сообщение

@AndreySol 

18 часов назад, AndreySol сказал(а):

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

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

 

18 часов назад, AndreySol сказал(а):

Насчет удаления по общему кол-ву артов - переделывать все, т.к. у тебя сейчас таблица belt имеет ключи с именами секций артов и значениями их количества на поясе. А тебе надо просто получить кол-во артов и убирать лишние.

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

Поделиться этим сообщением


Ссылка на сообщение

@AndreySol 

2 часа назад, AndreySol сказал(а):

 

function scan_inv(item)
    local section = item:section()
    if section == separator then
        flag = 1
        return
    end
    if flag == 1 then

        if belt_item_count > 5 then

           db.actor:transfer_item(item, db.actor)

           belt_item_count = 0

        else
           belt_item_count = belt_item_count + 1

       end
    end
end

Кстати, неплохо бы знать откуда вызывается ф-ция scan_inv(...)?

Спасибо огромное. Функция работает, именно так как нужно.  scan_inv(...) вызывается именно так, как было написано знатоками выше. Но еще вопросик: функция применяется и к патронам на поясе(забыл указать, что и это у меня есть, виноват). Как применять функцию только к артефактам?(Прошу прощения, если надоел со своими хотелками)

Поделиться этим сообщением


Ссылка на сообщение

Доброго времени суток. Возник вопрос к опытным скриптерам. В ТЧ есть функция выдачи тайника:

    treasure_manager.get_treasure_manager():give_treasure("esc_secret_truck_goods")

Как переделать так, чтобы выдавало рандомный тайник из заданного списка? Буду очень благодарен за помощь.

Поделиться этим сообщением


Ссылка на сообщение

Здраствуйте, нужна помощь. Сталкер ТЧ с модом ОГСМ на движке ОГСР. При получении игроком любого тайника, все содержимое тайника автоматически перемещается ГГ в инвентарь. Может кто сталкивался?

Поделиться этим сообщением


Ссылка на сообщение

Доброго времени суток.Вопрос наверное не в тему, но в моде ОГСМ сломался сон через спальный мешок. Там при использовании спального мешка инициализировалось окно с выбором, сколько поспать. Так вот, игрок спит одинаково долго (часов 10), независимо от того, выбран ли час сна, или же пять часов. Может кто сталкивался с чем подобным, где может быть ошибка? Раньше все работало отлично.

 

Поделиться этим сообщением


Ссылка на сообщение

Доброго времени суток. Вопрос к знатокам. Есть ли у кого любой скрипт воровства вещей из ящиков на ТЧ (даже самый примитивный). Буду премного благодарен.

Поделиться этим сообщением


Ссылка на сообщение

Вопрос к знатокам. Как очистить определенный инвентарный ящик по ID? То-есть, как, к примеру, определенным скриптом удалить все предметы из ящика в деревне новичков?

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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