elixirhope Posted November 28, 2014 Share Posted November 28, 2014 (edited) Здравствуйте, уважаемые форумчане, поделитесь информацией о том, как сделать 1-ый скрипт новичку с простейшей функцией и что самое главное - как его упаковать и как запустить на сервере mta 1.4, как правильно заполнить meta.xml, а точнее script type="server" (когда ставить server и когда client); type="misc" (какие типы бывают и от чего зависит тот или иной, когда их ставить) За все ответы буду признателен, только не оффтопьте, я новичок, так что проявите толерантность... p.s Тему буду дополнять различными вопросами, дабы не забивать форум всяким шлаком. Edited November 28, 2014 by Guest Link to comment
Kenix Posted November 28, 2014 Share Posted November 28, 2014 https://wiki.multitheftauto.com/index.ph ... troduction Link to comment
Memory Posted November 28, 2014 Share Posted November 28, 2014 Почитайте https://wiki.multitheftauto.com/index.php?title=RU/Main_Page, там есть ответы на все ваши вопросы, которые вы задали. И если возникнут вопросы или что-то не поймёте, обращайтесь. Link to comment
elixirhope Posted November 28, 2014 Author Share Posted November 28, 2014 В целом спасибо, начал учиться и вот вопрос, у меня есть 3 переменные, у каждой переменной свое значение, как мне вывести значение 3-ех переменных в одну строку через пробел? Link to comment
GTA-Multiplayer.com Posted November 28, 2014 Share Posted November 28, 2014 В целом спасибо, начал учиться и вот вопрос, у меня есть 3 переменные, у каждой переменной свое значение, как мне вывести значение 3-ех переменных в одну строку через пробел? В МТА значения можно вывести разными путями: в консоль, в чат и т.д. На вики функции сгруппированы по общему смыслу, группа функций "Output" содержит то, что вам нужно. Ну и доки по Lua пригодятся: http://www.lua.ru/doc/ Link to comment
elixirhope Posted November 28, 2014 Author Share Posted November 28, 2014 В целом спасибо, начал учиться и вот вопрос, у меня есть 3 переменные, у каждой переменной свое значение, как мне вывести значение 3-ех переменных в одну строку через пробел? В МТА значения можно вывести разными путями: в консоль, в чат и т.д. На вики функции сгруппированы по общему смыслу, группа функций "Output" содержит то, что вам нужно. Ну и доки по Lua пригодятся: http://www.lua.ru/doc/ Спасибо, изучу, но все же если можно, дайте пример c выводом переменных a, b, c в outputChatBox Переменные: a = "Я" b = "Люблю" c = "MTA" Link to comment
FranklinRoosevelt Posted November 28, 2014 Share Posted November 28, 2014 Спасибо, изучу, но все же если можно, дайте пример c выводом переменных a, b, c в outputChatBoxПеременные: a = "Я" b = "Люблю" c = "MTA" function oup_put(thePlayer, com, arg1, arg2, arg3) -- присвоение функции outputChatBox(arg1.." "..arg2.." "..arg3, thePlayer) -- сам вивод end addCommandHandler("output", oup_put) -- обработчик команды Вот код, на стороне сервера, когда в игре вводишь команду /output [текст 1] [текст 2] [текст 3], оно выводит тебе их по порядку в чат. ".." (две точки) - это склеивание Link to comment
Other Languages Moderators Disinterpreter Posted November 29, 2014 Other Languages Moderators Share Posted November 29, 2014 В отличии от рашп, Lua используется во могих играх, поэтому стоит почитать это viewtopic.php?f=141&t=32458 Link to comment
elixirhope Posted November 29, 2014 Author Share Posted November 29, 2014 Спасибо, еще вопрос, в чем ошибка, решил написать точку спавна: function spawnPoint(source) spawnPlayer ( source, 0.0, 0.0, 0.0, 90.0, 0 ) end addEventHandler("onResourceStart", getRootElement(), spawnPoint) addEventHandler("onPlayerJoin", getRootElement(), spawnPoint) addEventHandler("onPlayerWasted", getRootElement(), spawnPoint) Debug: [14:37:09] start: Requested by Console [14:37:09] WARNING: mapmanager\mapmanager_main.lua:23: Bad argument @ 'getResourceName' [Expected resource-data at argument 1] [14:37:09] ERROR: mapmanager\mapmanager_main.lua:23: attempt to concatenate a boolean value [14:37:09] Starting spawn [14:37:09] WARNING: [gameplay]\spawn\spawn.lua:2: Bad argument @ 'spawnPlayer' [Expected player at argument 1, got resource-data] [14:37:09] start: Resource 'spawn' started Link to comment
Elengar Posted November 29, 2014 Share Posted November 29, 2014 function oup_put(thePlayer, com, arg1, arg2, arg3) -- присвоение функции outputChatBox(arg1.." "..arg2.." "..arg3, thePlayer) -- сам вивод end addCommandHandler("output", oup_put) -- обработчик команды Вот код, на стороне сервера, когда в игре вводишь команду /output [текст 1] [текст 2] [текст 3], оно выводит тебе их по порядку в чат. ".." (две точки) - это склеивание Нужно приводить пример именно с того, с чего просят, особенно для новичков. Эта крутая функция оуп_пут тут явно не нужна. a = "Я" b = "Люблю" c = "MTA" outputChatBox(a .. " " .. b .. " " .. c) ______________________________________________ Спасибо, еще вопрос, в чем ошибка, решил написать точку спавна: function spawnPoint(source) spawnPlayer ( source, 0.0, 0.0, 0.0, 90.0, 0 ) end addEventHandler("onResourceStart", getRootElement(), spawnPoint) addEventHandler("onPlayerJoin", getRootElement(), spawnPoint) addEventHandler("onPlayerWasted", getRootElement(), spawnPoint) Debug: [14:37:09] start: Requested by Console [14:37:09] WARNING: mapmanager\mapmanager_main.lua:23: Bad argument @ 'getResourceName' [Expected resource-data at argument 1] [14:37:09] ERROR: mapmanager\mapmanager_main.lua:23: attempt to concatenate a boolean value [14:37:09] Starting spawn [14:37:09] WARNING: [gameplay]\spawn\spawn.lua:2: Bad argument @ 'spawnPlayer' [Expected player at argument 1, got resource-data] [14:37:09] start: Resource 'spawn' started Код в тег lua ставь, а не в code У тебя проблема в том, что ивент addEventHandler("onResourceStart", getRootElement(), spawnPoint) он срабатывает при запуске ресурсов, и никакого отношения к игрокам не имеет. Он тебе в функцию не игрока передает, а ресурс, который запустился. Этот ивент, кстати, написан не правильно. getRootElement() возвращает root, это начало дерева всех элементов, ресурсов... вообще всего. Тоесть у тебя этот ивент будет срабатывать при запуске каждого ресурса, а тебе нужно только этого. Для "только этого" нужно использовать getResourceRootElement(getThisResource()) или же, более просто, предопределенную переменную resourceRoot Твоя функция не подходит для спавна всех игроков при запуске ресурса. И чтобы не делать какие-то, не понятные для новичка, конструкции в одной функции - сделай другую функцию, и на нее повесь этот ивент. Для "всех игроков" используй getElementsByType вообщем, попробуй сделать это сам, на вики есть пример по этой функции. Если будут проблемы - пиши сюда. Link to comment
Easterdie Posted November 29, 2014 Share Posted November 29, 2014 начни с самого простого - возьми какой-нибудь большой скрипт, вырежи из него всё по максимум, оставь там буквально 5-6 строк, после этого начни добавлять какие-либо функции, через пару дней ты сможешь оформить самые простые вещи, такие, как пикап, который при взятии пишет что-то в чат, например Link to comment
elixirhope Posted November 30, 2014 Author Share Posted November 30, 2014 Спасибо за ответы :3, назрели еще вопросы: 1. За что отвечает параметр "startup" и "protected" в mtaserver.conf? 2. Какая версия языка lua сейчас используется в mta? 3. Как сделать так, чтобы при вводе несуществующей команды в чат выводилось определенное сообщение? Link to comment
Elengar Posted November 30, 2014 Share Posted November 30, 2014 Спасибо за ответы :3, назрели еще вопросы:1. За что отвечает параметр "startup" и "protected" в mtaserver.conf? 2. Какая версия языка lua сейчас используется в mta? 3. Как сделать так, чтобы при вводе несуществующей команды в чат выводилось определенное сообщение? 1. startup=1 - Запуск ресурса при запуске сервера protected=1 - ресурс нельзя будет выключить(совсем ли нельзя - хз, не использовал никогда его) 2. 5.1, в Lua есть предопредленная переменная _VERSION, содержащая строку версии интерпретатора 3. Я не уверен, но, наверное, никак. Вроде бы, даже недавно просили добавить функцию getAllCommands или что-то такое. Можно попробовать сделать некоторый костыль через. onPlayerCommand -- ивент executeCommandHandler Что-то типа выполнить данную комманду + пометить игрока и эту команду как проверяемую. И такие проверяемые команды в onPlayerCommand отменять. Хотя, я вот не знаю, что в таком случае вернет executeCommandHandler Link to comment
Kernell Posted November 30, 2014 Share Posted November 30, 2014 По поводу третьего пункта. Можно использовать событие onPlayerCommand в связке с addCommandHandler Событие onPlayerCommand вызывается при вводе любой команды, даже если её нет, и при вводе встроенных команд, таких как /say, поэтому важно создать белый список, чтобы игнорировать ввод. local commands = {}; _addCommandHandler = addCommandHandler; function addCommandHandler( cmd, callback, restricted, caseSensitive ) commands[ cmd ] = true; return _addCommandHandler( cmd, callback, restricted, caseSensitive ); end local hardcodedCommands = { say = true; me = true; -- полный список тут: [url=https://wiki.multitheftauto.com/wiki/Console_Commands_and_CVars]https://wiki.multitheftauto.com/wiki/Co ... _and_CVars[/url] }; function onPlayerCommand( command ) if hardcodedCommands[ command ] or commands[ command ] then return; end outputChatBox( command .. ": not found", source, 255, 255, 255 ); end addEventHandler( "onPlayerCommand", root, onPlayerCommand ); Если что-то не понятно - спрашивай. Link to comment
Elengar Posted November 30, 2014 Share Posted November 30, 2014 (edited) По поводу третьего пункта.Можно использовать событие onPlayerCommand в связке с addCommandHandler Событие onPlayerCommand вызывается при вводе любой команды, даже если её нет, и при вводе встроенных команд, таких как /say, поэтому важно создать белый список, чтобы игнорировать ввод. local commands = {}; _addCommandHandler = addCommandHandler; function addCommandHandler( cmd, callback, restricted, caseSensitive ) commands[ cmd ] = true; return _addCommandHandler( cmd, callback, restricted, caseSensitive ); end local hardcodedCommands = { say = true; me = true; -- полный список тут: [url=https://wiki.multitheftauto.com/wiki/Console_Commands_and_CVars]https://wiki.multitheftauto.com/wiki/Co ... _and_CVars[/url] }; function onPlayerCommand( command ) if hardcodedCommands[ command ] or commands[ command ] then return; end outputChatBox( command .. ": not found", source, 255, 255, 255 ); end addEventHandler( "onPlayerCommand", root, onPlayerCommand ); Если что-то не понятно - спрашивай. Для ТС: Такая подмена функция работает только в одном ресурсе. Писать большой мод в одном ресурсе, на мой взгляд, не очень хорошо. Хотя, в данном случае - хорошо. Даже если таблицу белых команд сделать на все ресурсы, подменять функции всё равно придется отдельно и в каждом. Не думаю, что желаемый результат стоит таких трюков. Особенно на начальном этапе. Edited December 1, 2014 by Guest Link to comment
The Creator Posted November 30, 2014 Share Posted November 30, 2014 Писать большой мод в одном ресурсе, как по мне, не очень хорошо. Почему так считаете? Link to comment
Elengar Posted December 1, 2014 Share Posted December 1, 2014 Писать большой мод в одном ресурсе, как по мне, не очень хорошо. Почему так считаете? Не удобность изменения чего-либо при запущенном сервере... Вообще... Кроме этого даже ничего не приходит на мысль. Я собираюсь в скором времени проводить некоторые испытания, может-быть они изменят мою точку зрения. Link to comment
GTA-Multiplayer.com Posted December 1, 2014 Share Posted December 1, 2014 Не удобность изменения чего-либо при запущенном сервере... Вообще... Кроме этого даже ничего не приходит на мысль. Я собираюсь в скором времени проводить некоторые испытания, может-быть они изменят мою точку зрения. Ждем результатов исследования У меня все в одном ресурсе и думаю, что так лучше чем много ресурсов. И со стороны разработки (человеку удобнее поддерживать один проект) и, предполагаю, со стороны исполнения. Link to comment
Elengar Posted December 1, 2014 Share Posted December 1, 2014 Не удобность изменения чего-либо при запущенном сервере... Вообще... Кроме этого даже ничего не приходит на мысль. Я собираюсь в скором времени проводить некоторые испытания, может-быть они изменят мою точку зрения. Ждем результатов исследования У меня все в одном ресурсе и думаю, что так лучше чем много ресурсов. И со стороны разработки (человеку удобнее поддерживать один проект) и, предполагаю, со стороны исполнения. Ну, исследования я чисто для себя буду проводить. Методом тыка выяснять, что же лучше. Вообще, если хорошо уметь пользоваться деревом элементов, то с модами не в одном ресурсе проблемы возникают только с подключением библиотек в каждый ресурс и подключением разных файлов с данными. Хотя, можно и сделать экспорт этого во все ресурсы. Link to comment
Kernell Posted December 1, 2014 Share Posted December 1, 2014 Для ТС:Такая подмена функция работает только в одном ресурсе. Писать большой мод в одном ресурсе, на мой взгляд, не очень хорошо. Хотя, в данном случае - хорошо. Даже если таблицу белых команд сделать на все ресурсы, подменять функции всё равно придется отдельно и в каждом. Не думаю, что желаемый результат стоит таких трюков. Особенно на начальном этапе. Экспорты в помощь. Более того, ничто не мешает создать специальный ресурс для обработки команд - как отдельная логика (в связке с экспортами). Link to comment
lil Toady Posted December 3, 2014 Share Posted December 3, 2014 Что приходит на ум: 1. Логическое разделение, само по себе полезно; 2. На "живом" сервере проще перезапустить часть общей системы, чем общий ресурс; 3. Один ресурс еще и дольше перезапускается; 4. Четкое разделение прав - а это безопасность вашего сервера (не стоит делать админку, там же где и все остальное); 5. Коллизия глобальных переменных - это особенно относится к процедурному программированию. Глобальная среда растет, избежать коллизии, все труднее. Более того, чем больше одна Lua среда - тем медленнее она работает (хоть и не очень значительно); Опять же, для взаимодействия между скриптами можно использовать не только экспорты, но и собственные эвенты. Да и если посмотреть на опыт крупных серверов, можно заметить что они предпочитают разбивать логику на разные ресурсы. Link to comment
The Creator Posted December 3, 2014 Share Posted December 3, 2014 Экспортами пользоваться не очень уж удобно. По крайней мере мне так кажется. Какие альтернативы могли бы посоветовать? P.S. Кажется тема топика переросла в "другое русло". Может стоит создать отдельную тему? Link to comment
Elengar Posted December 3, 2014 Share Posted December 3, 2014 Экспортами пользоваться не очень уж удобно. По крайней мере мне так кажется. Какие альтернативы могли бы посоветовать? P.S. Кажется тема топика переросла в "другое русло". Может стоит создать отдельную тему? Делать копии функций из экспортов exportedFunction = exports.resource:exportedFunction exportedFunction() --вместо exports.resource:exportedFunction() Link to comment
The Creator Posted December 3, 2014 Share Posted December 3, 2014 Делать копии функций из экспортов exportedFunction = exports.resource:exportedFunction exportedFunction() --вместо exports.resource:exportedFunction() Думаю все же передавать перед эвенты, так для меня удобнее. Тем более методы нельзя экспортировать, насколько я понимаю. P.S. Использую эту библиотеку для ООП. Link to comment
FranklinRoosevelt Posted December 3, 2014 Share Posted December 3, 2014 Экспортами пользоваться не очень уж удобно. По крайней мере мне так кажется. Какие альтернативы могли бы посоветовать? P.S. Кажется тема топика переросла в "другое русло". Может стоит создать отдельную тему? Неудобно в плане нагрузки или использования? 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