Svoboда 3 Опубликовано 23 Апреля 2009 Поделиться Опубликовано 23 Апреля 2009 Тема для обсуждения скриптов всего и всех в серии игр STALKER. Задавая вопрос (!): 1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего; 2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме); 3. Изучите информацию которая может вам помочь: Stalkerin. Там есть много хороших статей касательно данной темы.Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения. Справочное руководство по языку Lua 5.1https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ruСправочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены. Логика со вступлением и четырьмя частями: ВступлениеЧасть перваяЧасть втораяЧасть третьяЧасть четвертая. Smart_terrain (в простонароде - гулаг)Интересный способ настроики логики для гулаговСкриптовая часть игровой логики 4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос; 5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе; 6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода; 7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины. 8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ. 9. И помните: «Правильно заданный вопрос – половина ответа». Какие вопросы следует задавать, а какие нет... Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу. Вопросы которые будут удалятся, следовательно их задавать не нужно:-- Где находится та или иная функция? Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;-- Как сделать что-то/то-то? С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов? В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос. И последнее: очень рекомендовано к прочтению Правила форума 1 2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/
Kirgudu 1 370 Опубликовано 12 Августа 2019 Поделиться Опубликовано 12 Августа 2019 @Full Noob, level.client_spawn_manager():add(l_i_mod_repairkit.id, -1, mod_set_newkit_condition) Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/497/#findComment-1278400
Full Noob 1 Опубликовано 13 Августа 2019 Поделиться Опубликовано 13 Августа 2019 @Kirgudu, не помогло. Один фиг дебаговые сообщения о юзе предмета перестают появляться после использования комплекта. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/497/#findComment-1278434
AndreySol 215 Опубликовано 13 Августа 2019 Поделиться Опубликовано 13 Августа 2019 12 часов назад, Full Noob сказал: Методом тыка выяснил, что проблему вызывает колбэк на вход в онлайн комплекта: Ну так выясняй дальше, у тебя в ф-ции кэллбэка всего 7 строк кода. Закомментил одну - проверил, и так пока не найдешь ошибку. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/497/#findComment-1278444
Full Noob 1 Опубликовано 13 Августа 2019 Поделиться Опубликовано 13 Августа 2019 (изменено) @AndreySol, не помогло. Я закомментил весь колбэк, но ничего не поменялось. Спасает только закомменчивание самой строчки "заведения" колбэка, но мне без него никак, так как при попытке сделать set_condition происходит краш: Скрытый текст [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: ...l.k.e.r\gamedata\scripts\secretsmod_functions.script:123: attempt to call method 'set_condition' (a nil value) Изменено 13 Августа 2019 пользователем Full Noob Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/497/#findComment-1278484
AndreySol 215 Опубликовано 13 Августа 2019 Поделиться Опубликовано 13 Августа 2019 6 часов назад, Full Noob сказал: так как при попытке сделать set_condition происходит краш: А ты уверен что имеется такая экспортирования ф-ция: "set_condition"? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/497/#findComment-1278605
Full Noob 1 Опубликовано 14 Августа 2019 Поделиться Опубликовано 14 Августа 2019 @AndreySol, всмысле? Если ты имеешь в виду "а можно ли НЕ на оружии применить set_condition", то я отвечу: да, можно. Только что поменял запуск функции спавна открытого комплекта на простой obj:set_condition(0.5). Это сработало. Если имелось в виду "можно ли получить condition НЕ оружия и перенести на другое НЕ оружие", то я уверен, что да (но это не точно). Но я попробовал написать так: Скрытый текст l_i_mod_repairkit = alife():create(t_s_sect, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) l_i_mod_repairkit:set_condition(0.5) Результат можешь почитать в моём предыдущем посте. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/497/#findComment-1278674
Full Noob 1 Опубликовано 15 Августа 2019 Поделиться Опубликовано 15 Августа 2019 (изменено) Сильно пахнет маразмом. Появилась кое-какая мысль и я решил попробовать в конец колбэка на выход в онлайн дописать level.client_spawn_manager():remove(n_id,-1) Получил довольно экзотический вылет: Скрытый текст stack trace: 0023:03C9D16A xrGame.dll [error][ 183] : Невозможно создать файл, так как он уже существует. Ещё эксперементировал с вторым ИД (который -1 сейчас). Пробовал и 0 и db.actor:id() (вроде что 0 что актор ид одинаковые насколько я знаю, но я так на всякий). Изменено 15 Августа 2019 пользователем Full Noob Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/497/#findComment-1278809
_g.script 3 670 Опубликовано 19 Августа 2019 Поделиться Опубликовано 19 Августа 2019 Всем добрый день. Вопрос по restriction_stock. Возможно ли к фиксированной InvMax добавлять числовые значения, полученные из функции через массив. Т.е имеем функцию проверки, одет ли костюм и если да, то какой. Отсюда находим кол-во дополнительного места для рюкзака и прибавляем к InvMax. Или же нужно оперировать в самой функции restriction_of_stock(ItemObj,Fix)?(Где я и застрял, т.к. при каждом вызове функции InvMax постоянно увеличивается). Моих знаний здесь не хватает... Здесь могла быть ваша реклама. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/497/#findComment-1279340
Norman Eisenherz 355 Опубликовано 21 Августа 2019 Поделиться Опубликовано 21 Августа 2019 Здрасьте. ТЧ 1.0006. Есть мод с выводом статиков на HUD. Требуется поймать начало/конец катсцены и нажатие клавиш [Num +/-], чтобы временно скрыть статики. Как отследить указанные события? Может, есть проверка вроде hud_off() == true/false или отслеживание действия level.hide_indicators? Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/497/#findComment-1279653
AndreySol 215 Опубликовано 21 Августа 2019 Поделиться Опубликовано 21 Августа 2019 3 часа назад, Norman Eisenherz сказал: Требуется поймать начало/конец катсцены Любая кат-сцена откуда-то запускается, из логики какого-то объекта. Там и добавь скрытие индикаторов. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/497/#findComment-1279693
Иван Собакин 0 Опубликовано 24 Августа 2019 Поделиться Опубликовано 24 Августа 2019 [COP] Мне нужно создать скрипт для поиска рандомного пустого смарта.Уже 3 неделю бъюсь. Помогите плз. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/497/#findComment-1280410
Дмитрий Зверев 0 Опубликовано 13 Сентября 2019 Поделиться Опубликовано 13 Сентября 2019 Всем привет. Есть функция, которая при нажатии на кнопку на gui начинает выполнять много других весёлых функций (с вероятностью 0,8 телепортировать актора в нужное место, после чего высчитывать вероятность, за сколько он до этого места "добрался"; с вероятностью 0,2 забрасывать его по другим координатам, где его ждут бандиты. Вдовесок - затемнение экрана, перемотка времени, сообщения о том, что актор добрался за N часов и т.п. Практически всё работает хорошо, но, как говорится, есть нюанс: 1) Иногда актора просто телепортирует в локацию (куда выставлена вероятность 0,8) без сообщения и без перемотки времени; 2) Иногда эктора телепортирует в нужную локацию, но приходят два сообщения (например, "вы добрались за 2 часа" и "вы добрались за 3 часа") и время отматывается ажно на 5 часов вперёдт. Вопрос: как это можно пофиксить? Я не ахти какой скриптер, так что, пожалуйста, подскажите, может, я что-то не дописал или ошибся в расчётах вероятности. Заранее спасибо! Скрытый текст function ui_map:button3_button_clicked() if math.random(1,100) < 80 then xr_effects.teleport_actor(nil, nil, {"way_to_f","look_to_f"}) level.add_pp_effector("black.ppe", 150, false) if math.random(1,10) <= 3 then news_manager.send_tip(db.actor, "arrived_to_farm_1_hour", 0, "default", 5000) xr_effects.forward_game_time(nil, nil, {1}) end if math.random(1,10) < 6 then news_manager.send_tip(db.actor, "arrived_to_farm_2_hour", 0, "default", 5000) xr_effects.forward_game_time(nil, nil, {2}) end if math.random(1,10) >= 6 then news_manager.send_tip(db.actor, "arrived_to_farm_3_hour", 0, "default", 5000) xr_effects.forward_game_time(nil, nil, {3}) end else xr_effects.teleport_actor(nil, nil, {"random_event_vodokachka_way","random_event_vodokachka_look"}) news_manager.send_tip(db.actor, "arrived_to_vodokachka", 0, "default", 5000) level.add_pp_effector("black.ppe", 150, false) xr_effects.forward_game_time(nil, nil, {4}) end self:HideDialog() end Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/497/#findComment-1284461
lordmuzer 743 Опубликовано 13 Сентября 2019 Поделиться Опубликовано 13 Сентября 2019 (изменено) 3 hours ago, Дмитрий Зверев said: 1) Иногда актора просто телепортирует в локацию (куда выставлена вероятность 0,8) без сообщения и без перемотки времени; Это потому что все 3 условия для сообщения отдельно вычисляют "вероятность". Може так выйти что не одно не сработает. 3 hours ago, Дмитрий Зверев said: 2) Иногда эктора телепортирует в нужную локацию, но приходят два сообщения (например, "вы добрались за 2 часа" и "вы добрались за 3 часа") и время отматывается ажно на 5 часов вперёдт. А это уже потому что с таким кодом может сработать больше одного условия для сообщения. Исправленный пример: Spoiler function ui_map:button3_button_clicked() if math.random(1,100) < 80 then xr_effects.teleport_actor(nil, nil, {"way_to_f","look_to_f"}) level.add_pp_effector("black.ppe", 150, false) local rnd = math.random(1,10) -- считаем "вероятность" один раз if rnd <= 3 then news_manager.send_tip(db.actor, "arrived_to_farm_1_hour", 0, "default", 5000) xr_effects.forward_game_time(nil, nil, {1}) elseif rnd < 6 then news_manager.send_tip(db.actor, "arrived_to_farm_2_hour", 0, "default", 5000) xr_effects.forward_game_time(nil, nil, {2}) elseif rnd >= 6 then news_manager.send_tip(db.actor, "arrived_to_farm_3_hour", 0, "default", 5000) xr_effects.forward_game_time(nil, nil, {3}) end else xr_effects.teleport_actor(nil, nil, {"random_event_vodokachka_way","random_event_vodokachka_look"}) news_manager.send_tip(db.actor, "arrived_to_vodokachka", 0, "default", 5000) level.add_pp_effector("black.ppe", 150, false) xr_effects.forward_game_time(nil, nil, {4}) end self:HideDialog() end Изменено 13 Сентября 2019 пользователем lordmuzer 1 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/497/#findComment-1284491
Баба ЯГА 12 Опубликовано 16 Сентября 2019 Поделиться Опубликовано 16 Сентября 2019 Мужики! Вот, проигрывается , для примера, любой звук: local path = "characters_voice\\human_03\\stalker\\talk\\labux\\labux_28" -- string local so = sound_object( path ) -- userdata local pso = so:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) -- nil ВОПРОС: как узнать, что этот звук в данный момент проигрывается и остановить его принудительно? Что-то типа --> если звук SO сейчас проигрывается то ОСТАНОВИТЬ проигрывание Типа такого, но так, естественно, не работает... if so:playing() then so:stop() end Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/497/#findComment-1284924
Kirgudu 1 370 Опубликовано 16 Сентября 2019 Поделиться Опубликовано 16 Сентября 2019 @Баба ЯГА, local pso = so:play(db.actor, 0, sound_object.s2d) if pso:playing() then pso:stop() end 1 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/497/#findComment-1284958
Баба ЯГА 12 Опубликовано 16 Сентября 2019 Поделиться Опубликовано 16 Сентября 2019 2 часа назад, Kirgudu сказал: @Баба ЯГА, local pso = so:play(db.actor, 0, sound_object.s2d) if pso:playing() then pso:stop() end local pso = so:play(db.actor, 0, sound_object.s2d) if pso:playing() then pso:stop() end не пойдёт, pso возвращает nil , увы. Я написал это в первом своём посте, так не будет работать. Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/497/#findComment-1284988
abramcumner 1 234 Опубликовано 17 Сентября 2019 Поделиться Опубликовано 17 Сентября 2019 9 часов назад, Баба ЯГА сказал: Я написал это в первом своём посте, так не будет работать. В твоем посте и у Kirgudu вызываются разные методы для проигрывания звука. Как написал Kirgudu, должно работать. 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/497/#findComment-1285008
Баба ЯГА 12 Опубликовано 17 Сентября 2019 Поделиться Опубликовано 17 Сентября 2019 4 часа назад, abramcumner сказал: В твоем посте и у Kirgudu вызываются разные методы для проигрывания звука. Как написал Kirgudu, должно работать. Да, ты прав, прошу прощения, я не заметил что в моём случае play_no_feedback, а в его - play. В любом случае, проблема решена ещё вчера двумя разными способа. Всем спасибо! Вопрос снимается. Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/497/#findComment-1285037
_Sk8_AsTeR_ 122 Опубликовано 18 Сентября 2019 Поделиться Опубликовано 18 Сентября 2019 (изменено) Господа, время доброго! У меня вот какой интересный вопросец. У меня реализован скрипт, читающий нетпакеты всех НПС, после чего имена всех мне интересующих записываются в таблицу: Скрытый текст for i = 1, 65535 do local sobj = alife():object(i) if (sobj) and IsNpcStalker(sobj) then --отсеиваем все объекты кроме интересующих:нейтралы, свобода, долг local pk = get_netpk(sobj) --рабоатем с нетпакетом объекта if pk and pk:isOk() then local data = pk:get() --тягаем нетпакет local charname = data.character_name --получаем имя объекта table.insert(tab,charname) --пишем имя в таблицу tab end end end end Далее с разными целями я использую рандомные имена существующих НПС из таблицы следующим образом: Скрытый текст function name_npc() return tab[math.random(#tab)] end И вот какой у меня вопрос: каким образом в таблицу одновременно с именем_кличкой НПС записывать его Id? А после каким образом можно через функцию "name_npc()" прочитать только одну из двух переменных? Таким образом я хочу реализовать фишку, что когда приходило бы сообщение в сталкерскую сеть от нпс: amk.send_tip("тело сообщения", testt.name_npc(), время, 15, "common_channel") , то у этого НПС отнималось определенное кол-во денег, за СМС. Изменено 18 Сентября 2019 пользователем _Sk8_AsTeR_ Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/497/#findComment-1285251
Kirgudu 1 370 Опубликовано 19 Сентября 2019 Поделиться Опубликовано 19 Сентября 2019 @_Sk8_AsTeR_, Скрытый текст table.insert(tab, {id = sobj.id, name = data.character_name}) -- пишем id и имя в таблицу tab function get_npc() return tab[math.random(#tab)] end local npc = testt.get_npc() amk.send_tip("тело сообщения", npc.name, время, 15, "common_channel") -- аналогично добавляем отъём денег по npc.id 1 2 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/497/#findComment-1285348
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти