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 Ссылка на комментарий
J.A.A. 2 Опубликовано 8 Апреля 2015 Поделиться Опубликовано 8 Апреля 2015 Ребят, добрый вечер! Никто не подскажет, как убрать закрытие диалогового окна кнопкой "Esc"? Чтобы диалоги были как в Fallout 3/New Vegas - если завёл разговор, то до логичного конца. 1 Пишу мод с неповторимым сюжетом. Нужны "модельеры" Заинтересованным писать в ЛС Ссылка на комментарий
AndrewMor 530 Опубликовано 8 Апреля 2015 Поделиться Опубликовано 8 Апреля 2015 J.A.A, присоединяюсь к вопросу. Иногда очень напрягает сия возможность. Сталкер - наше всё! Ссылка на комментарий
Zander_driver 10 342 Опубликовано 9 Апреля 2015 Поделиться Опубликовано 9 Апреля 2015 Сильно подозреваю что ныне - без ковыряний в движке никак, ибо диалоговый интерфейс - штука движковая. Ну или соорудить ему взамен скриптовый аналог и устанавливать свои правила. Какие вздумается. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Dennis_Chikin 3 661 Опубликовано 9 Апреля 2015 Поделиться Опубликовано 9 Апреля 2015 (изменено) Кстати, о птичках, точнее - об этих самых кнопках из соседней темы: w = CUIButton() w:SetWindowName( "btn_next" ) w:SetAutoDelete( true ) w:Init( 250, 60, 50, 30 ) self:AttachChild( w ) self:AddCallback( "btn_next", ui_events.BUTTON_CLICKED, self.next, self ) w:Show( true ) Что здесь не так, что первое нажатие оно отрабатывает нормально, второе - 2 раза, а дальше - 4 и т.д. Кнопку мы после каждого нажатия перерисовываем, но как бы вроде разве недостаточно w = CUIButton(), чтобы старая удалилась ? Это надо еще какое-то волшебное слово сказать ? 2 abramcumner: в общем, да, DetachChild() помогает, но дешевле оказалось избавиться от перерисовки. Выяснилось, что нужные статики ложатся в нужном порядке, а оригинал был странен, но просто до подобной ситуации обычно не доживал. Изменено 9 Апреля 2015 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
abramcumner 1 172 Опубликовано 9 Апреля 2015 Поделиться Опубликовано 9 Апреля 2015 self:AttachChild( w ) Кнопку мы после каждого нажатия перерисовываем, но как бы вроде разве недостаточно w = CUIButton(), чтобы старая удалилась ? Это надо еще какое-то волшебное слово сказать ? Сслыка на кнопку в родительском окне не дает ей удалиться. Возможно поможет DetachChild. Ссылка на комментарий
UnLoaded 313 Опубликовано 9 Апреля 2015 Поделиться Опубликовано 9 Апреля 2015 (изменено) как убрать закрытие диалогового окна кнопкой "Esc"? Решил поковыряться с этим вопросом, и вот чего наковырял. Доступ к окну диалога(разговора - так точнее ?) получить можно, хотя и коряво: <info_portion id="ui_talk"> <action>какой-то_скрипт.On_talk</action> <disable>ui_talk_hide</disable> </info_portion> <info_portion id="ui_talk_hide"> <action>какой-то_скрипт.On_talk_hide</action> <disable>ui_talk</disable> </info_portion> В этот самый какой-то_скрипт пропишем: talk_wnd = nil function On_talk() talk_wnd = CUIAddTalkControl() level.start_stop_menu(talk_wnd, true) end function On_talk_hide() talk_wnd = nil end ---------------- скриптовый класс для окна разговора -------------------------------- class "CUIAddTalkControl" (CUIScriptWnd) function CUIAddTalkControl:__init() super() self:InitControls() end function CUIAddTalkControl:InitControls() ----- Положение и размеры окна ----- self:Init(0,0,1024,768) end function CUIAddTalkControl:__finalize() end ------------------ обработка нажатий клавы ------------------ function CUIAddTalkControl:OnKeyboard(dik, keyboard_action) CUIScriptWnd.OnKeyboard(self,dik,keyboard_action) if keyboard_action == ui_events.WINDOW_KEY_PRESSED then local bind = dik_to_bind(dik) ----- перехватываем Esc и Действие ----- if dik == DIK_keys.DIK_ESCAPE then local text = "нажали - ESC" news_manager.send_tip(db.actor, text, nil, nil, 30000) return true elseif bind == key_bindings.kUSE then local text = "нажали - Действие" news_manager.send_tip(db.actor, text, nil, nil, 30000) return true end end return false end Запускаем игру, начинаем разговор с кем-то и переключаемся кнопкой "Торговать" в торговлю и сразу возвращаемся - и сработает On_talk(). Следовательно наше скрипт-окно будет прилеплено к диалоговому и нажатие "Esc" и назначенной в настройках кнопки "Действие" будут перехватываться. Вот только толку с этого вроде как ноль: сам способ через одно место и кроме перехвата ввода с клавы полностью отрубается ввод с мыша. Т.е. закрыть диалог с неписем с клавиатуры уже не получится, но и продолжить его до какой-нить фразы с <action>dialogs.break_dialog</action> чтоб его завершить то-же не получится. Вроде как тупик ? Изменено 9 Апреля 2015 пользователем UnLoaded Ссылка на комментарий
Charsi 440 Опубликовано 9 Апреля 2015 Поделиться Опубликовано 9 Апреля 2015 @UnLoaded, ты открываешь своё скриптовое окно и оно перехватывает управление ввода на себя. Попробуй при входе в диалог разбиндить экшены use и quit, а на последней фразе диалога забиндить обратно. Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
UnLoaded 313 Опубликовано 9 Апреля 2015 Поделиться Опубликовано 9 Апреля 2015 (изменено) разбиндить экшены use и quit, а на последней фразе диалога забиндить обратно. А можно примерчик собственно как разбиндить\забиндить ? Изменено 9 Апреля 2015 пользователем UnLoaded Ссылка на комментарий
Nazgool 250 Опубликовано 9 Апреля 2015 Поделиться Опубликовано 9 Апреля 2015 get_console():execute("unbind quit") get_console():execute("bind quit kESCAPE") Ссылка на комментарий
UnLoaded 313 Опубликовано 9 Апреля 2015 Поделиться Опубликовано 9 Апреля 2015 Ага, разбиндить получается, но вот обратно - чтоб снова назначить указанную в настройках клавишу для "Действия", надо ее перед разбиндиванием получить и сохранить. Попробовал con:get_string("use") - не прокатывает, остальные get_... вообще к вылету приводят... Ссылка на комментарий
Сталкер-Стрелок 12 Опубликовано 9 Апреля 2015 Поделиться Опубликовано 9 Апреля 2015 @UnLoaded, возможно вот так: local u_quit, b_quit = "unbind quit", "bind quit kESCAPE" get_console():execute(u_quit) ... get_console():execute(b_quit) Правда зачем тебе сохранять условные константы мне не ясно. Ссылка на комментарий
abramcumner 1 172 Опубликовано 9 Апреля 2015 Поделиться Опубликовано 9 Апреля 2015 Правда зачем тебе сохранять условные константы мне не ясно.Возможно за тем, что у игрока "quit" и "use" могут быть забиндены на другие кнопки? Ссылка на комментарий
UnLoaded 313 Опубликовано 9 Апреля 2015 Поделиться Опубликовано 9 Апреля 2015 (изменено) могут быть забиндены на другие кнопки? Однозначно, у меня всегда "use" переназначено так, как мне нравится... @Сталкер-Стрелок Однако толку мало от предложенного Вами - надо сразу указать то, что может быть переназначено. Вопрос остается открытым. Изменено 9 Апреля 2015 пользователем UnLoaded 1 Ссылка на комментарий
Сталкер-Стрелок 12 Опубликовано 9 Апреля 2015 Поделиться Опубликовано 9 Апреля 2015 (изменено) @abramcumner, ну их тогда и указывать, или я чего не понял? В любом случае они же должны в каком-то массиве хранится. Изменено 9 Апреля 2015 пользователем Сталкер-Стрелок Ссылка на комментарий
abramcumner 1 172 Опубликовано 9 Апреля 2015 Поделиться Опубликовано 9 Апреля 2015 (изменено) @abramcumner, ну их тогда и указывать, или я чего не понял? В любом случае они же должны в каком-то массиве хранится.У каждого игрока они могут быть свои и надо восстановить именно их, а не абстрактные. А так в движке хранятся, еще в user.ltx Можно разобрать user.ltx и запомнить оттуда настройки. Вроде папка к нему в fsgame.ltx прописана - по идее можно грузить через ini_file Можно еще проверить, что возвращает get_console():execute("bind quit") Изменено 9 Апреля 2015 пользователем abramcumner Ссылка на комментарий
UnLoaded 313 Опубликовано 9 Апреля 2015 Поделиться Опубликовано 9 Апреля 2015 Можно еще проверить, что возвращает get_console():execute("bind quit") В "Справочнике ..." - void execute(string <команда консоли>); // выполнить команду консоли Значит ничего не возвращает, плюс назначит на "quit" пустое значение(уже проверял). по идее можно грузить через ini_file Так ведь структура не ltx-кая, навряд-ли прочтет что-то. Да и все равно, даже если все срастется - нормально будет работать тока на правленом движке, где восстановлена выдача инфо-порций окна диалогов по нормальному. Так, что для AndrewMor и J.A.A: похоже на исходном движке ТЧ бессмысленная затея, так что смотреть в сторону правленного движка. Ссылка на комментарий
Сталкер-Стрелок 12 Опубликовано 9 Апреля 2015 Поделиться Опубликовано 9 Апреля 2015 @abramcumner, она разве не из $game_config$ грузит? Т.е. я имею ввиду использовать getFS() (но он не читает такие файлы). Еще есть класс COptionsManager, через который это можно сделать, в целом он с этим и работает на самом деле. Так ведь структура не ltx-кая, навряд-ли прочтет что-то. Можно распарсить в массив ключ значение. Ссылка на комментарий
abramcumner 1 172 Опубликовано 9 Апреля 2015 Поделиться Опубликовано 9 Апреля 2015 плюс назначит на "quit" пустое значение(уже проверял).Насколько я помню, если в консоли набрать "bind quit", то вернется забинденная клавиша. Так ведь структура не ltx-кая, навряд-ли прочтет что-то.Читать по строке и искать bind quit. Да и все равно, даже если все срастется - нормально будет работать тока на правленом движке, где восстановлена выдача инфо-порций окна диалогов по нормальному.Почему, unbind можно еще делать в коллбеке на юзе нпц, а обратный бинд в функции на выходе из диалога. Ссылка на комментарий
UnLoaded 313 Опубликовано 9 Апреля 2015 Поделиться Опубликовано 9 Апреля 2015 Почему, unbind можно еще делать в коллбеке на юзе нпц Гм, неплохо бы, вот только есть ли такой ? Глянул сейчас в константы C++ class callback в lua_help, не вижу какой из них ? Или я не туда\не о том ? Ссылка на комментарий
Сталкер-Стрелок 12 Опубликовано 9 Апреля 2015 Поделиться Опубликовано 9 Апреля 2015 @UnLoaded, callback.use_object Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти