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/
Kondr48 314 Опубликовано 26 Февраля 2016 Поделиться Опубликовано 26 Февраля 2016 (изменено) function actor_binder:repair_outfit_start(obj, who) if obj then if obj:section() == "deshifrator" then --здесь указываем предмет, при использовании которого будет срабатывать функция ниже --episode_system.def_func() --здесь указываем ссылку на функцию. Сначала скрипт, в котором она написана, потом название самой функции self.Deshifrator:Hide() end end end CRAZY_STALKER666, я что-то не пойму, откуда вызывается эта функция? Судя по "actor_binder" этот кусок в bind_stalker.script, однако дальше идет вот это: self.Deshifrator:Hide() Вряд ли Deshifrator есть в actor_binder, однако тут self. Это все в совокупности как-то странно, вы дешифратор хотите запускать когда у вас что-то в слоте активно? (тогда логичнее на апдейт и не парится) или при юзании предмета в инвентаре(что-то не припоминаю, чтобы там был аргумент who? Что он передает?) Может я чего-то не понял... --- [error]Arguments : LUA error: ...ow of chernobyl\gamedata\scripts\bind_stalker.script:455: attempt to index field 'Deshifrator' (a nil value) Ну собственно как я и думал, лучше вам из колбека на использование предмета вызывать запуск менюшки своей тогда) --- Как вариант запуска, проще не придумать) function gui_start() --куда нибудь в ваш скрипт GUI level.start_stop_menu(this.название_вашего_класса(),true) end if obj:section() == "ваш_девайс" then -- а такую проверочку в колбек на использование предмета. ваш_скрипт.gui_start() end Изменено 26 Февраля 2016 пользователем Kondr48 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/353/#findComment-996132
Sla-Sla 43 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 (изменено) Deshifrator.main() Deshifrator судя по всему тут как класс. Вызывай функцию так: имя_твоего_скрипта.main() Изменено 27 Февраля 2016 пользователем Sla-Sla Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/353/#findComment-996159
CRAZY_STALKER666 36 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 @Sla-Sla, так я так и делаю. В скрипте дешифратора это: function main()local hud = Deshifrator(get_hud())level.start_stop_menu(hud, true)end В bind_stalker так: function actor_binder:repair_outfit_start(obj, who)if obj thenif obj:section() == "deshifrator" then Deshifrator.main()endendend Всё равно вылетает с тем же логом - nil value Вряд ли Deshifrator есть в actor_binder, однако тут self. Это все в совокупности как-то странно, вы дешифратор хотите запускать когда у вас что-то в слоте активно? (тогда логичнее на апдейт и не парится) или при юзании предмета в инвентаре(что-то не припоминаю, чтобы там был аргумент who? Что он передает?) Может я чего-то не понял... Всё верно, при юзании предмета должно открываться GUI-окно. Что передает who ? Без понятия, изначально я просто нашел функцию отслеживания использования предмета на wiki inside и не особо заморачивался с аргументами функции. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/353/#findComment-996176
Sla-Sla 43 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 @CRAZY_STALKER666, как называется скрипт с классом дешифратора? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/353/#findComment-996177
CRAZY_STALKER666 36 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 @Sla-Sla, Deshifrator.script Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/353/#findComment-996178
Sla-Sla 43 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 @CRAZY_STALKER666, странно. У меня все работало. 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/353/#findComment-996180
CRAZY_STALKER666 36 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 @Sla-Sla, ладно, проверяем еще раз Deshifrator.script class "Deshifrator" (CUIScriptWnd)function Deshifrator:__init() super()self:InitControls()self:InitCallBacks()endfunction Deshifrator:__finalize()endfunction Deshifrator:InitControls()local xml = CScriptXmlInit()self:Init(0,0,1024,768)xml:ParseFile("Deshifrator.xml")self.frame1 = xml:InitFrame("frame1", self)self.edit1 = xml:InitEditBox("frame1:edit1", self.frame1)self:Register(xml:Init3tButton("frame1:button1", self.frame1), "button1")self:Register(xml:Init3tButton("frame1:button2", self.frame1), "button2")self.Static3 = xml:InitStatic("frame1:Static3", self.frame1)self.Static4 = xml:InitStatic("frame1:Static4", self.frame1)self.edit2 = xml:InitEditBox("frame1:edit2", self.frame1)self.checkbox1 = xml:InitCheck("frame1:checkbox1", self.frame1)self:Register(self.checkbox1, "checkbox1")self.checkbox2 = xml:InitCheck("frame1:checkbox2", self.frame1)self:Register(self.checkbox2, "checkbox2")endfunction Deshifrator:InitCallBacks()self:AddCallback("edit1", ui_events.EDIT_TEXT_CHANGED, self.edit1_edit_text_changed, self)self:AddCallback("button1", ui_events.BUTTON_CLICKED, self.button1_button_clicked, self)self:AddCallback("button2", ui_events.BUTTON_CLICKED, self.button2_button_clicked, self)self:AddCallback("checkbox1", ui_events.BUTTON_CLICKED, self.checkbox1_button_clicked, self)self:AddCallback("checkbox2", ui_events.BUTTON_CLICKED, self.checkbox2_button_clicked, self)endfunction Deshifrator:edit1_GetText() --/получить введенный текст в edit1return self.edit1:GetText()endfunction Deshifrator:edit1_edit_text_changed()endfunction Deshifrator:button1_button_clicked()endfunction Deshifrator:button2_button_clicked()endfunction Deshifrator:edit2_GetText() --/получить введенный текст в edit2return self.edit2:GetText()endfunction Deshifrator:checkbox1_GetCheck() --/true/false - включен/отключен checkbox1return self.checkbox1:GetCheck()endfunction Deshifrator:checkbox1_button_clicked()endfunction Deshifrator:checkbox2_GetCheck() --/true/false - включен/отключен checkbox2return self.checkbox2:GetCheck()endfunction Deshifrator:checkbox2_button_clicked()endfunction Deshifrator:Hide()self:GetHolder():start_stop_menu(self, true)endfunction main()local hud = Deshifrator(get_hud())level.start_stop_menu(hud, true)end И bind_stalker: function actor_binder:repair_outfit_start(obj, who)if obj thenif obj:section() == "deshifrator" then Deshifrator.main()endendend Всё вроде верно, но вылет тот же... Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/353/#findComment-996181
FonSwong 33 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 (изменено) @CRAZY_STALKER666Выложите свою геймдату, так легче найти ошибку Изменено 27 Февраля 2016 пользователем FonSwong Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/353/#findComment-996182
CRAZY_STALKER666 36 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 Вот всё, что редактировалось - https://dropmefiles.com/pj1af Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/353/#findComment-996185
Kondr48 314 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 Все-таки попробуйте вот так: function actor_binder:repair_outfit_start(obj, who) if obj:section() == "deshifrator" then level.start_stop_menu(Deshifrator.Deshifrator(),true) end end P.S. а вообще проверьте на всякий случай правильность написания секции(возможно в конфиге и скрипте опечатка, из-за которой условие и не срабатывает. И в качестве совета, когда что-то работает не так, пихайте в каждое условие вывод сообщения на экран, и смотрите, что и как у вас срабатывает Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/353/#findComment-996259
CRAZY_STALKER666 36 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 @Kondr48, спасибо попробую. Про сообщения знаю, пользуюсь давно. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/353/#findComment-996266
kmsk 2 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 Добрый вечер, Интересует тот же вопрос что у Kondr48, Как узнать ID предмета только что заспавненного в рюкзаке ГГ. То есть узнать и запомнить в локальной. Чтобы потом можно было удалить по этому же ID. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/353/#findComment-996297
Charsi 441 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 (изменено) @CRAZY_STALKER666, игра не может подгрузить файл Deshifrator.script, т.к. он сохранён в кодировке "UTF-8 BOM". Нужно использовать кодировки "ANSI" или "UTF-8 без BOM". Изменено 27 Февраля 2016 пользователем Charsi 1 2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/353/#findComment-996301
CRAZY_STALKER666 36 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 Проблема с GUI отпала вместе с удалением последнего) Новый вопрос - как заставить ГГ в какой-то момент перестать двигаться? Такое было реализованно в моде Золотой Шар, но скачать и посмотреть как там все работает возможности нет. Что приходит в голову - прочитать в конкретный момент времени координаты ГГ, записать их в буфер, и методично каждую секунду исать их заного в память. Но выглядеть будет убого. Еще вариант - в опр момент(допустим после пол. поршня) писать в переменную усталости актора 0. Но как реализовать - кхм, не знаю. Есть у кого варианты, или мб готовые решения? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/353/#findComment-996320
kmsk 2 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 Просто отключи кнопки передвижения: get_console():execute("unbind forward") get_console():execute("unbind back") get_console():execute("unbind lstrafe") get_console():execute("unbind rstrafe") А когда надо включи: get_console():execute("bind forward kW") get_console():execute("bind back kS") get_console():execute("bind lstrafe kA") get_console():execute("bind rstrafe kD") 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/353/#findComment-996327
CRAZY_STALKER666 36 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 @kmsk, а на счет пробела не подскажешь? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/353/#findComment-996329
TIGER_VLAD 361 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 @CRAZY_STALKER666, get_console():execute("unbind jump") Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/353/#findComment-996335
Overfirst 637 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 (изменено) Как заставить ГГ в какой-то момент перестать двигаться? level.disable_input() -- блокировка управления level.enable_input() -- разблокировка управления Блочится даже управление мышью. Изменено 27 Февраля 2016 пользователем BoBaH_671 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/353/#findComment-996336
TIGER_VLAD 361 Опубликовано 27 Февраля 2016 Поделиться Опубликовано 27 Февраля 2016 @CRAZY_STALKER666, set_inactivate_input_time(number) - блочит вроде бы только клавиатуру на определенное время. 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/353/#findComment-996340
CRAZY_STALKER666 36 Опубликовано 28 Февраля 2016 Поделиться Опубликовано 28 Февраля 2016 @BoBaH_671, очень понравилась ваша реализация, но хотелось бы мышь отдельно разблочить. А для этого нужны исходные коды disable_input и enable соотв. У меня на компьютере нет level.script, может кто скинет? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/353/#findComment-996367
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти