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 Ссылка на комментарий
Nazgool 250 Опубликовано 2 Марта 2015 Поделиться Опубликовано 2 Марта 2015 А что там? В SciTE-е справку видел? Так вот попытка "разжевать" каждую функцию, варианты и способы. Для тебя, скорее всего, может показаться и мало интересно. я рассуждаю "мне из строки нужны слова", а ты рассуждаешь "мне надо разделить строку по пробелам", я правильно понял? Ну, блин, в общем-то правильно. Я понимаю, что вопрос был не конкретный, и понимать его можно по разному.Но я рассуждаю так, как написано. По буквам. Эти буквы говорят ровно столько, сколько процитировано. А именно говорилось о пробелах и соответствии им шаблона %w+. Только и всего. Ссылка на комментарий
Anonim 680 Опубликовано 4 Марта 2015 Поделиться Опубликовано 4 Марта 2015 (изменено) Надеюсь сюда пишу... Товарищи и господа, как сделать зависимость одной графической опции от другой? Например как в ЧН, там есть 2 опции, одна "вкл/выкл солнечные лучи", а вторая "качество лучей низко/средне/высоко". Дак вот вторая из них недоступна пока не включена первая. Как это сделать? Если что, скрипт... ui_mm_opt_video_adv Изменено 4 Марта 2015 пользователем Anonim Ссылка на комментарий
Это популярное сообщение. Charsi 440 Опубликовано 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 Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
svarog2741 83 Опубликовано 12 Марта 2015 Поделиться Опубликовано 12 Марта 2015 Ребята, возникла проблема с проигрывание худ анимации при использовании итема. Помогите со скриптом , если не трудно. НС - шлак, солянки - шлак. Ссылка на комментарий
RayTwitty 518 Опубликовано 14 Марта 2015 Поделиться Опубликовано 14 Марта 2015 (изменено) Интересно, а можно ли скриптом добавить к игровым объектам новый метод (например: db.actor:my_method())? По идее, достаточно иметь ссылку на CScriptGameObject, но вот я что-то не припомню, есть ли такое в оригинале... Изменено 14 Марта 2015 пользователем Shadows Ссылка на комментарий
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 Ссылка на комментарий
RayTwitty 518 Опубликовано 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 Ссылка на комментарий
Сталкер-Стрелок 12 Опубликовано 14 Марта 2015 Поделиться Опубликовано 14 Марта 2015 (изменено) , а можешь сказать на практике зачем это нужно? Я никак не пойму где подобное может понадобится. Вместо method(obj) писать obj:method()? Явно же не для подобного. Изменено 14 Марта 2015 пользователем Сталкер-Стрелок Ссылка на комментарий
Nazgool 250 Опубликовано 14 Марта 2015 Поделиться Опубликовано 14 Марта 2015 , Пожалуйста. Да, я сделал только набросок. Оформлять можно как душе угодно). Я вижу, что ты сделал только для actor-а. Для остальных npc необходимо тоже получать метатаблицу. Ссылка на комментарий
RayTwitty 518 Опубликовано 14 Марта 2015 Поделиться Опубликовано 14 Марта 2015 (изменено) Вместо method(obj) писать obj:method()? Явно же не для подобного.Например для совместимости кода от разных платформ. Я вижу, что ты сделал только для actor-а.Для оружия, коробок, неписей и т.д. этот код также работает. Я же там не спроста вывожу айди для активного предмета в руках. Изменено 14 Марта 2015 пользователем Shadows Ссылка на комментарий
Nazgool 250 Опубликовано 14 Марта 2015 Поделиться Опубликовано 14 Марта 2015 У меня почему-то показало, что это разные метатаблицы... Ну да Бог с ним. Сталкер мне уже не первый раз разные фортеля выкидывает. Главное что получилось )) Ссылка на комментарий
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 Ссылка на комментарий
Charsi 440 Опубликовано 15 Марта 2015 Поделиться Опубликовано 15 Марта 2015 Потому что вместо self:GetCheckButton должно было быть handler:GetCheckButton. Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
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) Ссылка на комментарий
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 Ссылка на комментарий
Anonim 680 Опубликовано 16 Марта 2015 Поделиться Опубликовано 16 Марта 2015 @Nazgool, А можно просто рабочий пример сделать? Хожу вокруг, да около. Просто я в скриптах вообще фигово шарю. Ссылка на комментарий
Nazgool 250 Опубликовано 16 Марта 2015 Поделиться Опубликовано 16 Марта 2015 Так вот же я показал - function(ctrl) Попробуй так. А если снова что-то не пойдет, то тогда посмотрим. 1 Ссылка на комментарий
Anonim 680 Опубликовано 16 Марта 2015 Поделиться Опубликовано 16 Марта 2015 (изменено) @Nazgool, Теперь в опции просто не заходит. UPD: Отбой, заработало, я тупанул. Спасибо большое вам. Изменено 16 Марта 2015 пользователем Anonim Ссылка на комментарий
Simonov50 2 Опубликовано 18 Марта 2015 Поделиться Опубликовано 18 Марта 2015 (изменено) Как подключить/зарегистрировать новый скрипт ? В gamedata\script\ положил, а игра его не видит (нет в пространстве имён). Извиняюсь за "сложность" вопроса, но более подходящего места не обнаружил. Заранее спасибо за помощь! Изменено 18 Марта 2015 пользователем Simonov50 Ссылка на комментарий
Капитан Кузьмичёв 124 Опубликовано 18 Марта 2015 Поделиться Опубликовано 18 Марта 2015 (изменено) А расширение правильное поставил? Обычно все новые script-файлы нормально читаются игрой, не надо их нигде регистрировать. Вопрос. Можно ли, а если можно, то как, сделать телепорт точно такой же, как в Оазисе в Зове Припяти? Чтобы точно так же незаметно и быстро телепортировал. Заранее спасибо. Изменено 18 Марта 2015 пользователем Капитан Кузьмичёв Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти