exians Posted March 10, 2015 Share Posted March 10, 2015 Здравствуйте, я никогда не занимался скриптингом для мта. Я всю свою осознанную часть жизни писал сайты на PHP, потом уже последние 3 года на руби и его рельсах. Есть огромное желание научится делать качественные моды. Но для любого хорошего мода нужна хорошая структура. Для меня не ясен вот такой вопрос: Если взять например чистый руби, создаем файл (e.g. main.rb) Этот файл является точкой входа в программу, в нем идет подключение других файлов, глобальные переменные и т.д. А есть ли в мта скриптинге такая точка входа. Скажем например у меня есть ресурс(тот же main) и в нем идет определение глобальных переменных и подключение других ресурсов(e.g. usermenu) Сможет ли ресурс usermenu использовать переменные и функции указанные в ресурсе main. Или же тут какая то другой принцип действия. Обьясните пожалуйста. Заранее спасибо всем за ответы и проявленное понимание. Link to comment
Elengar Posted March 10, 2015 Share Posted March 10, 2015 (edited) Покопайся тут https://wiki.multitheftauto.com/wiki/Main_Page "С коробки" точек входа в ... (программу?) нету, все ресурсы изначально независимы и каждый выполняется в своей LuaVM. Точкой входа в ресурс(а они делятся на клиентскую и серверную часть) является файл, который выше всего в meta.xml от этого ресурса на этой стороне(на клиенте - свой, на сервере - свой). Удачные готовые системы связи ресурсов(с точками входа и прочим) подсказать, наверное, не смогут. Не мало людей их реализовывали, но выкладывать не выкладывали(или я не видел). Не знаю почему, но не рекомендую использовать include в meta.xml Обращения к переменным между ресурсами изначально реализованы export'ами https://wiki.multitheftauto.com/wiki/Call Edited March 10, 2015 by Guest Link to comment
exians Posted March 10, 2015 Author Share Posted March 10, 2015 Покопайся тут https://wiki.multitheftauto.com/wiki/Main_Page"С коробки" точек входа в ... (программу?) нету, все ресурсы изначально независимы и каждый выполняется в своей LuaWM. Точкой входа в ресурс(а они делятся на клиентскую и серверную часть) является файл, который выше всего в meta.xml от этого ресурса на этой стороне(на клиенте - свой, на сервере - свой). Удачные готовые системы связи ресурсов(с точками входа и прочим) подсказать, наверное, не смогут. Не мало людей их реализовывали, но выкладывать не выкладывали(или я не видел). Не знаю почему, но не рекомендую использовать include в meta.xml Обращения к переменным между ресурсами изначально реализованы export'ами https://wiki.multitheftauto.com/wiki/Call Твой ответ дал мне гораздо больше чем вики) Щас вот попробывал, в пределах одного ресурса глобальные переменные работают. Начинаю потихоньку суть понимать. Это радует, спасибо тебе Link to comment
FranklinRoosevelt Posted March 10, 2015 Share Posted March 10, 2015 Учить мне кажется лучше всего по примерах, зайди в коммюнити (сверху слева, думаю видел) скачай какой-то простой ресурс и разбирай его по тихоньку, лично мне это очень помогло. Link to comment
Elengar Posted March 10, 2015 Share Posted March 10, 2015 Учить мне кажется лучше всего по примерах, зайди в коммюнити (сверху слева, думаю видел) скачай какой-то простой ресурс и разбирай его по тихоньку, лично мне это очень помогло. Иногда такого скачать можно, что крыша съедет. Да и там нету мульти-ресурсных разработок. Link to comment
Kernell Posted March 11, 2015 Share Posted March 11, 2015 Здравствуйте, я никогда не занимался скриптингом для мта. Я всю свою осознанную часть жизни писал сайты на PHP, потом уже последние 3 года на руби и его рельсах. Есть огромное желание научится делать качественные моды. Но для любого хорошего мода нужна хорошая структура. Для меня не ясен вот такой вопрос:Если взять например чистый руби, создаем файл (e.g. main.rb) Этот файл является точкой входа в программу, в нем идет подключение других файлов, глобальные переменные и т.д. А есть ли в мта скриптинге такая точка входа. Скажем например у меня есть ресурс(тот же main) и в нем идет определение глобальных переменных и подключение других ресурсов(e.g. usermenu) Сможет ли ресурс usermenu использовать переменные и функции указанные в ресурсе main. Или же тут какая то другой принцип действия. Обьясните пожалуйста. Заранее спасибо всем за ответы и проявленное понимание. Явной точки входа как таковой нет. Все скрипты выполняются по порядку, как в PHP. По поводу подключения других скриптов (инклудов), в стандартном Lua это делается с помощью dofile, либо подключением модулей с помощью require. В МТА это всё вырезано, вместе с остальными небезопасными функциями. Вместо этого придётся подключать необходимые библиотеки в meta.xml до вашего основного скрипта. Если же нужна какая-то "точка входа", с которой будет начинаться вся логика, то советую посмотреть в сторону события onResourceStart (onClientResourceStart - аналог для клиента) Link to comment
exians Posted March 11, 2015 Author Share Posted March 11, 2015 Учить мне кажется лучше всего по примерах, зайди в коммюнити (сверху слева, думаю видел) скачай какой-то простой ресурс и разбирай его по тихоньку, лично мне это очень помогло. Иногда такого скачать можно, что крыша съедет. Да и там нету мульти-ресурсных разработок. Вы правы, большенство публичных ресурсов лапшакод. Я немного имел дело с самп и его павн, так там тоже самое. Нехотелось бы говнокодить, да и изобретать велосипеды тоже себе дороже(но и бест практикс ни кто не выкладывает, парадокс) Link to comment
exians Posted March 11, 2015 Author Share Posted March 11, 2015 Явной точки входа как таковой нет. Все скрипты выполняются по порядку, как в PHP. Как я понимаю, это справедливо в рамках одного ресурса, можно ли как то выбрать порядок загрузки ресурсов? Например с помошью resourceStart(...) - в onResourceStart основного ресурса. Или есть еще какие ли способы? P.S. Очень кстати понравилась одна фишка когда в ресурсе(e.g. main) мы создаем набор функций, затем обьявляем export в meta.xml. А потом из другого ресурса я получаю доступ к данным функциям с помощью export.main:func().Так можно делать только для функций, я не могу отправить например метатаблицу? И где вообще почитать про это. Link to comment
Kenix Posted March 11, 2015 Share Posted March 11, 2015 Экспортировать метатаблицы нельзя, придется встраивать тебе в каждый ресурс, увы. Link to comment
exians Posted March 11, 2015 Author Share Posted March 11, 2015 (edited) Экспортировать метатаблицы нельзя, придется встраивать тебе в каждый ресурс, увы. А если передавать функцию, которая уже вернет метатаблицу, вот пример Имеем 2 ресурса, главный main и побочный test из main экспортируем. -- main.lua addEventHandler("onResourceStart" , getRootElement(), function() local resource = getResourceFromName('test') startResource(resource) end ) function func() local Obj = { getString = function() local var = "Hello World" return var end, } return Obj end -- test.lua addEventHandler("onPlayerJoin" , getRootElement(), function() local Obj = exports.main:func() local var = Obj.getString() outputChatBox(var) end ) Данный пример у меня не работает(кто бы сомнивался, ведь ты так и сказал) но может я просто не правильно делаю, ведь по сути я просто функцию вызываю, которая передает метатаблицу. Если например вызвать функцию передающую строку, то все работает P.S. Поверхносный гугл показал, что я передаю вообще просто таблицу, их получается тоже нельзя передавать http://habrahabr.ru/post/228001/ P.P.S. Попробывал передать просто таблицу, все получилось. В ней значением ключа была не функция, строка. Какой то сыр бор в голове)) Edited March 11, 2015 by Guest Link to comment
Elengar Posted March 11, 2015 Share Posted March 11, 2015 Как я понимаю, это справедливо в рамках одного ресурса, можно ли как то выбрать порядок загрузки ресурсов? Например с помошью resourceStart(...) - в onResourceStart основного ресурса. Или есть еще какие ли способы? Можно сделать гланвый ресурс, который подгрузит все остальные. Правильно, onResourceStart, resourceStart(...) . На форуме вместо тега code используй тег lua. Link to comment
Kenix Posted March 11, 2015 Share Posted March 11, 2015 Функции нельзя передавать через exports. Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now