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/
Nazgool 250 Опубликовано 2 Марта 2015 Поделиться Опубликовано 2 Марта 2015 А что там? В SciTE-е справку видел? Так вот попытка "разжевать" каждую функцию, варианты и способы. Для тебя, скорее всего, может показаться и мало интересно. я рассуждаю "мне из строки нужны слова", а ты рассуждаешь "мне надо разделить строку по пробелам", я правильно понял? Ну, блин, в общем-то правильно. Я понимаю, что вопрос был не конкретный, и понимать его можно по разному.Но я рассуждаю так, как написано. По буквам. Эти буквы говорят ровно столько, сколько процитировано. А именно говорилось о пробелах и соответствии им шаблона %w+. Только и всего. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/305/#findComment-921306
Anonim 680 Опубликовано 4 Марта 2015 Поделиться Опубликовано 4 Марта 2015 (изменено) Надеюсь сюда пишу... Товарищи и господа, как сделать зависимость одной графической опции от другой? Например как в ЧН, там есть 2 опции, одна "вкл/выкл солнечные лучи", а вторая "качество лучей низко/средне/высоко". Дак вот вторая из них недоступна пока не включена первая. Как это сделать? Если что, скрипт... ui_mm_opt_video_adv Изменено 4 Марта 2015 пользователем Anonim Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/305/#findComment-921859
Это популярное сообщение. Charsi 441 Опубликовано 5 Марта 2015 Это популярное сообщение. Поделиться Опубликовано 5 Марта 2015 @Anonim, принцип блокировки зависимых опций в ТЧ похож на ЧН. Например, добавим чекбокс в список и зарегистрируем его под именем "option1". _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) xml:InitStatic ("video_adv:cap_option1", _st) ctl = xml:InitCheck ("video_adv:check_option1", _st) handler:Register (ctl, "option1") Добавим трекбар для другой опции и сделаем его зависимым от первой опции. _st = xml:InitStatic ("video_adv:templ_item", self.scroll_v) xml:InitStatic ("video_adv:cap_option2", _st) ctl = xml:InitTrackBar ("video_adv:track_option2", _st) handler.m_preconditions[ctl] = function() local opt1 = self:GetCheckButton("option1") ctrl:Enable( opt1:GetCheck() ) end В таблицу handler.m_preconditions для ключа ctl добавляется функция, которая будет выполняться при вызове метода UpdateDependControls объекта окна опций. Осталось самое простое - на нажатие чекбокса опции "option1" назначить вызов UpdateDependControls. Идем в ui_mm_opt_main.script и в функцию function options_dialog:InitCallBacks() добавляем self:AddCallback("option1", ui_events.BUTTON_CLICKED, self.UpdateDependControls, self) В ЗП сделано чуть иначе. Там все опции имеют прекондишены, завязанные на тип рендера. При смене типа рендера список опций полностью очищается и заполняется заново опциями, доступными только для выбранного рендера. 1 3 2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/305/#findComment-921900
svarog2741 83 Опубликовано 12 Марта 2015 Поделиться Опубликовано 12 Марта 2015 Ребята, возникла проблема с проигрывание худ анимации при использовании итема. Помогите со скриптом , если не трудно. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/305/#findComment-923922
RayTwitty 567 Опубликовано 14 Марта 2015 Поделиться Опубликовано 14 Марта 2015 (изменено) Интересно, а можно ли скриптом добавить к игровым объектам новый метод (например: db.actor:my_method())? По идее, достаточно иметь ссылку на CScriptGameObject, но вот я что-то не припомню, есть ли такое в оригинале... Изменено 14 Марта 2015 пользователем Shadows Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/305/#findComment-924170
Nazgool 250 Опубликовано 14 Марта 2015 Поделиться Опубликовано 14 Марта 2015 (изменено) Интересно, а можно ли скриптом добавить к игровым объектам новый метод Можно. Примерно так : local act_mt = getmetatable(db.actor) -- для ГГ своя метатаблица local npc_mt = getmetatable(alife():story_object(100)) -- неважно кто, для всех NPC одна метатаблица local new_npc_methods = { new_1 = function(self, arg_1, ... , arg_N) -- собственно новый метод 1. self передается автоматом - это сам объект -- action end, new_2 = function(self, arg_1, ... , arg_N) -- новый метод 2 и т.д. -- action end, } -- не забыть оригинальные метаметоды local act_index = act_mt.__index local npc_index = npc_mt.__index -- переназначение метаметодов function act_mt.__index(t,k) return new_npc_methods[k] or act_index(t,k) end function npc_mt.__index(t,k) return new_npc_methods[k] or npc_index(t,k) end a = db.actor:new_1(arg_1, ... , arg_N) b = alife():story_object(100):new_1(arg_1, ... , arg_N) c = alife():story_object(004):new_1(arg_1, ... , arg_N) Изменено 14 Марта 2015 пользователем Nazgool 2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/305/#findComment-924229
RayTwitty 567 Опубликовано 14 Марта 2015 Поделиться Опубликовано 14 Марта 2015 (изменено) Примерно такСпасибо, немного переделал таким образом: local game_object = {} local game_object_mt = getmetatable(db.actor) local game_object_idx = game_object_mt.__index function game_object_mt.__index(t, k) return game_object[k] or game_object_idx(t, k) end -- методы function game_object.get_id(self) if self:is_game_object() then return self:id() end return -1 end -- вызовы log1("id = "..db.actor:get_id()) log1("id = "..db.actor:active_item():get_id())Всё пашет, только онлайновый актор нужен)) Изменено 14 Марта 2015 пользователем Shadows 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/305/#findComment-924334
Сталкер-Стрелок 12 Опубликовано 14 Марта 2015 Поделиться Опубликовано 14 Марта 2015 (изменено) , а можешь сказать на практике зачем это нужно? Я никак не пойму где подобное может понадобится. Вместо method(obj) писать obj:method()? Явно же не для подобного. Изменено 14 Марта 2015 пользователем Сталкер-Стрелок Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/305/#findComment-924345
Nazgool 250 Опубликовано 14 Марта 2015 Поделиться Опубликовано 14 Марта 2015 , Пожалуйста. Да, я сделал только набросок. Оформлять можно как душе угодно). Я вижу, что ты сделал только для actor-а. Для остальных npc необходимо тоже получать метатаблицу. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/305/#findComment-924346
RayTwitty 567 Опубликовано 14 Марта 2015 Поделиться Опубликовано 14 Марта 2015 (изменено) Вместо method(obj) писать obj:method()? Явно же не для подобного.Например для совместимости кода от разных платформ. Я вижу, что ты сделал только для actor-а.Для оружия, коробок, неписей и т.д. этот код также работает. Я же там не спроста вывожу айди для активного предмета в руках. Изменено 14 Марта 2015 пользователем Shadows Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/305/#findComment-924348
Nazgool 250 Опубликовано 14 Марта 2015 Поделиться Опубликовано 14 Марта 2015 У меня почему-то показало, что это разные метатаблицы... Ну да Бог с ним. Сталкер мне уже не первый раз разные фортеля выкидывает. Главное что получилось )) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/305/#findComment-924355
Anonim 680 Опубликовано 15 Марта 2015 Поделиться Опубликовано 15 Марта 2015 (изменено) @Charsi, [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: ...зработка\gamedata\scripts\ui_mm_opt_video_adv.script:86: attempt to call method 'GetCheckButton' (a nil value) Вот так вот у меня получается. Изменено 15 Марта 2015 пользователем Anonim Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/305/#findComment-924572
Charsi 441 Опубликовано 15 Марта 2015 Поделиться Опубликовано 15 Марта 2015 Потому что вместо self:GetCheckButton должно было быть handler:GetCheckButton. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/305/#findComment-924597
Anonim 680 Опубликовано 16 Марта 2015 Поделиться Опубликовано 16 Марта 2015 [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 : [error]Arguments : LUA error: ...зработка\gamedata\scripts\ui_mm_opt_video_adv.script:87: attempt to index global 'ctrl' (a nil value) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/305/#findComment-924658
Nazgool 250 Опубликовано 16 Марта 2015 Поделиться Опубликовано 16 Марта 2015 (изменено) @Anonim, Если поискать по "m_preconditions", то использование этой таблицы найдется только в одном месте. В файле ui_mm_opt_main.script. for i,j in pairs(self.m_preconditions) do j(i, _current_id) end Т.е. вызывается твоя функция : handler.m_preconditions[ctl] = function() local opt1 = self:GetCheckButton("option1") ctrl:Enable( opt1:GetCheck() ) end В которую передается аргумент "i". Т.е. контрол "ctl" ctl = xml:InitTrackBar ("video_adv:track_option2", _st) А у тебя хоть что-то передается в эту функцию? Нет. Передай и всё. handler.m_preconditions[ctl] = function(ctrl) ... ctrl:Enable(opt1:GetCheck()) -- тогда вот тут "ctrl" и будет определен Изменено 16 Марта 2015 пользователем Nazgool 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/305/#findComment-924679
Anonim 680 Опубликовано 16 Марта 2015 Поделиться Опубликовано 16 Марта 2015 @Nazgool, А можно просто рабочий пример сделать? Хожу вокруг, да около. Просто я в скриптах вообще фигово шарю. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/305/#findComment-924710
Nazgool 250 Опубликовано 16 Марта 2015 Поделиться Опубликовано 16 Марта 2015 Так вот же я показал - function(ctrl) Попробуй так. А если снова что-то не пойдет, то тогда посмотрим. 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/305/#findComment-924713
Anonim 680 Опубликовано 16 Марта 2015 Поделиться Опубликовано 16 Марта 2015 (изменено) @Nazgool, Теперь в опции просто не заходит. UPD: Отбой, заработало, я тупанул. Спасибо большое вам. Изменено 16 Марта 2015 пользователем Anonim Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/305/#findComment-924717
Simonov50 2 Опубликовано 18 Марта 2015 Поделиться Опубликовано 18 Марта 2015 (изменено) Как подключить/зарегистрировать новый скрипт ? В gamedata\script\ положил, а игра его не видит (нет в пространстве имён). Извиняюсь за "сложность" вопроса, но более подходящего места не обнаружил. Заранее спасибо за помощь! Изменено 18 Марта 2015 пользователем Simonov50 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/305/#findComment-925074
Капитан Кузьмичёв 124 Опубликовано 18 Марта 2015 Поделиться Опубликовано 18 Марта 2015 (изменено) А расширение правильное поставил? Обычно все новые script-файлы нормально читаются игрой, не надо их нигде регистрировать. Вопрос. Можно ли, а если можно, то как, сделать телепорт точно такой же, как в Оазисе в Зове Припяти? Чтобы точно так же незаметно и быстро телепортировал. Заранее спасибо. Изменено 18 Марта 2015 пользователем Капитан Кузьмичёв Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/305/#findComment-925077
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти