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 508 Опубликовано 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 508 Опубликовано 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 508 Опубликовано 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 пользователем Капитан Кузьмичёв Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти