Simonov50 2 Опубликовано 28 Апреля 2014 (изменено) 1. Как средствами LUA реализовать JUMP (или "адресуемый" renurn) ?2. Функция wait() в Сталкере (или в LUA?) реально работает? Уважаемые долгожители! (Всех Вам благ и долгих лет!) Не пожалейте для новичка аптечки.(Мозги уже совсем раком встали - видать контролёру не понравился.) Суть проблемы: Есть объект (один) - Timer (фактически - будильник), основа взята из amk.script к ТЧ. Существует некое множество объектов (npc и т.п.), желающих этот Timer использовать. Задача: вернуть управление в конкретную точку. Не представляю в принципе как реализовать??? Нужен пример кода на LUA для функций типа: -- function return_to_caller(return_point, true) end -- или иной вариант -- function jump(return_point) end ------[[ return_point = list_name.func_name() ]]-------------------- P.S. Всем ветеранам с новичка причитается пиво (много!) Вы главное "ни куда не девайтесь"! Изменено 28 Апреля 2014 пользователем Dennis_Chikin Поделиться этим сообщением Ссылка на сообщение
Simonov50 2 Опубликовано 28 Апреля 2014 (изменено) Двумя постами раньше Dennis_Chikin писал:Не подойдёт? ... Другое - против идеологии языка, и в общем-то трудно представить: зачем бы оно. Не просто подойдет, а просто обалдеть!!! Результат работы первой строки иначе как глюком (в LUA) не назовёшь. По полочкам ещё не разложил, хотя в какую сторону думать понятно. Но каков результат его использования! Применив стандартные средства языка Вы фактически спасли LUA от позора - непригодность для описания акторов (теория акторов/actor/обмен сообщениями - отсутствие стандартных средств поддержки) и, как следствие, непригодность для описания многоагентных систем. Фактически всякий актор может быть определён как самостоятельный поток (программный) высшего логического уровня. В LUA- идеологии можно было пытаться "городить огород" из отдельных "шунков", что в принципе неверно. Либо, как и сделано в игре, "дописывать язык" за счёт подключения собственных Си, ЕХЕ и т.п. модулей. зачем бы оно - Сталкер полноценная (почти) многоагентная система, где каждый "живой" персонаж является актором (кроме объекта "actor"!) и имеет собственный поток (цепочка: obj_id, Logic, xr_logic, binders, bind_tipe_obj). Понятно, что луашные "шунки" авторы использовать не стали. Логическая дыра (возможность взаимодействия потоков) на уровне LUA ни куда не делась. Вы её фактически закрыли. Теперь стало возможным реализовать в игре два отсутствующих у акторов свойства (по определению обязательных!) - способность обмениваться сообщениями и способность воспроизводить себе подобных.Примеры применения:1. Gamer (достаточно прокачанный), подходит к любому новичку (выбранному по своему усмотрению) и в процессе обмена сообщениями может научить его стрелять и т.п. При этом авторам игры/мода ничего, кроме общих правил, заранее прописывать не нужно. Замечу, что сами диалоги это лишь имитация такого обмена. Инфопоршны это вообще иная песня. Они, как и Action, должны быть конкретно прописаны заранее (т.е. предусмотрены авторами).2. Собака-самка (белый цвет) после контакта с псом-самцом (тёмный цвет) может вызвать спавн дополнительных особей в своём гулаге. Если Gamer их заранее не отстреляет, то так и произойдёт. Ещё раз подчеркну, авторам нужно лишь описать общие принципы (взаимодействия) для классов акторов. и всё!!! После этого зона реально будет жить собственной (уникальной в каждом компьютере) жизнью. При этом Gamer сможет эффективно воздействовать на ход её развития. А жизнь эта - бесконечна (пока не выключили компьютер ). P.S. Уважаемые, подскажите ни разу не программисту, как подключить спойлер (в личку или на mail). Портянка вместо поста не есть хорошо. текст["/"spoiler] Изменено 28 Апреля 2014 пользователем Dennis_Chikin Поделиться этим сообщением Ссылка на сообщение
Simonov50 2 Опубликовано 18 Марта 2015 (изменено) Как подключить/зарегистрировать новый скрипт ? В gamedata\script\ положил, а игра его не видит (нет в пространстве имён). Извиняюсь за "сложность" вопроса, но более подходящего места не обнаружил. Заранее спасибо за помощь! Изменено 18 Марта 2015 пользователем Simonov50 Поделиться этим сообщением Ссылка на сообщение
Simonov50 2 Опубликовано 26 Марта 2015 (изменено) @Nazgool, При обычной загрузке лист сразу транслируется, и если присутствует текст обращения к несуществующей функции будет вылет. То есть, вариант проверки "если есть лист, тогда обратиться к функции не срабатывает". Если "спрятать" текст (mu_call="Имя_скрипта"..".".."имя_функции".."()"), то вылета не будет, но команда dostring(mu_call) не проходит. Видимо в игре недоступна? Пытаюсь найти вариант загрузки в два этапа. Обычным образом загрузить мой 1_й лист, мой второй лист (с обращением к функции) спрятать в другом каталоге, если присутствует некий третий лист,(наличие функции в котором и проверяется), то подключить мой второй лист. Но как это сделать не представляю. Изменено 26 Марта 2015 пользователем Simonov50 Поделиться этим сообщением Ссылка на сообщение
Simonov50 2 Опубликовано 28 Марта 2015 @Dennis_Chikin, Спасибо !!! Всё в тему, но кому классика, а кому откровение. Если я верно понял, то нужно засовывать в инфопоршень, а вытаскивать с помощью xr_effects. Ни когда с инфопоршнями не работал. Пойду читать xr_effects. Ещё раз спасибо. @Nazgool, Круг задач определён уровнем моих незнаний и для понимания нормальным человеком слишком обширен. Пока есть только цель - сделать "переносной" скрипт (из мода в мод). Воткнул его, он сам быстренько посмотрел ресурсы и "сказал" что (и где) надо доделывать руками. Скрипт чисто модерский - простенький инструментарий (будет когда-нибудь?). Про _G всё понял, а вот про защищённый режим (на уровне игры) услышал впервые! Где читать? Спасибо за помощь - иду учить мат.часть. Поделиться этим сообщением Ссылка на сообщение
Simonov50 2 Опубликовано 31 Марта 2015 (изменено) так здесь все еще проще: Именно на таком варианте у меня и вылетало, а нужно именно так, как вы мне подсказали в предыдущем посте - через блок, прятать имя функции в переменной, отдельно проверять наличие листа и только при его наличии проверять функцию. Я встроил опрос внутрь своего класса (для менюшки), и всё заработало - спасибо! Но теперь вопросов стало ещё больше !!! В варианте if another_script.myfunc then another_script.myfunc() вылета не может быть в принципе. Как сделать вывод в свой файл ? Начал с local file = io.open("mu_file.txt", "a") Но на все попытки найти io или openfile возвращает nil. Специально установил чистую, лиценз.версию - результат тот же. Что бы понять нужно посмотреть, но для этого сначала нужно написать... и так далее по заколдованному кругу ... - сильно достаёт! Эх, знать бы дорожку в базовое адр.пространство чистого Lua, авторы им наверняка пользуются. Движок править. Брать исходники, и править. dc Изменено 31 Марта 2015 пользователем Dennis_Chikin Поделиться этим сообщением Ссылка на сообщение
Simonov50 2 Опубликовано 1 Апреля 2015 В варианте if another_script.myfunc then another_script.myfunc() вылета не может быть в принципе.У меня вылетало именно на if another_script.myfunc при фактическом отсутствии листа another_script . Вылет во время начальной загрузки (another_script = nil value). Ошибка фиксировалась именно при наличии в тексте связки лист.функция (через точку). Присутствие условия (if) не спасало, т.к. сочетание лист.функция транслировалось целиком. Поделиться этим сообщением Ссылка на сообщение
Simonov50 2 Опубликовано 1 Апреля 2015 (изменено) возможно ли заспаунить скриптом обьект прямо из папки meshes?Теоретически можно запустить скрипт из любой папки, но для этого должен быть нестандартный движок (с библиотеками Lua) и самое главное - этот скрипт должен делать строго то же самое, что делается при нормальном спавне. Кроме лишнего гемора ни чего не даёт! Я анализировал подобный вариант на предмет "сунул" в игру/мод новый каталог со всеми ресурсами (что бы не затрагивать игру), а потом ... Но подключать, то его к существующим скриптам (руками или програмой ) всё равно придётся! @Карлан, Спасибо, именно так я и сделал, теперь работает. @Dennis_Chikin, Движок править. Брать исходники, и править. dc Чувствовал, что в подобное вляпаюсь! Но, если я правильно понимаю, скрипты сделанные мной после такой правки, у других работать не будут? Не порекомендуете ли Вы мне какой-либо базовый набор (.bin) игры, в котором функции записи/чтения в файл работают и при этом он широко применяется модерами. У меня есть один "правленый" XR3DA.exe c работающим выводом в файл, но там "криво" работает наследование у брони и артефактов. Возникают "случайные" вылеты при вставке его в мод, где у "новых" вещей не прописаны все параметры (в расчёте на наследование). Есть ещё пяток с форсированным рендерингом, но с ними перегреваются GTX-680 (3 минуты заставки), периодические вылеты при большом количестве аддонов к оружию и при "частом" _update_delta. Вывод в файл в половине из них тоже не работает - видно, как авторы модов заменяли его выводом на консоль. Изменено 1 Апреля 2015 пользователем Simonov50 Поделиться этим сообщением Ссылка на сообщение
Simonov50 2 Опубликовано 2 Апреля 2015 Этот комментарий к своему посту Вы прочиталиПриношу извинения, если сделал что-то некорректно, но именно на этот комментарий я и отвечал. Ваш же пост я не просто прочитал, а принял к исполнению! Не сделав этого я так и останусь "слепым". За предложенную помощь отдельное Спасибо, но пока по делу спрашивать не готов (оставил резерв на будущее). Пока нагуглил luacap-2012-02-20 (как я понял он включает предложенное Вами). В чистом виде "Lua от RvP" не нашел. Сейчас ищу отдельно расширитель Lua или более позднюю версию luacap. Ещё раз приношу извинения. С уважением, Сергей. Поделиться этим сообщением Ссылка на сообщение
Simonov50 2 Опубликовано 2 Апреля 2015 (изменено) Если интересноОгромное спасибо !!! Не просто интересно а много больше того, о чём я мог мечтать (учитывая реалии - я по специальности не программист). Но пока подключать не к чему. Если подключить к любой "базе" (exe + dll+ ... = /bin), коих даже у меня 7 штук, то сделанное мой будет нормально работать только у одного пользователя из семи (не нарушив то, что было раньше - обязательное условие!). То есть, надо брать наиболее распространённую версию и плясать от неё. На сегодня "лицензионка" для этого явно не годится (имхо). Да и модить через Старфорсе при обилии собственных ошибок - беспредел (не вытерплю!). Требуется имхо человека, который реально в этом "варится", а не стороннего наблюдателя (типа меня). Еще раз спасибо за действенную помощь. Сергей. P.S. Исхожу из того, что "имхо оно и в африке имхо". Любое имхо имеет право быть ... , ни к чему не обязывает, не наказуемо и т.д. Изменено 2 Апреля 2015 пользователем Simonov50 1 Поделиться этим сообщением Ссылка на сообщение
Simonov50 2 Опубликовано 2 Апреля 2015 Эта сборка совместима со всеми официальными версиями ТЧ. Спасибо ! Но это сборка люкс, а все мои XR3DA.exe - "г..." Хотелось бы ещё и ссылочку на проверенный профессионалами "открытый" экземпляр (с нефорсированным рендером). Сергей. Поделиться этим сообщением Ссылка на сообщение
Simonov50 2 Опубликовано 28 Июня 2015 class CUIScriptWnd - Не могу сдвинуть окно вправо self:SetWndRect(Frect():set(0,0,420,530)) - работаетself:SetWndRect(Frect():set(200,0,420,530)) - уже не работает Изображение сдвинулось верно - всё на своих местах, без смещений.Но, у элементов в правой части окна, которые оказались за пределами "старых" координат, исчезли калбаки, не работают едитбоксы. На наведение курсора кнопки и чекбоксы реагируют - подсвечиваются.Левая часть окна работает нормально. ХМЛ - просто россыпь в пределах "старых" координат, без фреймов и наложений. В скрипте ничего не аттачилось.В моём понимании CUIScriptWnd главный в связке, а CScriptXmlInit драйвер-исполнитель, я дал команду главному и мимо.Явно что-то упустил из вида, что ? Поделиться этим сообщением Ссылка на сообщение
Simonov50 2 Опубликовано 28 Июня 2015 (изменено) подскажите: Загляни пожалуйста в личную переписку. Сергей. @Simonov50, Frect():set(x1, y1, x2, y2) - первые две - координаты верхнего левого угла, третья и четвёртая - нижнего правого. Вроде, так. Во первых не так, а главное - где ответ на вопрос ? Изменено 28 Июня 2015 пользователем Simonov50 1 Поделиться этим сообщением Ссылка на сообщение
Simonov50 2 Опубликовано 28 Июня 2015 @naxac, Прости засранца, я был сильно неправ (задолбали собственные ошибки). Сергей. метод работает именно так - set(x, y, x+width, y+height). Спасибо ! Понял всё. У меня минимум 3 ошибки:1. Неверно выбрал метод для сдвига.2. В моём "поминальнике" ошибка (width, height вместо x2, y2)3. Не перепроверив незаслуженно обидел человека. Поскольку, читал (и конспектировал) все Ваши предыдущие ответы, рискнузадать очень важный для меня ворос - не понимаю суть. (непонятки прономерованы в спойлере) class "lbx_kv" (CUIListItemEx) -- Скриптовой лист-бокс, + к основномуfunction lbx_kv:__init() super()self.text = CUIStatic() -- имя только .text (фишка, игра слов)self:AttachChild(self.text) -- дополняем класс-- класс "висит в воздухе", не связан с экраном (и с XML)end class "kovir" (CUIScriptWnd)-- bla_bla -- self.lb_kv = xml:InitList("lbx_wnd_kv:list",self) -- основной лист-боксself:Register(self.lb_kv, "lbox_kv") -- для калбака----- function add_string(name) записываем строкуlocal _itm = lbx_kv() -- указатель на скрипт.класс_itm.text:SetText(name) -- пишем name в доп.статик !!! 1)Как это через статик добраться до класса (с другими методами !) ??? self.lb_kv:AddItem(_itm) -- пишем в основной лист kovir.lb_kv 2) ??? что пишем ??? в основной лист (ему нужен тип "string")end -- Читаем строку, именно здесь важно имя .text (фишка, игра слов)-- индекс берём с основного листа, а текст из дополнительного статика name = self.lb_kv:GetItem(index).text:GetText() ???? 3) ??? здесь self== kovir: но!!! .text из другого класса!!! == lbx_kv: И это всё работает, но как совершенно не понятно.Это текст уже из моего скрипта, принцип прямо заимствован из скриптовдля Спавен мода Повелитель Зоны. Нужен был работающий лист-бокс. Поделиться этим сообщением Ссылка на сообщение