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/
Shredder 49 Опубликовано 21 Мая 2013 Поделиться Опубликовано 21 Мая 2013 прежде чем кидаться репликами, самому проверить на практике...Проверено и не раз, не работает. Я прекрасно знаю, что такое замыкание. В твоём примере на каждую кнопку навешан свой обработчик: function() self:OnBtnClick(id) end. В момент вызова будет фактически выполнен код self:OnBtnClick(id), но к тому моменту переменная id будет содержать последнее значение цикла. Замыкается переменная, а не её значение. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/257/#findComment-777338
Artos 99 Опубликовано 21 Мая 2013 Поделиться Опубликовано 21 Мая 2013 (изменено) Shredder, прекрати гнать пургу... и если у тебя(!) не работает - то совет уже дан - учи матчасть. И удивляет даже не то, что рабочий код у тебя не работает, или то, что предложенный тобою - испражнение, а то, что даже суть установки коллбэка тобою извращается. Толкуя об одном и том же, ты напрочь не видишь, что тоже самое и в предлагаемом тобою коде, т.е. тот же самый динамический id точно так же запоминается в каждой функции loadstring, только в виде строки. Отчего же такая (само)уверенность, что этот id не замыкается в устанавливаемом обработчике?! Ну а если кидаешься фразами "прекрасно знаю, что такое замыкание", то из дальнейших твоих рассуждений можно сделать вывод - ты даже не удосужился почитать про это... Ну а ставить в метод AddCallback прямой вызов на выполнение функции (в чем ошибка и у Charsi), вместо линка на функцию (или тела функции), говорит о плохом знании общей теории моддинга (в частности по классу CUIScriptWnd), тут прямой путь в топик "Справочник по функциям и классам", освежить знания. Хотя даже в азбуке моддмейкера (lua_help) можно прочесть: function AddCallback(string, number, const function<void>&); function AddCallback(string, number, const function<void>&, object); P.S. Справедливости ради, замечу, что "не работать" предложенный выше код (да и любой другой) может по причине ошибки в исходном коде у АuReN'а в строке: self:Register(btn) Данная строка должна выглядеть так: self:Register(btn, "Button_"..id) т.е. нужно регистрировать объект под именем, которое соответствует имени при установке коллбэка(!), а не "в общую кучу". В противном случае, ни один коллбэк не найдет "своей" кнопки, а в классе придется искать кнопки по имени методом 'btn:WindowName'. Изменено 21 Мая 2013 пользователем Artos Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/257/#findComment-777348
Shredder 49 Опубликовано 22 Мая 2013 Поделиться Опубликовано 22 Мая 2013 Признаю, был не прав. Всё от того, что в своё время намучился с подобной ситуацией в javascript, где замыкание работает как раз так, как я описал выше. В lua всё ок. Приношу извинения за дезинформацию. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/257/#findComment-777500
mumie 2 Опубликовано 29 Мая 2013 Поделиться Опубликовано 29 Мая 2013 (изменено) Здравствуйте всем, возникла проблемка с худом образовалась, пытаюсь прибиндить в инвентарь показатели объема вещей, но вот не задача, метод который я использую работает в SoC но ругается в CoP, говорит что не знает что такое level.main_input_receiver() local btn=nil local uWnd function Init() uWnd = level.main_input_receiver() if btn or not uWnd then return end local iPosX, iPosY=432, 285 btn = CUIStatic() btn:Init(iPosX, iPosY, 150, 40) btn:InitTexture("ui\\ui_button_02") btn:SetAutoDelete(false) uWnd:AttachChild(btn) btn:SetText("Vol 0.0 / 0.0") btn:SetTextAlign(0) btn:SetTextX(5) btn:SetTextY(10) btn:SetFont(GetFontGraffiti22Russian()) btn:SetTextColor(255,231,153,22) ShowVolume() end function ShowVolume() local vol_M = 30 --Для теста я написал значения от балды, просто чтобы проверить вывод формата чисел local vol_c = 31 --Впоследствии создам класс для подсчета объема всех предметов if btn then local a,r,g, b = 255,231,153,22 local txt if (vol_c >=vol_M ) then a,r,g, b = 255, 255, 0, 0 end txt = string.format("Vol %.2f / %.1f", vol_c, vol_M) btn:SetTextColor(a,r,g, btn:SetText(txt) end end function HideVolume() if btn and uWnd then uWnd:DetachChild(btn) btn = nil uWnd = nil end end Может существует альтернатива? Заранее очень бладгодарен! Изменено 29 Мая 2013 пользователем mumie Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/257/#findComment-778658
Viнt@rь 50 Опубликовано 29 Мая 2013 Поделиться Опубликовано 29 Мая 2013 (изменено) mumie, а такого метода и нет в COP, это уже кучу раз обсуждалось/описывалось/всплывало, достаточно заглянуть в lua_help.script(Cop/CS) и увидеть, что он там отсутствует... Альтернатива только одна - X-Ray Extention. В нем есть метод CUIListBox():GetMainInputReceiver(). Изменено 29 Мая 2013 пользователем Viнt@rь Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/257/#findComment-778703
Malandrinus 615 Опубликовано 30 Мая 2013 Поделиться Опубликовано 30 Мая 2013 mumie, Может существует альтернатива? Можно попытаться вывести нужный тебе элемент не на самом окне инвентаря, а поверх отдельным окном. Визуально разницы не будет. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/257/#findComment-778704
mumie 2 Опубликовано 30 Мая 2013 Поделиться Опубликовано 30 Мая 2013 (изменено) @MalandrinusЭто если использовать метод AddDialogToRender и RemoveDialogToRender? @Viнt@rь, Я уже разобрался, когда забрел в тему Справочника по функциям и классам, но когда я путешествовал по луа_хелп, я как раз таки нашел все эти методы. Извините может я что то путаю, но вот: Это из моего S.T.A.L.K.E.R. CoP: C++ class CUIStatic : CUIWindow { CUIStatic (); function SetWindowName(string); function GetWndPos(CUIWindow*); function TextControl(); function SetAutoDelete(boolean); function GetTextureRect(); function AttachChild(CUIWindow*); function SetStretchTexture(boolean); function SetWndPos(vector2); function SetTextureRect(Frect*); function SetWndSize(vector2); function DetachChild(CUIWindow*); function SetPPMode(); function WindowName(); function IsShown(); function SetWndRect(Frect); function Show(boolean); function GetHeight() const; function GetWidth() const; function InitTexture(string); function IsEnabled(); function ResetPPMode(); function Enable(boolean); function IsAutoDelete(); }; Ну и где ты здесь нашёл метод main_input_receiver? ColR_iT Изменено 30 Мая 2013 пользователем ColR_iT Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/257/#findComment-778718
RayTwitty 571 Опубликовано 30 Мая 2013 Поделиться Опубликовано 30 Мая 2013 (изменено) Вопрос касательно источников света (hanging_lamp). В ТЧ существуют методы отслеживания "смерти" лампочки? Как показали эксперименты, колбек на смерть не пашет (соотв. и установка on_death, ph_on_death в логике тоже), метод alive() тоже ничего не дает, а свойство health в биндере выдает вообще отрицательное значение ._. Может быть кто-нибудь сталкивался с таким и знает решение проблемы? Изменено 30 Мая 2013 пользователем Shadows Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/257/#findComment-778791
Malandrinus 615 Опубликовано 30 Мая 2013 Поделиться Опубликовано 30 Мая 2013 Shadows,у лампочек нет ни смерти ни здоровья, поскольку они не живые объекты. "Смерть" лампочки наступает от первого хита, что реализуется движком. Вроде как и колбек на хит работает, хотя сейчас точно не вспомню. Правда это всё в оригинале криво работает. После перезагрузки включается опять и т.д. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/257/#findComment-778799
Irish Rover 0 Опубликовано 30 Мая 2013 Поделиться Опубликовано 30 Мая 2013 (изменено) Дублировать вопросы запрещено. Устное предупреждение. ColR_iT Изменено 30 Мая 2013 пользователем ColR_iT Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/257/#findComment-778856
Viнt@rь 50 Опубликовано 30 Мая 2013 Поделиться Опубликовано 30 Мая 2013 malandrinus, в случае с ЗП(думаю и не только) добавленный свой элемент поверх движкового окна всегда будет под ним, проверял и кастом статиками и созданием окна(этим не так усердно) в итоге решил все таки использовать метод, получения активного движкового окна, из X-Ray Ext и аттачить к нему свои элементы. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/257/#findComment-778889
Malandrinus 615 Опубликовано 30 Мая 2013 Поделиться Опубликовано 30 Мая 2013 Viнt@rь, проверял и кастом статиками и созданием окна Вероятно активное окно всегда перекрывает другое top-level окно. Ну значит штатными средствами никак, только с расширениями. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/257/#findComment-778891
Charsi 441 Опубликовано 30 Мая 2013 Поделиться Опубликовано 30 Мая 2013 В ЧН/ЗП движковое окно открывается на следующем апдейте после изменения флажка в actor_menu.script. Если приаттачить к худу своё окно не сразу, а чуть погодя, то оно окажется поверх движкового. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/257/#findComment-778892
Viнt@rь 50 Опубликовано 30 Мая 2013 Поделиться Опубликовано 30 Мая 2013 Charsi, ну я о том и говорил, только методов для получения окна(стандартно) в ЧН/ЗП нет. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/257/#findComment-778894
mumie 2 Опубликовано 31 Мая 2013 Поделиться Опубликовано 31 Мая 2013 @Charsi, А какой промежуток времени должен пройти с момента открытия движкового окна(на примере инвентаря)? И можно ли справиться обычным флажком? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/257/#findComment-778908
Charsi 441 Опубликовано 31 Мая 2013 Поделиться Опубликовано 31 Мая 2013 Viнt@rь, в ЧН функция есть и работает.mumie, пару апдейтов нужно подождать. -- при открытии инвентаря -- вызываем из actor_manu.inventory_wnd_opened function on_inv_open() local x = 2 level.add_call(function() x=x-1 return x==0 end, function() -- пора аттачить своё окно get_hud():AddDialogToRender( wnd ) end) end -- при закрытии инвентаря -- вызываем из actor_manu.inventory_wnd_closed function on_inv_close() get_hud():RemoveDialogToRender( wnd ) end Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/257/#findComment-778924
Viнt@rь 50 Опубликовано 31 Мая 2013 Поделиться Опубликовано 31 Мая 2013 (изменено) Charsi, я говорил про level.main_input_receiver(), а AddDialogToRender нечто подобное добавлению обычного кастом статика, в итоге добавленное окно все равно прячется под движковое. И AddDialogToRender не получает движковое окно, и не аттачит к нему свои элементы. Изменено 31 Мая 2013 пользователем Viнt@rь Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/257/#findComment-778933
mumie 2 Опубликовано 31 Мая 2013 Поделиться Опубликовано 31 Мая 2013 @Viнt@rь, Ну он и не утверждает обратного, просто я сам уже дня три мучаюсь с CoP'ом, и просто не доходило о вырезанности метода, потом когда залез на форум понял что это не сработает, затем стал пытаться пробовать и мучиться с AddDialogRender и Add(Get)CustomStatic, и так же ничего не выходило( Затем совсем отчаявшись уже написал сюда, и вот дали совсем простой и в тоже время действенный способ. Charsi, премного благодарен) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/257/#findComment-778999
RayTwitty 571 Опубликовано 31 Мая 2013 Поделиться Опубликовано 31 Мая 2013 (изменено) а AddDialogToRender нечто подобное добавлению обычного кастом статика, в итоге добавленное окно все равно прячется под движковое. AddDialogToRender как раз таки ставит поверх всего, игнорируя даже движковые окна (торговли, диалога и т.д.). По крайней мере так в ТЧ. Изменено 31 Мая 2013 пользователем Shadows Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/257/#findComment-779005
АuReN 0 Опубликовано 1 Июня 2013 Поделиться Опубликовано 1 Июня 2013 Всем привет. Можно ли в ТЧ определить координаты курсора мыши? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/257/#findComment-779150
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти