Новое на сайте:
Новости:
Файлы:
Статьи:
Топ пользователей:
Обновления сайта:
Группа "Гости" не имеет право просмотра модуля
Форум S.T.A.L.K.E.R. - Моддинг Разбираем S.T.A.L.K.E.R. Уроки моддинга Полезные функции (ТЧ) |
Полезные функции |
Дата: Суббота, 18.08.2012, 01:14
Сообщение #1
Полезные функции для мододелов
- Если у актора есть все поршни из списка: - Какой то один поршень: - ГГ находится на определенной локации (в нашем случае на Кордоне): - В рюкзаке ГГ есть какая то вещь: - На ГГ одет костюм, есть какое то оружие в руках и т.д (в нашем случае, если у ГГ в руках пистолет, то...): - Выдача поршня: - Выдача какого либо предмета (в данном случае, спавн в рюкзак к ГГ): - Спавн какого либо предмета/сталкера и т.д по координатам: - Смерть ГГ: Со временем, при наличии этого самого времени, буду дополнять данную тему. Если у вас, есть какие либо интересные ф-ии - выкладывайте. |
Дата: Суббота, 18.08.2012, 03:40
Сообщение #2
Рандомный спавн обьекта в игре:
Рандомный спавн разных обьектов: Вызов сообщения: Переводим ГГ в другую группировку(здесь в монолит): Удаляем НПС(или предмет) из игры: Делаем НПС врагом: Делаем НПС другом: Если нужно удалить выданный инфопоршень: Спавним труп НПС: ГГ отдает предмет НПС НПС отдает предмет ГГ |
Дата: Суббота, 18.08.2012, 11:37
Сообщение #3
Quote (Frankenshtayn) Удаляем НПС(или предмет) из игры: Следует уточнить, что "удаление" должно производиться вне "видения" ГГ, т.е. при таком случае ГГ ДОЛЖЕН быть за пределами "аллайфа", который указан в соответствущем по названию файле. Иначе, фатальный вылет. Как "инструмент", можно использовать принудительное удаление ГГ и из "сферы влияния" тем же "ручным" телепортом и небольшой паузой (хватает 2-3 сек.) Но (по моему жалкому опыту) тут надо "ковырять" bind_stalker.script, что очень чревато при наличии "шаловливых ручек", и писать функцию в скрипте. Если кому надо, вопрос отпишите в личку. ЗЫ Кто-то придумает и более "изящный вариант". Сообщение отредактировал Korpus - Суббота, 18.08.2012, 11:52 |
Дата: Суббота, 18.08.2012, 12:11
Сообщение #4
Есть пара очень полезных универсальных функций.
Я лох и подсмотрел их в Солянке, мож, они являются и функциями АМК. Это, что бы проверять наличие НЕСКОЛЬКИХ и РАЗНЫХ предметов в рюкзаке ГГ Это, что бы отдавать в НУЖНОМ количестве НУЖНЫЕ предметы. Вставляется в скриптовый файл и оформляется по типу: Отдача "этих" предметов без появления их в "торговле" оппонента - тупое отбирание их у ГГ. ЗЫ... Ещё раз НАСТОЯТЕЛЬНО - эти "универсалки" должны "лежать" в конкретном скриптовом файле и все ссылки на них должны ТАК-ЖЕ "обзываться" по соответствию. Сообщение отредактировал Korpus - Суббота, 18.08.2012, 12:24 |
Дата: Суббота, 18.08.2012, 20:16
Сообщение #6
Quote (Korpus) Следует уточнить, что "удаление" должно производиться вне "видения" ГГ Не соглашусь, Саша... Удалять можно хоть стоя рядом, а вот то что я упустил, и что действительно важно: эту функцию нельзя вызывать из диалога с НПС которого пытаемся удалить!!! |
Дата: Воскресенье, 19.08.2012, 06:31
Сообщение #7
Цитата (Frankenshtayn) Не соглашусь, Саша... Правильное уточнение, для этого тут и "собрались". Я же отписал "свои впечатления" от конкретной ситуации с удалением НПС в ходе диалога с ним. Вот и "разобрали" некоторые тонкости. Ну... А про "остальное" как-то упустил, виноватьььь <_< Но, Вы же не дадите "расслабитьсО". Для топика - функция вызова "звука в голове ГГ" Не стоит воспринимать мои же "мысли и знания", как "что-то этакое". Пробуйте, это работает. Я сужу не, как спец и программер, а как "представитель группировки от сохи" А ОНО и в правду, "работает". Есть куча литературы по языку ЛУА, там много полезного, хотя и полно "дезинформации" - я только после года "возни" и отмахиваний от "первоисточников" всё же ОПЯТЬ прихожу к выводу, что УЧИТЬСЯ надо сначала "азбуке", а потом уже "терзать" внешние эффекты. Ну... У нас же всегда - "хочется быстрее и всего". А когда "влезешь", то захочется "ещё больше". А ТАМ, извините, ЗНАТЬ надо и НИкТО не подскажет - "сам плавай". Сообщение отредактировал Korpus - Воскресенье, 19.08.2012, 07:04 |
Дата: Воскресенье, 19.08.2012, 11:09
Сообщение #8
Цитата (Frankenshtayn) Удалять можно хоть стоя рядом Ну если перевести НПС сначала в оффлайн, то с ним можно кучу всяких непотребностей сделать В том числе и удаление. Однако я пока не видел нормальной вменяемой ф-ии на перевод... ЗЫ: Либо можно поступить как например я делал с телепортами - т.е при спавне ТП пишем его на пстор актора, затем при удалении обращаемся туда же и удаляем. Т.е ТП удаляется в онлайне и ты можешь в это время на него даже смотреть. ЗЗЫ: На НПС я этот способ не пробовал - не было пока нужды в удалении |
Дата: Среда, 22.08.2012, 01:12
Сообщение #9
Quote (volazar) Однако я пока не видел нормальной вменяемой ф-ии на перевод... Если я правильно помню, то возможность перевода НПС в оффлайн через отдельное поле логики появилась только в ЗП. В логике это выглядит так: Code on_offline = {-jup_b19_yar_enemy_or_dead} %+jup_b19_yar_enemy_or_dead% Т.е. здесь видно, что поддерживается кондлист и выполнение "эффектов". Соответственно в xr_logic.script появилась и часть кода, обрабатывающая это поле: Code if ini:line_exist(section, "on_offline") then l.on_offline_condlist = xr_logic.parse_condlist(npc, section, "on_offline", utils.cfg_get_string(ini, section, "on_offline", npc, false, "", "nil")) else l.on_offline_condlist = xr_logic.parse_condlist(npc, st.section_logic, "on_offline", utils.cfg_get_string(ini, st.section_logic, "on_offline", npc, false, "", "nil")) end В ТЧ или ЧН такой поддержки нет, но наверное можно и сделать, я не знаю…. А можно поступить проще, ну например перевести НПС в оффлайн по ранению: Возьмем Кордон( Бедный Волк, опять будем экспериментироать на нем ) и «лезем» в логику Волка по пути config\misc\gulag_escape.ltx Находим: Code ; Волк [logic@esc_lager_volk] active = walker@esc_lager_volk_walker1 on_death = death@wolf Добавляем: Code on_hit = hit@wolf И в конце логики секцию хита: Code [hit@wolf] on_info = %=pashel_v_offline(esc_wolf)% Чтобы он действительно туда пошел, открываем xr_effects.script и добавляем туда функцию: Code function pashel_v_offline(actor, npc) if npc == nil or npc:alive () == false then return end local sim = alife () if sim ~= nil then sim:set_switch_online (npc:id (), false) sim:set_switch_offline (npc:id (), true) end end Всё. Запускаем игру, получаем от Волка ПМ, стреляем в ногу (главное ранить, а не убить) и Волк исчез, только метка осталась. Таким образом можно переводить НПС в оффлайн с любой секции его логики. |
Дата: Среда, 22.08.2012, 01:25
Сообщение #10
Теперь понятна разгадка из ТТ 2. Когда ты стреляешь в НПС, а из него типа лезут жуки
Спасибо за пример! Хм, а если по сиду? Без прописки логики? Code function pashel_v_offline(actor, npc) local sim = alife() local npc = sim:story_object(111) if npc then sim:set_switch_online (npc:id (), false) sim:set_switch_offline (npc:id (), true) end end Надо будет попробовать завтра. |
Дата: Среда, 22.08.2012, 22:09
Сообщение #11
Quote (volazar) Хм, а если по сиду? Без прописки логики? Володя, я не пробовал, но думаю можно. |
Дата: Понедельник, 08.04.2013, 18:45
Сообщение #13
Цитата (volazar) Удаление любого онлайнового/оффлайнового объекта из игры. Во время удаления можно хоть плясать рядом с ним: Ф-ия которая будет все делать: Код function remove_obj(name) local obj for a=1,65535 do obj = alife():object(a) if obj and string.find(obj:name(),name) then alife():release(obj, true) end end end Само удаление, например нескольких сталкеров/монстров: Код function remove_freaks() local tbl_remove = { "bloodsucker_1", "bloodsucker_2"} for _, v in pairs (tbl_remove) do remove_obj(v) end end remove_obj - ф-ия в которую передаем данные для удаления. Если же удаляем кого то одного - цикл и таблица не нужны. Напишите пожалуйста где в этой ф-ции вставлять id НПСа И про это: Цитата (volazar) Если же удаляем кого то одного - цикл и таблица не нужны. подробней если можно Сообщение отредактировал Graff46 - Понедельник, 08.04.2013, 18:47 |
Дата: Понедельник, 08.04.2013, 19:11
Сообщение #14
Цитата (Graff46) где в этой ф-ции вставлять id НПСа Функция работает по секции из конфига/алл спавна. Зачем вам парится с id? Цитата (Graff46) подробней если можно Цикл и таблица нужны если удаляемых объектов много. Необязательно тогда писать по 1 ф-ии на каждый удаляемый объект. Пишется таблица с нужным кол-ом объектов, затем она прогоняется через цикл. Т.е каждый объект, друг за другом будет передан в значение ф-ии remove_obj(name), которая и удалит. Если нужно удалить кого то одного, можно поступить например так: Код function remove_freaks() remove_obj("object") end Либо из любого другого скрипта передать значение: Код file.remove_obj("object") |
Дата: Понедельник, 08.04.2013, 20:56
Сообщение #15
Я просто в этом деле недавно, а если по сути, мне надо Шустрого перевести в офф, удалить и сразу заспавнить в другом месте.
Цитата (volazar) Функция работает по секции из конфига/алл спавна. Зачем вам парится с id? Что бы привязать ф-цию к определённому НПС (в моём случае esc_shustryi). За пояснение циклов и таблиц большое спасибо! Сообщение отредактировал Graff46 - Понедельник, 08.04.2013, 20:58 |
Дата: Понедельник, 08.04.2013, 21:00
Сообщение #16
Цитата (Graff46) а если по сути, мне надо Шустрого перевести в офф и сразу заспавнить в другом месте. Посмотрите 9 сообщение данной темы, пристального внимания заслуживает ф-ия pashel_v_offline(actor, npc). Как вызывать, думаю решите Либо удаляете шустрого, а затем спавните там, где нужно. Если удаление производится в зоне оффлайна - то можете использовать обычный alife():release. Если ГГ рядом с удаляемым объектом, то передаете значение так: remove_obj("esc_shustry"). |
Дата: Понедельник, 08.04.2013, 21:52
Сообщение #17
[code]function l01_escape()
alife(): create("esc_shustryi",vector():set(-203.73789978027,-19.908451080322,-136.2032623291),49134,57) end [code] пишит лог: Arguments : Can't open section 'esc_shustryi' Это я дурак или section это ни есть esc_shustry Сообщение отредактировал Graff46 - Среда, 17.04.2013, 02:02 |
Дата: Вторник, 16.04.2013, 01:30
Сообщение #19
Graff46, удалился нормально? Дело в том, что если спавнить скриптом, необходимо в функцию вставлять имя секции из spawn_sections(gamedata\config\creatures)... Поэтому вариант "2" от Володи_Волозара верен, т.к. такой секции там нет. Попробуй в этот файл (spawn_sections) в самый низ добавить:
Код [esc_shustryi]:stalker $spawn = "respawn\esc_shustryi" character_profile = esc_shustryi spec_rank = regular community = stalker |
| |||