Перейти к содержанию

Alex Kireev

Сталкеры
  • Публикаций

    95
  • Зарегистрирован

  • Посещение

Весь контент Alex Kireev

  1. Ну можно попробовать что то в этом роде if (function mod()) { Что то выполнять}
  2. ian98 а если сделать несколько сложных квестов, например как в моде апокалипсис, когда ГГ брал артефакт сердце контролёра появлялись кровососы и контролёры. Аналогично можно и тебе сделать например в деревне новичков зайдет разговор о крутом пропавшем Сталкер, потом ГГ узнает у бармена про этого Сталкера, бармен говорит что обшивался Сталкер у свободы, а свобода говорит что пропал Сталкер в деревне кровососов, когда ГГ находит Сталкера, с него выпадает фн2000, одна единственная на всю игру, а с остальных нпси может выпадать простое оружие и/или части монстров, не знаю, может бред, но как то так?
  3. Я бы с радостью, дак времени пока нет, возможно на выходных появиться А так, можно сылочку на ГД оставить, попробую в воскресенье посмотреть
  4. ian98 а попробуй на чистой сделать ТЧ, если вылеты будут значит дело в скрипте
  5. Если не заработает, то тогда до завтра, что бы сам мог посмотреть что и как
  6. И этот скрипт работает? function remove_random_item() local important_objects = { -- Здесь предметы, которые нельзя удалять [ "bolt" ] = true, [ "device_pda" ] = true, } local tbl = {} local cnt = 0 db.actor:iterate_inventory( function( dummy, obj ) if obj and not important_objects[ obj:section() ] then cnt = cnt + 1 table.insert( tbl, obj:id() ) end end ) if cnt == 0 then return end local rnd = tbl[ math.random( table.getn( tbl ) ) ] local sobj = alife():object( rnd ) if sobj then news_manager.relocate_item( db.actor, "out", sobj:section_name() ) alife():release( sobj, true ) end end
  7. ian98 нужно удалить 10 разных предметов, включая и оружие и боеприпасы?
  8. ian98 это зачем? if cnt < 10 then return end Дополнено 2 минуты спустя function remove_random_common_final(npc, npz) local important_objects = { -- Здесь предметы, которые нельзя удалять [ "bolt" ] = true, [ "device_pda" ] = true } local tbl = {} local cnt = 0 db.actor:iterate_inventory( function( dummy, obj ) if obj and not important_objects[ obj:section() ] then cnt = cnt + 1 table.insert( tbl, obj:id() ) end end ) if cnt == 0 then return end for i=1, 10 do local rnd = tbl[ math.random( table.getn( tbl ) ) ] local sobj = alife():object( rnd ) if sobj then news_manager.relocate_item( db.actor, "out", sobj:section_name() ) alife():release( sobj, true ) end end Дополнено 3 минуты спустя Вот так попробуй Дополнено 5 минуты спустя function remove_random_common_final(npc, npz) local important_objects = { -- Здесь предметы, которые нельзя удалять [ "bolt" ] = true, [ "device_pda" ] = true } local tbl = {} local cnt = 0 db.actor:iterate_inventory( function( dummy, obj ) if obj and not important_objects[ obj:section() ] then cnt = cnt + 1 table.insert( tbl, obj:id() ) end end ) if cnt == 0 then return end else for i=1, 10 do local rnd = tbl[ math.random( table.getn( tbl ) ) ] local sobj = alife():object( rnd ) if sobj then news_manager.relocate_item( db.actor, "out", sobj:section_name() ) alife():release( sobj, true ) end end end Или так
  9. Да, только через цикл удобней и быстрее, мой последний пример аналогичен этому function remove_random_item() local important_objects = { -- Здесь предметы, которые нельзя удалять [ "bolt" ] = true, [ "device_pda" ] = true, } local tbl = {} local cnt = 0 db.actor:iterate_inventory( function( dummy, obj ) if obj and not important_objects[ obj:section() ] then cnt = cnt + 1 table.insert( tbl, obj:id() ) end end ) if cnt < 10 then return end local rnd = tbl[ math.random( table.getn( tbl ) ) ] local sobj = alife():object( rnd ) if sobj then news_manager.relocate_item( db.actor, "out", sobj:section_name() ) alife():release( sobj, true ) end local rnd = tbl[ math.random( table.getn( tbl ) ) ] local sobj = alife():object( rnd ) if sobj then news_manager.relocate_item( db.actor, "out", sobj:section_name() ) alife():release( sobj, true ) end local rnd = tbl[ math.random( table.getn( tbl ) ) ] local sobj = alife():object( rnd ) if sobj then news_manager.relocate_item( db.actor, "out", sobj:section_name() ) alife():release( sobj, true ) end local rnd = tbl[ math.random( table.getn( tbl ) ) ] local sobj = alife():object( rnd ) if sobj then news_manager.relocate_item( db.actor, "out", sobj:section_name() ) alife():release( sobj, true ) end local rnd = tbl[ math.random( table.getn( tbl ) ) ] local sobj = alife():object( rnd ) if sobj then news_manager.relocate_item( db.actor, "out", sobj:section_name() ) alife():release( sobj, true ) end local rnd = tbl[ math.random( table.getn( tbl ) ) ] local sobj = alife():object( rnd ) if sobj then news_manager.relocate_item( db.actor, "out", sobj:section_name() ) alife():release( sobj, true ) end local rnd = tbl[ math.random( table.getn( tbl ) ) ] local sobj = alife():object( rnd ) if sobj then news_manager.relocate_item( db.actor, "out", sobj:section_name() ) alife():release( sobj, true ) end local rnd = tbl[ math.random( table.getn( tbl ) ) ] local sobj = alife():object( rnd ) if sobj then news_manager.relocate_item( db.actor, "out", sobj:section_name() ) alife():release( sobj, true ) end local rnd = tbl[ math.random( table.getn( tbl ) ) ] local sobj = alife():object( rnd ) if sobj then news_manager.relocate_item( db.actor, "out", sobj:section_name() ) alife():release( sobj, true ) end local rnd = tbl[ math.random( table.getn( tbl ) ) ] local sobj = alife():object( rnd ) if sobj then news_manager.relocate_item( db.actor, "out", sobj:section_name() ) alife():release( sobj, true ) end end Скрипту, но только я сделал с использованием цикла, так короче Дополнено 3 минуты спустя И ещё функция рандом может генерировать подряд несколько одинаковых чисел То есть 1, 1, 1, 2, 8, 7, 3, 3, 3, 3, 5, 5, 4 Если будет не 10 предметов удаляться, а 9 то в строке for i=1, 10 do Измени 10 на 11
  10. То есть как то так for i=1, 10 do local rnd = tbl[ math.random( table.getn( tbl ) ) ] local sobj = alife():object( rnd ) if sobj then news_manager.relocate_item( db.actor, "out", sobj:section_name() ) alife():release( sobj, true ) end end
  11. Как то так для 10 одинаковых for i=1, 10 do if sobj then news_manager.relocate_item( db.actor, "out", sobj:section_name() ) alife():release( sobj, true ) end end Дополнено 3 минуты спустя Если для разных то в цикл надо ещё добавить local sobj = alife():object( rnd ) Дополнено 4 минуты спустя local rnd = tbl[ math.random( table.getn( tbl ) ) ]
  12. ian98 alife():release( sobj, true ) это строка отвечает за удаление, можно попробовать обернуть этот участок кода if sobj then news_manager.relocate_item( db.actor, "out", sobj:section_name() ) alife():release( sobj, true ) end в цикл, главное что бы точно было предметов больше 10
  13. Не всегда, на локации дикая территория, я случайно как к то попал в яму с аномалией, так и не понял из-за чего, последнее сохранение было при переходе, а на локации уже много квестов прошел и это был лучший вариант для меня. Если интересно, то вот координаты ямы: -197.52, -14.88, 104,59 Р.S. скрины с локации агропром Дополнено 15 минуты спустя Ну можно попробовать сделать на кнопку телепорт от текущего места положения ГГ, например в любую сторону которая считается землей, ну через проверку Валид. Как то так, если положение ГГ не на земле, то перемещаем ГГ в любую ближайшую сторону до земли
  14. Во время прохождения одного мода, столкнулся с проблемой вылета ГГ за пределы карты. Думаю не у одного меня была такая проблема и тогда приходиться проходит все с начала (и/или последнего сохранения). Мы немного отредактируем один файл и вернём ГГ в пределы карты. Важно: после того как провалились за текстуры, или выпали за пределы карты сохраните игру, иначе не что не получиться. Именно сохраните игру где ГГ находится за пределами карты. Файл игры, который будем редактировать: ui_main_menu.script Для начала заходим в игру, загружаемся и нажимаем клавишу ~ (тильда (Ё)) должно открыться консольное окно После вводим эти команды по очереди, в таком порядке: rs_stats 1 demo_record 1 1я команда отвечает за вывод информации на экран, 2я позволяет летать по локации (свободная камера). Для отключения вывода информации используйте команда rs_stats 0, для выхода из свободной камеры достаточно нажат клавишу Esc Должно получиться что то вроде этого: После с помощью клавиш w,s,d,a перемещаемся на нужную точку И записываем куда нибудь, эти координаты: Координаты между собой разделены запятой, и идут в порядке x, y, z Теперь идём в папку gamedata/scripts, находим файл ui_main_menu.script, (делаем его копию на всякий случай), открываем блокнотом (можно Notepad ++) и в самом конце находим такой блок кода: if dik == DIK_keys.DIK_Q then self:OnMessageQuitWin() end (Кнопка Q отвечает за быстрый выход из игры, срабатывает в главном окне меню игры) В нем заменяем self:OnMessageQuitWin() на self:teleport() То есть должно получиться так: Затем в самом конце этого файла, после конца всех функций, вставляем свою function main_menu:teleport() local a = vector() a.x = -187.59 a.y = 2.74 a.z = 106.37 db.actor:set_actor_position(a) end Где а.х, а.у, а.z координаты, локации, куда надо переместить ГГ. После все сохраняем, запускаем игру, загружаем сохранение и делаем такую комбинацию Esc -> Q -> Esc. После этого ГГ должен переместиться на указанные координаты. Тестировал на ТЧ, версия игры 1.0004
  15. Смотри например есть колбаса, и батон в рюкзаке, то тогда рандомно выбираем что ГГ будет есть, колбасу или батон, если будет ещё энергетик и консерва, то тогда рандомно выбираем из 4х позиций Дополнено 9 минуты спустя Я это так представляю Есть 2 массива 1й хранит например список еды, 2й список медикаментов. В самом массиве несколько позиций, ну то есть колбаса, хлеб, энергетик и вот команда рандом принимает параметр секция, то есть еда, 2й колличество находившихся в рюкзаке типов продуктов (например есть 2 колбасы, и 1 банка энергетика) и вот в конечном итоге это выглядит приблизительно так функция рандом генерирует случайное число которое может быть равно или 1 или 2, где 1 это колбаса, 2 энергетик Дополнено 10 минуты спустя Извините если плохо объяснил, я не очень хорошо понимаю принцип работы программирования
  16. Извини, не хотел обидеть, просто мои знания по сравнению с вашими на нуле. Спасибо за ответ на днях попробуй разобраться
  17. Ребята профаны в lua подскажите пожалуйста Есть 3 функции: 1я срабатывает при достижении актера определенного порога здоровья и вызывает 2я функцию, 2я функции проверяет есть ли у актера медикаменты, если есть несколько типов медикаментов то вызывает 3ю функцию рандомного выбора медикаментов. 3я функция принимает 2 параметра 1й это секция предметов (в будущем будут не только медикаменты), 2й список пронумерованых аптечек и генерирует случайную аптечку, которую актер принимает вот как это я представляю function eat_rand() local medik_table = { [1] = "bread", [2] = "conserva", [3] = "kolbasa" } for k, v in pairs(medik_table) do local item = db.actor:object(v) if item then db.actor:eat(randome (medik_table)) end end end function randome() local section = medik_table local variable = medik_table local rnd = section [math.random(variable)] return rnd end Делал на примере выше, функция eat_rand() вызывается из файла бинд Сталкер. Дополнено 9 минуты спустя Забыл после db.actor:eat(randome (medik_table)) Стоит возврат результата То есть вот так должно быть db.actor:eat(randome (medik_table)) return Дополнено 11 минуты спустя Функции рандом принимает 2 параметра 1й это название секции, артефакты, еда, медикаменты, 2й колличество
  18. ian98 уже vader_33 ответил, по поводу координат. Я могу только добавить что часть артефактов рандомно образуются в аномалиях в момент перехода актера на новую локацию, а затем выбрасываются оттуда. На некоторых модах артефакты в момент ухода с локации удаляются с карт. Я имел ввиду что в модах иногда используется так называемая карта артефактов. Это файл где вручную прописаны положения определенных артефактов. Его можно открыть блокнотом, но это только в модах, в игре сложнее и vader_33 уже ответил как и где это прописано
  19. ian98 да, где то что аномалий рандомно поражают артефакты, некоторые артефакты прописаны в аллспавне, некоторые на карте. Так же можно сделать свои артефакты и их положение надо будет прописать в скрипте, указав функцию вызова, а в самой функции указать название артефакта и вектор его положения
  20. А, понятно Ох, до движка я ещё не дошел, далеко, только начал изучать скрипты Дополнено 0 минут спустя Как виджеты, цитаты удалять из комментариев с мобильной версией сайта? Дополнено 2 минуты спустя Про алкоголь так и не понял вопроса Алкоголь ГГ какой скрипт должен обратывать или какое свойство?