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/
Баба ЯГА 12 Опубликовано 12 Апреля 2021 Поделиться Опубликовано 12 Апреля 2021 (изменено) @WinCap Я знаю как в Lua получать дату и время... Будь добр, прочитай ещё раз мой предыдущий вопрос, внимательно. Потом - сам проверь В ИГРЕ - то что ты рекомендуешь - и ты сам себе ответишь на свой вопрос: "... а чем os.date() не устраивает..." Если бы оно работало В ИГРЕ - я бы не спрашивал Вопрос - актуален: Возможно ли получить в игре скриптово реальное время компьютера (не игровое время) -> как в Lua с помощью os.date()? Если да, то можно пример для получения yy:MM:dd hh:mm:ss? Для "быстрых" и невнимательных: os.date() в игре STALKER - не работает. ! Unknown command: ..\gamedata\scripts\test.lua:101:_attempt_to_index_global_'os'_(a_nil_value) Изменено 12 Апреля 2021 пользователем Баба ЯГА 1 Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/555/#findComment-1380385
NikitosKnyaz 0 Опубликовано 13 Апреля 2021 Поделиться Опубликовано 13 Апреля 2021 можно ли в ОП 2-1 через скрипт выдать и показать на карте все тайники существующие в зоне?! Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/555/#findComment-1380388
I am Dead 918 Опубликовано 13 Апреля 2021 Поделиться Опубликовано 13 Апреля 2021 (изменено) @Баба ЯГА Как это не работает? В OGSE таким образом главное меню подбирается в зависимости от реального времени суток. Скрытый текст function main_menu:InitBackground() local time = level.present() and level.get_time_hours() or tonumber(os.date("%H", os.time())) local night = time <= 8 or time >= 20 self.bg_st:InitTexture(night and "ui\\ui_mm_night_back" or "ui\\ui_mm_main_back") local multiplier = 0.5625 if screen_aspect_ratio > 2 then -- ultra-wide multiplier = 0.40 end local tex_orig_w = screen_aspect_ratio * 1024 * multiplier local tex_orig_x_offs = (1024 - tex_orig_w) / 2 self.bg_st:SetOriginalRect(tex_orig_x_offs, 0, tex_orig_w, 768); end Изменено 13 Апреля 2021 пользователем I am Dead Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/555/#findComment-1380390
Баба ЯГА 12 Опубликовано 13 Апреля 2021 Поделиться Опубликовано 13 Апреля 2021 (изменено) @I am Dead ну, может, в OGSE - уже и допилили движок и там есть такое, не спорю, у меня - нет (играю в Диетическую Солянку), кстати, в оригинале - тоже нет os. Вот по-этому и спрашиваю - может кто поможет (если, конечно, кто знает). @NikitosKnyaz 12 часов назад, NikitosKnyaz сказал(а): можно ли в ОП 2-1 через скрипт выдать и показать на карте все тайники существующие в зоне?! Скрытый текст Можно, вот так, например: function find_all_tainik() local s_obj,cnt = nil, 0 for i = 1, 65534 do s_obj = alife():object(i) if (s_obj) and (s_obj:section_name():find("inventory" , 1, true) or s_obj:section_name():find("_box" , 1, true)) then cnt = cnt + 1 get_console():execute( "load ::: ".."section: "..s_obj:section_name().." | name: "..s_obj:name().." | id: "..s_obj.id) if level.map_has_object_spot( s_obj.id, "treasure" ) == 0 then -- нет метки level.map_add_object_spot_ser( s_obj.id, "treasure", "Тайник"..s_obj:name() ) -- поставим свою end end end get_console():execute( "load ::: ".."Количество найденных тайников = "..cnt) end find_all_tainik() Изменено 13 Апреля 2021 пользователем Баба ЯГА Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/555/#findComment-1380463
BFG 7 586 Опубликовано 13 Апреля 2021 Поделиться Опубликовано 13 Апреля 2021 @gam а может недозапись ОГФа в системсе ? В таблице капчюрс? 1 "Кругом зомби.....у меня кончаются патроны...." Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/555/#findComment-1380478
ARTLantist 16 Опубликовано 14 Апреля 2021 Поделиться Опубликовано 14 Апреля 2021 Довольно простые вопросы, никогда просто этим не интересовался, но вдруг понадобилось. Натыкался давно в инете на ответы, но сейчас, по закону подлости, когда надо, не могу найти. 1. Как скриптово активировать диалог с нужным нпс? 2. Как активировать торговлю с этим нпс? (Например, после активации определённой фразы) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/555/#findComment-1380616
WinCap 324 Опубликовано 14 Апреля 2021 Поделиться Опубликовано 14 Апреля 2021 @ARTLantist, поскольку вопрос задан в теме "скриптование", то: 1. Функции npc:set_start_dialog("start_dialog") и npc:restore_default_start_dialog(). 2. Функции npc:enable_trade() и npc:disable_trade(). Но, возможно, удастся обойтись стандартными средствами: 1. Теги has_info и dont_has_info для диалога или параметры meet_dialog и use в секции meet работы npc. 2. Параметр trade_enable в секции meet работы npc. 1 S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/555/#findComment-1380626
ARTLantist 16 Опубликовано 15 Апреля 2021 Поделиться Опубликовано 15 Апреля 2021 @WinCap да, мне именно скриптовые методы нужны) Про meet и trade_enable в логике я знаю Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/555/#findComment-1380631
Jek@n 1 343 Опубликовано 21 Апреля 2021 Поделиться Опубликовано 21 Апреля 2021 (изменено) Приветствую. Пару вопросов: 1)В игре есть метод начать неразрываемый диалог с НПС, однако существует хитрость: если нажать паузу, а затем Esc, то такой диалог всё-таки закроется. Как это поправить? 2) Есть такая функция: Скрытый текст if math.random(100) <= 50 then действие_1 elseif math.random(100) > 50 then действие_2 end но срабатывает не всегда. Где ошибка? Спасибо. Изменено 21 Апреля 2021 пользователем Jek@n Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/555/#findComment-1381343
Это популярное сообщение. WinCap 324 Опубликовано 21 Апреля 2021 Это популярное сообщение. Поделиться Опубликовано 21 Апреля 2021 43 минуты назад, Jek@n сказал(а): Есть такая функция: ... Где ошибка? Ошибка, как мне кажется, в elseif. В данном варианте вероятность срабатывания будет такой: 0% <-- действие_1 --> 50% <-- ничего_не_делать --> 75% <-- действие_2 --> 100%. Нужно написать так: Скрытый текст if math.random(100) <= 50 then действие_1 else действие_2 end 1 2 3 S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/555/#findComment-1381346
UriZzz 1 004 Опубликовано 21 Апреля 2021 Поделиться Опубликовано 21 Апреля 2021 4 часа назад, Jek@n сказал(а): нажать паузу, а затем Esc, то такой диалог всё-таки закроется. Как это поправить? Ну, самый простой способ: не нажимать на esc вовремя паузы. Способ по сложнее: отследить начало диалога и на это время через скрипт разбиндить клавишу паузы, что бы не работала, пример - как это сделать, предостановить не могу, так как сам далеко от компа. Ни чего больше, кроме правки движка, в голову не лезет. 2 1 Моя нычка, Нычка в арендованном у Опричника холодильнике Мы хорошие ребята, жаль патронов маловато:) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/555/#findComment-1381366
Norman Eisenherz 355 Опубликовано 23 Апреля 2021 Поделиться Опубликовано 23 Апреля 2021 Здрасьте. [ЗП 1.6.02] Проблема: при каждом повторе сейва и загрузки добавляется примерно 10 секунд реального времени к значению game.time(). Дельта постоянная – время в главном меню при создании сейва и время ожидания на экране загрузки не влияют. Пример: вывод внутреннего таймера в сообщение, сразу же сейв и загрузка – начальное время 35 653 секунд, время после загрузки – 35 665 секунд. Как с этим бороться? Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/555/#findComment-1381585
AndreySol 215 Опубликовано 23 Апреля 2021 Поделиться Опубликовано 23 Апреля 2021 @Norman Eisenherz Попробовать в движке поправить... Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/555/#findComment-1381596
Norman Eisenherz 355 Опубликовано 23 Апреля 2021 Поделиться Опубликовано 23 Апреля 2021 Снимаю вопрос. Через pstor-запись в момент сейва и сравнение на первом апдейте разница ловится достаточно точно. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/555/#findComment-1381608
BFG 7 586 Опубликовано 24 Апреля 2021 Поделиться Опубликовано 24 Апреля 2021 @Norman Eisenherz если хочешь прям конкретно узнать, что грузит время сейва, то надо юзать утилитку filemon. Щас она не юзается на 7ке. Есть другая. Поиском найдешь. Главная сложность это настроить фильтр на определенную папку. Утиль тебе в лог запишет, что, когда и где и за какое время читаются файлы. Именно так я искал время загрузки текстур и звуков, для НС, по заданию Сапсана. В результате была сделана оптимизация и время загрузки сократилось с полутора минут, до 10-18 секунд. Но там после, уже скритово было сделано. Но утиль полезный, правда настраивать его тяжко. Но если ты уж так заморочился, оно того стоит. 1 3 "Кругом зомби.....у меня кончаются патроны...." Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/555/#findComment-1381619
Norman Eisenherz 355 Опубликовано 24 Апреля 2021 Поделиться Опубликовано 24 Апреля 2021 @BFG game.time() – счетчик времени в активном сейве, и этот счетчик должен обновляться только при апдейте актера, который начинается после загрузки сейва и отключения меню. Или не совсем так? Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/555/#findComment-1381632
Баба ЯГА 12 Опубликовано 24 Апреля 2021 Поделиться Опубликовано 24 Апреля 2021 Написал меню: class "menu" (CUIScriptWnd) function menu:__init() super() self:InitControls() end function menu:__finalize() end -- и т.д. открываю прямо в игре из инвентаря, всё работает. Вопрос: как его отловить из другого скрипта (когда это меню открыто)? Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/555/#findComment-1381677
AndreySol 215 Опубликовано 24 Апреля 2021 Поделиться Опубликовано 24 Апреля 2021 @Баба ЯГА Код покажи, которым ты открываешь свое окно. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/555/#findComment-1381679
Баба ЯГА 12 Опубликовано 24 Апреля 2021 Поделиться Опубликовано 24 Апреля 2021 16 минут назад, AndreySol сказал(а): @Баба ЯГА Код покажи, которым ты открываешь свое окно. открываю так level.start_stop_menu( ui_my_menu.menu(), true ) -- открываю меню Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/555/#findComment-1381682
Капрал Хикс 567 Опубликовано 24 Апреля 2021 Поделиться Опубликовано 24 Апреля 2021 Наткнулся на один очень странный и неприятный вылет. Платформа RMA mod v1.1.5 + Shadows Addon v0.8.5 + Патч lvg_brest v3.5... При быстром сохранении и загрузке с него вылет вида: Скрытый текст FATAL ERROR [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: ... of chernobyl\gamedata\scripts\dialog_manager.script:880: attempt to compare number with nil stack trace: Собственно строка: if ver >= 7 then Идёт проверка патча, верно? В system.ltx указан шестой патч, т.е. current_server_entity_version = 7 А вот при попытке поставить затычку перед строкой if ver >= 7 then -> if not ver then ver = 8 end... (вся функция ниже под спойлером) Скрытый текст function load(npc, reader, ver) if selected_phrase_by_id == nil then selected_phrase_by_id = { intro = {}, cool_info = {}, action_info = {} } end local flag = nil if not ver then ver = 8 end if ver >= 7 then flag = reader:r_stringZ() else flag = tostring(reader:r_s16()) end if flag ~= "-1" then selected_phrase_by_id.intro[npc:id()] = {phrase = flag, count = 0} else selected_phrase_by_id.intro[npc:id()] = nil end if ver >= 7 then flag = reader:r_stringZ() else flag = tostring(reader:r_s16()) end if flag ~= "-1" then selected_phrase_by_id.cool_info[npc:id()] = {phrase = flag, count = 0} else selected_phrase_by_id.cool_info[npc:id()] = nil end if ver >= 7 then flag = reader:r_stringZ() else flag = tostring(reader:r_s16()) end if flag ~= "-1" then selected_phrase_by_id.action_info[npc:id()] = {phrase = flag, count = 0} else selected_phrase_by_id.action_info[npc:id()] = nil end end ...начинаются вылеты вида: Скрытый текст Синхронизация... * phase time: 4 ms * phase cmem: 225135 K * [win32]: free[2698856 K], reserved[466984 K], committed[1028400 K] * [ D3D ]: textures[298939 K] * [x-ray]: crt heap[225135 K], process heap[464336 K], game lua[27948 K], engine lua[217 K], render[4108 K] * [x-ray]: economy: strings[6773 K], smem[8222 K] stack trace: 0023:05185AF0 xrGame.dll [error][ 87] : Параметр задан неверно. Но! С ручных сейвов всё грузится. Мало того. Стоит переименовать квиксейв в папке сейвов вручную, игра послушно грузится с него тоже. Какая-то хаффовщина, честное слово. То ли это проблема движка с правками x-ray extensions, то ли я не знаю. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/555/#findComment-1381719
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти